[{"data":1,"prerenderedAt":174410},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-chuang-jian-shu-zu":3,"wiki-doc-nav":1751},{"id":4,"title":5,"body":6,"description":1744,"extension":1745,"meta":1746,"navigation":1474,"path":1747,"seo":1748,"stem":1749,"__hash__":1750},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":8,"toc":1714},"minimark",[9,13,18,23,102,106,112,116,121,126,131,136,139,144,148,152,192,195,198,201,258,261,302,305,349,353,376,378,418,420,425,427,432,436,439,468,472,476,533,537,639,643,647,650,655,659,684,689,693,696,699,702,705,708,711,714,727,731,735,738,770,773,797,800,826,829,856,859,893,896,959,963,966,970,973,1001,1004,1007,1012,1015,1088,1091,1096,1159,1162,1174,1180,1185,1189,1192,1206,1210,1225,1228,1252,1255,1281,1284,1287,1290,1341,1343,1348,1352,1357,1384,1388,1415,1418,1423,1428,1523,1527,1585,1590,1593,1596,1639,1643,1699,1704,1707,1710],[10,11,5],"h1",{"id":12},"_2创建数组",[14,15,17],"h2",{"id":16},"_21-array函数创建数组","2.1 array()函数创建数组",[19,20,22],"h3",{"id":21},"_221-函数语句","2.2.1 函数语句",[24,25,30],"pre",{"className":26,"code":27,"language":28,"meta":29,"style":29},"language-python shiki shiki-themes github-light github-dark","numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n","python","",[31,32,33],"code",{"__ignoreMap":29},[34,35,38,42,46,49,53,57,60,62,65,67,70,72,75,77,79,81,84,86,89,91,94,96,99],"span",{"class":36,"line":37},"line",1,[34,39,41],{"class":40},"sVt8B","numpy.array(",[34,43,45],{"class":44},"sj4cs","object",[34,47,48],{"class":40},", ",[34,50,52],{"class":51},"s4XuR","dtype",[34,54,56],{"class":55},"szBVR"," =",[34,58,59],{"class":44}," None",[34,61,48],{"class":40},[34,63,64],{"class":51},"copy",[34,66,56],{"class":55},[34,68,69],{"class":44}," True",[34,71,48],{"class":40},[34,73,74],{"class":51},"order",[34,76,56],{"class":55},[34,78,59],{"class":44},[34,80,48],{"class":40},[34,82,83],{"class":51},"subok",[34,85,56],{"class":55},[34,87,88],{"class":44}," False",[34,90,48],{"class":40},[34,92,93],{"class":51},"ndmin",[34,95,56],{"class":55},[34,97,98],{"class":44}," 0",[34,100,101],{"class":40},")\n",[103,104,105],"p",{},"参数：",[103,107,108],{},[109,110],"img",{"alt":29,"src":111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[19,113,115],{"id":114},"_222-实例","2.2.2 实例",[103,117,118],{},[109,119],{"alt":29,"src":120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[103,122,123],{},[109,124],{"alt":29,"src":125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[103,127,128],{},[109,129],{"alt":29,"src":130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[103,132,133],{},[109,134],{"alt":29,"src":135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[103,137,138],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[103,140,141],{},[109,142],{"alt":29,"src":143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,145,147],{"id":146},"_22-随机数创建数组","2.2 随机数创建数组",[19,149,151],{"id":150},"_221-random语句","2.2.1 random语句",[24,153,155],{"className":26,"code":154,"language":28,"meta":29,"style":29},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[31,156,157,163,169,180,186],{"__ignoreMap":29},[34,158,159],{"class":36,"line":37},[34,160,162],{"class":161},"sJ8bj","#random.random()\n",[34,164,166],{"class":36,"line":165},2,[34,167,168],{"class":161},"#确定随机种子,就是每次运行结果是相同的\n",[34,170,172,175,178],{"class":36,"line":171},3,[34,173,174],{"class":40},"np.random.seed(",[34,176,177],{"class":44},"0",[34,179,101],{"class":40},[34,181,183],{"class":36,"line":182},4,[34,184,185],{"class":40},"np.random.random()\n",[34,187,189],{"class":36,"line":188},5,[34,190,191],{"class":161},"#生成一个随机的数目\n",[103,193,194],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[103,196,197],{},"可以指定数组形状 size",[103,199,200],{},"①生成一维数组",[24,202,204],{"className":26,"code":203,"language":28,"meta":29,"style":29},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[31,205,206,211,227,232,250],{"__ignoreMap":29},[34,207,208],{"class":36,"line":37},[34,209,210],{"class":161},"#random.random(size())\n",[34,212,213,216,219,222,225],{"class":36,"line":165},[34,214,215],{"class":40},"np.random.random(",[34,217,218],{"class":51},"size",[34,220,221],{"class":55},"=",[34,223,224],{"class":44},"5",[34,226,101],{"class":40},[34,228,229],{"class":36,"line":171},[34,230,231],{"class":161},"#生成一位的五个元素\n",[34,233,234,237,239,241,243,245,248],{"class":36,"line":182},[34,235,236],{"class":40},"a",[34,238,221],{"class":55},[34,240,215],{"class":40},[34,242,218],{"class":51},[34,244,221],{"class":55},[34,246,247],{"class":44},"4",[34,249,101],{"class":40},[34,251,252,255],{"class":36,"line":188},[34,253,254],{"class":40},"a.shape ",[34,256,257],{"class":161},"#输出数组形状\n",[103,259,260],{},"②生成二维数组",[24,262,264],{"className":26,"code":263,"language":28,"meta":29,"style":29},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[31,265,266,271,297],{"__ignoreMap":29},[34,267,268],{"class":36,"line":37},[34,269,270],{"class":161},"#二维数组\n",[34,272,273,276,278,280,282,284,287,289,292,294],{"class":36,"line":165},[34,274,275],{"class":40},"aa",[34,277,221],{"class":55},[34,279,215],{"class":40},[34,281,218],{"class":51},[34,283,221],{"class":55},[34,285,286],{"class":40},"(",[34,288,247],{"class":44},[34,290,291],{"class":40},",",[34,293,224],{"class":44},[34,295,296],{"class":40},"))\n",[34,298,299],{"class":36,"line":171},[34,300,301],{"class":161},"#生成四行五列的数组\n",[103,303,304],{},"③生成三维数组",[24,306,308],{"className":26,"code":307,"language":28,"meta":29,"style":29},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[31,309,310,315,344],{"__ignoreMap":29},[34,311,312],{"class":36,"line":37},[34,313,314],{"class":161},"#三维数组\n",[34,316,317,320,322,324,326,328,330,333,335,338,340,342],{"class":36,"line":165},[34,318,319],{"class":40},"aaa",[34,321,221],{"class":55},[34,323,215],{"class":40},[34,325,218],{"class":51},[34,327,221],{"class":55},[34,329,286],{"class":40},[34,331,332],{"class":44},"2",[34,334,291],{"class":40},[34,336,337],{"class":44},"3",[34,339,291],{"class":40},[34,341,247],{"class":44},[34,343,296],{"class":40},[34,345,346],{"class":36,"line":171},[34,347,348],{"class":40},"aaa.shape\n",[19,350,352],{"id":351},"_222-randint语句","2.2.2 randint语句",[24,354,356],{"className":26,"code":355,"language":28,"meta":29,"style":29},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[31,357,358,363],{"__ignoreMap":29},[34,359,360],{"class":36,"line":37},[34,361,362],{"class":161},"#生成随机的整数 random.randint(low,high,size)\n",[34,364,365,368,370,373],{"class":36,"line":165},[34,366,367],{"class":40},"np.random.randint(",[34,369,224],{"class":44},[34,371,372],{"class":40},") ",[34,374,375],{"class":161},"#0~5中的随机一个数\n",[103,377,200],{},[24,379,381],{"className":26,"code":380,"language":28,"meta":29,"style":29},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[31,382,383,388,413],{"__ignoreMap":29},[34,384,385],{"class":36,"line":37},[34,386,387],{"class":161},"#一维\n",[34,389,390,392,395,397,400,402,404,406,408,411],{"class":36,"line":165},[34,391,367],{"class":40},[34,393,394],{"class":44},"1",[34,396,291],{"class":40},[34,398,399],{"class":44},"11",[34,401,291],{"class":40},[34,403,218],{"class":51},[34,405,221],{"class":55},[34,407,286],{"class":40},[34,409,410],{"class":44},"10",[34,412,296],{"class":40},[34,414,415],{"class":36,"line":171},[34,416,417],{"class":161},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[103,419,260],{},[103,421,422],{},[109,423],{"alt":29,"src":424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[103,426,304],{},[103,428,429],{},[109,430],{"alt":29,"src":431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[19,433,435],{"id":434},"_222-rand语句","2.2.2 rand语句",[103,437,438],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[24,440,442],{"className":26,"code":441,"language":28,"meta":29,"style":29},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[31,443,444,458,463],{"__ignoreMap":29},[34,445,446,449,452,454,456],{"class":36,"line":37},[34,447,448],{"class":40},"np.random.rand(",[34,450,451],{"class":44},"100",[34,453,291],{"class":40},[34,455,410],{"class":44},[34,457,101],{"class":40},[34,459,460],{"class":36,"line":165},[34,461,462],{"class":161},"#第一个参数100：行数，表示有100个样本\n",[34,464,465],{"class":36,"line":171},[34,466,467],{"class":161},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,469,471],{"id":470},"_23-arange创建数组","2.3 arange()创建数组",[19,473,475],{"id":474},"_231-函数语句","2.3.1 函数语句",[24,477,479],{"className":26,"code":478,"language":28,"meta":29,"style":29},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[31,480,481,495,500,506,511,516,522,528],{"__ignoreMap":29},[34,482,483,486,488,490,493],{"class":36,"line":37},[34,484,485],{"class":40},"numpy.arange([start,] stop[, step], ",[34,487,52],{"class":51},[34,489,221],{"class":55},[34,491,492],{"class":44},"None",[34,494,101],{"class":40},[34,496,497],{"class":36,"line":165},[34,498,499],{"class":161},"#参数\n",[34,501,502],{"class":36,"line":171},[34,503,505],{"class":504},"sZZnC","\"\"\"\n",[34,507,508],{"class":36,"line":182},[34,509,510],{"class":504},"start:起始值，可选，默认从 0 开始。\n",[34,512,513],{"class":36,"line":188},[34,514,515],{"class":504},"stop:结束值（不包含该值）。\n",[34,517,519],{"class":36,"line":518},6,[34,520,521],{"class":504},"step:步长，可选，默认是 1。可以为浮点数。\n",[34,523,525],{"class":36,"line":524},7,[34,526,527],{"class":504},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[34,529,531],{"class":36,"line":530},8,[34,532,505],{"class":504},[19,534,536],{"id":535},"_232-实例","2.3.2 实例",[24,538,540],{"className":26,"code":539,"language":28,"meta":29,"style":29},"#创建一维数组\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",[31,541,542,547,574,579,584,589,613,618,622,628,634],{"__ignoreMap":29},[34,543,544],{"class":36,"line":37},[34,545,546],{"class":161},"#创建一维数组\n",[34,548,549,552,554,556,559,561,563,565,567,569,572],{"class":36,"line":165},[34,550,551],{"class":40},"np.arange(",[34,553,394],{"class":44},[34,555,291],{"class":40},[34,557,558],{"class":44},"21",[34,560,291],{"class":40},[34,562,394],{"class":44},[34,564,291],{"class":40},[34,566,52],{"class":51},[34,568,221],{"class":55},[34,570,571],{"class":44},"int",[34,573,101],{"class":40},[34,575,576],{"class":36,"line":171},[34,577,578],{"class":161},"#输出结果：\n",[34,580,581],{"class":36,"line":182},[34,582,583],{"class":161},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[34,585,586],{"class":36,"line":188},[34,587,588],{"class":161},"#创建二维数组\n",[34,590,591,594,596,598,600,603,605,607,610],{"class":36,"line":518},[34,592,593],{"class":40},"np.array([np.arange(",[34,595,394],{"class":44},[34,597,291],{"class":40},[34,599,247],{"class":44},[34,601,602],{"class":40},"),np.arange(",[34,604,247],{"class":44},[34,606,291],{"class":40},[34,608,609],{"class":44},"7",[34,611,612],{"class":40},")])\n",[34,614,615],{"class":36,"line":524},[34,616,617],{"class":161},"#结果：\n",[34,619,620],{"class":36,"line":530},[34,621,505],{"class":504},[34,623,625],{"class":36,"line":624},9,[34,626,627],{"class":504},"array([[1, 2, 3],\n",[34,629,631],{"class":36,"line":630},10,[34,632,633],{"class":504},"       [4, 5, 6]])\n",[34,635,637],{"class":36,"line":636},11,[34,638,505],{"class":504},[14,640,642],{"id":641},"_24-生态分布","2.4 生态分布",[19,644,646],{"id":645},"_241-标准正态分布","2.4.1 标准正态分布",[103,648,649],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[103,651,652],{},[109,653],{"alt":29,"src":654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[19,656,658],{"id":657},"_242-常规正态分布","2.4.2 常规正态分布",[24,660,662],{"className":26,"code":661,"language":28,"meta":29,"style":29},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[31,663,664,669,674,679],{"__ignoreMap":29},[34,665,666],{"class":36,"line":37},[34,667,668],{"class":40},"random.normal(loc,scale,size)也可以生成正态分布\n",[34,670,671],{"class":36,"line":165},[34,672,673],{"class":161},"#loc:期望\n",[34,675,676],{"class":36,"line":171},[34,677,678],{"class":161},"#scale:方差\n",[34,680,681],{"class":36,"line":182},[34,682,683],{"class":161},"#size:用于确定是几维的数列\n",[103,685,686],{},[109,687],{"alt":29,"src":688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,690,692],{"id":691},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[103,694,695],{},"ndim:秩，维度个数",[103,697,698],{},"size:数组元素的个数",[103,700,701],{},"shape:数组的形状",[103,703,704],{},"dtype:数组元素的类型",[103,706,707],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[103,709,710],{},"他们都是属性，通过数组.属性的形式来确定",[103,712,713],{},"如果需要输出多个可以通过以下方式：",[24,715,717],{"className":26,"code":716,"language":28,"meta":29,"style":29},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[31,718,719],{"__ignoreMap":29},[34,720,721,724],{"class":36,"line":37},[34,722,723],{"class":44},"print",[34,725,726],{"class":40},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,728,730],{"id":729},"_26-其他方式创建数组","2.6 其他方式创建数组",[19,732,734],{"id":733},"_261-zeros创建数组","2.6.1 zeros()创建数组",[103,736,737],{},"①创建一维数组",[24,739,741],{"className":26,"code":740,"language":28,"meta":29,"style":29},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[31,742,743,752,756,761,766],{"__ignoreMap":29},[34,744,745,748,750],{"class":36,"line":37},[34,746,747],{"class":40},"np.zeros(",[34,749,410],{"class":44},[34,751,101],{"class":40},[34,753,754],{"class":36,"line":165},[34,755,505],{"class":504},[34,757,758],{"class":36,"line":171},[34,759,760],{"class":504},"输出结果：\n",[34,762,763],{"class":36,"line":182},[34,764,765],{"class":504},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[34,767,768],{"class":36,"line":188},[34,769,505],{"class":504},[103,771,772],{},"上方代码等价于：",[24,774,776],{"className":26,"code":775,"language":28,"meta":29,"style":29},"np.zeros(shape=(10))#创建10个元素的0数组\n",[31,777,778],{"__ignoreMap":29},[34,779,780,782,785,787,789,791,794],{"class":36,"line":37},[34,781,747],{"class":40},[34,783,784],{"class":51},"shape",[34,786,221],{"class":55},[34,788,286],{"class":40},[34,790,410],{"class":44},[34,792,793],{"class":40},"))",[34,795,796],{"class":161},"#创建10个元素的0数组\n",[103,798,799],{},"也可以指定类型",[24,801,803],{"className":26,"code":802,"language":28,"meta":29,"style":29},"#指定类型\nnp.zeros(5,dtype=int)\n",[31,804,805,810],{"__ignoreMap":29},[34,806,807],{"class":36,"line":37},[34,808,809],{"class":161},"#指定类型\n",[34,811,812,814,816,818,820,822,824],{"class":36,"line":165},[34,813,747],{"class":40},[34,815,224],{"class":44},[34,817,291],{"class":40},[34,819,52],{"class":51},[34,821,221],{"class":55},[34,823,571],{"class":44},[34,825,101],{"class":40},[103,827,828],{},"②创建二维数组",[24,830,832],{"className":26,"code":831,"language":28,"meta":29,"style":29},"np.zeros((3,4),dtype=int)\n",[31,833,834],{"__ignoreMap":29},[34,835,836,839,841,843,845,848,850,852,854],{"class":36,"line":37},[34,837,838],{"class":40},"np.zeros((",[34,840,337],{"class":44},[34,842,291],{"class":40},[34,844,247],{"class":44},[34,846,847],{"class":40},"),",[34,849,52],{"class":51},[34,851,221],{"class":55},[34,853,571],{"class":44},[34,855,101],{"class":40},[103,857,858],{},"③创建三维数组",[24,860,862],{"className":26,"code":861,"language":28,"meta":29,"style":29},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[31,863,864,869],{"__ignoreMap":29},[34,865,866],{"class":36,"line":37},[34,867,868],{"class":161},"#创建三维数组\n",[34,870,871,873,875,877,879,881,883,885,887,889,891],{"class":36,"line":165},[34,872,838],{"class":40},[34,874,337],{"class":44},[34,876,291],{"class":40},[34,878,247],{"class":44},[34,880,291],{"class":40},[34,882,224],{"class":44},[34,884,847],{"class":40},[34,886,52],{"class":51},[34,888,221],{"class":55},[34,890,571],{"class":44},[34,892,101],{"class":40},[103,894,895],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[24,897,899],{"className":26,"code":898,"language":28,"meta":29,"style":29},"#使用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",[31,900,901,906,922,927,932,954],{"__ignoreMap":29},[34,902,903],{"class":36,"line":37},[34,904,905],{"class":161},"#使用zeros_like将创建的一维数组变成全0的数组\n",[34,907,908,910,912,914,916,919],{"class":36,"line":165},[34,909,236],{"class":40},[34,911,221],{"class":55},[34,913,551],{"class":40},[34,915,247],{"class":44},[34,917,918],{"class":40},")",[34,920,921],{"class":161},"#这个得到的结果：一维数组0，1，2，3\n",[34,923,924],{"class":36,"line":171},[34,925,926],{"class":40},"np.zeros_like(a)\n",[34,928,929],{"class":36,"line":182},[34,930,931],{"class":161},"#使用zeros_like将创建的二维数组变成全0的数组\n",[34,933,934,936,938,940,942,944,946,948,950,952],{"class":36,"line":188},[34,935,275],{"class":40},[34,937,221],{"class":55},[34,939,215],{"class":40},[34,941,218],{"class":51},[34,943,221],{"class":55},[34,945,286],{"class":40},[34,947,247],{"class":44},[34,949,291],{"class":40},[34,951,224],{"class":44},[34,953,296],{"class":40},[34,955,956],{"class":36,"line":518},[34,957,958],{"class":40},"np.zeros_like(aa)\n",[19,960,962],{"id":961},"_262-ones创建数组","2.6.2 ones()创建数组",[103,964,965],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[19,967,969],{"id":968},"_263-empty创建数组","2.6.3 empty()创建数组",[103,971,972],{},"①empty()用法",[24,974,976],{"className":26,"code":975,"language":28,"meta":29,"style":29},"numpy.empty(shape,dtype=float,order='c')\n",[31,977,978],{"__ignoreMap":29},[34,979,980,983,985,987,990,992,994,996,999],{"class":36,"line":37},[34,981,982],{"class":40},"numpy.empty(shape,",[34,984,52],{"class":51},[34,986,221],{"class":55},[34,988,989],{"class":44},"float",[34,991,291],{"class":40},[34,993,74],{"class":51},[34,995,221],{"class":55},[34,997,998],{"class":504},"'c'",[34,1000,101],{"class":40},[103,1002,1003],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[103,1005,1006],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[103,1008,1009],{},[109,1010],{"alt":29,"src":1011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[103,1013,1014],{},"②empty()用法",[24,1016,1018],{"className":26,"code":1017,"language":28,"meta":29,"style":29},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[31,1019,1020,1042,1055,1078,1083],{"__ignoreMap":29},[34,1021,1022,1025,1027,1030,1032,1034,1036,1038,1040],{"class":36,"line":37},[34,1023,1024],{"class":40},"y",[34,1026,221],{"class":55},[34,1028,1029],{"class":40},"np.empty(",[34,1031,410],{"class":44},[34,1033,291],{"class":40},[34,1035,52],{"class":51},[34,1037,221],{"class":55},[34,1039,571],{"class":44},[34,1041,101],{"class":40},[34,1043,1044,1047,1049,1051,1053],{"class":36,"line":165},[34,1045,1046],{"class":40},"x",[34,1048,221],{"class":55},[34,1050,551],{"class":40},[34,1052,224],{"class":44},[34,1054,101],{"class":40},[34,1056,1057,1060,1062,1065,1068,1070,1073,1075],{"class":36,"line":171},[34,1058,1059],{"class":40},"np.add(",[34,1061,332],{"class":44},[34,1063,1064],{"class":40},",x,",[34,1066,1067],{"class":51},"out",[34,1069,221],{"class":55},[34,1071,1072],{"class":40},"y[:",[34,1074,224],{"class":44},[34,1076,1077],{"class":40},"])\n",[34,1079,1080],{"class":36,"line":182},[34,1081,1082],{"class":161},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[34,1084,1085],{"class":36,"line":188},[34,1086,1087],{"class":40},"y\n",[103,1089,1090],{},"输出结果：",[103,1092,1093],{},[109,1094],{"alt":29,"src":1095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[24,1097,1099],{"className":26,"code":1098,"language":28,"meta":29,"style":29},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[31,1100,1101,1118,1138,1154],{"__ignoreMap":29},[34,1102,1103,1105,1107,1109,1111,1113,1116],{"class":36,"line":37},[34,1104,1046],{"class":40},[34,1106,221],{"class":55},[34,1108,551],{"class":40},[34,1110,394],{"class":44},[34,1112,291],{"class":40},[34,1114,1115],{"class":44},"6",[34,1117,101],{"class":40},[34,1119,1120,1122,1124,1126,1128,1130,1132,1134,1136],{"class":36,"line":165},[34,1121,1024],{"class":40},[34,1123,221],{"class":55},[34,1125,1029],{"class":40},[34,1127,224],{"class":44},[34,1129,291],{"class":40},[34,1131,52],{"class":51},[34,1133,221],{"class":55},[34,1135,571],{"class":44},[34,1137,101],{"class":40},[34,1139,1140,1143,1145,1147,1149,1151],{"class":36,"line":171},[34,1141,1142],{"class":40},"np.add(x,",[34,1144,332],{"class":44},[34,1146,291],{"class":40},[34,1148,1067],{"class":51},[34,1150,221],{"class":55},[34,1152,1153],{"class":40},"y)\n",[34,1155,1156],{"class":36,"line":182},[34,1157,1158],{"class":161},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[103,1160,1161],{},"③empty_like()",[103,1163,1164],{},[1165,1166,1167,1168,1173],"strong",{},"创建一个",[1165,1169,1170],{},[1165,1171,1172],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[103,1175,1176,1179],{},[31,1177,1178],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[103,1181,1182],{},[109,1183],{"alt":29,"src":1184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[19,1186,1188],{"id":1187},"_264-用法","2.6.4 ？？用法",[103,1190,1191],{},"当想查看一个函数的参数时，可以通过？？来实现",[24,1193,1195],{"className":26,"code":1194,"language":28,"meta":29,"style":29},"np.full??\n",[31,1196,1197],{"__ignoreMap":29},[34,1198,1199,1202],{"class":36,"line":37},[34,1200,1201],{"class":40},"np.full",[34,1203,1205],{"class":1204},"s7hpK","??\n",[19,1207,1209],{"id":1208},"_265-full创建数组","2.6.5 full()创建数组",[24,1211,1213],{"className":26,"code":1212,"language":28,"meta":29,"style":29},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[31,1214,1215,1220],{"__ignoreMap":29},[34,1216,1217],{"class":36,"line":37},[34,1218,1219],{"class":40},"full(shape,fill_value)\n",[34,1221,1222],{"class":36,"line":165},[34,1223,1224],{"class":40},"创建全为某个指定值的数组\n",[103,1226,1227],{},"①一维数组",[24,1229,1231],{"className":26,"code":1230,"language":28,"meta":29,"style":29},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[31,1232,1233,1238],{"__ignoreMap":29},[34,1234,1235],{"class":36,"line":37},[34,1236,1237],{"class":161},"#创建一个一维数组,以20进行填充\n",[34,1239,1240,1243,1245,1247,1250],{"class":36,"line":165},[34,1241,1242],{"class":40},"np.full(",[34,1244,410],{"class":44},[34,1246,291],{"class":40},[34,1248,1249],{"class":44},"20",[34,1251,101],{"class":40},[103,1253,1254],{},"②二维数组",[24,1256,1258],{"className":26,"code":1257,"language":28,"meta":29,"style":29},"#创建二维数组\nnp.full((3,5),11)\n",[31,1259,1260,1264],{"__ignoreMap":29},[34,1261,1262],{"class":36,"line":37},[34,1263,588],{"class":161},[34,1265,1266,1269,1271,1273,1275,1277,1279],{"class":36,"line":165},[34,1267,1268],{"class":40},"np.full((",[34,1270,337],{"class":44},[34,1272,291],{"class":40},[34,1274,224],{"class":44},[34,1276,847],{"class":40},[34,1278,399],{"class":44},[34,1280,101],{"class":40},[103,1282,1283],{},"③full_like用法",[103,1285,1286],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[103,1288,1289],{},"这里是指定填充而已",[24,1291,1293],{"className":26,"code":1292,"language":28,"meta":29,"style":29},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[31,1294,1295,1300,1327,1332],{"__ignoreMap":29},[34,1296,1297],{"class":36,"line":37},[34,1298,1299],{"class":161},"#创建一个指定形状数组\n",[34,1301,1302,1304,1306,1308,1310,1312,1315,1318,1320,1322,1325],{"class":36,"line":165},[34,1303,236],{"class":40},[34,1305,221],{"class":55},[34,1307,551],{"class":40},[34,1309,394],{"class":44},[34,1311,291],{"class":40},[34,1313,1314],{"class":44},"37",[34,1316,1317],{"class":40},").reshape(",[34,1319,247],{"class":44},[34,1321,291],{"class":40},[34,1323,1324],{"class":44},"9",[34,1326,101],{"class":40},[34,1328,1329],{"class":36,"line":171},[34,1330,1331],{"class":161},"#进行指定填充\n",[34,1333,1334,1337,1339],{"class":36,"line":182},[34,1335,1336],{"class":40},"np.full_like(a,",[34,1338,410],{"class":44},[34,1340,101],{"class":40},[103,1342,1090],{},[103,1344,1345],{},[109,1346],{"alt":29,"src":1347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[19,1349,1351],{"id":1350},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[1353,1354,1356],"h4",{"id":1355},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[24,1358,1360],{"className":26,"code":1359,"language":28,"meta":29,"style":29},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[31,1361,1362,1379],{"__ignoreMap":29},[34,1363,1364,1367,1369,1371,1373,1375,1377],{"class":36,"line":37},[34,1365,1366],{"class":40},"np.eye(",[34,1368,247],{"class":44},[34,1370,291],{"class":40},[34,1372,52],{"class":51},[34,1374,221],{"class":55},[34,1376,571],{"class":44},[34,1378,101],{"class":40},[34,1380,1381],{"class":36,"line":165},[34,1382,1383],{"class":161},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[1353,1385,1387],{"id":1386},"_2662-法2identity","2.6.6.2 法2：identity()",[24,1389,1391],{"className":26,"code":1390,"language":28,"meta":29,"style":29},"#identity()\nnp.identity(5,dtype=int)\n",[31,1392,1393,1398],{"__ignoreMap":29},[34,1394,1395],{"class":36,"line":37},[34,1396,1397],{"class":161},"#identity()\n",[34,1399,1400,1403,1405,1407,1409,1411,1413],{"class":36,"line":165},[34,1401,1402],{"class":40},"np.identity(",[34,1404,224],{"class":44},[34,1406,291],{"class":40},[34,1408,52],{"class":51},[34,1410,221],{"class":55},[34,1412,571],{"class":44},[34,1414,101],{"class":40},[103,1416,1417],{},"两个函数是有区别的",[103,1419,1420],{},[109,1421],{"alt":29,"src":1422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[103,1424,1425],{},[109,1426],{"alt":29,"src":1427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[24,1429,1431],{"className":26,"code":1430,"language":28,"meta":29,"style":29},"# 创建一个 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",[31,1432,1433,1438,1450,1455,1460,1465,1470,1476,1481,1502,1506,1511,1517],{"__ignoreMap":29},[34,1434,1435],{"class":36,"line":37},[34,1436,1437],{"class":161},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[34,1439,1440,1442,1444,1446,1448],{"class":36,"line":165},[34,1441,1366],{"class":40},[34,1443,337],{"class":44},[34,1445,48],{"class":40},[34,1447,247],{"class":44},[34,1449,101],{"class":40},[34,1451,1452],{"class":36,"line":171},[34,1453,1454],{"class":161},"# 输出:\n",[34,1456,1457],{"class":36,"line":182},[34,1458,1459],{"class":161},"# [[1. 0. 0. 0.]\n",[34,1461,1462],{"class":36,"line":188},[34,1463,1464],{"class":161},"#  [0. 1. 0. 0.]\n",[34,1466,1467],{"class":36,"line":518},[34,1468,1469],{"class":161},"#  [0. 0. 1. 0.]]\n",[34,1471,1472],{"class":36,"line":524},[34,1473,1475],{"emptyLinePlaceholder":1474},true,"\n",[34,1477,1478],{"class":36,"line":530},[34,1479,1480],{"class":161},"# 对角线向上偏移1\n",[34,1482,1483,1485,1487,1489,1491,1493,1496,1498,1500],{"class":36,"line":624},[34,1484,1366],{"class":40},[34,1486,337],{"class":44},[34,1488,48],{"class":40},[34,1490,247],{"class":44},[34,1492,48],{"class":40},[34,1494,1495],{"class":51},"k",[34,1497,221],{"class":55},[34,1499,394],{"class":44},[34,1501,101],{"class":40},[34,1503,1504],{"class":36,"line":630},[34,1505,1454],{"class":161},[34,1507,1508],{"class":36,"line":636},[34,1509,1510],{"class":161},"# [[0. 1. 0. 0.]\n",[34,1512,1514],{"class":36,"line":1513},12,[34,1515,1516],{"class":161},"#  [0. 0. 1. 0.]\n",[34,1518,1520],{"class":36,"line":1519},13,[34,1521,1522],{"class":161},"#  [0. 0. 0. 1.]]\n",[19,1524,1526],{"id":1525},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[24,1528,1530],{"className":26,"code":1529,"language":28,"meta":29,"style":29},"#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",[31,1531,1532,1537,1541,1546,1551,1556,1561,1566,1571,1576,1581],{"__ignoreMap":29},[34,1533,1534],{"class":36,"line":37},[34,1535,1536],{"class":161},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[34,1538,1539],{"class":36,"line":165},[34,1540,505],{"class":504},[34,1542,1543],{"class":36,"line":171},[34,1544,1545],{"class":504},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[34,1547,1548],{"class":36,"line":182},[34,1549,1550],{"class":504},"参数介绍：\n",[34,1552,1553],{"class":36,"line":188},[34,1554,1555],{"class":504},"start：序列的起始值\n",[34,1557,1558],{"class":36,"line":518},[34,1559,1560],{"class":504},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[34,1562,1563],{"class":36,"line":524},[34,1564,1565],{"class":504},"num：要生长的等步长的样本数量，默认为50\n",[34,1567,1568],{"class":36,"line":530},[34,1569,1570],{"class":504},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[34,1572,1573],{"class":36,"line":624},[34,1574,1575],{"class":504},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[34,1577,1578],{"class":36,"line":630},[34,1579,1580],{"class":504},"dtype：ndarry的数据类型\n",[34,1582,1583],{"class":36,"line":636},[34,1584,505],{"class":504},[103,1586,1587],{},[109,1588],{"alt":29,"src":1589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[103,1591,1592],{},"这里num=是可以省略的",[103,1594,1595],{},"也就是下方两行代码结果是一模一样的",[24,1597,1599],{"className":26,"code":1598,"language":28,"meta":29,"style":29},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[31,1600,1601,1618],{"__ignoreMap":29},[34,1602,1603,1606,1608,1610,1612,1614,1616],{"class":36,"line":37},[34,1604,1605],{"class":40},"np.linspace(",[34,1607,394],{"class":44},[34,1609,291],{"class":40},[34,1611,224],{"class":44},[34,1613,291],{"class":40},[34,1615,224],{"class":44},[34,1617,101],{"class":40},[34,1619,1620,1622,1624,1626,1628,1630,1633,1635,1637],{"class":36,"line":165},[34,1621,1605],{"class":40},[34,1623,394],{"class":44},[34,1625,291],{"class":40},[34,1627,224],{"class":44},[34,1629,291],{"class":40},[34,1631,1632],{"class":51},"num",[34,1634,221],{"class":55},[34,1636,224],{"class":44},[34,1638,101],{"class":40},[19,1640,1642],{"id":1641},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[24,1644,1646],{"className":26,"code":1645,"language":28,"meta":29,"style":29},"#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",[31,1647,1648,1653,1657,1662,1667,1672,1677,1681,1686,1691,1695],{"__ignoreMap":29},[34,1649,1650],{"class":36,"line":37},[34,1651,1652],{"class":161},"#logspace函数用于创建一个等比数列，格式如下：\n",[34,1654,1655],{"class":36,"line":165},[34,1656,505],{"class":504},[34,1658,1659],{"class":36,"line":171},[34,1660,1661],{"class":504},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[34,1663,1664],{"class":36,"line":182},[34,1665,1666],{"class":504},"参数为：\n",[34,1668,1669],{"class":36,"line":188},[34,1670,1671],{"class":504},"start:序列的起始位置为：base**start\n",[34,1673,1674],{"class":36,"line":518},[34,1675,1676],{"class":504},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[34,1678,1679],{"class":36,"line":524},[34,1680,1565],{"class":504},[34,1682,1683],{"class":36,"line":530},[34,1684,1685],{"class":504},"endpoint：是否包含 stop 这个值，默认是 True\n",[34,1687,1688],{"class":36,"line":624},[34,1689,1690],{"class":504},"base：对数的底数，默认是 10（常见对数）\n",[34,1692,1693],{"class":36,"line":630},[34,1694,1580],{"class":504},[34,1696,1697],{"class":36,"line":636},[34,1698,505],{"class":504},[103,1700,1701],{},[109,1702],{"alt":29,"src":1703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[103,1705,1706],{},"logspace()函数中的num参数也是可以不写num=的",[103,1708,1709],{},"endpoint是不可以省略的",[1711,1712,1713],"style",{},"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":29,"searchDepth":165,"depth":165,"links":1715},[1716,1720,1725,1729,1733,1734],{"id":16,"depth":165,"text":17,"children":1717},[1718,1719],{"id":21,"depth":171,"text":22},{"id":114,"depth":171,"text":115},{"id":146,"depth":165,"text":147,"children":1721},[1722,1723,1724],{"id":150,"depth":171,"text":151},{"id":351,"depth":171,"text":352},{"id":434,"depth":171,"text":435},{"id":470,"depth":165,"text":471,"children":1726},[1727,1728],{"id":474,"depth":171,"text":475},{"id":535,"depth":171,"text":536},{"id":641,"depth":165,"text":642,"children":1730},[1731,1732],{"id":645,"depth":171,"text":646},{"id":657,"depth":171,"text":658},{"id":691,"depth":165,"text":692},{"id":729,"depth":165,"text":730,"children":1735},[1736,1737,1738,1739,1740,1741,1742,1743],{"id":733,"depth":171,"text":734},{"id":961,"depth":171,"text":962},{"id":968,"depth":171,"text":969},{"id":1187,"depth":171,"text":1188},{"id":1208,"depth":171,"text":1209},{"id":1350,"depth":171,"text":1351},{"id":1525,"depth":171,"text":1526},{"id":1641,"depth":171,"text":1642},null,"md",{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":5,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",[1752,6813,7920,9340,12329,13679,15167,16254,25016,25028,25627,25653,25777,26018,26083,26101,26114,26161,26285,26454,26653,26833,27038,27174,27269,27306,27319,27629,28370,29078,29099,30119,31750,31901,31914,31926,32223,52032,52047,52064,52097,54969,78316,94459,94480,94593,94711,95473,96135,96494,96532,96638,96738,96781,96807,96868,98263,98364,98389,98880,99380,100460,100743,101485,101987,101999,104015,105679,107182,108880,110797,112716,114738,118208,118640,119103,119852,122796,123144,123166,123522,126829,126841,127244,127267,127414,127581,127786,128087,128644,129301,131232,132830,133479,134973,136404,137639,139333,141085,143495,143611,144546,144757,145642,146877,147105,147118,148273,150685,153053,156374,158851,160495,162272,164285,167337,169517,172044,174238],{"id":1753,"title":1754,"body":1755,"description":29,"extension":1745,"meta":6808,"navigation":1474,"path":6809,"seo":6810,"stem":6811,"__hash__":6812},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1756,"toc":6780},[1757,1760,1764,1767,1771,1784,1788,1792,1795,1798,1801,1804,1807,1832,1836,1839,1842,1845,1848,1895,1899,1917,1919,1933,1936,1944,1947,2790,2797,2814,2818,2904,2908,2914,3000,3004,3042,3046,3110,3114,3118,3124,3135,3139,3144,3148,3153,3157,3162,3166,3170,3175,3441,3446,3584,3589,3846,3849,3857,3861,3866,3969,3972,4277,4286,4387,4390,4393,4396,4399,4659,4664,4804,4807,4986,4989,5117,5120,5272,5276,5281,5284,5295,5303,5306,5413,5417,5421,5426,5476,5481,5486,5510,5515,5568,5571,5576,5752,5757,6042,6047,6443,6447,6452,6509,6514,6522,6525,6665,6668,6777],[10,1758,1754],{"id":1759},"_1基础入门",[14,1761,1763],{"id":1762},"_11注释","1.1注释",[103,1765,1766],{},"\u002F\u002F或者\u002F* *\u002F",[14,1768,1770],{"id":1769},"_12命名","1.2命名",[1772,1773,1774,1778,1781],"ol",{},[1775,1776,1777],"li",{},"字母数字下划线",[1775,1779,1780],{},"开头必须是字母或_",[1775,1782,1783],{},"不能使用关键词",[14,1785,1787],{"id":1786},"_13数据类型","1.3数据类型",[19,1789,1791],{"id":1790},"_131整形","1.3.1整形",[103,1793,1794],{},"short 短整形 2",[103,1796,1797],{},"int 整形 4",[103,1799,1800],{},"long 长整形 win4 linux32位4 linux64位8",[103,1802,1803],{},"long long 长长整形 8",[103,1805,1806],{},"利用sizeof可以求数据类型占用的内存空间大小",[24,1808,1812],{"className":1809,"code":1810,"language":1811,"meta":29,"style":29},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[31,1813,1814,1825],{"__ignoreMap":29},[34,1815,1816,1819,1821,1823],{"class":36,"line":37},[34,1817,1818],{"class":55},"sizeof",[34,1820,286],{"class":40},[34,1822,571],{"class":55},[34,1824,101],{"class":40},[34,1826,1827,1829],{"class":36,"line":165},[34,1828,1818],{"class":55},[34,1830,1831],{"class":40},"(num)\n",[19,1833,1835],{"id":1834},"_132浮点型","1.3.2浮点型",[103,1837,1838],{},"float 单精度 4节 7位有效数字",[103,1840,1841],{},"double 双精度 8节 15-16有效数字",[103,1843,1844],{},"默认情况下，输出一个小数，会显示6位有效数字",[103,1846,1847],{},"注意点：",[24,1849,1851],{"className":1809,"code":1850,"language":1811,"meta":29,"style":29},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[31,1852,1853,1874],{"__ignoreMap":29},[34,1854,1855,1857,1860,1862,1865,1868,1871],{"class":36,"line":37},[34,1856,989],{"class":55},[34,1858,1859],{"class":40}," f1",[34,1861,221],{"class":55},[34,1863,1864],{"class":44},"3.14",[34,1866,1867],{"class":55},"f",[34,1869,1870],{"class":40},";",[34,1872,1873],{"class":161}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[34,1875,1876,1878,1881,1883,1885,1888,1890,1892],{"class":36,"line":165},[34,1877,989],{"class":55},[34,1879,1880],{"class":40}," f2",[34,1882,221],{"class":55},[34,1884,337],{"class":44},[34,1886,1887],{"class":55},"e",[34,1889,332],{"class":44},[34,1891,1870],{"class":40},[34,1893,1894],{"class":161}," \u002F\u002F科学记数法\n",[19,1896,1898],{"id":1897},"_133字符型","1.3.3字符型",[24,1900,1902],{"className":1809,"code":1901,"language":1811,"meta":29,"style":29},"char ch='a'\n",[31,1903,1904],{"__ignoreMap":29},[34,1905,1906,1909,1912,1914],{"class":36,"line":37},[34,1907,1908],{"class":55},"char",[34,1910,1911],{"class":40}," ch",[34,1913,221],{"class":55},[34,1915,1916],{"class":504},"'a'\n",[103,1918,1847],{},[1772,1920,1921,1924,1927,1930],{},[1775,1922,1923],{},"在显示字符型变量时，只能单引号，双引号x",[1775,1925,1926],{},"单引号内只能一个字符，不能字符串",[1775,1928,1929],{},"c和c++字符型变量只占用一个字符",[1775,1931,1932],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[103,1934,1935],{},"ASCII码大致由以下两部分组成：",[1772,1937,1938,1941],{},[1775,1939,1940],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[1775,1942,1943],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[103,1945,1946],{},"ASCII码表格：",[1948,1949,1950,1993],"table",{},[1951,1952,1953],"thead",{},[1954,1955,1956,1963,1968,1972,1977,1981,1985,1989],"tr",{},[1957,1958,1959,1962],"th",{},[1165,1960,1961],{},"ASCII","值",[1957,1964,1965],{},[1165,1966,1967],{},"控制字符",[1957,1969,1970,1962],{},[1165,1971,1961],{},[1957,1973,1974],{},[1165,1975,1976],{},"字符",[1957,1978,1979,1962],{},[1165,1980,1961],{},[1957,1982,1983],{},[1165,1984,1976],{},[1957,1986,1987,1962],{},[1165,1988,1961],{},[1957,1990,1991],{},[1165,1992,1976],{},[1994,1995,1996,2022,2046,2071,2096,2120,2143,2167,2191,2216,2240,2265,2289,2314,2340,2366,2392,2416,2441,2466,2491,2515,2539,2564,2589,2613,2637,2663,2688,2713,2738,2764],"tbody",{},[1954,1997,1998,2001,2004,2007,2010,2013,2016,2019],{},[1999,2000,177],"td",{},[1999,2002,2003],{},"NUT",[1999,2005,2006],{},"32",[1999,2008,2009],{},"(space)",[1999,2011,2012],{},"64",[1999,2014,2015],{},"@",[1999,2017,2018],{},"96",[1999,2020,2021],{},"、",[1954,2023,2024,2026,2029,2032,2035,2038,2041,2044],{},[1999,2025,394],{},[1999,2027,2028],{},"SOH",[1999,2030,2031],{},"33",[1999,2033,2034],{},"!",[1999,2036,2037],{},"65",[1999,2039,2040],{},"A",[1999,2042,2043],{},"97",[1999,2045,236],{},[1954,2047,2048,2050,2053,2056,2059,2062,2065,2068],{},[1999,2049,332],{},[1999,2051,2052],{},"STX",[1999,2054,2055],{},"34",[1999,2057,2058],{},"\"",[1999,2060,2061],{},"66",[1999,2063,2064],{},"B",[1999,2066,2067],{},"98",[1999,2069,2070],{},"b",[1954,2072,2073,2075,2078,2081,2084,2087,2090,2093],{},[1999,2074,337],{},[1999,2076,2077],{},"ETX",[1999,2079,2080],{},"35",[1999,2082,2083],{},"#",[1999,2085,2086],{},"67",[1999,2088,2089],{},"C",[1999,2091,2092],{},"99",[1999,2094,2095],{},"c",[1954,2097,2098,2100,2103,2106,2109,2112,2115,2117],{},[1999,2099,247],{},[1999,2101,2102],{},"EOT",[1999,2104,2105],{},"36",[1999,2107,2108],{},"$",[1999,2110,2111],{},"68",[1999,2113,2114],{},"D",[1999,2116,451],{},[1999,2118,2119],{},"d",[1954,2121,2122,2124,2127,2129,2132,2135,2138,2141],{},[1999,2123,224],{},[1999,2125,2126],{},"ENQ",[1999,2128,1314],{},[1999,2130,2131],{},"%",[1999,2133,2134],{},"69",[1999,2136,2137],{},"E",[1999,2139,2140],{},"101",[1999,2142,1887],{},[1954,2144,2145,2147,2150,2153,2156,2159,2162,2165],{},[1999,2146,1115],{},[1999,2148,2149],{},"ACK",[1999,2151,2152],{},"38",[1999,2154,2155],{},"&",[1999,2157,2158],{},"70",[1999,2160,2161],{},"F",[1999,2163,2164],{},"102",[1999,2166,1867],{},[1954,2168,2169,2171,2174,2177,2179,2182,2185,2188],{},[1999,2170,609],{},[1999,2172,2173],{},"BEL",[1999,2175,2176],{},"39",[1999,2178,291],{},[1999,2180,2181],{},"71",[1999,2183,2184],{},"G",[1999,2186,2187],{},"103",[1999,2189,2190],{},"g",[1954,2192,2193,2196,2199,2202,2204,2207,2210,2213],{},[1999,2194,2195],{},"8",[1999,2197,2198],{},"BS",[1999,2200,2201],{},"40",[1999,2203,286],{},[1999,2205,2206],{},"72",[1999,2208,2209],{},"H",[1999,2211,2212],{},"104",[1999,2214,2215],{},"h",[1954,2217,2218,2220,2223,2226,2228,2231,2234,2237],{},[1999,2219,1324],{},[1999,2221,2222],{},"HT",[1999,2224,2225],{},"41",[1999,2227,918],{},[1999,2229,2230],{},"73",[1999,2232,2233],{},"I",[1999,2235,2236],{},"105",[1999,2238,2239],{},"i",[1954,2241,2242,2244,2247,2250,2253,2256,2259,2262],{},[1999,2243,410],{},[1999,2245,2246],{},"LF",[1999,2248,2249],{},"42",[1999,2251,2252],{},"*",[1999,2254,2255],{},"74",[1999,2257,2258],{},"J",[1999,2260,2261],{},"106",[1999,2263,2264],{},"j",[1954,2266,2267,2269,2272,2275,2278,2281,2284,2287],{},[1999,2268,399],{},[1999,2270,2271],{},"VT",[1999,2273,2274],{},"43",[1999,2276,2277],{},"+",[1999,2279,2280],{},"75",[1999,2282,2283],{},"K",[1999,2285,2286],{},"107",[1999,2288,1495],{},[1954,2290,2291,2294,2297,2300,2302,2305,2308,2311],{},[1999,2292,2293],{},"12",[1999,2295,2296],{},"FF",[1999,2298,2299],{},"44",[1999,2301,291],{},[1999,2303,2304],{},"76",[1999,2306,2307],{},"L",[1999,2309,2310],{},"108",[1999,2312,2313],{},"l",[1954,2315,2316,2319,2322,2325,2328,2331,2334,2337],{},[1999,2317,2318],{},"13",[1999,2320,2321],{},"CR",[1999,2323,2324],{},"45",[1999,2326,2327],{},"-",[1999,2329,2330],{},"77",[1999,2332,2333],{},"M",[1999,2335,2336],{},"109",[1999,2338,2339],{},"m",[1954,2341,2342,2345,2348,2351,2354,2357,2360,2363],{},[1999,2343,2344],{},"14",[1999,2346,2347],{},"SO",[1999,2349,2350],{},"46",[1999,2352,2353],{},".",[1999,2355,2356],{},"78",[1999,2358,2359],{},"N",[1999,2361,2362],{},"110",[1999,2364,2365],{},"n",[1954,2367,2368,2371,2374,2377,2380,2383,2386,2389],{},[1999,2369,2370],{},"15",[1999,2372,2373],{},"SI",[1999,2375,2376],{},"47",[1999,2378,2379],{},"\u002F",[1999,2381,2382],{},"79",[1999,2384,2385],{},"O",[1999,2387,2388],{},"111",[1999,2390,2391],{},"o",[1954,2393,2394,2397,2400,2403,2405,2408,2411,2414],{},[1999,2395,2396],{},"16",[1999,2398,2399],{},"DLE",[1999,2401,2402],{},"48",[1999,2404,177],{},[1999,2406,2407],{},"80",[1999,2409,2410],{},"P",[1999,2412,2413],{},"112",[1999,2415,103],{},[1954,2417,2418,2421,2424,2427,2429,2432,2435,2438],{},[1999,2419,2420],{},"17",[1999,2422,2423],{},"DCI",[1999,2425,2426],{},"49",[1999,2428,394],{},[1999,2430,2431],{},"81",[1999,2433,2434],{},"Q",[1999,2436,2437],{},"113",[1999,2439,2440],{},"q",[1954,2442,2443,2446,2449,2452,2454,2457,2460,2463],{},[1999,2444,2445],{},"18",[1999,2447,2448],{},"DC2",[1999,2450,2451],{},"50",[1999,2453,332],{},[1999,2455,2456],{},"82",[1999,2458,2459],{},"R",[1999,2461,2462],{},"114",[1999,2464,2465],{},"r",[1954,2467,2468,2471,2474,2477,2479,2482,2485,2488],{},[1999,2469,2470],{},"19",[1999,2472,2473],{},"DC3",[1999,2475,2476],{},"51",[1999,2478,337],{},[1999,2480,2481],{},"83",[1999,2483,2484],{},"S",[1999,2486,2487],{},"115",[1999,2489,2490],{},"s",[1954,2492,2493,2495,2498,2501,2503,2506,2509,2512],{},[1999,2494,1249],{},[1999,2496,2497],{},"DC4",[1999,2499,2500],{},"52",[1999,2502,247],{},[1999,2504,2505],{},"84",[1999,2507,2508],{},"T",[1999,2510,2511],{},"116",[1999,2513,2514],{},"t",[1954,2516,2517,2519,2522,2525,2527,2530,2533,2536],{},[1999,2518,558],{},[1999,2520,2521],{},"NAK",[1999,2523,2524],{},"53",[1999,2526,224],{},[1999,2528,2529],{},"85",[1999,2531,2532],{},"U",[1999,2534,2535],{},"117",[1999,2537,2538],{},"u",[1954,2540,2541,2544,2547,2550,2552,2555,2558,2561],{},[1999,2542,2543],{},"22",[1999,2545,2546],{},"SYN",[1999,2548,2549],{},"54",[1999,2551,1115],{},[1999,2553,2554],{},"86",[1999,2556,2557],{},"V",[1999,2559,2560],{},"118",[1999,2562,2563],{},"v",[1954,2565,2566,2569,2572,2575,2577,2580,2583,2586],{},[1999,2567,2568],{},"23",[1999,2570,2571],{},"TB",[1999,2573,2574],{},"55",[1999,2576,609],{},[1999,2578,2579],{},"87",[1999,2581,2582],{},"W",[1999,2584,2585],{},"119",[1999,2587,2588],{},"w",[1954,2590,2591,2594,2597,2600,2602,2605,2608,2611],{},[1999,2592,2593],{},"24",[1999,2595,2596],{},"CAN",[1999,2598,2599],{},"56",[1999,2601,2195],{},[1999,2603,2604],{},"88",[1999,2606,2607],{},"X",[1999,2609,2610],{},"120",[1999,2612,1046],{},[1954,2614,2615,2618,2621,2624,2626,2629,2632,2635],{},[1999,2616,2617],{},"25",[1999,2619,2620],{},"EM",[1999,2622,2623],{},"57",[1999,2625,1324],{},[1999,2627,2628],{},"89",[1999,2630,2631],{},"Y",[1999,2633,2634],{},"121",[1999,2636,1024],{},[1954,2638,2639,2642,2645,2648,2651,2654,2657,2660],{},[1999,2640,2641],{},"26",[1999,2643,2644],{},"SUB",[1999,2646,2647],{},"58",[1999,2649,2650],{},":",[1999,2652,2653],{},"90",[1999,2655,2656],{},"Z",[1999,2658,2659],{},"122",[1999,2661,2662],{},"z",[1954,2664,2665,2668,2671,2674,2676,2679,2682,2685],{},[1999,2666,2667],{},"27",[1999,2669,2670],{},"ESC",[1999,2672,2673],{},"59",[1999,2675,1870],{},[1999,2677,2678],{},"91",[1999,2680,2681],{},"[",[1999,2683,2684],{},"123",[1999,2686,2687],{},"{",[1954,2689,2690,2693,2696,2699,2702,2705,2707,2710],{},[1999,2691,2692],{},"28",[1999,2694,2695],{},"FS",[1999,2697,2698],{},"60",[1999,2700,2701],{},"\u003C",[1999,2703,2704],{},"92",[1999,2706,2379],{},[1999,2708,2709],{},"124",[1999,2711,2712],{},"|",[1954,2714,2715,2718,2721,2724,2726,2729,2732,2735],{},[1999,2716,2717],{},"29",[1999,2719,2720],{},"GS",[1999,2722,2723],{},"61",[1999,2725,221],{},[1999,2727,2728],{},"93",[1999,2730,2731],{},"]",[1999,2733,2734],{},"125",[1999,2736,2737],{},"}",[1954,2739,2740,2743,2746,2749,2752,2755,2758,2761],{},[1999,2741,2742],{},"30",[1999,2744,2745],{},"RS",[1999,2747,2748],{},"62",[1999,2750,2751],{},">",[1999,2753,2754],{},"94",[1999,2756,2757],{},"^",[1999,2759,2760],{},"126",[1999,2762,2763],{},"`",[1954,2765,2766,2769,2772,2775,2778,2781,2784,2787],{},[1999,2767,2768],{},"31",[1999,2770,2771],{},"US",[1999,2773,2774],{},"63",[1999,2776,2777],{},"?",[1999,2779,2780],{},"95",[1999,2782,2783],{},"_",[1999,2785,2786],{},"127",[1999,2788,2789],{},"DEL",[103,2791,2792,2793,2796],{},"ASCII 码大致由以下",[1165,2794,2795],{},"两部分组","成：",[2798,2799,2800,2807],"ul",{},[1775,2801,2802,2803,2806],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[1165,2804,2805],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[1775,2808,2809,2810,2813],{},"ASCII 打印字符：数字 ",[1165,2811,2812],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[19,2815,2817],{"id":2816},"_134转义字符","1.3.4转义字符",[24,2819,2821],{"className":1809,"code":2820,"language":1811,"meta":29,"style":29},"\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",[31,2822,2823,2828,2844,2858,2863,2876,2881],{"__ignoreMap":29},[34,2824,2825],{"class":36,"line":37},[34,2826,2827],{"class":161},"\u002F\u002F换行符\n",[34,2829,2830,2833,2836,2839,2841],{"class":36,"line":165},[34,2831,2832],{"class":40},"cout ",[34,2834,2835],{"class":55},"\u003C\u003C",[34,2837,2838],{"class":504},"\"hello world\u002Fn\"",[34,2840,1870],{"class":40},[34,2842,2843],{"class":161}," \u002F\u002F就等同于如下：\n",[34,2845,2846,2848,2850,2853,2855],{"class":36,"line":171},[34,2847,2832],{"class":40},[34,2849,2835],{"class":55},[34,2851,2852],{"class":504},"\"hello world\"",[34,2854,2835],{"class":55},[34,2856,2857],{"class":40},"endl;\n",[34,2859,2860],{"class":36,"line":182},[34,2861,2862],{"class":161},"\u002F\u002F反斜杠\n",[34,2864,2865,2867,2869,2872,2874],{"class":36,"line":188},[34,2866,2832],{"class":40},[34,2868,2835],{"class":55},[34,2870,2871],{"class":504},"\"\u002F\u002F\"",[34,2873,2835],{"class":55},[34,2875,2857],{"class":40},[34,2877,2878],{"class":36,"line":518},[34,2879,2880],{"class":161},"\u002F\u002F水平制表符\n",[34,2882,2883,2885,2887,2890,2893,2896,2898,2901],{"class":36,"line":524},[34,2884,2832],{"class":40},[34,2886,2835],{"class":55},[34,2888,2889],{"class":504},"\"aaaa",[34,2891,2892],{"class":44},"\\t",[34,2894,2895],{"class":504},"helloworld\"",[34,2897,2835],{"class":55},[34,2899,2900],{"class":40},"endl;",[34,2902,2903],{"class":161}," \u002F\u002F输出窗口时有对齐效果\n",[19,2905,2907],{"id":2906},"_135字符串型","1.3.5字符串型",[103,2909,2910,2911,2913],{},"char 变量名",[34,2912],{},"=\"字符串值\"",[24,2915,2917],{"className":1809,"code":2916,"language":1811,"meta":29,"style":29},"\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",[31,2918,2919,2924,2929,2934,2939,2953,2966,2971,2976,2987],{"__ignoreMap":29},[34,2920,2921],{"class":36,"line":37},[34,2922,2923],{"class":161},"\u002F\u002Fc风格字符串\n",[34,2925,2926],{"class":36,"line":165},[34,2927,2928],{"class":161},"\u002F\u002F注意事项：\n",[34,2930,2931],{"class":36,"line":171},[34,2932,2933],{"class":161},"\u002F\u002F1.char字符串名[]\n",[34,2935,2936],{"class":36,"line":182},[34,2937,2938],{"class":161},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[34,2940,2941,2943,2946,2948,2950],{"class":36,"line":188},[34,2942,1908],{"class":55},[34,2944,2945],{"class":40}," str[]",[34,2947,221],{"class":55},[34,2949,2852],{"class":504},[34,2951,2952],{"class":40},";\n",[34,2954,2955,2957,2959,2962,2964],{"class":36,"line":518},[34,2956,2832],{"class":40},[34,2958,2835],{"class":55},[34,2960,2961],{"class":40},"str",[34,2963,2835],{"class":55},[34,2965,2857],{"class":40},[34,2967,2968],{"class":36,"line":524},[34,2969,2970],{"class":161},"\u002F\u002Fc++风格字符串\n",[34,2972,2973],{"class":36,"line":530},[34,2974,2975],{"class":161},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[34,2977,2978,2981,2983,2985],{"class":36,"line":624},[34,2979,2980],{"class":40},"string str2",[34,2982,221],{"class":55},[34,2984,2852],{"class":504},[34,2986,2952],{"class":40},[34,2988,2989,2991,2993,2996,2998],{"class":36,"line":630},[34,2990,2832],{"class":40},[34,2992,2835],{"class":55},[34,2994,2995],{"class":40},"str2",[34,2997,2835],{"class":55},[34,2999,2857],{"class":40},[19,3001,3003],{"id":3002},"_136布尔类型bool","1.3.6布尔类型bool",[24,3005,3007],{"className":1809,"code":3006,"language":1811,"meta":29,"style":29},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[31,3008,3009,3024],{"__ignoreMap":29},[34,3010,3011,3014,3017,3019,3022],{"class":36,"line":37},[34,3012,3013],{"class":55},"bool",[34,3015,3016],{"class":40}," flag",[34,3018,221],{"class":55},[34,3020,3021],{"class":44},"true",[34,3023,2952],{"class":40},[34,3025,3026,3029,3032,3035,3037,3039],{"class":36,"line":165},[34,3027,3028],{"class":40},"cout",[34,3030,3031],{"class":55},"\u003C\u003Csizeof",[34,3033,3034],{"class":40},"(flag)",[34,3036,2835],{"class":55},[34,3038,2900],{"class":40},[34,3040,3041],{"class":161}," \u002F\u002F查看布尔占内存空间\n",[14,3043,3045],{"id":3044},"_14键盘输入cin","1.4键盘输入cin",[24,3047,3049],{"className":1809,"code":3048,"language":1811,"meta":29,"style":29},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[31,3050,3051,3064,3081,3092],{"__ignoreMap":29},[34,3052,3053,3055,3058,3060,3062],{"class":36,"line":37},[34,3054,571],{"class":55},[34,3056,3057],{"class":40}," a",[34,3059,221],{"class":55},[34,3061,177],{"class":44},[34,3063,2952],{"class":40},[34,3065,3066,3068,3070,3073,3075,3077,3079],{"class":36,"line":165},[34,3067,3028],{"class":40},[34,3069,2835],{"class":55},[34,3071,3072],{"class":504},"\"请给整型变量a赋值\"",[34,3074,2835],{"class":55},[34,3076,236],{"class":40},[34,3078,2835],{"class":55},[34,3080,2857],{"class":40},[34,3082,3083,3086,3089],{"class":36,"line":171},[34,3084,3085],{"class":40},"cin ",[34,3087,3088],{"class":55},">>",[34,3090,3091],{"class":40}," a;\n",[34,3093,3094,3096,3098,3101,3104,3106,3108],{"class":36,"line":182},[34,3095,2832],{"class":40},[34,3097,2835],{"class":55},[34,3099,3100],{"class":504}," \"整型变量a=\"",[34,3102,3103],{"class":55}," \u003C\u003C",[34,3105,236],{"class":40},[34,3107,2835],{"class":55},[34,3109,2857],{"class":40},[14,3111,3113],{"id":3112},"_15运算符","1.5运算符",[19,3115,3117],{"id":3116},"_151算术运算符","1.5.1算术运算符",[103,3119,3120,3123],{},[109,3121],{"alt":29,"src":3122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[1772,3125,3126,3129,3132],{},[1775,3127,3128],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[1775,3130,3131],{},"两个小数不可以做取模运算",[1775,3133,3134],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[19,3136,3138],{"id":3137},"_152赋值运算符","1.5.2赋值运算符",[103,3140,3141],{},[109,3142],{"alt":29,"src":3143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[19,3145,3147],{"id":3146},"_153比较运算符","1.5.3比较运算符",[103,3149,3150],{},[109,3151],{"alt":29,"src":3152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[19,3154,3156],{"id":3155},"_154逻辑运算符","1.5.4逻辑运算符",[103,3158,3159],{},[109,3160],{"alt":29,"src":3161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3163,3165],{"id":3164},"_16程序流程结构","1.6程序流程结构",[19,3167,3169],{"id":3168},"_161选择结构","1.6.1选择结构",[1772,3171,3172],{},[1775,3173,3174],{},"if语句\n单行、多行、多条件if语句",[24,3176,3178],{"className":1809,"code":3177,"language":1811,"meta":29,"style":29},"\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",[31,3179,3180,3185,3200,3205,3219,3224,3229,3238,3251,3255,3268,3272,3277,3281,3295,3300,3306,3326,3331,3345,3350,3379,3384,3401,3406,3411,3416,3430,3435],{"__ignoreMap":29},[34,3181,3182],{"class":36,"line":37},[34,3183,3184],{"class":161},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[34,3186,3187,3190,3193,3195,3198],{"class":36,"line":165},[34,3188,3189],{"class":55},"if",[34,3191,3192],{"class":40},"(score",[34,3194,2751],{"class":55},[34,3196,3197],{"class":44},"600",[34,3199,101],{"class":40},[34,3201,3202],{"class":36,"line":171},[34,3203,3204],{"class":40},"{\n",[34,3206,3207,3210,3212,3215,3217],{"class":36,"line":182},[34,3208,3209],{"class":40},"    cout",[34,3211,2835],{"class":55},[34,3213,3214],{"class":504},"'这是单行if语句'",[34,3216,2835],{"class":55},[34,3218,2857],{"class":40},[34,3220,3221],{"class":36,"line":188},[34,3222,3223],{"class":40},"}\n",[34,3225,3226],{"class":36,"line":518},[34,3227,3228],{"class":161},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[34,3230,3231,3233,3235],{"class":36,"line":524},[34,3232,3085],{"class":40},[34,3234,3088],{"class":55},[34,3236,3237],{"class":40}," score\n",[34,3239,3240,3242,3244,3247,3249],{"class":36,"line":530},[34,3241,3189],{"class":55},[34,3243,3192],{"class":40},[34,3245,3246],{"class":55},"\u003C=",[34,3248,3197],{"class":44},[34,3250,101],{"class":40},[34,3252,3253],{"class":36,"line":624},[34,3254,3204],{"class":40},[34,3256,3257,3259,3261,3264,3266],{"class":36,"line":630},[34,3258,3209],{"class":40},[34,3260,3088],{"class":55},[34,3262,3263],{"class":504},"\"小于等于600\"",[34,3265,2835],{"class":55},[34,3267,2857],{"class":40},[34,3269,3270],{"class":36,"line":636},[34,3271,3223],{"class":40},[34,3273,3274],{"class":36,"line":1513},[34,3275,3276],{"class":55},"else\n",[34,3278,3279],{"class":36,"line":1519},[34,3280,3204],{"class":40},[34,3282,3284,3286,3288,3291,3293],{"class":36,"line":3283},14,[34,3285,3209],{"class":40},[34,3287,3088],{"class":55},[34,3289,3290],{"class":504},"\"大于600\"",[34,3292,3088],{"class":55},[34,3294,2857],{"class":40},[34,3296,3298],{"class":36,"line":3297},15,[34,3299,3223],{"class":40},[34,3301,3303],{"class":36,"line":3302},16,[34,3304,3305],{"class":161},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[34,3307,3309,3311,3314,3316,3318,3320,3322,3324],{"class":36,"line":3308},17,[34,3310,3189],{"class":55},[34,3312,3313],{"class":40}," (",[34,3315,177],{"class":44},[34,3317,2701],{"class":55},[34,3319,1632],{"class":40},[34,3321,2701],{"class":55},[34,3323,451],{"class":44},[34,3325,101],{"class":40},[34,3327,3329],{"class":36,"line":3328},18,[34,3330,3204],{"class":40},[34,3332,3334,3336,3338,3341,3343],{"class":36,"line":3333},19,[34,3335,3209],{"class":40},[34,3337,2835],{"class":55},[34,3339,3340],{"class":504},"\"小于100\"",[34,3342,2835],{"class":55},[34,3344,2857],{"class":40},[34,3346,3348],{"class":36,"line":3347},20,[34,3349,3223],{"class":40},[34,3351,3353,3356,3359,3362,3365,3367,3370,3372,3374,3377],{"class":36,"line":3352},21,[34,3354,3355],{"class":55},"else",[34,3357,3358],{"class":55}," if",[34,3360,3361],{"class":40}," (nmu",[34,3363,3364],{"class":55},">=",[34,3366,451],{"class":44},[34,3368,3369],{"class":55},"&&",[34,3371,1632],{"class":40},[34,3373,2701],{"class":55},[34,3375,3376],{"class":44},"200",[34,3378,101],{"class":40},[34,3380,3382],{"class":36,"line":3381},22,[34,3383,3204],{"class":40},[34,3385,3387,3389,3391,3394,3396,3398],{"class":36,"line":3386},23,[34,3388,3209],{"class":40},[34,3390,2835],{"class":55},[34,3392,3393],{"class":504},"\"不小于100且小于200\"",[34,3395,2835],{"class":55},[34,3397,2900],{"class":40},[34,3399,3400],{"class":161}," \u002F\u002F可以无限else if,python中是elif：\n",[34,3402,3404],{"class":36,"line":3403},24,[34,3405,3223],{"class":40},[34,3407,3409],{"class":36,"line":3408},25,[34,3410,3276],{"class":55},[34,3412,3414],{"class":36,"line":3413},26,[34,3415,3204],{"class":40},[34,3417,3419,3421,3423,3426,3428],{"class":36,"line":3418},27,[34,3420,3209],{"class":40},[34,3422,2835],{"class":55},[34,3424,3425],{"class":504},"\"不小于200\"",[34,3427,2835],{"class":55},[34,3429,2857],{"class":40},[34,3431,3433],{"class":36,"line":3432},28,[34,3434,3223],{"class":40},[34,3436,3438],{"class":36,"line":3437},29,[34,3439,3440],{"class":161},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[1772,3442,3443],{"start":165},[1775,3444,3445],{},"三目运算符",[24,3447,3449],{"className":1809,"code":3448,"language":1811,"meta":29,"style":29},"\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",[31,3450,3451,3456,3461,3487,3509,3526,3531,3554,3569],{"__ignoreMap":29},[34,3452,3453],{"class":36,"line":37},[34,3454,3455],{"class":161},"\u002F\u002F创建三个变量a,b,c\n",[34,3457,3458],{"class":36,"line":165},[34,3459,3460],{"class":161},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[34,3462,3463,3465,3467,3469,3471,3474,3476,3478,3481,3483,3485],{"class":36,"line":171},[34,3464,571],{"class":55},[34,3466,3057],{"class":40},[34,3468,221],{"class":55},[34,3470,1249],{"class":44},[34,3472,3473],{"class":40},",b",[34,3475,221],{"class":55},[34,3477,410],{"class":44},[34,3479,3480],{"class":40},",c",[34,3482,221],{"class":55},[34,3484,177],{"class":44},[34,3486,2952],{"class":40},[34,3488,3489,3491,3493,3496,3498,3500,3502,3504,3506],{"class":36,"line":182},[34,3490,2095],{"class":40},[34,3492,221],{"class":55},[34,3494,3495],{"class":40},"(a",[34,3497,2751],{"class":55},[34,3499,2070],{"class":40},[34,3501,2777],{"class":55},[34,3503,236],{"class":40},[34,3505,2650],{"class":55},[34,3507,3508],{"class":40},"b)\n",[34,3510,3511,3513,3515,3518,3520,3522,3524],{"class":36,"line":188},[34,3512,3028],{"class":40},[34,3514,2835],{"class":55},[34,3516,3517],{"class":504},"\"c=\"",[34,3519,2835],{"class":55},[34,3521,2095],{"class":40},[34,3523,2835],{"class":55},[34,3525,2857],{"class":40},[34,3527,3528],{"class":36,"line":518},[34,3529,3530],{"class":161},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[34,3532,3533,3535,3537,3539,3541,3543,3545,3548,3550,3552],{"class":36,"line":524},[34,3534,3495],{"class":40},[34,3536,2751],{"class":55},[34,3538,2070],{"class":40},[34,3540,2777],{"class":55},[34,3542,236],{"class":40},[34,3544,2650],{"class":55},[34,3546,3547],{"class":40},"b)",[34,3549,221],{"class":55},[34,3551,451],{"class":44},[34,3553,2952],{"class":40},[34,3555,3556,3558,3560,3562,3564,3566],{"class":36,"line":530},[34,3557,3028],{"class":40},[34,3559,2835],{"class":55},[34,3561,236],{"class":40},[34,3563,2835],{"class":55},[34,3565,2900],{"class":40},[34,3567,3568],{"class":161}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[34,3570,3571,3573,3575,3577,3579,3581],{"class":36,"line":624},[34,3572,3028],{"class":40},[34,3574,2835],{"class":55},[34,3576,2070],{"class":40},[34,3578,2835],{"class":55},[34,3580,2900],{"class":40},[34,3582,3583],{"class":161}," \u002F\u002F10   a>b,b还是原值\n",[1772,3585,3586],{"start":171},[1775,3587,3588],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[24,3590,3592],{"className":1809,"code":3591,"language":1811,"meta":29,"style":29},"\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",[31,3593,3594,3599,3607,3621,3631,3635,3649,3662,3672,3680,3685,3710,3731,3753,3774,3796,3817,3837,3842],{"__ignoreMap":29},[34,3595,3596],{"class":36,"line":37},[34,3597,3598],{"class":161},"\u002F\u002F案例-电影打分\n",[34,3600,3601,3604],{"class":36,"line":165},[34,3602,3603],{"class":55},"#include",[34,3605,3606],{"class":504},"\u003Ciostream>\n",[34,3608,3609,3612,3615,3619],{"class":36,"line":171},[34,3610,3611],{"class":55},"using",[34,3613,3614],{"class":55}," namespace",[34,3616,3618],{"class":3617},"sScJk"," std",[34,3620,2952],{"class":40},[34,3622,3623,3625,3628],{"class":36,"line":182},[34,3624,571],{"class":55},[34,3626,3627],{"class":3617}," main",[34,3629,3630],{"class":40},"()\n",[34,3632,3633],{"class":36,"line":188},[34,3634,3204],{"class":40},[34,3636,3637,3640,3643,3645,3647],{"class":36,"line":518},[34,3638,3639],{"class":55},"    int",[34,3641,3642],{"class":40}," score",[34,3644,221],{"class":55},[34,3646,177],{"class":44},[34,3648,2952],{"class":40},[34,3650,3651,3653,3655,3658,3660],{"class":36,"line":524},[34,3652,3209],{"class":40},[34,3654,2835],{"class":55},[34,3656,3657],{"class":504},"\"电影打分：\"",[34,3659,2835],{"class":55},[34,3661,2857],{"class":40},[34,3663,3664,3667,3669],{"class":36,"line":530},[34,3665,3666],{"class":40},"    cin",[34,3668,3088],{"class":55},[34,3670,3671],{"class":40},"score;\n",[34,3673,3674,3677],{"class":36,"line":624},[34,3675,3676],{"class":55},"    switch",[34,3678,3679],{"class":40},"(score)\n",[34,3681,3682],{"class":36,"line":630},[34,3683,3684],{"class":40},"    {\n",[34,3686,3687,3690,3693,3696,3698,3701,3703,3705,3708],{"class":36,"line":636},[34,3688,3689],{"class":55},"        case",[34,3691,3692],{"class":44}," 10",[34,3694,3695],{"class":40},":cout",[34,3697,2835],{"class":55},[34,3699,3700],{"class":504},"\"经典\"",[34,3702,2835],{"class":55},[34,3704,2900],{"class":40},[34,3706,3707],{"class":55},"break",[34,3709,2952],{"class":40},[34,3711,3712,3714,3717,3719,3721,3723,3725,3727,3729],{"class":36,"line":1513},[34,3713,3689],{"class":55},[34,3715,3716],{"class":44}," 9",[34,3718,3695],{"class":40},[34,3720,2835],{"class":55},[34,3722,3700],{"class":504},[34,3724,2835],{"class":55},[34,3726,2900],{"class":40},[34,3728,3707],{"class":55},[34,3730,2952],{"class":40},[34,3732,3733,3735,3738,3740,3742,3745,3747,3749,3751],{"class":36,"line":1519},[34,3734,3689],{"class":55},[34,3736,3737],{"class":44}," 8",[34,3739,3695],{"class":40},[34,3741,2835],{"class":55},[34,3743,3744],{"class":504},"\"非常好\"",[34,3746,2835],{"class":55},[34,3748,2900],{"class":40},[34,3750,3707],{"class":55},[34,3752,2952],{"class":40},[34,3754,3755,3757,3760,3762,3764,3766,3768,3770,3772],{"class":36,"line":3283},[34,3756,3689],{"class":55},[34,3758,3759],{"class":44}," 7",[34,3761,3695],{"class":40},[34,3763,2835],{"class":55},[34,3765,3744],{"class":504},[34,3767,2835],{"class":55},[34,3769,2900],{"class":40},[34,3771,3707],{"class":55},[34,3773,2952],{"class":40},[34,3775,3776,3778,3781,3783,3785,3788,3790,3792,3794],{"class":36,"line":3297},[34,3777,3689],{"class":55},[34,3779,3780],{"class":44}," 6",[34,3782,3695],{"class":40},[34,3784,2835],{"class":55},[34,3786,3787],{"class":504},"\"一般\"",[34,3789,2835],{"class":55},[34,3791,2900],{"class":40},[34,3793,3707],{"class":55},[34,3795,2952],{"class":40},[34,3797,3798,3800,3803,3805,3807,3809,3811,3813,3815],{"class":36,"line":3302},[34,3799,3689],{"class":55},[34,3801,3802],{"class":44}," 5",[34,3804,3695],{"class":40},[34,3806,2835],{"class":55},[34,3808,3787],{"class":504},[34,3810,2835],{"class":55},[34,3812,2900],{"class":40},[34,3814,3707],{"class":55},[34,3816,2952],{"class":40},[34,3818,3819,3822,3824,3826,3829,3831,3833,3835],{"class":36,"line":3308},[34,3820,3821],{"class":55},"        default",[34,3823,3695],{"class":40},[34,3825,2835],{"class":55},[34,3827,3828],{"class":504},"\"烂片\"",[34,3830,2835],{"class":55},[34,3832,2900],{"class":40},[34,3834,3707],{"class":55},[34,3836,2952],{"class":40},[34,3838,3839],{"class":36,"line":3328},[34,3840,3841],{"class":40},"    }\n",[34,3843,3844],{"class":36,"line":3333},[34,3845,3223],{"class":40},[103,3847,3848],{},"if和switch区别：",[2798,3850,3851,3854],{},[1775,3852,3853],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[1775,3855,3856],{},"switch优点：结构清晰，执行效率高",[19,3858,3860],{"id":3859},"_162循环结构","1.6.2循环结构",[1772,3862,3863],{},[1775,3864,3865],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[24,3867,3869],{"className":1809,"code":3868,"language":1811,"meta":29,"style":29},"\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",[31,3870,3871,3876,3884,3888,3901,3915,3919,3939,3949,3953,3965],{"__ignoreMap":29},[34,3872,3873],{"class":36,"line":37},[34,3874,3875],{"class":161},"\u002F\u002F打印0-9数字\n",[34,3877,3878,3880,3882],{"class":36,"line":165},[34,3879,571],{"class":55},[34,3881,3627],{"class":3617},[34,3883,3630],{"class":40},[34,3885,3886],{"class":36,"line":171},[34,3887,3204],{"class":40},[34,3889,3890,3892,3895,3897,3899],{"class":36,"line":182},[34,3891,3639],{"class":55},[34,3893,3894],{"class":40}," num",[34,3896,221],{"class":55},[34,3898,177],{"class":44},[34,3900,2952],{"class":40},[34,3902,3903,3906,3909,3911,3913],{"class":36,"line":188},[34,3904,3905],{"class":55},"    while",[34,3907,3908],{"class":40},"(num",[34,3910,2701],{"class":55},[34,3912,410],{"class":44},[34,3914,101],{"class":40},[34,3916,3917],{"class":36,"line":518},[34,3918,3684],{"class":40},[34,3920,3921,3924,3927,3929,3931,3933,3936],{"class":36,"line":524},[34,3922,3923],{"class":3617},"       std",[34,3925,3926],{"class":40},"::cout",[34,3928,2835],{"class":55},[34,3930,1632],{"class":40},[34,3932,2835],{"class":55},[34,3934,3935],{"class":3617},"std",[34,3937,3938],{"class":40},"::endl;\n",[34,3940,3941,3944,3947],{"class":36,"line":530},[34,3942,3943],{"class":40},"        num",[34,3945,3946],{"class":55},"++",[34,3948,2952],{"class":40},[34,3950,3951],{"class":36,"line":624},[34,3952,3841],{"class":40},[34,3954,3955,3958,3960,3963],{"class":36,"line":630},[34,3956,3957],{"class":3617},"    system",[34,3959,286],{"class":40},[34,3961,3962],{"class":504},"\"pause\"",[34,3964,101],{"class":40},[34,3966,3967],{"class":36,"line":636},[34,3968,3223],{"class":40},[103,3970,3971],{},"注意：写好循环条件，避免死循环情况",[24,3973,3975],{"className":1809,"code":3974,"language":1811,"meta":29,"style":29},"\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",[31,3976,3977,3982,3989,3996,4006,4014,4018,4023,4050,4054,4059,4067,4094,4099,4104,4117,4127,4131,4141,4146,4159,4164,4178,4183,4198,4202,4215,4219,4224,4228,4242,4250,4255,4261,4267,4272],{"__ignoreMap":29},[34,3978,3979],{"class":36,"line":37},[34,3980,3981],{"class":161},"\u002F\u002F循环结构-猜数字\n",[34,3983,3984,3986],{"class":36,"line":165},[34,3985,3603],{"class":55},[34,3987,3988],{"class":504}," \u003Ciostream>\n",[34,3990,3991,3993],{"class":36,"line":171},[34,3992,3603],{"class":55},[34,3994,3995],{"class":504}," \u003Cctime>\n",[34,3997,3998,4000,4002,4004],{"class":36,"line":182},[34,3999,3611],{"class":55},[34,4001,3614],{"class":55},[34,4003,3618],{"class":3617},[34,4005,2952],{"class":40},[34,4007,4008,4010,4012],{"class":36,"line":188},[34,4009,571],{"class":55},[34,4011,3627],{"class":3617},[34,4013,3630],{"class":40},[34,4015,4016],{"class":36,"line":518},[34,4017,3204],{"class":40},[34,4019,4020],{"class":36,"line":524},[34,4021,4022],{"class":161},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[34,4024,4025,4028,4031,4034,4037,4039,4042,4044,4047],{"class":36,"line":530},[34,4026,4027],{"class":3617},"    srand",[34,4029,4030],{"class":40},"((",[34,4032,4033],{"class":55},"unsigned",[34,4035,4036],{"class":55}," int",[34,4038,918],{"class":40},[34,4040,4041],{"class":3617},"time",[34,4043,286],{"class":40},[34,4045,4046],{"class":44},"NULL",[34,4048,4049],{"class":40},"));\n",[34,4051,4052],{"class":36,"line":624},[34,4053,1475],{"emptyLinePlaceholder":1474},[34,4055,4056],{"class":36,"line":630},[34,4057,4058],{"class":161},"    \u002F\u002F1.系统生成随机数\n",[34,4060,4061,4064],{"class":36,"line":636},[34,4062,4063],{"class":161},"    \u002F\u002Frand()%100",[34,4065,4066],{"class":161}," \u002F\u002F生成0-99的随机数\n",[34,4068,4069,4071,4073,4075,4078,4081,4083,4085,4087,4089,4091],{"class":36,"line":1513},[34,4070,3639],{"class":55},[34,4072,3894],{"class":40},[34,4074,221],{"class":55},[34,4076,4077],{"class":3617},"rand",[34,4079,4080],{"class":40},"()",[34,4082,2131],{"class":55},[34,4084,451],{"class":44},[34,4086,2277],{"class":55},[34,4088,394],{"class":44},[34,4090,1870],{"class":40},[34,4092,4093],{"class":161}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[34,4095,4096],{"class":36,"line":1519},[34,4097,4098],{"class":161},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[34,4100,4101],{"class":36,"line":3283},[34,4102,4103],{"class":161},"    \u002F\u002F2.玩家猜测\n",[34,4105,4106,4108,4111,4113,4115],{"class":36,"line":3297},[34,4107,3639],{"class":55},[34,4109,4110],{"class":40}," val",[34,4112,221],{"class":55},[34,4114,177],{"class":44},[34,4116,2952],{"class":40},[34,4118,4119,4121,4123,4125],{"class":36,"line":3302},[34,4120,3905],{"class":55},[34,4122,3313],{"class":40},[34,4124,394],{"class":44},[34,4126,101],{"class":40},[34,4128,4129],{"class":36,"line":3308},[34,4130,3684],{"class":40},[34,4132,4133,4136,4138],{"class":36,"line":3328},[34,4134,4135],{"class":40},"        cin",[34,4137,3088],{"class":55},[34,4139,4140],{"class":40},"val;\n",[34,4142,4143],{"class":36,"line":3333},[34,4144,4145],{"class":161},"        \u002F\u002F3.判断玩家猜测\n",[34,4147,4148,4151,4154,4156],{"class":36,"line":3347},[34,4149,4150],{"class":55},"        if",[34,4152,4153],{"class":40},"(val",[34,4155,2701],{"class":55},[34,4157,4158],{"class":40},"num) \n",[34,4160,4161],{"class":36,"line":3352},[34,4162,4163],{"class":40},"        {\n",[34,4165,4166,4169,4171,4174,4176],{"class":36,"line":3381},[34,4167,4168],{"class":40},"            cout",[34,4170,2835],{"class":55},[34,4172,4173],{"class":504},"\"猜小了！\"",[34,4175,2835],{"class":55},[34,4177,2857],{"class":40},[34,4179,4180],{"class":36,"line":3386},[34,4181,4182],{"class":40},"        }\n",[34,4184,4185,4188,4190,4193,4195],{"class":36,"line":3403},[34,4186,4187],{"class":55},"        else",[34,4189,3358],{"class":55},[34,4191,4192],{"class":40}," (val",[34,4194,2751],{"class":55},[34,4196,4197],{"class":40},"num)\n",[34,4199,4200],{"class":36,"line":3408},[34,4201,4163],{"class":40},[34,4203,4204,4206,4208,4211,4213],{"class":36,"line":3413},[34,4205,4168],{"class":40},[34,4207,2835],{"class":55},[34,4209,4210],{"class":504},"\"猜大了！\"",[34,4212,2835],{"class":55},[34,4214,2857],{"class":40},[34,4216,4217],{"class":36,"line":3418},[34,4218,4182],{"class":40},[34,4220,4221],{"class":36,"line":3432},[34,4222,4223],{"class":55},"        else\n",[34,4225,4226],{"class":36,"line":3437},[34,4227,4163],{"class":40},[34,4229,4231,4233,4235,4238,4240],{"class":36,"line":4230},30,[34,4232,4168],{"class":40},[34,4234,2835],{"class":55},[34,4236,4237],{"class":504},"\"猜对了！\"",[34,4239,2835],{"class":55},[34,4241,2857],{"class":40},[34,4243,4245,4248],{"class":36,"line":4244},31,[34,4246,4247],{"class":55},"            break",[34,4249,2952],{"class":40},[34,4251,4253],{"class":36,"line":4252},32,[34,4254,4182],{"class":40},[34,4256,4258],{"class":36,"line":4257},33,[34,4259,4260],{"class":161},"        \u002F\u002F猜对 退出游戏\n",[34,4262,4264],{"class":36,"line":4263},34,[34,4265,4266],{"class":161},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[34,4268,4270],{"class":36,"line":4269},35,[34,4271,3841],{"class":40},[34,4273,4275],{"class":36,"line":4274},36,[34,4276,3223],{"class":40},[1772,4278,4279],{"start":165},[1775,4280,4281,4282,4285],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[1165,4283,4284],{},"do...while会先执行一次循环语句","，在判断循环语句",[24,4287,4289],{"className":1809,"code":4288,"language":1811,"meta":29,"style":29},"\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",[31,4290,4291,4296,4304,4308,4320,4328,4332,4349,4356,4360,4373,4383],{"__ignoreMap":29},[34,4292,4293],{"class":36,"line":37},[34,4294,4295],{"class":161},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[34,4297,4298,4300,4302],{"class":36,"line":165},[34,4299,571],{"class":55},[34,4301,3627],{"class":3617},[34,4303,3630],{"class":40},[34,4305,4306],{"class":36,"line":171},[34,4307,3204],{"class":40},[34,4309,4310,4312,4314,4316,4318],{"class":36,"line":182},[34,4311,3639],{"class":55},[34,4313,3894],{"class":40},[34,4315,221],{"class":55},[34,4317,177],{"class":44},[34,4319,2952],{"class":40},[34,4321,4322,4325],{"class":36,"line":188},[34,4323,4324],{"class":55},"    do",[34,4326,4327],{"class":40}," \n",[34,4329,4330],{"class":36,"line":518},[34,4331,3684],{"class":40},[34,4333,4334,4337,4339,4341,4343,4345,4347],{"class":36,"line":524},[34,4335,4336],{"class":3617},"        std",[34,4338,3926],{"class":40},[34,4340,2835],{"class":55},[34,4342,1632],{"class":40},[34,4344,2835],{"class":55},[34,4346,3935],{"class":3617},[34,4348,3938],{"class":40},[34,4350,4351,4353],{"class":36,"line":530},[34,4352,3943],{"class":40},[34,4354,4355],{"class":55},"++\n",[34,4357,4358],{"class":36,"line":624},[34,4359,3841],{"class":40},[34,4361,4362,4364,4366,4368,4370],{"class":36,"line":630},[34,4363,3905],{"class":55},[34,4365,3908],{"class":40},[34,4367,2701],{"class":55},[34,4369,410],{"class":44},[34,4371,4372],{"class":40},");\n",[34,4374,4375,4377,4379,4381],{"class":36,"line":636},[34,4376,3957],{"class":3617},[34,4378,286],{"class":40},[34,4380,3962],{"class":504},[34,4382,4372],{"class":40},[34,4384,4385],{"class":36,"line":1513},[34,4386,3223],{"class":40},[103,4388,4389],{},"案例-水仙花数",[103,4391,4392],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[103,4394,4395],{},"例如：1^3+5^3+3^3=153",[103,4397,4398],{},"请用do...while语句，求出所有3位数的水仙花数",[24,4400,4402],{"className":1809,"code":4401,"language":1811,"meta":29,"style":29},"#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",[31,4403,4404,4410,4420,4428,4432,4437,4449,4455,4459,4464,4480,4496,4512,4527,4546,4561,4609,4613,4625,4629,4637,4641,4655],{"__ignoreMap":29},[34,4405,4406,4408],{"class":36,"line":37},[34,4407,3603],{"class":55},[34,4409,3988],{"class":504},[34,4411,4412,4414,4416,4418],{"class":36,"line":165},[34,4413,3611],{"class":55},[34,4415,3614],{"class":55},[34,4417,3618],{"class":3617},[34,4419,2952],{"class":40},[34,4421,4422,4424,4426],{"class":36,"line":171},[34,4423,571],{"class":55},[34,4425,3627],{"class":3617},[34,4427,3630],{"class":40},[34,4429,4430],{"class":36,"line":182},[34,4431,3204],{"class":40},[34,4433,4434],{"class":36,"line":188},[34,4435,4436],{"class":161},"    \u002F\u002F1.先打印所有三位数字\n",[34,4438,4439,4441,4443,4445,4447],{"class":36,"line":518},[34,4440,3639],{"class":55},[34,4442,3894],{"class":40},[34,4444,221],{"class":55},[34,4446,451],{"class":44},[34,4448,2952],{"class":40},[34,4450,4451,4453],{"class":36,"line":524},[34,4452,4324],{"class":55},[34,4454,4327],{"class":40},[34,4456,4457],{"class":36,"line":530},[34,4458,3684],{"class":40},[34,4460,4461],{"class":36,"line":624},[34,4462,4463],{"class":161},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[34,4465,4466,4469,4471,4473,4475,4477],{"class":36,"line":630},[34,4467,4468],{"class":55},"        int",[34,4470,3057],{"class":40},[34,4472,221],{"class":55},[34,4474,177],{"class":44},[34,4476,1870],{"class":40},[34,4478,4479],{"class":161}," \u002F\u002F个位\n",[34,4481,4482,4484,4487,4489,4491,4493],{"class":36,"line":636},[34,4483,4468],{"class":55},[34,4485,4486],{"class":40}," b",[34,4488,221],{"class":55},[34,4490,177],{"class":44},[34,4492,1870],{"class":40},[34,4494,4495],{"class":161}," \u002F\u002F十位\n",[34,4497,4498,4500,4503,4505,4507,4509],{"class":36,"line":1513},[34,4499,4468],{"class":55},[34,4501,4502],{"class":40}," c",[34,4504,221],{"class":55},[34,4506,177],{"class":44},[34,4508,1870],{"class":40},[34,4510,4511],{"class":161}," \u002F\u002F百位\n",[34,4513,4514,4517,4519,4521,4523,4525],{"class":36,"line":1519},[34,4515,4516],{"class":40},"        a",[34,4518,221],{"class":55},[34,4520,1632],{"class":40},[34,4522,2131],{"class":55},[34,4524,410],{"class":44},[34,4526,2952],{"class":40},[34,4528,4529,4532,4534,4536,4538,4540,4542,4544],{"class":36,"line":3283},[34,4530,4531],{"class":40},"        b",[34,4533,221],{"class":55},[34,4535,1632],{"class":40},[34,4537,2379],{"class":55},[34,4539,410],{"class":44},[34,4541,2131],{"class":55},[34,4543,410],{"class":44},[34,4545,2952],{"class":40},[34,4547,4548,4551,4553,4555,4557,4559],{"class":36,"line":3297},[34,4549,4550],{"class":40},"        c",[34,4552,221],{"class":55},[34,4554,1632],{"class":40},[34,4556,2379],{"class":55},[34,4558,451],{"class":44},[34,4560,2952],{"class":40},[34,4562,4563,4565,4567,4569,4571,4573,4575,4577,4579,4581,4583,4585,4587,4589,4591,4593,4595,4597,4600,4603,4606],{"class":36,"line":3302},[34,4564,4150],{"class":55},[34,4566,3495],{"class":40},[34,4568,2252],{"class":55},[34,4570,236],{"class":40},[34,4572,2252],{"class":55},[34,4574,236],{"class":40},[34,4576,2277],{"class":55},[34,4578,2070],{"class":40},[34,4580,2252],{"class":55},[34,4582,2070],{"class":40},[34,4584,2252],{"class":55},[34,4586,2070],{"class":40},[34,4588,2277],{"class":55},[34,4590,2095],{"class":40},[34,4592,2252],{"class":55},[34,4594,2095],{"class":40},[34,4596,2252],{"class":55},[34,4598,4599],{"class":40},"c ",[34,4601,4602],{"class":55},"==",[34,4604,4605],{"class":40}," num)",[34,4607,4608],{"class":161}," \u002F\u002F如果是水仙花数，才打印\n",[34,4610,4611],{"class":36,"line":3308},[34,4612,4163],{"class":40},[34,4614,4615,4617,4619,4621,4623],{"class":36,"line":3328},[34,4616,4168],{"class":40},[34,4618,2835],{"class":55},[34,4620,1632],{"class":40},[34,4622,2835],{"class":55},[34,4624,2857],{"class":40},[34,4626,4627],{"class":36,"line":3333},[34,4628,4182],{"class":40},[34,4630,4631,4633,4635],{"class":36,"line":3347},[34,4632,3943],{"class":40},[34,4634,3946],{"class":55},[34,4636,2952],{"class":40},[34,4638,4639],{"class":36,"line":3352},[34,4640,3841],{"class":40},[34,4642,4643,4645,4648,4650,4653],{"class":36,"line":3381},[34,4644,3905],{"class":55},[34,4646,4647],{"class":40}," (num ",[34,4649,2701],{"class":55},[34,4651,4652],{"class":44}," 1000",[34,4654,4372],{"class":40},[34,4656,4657],{"class":36,"line":3386},[34,4658,3223],{"class":40},[1772,4660,4661],{"start":171},[1775,4662,4663],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[24,4665,4667],{"className":1809,"code":4666,"language":1811,"meta":29,"style":29},"\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",[31,4668,4669,4674,4703,4707,4719,4723,4728,4739,4746,4750,4764,4768,4775,4779,4791,4800],{"__ignoreMap":29},[34,4670,4671],{"class":36,"line":37},[34,4672,4673],{"class":161},"\u002F\u002F从数字0-9打印\n",[34,4675,4676,4679,4681,4683,4686,4688,4690,4693,4695,4697,4699,4701],{"class":36,"line":165},[34,4677,4678],{"class":55},"for",[34,4680,286],{"class":40},[34,4682,571],{"class":55},[34,4684,4685],{"class":40}," i",[34,4687,221],{"class":55},[34,4689,177],{"class":44},[34,4691,4692],{"class":40},";i",[34,4694,2701],{"class":55},[34,4696,410],{"class":44},[34,4698,4692],{"class":40},[34,4700,3946],{"class":55},[34,4702,101],{"class":40},[34,4704,4705],{"class":36,"line":171},[34,4706,3204],{"class":40},[34,4708,4709,4711,4713,4715,4717],{"class":36,"line":182},[34,4710,3209],{"class":40},[34,4712,2835],{"class":55},[34,4714,2239],{"class":40},[34,4716,2835],{"class":55},[34,4718,2857],{"class":40},[34,4720,4721],{"class":36,"line":188},[34,4722,3223],{"class":40},[34,4724,4725],{"class":36,"line":518},[34,4726,4727],{"class":161},"\u002F\u002F上式可以进行拆分\n",[34,4729,4730,4732,4734,4736],{"class":36,"line":524},[34,4731,571],{"class":55},[34,4733,4685],{"class":40},[34,4735,221],{"class":55},[34,4737,4738],{"class":44},"0\n",[34,4740,4741,4743],{"class":36,"line":530},[34,4742,4678],{"class":55},[34,4744,4745],{"class":40},"(;;;)\n",[34,4747,4748],{"class":36,"line":624},[34,4749,3204],{"class":40},[34,4751,4752,4755,4758,4760,4762],{"class":36,"line":630},[34,4753,4754],{"class":55},"    if",[34,4756,4757],{"class":40},"(i",[34,4759,3364],{"class":55},[34,4761,410],{"class":44},[34,4763,101],{"class":40},[34,4765,4766],{"class":36,"line":636},[34,4767,3684],{"class":40},[34,4769,4770,4773],{"class":36,"line":1513},[34,4771,4772],{"class":55},"        break",[34,4774,2952],{"class":40},[34,4776,4777],{"class":36,"line":1519},[34,4778,3841],{"class":40},[34,4780,4781,4783,4785,4787,4789],{"class":36,"line":3283},[34,4782,3209],{"class":40},[34,4784,2835],{"class":55},[34,4786,2239],{"class":40},[34,4788,2835],{"class":55},[34,4790,2857],{"class":40},[34,4792,4793,4796,4798],{"class":36,"line":3297},[34,4794,4795],{"class":40},"    i",[34,4797,3946],{"class":55},[34,4799,2952],{"class":40},[34,4801,4802],{"class":36,"line":3302},[34,4803,3223],{"class":40},[103,4805,4806],{},"小练习",[24,4808,4810],{"className":1809,"code":4809,"language":1811,"meta":29,"style":29},"#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",[31,4811,4812,4818,4828,4836,4840,4845,4850,4878,4882,4887,4892,4933,4937,4950,4954,4958,4962,4974,4978,4982],{"__ignoreMap":29},[34,4813,4814,4816],{"class":36,"line":37},[34,4815,3603],{"class":55},[34,4817,3606],{"class":504},[34,4819,4820,4822,4824,4826],{"class":36,"line":165},[34,4821,3611],{"class":55},[34,4823,3614],{"class":55},[34,4825,3618],{"class":3617},[34,4827,2952],{"class":40},[34,4829,4830,4832,4834],{"class":36,"line":171},[34,4831,571],{"class":55},[34,4833,3627],{"class":3617},[34,4835,3630],{"class":40},[34,4837,4838],{"class":36,"line":182},[34,4839,3204],{"class":40},[34,4841,4842],{"class":36,"line":188},[34,4843,4844],{"class":161},"    \u002F\u002F敲桌子案例\n",[34,4846,4847],{"class":36,"line":518},[34,4848,4849],{"class":161},"    \u002F\u002F1.先输出1-100的数字\n",[34,4851,4852,4855,4857,4859,4861,4863,4865,4868,4870,4872,4874,4876],{"class":36,"line":524},[34,4853,4854],{"class":55},"    for",[34,4856,286],{"class":40},[34,4858,571],{"class":55},[34,4860,4685],{"class":40},[34,4862,221],{"class":55},[34,4864,394],{"class":44},[34,4866,4867],{"class":40},"; i",[34,4869,3246],{"class":55},[34,4871,451],{"class":44},[34,4873,4867],{"class":40},[34,4875,3946],{"class":55},[34,4877,101],{"class":40},[34,4879,4880],{"class":36,"line":530},[34,4881,3684],{"class":40},[34,4883,4884],{"class":36,"line":624},[34,4885,4886],{"class":161},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[34,4888,4889],{"class":36,"line":630},[34,4890,4891],{"class":161},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[34,4893,4894,4896,4898,4900,4902,4904,4906,4909,4911,4913,4915,4917,4919,4921,4923,4925,4927,4929,4931],{"class":36,"line":636},[34,4895,4150],{"class":55},[34,4897,4757],{"class":40},[34,4899,2131],{"class":55},[34,4901,609],{"class":44},[34,4903,4602],{"class":55},[34,4905,177],{"class":44},[34,4907,4908],{"class":55}," ||",[34,4910,4685],{"class":40},[34,4912,2131],{"class":55},[34,4914,410],{"class":44},[34,4916,4602],{"class":55},[34,4918,609],{"class":44},[34,4920,4908],{"class":55},[34,4922,4685],{"class":40},[34,4924,2379],{"class":55},[34,4926,410],{"class":44},[34,4928,4602],{"class":55},[34,4930,609],{"class":44},[34,4932,101],{"class":40},[34,4934,4935],{"class":36,"line":1513},[34,4936,4163],{"class":40},[34,4938,4939,4941,4943,4946,4948],{"class":36,"line":1519},[34,4940,4168],{"class":40},[34,4942,2835],{"class":55},[34,4944,4945],{"class":504},"\"敲桌子\"",[34,4947,2835],{"class":55},[34,4949,2857],{"class":40},[34,4951,4952],{"class":36,"line":3283},[34,4953,4182],{"class":40},[34,4955,4956],{"class":36,"line":3297},[34,4957,4223],{"class":55},[34,4959,4960],{"class":36,"line":3302},[34,4961,4163],{"class":40},[34,4963,4964,4966,4968,4970,4972],{"class":36,"line":3308},[34,4965,4168],{"class":40},[34,4967,2835],{"class":55},[34,4969,2239],{"class":40},[34,4971,2835],{"class":55},[34,4973,2857],{"class":40},[34,4975,4976],{"class":36,"line":3328},[34,4977,4182],{"class":40},[34,4979,4980],{"class":36,"line":3333},[34,4981,3841],{"class":40},[34,4983,4984],{"class":36,"line":3347},[34,4985,3223],{"class":40},[103,4987,4988],{},"嵌套实现星图",[24,4990,4992],{"className":1809,"code":4991,"language":1811,"meta":29,"style":29},"#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",[31,4993,4994,5000,5010,5018,5022,5048,5052,5081,5085,5096,5100,5109,5113],{"__ignoreMap":29},[34,4995,4996,4998],{"class":36,"line":37},[34,4997,3603],{"class":55},[34,4999,3606],{"class":504},[34,5001,5002,5004,5006,5008],{"class":36,"line":165},[34,5003,3611],{"class":55},[34,5005,3614],{"class":55},[34,5007,3618],{"class":3617},[34,5009,2952],{"class":40},[34,5011,5012,5014,5016],{"class":36,"line":171},[34,5013,571],{"class":55},[34,5015,3627],{"class":3617},[34,5017,3630],{"class":40},[34,5019,5020],{"class":36,"line":182},[34,5021,3204],{"class":40},[34,5023,5024,5026,5028,5030,5032,5034,5036,5038,5040,5042,5044,5046],{"class":36,"line":188},[34,5025,4854],{"class":55},[34,5027,3313],{"class":40},[34,5029,571],{"class":55},[34,5031,4685],{"class":40},[34,5033,221],{"class":55},[34,5035,177],{"class":44},[34,5037,4692],{"class":40},[34,5039,2701],{"class":55},[34,5041,410],{"class":44},[34,5043,4692],{"class":40},[34,5045,3946],{"class":55},[34,5047,101],{"class":40},[34,5049,5050],{"class":36,"line":518},[34,5051,3684],{"class":40},[34,5053,5054,5057,5059,5061,5064,5066,5068,5071,5073,5075,5077,5079],{"class":36,"line":524},[34,5055,5056],{"class":55},"        for",[34,5058,3313],{"class":40},[34,5060,571],{"class":55},[34,5062,5063],{"class":40}," j",[34,5065,221],{"class":55},[34,5067,177],{"class":44},[34,5069,5070],{"class":40},";j",[34,5072,2701],{"class":55},[34,5074,410],{"class":44},[34,5076,5070],{"class":40},[34,5078,3946],{"class":55},[34,5080,101],{"class":40},[34,5082,5083],{"class":36,"line":530},[34,5084,4163],{"class":40},[34,5086,5087,5089,5091,5094],{"class":36,"line":624},[34,5088,4168],{"class":40},[34,5090,2835],{"class":55},[34,5092,5093],{"class":504},"\"*\"",[34,5095,2952],{"class":40},[34,5097,5098],{"class":36,"line":630},[34,5099,4182],{"class":40},[34,5101,5102,5105,5107],{"class":36,"line":636},[34,5103,5104],{"class":40},"        cout",[34,5106,2835],{"class":55},[34,5108,2857],{"class":40},[34,5110,5111],{"class":36,"line":1513},[34,5112,3841],{"class":40},[34,5114,5115],{"class":36,"line":1519},[34,5116,3223],{"class":40},[103,5118,5119],{},"乘法口诀表",[24,5121,5123],{"className":1809,"code":5122,"language":1811,"meta":29,"style":29},"#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",[31,5124,5125,5131,5141,5149,5153,5179,5183,5208,5212,5252,5256,5264,5268],{"__ignoreMap":29},[34,5126,5127,5129],{"class":36,"line":37},[34,5128,3603],{"class":55},[34,5130,3988],{"class":504},[34,5132,5133,5135,5137,5139],{"class":36,"line":165},[34,5134,3611],{"class":55},[34,5136,3614],{"class":55},[34,5138,3618],{"class":3617},[34,5140,2952],{"class":40},[34,5142,5143,5145,5147],{"class":36,"line":171},[34,5144,571],{"class":55},[34,5146,3627],{"class":3617},[34,5148,3630],{"class":40},[34,5150,5151],{"class":36,"line":182},[34,5152,3204],{"class":40},[34,5154,5155,5157,5159,5161,5163,5165,5167,5169,5171,5173,5175,5177],{"class":36,"line":188},[34,5156,4854],{"class":55},[34,5158,286],{"class":40},[34,5160,571],{"class":55},[34,5162,4685],{"class":40},[34,5164,221],{"class":55},[34,5166,394],{"class":44},[34,5168,4692],{"class":40},[34,5170,2701],{"class":55},[34,5172,410],{"class":44},[34,5174,4692],{"class":40},[34,5176,3946],{"class":55},[34,5178,101],{"class":40},[34,5180,5181],{"class":36,"line":518},[34,5182,3684],{"class":40},[34,5184,5185,5187,5189,5191,5193,5195,5197,5199,5201,5204,5206],{"class":36,"line":524},[34,5186,5056],{"class":55},[34,5188,286],{"class":40},[34,5190,571],{"class":55},[34,5192,5063],{"class":40},[34,5194,221],{"class":55},[34,5196,394],{"class":44},[34,5198,5070],{"class":40},[34,5200,3246],{"class":55},[34,5202,5203],{"class":40},"i;j",[34,5205,3946],{"class":55},[34,5207,101],{"class":40},[34,5209,5210],{"class":36,"line":530},[34,5211,4163],{"class":40},[34,5213,5214,5216,5218,5220,5222,5224,5226,5228,5230,5233,5235,5237,5239,5241,5243,5246,5248,5250],{"class":36,"line":624},[34,5215,4168],{"class":40},[34,5217,2835],{"class":55},[34,5219,2264],{"class":40},[34,5221,2835],{"class":55},[34,5223,5093],{"class":504},[34,5225,2835],{"class":55},[34,5227,2239],{"class":40},[34,5229,2835],{"class":55},[34,5231,5232],{"class":504},"\"=\"",[34,5234,2835],{"class":55},[34,5236,2239],{"class":40},[34,5238,2252],{"class":55},[34,5240,2264],{"class":40},[34,5242,2835],{"class":55},[34,5244,5245],{"class":504},"'",[34,5247,2892],{"class":44},[34,5249,5245],{"class":504},[34,5251,2952],{"class":40},[34,5253,5254],{"class":36,"line":630},[34,5255,4182],{"class":40},[34,5257,5258,5260,5262],{"class":36,"line":636},[34,5259,5104],{"class":40},[34,5261,2835],{"class":55},[34,5263,2857],{"class":40},[34,5265,5266],{"class":36,"line":1513},[34,5267,3841],{"class":40},[34,5269,5270],{"class":36,"line":1519},[34,5271,3223],{"class":40},[19,5273,5275],{"id":5274},"_163跳出语句","1.6.3跳出语句",[1772,5277,5278],{},[1775,5279,5280],{},"break语句\n作用：用于跳出选择结构或者循环结构",[103,5282,5283],{},"break使用时机：",[2798,5285,5286,5289,5292],{},[1775,5287,5288],{},"出现在switch条件语句中，作用是终止case并跳出switch",[1775,5290,5291],{},"出现在循环结构中，作用是跳出当前的循环结构",[1775,5293,5294],{},"出现在嵌套循环中，跳出最近的内层循环语句",[1772,5296,5297,5300],{"start":165},[1775,5298,5299],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[1775,5301,5302],{},"goto语句\n语法：goto 标记;",[103,5304,5305],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[24,5307,5309],{"className":1809,"code":5308,"language":1811,"meta":29,"style":29},"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",[31,5310,5311,5319,5323,5336,5346,5359,5372,5385,5393,5409],{"__ignoreMap":29},[34,5312,5313,5315,5317],{"class":36,"line":37},[34,5314,571],{"class":55},[34,5316,3627],{"class":3617},[34,5318,3630],{"class":40},[34,5320,5321],{"class":36,"line":165},[34,5322,3204],{"class":40},[34,5324,5325,5327,5329,5332,5334],{"class":36,"line":171},[34,5326,3209],{"class":40},[34,5328,2835],{"class":55},[34,5330,5331],{"class":504},"\"1\"",[34,5333,2835],{"class":55},[34,5335,2857],{"class":40},[34,5337,5338,5341,5344],{"class":36,"line":182},[34,5339,5340],{"class":55},"    goto",[34,5342,5343],{"class":3617}," FLAG",[34,5345,2952],{"class":40},[34,5347,5348,5350,5352,5355,5357],{"class":36,"line":188},[34,5349,3209],{"class":40},[34,5351,2835],{"class":55},[34,5353,5354],{"class":504},"\"2\"",[34,5356,2835],{"class":55},[34,5358,2857],{"class":40},[34,5360,5361,5363,5365,5368,5370],{"class":36,"line":518},[34,5362,3209],{"class":40},[34,5364,2835],{"class":55},[34,5366,5367],{"class":504},"\"3\"",[34,5369,2835],{"class":55},[34,5371,2857],{"class":40},[34,5373,5374,5376,5378,5381,5383],{"class":36,"line":524},[34,5375,3209],{"class":40},[34,5377,2835],{"class":55},[34,5379,5380],{"class":504},"\"4\"",[34,5382,2835],{"class":55},[34,5384,2857],{"class":40},[34,5386,5387,5390],{"class":36,"line":530},[34,5388,5389],{"class":3617},"    FLAG",[34,5391,5392],{"class":40},":\n",[34,5394,5395,5397,5399,5402,5404,5406],{"class":36,"line":624},[34,5396,3209],{"class":40},[34,5398,2835],{"class":55},[34,5400,5401],{"class":504},"\"5\"",[34,5403,2835],{"class":55},[34,5405,2900],{"class":40},[34,5407,5408],{"class":161},"\u002F\u002F跳过了2,3,4,直接到5\n",[34,5410,5411],{"class":36,"line":630},[34,5412,3223],{"class":40},[14,5414,5416],{"id":5415},"_17数组","1.7数组",[19,5418,5420],{"id":5419},"_171一维数组","1.7.1一维数组",[1772,5422,5423],{},[1775,5424,5425],{},"一维数组定义方式",[1948,5427,5428,5438],{},[1951,5429,5430],{},[1954,5431,5432,5435],{},[1957,5433,5434],{},"方式",[1957,5436,5437],{},"注意事项",[1994,5439,5440,5454,5464],{},[1954,5441,5442,5448],{},[1999,5443,5444,5445,1870],{},"数据类型 数组名",[34,5446,5447],{},"数组长度",[1999,5449,5450,5451,5453],{},"这种方式是先定义再arr",[34,5452,2239],{},"赋值",[1954,5455,5456,5461],{},[1999,5457,5444,5458,5460],{},[34,5459,5447],{},"={值1,值2....};",[1999,5462,5463],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1954,5465,5466,5470],{},[1999,5467,5444,5468,5460],{},[34,5469],{},[1999,5471,5472,5473,5475],{},"int arr",[34,5474],{},";这是不正确的，按照这样的方式定义必须有初始长度",[1772,5477,5478],{"start":165},[1775,5479,5480],{},"一维数组数组名\n用途：",[2798,5482,5483],{},[1775,5484,5485],{},"1.可以统计整个数组在内存中的长度：",[24,5487,5489],{"className":1809,"code":5488,"language":1811,"meta":29,"style":29},"sizeof(arr);\nsizeof(arr[0]);\n",[31,5490,5491,5498],{"__ignoreMap":29},[34,5492,5493,5495],{"class":36,"line":37},[34,5494,1818],{"class":55},[34,5496,5497],{"class":40},"(arr);\n",[34,5499,5500,5502,5505,5507],{"class":36,"line":165},[34,5501,1818],{"class":55},[34,5503,5504],{"class":40},"(arr[",[34,5506,177],{"class":44},[34,5508,5509],{"class":40},"]);\n",[2798,5511,5512],{},[1775,5513,5514],{},"2.可以获取数组在内存中的首地址:",[24,5516,5518],{"className":1809,"code":5517,"language":1811,"meta":29,"style":29},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[31,5519,5520,5525,5538,5543],{"__ignoreMap":29},[34,5521,5522],{"class":36,"line":37},[34,5523,5524],{"class":161},"\u002F\u002F查看16进制的首地址\n",[34,5526,5527,5529,5531,5534,5536],{"class":36,"line":165},[34,5528,3028],{"class":40},[34,5530,2835],{"class":55},[34,5532,5533],{"class":40},"arr",[34,5535,2835],{"class":55},[34,5537,2857],{"class":40},[34,5539,5540],{"class":36,"line":171},[34,5541,5542],{"class":161},"\u002F\u002F看10进制数\n",[34,5544,5545,5547,5549,5551,5553,5555,5557,5560,5562,5564,5566],{"class":36,"line":182},[34,5546,3028],{"class":40},[34,5548,2835],{"class":55},[34,5550,286],{"class":40},[34,5552,571],{"class":55},[34,5554,918],{"class":40},[34,5556,2155],{"class":55},[34,5558,5559],{"class":40},"arr[",[34,5561,177],{"class":44},[34,5563,2731],{"class":40},[34,5565,2835],{"class":55},[34,5567,2857],{"class":40},[103,5569,5570],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[2798,5572,5573],{},[1775,5574,5575],{},"1️⃣五只小猪称体重",[24,5577,5579],{"className":1809,"code":5578,"language":1811,"meta":29,"style":29},"#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",[31,5580,5581,5587,5597,5605,5609,5649,5662,5688,5692,5704,5708,5718,5722,5726,5739,5748],{"__ignoreMap":29},[34,5582,5583,5585],{"class":36,"line":37},[34,5584,3603],{"class":55},[34,5586,3606],{"class":504},[34,5588,5589,5591,5593,5595],{"class":36,"line":165},[34,5590,3611],{"class":55},[34,5592,3614],{"class":55},[34,5594,3618],{"class":3617},[34,5596,2952],{"class":40},[34,5598,5599,5601,5603],{"class":36,"line":171},[34,5600,571],{"class":55},[34,5602,3627],{"class":3617},[34,5604,3630],{"class":40},[34,5606,5607],{"class":36,"line":182},[34,5608,3204],{"class":40},[34,5610,5611,5613,5616,5618,5620,5622,5624,5627,5629,5632,5634,5636,5638,5641,5643,5646],{"class":36,"line":188},[34,5612,3639],{"class":55},[34,5614,5615],{"class":40}," arr[",[34,5617,224],{"class":44},[34,5619,2731],{"class":40},[34,5621,221],{"class":55},[34,5623,2687],{"class":40},[34,5625,5626],{"class":44},"300",[34,5628,291],{"class":40},[34,5630,5631],{"class":44},"350",[34,5633,291],{"class":40},[34,5635,3376],{"class":44},[34,5637,291],{"class":40},[34,5639,5640],{"class":44},"400",[34,5642,291],{"class":40},[34,5644,5645],{"class":44},"250",[34,5647,5648],{"class":40},"};\n",[34,5650,5651,5653,5656,5658,5660],{"class":36,"line":518},[34,5652,3639],{"class":55},[34,5654,5655],{"class":40}," tmp",[34,5657,221],{"class":55},[34,5659,177],{"class":44},[34,5661,2952],{"class":40},[34,5663,5664,5666,5668,5670,5672,5674,5676,5678,5680,5682,5684,5686],{"class":36,"line":524},[34,5665,4854],{"class":55},[34,5667,3313],{"class":40},[34,5669,571],{"class":55},[34,5671,4685],{"class":40},[34,5673,221],{"class":55},[34,5675,177],{"class":44},[34,5677,4692],{"class":40},[34,5679,2701],{"class":55},[34,5681,224],{"class":44},[34,5683,4692],{"class":40},[34,5685,3946],{"class":55},[34,5687,101],{"class":40},[34,5689,5690],{"class":36,"line":530},[34,5691,3684],{"class":40},[34,5693,5694,5696,5699,5701],{"class":36,"line":624},[34,5695,4150],{"class":55},[34,5697,5698],{"class":40},"(tmp",[34,5700,2701],{"class":55},[34,5702,5703],{"class":40},"arr[i])\n",[34,5705,5706],{"class":36,"line":630},[34,5707,4163],{"class":40},[34,5709,5710,5713,5715],{"class":36,"line":636},[34,5711,5712],{"class":40},"            tmp",[34,5714,221],{"class":55},[34,5716,5717],{"class":40},"arr[i];\n",[34,5719,5720],{"class":36,"line":1513},[34,5721,4182],{"class":40},[34,5723,5724],{"class":36,"line":1519},[34,5725,3841],{"class":40},[34,5727,5728,5730,5732,5735,5737],{"class":36,"line":3283},[34,5729,3209],{"class":40},[34,5731,2835],{"class":55},[34,5733,5734],{"class":40},"tmp",[34,5736,2835],{"class":55},[34,5738,2857],{"class":40},[34,5740,5741,5744,5746],{"class":36,"line":3297},[34,5742,5743],{"class":55},"    return",[34,5745,98],{"class":44},[34,5747,2952],{"class":40},[34,5749,5750],{"class":36,"line":3302},[34,5751,3223],{"class":40},[2798,5753,5754],{},[1775,5755,5756],{},"2️⃣数组元素逆置",[24,5758,5760],{"className":1809,"code":5759,"language":1811,"meta":29,"style":29},"\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",[31,5761,5762,5767,5773,5783,5791,5795,5830,5846,5878,5891,5896,5901,5913,5923,5933,5938,5947,5957,5962,5967,5994,5998,6014,6018,6029,6038],{"__ignoreMap":29},[34,5763,5764],{"class":36,"line":37},[34,5765,5766],{"class":161},"\u002F\u002F元素逆置\n",[34,5768,5769,5771],{"class":36,"line":165},[34,5770,3603],{"class":55},[34,5772,3606],{"class":504},[34,5774,5775,5777,5779,5781],{"class":36,"line":171},[34,5776,3611],{"class":55},[34,5778,3614],{"class":55},[34,5780,3618],{"class":3617},[34,5782,2952],{"class":40},[34,5784,5785,5787,5789],{"class":36,"line":182},[34,5786,571],{"class":55},[34,5788,3627],{"class":3617},[34,5790,3630],{"class":40},[34,5792,5793],{"class":36,"line":188},[34,5794,3204],{"class":40},[34,5796,5797,5800,5802,5804,5806,5808,5810,5812,5814,5816,5818,5820,5822,5824,5826,5828],{"class":36,"line":518},[34,5798,5799],{"class":55},"   int",[34,5801,5615],{"class":40},[34,5803,224],{"class":44},[34,5805,2731],{"class":40},[34,5807,221],{"class":55},[34,5809,2687],{"class":40},[34,5811,394],{"class":44},[34,5813,291],{"class":40},[34,5815,332],{"class":44},[34,5817,291],{"class":40},[34,5819,337],{"class":44},[34,5821,291],{"class":40},[34,5823,247],{"class":44},[34,5825,291],{"class":40},[34,5827,224],{"class":44},[34,5829,5648],{"class":40},[34,5831,5832,5834,5837,5839,5841,5843],{"class":36,"line":524},[34,5833,5799],{"class":55},[34,5835,5836],{"class":40}," start",[34,5838,221],{"class":55},[34,5840,177],{"class":44},[34,5842,1870],{"class":40},[34,5844,5845],{"class":161},"\u002F\u002F起始下标\n",[34,5847,5848,5850,5853,5856,5859,5862,5864,5866,5869,5871,5873,5875],{"class":36,"line":530},[34,5849,5799],{"class":55},[34,5851,5852],{"class":40}," end",[34,5854,5855],{"class":55},"=sizeof",[34,5857,5858],{"class":40},"(arr)",[34,5860,5861],{"class":55},"\u002Fsizeof",[34,5863,5504],{"class":40},[34,5865,177],{"class":44},[34,5867,5868],{"class":40},"])",[34,5870,2327],{"class":55},[34,5872,394],{"class":44},[34,5874,1870],{"class":40},[34,5876,5877],{"class":161},"\u002F\u002F结束下标\n",[34,5879,5880,5883,5886,5888],{"class":36,"line":624},[34,5881,5882],{"class":55},"   while",[34,5884,5885],{"class":40}," (start",[34,5887,2701],{"class":55},[34,5889,5890],{"class":40},"end)\n",[34,5892,5893],{"class":36,"line":630},[34,5894,5895],{"class":40},"   {\n",[34,5897,5898],{"class":36,"line":636},[34,5899,5900],{"class":161},"    \u002F\u002F实现元素互换代码\n",[34,5902,5903,5905,5908,5910],{"class":36,"line":1513},[34,5904,3639],{"class":55},[34,5906,5907],{"class":40}," temp",[34,5909,221],{"class":55},[34,5911,5912],{"class":40},"arr[start];\n",[34,5914,5915,5918,5920],{"class":36,"line":1519},[34,5916,5917],{"class":40},"    arr[start]",[34,5919,221],{"class":55},[34,5921,5922],{"class":40},"arr[end];\n",[34,5924,5925,5928,5930],{"class":36,"line":3283},[34,5926,5927],{"class":40},"    arr[end]",[34,5929,221],{"class":55},[34,5931,5932],{"class":40},"temp;\n",[34,5934,5935],{"class":36,"line":3297},[34,5936,5937],{"class":161},"    \u002F\u002F下标更新\n",[34,5939,5940,5943,5945],{"class":36,"line":3302},[34,5941,5942],{"class":40},"    start",[34,5944,3946],{"class":55},[34,5946,2952],{"class":40},[34,5948,5949,5952,5955],{"class":36,"line":3308},[34,5950,5951],{"class":40},"    end",[34,5953,5954],{"class":55},"--",[34,5956,2952],{"class":40},[34,5958,5959],{"class":36,"line":3328},[34,5960,5961],{"class":40},"   }\n",[34,5963,5964],{"class":36,"line":3333},[34,5965,5966],{"class":161},"   \u002F\u002F输出逆置后的数组\n",[34,5968,5969,5972,5974,5976,5978,5980,5982,5984,5986,5988,5990,5992],{"class":36,"line":3347},[34,5970,5971],{"class":55},"   for",[34,5973,3313],{"class":40},[34,5975,571],{"class":55},[34,5977,4685],{"class":40},[34,5979,221],{"class":55},[34,5981,177],{"class":44},[34,5983,4692],{"class":40},[34,5985,2701],{"class":55},[34,5987,224],{"class":44},[34,5989,4692],{"class":40},[34,5991,3946],{"class":55},[34,5993,101],{"class":40},[34,5995,5996],{"class":36,"line":3352},[34,5997,5895],{"class":40},[34,5999,6000,6002,6004,6007,6009,6012],{"class":36,"line":3381},[34,6001,3209],{"class":40},[34,6003,2835],{"class":55},[34,6005,6006],{"class":40},"arr[i]",[34,6008,2835],{"class":55},[34,6010,6011],{"class":504},"\" \"",[34,6013,2952],{"class":40},[34,6015,6016],{"class":36,"line":3386},[34,6017,5961],{"class":40},[34,6019,6020,6023,6025,6027],{"class":36,"line":3403},[34,6021,6022],{"class":3617},"   system",[34,6024,286],{"class":40},[34,6026,3962],{"class":504},[34,6028,4372],{"class":40},[34,6030,6031,6034,6036],{"class":36,"line":3408},[34,6032,6033],{"class":55},"   return",[34,6035,98],{"class":44},[34,6037,2952],{"class":40},[34,6039,6040],{"class":36,"line":3413},[34,6041,3223],{"class":40},[2798,6043,6044],{},[1775,6045,6046],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[24,6048,6050],{"className":1809,"code":6049,"language":1811,"meta":29,"style":29},"\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",[31,6051,6052,6057,6063,6073,6081,6085,6137,6150,6176,6180,6194,6198,6203,6208,6238,6242,6247,6281,6285,6290,6309,6314,6326,6342,6357,6362,6366,6370,6383,6409,6413,6427,6431,6439],{"__ignoreMap":29},[34,6053,6054],{"class":36,"line":37},[34,6055,6056],{"class":161},"\u002F\u002F冒泡排序,升序\n",[34,6058,6059,6061],{"class":36,"line":165},[34,6060,3603],{"class":55},[34,6062,3606],{"class":504},[34,6064,6065,6067,6069,6071],{"class":36,"line":171},[34,6066,3611],{"class":55},[34,6068,3614],{"class":55},[34,6070,3618],{"class":3617},[34,6072,2952],{"class":40},[34,6074,6075,6077,6079],{"class":36,"line":182},[34,6076,571],{"class":55},[34,6078,3627],{"class":3617},[34,6080,3630],{"class":40},[34,6082,6083],{"class":36,"line":188},[34,6084,3204],{"class":40},[34,6086,6087,6089,6091,6093,6096,6098,6101,6103,6105,6107,6109,6111,6113,6115,6117,6119,6121,6123,6125,6127,6129,6131,6133,6135],{"class":36,"line":518},[34,6088,3639],{"class":55},[34,6090,5615],{"class":40},[34,6092,1324],{"class":44},[34,6094,6095],{"class":40},"] ",[34,6097,221],{"class":55},[34,6099,6100],{"class":40}," {",[34,6102,247],{"class":44},[34,6104,291],{"class":40},[34,6106,332],{"class":44},[34,6108,291],{"class":40},[34,6110,2195],{"class":44},[34,6112,291],{"class":40},[34,6114,177],{"class":44},[34,6116,291],{"class":40},[34,6118,224],{"class":44},[34,6120,291],{"class":40},[34,6122,609],{"class":44},[34,6124,291],{"class":40},[34,6126,394],{"class":44},[34,6128,291],{"class":40},[34,6130,337],{"class":44},[34,6132,291],{"class":40},[34,6134,1324],{"class":44},[34,6136,5648],{"class":40},[34,6138,6139,6141,6143,6146,6148],{"class":36,"line":524},[34,6140,3209],{"class":40},[34,6142,2835],{"class":55},[34,6144,6145],{"class":504},"\"排序前：\"",[34,6147,2835],{"class":55},[34,6149,2857],{"class":40},[34,6151,6152,6154,6156,6158,6160,6162,6164,6166,6168,6170,6172,6174],{"class":36,"line":530},[34,6153,4854],{"class":55},[34,6155,3313],{"class":40},[34,6157,571],{"class":55},[34,6159,4685],{"class":40},[34,6161,221],{"class":55},[34,6163,177],{"class":44},[34,6165,4692],{"class":40},[34,6167,2701],{"class":55},[34,6169,1324],{"class":44},[34,6171,4692],{"class":40},[34,6173,3946],{"class":55},[34,6175,101],{"class":40},[34,6177,6178],{"class":36,"line":624},[34,6179,3684],{"class":40},[34,6181,6182,6184,6186,6188,6190,6192],{"class":36,"line":630},[34,6183,5104],{"class":40},[34,6185,2835],{"class":55},[34,6187,6006],{"class":40},[34,6189,2835],{"class":55},[34,6191,6011],{"class":504},[34,6193,2952],{"class":40},[34,6195,6196],{"class":36,"line":636},[34,6197,3841],{"class":40},[34,6199,6200],{"class":36,"line":1513},[34,6201,6202],{"class":161},"    \u002F\u002F开始冒泡排序\n",[34,6204,6205],{"class":36,"line":1519},[34,6206,6207],{"class":161},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[34,6209,6210,6212,6214,6216,6218,6220,6222,6224,6226,6228,6230,6232,6234,6236],{"class":36,"line":3283},[34,6211,4854],{"class":55},[34,6213,3313],{"class":40},[34,6215,571],{"class":55},[34,6217,4685],{"class":40},[34,6219,221],{"class":55},[34,6221,177],{"class":44},[34,6223,4692],{"class":40},[34,6225,2701],{"class":55},[34,6227,1324],{"class":44},[34,6229,2327],{"class":55},[34,6231,394],{"class":44},[34,6233,4692],{"class":40},[34,6235,3946],{"class":55},[34,6237,101],{"class":40},[34,6239,6240],{"class":36,"line":3297},[34,6241,3684],{"class":40},[34,6243,6244],{"class":36,"line":3302},[34,6245,6246],{"class":161},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[34,6248,6249,6251,6253,6255,6257,6259,6261,6263,6265,6267,6269,6271,6273,6275,6277,6279],{"class":36,"line":3308},[34,6250,5056],{"class":55},[34,6252,3313],{"class":40},[34,6254,571],{"class":55},[34,6256,5063],{"class":40},[34,6258,221],{"class":55},[34,6260,177],{"class":44},[34,6262,5070],{"class":40},[34,6264,2701],{"class":55},[34,6266,1324],{"class":44},[34,6268,2327],{"class":55},[34,6270,2239],{"class":40},[34,6272,2327],{"class":55},[34,6274,394],{"class":44},[34,6276,5070],{"class":40},[34,6278,3946],{"class":55},[34,6280,101],{"class":40},[34,6282,6283],{"class":36,"line":3328},[34,6284,4163],{"class":40},[34,6286,6287],{"class":36,"line":3333},[34,6288,6289],{"class":161},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[34,6291,6292,6295,6298,6300,6303,6305,6307],{"class":36,"line":3347},[34,6293,6294],{"class":55},"            if",[34,6296,6297],{"class":40},"(arr[j]",[34,6299,2751],{"class":55},[34,6301,6302],{"class":40},"arr[j",[34,6304,2277],{"class":55},[34,6306,394],{"class":44},[34,6308,1077],{"class":40},[34,6310,6311],{"class":36,"line":3352},[34,6312,6313],{"class":40},"            {\n",[34,6315,6316,6319,6321,6323],{"class":36,"line":3381},[34,6317,6318],{"class":55},"                int",[34,6320,5907],{"class":40},[34,6322,221],{"class":55},[34,6324,6325],{"class":40},"arr[j];\n",[34,6327,6328,6331,6333,6335,6337,6339],{"class":36,"line":3386},[34,6329,6330],{"class":40},"                arr[j]",[34,6332,221],{"class":55},[34,6334,6302],{"class":40},[34,6336,2277],{"class":55},[34,6338,394],{"class":44},[34,6340,6341],{"class":40},"];\n",[34,6343,6344,6347,6349,6351,6353,6355],{"class":36,"line":3403},[34,6345,6346],{"class":40},"                arr[j",[34,6348,2277],{"class":55},[34,6350,394],{"class":44},[34,6352,2731],{"class":40},[34,6354,221],{"class":55},[34,6356,5932],{"class":40},[34,6358,6359],{"class":36,"line":3408},[34,6360,6361],{"class":40},"            }\n",[34,6363,6364],{"class":36,"line":3413},[34,6365,4182],{"class":40},[34,6367,6368],{"class":36,"line":3418},[34,6369,3841],{"class":40},[34,6371,6372,6374,6376,6379,6381],{"class":36,"line":3432},[34,6373,3209],{"class":40},[34,6375,2835],{"class":55},[34,6377,6378],{"class":504},"\"排序后：\"",[34,6380,2835],{"class":55},[34,6382,2857],{"class":40},[34,6384,6385,6387,6389,6391,6393,6395,6397,6399,6401,6403,6405,6407],{"class":36,"line":3437},[34,6386,4854],{"class":55},[34,6388,3313],{"class":40},[34,6390,571],{"class":55},[34,6392,4685],{"class":40},[34,6394,221],{"class":55},[34,6396,177],{"class":44},[34,6398,4692],{"class":40},[34,6400,2701],{"class":55},[34,6402,1324],{"class":44},[34,6404,4692],{"class":40},[34,6406,3946],{"class":55},[34,6408,101],{"class":40},[34,6410,6411],{"class":36,"line":4230},[34,6412,3684],{"class":40},[34,6414,6415,6417,6419,6421,6423,6425],{"class":36,"line":4244},[34,6416,5104],{"class":40},[34,6418,2835],{"class":55},[34,6420,6006],{"class":40},[34,6422,2835],{"class":55},[34,6424,6011],{"class":504},[34,6426,2952],{"class":40},[34,6428,6429],{"class":36,"line":4252},[34,6430,3841],{"class":40},[34,6432,6433,6435,6437],{"class":36,"line":4257},[34,6434,5743],{"class":55},[34,6436,98],{"class":44},[34,6438,2952],{"class":40},[34,6440,6441],{"class":36,"line":4263},[34,6442,3223],{"class":40},[19,6444,6446],{"id":6445},"_172二维数组","1.7.2二维数组",[1772,6448,6449],{},[1775,6450,6451],{},"二维数组的四种定义方式",[1948,6453,6454,6463],{},[1951,6455,6456],{},[1954,6457,6458,6461],{},[1957,6459,6460],{},"序号",[1957,6462,5434],{},[1994,6464,6465,6475,6484,6493,6502],{},[1954,6466,6467,6469],{},[1999,6468,394],{},[1999,6470,6471,6472,1870],{},"数据类型 数组名[行数]",[34,6473,6474],{},"列数",[1954,6476,6477,6479],{},[1999,6478,332],{},[1999,6480,6471,6481,6483],{},[34,6482,6474],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1954,6485,6486,6488],{},[1999,6487,337],{},[1999,6489,6471,6490,6492],{},[34,6491,6474],{},"={数据1,数据2,数据3...}",[1954,6494,6495,6497],{},[1999,6496,247],{},[1999,6498,6499,6500,6492],{},"数据类型 数组名[]",[34,6501,6474],{},[1954,6503,6504,6507],{},[1999,6505,6506],{},"注意：不能只省略列数",[1999,6508],{},[1772,6510,6511],{"start":165},[1775,6512,6513],{},"二维数组数组名",[2798,6515,6516,6519],{},[1775,6517,6518],{},"1.查看二维数组所占内存空间",[1775,6520,6521],{},"2.获取二维数组首地址",[103,6523,6524],{},"已知二维数组，求二维数组的行数与列数",[24,6526,6528],{"className":1809,"code":6527,"language":1811,"meta":29,"style":29},"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",[31,6529,6530,6538,6542,6560,6564,6582,6598,6603,6628,6661],{"__ignoreMap":29},[34,6531,6532,6534,6536],{"class":36,"line":37},[34,6533,571],{"class":55},[34,6535,3627],{"class":3617},[34,6537,3630],{"class":40},[34,6539,6540],{"class":36,"line":165},[34,6541,3204],{"class":40},[34,6543,6544,6546,6548,6550,6553,6555,6557],{"class":36,"line":171},[34,6545,3639],{"class":55},[34,6547,5615],{"class":40},[34,6549,332],{"class":44},[34,6551,6552],{"class":40},"][",[34,6554,337],{"class":44},[34,6556,2731],{"class":40},[34,6558,6559],{"class":55},"=\n",[34,6561,6562],{"class":36,"line":182},[34,6563,3684],{"class":40},[34,6565,6566,6569,6571,6573,6575,6577,6579],{"class":36,"line":188},[34,6567,6568],{"class":40},"        {",[34,6570,394],{"class":44},[34,6572,291],{"class":40},[34,6574,332],{"class":44},[34,6576,291],{"class":40},[34,6578,337],{"class":44},[34,6580,6581],{"class":40},"},\n",[34,6583,6584,6586,6588,6590,6592,6594,6596],{"class":36,"line":518},[34,6585,6568],{"class":40},[34,6587,247],{"class":44},[34,6589,291],{"class":40},[34,6591,224],{"class":44},[34,6593,291],{"class":40},[34,6595,1115],{"class":44},[34,6597,3223],{"class":40},[34,6599,6600],{"class":36,"line":524},[34,6601,6602],{"class":40},"    };\n",[34,6604,6605,6607,6609,6612,6614,6616,6618,6620,6622,6624,6626],{"class":36,"line":530},[34,6606,3209],{"class":40},[34,6608,2835],{"class":55},[34,6610,6611],{"class":504},"\"二维数组的行数\"",[34,6613,3031],{"class":55},[34,6615,5858],{"class":40},[34,6617,5861],{"class":55},[34,6619,5504],{"class":40},[34,6621,177],{"class":44},[34,6623,5868],{"class":40},[34,6625,2835],{"class":55},[34,6627,2857],{"class":40},[34,6629,6630,6632,6634,6637,6639,6641,6643,6645,6647,6649,6651,6653,6655,6657,6659],{"class":36,"line":624},[34,6631,3209],{"class":40},[34,6633,2835],{"class":55},[34,6635,6636],{"class":504},"\"二维数组的列数\"",[34,6638,3031],{"class":55},[34,6640,5504],{"class":40},[34,6642,177],{"class":44},[34,6644,5868],{"class":40},[34,6646,5861],{"class":55},[34,6648,5504],{"class":40},[34,6650,177],{"class":44},[34,6652,6552],{"class":40},[34,6654,177],{"class":44},[34,6656,5868],{"class":40},[34,6658,2835],{"class":55},[34,6660,2857],{"class":40},[34,6662,6663],{"class":36,"line":630},[34,6664,3223],{"class":40},[103,6666,6667],{},"查看二维数组首地址",[24,6669,6671],{"className":1809,"code":6670,"language":1811,"meta":29,"style":29},"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",[31,6672,6673,6690,6716,6741],{"__ignoreMap":29},[34,6674,6675,6677,6679,6682,6684,6686,6688],{"class":36,"line":37},[34,6676,3028],{"class":40},[34,6678,2835],{"class":55},[34,6680,6681],{"class":504},"\"二维数组首地址：\"",[34,6683,2835],{"class":55},[34,6685,5533],{"class":40},[34,6687,2835],{"class":55},[34,6689,2857],{"class":40},[34,6691,6692,6694,6696,6699,6701,6703,6705,6708,6710,6712,6714],{"class":36,"line":165},[34,6693,3028],{"class":40},[34,6695,2835],{"class":55},[34,6697,6698],{"class":504},"\"二维数组第一行的首地址：\"",[34,6700,2835],{"class":55},[34,6702,286],{"class":40},[34,6704,571],{"class":55},[34,6706,6707],{"class":40},")arr[",[34,6709,177],{"class":44},[34,6711,2731],{"class":40},[34,6713,2835],{"class":55},[34,6715,2857],{"class":40},[34,6717,6718,6720,6722,6725,6727,6729,6731,6733,6735,6737,6739],{"class":36,"line":171},[34,6719,3028],{"class":40},[34,6721,2835],{"class":55},[34,6723,6724],{"class":504},"\"二维数组第二行的首地址：\"",[34,6726,2835],{"class":55},[34,6728,286],{"class":40},[34,6730,571],{"class":55},[34,6732,6707],{"class":40},[34,6734,394],{"class":44},[34,6736,2731],{"class":40},[34,6738,2835],{"class":55},[34,6740,2857],{"class":40},[34,6742,6743,6745,6747,6750,6752,6754,6756,6758,6760,6762,6764,6766,6768,6770,6772,6774],{"class":36,"line":182},[34,6744,3028],{"class":40},[34,6746,2835],{"class":55},[34,6748,6749],{"class":504},"\"二维数组第一个元素的首地址:\"",[34,6751,2835],{"class":55},[34,6753,286],{"class":40},[34,6755,571],{"class":55},[34,6757,918],{"class":40},[34,6759,2155],{"class":55},[34,6761,5559],{"class":40},[34,6763,177],{"class":44},[34,6765,6552],{"class":40},[34,6767,177],{"class":44},[34,6769,2731],{"class":40},[34,6771,2835],{"class":55},[34,6773,2900],{"class":40},[34,6775,6776],{"class":161},"\u002F\u002F对于数，要加取址符\n",[1711,6778,6779],{},"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":29,"searchDepth":165,"depth":165,"links":6781},[6782,6783,6784,6792,6793,6799,6804],{"id":1762,"depth":165,"text":1763},{"id":1769,"depth":165,"text":1770},{"id":1786,"depth":165,"text":1787,"children":6785},[6786,6787,6788,6789,6790,6791],{"id":1790,"depth":171,"text":1791},{"id":1834,"depth":171,"text":1835},{"id":1897,"depth":171,"text":1898},{"id":2816,"depth":171,"text":2817},{"id":2906,"depth":171,"text":2907},{"id":3002,"depth":171,"text":3003},{"id":3044,"depth":165,"text":3045},{"id":3112,"depth":165,"text":3113,"children":6794},[6795,6796,6797,6798],{"id":3116,"depth":171,"text":3117},{"id":3137,"depth":171,"text":3138},{"id":3146,"depth":171,"text":3147},{"id":3155,"depth":171,"text":3156},{"id":3164,"depth":165,"text":3165,"children":6800},[6801,6802,6803],{"id":3168,"depth":171,"text":3169},{"id":3859,"depth":171,"text":3860},{"id":5274,"depth":171,"text":5275},{"id":5415,"depth":165,"text":5416,"children":6805},[6806,6807],{"id":5419,"depth":171,"text":5420},{"id":6445,"depth":171,"text":6446},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1754,"description":29},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6814,"title":6815,"body":6816,"description":29,"extension":1745,"meta":7915,"navigation":1474,"path":7916,"seo":7917,"stem":7918,"__hash__":7919},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6817,"toc":7907},[6818,6821,6825,6833,6841,6844,6909,6913,6916,6992,6996,6999,7002,7005,7218,7222,7227,7291,7296,7363,7368,7459,7462,7567,7571,7574,7580,7724,7728,7731,7745,7748,7793,7796,7904],[10,6819,6815],{"id":6820},"_2函数",[14,6822,6824],{"id":6823},"_21函数概述","2.1函数概述",[1772,6826,6827,6830],{},[1775,6828,6829],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[1775,6831,6832],{},"语法：",[24,6834,6839],{"className":6835,"code":6837,"language":6838,"meta":29},[6836],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[31,6840,6837],{"__ignoreMap":29},[103,6842,6843],{},"小案例",[24,6845,6847],{"className":1809,"code":6846,"language":1811,"meta":29,"style":29},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[31,6848,6849,6854,6877,6881,6898,6905],{"__ignoreMap":29},[34,6850,6851],{"class":36,"line":37},[34,6852,6853],{"class":161},"\u002F\u002Fnum1,num2形参\n",[34,6855,6856,6858,6861,6863,6865,6868,6870,6872,6875],{"class":36,"line":165},[34,6857,571],{"class":55},[34,6859,6860],{"class":3617}," add",[34,6862,286],{"class":40},[34,6864,571],{"class":55},[34,6866,6867],{"class":51}," num1",[34,6869,291],{"class":40},[34,6871,571],{"class":55},[34,6873,6874],{"class":51}," num2",[34,6876,101],{"class":40},[34,6878,6879],{"class":36,"line":171},[34,6880,3204],{"class":40},[34,6882,6883,6885,6888,6890,6893,6895],{"class":36,"line":182},[34,6884,3639],{"class":55},[34,6886,6887],{"class":40}," sum",[34,6889,221],{"class":55},[34,6891,6892],{"class":40},"num1",[34,6894,2277],{"class":55},[34,6896,6897],{"class":40},"num2;\n",[34,6899,6900,6902],{"class":36,"line":188},[34,6901,5743],{"class":55},[34,6903,6904],{"class":40}," sum;\n",[34,6906,6907],{"class":36,"line":518},[34,6908,3223],{"class":40},[14,6910,6912],{"id":6911},"_22函数调用","2.2函数调用",[103,6914,6915],{},"调用刚刚写的求和函数",[24,6917,6919],{"className":1809,"code":6918,"language":1811,"meta":29,"style":29},"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",[31,6920,6921,6929,6933,6938,6950,6962,6971,6976,6988],{"__ignoreMap":29},[34,6922,6923,6925,6927],{"class":36,"line":37},[34,6924,571],{"class":55},[34,6926,3627],{"class":3617},[34,6928,3630],{"class":40},[34,6930,6931],{"class":36,"line":165},[34,6932,3204],{"class":40},[34,6934,6935],{"class":36,"line":171},[34,6936,6937],{"class":161},"    \u002F\u002Fa,b实参\n",[34,6939,6940,6942,6944,6946,6948],{"class":36,"line":182},[34,6941,3639],{"class":55},[34,6943,3057],{"class":40},[34,6945,221],{"class":55},[34,6947,177],{"class":44},[34,6949,2952],{"class":40},[34,6951,6952,6954,6956,6958,6960],{"class":36,"line":188},[34,6953,3639],{"class":55},[34,6955,4486],{"class":40},[34,6957,221],{"class":55},[34,6959,177],{"class":44},[34,6961,2952],{"class":40},[34,6963,6964,6966,6968],{"class":36,"line":518},[34,6965,3666],{"class":40},[34,6967,3088],{"class":55},[34,6969,6970],{"class":40},"a,b;\n",[34,6972,6973],{"class":36,"line":524},[34,6974,6975],{"class":161},"    \u002F\u002F调用函数时，实参值传给了形参\n",[34,6977,6978,6980,6982,6985],{"class":36,"line":530},[34,6979,3209],{"class":40},[34,6981,2835],{"class":55},[34,6983,6984],{"class":3617},"add",[34,6986,6987],{"class":40},"(a,b);\n",[34,6989,6990],{"class":36,"line":624},[34,6991,3223],{"class":40},[14,6993,6995],{"id":6994},"_23值传递","2.3值传递",[103,6997,6998],{},"值传递就是函数调用时实参将数值传给形参",[103,7000,7001],{},"值传递时，如果形参发生任何改变，不会影响实参",[103,7003,7004],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[24,7006,7008],{"className":1809,"code":7007,"language":1811,"meta":29,"style":29},"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",[31,7009,7010,7032,7036,7049,7066,7084,7095,7104,7113,7126,7142,7158,7167,7171,7179,7183,7195,7207,7214],{"__ignoreMap":29},[34,7011,7012,7015,7018,7020,7022,7024,7026,7028,7030],{"class":36,"line":37},[34,7013,7014],{"class":55},"void",[34,7016,7017],{"class":3617}," swap",[34,7019,286],{"class":40},[34,7021,571],{"class":55},[34,7023,6867],{"class":51},[34,7025,291],{"class":40},[34,7027,571],{"class":55},[34,7029,6874],{"class":51},[34,7031,101],{"class":40},[34,7033,7034],{"class":36,"line":165},[34,7035,3204],{"class":40},[34,7037,7038,7040,7042,7045,7047],{"class":36,"line":171},[34,7039,3209],{"class":40},[34,7041,2835],{"class":55},[34,7043,7044],{"class":504},"\"交换前：\"",[34,7046,2835],{"class":55},[34,7048,2857],{"class":40},[34,7050,7051,7053,7055,7058,7060,7062,7064],{"class":36,"line":182},[34,7052,3209],{"class":40},[34,7054,2835],{"class":55},[34,7056,7057],{"class":504},"\"num1=\"",[34,7059,2835],{"class":55},[34,7061,6892],{"class":40},[34,7063,2835],{"class":55},[34,7065,2857],{"class":40},[34,7067,7068,7070,7072,7075,7077,7080,7082],{"class":36,"line":188},[34,7069,3209],{"class":40},[34,7071,2835],{"class":55},[34,7073,7074],{"class":504},"\"num2=\"",[34,7076,2835],{"class":55},[34,7078,7079],{"class":40},"num2",[34,7081,2835],{"class":55},[34,7083,2857],{"class":40},[34,7085,7086,7088,7090,7092],{"class":36,"line":518},[34,7087,3639],{"class":55},[34,7089,5907],{"class":40},[34,7091,221],{"class":55},[34,7093,7094],{"class":40},"num1;\n",[34,7096,7097,7100,7102],{"class":36,"line":524},[34,7098,7099],{"class":40},"    num1",[34,7101,221],{"class":55},[34,7103,6897],{"class":40},[34,7105,7106,7109,7111],{"class":36,"line":530},[34,7107,7108],{"class":40},"    num2",[34,7110,221],{"class":55},[34,7112,5932],{"class":40},[34,7114,7115,7117,7119,7122,7124],{"class":36,"line":624},[34,7116,3209],{"class":40},[34,7118,2835],{"class":55},[34,7120,7121],{"class":504},"\"交换后：\"",[34,7123,2835],{"class":55},[34,7125,2857],{"class":40},[34,7127,7128,7130,7132,7134,7136,7138,7140],{"class":36,"line":630},[34,7129,3209],{"class":40},[34,7131,2835],{"class":55},[34,7133,7057],{"class":504},[34,7135,2835],{"class":55},[34,7137,6892],{"class":40},[34,7139,2835],{"class":55},[34,7141,2857],{"class":40},[34,7143,7144,7146,7148,7150,7152,7154,7156],{"class":36,"line":636},[34,7145,3209],{"class":40},[34,7147,2835],{"class":55},[34,7149,7074],{"class":504},[34,7151,2835],{"class":55},[34,7153,7079],{"class":40},[34,7155,2835],{"class":55},[34,7157,2857],{"class":40},[34,7159,7160,7162,7164],{"class":36,"line":1513},[34,7161,5743],{"class":55},[34,7163,1870],{"class":40},[34,7165,7166],{"class":161},"\u002F\u002F或者不写\n",[34,7168,7169],{"class":36,"line":1519},[34,7170,3223],{"class":40},[34,7172,7173,7175,7177],{"class":36,"line":3283},[34,7174,571],{"class":55},[34,7176,3627],{"class":3617},[34,7178,3630],{"class":40},[34,7180,7181],{"class":36,"line":3297},[34,7182,3204],{"class":40},[34,7184,7185,7187,7189,7191,7193],{"class":36,"line":3302},[34,7186,3639],{"class":55},[34,7188,3057],{"class":40},[34,7190,221],{"class":55},[34,7192,410],{"class":44},[34,7194,2952],{"class":40},[34,7196,7197,7199,7201,7203,7205],{"class":36,"line":3308},[34,7198,3639],{"class":55},[34,7200,4486],{"class":40},[34,7202,221],{"class":55},[34,7204,1249],{"class":44},[34,7206,2952],{"class":40},[34,7208,7209,7212],{"class":36,"line":3328},[34,7210,7211],{"class":3617},"    swap",[34,7213,6987],{"class":40},[34,7215,7216],{"class":36,"line":3333},[34,7217,3223],{"class":40},[14,7219,7221],{"id":7220},"_24函数的常见形式","2.4函数的常见形式",[1772,7223,7224],{},[1775,7225,7226],{},"无参无返",[24,7228,7230],{"className":1809,"code":7229,"language":1811,"meta":29,"style":29},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[31,7231,7232,7241,7245,7258,7262,7270,7274,7279,7287],{"__ignoreMap":29},[34,7233,7234,7236,7239],{"class":36,"line":37},[34,7235,7014],{"class":55},[34,7237,7238],{"class":3617}," test01",[34,7240,3630],{"class":40},[34,7242,7243],{"class":36,"line":165},[34,7244,3204],{"class":40},[34,7246,7247,7249,7251,7254,7256],{"class":36,"line":171},[34,7248,3209],{"class":40},[34,7250,2835],{"class":55},[34,7252,7253],{"class":504},"\"你好\"",[34,7255,2835],{"class":55},[34,7257,2857],{"class":40},[34,7259,7260],{"class":36,"line":182},[34,7261,3223],{"class":40},[34,7263,7264,7266,7268],{"class":36,"line":188},[34,7265,571],{"class":55},[34,7267,3627],{"class":3617},[34,7269,3630],{"class":40},[34,7271,7272],{"class":36,"line":518},[34,7273,3204],{"class":40},[34,7275,7276],{"class":36,"line":524},[34,7277,7278],{"class":161},"    \u002F\u002F函数调用\n",[34,7280,7281,7284],{"class":36,"line":530},[34,7282,7283],{"class":3617},"    test01",[34,7285,7286],{"class":40},"();\n",[34,7288,7289],{"class":36,"line":624},[34,7290,3223],{"class":40},[1772,7292,7293],{"start":165},[1775,7294,7295],{},"有参无返",[24,7297,7299],{"className":1809,"code":7298,"language":1811,"meta":29,"style":29},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[31,7300,7301,7316,7320,7332,7336,7344,7348,7359],{"__ignoreMap":29},[34,7302,7303,7305,7308,7310,7312,7314],{"class":36,"line":37},[34,7304,7014],{"class":55},[34,7306,7307],{"class":3617}," test02",[34,7309,286],{"class":40},[34,7311,571],{"class":55},[34,7313,3057],{"class":51},[34,7315,101],{"class":40},[34,7317,7318],{"class":36,"line":165},[34,7319,3204],{"class":40},[34,7321,7322,7324,7326,7328,7330],{"class":36,"line":171},[34,7323,3209],{"class":40},[34,7325,2835],{"class":55},[34,7327,7253],{"class":504},[34,7329,2835],{"class":55},[34,7331,2857],{"class":40},[34,7333,7334],{"class":36,"line":182},[34,7335,3223],{"class":40},[34,7337,7338,7340,7342],{"class":36,"line":188},[34,7339,571],{"class":55},[34,7341,3627],{"class":3617},[34,7343,3630],{"class":40},[34,7345,7346],{"class":36,"line":518},[34,7347,3204],{"class":40},[34,7349,7350,7353,7355,7357],{"class":36,"line":524},[34,7351,7352],{"class":3617},"    test02",[34,7354,286],{"class":40},[34,7356,451],{"class":44},[34,7358,4372],{"class":40},[34,7360,7361],{"class":36,"line":530},[34,7362,3223],{"class":40},[1772,7364,7365],{"start":171},[1775,7366,7367],{},"无参有返",[24,7369,7371],{"className":1809,"code":7370,"language":1811,"meta":29,"style":29},"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",[31,7372,7373,7382,7386,7398,7407,7411,7419,7423,7436,7455],{"__ignoreMap":29},[34,7374,7375,7377,7380],{"class":36,"line":37},[34,7376,571],{"class":55},[34,7378,7379],{"class":3617}," test03",[34,7381,3630],{"class":40},[34,7383,7384],{"class":36,"line":165},[34,7385,3204],{"class":40},[34,7387,7388,7390,7392,7394,7396],{"class":36,"line":171},[34,7389,3209],{"class":40},[34,7391,2835],{"class":55},[34,7393,7253],{"class":504},[34,7395,2835],{"class":55},[34,7397,2857],{"class":40},[34,7399,7400,7402,7405],{"class":36,"line":182},[34,7401,5743],{"class":55},[34,7403,7404],{"class":44}," 100",[34,7406,2952],{"class":40},[34,7408,7409],{"class":36,"line":188},[34,7410,3223],{"class":40},[34,7412,7413,7415,7417],{"class":36,"line":518},[34,7414,571],{"class":55},[34,7416,3627],{"class":3617},[34,7418,3630],{"class":40},[34,7420,7421],{"class":36,"line":524},[34,7422,3204],{"class":40},[34,7424,7425,7427,7429,7431,7434],{"class":36,"line":530},[34,7426,3639],{"class":55},[34,7428,6867],{"class":40},[34,7430,221],{"class":55},[34,7432,7433],{"class":3617},"test03",[34,7435,7286],{"class":40},[34,7437,7438,7440,7442,7444,7446,7448,7450,7452],{"class":36,"line":624},[34,7439,3209],{"class":40},[34,7441,2835],{"class":55},[34,7443,7057],{"class":504},[34,7445,2835],{"class":55},[34,7447,6892],{"class":40},[34,7449,2835],{"class":55},[34,7451,2900],{"class":40},[34,7453,7454],{"class":161}," \u002F\u002F100\n",[34,7456,7457],{"class":36,"line":630},[34,7458,3223],{"class":40},[103,7460,7461],{},"4.有参有返",[24,7463,7465],{"className":1809,"code":7464,"language":1811,"meta":29,"style":29},"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",[31,7466,7467,7482,7486,7499,7505,7509,7518,7522,7534,7548,7563],{"__ignoreMap":29},[34,7468,7469,7471,7474,7476,7478,7480],{"class":36,"line":37},[34,7470,571],{"class":55},[34,7472,7473],{"class":3617}," test04",[34,7475,286],{"class":40},[34,7477,571],{"class":55},[34,7479,3057],{"class":51},[34,7481,101],{"class":40},[34,7483,7484],{"class":36,"line":165},[34,7485,3204],{"class":40},[34,7487,7488,7490,7492,7495,7497],{"class":36,"line":171},[34,7489,3209],{"class":40},[34,7491,2835],{"class":55},[34,7493,7494],{"class":504},"\"hello\"",[34,7496,2835],{"class":55},[34,7498,2857],{"class":40},[34,7500,7501,7503],{"class":36,"line":182},[34,7502,5743],{"class":55},[34,7504,3091],{"class":40},[34,7506,7507],{"class":36,"line":188},[34,7508,3223],{"class":40},[34,7510,7511,7513,7516],{"class":36,"line":518},[34,7512,571],{"class":55},[34,7514,7515],{"class":3617}," mian",[34,7517,3630],{"class":40},[34,7519,7520],{"class":36,"line":524},[34,7521,3204],{"class":40},[34,7523,7524,7526,7528,7530,7532],{"class":36,"line":530},[34,7525,3639],{"class":55},[34,7527,4486],{"class":40},[34,7529,221],{"class":55},[34,7531,394],{"class":44},[34,7533,2952],{"class":40},[34,7535,7536,7538,7540,7542,7545],{"class":36,"line":624},[34,7537,3639],{"class":55},[34,7539,4502],{"class":40},[34,7541,221],{"class":55},[34,7543,7544],{"class":3617},"test04",[34,7546,7547],{"class":40},"(b);\n",[34,7549,7550,7552,7554,7556,7558,7560],{"class":36,"line":630},[34,7551,3209],{"class":40},[34,7553,2835],{"class":55},[34,7555,2095],{"class":40},[34,7557,2835],{"class":55},[34,7559,2900],{"class":40},[34,7561,7562],{"class":161}," \u002F\u002F1\n",[34,7564,7565],{"class":36,"line":636},[34,7566,3223],{"class":40},[14,7568,7570],{"id":7569},"_25函数的声明","2.5函数的声明",[103,7572,7573],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[103,7575,7576,7577],{},"函数的",[1165,7578,7579],{},"声明可以多次，但是函数的定义只能有一次",[24,7581,7583],{"className":1809,"code":7582,"language":1811,"meta":29,"style":29},"\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",[31,7584,7585,7590,7595,7620,7629,7633,7645,7657,7673,7677,7697,7701,7720],{"__ignoreMap":29},[34,7586,7587],{"class":36,"line":37},[34,7588,7589],{"class":161},"\u002F\u002F函数声明\n",[34,7591,7592],{"class":36,"line":165},[34,7593,7594],{"class":161},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[34,7596,7597,7599,7602,7604,7606,7608,7610,7612,7614,7617],{"class":36,"line":171},[34,7598,571],{"class":55},[34,7600,7601],{"class":3617}," max",[34,7603,286],{"class":40},[34,7605,571],{"class":55},[34,7607,3057],{"class":51},[34,7609,291],{"class":40},[34,7611,571],{"class":55},[34,7613,4486],{"class":51},[34,7615,7616],{"class":40},");",[34,7618,7619],{"class":161},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[34,7621,7622,7624,7626],{"class":36,"line":182},[34,7623,571],{"class":55},[34,7625,3627],{"class":3617},[34,7627,7628],{"class":40},"() \n",[34,7630,7631],{"class":36,"line":188},[34,7632,3204],{"class":40},[34,7634,7635,7637,7639,7641,7643],{"class":36,"line":518},[34,7636,3639],{"class":55},[34,7638,3057],{"class":40},[34,7640,221],{"class":55},[34,7642,410],{"class":44},[34,7644,2952],{"class":40},[34,7646,7647,7649,7651,7653,7655],{"class":36,"line":524},[34,7648,3639],{"class":55},[34,7650,4486],{"class":40},[34,7652,221],{"class":55},[34,7654,1249],{"class":44},[34,7656,2952],{"class":40},[34,7658,7659,7661,7663,7666,7669,7671],{"class":36,"line":530},[34,7660,3209],{"class":40},[34,7662,2835],{"class":55},[34,7664,7665],{"class":3617},"max",[34,7667,7668],{"class":40},"(a,b)",[34,7670,2835],{"class":55},[34,7672,2857],{"class":40},[34,7674,7675],{"class":36,"line":624},[34,7676,3223],{"class":40},[34,7678,7679,7681,7683,7685,7687,7689,7691,7693,7695],{"class":36,"line":630},[34,7680,571],{"class":55},[34,7682,7601],{"class":3617},[34,7684,286],{"class":40},[34,7686,571],{"class":55},[34,7688,3057],{"class":51},[34,7690,291],{"class":40},[34,7692,571],{"class":55},[34,7694,4486],{"class":51},[34,7696,101],{"class":40},[34,7698,7699],{"class":36,"line":636},[34,7700,3204],{"class":40},[34,7702,7703,7705,7707,7709,7711,7713,7715,7717],{"class":36,"line":1513},[34,7704,5743],{"class":55},[34,7706,3057],{"class":40},[34,7708,2751],{"class":55},[34,7710,2070],{"class":40},[34,7712,2777],{"class":55},[34,7714,236],{"class":40},[34,7716,2650],{"class":55},[34,7718,7719],{"class":40},"b;\n",[34,7721,7722],{"class":36,"line":1519},[34,7723,3223],{"class":40},[14,7725,7727],{"id":7726},"_26函数的分文件编写","2.6函数的分文件编写",[103,7729,7730],{},"4个步骤：",[2798,7732,7733,7736,7739,7742],{},[1775,7734,7735],{},"1.创建后缀名为.h的头文件",[1775,7737,7738],{},"2.创建后缀名为.cpp的源文件",[1775,7740,7741],{},"3.在头文件中写函数的定义",[1775,7743,7744],{},"4.在源文件中写函数的定义\n示例：",[103,7746,7747],{},"头文件：swap.h",[24,7749,7751],{"className":1809,"code":7750,"language":1811,"meta":29,"style":29},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[31,7752,7753,7759,7769,7773],{"__ignoreMap":29},[34,7754,7755,7757],{"class":36,"line":37},[34,7756,3603],{"class":55},[34,7758,3606],{"class":504},[34,7760,7761,7763,7765,7767],{"class":36,"line":165},[34,7762,3611],{"class":55},[34,7764,3614],{"class":55},[34,7766,3618],{"class":3617},[34,7768,2952],{"class":40},[34,7770,7771],{"class":36,"line":171},[34,7772,7589],{"class":161},[34,7774,7775,7777,7779,7781,7783,7785,7787,7789,7791],{"class":36,"line":182},[34,7776,7014],{"class":55},[34,7778,7017],{"class":3617},[34,7780,286],{"class":40},[34,7782,571],{"class":55},[34,7784,3057],{"class":51},[34,7786,291],{"class":40},[34,7788,571],{"class":55},[34,7790,4486],{"class":51},[34,7792,4372],{"class":40},[103,7794,7795],{},"源文件：swap.cpp",[24,7797,7799],{"className":1809,"code":7798,"language":1811,"meta":29,"style":29},"#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",[31,7800,7801,7808,7813,7833,7837,7848,7857,7866,7883,7900],{"__ignoreMap":29},[34,7802,7803,7805],{"class":36,"line":37},[34,7804,3603],{"class":55},[34,7806,7807],{"class":504}," \"swap.h\"\n",[34,7809,7810],{"class":36,"line":165},[34,7811,7812],{"class":161},"\u002F\u002F函数的定义\n",[34,7814,7815,7817,7819,7821,7823,7825,7827,7829,7831],{"class":36,"line":171},[34,7816,7014],{"class":55},[34,7818,7017],{"class":3617},[34,7820,286],{"class":40},[34,7822,571],{"class":55},[34,7824,3057],{"class":51},[34,7826,291],{"class":40},[34,7828,571],{"class":55},[34,7830,4486],{"class":51},[34,7832,101],{"class":40},[34,7834,7835],{"class":36,"line":182},[34,7836,3204],{"class":40},[34,7838,7839,7841,7843,7845],{"class":36,"line":188},[34,7840,3639],{"class":55},[34,7842,5907],{"class":40},[34,7844,221],{"class":55},[34,7846,7847],{"class":40},"a;\n",[34,7849,7850,7853,7855],{"class":36,"line":518},[34,7851,7852],{"class":40},"    a",[34,7854,221],{"class":55},[34,7856,7719],{"class":40},[34,7858,7859,7862,7864],{"class":36,"line":524},[34,7860,7861],{"class":40},"    b",[34,7863,221],{"class":55},[34,7865,5932],{"class":40},[34,7867,7868,7870,7872,7875,7877,7879,7881],{"class":36,"line":530},[34,7869,3209],{"class":40},[34,7871,2835],{"class":55},[34,7873,7874],{"class":504},"\"a=\"",[34,7876,2835],{"class":55},[34,7878,236],{"class":40},[34,7880,2835],{"class":55},[34,7882,2857],{"class":40},[34,7884,7885,7887,7889,7892,7894,7896,7898],{"class":36,"line":624},[34,7886,3209],{"class":40},[34,7888,2835],{"class":55},[34,7890,7891],{"class":504},"\"b=\"",[34,7893,2835],{"class":55},[34,7895,2070],{"class":40},[34,7897,2835],{"class":55},[34,7899,2857],{"class":40},[34,7901,7902],{"class":36,"line":630},[34,7903,3223],{"class":40},[1711,7905,7906],{},"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":29,"searchDepth":165,"depth":165,"links":7908},[7909,7910,7911,7912,7913,7914],{"id":6823,"depth":165,"text":6824},{"id":6911,"depth":165,"text":6912},{"id":6994,"depth":165,"text":6995},{"id":7220,"depth":165,"text":7221},{"id":7569,"depth":165,"text":7570},{"id":7726,"depth":165,"text":7727},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6815,"description":29},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7921,"title":7922,"body":7923,"description":7930,"extension":1745,"meta":9335,"navigation":1474,"path":9336,"seo":9337,"stem":9338,"__hash__":9339},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7924,"toc":9325},[7925,7928,7931,7935,8097,8101,8104,8107,8110,8113,8253,8257,8260,8263,8266,8331,8335,8340,8407,8410,8414,8417,8428,8433,8453,8456,8461,8480,8483,8487,8506,8509,8513,8748,8752,8755,8758,8761,8923,8926,8930,8933,8939,9322],[10,7926,7922],{"id":7927},"_3指针",[103,7929,7930],{},"通过指针保存一个地址，指针就是个地址",[14,7932,7934],{"id":7933},"_31定义指针","3.1定义指针",[24,7936,7938],{"className":1809,"code":7937,"language":1811,"meta":29,"style":29},"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",[31,7939,7940,7948,7952,7957,7969,7974,7982,7992,8010,8030,8034,8039,8044,8049,8063,8079,8093],{"__ignoreMap":29},[34,7941,7942,7944,7946],{"class":36,"line":37},[34,7943,571],{"class":55},[34,7945,3627],{"class":3617},[34,7947,3630],{"class":40},[34,7949,7950],{"class":36,"line":165},[34,7951,3204],{"class":40},[34,7953,7954],{"class":36,"line":171},[34,7955,7956],{"class":161},"    \u002F\u002F1.定义指针\n",[34,7958,7959,7961,7963,7965,7967],{"class":36,"line":182},[34,7960,3639],{"class":55},[34,7962,3057],{"class":40},[34,7964,221],{"class":55},[34,7966,410],{"class":44},[34,7968,2952],{"class":40},[34,7970,7971],{"class":36,"line":188},[34,7972,7973],{"class":161},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[34,7975,7976,7979],{"class":36,"line":518},[34,7977,7978],{"class":55},"    int*",[34,7980,7981],{"class":40},"p;\n",[34,7983,7984,7987,7990],{"class":36,"line":524},[34,7985,7986],{"class":40},"    p",[34,7988,7989],{"class":55},"=&",[34,7991,7847],{"class":40},[34,7993,7994,7996,7998,8001,8004,8006,8008],{"class":36,"line":530},[34,7995,3209],{"class":40},[34,7997,2835],{"class":55},[34,7999,8000],{"class":504},"\"a的地址为：\"",[34,8002,8003],{"class":55},"\u003C\u003C&",[34,8005,236],{"class":40},[34,8007,2835],{"class":55},[34,8009,2857],{"class":40},[34,8011,8012,8014,8016,8019,8021,8023,8025,8027],{"class":36,"line":624},[34,8013,3209],{"class":40},[34,8015,2835],{"class":55},[34,8017,8018],{"class":504},"\"指针p为：\"",[34,8020,2835],{"class":55},[34,8022,103],{"class":40},[34,8024,2835],{"class":55},[34,8026,2900],{"class":40},[34,8028,8029],{"class":161},"\u002F\u002F指针p表示的就是a的地址\n",[34,8031,8032],{"class":36,"line":630},[34,8033,1475],{"emptyLinePlaceholder":1474},[34,8035,8036],{"class":36,"line":636},[34,8037,8038],{"class":161},"    \u002F\u002F2.使用指针\n",[34,8040,8041],{"class":36,"line":1513},[34,8042,8043],{"class":161},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[34,8045,8046],{"class":36,"line":1519},[34,8047,8048],{"class":161},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[34,8050,8051,8054,8056,8058,8061],{"class":36,"line":3283},[34,8052,8053],{"class":55},"    *",[34,8055,103],{"class":40},[34,8057,221],{"class":55},[34,8059,8060],{"class":44},"1000",[34,8062,2952],{"class":40},[34,8064,8065,8067,8070,8072,8074,8076],{"class":36,"line":3297},[34,8066,3209],{"class":40},[34,8068,8069],{"class":55},"\u003C\u003C*",[34,8071,103],{"class":40},[34,8073,2835],{"class":55},[34,8075,2900],{"class":40},[34,8077,8078],{"class":161},"\u002F\u002F1000\n",[34,8080,8081,8083,8085,8087,8089,8091],{"class":36,"line":3302},[34,8082,3209],{"class":40},[34,8084,2835],{"class":55},[34,8086,236],{"class":40},[34,8088,2835],{"class":55},[34,8090,2900],{"class":40},[34,8092,8078],{"class":161},[34,8094,8095],{"class":36,"line":3308},[34,8096,3223],{"class":40},[14,8098,8100],{"id":8099},"_32指针所占的内存空间","3.2指针所占的内存空间",[103,8102,8103],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[103,8105,8106],{},"在32位操作系统下：占用4个字节空间",[103,8108,8109],{},"在64位操作系统下：占用8个字节空间",[103,8111,8112],{},"上方是不管啥数据类型的",[24,8114,8116],{"className":1809,"code":8115,"language":1811,"meta":29,"style":29},"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",[31,8117,8118,8126,8130,8135,8147,8152,8157,8162,8175,8197,8223,8249],{"__ignoreMap":29},[34,8119,8120,8122,8124],{"class":36,"line":37},[34,8121,571],{"class":55},[34,8123,3627],{"class":3617},[34,8125,3630],{"class":40},[34,8127,8128],{"class":36,"line":165},[34,8129,3204],{"class":40},[34,8131,8132],{"class":36,"line":171},[34,8133,8134],{"class":161},"    \u002F\u002F指针所占内存空间\n",[34,8136,8137,8139,8141,8143,8145],{"class":36,"line":182},[34,8138,3639],{"class":55},[34,8140,3057],{"class":40},[34,8142,221],{"class":55},[34,8144,410],{"class":44},[34,8146,2952],{"class":40},[34,8148,8149],{"class":36,"line":188},[34,8150,8151],{"class":161},"    \u002F\u002Fint *p;\n",[34,8153,8154],{"class":36,"line":518},[34,8155,8156],{"class":161},"    \u002F\u002Fp=&a;\n",[34,8158,8159],{"class":36,"line":524},[34,8160,8161],{"class":161},"    \u002F\u002F上述可以写为以下：\n",[34,8163,8164,8166,8169,8171,8173],{"class":36,"line":530},[34,8165,3639],{"class":55},[34,8167,8168],{"class":55}," *",[34,8170,103],{"class":40},[34,8172,7989],{"class":55},[34,8174,7847],{"class":40},[34,8176,8177,8180,8182,8185,8187,8190,8192,8194],{"class":36,"line":624},[34,8178,8179],{"class":40},"    cout ",[34,8181,2835],{"class":55},[34,8183,8184],{"class":504},"\"sizeof(int *)\"",[34,8186,3031],{"class":55},[34,8188,8189],{"class":40},"(p)",[34,8191,2835],{"class":55},[34,8193,2900],{"class":40},[34,8195,8196],{"class":161},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[34,8198,8199,8201,8203,8205,8207,8209,8211,8213,8215,8217,8220],{"class":36,"line":630},[34,8200,8179],{"class":40},[34,8202,2835],{"class":55},[34,8204,8184],{"class":504},[34,8206,3031],{"class":55},[34,8208,286],{"class":40},[34,8210,571],{"class":55},[34,8212,8168],{"class":55},[34,8214,918],{"class":40},[34,8216,2835],{"class":55},[34,8218,8219],{"class":40},"endl",[34,8221,8222],{"class":161},"  \u002F\u002F4字节(32位的话)\n",[34,8224,8225,8227,8229,8232,8234,8236,8238,8240,8242,8244,8246],{"class":36,"line":636},[34,8226,8179],{"class":40},[34,8228,2835],{"class":55},[34,8230,8231],{"class":504},"\"sizeof(char *)\"",[34,8233,3031],{"class":55},[34,8235,286],{"class":40},[34,8237,1908],{"class":55},[34,8239,8168],{"class":55},[34,8241,918],{"class":40},[34,8243,2835],{"class":55},[34,8245,2900],{"class":40},[34,8247,8248],{"class":161}," \u002F\u002F4字节(32位的话)\n",[34,8250,8251],{"class":36,"line":1513},[34,8252,3223],{"class":40},[14,8254,8256],{"id":8255},"_33空指针","3.3空指针",[103,8258,8259],{},"空指针：指针变量指向内存中编号为0的空间",[103,8261,8262],{},"用途：初始化指针变量",[103,8264,8265],{},"注意：空指针指向的内存是不可以访问的",[24,8267,8269],{"className":1809,"code":8268,"language":1811,"meta":29,"style":29},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[31,8270,8271,8279,8283,8288,8302,8307,8322,8327],{"__ignoreMap":29},[34,8272,8273,8275,8277],{"class":36,"line":37},[34,8274,571],{"class":55},[34,8276,3627],{"class":3617},[34,8278,3630],{"class":40},[34,8280,8281],{"class":36,"line":165},[34,8282,3204],{"class":40},[34,8284,8285],{"class":36,"line":171},[34,8286,8287],{"class":161},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[34,8289,8290,8292,8294,8296,8298,8300],{"class":36,"line":182},[34,8291,3639],{"class":55},[34,8293,8168],{"class":55},[34,8295,103],{"class":40},[34,8297,221],{"class":55},[34,8299,4046],{"class":44},[34,8301,2952],{"class":40},[34,8303,8304],{"class":36,"line":188},[34,8305,8306],{"class":161},"    \u002F\u002F2.空指针不能进行访问\n",[34,8308,8309,8311,8313,8315,8317,8319],{"class":36,"line":518},[34,8310,8053],{"class":55},[34,8312,103],{"class":40},[34,8314,221],{"class":55},[34,8316,451],{"class":44},[34,8318,1870],{"class":40},[34,8320,8321],{"class":161},"\u002F\u002F直接报错，压根不能访问\n",[34,8323,8324],{"class":36,"line":524},[34,8325,8326],{"class":161},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[34,8328,8329],{"class":36,"line":530},[34,8330,3223],{"class":40},[14,8332,8334],{"id":8333},"_34野指针","3.4野指针",[103,8336,8337],{},[1165,8338,8339],{},"指针变量指向非法的内存空间",[24,8341,8343],{"className":1809,"code":8342,"language":1811,"meta":29,"style":29},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[31,8344,8345,8353,8357,8386,8391,8403],{"__ignoreMap":29},[34,8346,8347,8349,8351],{"class":36,"line":37},[34,8348,571],{"class":55},[34,8350,3627],{"class":3617},[34,8352,3630],{"class":40},[34,8354,8355],{"class":36,"line":165},[34,8356,3204],{"class":40},[34,8358,8359,8361,8363,8365,8367,8369,8371,8373,8375,8378,8381,8383],{"class":36,"line":171},[34,8360,3639],{"class":55},[34,8362,8168],{"class":55},[34,8364,103],{"class":40},[34,8366,221],{"class":55},[34,8368,286],{"class":40},[34,8370,571],{"class":55},[34,8372,8168],{"class":55},[34,8374,918],{"class":40},[34,8376,8377],{"class":55},"0x",[34,8379,8380],{"class":44},"1100",[34,8382,1870],{"class":40},[34,8384,8385],{"class":161}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[34,8387,8388],{"class":36,"line":182},[34,8389,8390],{"class":161},"    \u002F\u002F访问野指针报错\n",[34,8392,8393,8395,8397,8399,8401],{"class":36,"line":188},[34,8394,3209],{"class":40},[34,8396,8069],{"class":55},[34,8398,103],{"class":40},[34,8400,2835],{"class":55},[34,8402,2857],{"class":40},[34,8404,8405],{"class":36,"line":518},[34,8406,3223],{"class":40},[103,8408,8409],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8411,8413],{"id":8412},"_35const修饰指针","3.5const修饰指针",[103,8415,8416],{},"三种情况：",[2798,8418,8419,8422,8425],{},[1775,8420,8421],{},"const修饰指针 常量指针",[1775,8423,8424],{},"const修饰常量 指针常量",[1775,8426,8427],{},"const即修饰指针，又修饰常量",[1772,8429,8430],{},[1775,8431,8432],{},"常量指针",[24,8434,8436],{"className":1809,"code":8435,"language":1811,"meta":29,"style":29},"const int *p=&a;\n",[31,8437,8438],{"__ignoreMap":29},[34,8439,8440,8443,8445,8447,8449,8451],{"class":36,"line":37},[34,8441,8442],{"class":55},"const",[34,8444,4036],{"class":55},[34,8446,8168],{"class":55},[34,8448,103],{"class":40},[34,8450,7989],{"class":55},[34,8452,7847],{"class":40},[103,8454,8455],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[1772,8457,8458],{"start":165},[1775,8459,8460],{},"指针常量",[24,8462,8464],{"className":1809,"code":8463,"language":1811,"meta":29,"style":29},"int *const p=&a;\n",[31,8465,8466],{"__ignoreMap":29},[34,8467,8468,8470,8473,8476,8478],{"class":36,"line":37},[34,8469,571],{"class":55},[34,8471,8472],{"class":55}," *const",[34,8474,8475],{"class":40}," p",[34,8477,7989],{"class":55},[34,8479,7847],{"class":40},[103,8481,8482],{},"指针的指向不可以改，指针指向的值可以改",[1772,8484,8485],{"start":171},[1775,8486,8427],{},[24,8488,8490],{"className":1809,"code":8489,"language":1811,"meta":29,"style":29},"const int *const p=&a;\n",[31,8491,8492],{"__ignoreMap":29},[34,8493,8494,8496,8498,8500,8502,8504],{"class":36,"line":37},[34,8495,8442],{"class":55},[34,8497,4036],{"class":55},[34,8499,8472],{"class":55},[34,8501,8475],{"class":40},[34,8503,7989],{"class":55},[34,8505,7847],{"class":40},[103,8507,8508],{},"指针的指向和指针指向的值都不可以改变",[14,8510,8512],{"id":8511},"_36指针和数组","3.6指针和数组",[24,8514,8516],{"className":1809,"code":8515,"language":1811,"meta":29,"style":29},"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",[31,8517,8518,8526,8530,8535,8589,8610,8626,8642,8653,8670,8675,8689,8715,8719,8731,8740,8744],{"__ignoreMap":29},[34,8519,8520,8522,8524],{"class":36,"line":37},[34,8521,571],{"class":55},[34,8523,3627],{"class":3617},[34,8525,3630],{"class":40},[34,8527,8528],{"class":36,"line":165},[34,8529,3204],{"class":40},[34,8531,8532],{"class":36,"line":171},[34,8533,8534],{"class":161},"    \u002F\u002F利用指针访问数组中的元素\n",[34,8536,8537,8539,8541,8543,8545,8547,8549,8551,8553,8555,8557,8559,8561,8563,8565,8567,8569,8571,8573,8575,8577,8579,8581,8583,8585,8587],{"class":36,"line":182},[34,8538,3639],{"class":55},[34,8540,5615],{"class":40},[34,8542,410],{"class":44},[34,8544,2731],{"class":40},[34,8546,221],{"class":55},[34,8548,2687],{"class":40},[34,8550,394],{"class":44},[34,8552,291],{"class":40},[34,8554,332],{"class":44},[34,8556,291],{"class":40},[34,8558,337],{"class":44},[34,8560,291],{"class":40},[34,8562,247],{"class":44},[34,8564,291],{"class":40},[34,8566,224],{"class":44},[34,8568,291],{"class":40},[34,8570,1115],{"class":44},[34,8572,291],{"class":40},[34,8574,609],{"class":44},[34,8576,291],{"class":40},[34,8578,2195],{"class":44},[34,8580,291],{"class":40},[34,8582,1324],{"class":44},[34,8584,291],{"class":40},[34,8586,410],{"class":44},[34,8588,5648],{"class":40},[34,8590,8591,8593,8595,8598,8600,8602,8604,8606,8608],{"class":36,"line":188},[34,8592,3209],{"class":40},[34,8594,2835],{"class":55},[34,8596,8597],{"class":504},"\"数组的第一个元素为：\"",[34,8599,2835],{"class":55},[34,8601,5559],{"class":40},[34,8603,177],{"class":44},[34,8605,2731],{"class":40},[34,8607,2835],{"class":55},[34,8609,2857],{"class":40},[34,8611,8612,8614,8616,8618,8620,8623],{"class":36,"line":518},[34,8613,3639],{"class":55},[34,8615,8168],{"class":55},[34,8617,103],{"class":40},[34,8619,221],{"class":55},[34,8621,8622],{"class":40},"arr;",[34,8624,8625],{"class":161},"\u002F\u002F注意数才要加取地址符号&\n",[34,8627,8628,8630,8632,8634,8636,8638,8640],{"class":36,"line":524},[34,8629,3209],{"class":40},[34,8631,2835],{"class":55},[34,8633,8597],{"class":504},[34,8635,8069],{"class":55},[34,8637,103],{"class":40},[34,8639,2835],{"class":55},[34,8641,2857],{"class":40},[34,8643,8644,8646,8648,8650],{"class":36,"line":530},[34,8645,7986],{"class":40},[34,8647,3946],{"class":55},[34,8649,1870],{"class":40},[34,8651,8652],{"class":161}," \u002F\u002F让指针向后偏移4个字节\n",[34,8654,8655,8657,8659,8662,8664,8666,8668],{"class":36,"line":624},[34,8656,3209],{"class":40},[34,8658,2835],{"class":55},[34,8660,8661],{"class":504},"\"数组的第二个元素为：\"",[34,8663,8069],{"class":55},[34,8665,103],{"class":40},[34,8667,2835],{"class":55},[34,8669,2857],{"class":40},[34,8671,8672],{"class":36,"line":630},[34,8673,8674],{"class":161},"    \u002F\u002F利用指针遍历数组\n",[34,8676,8677,8679,8681,8684,8686],{"class":36,"line":636},[34,8678,3639],{"class":55},[34,8680,8168],{"class":55},[34,8682,8683],{"class":40},"p2",[34,8685,221],{"class":55},[34,8687,8688],{"class":40},"arr;\n",[34,8690,8691,8693,8695,8697,8699,8701,8703,8705,8707,8709,8711,8713],{"class":36,"line":1513},[34,8692,4854],{"class":55},[34,8694,3313],{"class":40},[34,8696,571],{"class":55},[34,8698,4685],{"class":40},[34,8700,221],{"class":55},[34,8702,177],{"class":44},[34,8704,4692],{"class":40},[34,8706,2701],{"class":55},[34,8708,410],{"class":44},[34,8710,4692],{"class":40},[34,8712,3946],{"class":55},[34,8714,101],{"class":40},[34,8716,8717],{"class":36,"line":1519},[34,8718,3684],{"class":40},[34,8720,8721,8723,8725,8727,8729],{"class":36,"line":3283},[34,8722,5104],{"class":40},[34,8724,8069],{"class":55},[34,8726,8683],{"class":40},[34,8728,2835],{"class":55},[34,8730,2857],{"class":40},[34,8732,8733,8736,8738],{"class":36,"line":3297},[34,8734,8735],{"class":40},"        p2",[34,8737,3946],{"class":55},[34,8739,2952],{"class":40},[34,8741,8742],{"class":36,"line":3302},[34,8743,3841],{"class":40},[34,8745,8746],{"class":36,"line":3308},[34,8747,3223],{"class":40},[14,8749,8751],{"id":8750},"_37指针和函数","3.7指针和函数",[103,8753,8754],{},"利用指针做函数参数，可以修改实参的值",[103,8756,8757],{},"值传递：只改变形参，不改变实参",[103,8759,8760],{},"地址传递：",[24,8762,8764],{"className":1809,"code":8763,"language":1811,"meta":29,"style":29},"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",[31,8765,8766,8791,8795,8807,8818,8828,8832,8840,8844,8856,8868,8873,8889,8904,8919],{"__ignoreMap":29},[34,8767,8768,8770,8772,8774,8776,8778,8781,8783,8785,8787,8789],{"class":36,"line":37},[34,8769,7014],{"class":55},[34,8771,7017],{"class":3617},[34,8773,286],{"class":40},[34,8775,571],{"class":55},[34,8777,8168],{"class":55},[34,8779,8780],{"class":51},"p1",[34,8782,291],{"class":40},[34,8784,571],{"class":55},[34,8786,8168],{"class":55},[34,8788,8683],{"class":51},[34,8790,101],{"class":40},[34,8792,8793],{"class":36,"line":165},[34,8794,3204],{"class":40},[34,8796,8797,8799,8801,8804],{"class":36,"line":171},[34,8798,3639],{"class":55},[34,8800,5907],{"class":40},[34,8802,8803],{"class":55},"=*",[34,8805,8806],{"class":40},"p1;\n",[34,8808,8809,8811,8813,8815],{"class":36,"line":182},[34,8810,8053],{"class":55},[34,8812,8780],{"class":40},[34,8814,8803],{"class":55},[34,8816,8817],{"class":40},"p2;\n",[34,8819,8820,8822,8824,8826],{"class":36,"line":188},[34,8821,8053],{"class":55},[34,8823,8683],{"class":40},[34,8825,221],{"class":55},[34,8827,5932],{"class":40},[34,8829,8830],{"class":36,"line":518},[34,8831,3223],{"class":40},[34,8833,8834,8836,8838],{"class":36,"line":524},[34,8835,571],{"class":55},[34,8837,3627],{"class":3617},[34,8839,3630],{"class":40},[34,8841,8842],{"class":36,"line":530},[34,8843,3204],{"class":40},[34,8845,8846,8848,8850,8852,8854],{"class":36,"line":624},[34,8847,3639],{"class":55},[34,8849,3057],{"class":40},[34,8851,221],{"class":55},[34,8853,410],{"class":44},[34,8855,2952],{"class":40},[34,8857,8858,8860,8862,8864,8866],{"class":36,"line":630},[34,8859,3639],{"class":55},[34,8861,4486],{"class":40},[34,8863,221],{"class":55},[34,8865,1249],{"class":44},[34,8867,2952],{"class":40},[34,8869,8870],{"class":36,"line":636},[34,8871,8872],{"class":161},"    \u002F\u002F地址传递\n",[34,8874,8875,8877,8879,8881,8884,8886],{"class":36,"line":1513},[34,8876,7211],{"class":3617},[34,8878,286],{"class":40},[34,8880,2155],{"class":55},[34,8882,8883],{"class":40},"a,",[34,8885,2155],{"class":55},[34,8887,8888],{"class":40},"b);\n",[34,8890,8891,8893,8895,8897,8899,8901],{"class":36,"line":1519},[34,8892,3209],{"class":40},[34,8894,2835],{"class":55},[34,8896,236],{"class":40},[34,8898,2835],{"class":55},[34,8900,2900],{"class":40},[34,8902,8903],{"class":161},"\u002F\u002F20\n",[34,8905,8906,8908,8910,8912,8914,8916],{"class":36,"line":3283},[34,8907,3209],{"class":40},[34,8909,2835],{"class":55},[34,8911,2070],{"class":40},[34,8913,2835],{"class":55},[34,8915,2900],{"class":40},[34,8917,8918],{"class":161},"\u002F\u002F10\n",[34,8920,8921],{"class":36,"line":3297},[34,8922,3223],{"class":40},[103,8924,8925],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8927,8929],{"id":8928},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[103,8931,8932],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[103,8934,8935,8936,8938],{},"例如数组：int arr",[34,8937,410],{},"={4,3,6,9,1,2,10,8,7,5}",[24,8940,8942],{"className":1809,"code":8941,"language":1811,"meta":29,"style":29},"#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",[31,8943,8944,8950,8960,8984,8988,9019,9023,9057,9061,9079,9083,9094,9109,9124,9128,9132,9136,9140,9144,9152,9156,9161,9215,9227,9239,9244,9252,9256,9261,9286,9290,9305,9314,9318],{"__ignoreMap":29},[34,8945,8946,8948],{"class":36,"line":37},[34,8947,3603],{"class":55},[34,8949,3606],{"class":504},[34,8951,8952,8954,8956,8958],{"class":36,"line":165},[34,8953,3611],{"class":55},[34,8955,3614],{"class":55},[34,8957,3618],{"class":3617},[34,8959,2952],{"class":40},[34,8961,8962,8964,8967,8969,8971,8973,8975,8977,8979,8982],{"class":36,"line":171},[34,8963,7014],{"class":55},[34,8965,8966],{"class":3617}," bubbleSort",[34,8968,286],{"class":40},[34,8970,571],{"class":55},[34,8972,8168],{"class":55},[34,8974,103],{"class":51},[34,8976,291],{"class":40},[34,8978,571],{"class":55},[34,8980,8981],{"class":51}," len",[34,8983,101],{"class":40},[34,8985,8986],{"class":36,"line":182},[34,8987,3204],{"class":40},[34,8989,8990,8992,8994,8996,8998,9000,9002,9004,9006,9009,9011,9013,9015,9017],{"class":36,"line":188},[34,8991,4854],{"class":55},[34,8993,286],{"class":40},[34,8995,571],{"class":55},[34,8997,4685],{"class":40},[34,8999,221],{"class":55},[34,9001,177],{"class":44},[34,9003,4692],{"class":40},[34,9005,2701],{"class":55},[34,9007,9008],{"class":40},"len",[34,9010,2327],{"class":55},[34,9012,394],{"class":44},[34,9014,4692],{"class":40},[34,9016,3946],{"class":55},[34,9018,101],{"class":40},[34,9020,9021],{"class":36,"line":518},[34,9022,3684],{"class":40},[34,9024,9025,9027,9029,9031,9033,9035,9037,9039,9041,9043,9045,9047,9049,9051,9053,9055],{"class":36,"line":524},[34,9026,5056],{"class":55},[34,9028,286],{"class":40},[34,9030,571],{"class":55},[34,9032,5063],{"class":40},[34,9034,221],{"class":55},[34,9036,177],{"class":44},[34,9038,5070],{"class":40},[34,9040,2701],{"class":55},[34,9042,9008],{"class":40},[34,9044,2327],{"class":55},[34,9046,2239],{"class":40},[34,9048,2327],{"class":55},[34,9050,394],{"class":44},[34,9052,5070],{"class":40},[34,9054,3946],{"class":55},[34,9056,101],{"class":40},[34,9058,9059],{"class":36,"line":530},[34,9060,4163],{"class":40},[34,9062,9063,9065,9068,9070,9073,9075,9077],{"class":36,"line":624},[34,9064,6294],{"class":55},[34,9066,9067],{"class":40},"(p[j]",[34,9069,2751],{"class":55},[34,9071,9072],{"class":40},"p[j",[34,9074,2277],{"class":55},[34,9076,394],{"class":44},[34,9078,1077],{"class":40},[34,9080,9081],{"class":36,"line":630},[34,9082,6313],{"class":40},[34,9084,9085,9087,9089,9091],{"class":36,"line":636},[34,9086,6318],{"class":55},[34,9088,5907],{"class":40},[34,9090,221],{"class":55},[34,9092,9093],{"class":40},"p[j];\n",[34,9095,9096,9099,9101,9103,9105,9107],{"class":36,"line":1513},[34,9097,9098],{"class":40},"                p[j]",[34,9100,221],{"class":55},[34,9102,9072],{"class":40},[34,9104,2277],{"class":55},[34,9106,394],{"class":44},[34,9108,6341],{"class":40},[34,9110,9111,9114,9116,9118,9120,9122],{"class":36,"line":1519},[34,9112,9113],{"class":40},"                p[j",[34,9115,2277],{"class":55},[34,9117,394],{"class":44},[34,9119,2731],{"class":40},[34,9121,221],{"class":55},[34,9123,5932],{"class":40},[34,9125,9126],{"class":36,"line":3283},[34,9127,6361],{"class":40},[34,9129,9130],{"class":36,"line":3297},[34,9131,4182],{"class":40},[34,9133,9134],{"class":36,"line":3302},[34,9135,3841],{"class":40},[34,9137,9138],{"class":36,"line":3308},[34,9139,3223],{"class":40},[34,9141,9142],{"class":36,"line":3328},[34,9143,1475],{"emptyLinePlaceholder":1474},[34,9145,9146,9148,9150],{"class":36,"line":3333},[34,9147,571],{"class":55},[34,9149,3627],{"class":3617},[34,9151,3630],{"class":40},[34,9153,9154],{"class":36,"line":3347},[34,9155,3204],{"class":40},[34,9157,9158],{"class":36,"line":3352},[34,9159,9160],{"class":161},"    \u002F\u002F 1.创建数组\n",[34,9162,9163,9165,9167,9169,9171,9173,9175,9177,9179,9181,9183,9185,9187,9189,9191,9193,9195,9197,9199,9201,9203,9205,9207,9209,9211,9213],{"class":36,"line":3381},[34,9164,3639],{"class":55},[34,9166,5615],{"class":40},[34,9168,410],{"class":44},[34,9170,2731],{"class":40},[34,9172,221],{"class":55},[34,9174,2687],{"class":40},[34,9176,247],{"class":44},[34,9178,291],{"class":40},[34,9180,337],{"class":44},[34,9182,291],{"class":40},[34,9184,1115],{"class":44},[34,9186,291],{"class":40},[34,9188,1324],{"class":44},[34,9190,291],{"class":40},[34,9192,394],{"class":44},[34,9194,291],{"class":40},[34,9196,332],{"class":44},[34,9198,291],{"class":40},[34,9200,410],{"class":44},[34,9202,291],{"class":40},[34,9204,2195],{"class":44},[34,9206,291],{"class":40},[34,9208,609],{"class":44},[34,9210,291],{"class":40},[34,9212,224],{"class":44},[34,9214,5648],{"class":40},[34,9216,9217,9219,9221,9223,9225],{"class":36,"line":3386},[34,9218,3639],{"class":55},[34,9220,8981],{"class":40},[34,9222,221],{"class":55},[34,9224,410],{"class":44},[34,9226,2952],{"class":40},[34,9228,9229,9231,9233,9235,9237],{"class":36,"line":3403},[34,9230,3639],{"class":55},[34,9232,8168],{"class":55},[34,9234,103],{"class":40},[34,9236,221],{"class":55},[34,9238,8688],{"class":40},[34,9240,9241],{"class":36,"line":3408},[34,9242,9243],{"class":161},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[34,9245,9246,9249],{"class":36,"line":3413},[34,9247,9248],{"class":3617},"    bubbleSort",[34,9250,9251],{"class":40},"(p,len);\n",[34,9253,9254],{"class":36,"line":3418},[34,9255,1475],{"emptyLinePlaceholder":1474},[34,9257,9258],{"class":36,"line":3432},[34,9259,9260],{"class":161},"    \u002F\u002F 3.打印排序后的数组\n",[34,9262,9263,9265,9267,9269,9271,9273,9275,9277,9279,9282,9284],{"class":36,"line":3437},[34,9264,4854],{"class":55},[34,9266,3313],{"class":40},[34,9268,571],{"class":55},[34,9270,4685],{"class":40},[34,9272,221],{"class":55},[34,9274,177],{"class":44},[34,9276,4867],{"class":40},[34,9278,2701],{"class":55},[34,9280,9281],{"class":40},"len; i",[34,9283,3946],{"class":55},[34,9285,101],{"class":40},[34,9287,9288],{"class":36,"line":4230},[34,9289,3684],{"class":40},[34,9291,9292,9294,9296,9298,9300,9303],{"class":36,"line":4244},[34,9293,5104],{"class":40},[34,9295,8069],{"class":55},[34,9297,103],{"class":40},[34,9299,2835],{"class":55},[34,9301,9302],{"class":504},"\"\"",[34,9304,2952],{"class":40},[34,9306,9307,9310,9312],{"class":36,"line":4252},[34,9308,9309],{"class":40},"        p",[34,9311,3946],{"class":55},[34,9313,2952],{"class":40},[34,9315,9316],{"class":36,"line":4257},[34,9317,3841],{"class":40},[34,9319,9320],{"class":36,"line":4263},[34,9321,3223],{"class":40},[1711,9323,9324],{},"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":29,"searchDepth":165,"depth":165,"links":9326},[9327,9328,9329,9330,9331,9332,9333,9334],{"id":7933,"depth":165,"text":7934},{"id":8099,"depth":165,"text":8100},{"id":8255,"depth":165,"text":8256},{"id":8333,"depth":165,"text":8334},{"id":8412,"depth":165,"text":8413},{"id":8511,"depth":165,"text":8512},{"id":8750,"depth":165,"text":8751},{"id":8928,"depth":165,"text":8929},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7922,"description":7930},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9341,"title":9342,"body":9343,"description":9350,"extension":1745,"meta":12324,"navigation":1474,"path":12325,"seo":12326,"stem":12327,"__hash__":12328},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9344,"toc":12315},[9345,9348,9351,9355,9358,9361,9372,9710,9713,9717,9720,9727,9982,9986,9989,9992,10147,10151,10154,10157,10363,10367,10370,10673,10676,10684,10688,10691,10842,10844,10855,10912,10916,10921,11578,11586,11589,11683,11686,12306,12312],[10,9346,9342],{"id":9347},"_4结构体",[103,9349,9350],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9352,9354],{"id":9353},"_41结构体定义与使用","4.1结构体定义与使用",[103,9356,9357],{},"语法：struct 结构体名 {结构体成员列表}；",[103,9359,9360],{},"通过结构体创建变量的方式：",[2798,9362,9363,9366,9369],{},[1775,9364,9365],{},"struct 结构体名 变量名",[1775,9367,9368],{},"struct 结构体名 变量名={成员1值，成员2值...}",[1775,9370,9371],{},"定义结构体时顺便创建变量",[24,9373,9375],{"className":1809,"code":9374,"language":1811,"meta":29,"style":29},"#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",[31,9376,9377,9383,9393,9400,9405,9413,9417,9422,9426,9431,9436,9441,9448,9453,9460,9464,9471,9475,9479,9483,9487,9491,9495,9501,9505,9511,9519,9527,9531,9536,9541,9552,9557,9569,9580,9591,9596,9620,9625,9631,9658,9663,9669,9681,9693,9705],{"__ignoreMap":29},[34,9378,9379,9381],{"class":36,"line":37},[34,9380,3603],{"class":55},[34,9382,3606],{"class":504},[34,9384,9385,9387,9389,9391],{"class":36,"line":165},[34,9386,3611],{"class":55},[34,9388,3614],{"class":55},[34,9390,3618],{"class":3617},[34,9392,2952],{"class":40},[34,9394,9395,9397],{"class":36,"line":171},[34,9396,3603],{"class":55},[34,9398,9399],{"class":504},"\u003Cstring>\n",[34,9401,9402],{"class":36,"line":182},[34,9403,9404],{"class":161},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[34,9406,9407,9410],{"class":36,"line":188},[34,9408,9409],{"class":55},"struct",[34,9411,9412],{"class":3617}," Student\n",[34,9414,9415],{"class":36,"line":518},[34,9416,3204],{"class":40},[34,9418,9419],{"class":36,"line":524},[34,9420,9421],{"class":161},"    \u002F\u002F成员列表\n",[34,9423,9424],{"class":36,"line":530},[34,9425,1475],{"emptyLinePlaceholder":1474},[34,9427,9428],{"class":36,"line":624},[34,9429,9430],{"class":161},"    \u002F\u002F姓名\n",[34,9432,9433],{"class":36,"line":630},[34,9434,9435],{"class":40},"    string name;\n",[34,9437,9438],{"class":36,"line":636},[34,9439,9440],{"class":161},"    \u002F\u002F年龄\n",[34,9442,9443,9445],{"class":36,"line":1513},[34,9444,3639],{"class":55},[34,9446,9447],{"class":40}," age;\n",[34,9449,9450],{"class":36,"line":1519},[34,9451,9452],{"class":161},"    \u002F\u002F分数\n",[34,9454,9455,9457],{"class":36,"line":3283},[34,9456,3639],{"class":55},[34,9458,9459],{"class":40}," score;\n",[34,9461,9462],{"class":36,"line":3297},[34,9463,5648],{"class":40},[34,9465,9466,9468],{"class":36,"line":3302},[34,9467,9409],{"class":55},[34,9469,9470],{"class":3617}," School\n",[34,9472,9473],{"class":36,"line":3308},[34,9474,3204],{"class":40},[34,9476,9477],{"class":36,"line":3328},[34,9478,9421],{"class":161},[34,9480,9481],{"class":36,"line":3333},[34,9482,1475],{"emptyLinePlaceholder":1474},[34,9484,9485],{"class":36,"line":3347},[34,9486,9430],{"class":161},[34,9488,9489],{"class":36,"line":3352},[34,9490,9435],{"class":40},[34,9492,9493],{"class":36,"line":3381},[34,9494,9440],{"class":161},[34,9496,9497,9499],{"class":36,"line":3386},[34,9498,3639],{"class":55},[34,9500,9447],{"class":40},[34,9502,9503],{"class":36,"line":3403},[34,9504,9452],{"class":161},[34,9506,9507,9509],{"class":36,"line":3408},[34,9508,3639],{"class":55},[34,9510,9459],{"class":40},[34,9512,9513,9516],{"class":36,"line":3413},[34,9514,9515],{"class":40},"} s3;",[34,9517,9518],{"class":161}," \u002F\u002F创建结构体时就创建了变量\n",[34,9520,9521,9523,9525],{"class":36,"line":3418},[34,9522,571],{"class":55},[34,9524,3627],{"class":3617},[34,9526,3630],{"class":40},[34,9528,9529],{"class":36,"line":3432},[34,9530,3204],{"class":40},[34,9532,9533],{"class":36,"line":3437},[34,9534,9535],{"class":161},"    \u002F\u002F2.通过学生类型创建具体学生\n",[34,9537,9538],{"class":36,"line":4230},[34,9539,9540],{"class":161},"    \u002F\u002F2.1 struct Student s1;\n",[34,9542,9543,9546,9549],{"class":36,"line":4244},[34,9544,9545],{"class":55},"    struct",[34,9547,9548],{"class":3617}," Student",[34,9550,9551],{"class":40}," s1;\n",[34,9553,9554],{"class":36,"line":4252},[34,9555,9556],{"class":161},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[34,9558,9559,9562,9564,9567],{"class":36,"line":4257},[34,9560,9561],{"class":40},"    s1.name",[34,9563,221],{"class":55},[34,9565,9566],{"class":504},"\"张三\"",[34,9568,2952],{"class":40},[34,9570,9571,9574,9576,9578],{"class":36,"line":4263},[34,9572,9573],{"class":40},"    s1.age",[34,9575,221],{"class":55},[34,9577,2445],{"class":44},[34,9579,2952],{"class":40},[34,9581,9582,9585,9587,9589],{"class":36,"line":4269},[34,9583,9584],{"class":40},"    s1.score",[34,9586,221],{"class":55},[34,9588,2061],{"class":44},[34,9590,2952],{"class":40},[34,9592,9593],{"class":36,"line":4274},[34,9594,9595],{"class":161},"    \u002F\u002F输出结果\n",[34,9597,9599,9601,9603,9606,9608,9611,9613,9616,9618],{"class":36,"line":9598},37,[34,9600,3209],{"class":40},[34,9602,2835],{"class":55},[34,9604,9605],{"class":40},"s1.name",[34,9607,2835],{"class":55},[34,9609,9610],{"class":40},"s1.age",[34,9612,2835],{"class":55},[34,9614,9615],{"class":40},"s1.score",[34,9617,2835],{"class":55},[34,9619,2857],{"class":40},[34,9621,9623],{"class":36,"line":9622},38,[34,9624,1475],{"emptyLinePlaceholder":1474},[34,9626,9628],{"class":36,"line":9627},39,[34,9629,9630],{"class":161},"    \u002F\u002F2.2 struct Student s2={...}\n",[34,9632,9634,9636,9638,9641,9643,9645,9648,9650,9652,9654,9656],{"class":36,"line":9633},40,[34,9635,9545],{"class":55},[34,9637,9548],{"class":3617},[34,9639,9640],{"class":40}," s2",[34,9642,221],{"class":55},[34,9644,2687],{"class":40},[34,9646,9647],{"class":504},"\"王五\"",[34,9649,291],{"class":40},[34,9651,2445],{"class":44},[34,9653,291],{"class":40},[34,9655,2061],{"class":44},[34,9657,5648],{"class":40},[34,9659,9661],{"class":36,"line":9660},41,[34,9662,1475],{"emptyLinePlaceholder":1474},[34,9664,9666],{"class":36,"line":9665},42,[34,9667,9668],{"class":161},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[34,9670,9672,9675,9677,9679],{"class":36,"line":9671},43,[34,9673,9674],{"class":40},"    s3.name",[34,9676,221],{"class":55},[34,9678,5331],{"class":504},[34,9680,2952],{"class":40},[34,9682,9684,9687,9689,9691],{"class":36,"line":9683},44,[34,9685,9686],{"class":40},"    s3.age",[34,9688,221],{"class":55},[34,9690,2445],{"class":44},[34,9692,2952],{"class":40},[34,9694,9696,9699,9701,9703],{"class":36,"line":9695},45,[34,9697,9698],{"class":40},"    s3.score",[34,9700,221],{"class":55},[34,9702,1249],{"class":44},[34,9704,2952],{"class":40},[34,9706,9708],{"class":36,"line":9707},46,[34,9709,3223],{"class":40},[103,9711,9712],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9714,9716],{"id":9715},"_42结构体数组","4.2结构体数组",[103,9718,9719],{},"将自定义的结构体放入到数组中方便维护",[103,9721,9722,9723,9726],{},"语法：struct 结构体名 数组名",[34,9724,9725],{},"元素个数","={ {}，{},...{} };",[24,9728,9730],{"className":1809,"code":9729,"language":1811,"meta":29,"style":29},"#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",[31,9731,9732,9738,9748,9754,9759,9765,9769,9773,9779,9785,9789,9793,9801,9805,9810,9825,9829,9845,9861,9865,9870,9886,9901,9916,9921,9947,9951,9974,9978],{"__ignoreMap":29},[34,9733,9734,9736],{"class":36,"line":37},[34,9735,3603],{"class":55},[34,9737,3606],{"class":504},[34,9739,9740,9742,9744,9746],{"class":36,"line":165},[34,9741,3611],{"class":55},[34,9743,3614],{"class":55},[34,9745,3618],{"class":3617},[34,9747,2952],{"class":40},[34,9749,9750,9752],{"class":36,"line":171},[34,9751,3603],{"class":55},[34,9753,9399],{"class":504},[34,9755,9756],{"class":36,"line":182},[34,9757,9758],{"class":161},"\u002F\u002F1.定义结构体\n",[34,9760,9761,9763],{"class":36,"line":188},[34,9762,9409],{"class":55},[34,9764,9412],{"class":3617},[34,9766,9767],{"class":36,"line":518},[34,9768,3204],{"class":40},[34,9770,9771],{"class":36,"line":524},[34,9772,9435],{"class":40},[34,9774,9775,9777],{"class":36,"line":530},[34,9776,3639],{"class":55},[34,9778,9447],{"class":40},[34,9780,9781,9783],{"class":36,"line":624},[34,9782,3639],{"class":55},[34,9784,9459],{"class":40},[34,9786,9787],{"class":36,"line":630},[34,9788,1475],{"emptyLinePlaceholder":1474},[34,9790,9791],{"class":36,"line":636},[34,9792,5648],{"class":40},[34,9794,9795,9797,9799],{"class":36,"line":1513},[34,9796,571],{"class":55},[34,9798,3627],{"class":3617},[34,9800,3630],{"class":40},[34,9802,9803],{"class":36,"line":1519},[34,9804,3204],{"class":40},[34,9806,9807],{"class":36,"line":3283},[34,9808,9809],{"class":161},"    \u002F\u002F2.创建结构体数组\n",[34,9811,9812,9814,9816,9819,9821,9823],{"class":36,"line":3297},[34,9813,9545],{"class":55},[34,9815,9548],{"class":3617},[34,9817,9818],{"class":40}," stuArray[",[34,9820,332],{"class":44},[34,9822,2731],{"class":40},[34,9824,6559],{"class":55},[34,9826,9827],{"class":36,"line":3302},[34,9828,3684],{"class":40},[34,9830,9831,9833,9835,9837,9839,9841,9843],{"class":36,"line":3308},[34,9832,6568],{"class":40},[34,9834,9566],{"class":504},[34,9836,291],{"class":40},[34,9838,2445],{"class":44},[34,9840,291],{"class":40},[34,9842,451],{"class":44},[34,9844,6581],{"class":40},[34,9846,9847,9849,9851,9853,9855,9857,9859],{"class":36,"line":3328},[34,9848,6568],{"class":40},[34,9850,5331],{"class":504},[34,9852,291],{"class":40},[34,9854,2370],{"class":44},[34,9856,291],{"class":40},[34,9858,2370],{"class":44},[34,9860,3223],{"class":40},[34,9862,9863],{"class":36,"line":3333},[34,9864,3841],{"class":40},[34,9866,9867],{"class":36,"line":3347},[34,9868,9869],{"class":161},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[34,9871,9872,9875,9877,9880,9882,9884],{"class":36,"line":3352},[34,9873,9874],{"class":40},"    stuArray[",[34,9876,394],{"class":44},[34,9878,9879],{"class":40},"].name",[34,9881,221],{"class":55},[34,9883,5354],{"class":504},[34,9885,2952],{"class":40},[34,9887,9888,9890,9892,9895,9897,9899],{"class":36,"line":3381},[34,9889,9874],{"class":40},[34,9891,394],{"class":44},[34,9893,9894],{"class":40},"].age",[34,9896,221],{"class":55},[34,9898,332],{"class":44},[34,9900,2952],{"class":40},[34,9902,9903,9905,9907,9910,9912,9914],{"class":36,"line":3386},[34,9904,9874],{"class":40},[34,9906,394],{"class":44},[34,9908,9909],{"class":40},"].score",[34,9911,221],{"class":55},[34,9913,332],{"class":44},[34,9915,2952],{"class":40},[34,9917,9918],{"class":36,"line":3403},[34,9919,9920],{"class":161},"    \u002F\u002F4.遍历结构体数组\n",[34,9922,9923,9925,9927,9929,9931,9933,9935,9937,9939,9941,9943,9945],{"class":36,"line":3408},[34,9924,4854],{"class":55},[34,9926,3313],{"class":40},[34,9928,571],{"class":55},[34,9930,4685],{"class":40},[34,9932,221],{"class":55},[34,9934,177],{"class":44},[34,9936,4692],{"class":40},[34,9938,2701],{"class":55},[34,9940,332],{"class":44},[34,9942,4692],{"class":40},[34,9944,3946],{"class":55},[34,9946,101],{"class":40},[34,9948,9949],{"class":36,"line":3413},[34,9950,3684],{"class":40},[34,9952,9953,9955,9957,9960,9962,9965,9967,9970,9972],{"class":36,"line":3418},[34,9954,5104],{"class":40},[34,9956,2835],{"class":55},[34,9958,9959],{"class":40},"stuArray[i].name",[34,9961,2835],{"class":55},[34,9963,9964],{"class":40},"stuArray[i].age",[34,9966,2835],{"class":55},[34,9968,9969],{"class":40},"stuArray[i].score",[34,9971,2835],{"class":55},[34,9973,2857],{"class":40},[34,9975,9976],{"class":36,"line":3432},[34,9977,3841],{"class":40},[34,9979,9980],{"class":36,"line":3437},[34,9981,3223],{"class":40},[14,9983,9985],{"id":9984},"_43结构体指针","4.3结构体指针",[103,9987,9988],{},"作用：通过指针访问结构体中的成员",[103,9990,9991],{},"利用操作符->可以通过结构体指针访问结构体属性",[24,9993,9995],{"className":1809,"code":9994,"language":1811,"meta":29,"style":29},"#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",[31,9996,9997,10003,10013,10019,10023,10029,10033,10037,10043,10049,10053,10061,10065,10070,10095,10100,10115,10120,10143],{"__ignoreMap":29},[34,9998,9999,10001],{"class":36,"line":37},[34,10000,3603],{"class":55},[34,10002,3606],{"class":504},[34,10004,10005,10007,10009,10011],{"class":36,"line":165},[34,10006,3611],{"class":55},[34,10008,3614],{"class":55},[34,10010,3618],{"class":3617},[34,10012,2952],{"class":40},[34,10014,10015,10017],{"class":36,"line":171},[34,10016,3603],{"class":55},[34,10018,9399],{"class":504},[34,10020,10021],{"class":36,"line":182},[34,10022,9758],{"class":161},[34,10024,10025,10027],{"class":36,"line":188},[34,10026,9409],{"class":55},[34,10028,9412],{"class":3617},[34,10030,10031],{"class":36,"line":518},[34,10032,3204],{"class":40},[34,10034,10035],{"class":36,"line":524},[34,10036,9435],{"class":40},[34,10038,10039,10041],{"class":36,"line":530},[34,10040,3639],{"class":55},[34,10042,9447],{"class":40},[34,10044,10045,10047],{"class":36,"line":624},[34,10046,3639],{"class":55},[34,10048,9459],{"class":40},[34,10050,10051],{"class":36,"line":630},[34,10052,5648],{"class":40},[34,10054,10055,10057,10059],{"class":36,"line":636},[34,10056,571],{"class":55},[34,10058,3627],{"class":3617},[34,10060,3630],{"class":40},[34,10062,10063],{"class":36,"line":1513},[34,10064,3204],{"class":40},[34,10066,10067],{"class":36,"line":1519},[34,10068,10069],{"class":161},"    \u002F\u002F创建学生结构体变量\n",[34,10071,10072,10074,10076,10079,10081,10083,10085,10087,10089,10091,10093],{"class":36,"line":3283},[34,10073,9545],{"class":55},[34,10075,9548],{"class":3617},[34,10077,10078],{"class":40}," s",[34,10080,221],{"class":55},[34,10082,2687],{"class":40},[34,10084,9566],{"class":504},[34,10086,291],{"class":40},[34,10088,2445],{"class":44},[34,10090,291],{"class":40},[34,10092,3376],{"class":44},[34,10094,5648],{"class":40},[34,10096,10097],{"class":36,"line":3297},[34,10098,10099],{"class":161},"    \u002F\u002F通过指针指向结构体变量\n",[34,10101,10102,10104,10106,10108,10110,10112],{"class":36,"line":3302},[34,10103,9545],{"class":55},[34,10105,9548],{"class":3617},[34,10107,8168],{"class":55},[34,10109,103],{"class":40},[34,10111,7989],{"class":55},[34,10113,10114],{"class":40},"s\n",[34,10116,10117],{"class":36,"line":3308},[34,10118,10119],{"class":161},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[34,10121,10122,10124,10126,10129,10131,10134,10136,10139,10141],{"class":36,"line":3328},[34,10123,3209],{"class":40},[34,10125,2835],{"class":55},[34,10127,10128],{"class":40},"p->name",[34,10130,2835],{"class":55},[34,10132,10133],{"class":40},"p->age",[34,10135,2835],{"class":55},[34,10137,10138],{"class":40},"p->score",[34,10140,2835],{"class":55},[34,10142,2857],{"class":40},[34,10144,10145],{"class":36,"line":3333},[34,10146,3223],{"class":40},[14,10148,10150],{"id":10149},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[103,10152,10153],{},"作用：结构体中的成员可以是另一个结构体",[103,10155,10156],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[24,10158,10160],{"className":1809,"code":10159,"language":1811,"meta":29,"style":29},"#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",[31,10161,10162,10168,10178,10184,10189,10197,10201,10205,10211,10217,10221,10226,10233,10237,10244,10248,10254,10259,10263,10271,10275,10280,10285,10290,10301,10313,10324,10337,10348,10359],{"__ignoreMap":29},[34,10163,10164,10166],{"class":36,"line":37},[34,10165,3603],{"class":55},[34,10167,3606],{"class":504},[34,10169,10170,10172,10174,10176],{"class":36,"line":165},[34,10171,3611],{"class":55},[34,10173,3614],{"class":55},[34,10175,3618],{"class":3617},[34,10177,2952],{"class":40},[34,10179,10180,10182],{"class":36,"line":171},[34,10181,3603],{"class":55},[34,10183,9399],{"class":504},[34,10185,10186],{"class":36,"line":182},[34,10187,10188],{"class":161},"\u002F\u002F定义学生结构体\n",[34,10190,10191,10193,10195],{"class":36,"line":188},[34,10192,9409],{"class":55},[34,10194,9548],{"class":3617},[34,10196,4327],{"class":40},[34,10198,10199],{"class":36,"line":518},[34,10200,3204],{"class":40},[34,10202,10203],{"class":36,"line":524},[34,10204,9435],{"class":40},[34,10206,10207,10209],{"class":36,"line":530},[34,10208,3639],{"class":55},[34,10210,9447],{"class":40},[34,10212,10213,10215],{"class":36,"line":624},[34,10214,3639],{"class":55},[34,10216,9459],{"class":40},[34,10218,10219],{"class":36,"line":630},[34,10220,3223],{"class":40},[34,10222,10223],{"class":36,"line":636},[34,10224,10225],{"class":161},"\u002F\u002F定义老师结构体\n",[34,10227,10228,10230],{"class":36,"line":1513},[34,10229,9409],{"class":55},[34,10231,10232],{"class":3617}," Teacher\n",[34,10234,10235],{"class":36,"line":1519},[34,10236,3204],{"class":40},[34,10238,10239,10241],{"class":36,"line":3283},[34,10240,3639],{"class":55},[34,10242,10243],{"class":40}," id;\n",[34,10245,10246],{"class":36,"line":3297},[34,10247,9435],{"class":40},[34,10249,10250,10252],{"class":36,"line":3302},[34,10251,3639],{"class":55},[34,10253,9447],{"class":40},[34,10255,10256],{"class":36,"line":3308},[34,10257,10258],{"class":40},"    Student stu;\n",[34,10260,10261],{"class":36,"line":3328},[34,10262,3223],{"class":40},[34,10264,10265,10267,10269],{"class":36,"line":3333},[34,10266,571],{"class":55},[34,10268,3627],{"class":3617},[34,10270,7628],{"class":40},[34,10272,10273],{"class":36,"line":3347},[34,10274,3204],{"class":40},[34,10276,10277],{"class":36,"line":3352},[34,10278,10279],{"class":161},"    \u002F\u002F结构体嵌套结构体\n",[34,10281,10282],{"class":36,"line":3381},[34,10283,10284],{"class":161},"    \u002F\u002F创建老师\n",[34,10286,10287],{"class":36,"line":3386},[34,10288,10289],{"class":40},"    Teacher t;\n",[34,10291,10292,10295,10297,10299],{"class":36,"line":3403},[34,10293,10294],{"class":40},"    t.id",[34,10296,221],{"class":55},[34,10298,451],{"class":44},[34,10300,2952],{"class":40},[34,10302,10303,10306,10308,10311],{"class":36,"line":3408},[34,10304,10305],{"class":40},"    t.name",[34,10307,221],{"class":55},[34,10309,10310],{"class":504},"\"老王\"",[34,10312,2952],{"class":40},[34,10314,10315,10318,10320,10322],{"class":36,"line":3413},[34,10316,10317],{"class":40},"    t.age",[34,10319,221],{"class":55},[34,10321,2445],{"class":44},[34,10323,2952],{"class":40},[34,10325,10326,10329,10331,10334],{"class":36,"line":3418},[34,10327,10328],{"class":40},"    t.stu.name",[34,10330,221],{"class":55},[34,10332,10333],{"class":504},"\"小王\"",[34,10335,10336],{"class":40},"；\n",[34,10338,10339,10342,10344,10346],{"class":36,"line":3432},[34,10340,10341],{"class":40},"    t.stu.age",[34,10343,221],{"class":55},[34,10345,1249],{"class":44},[34,10347,2952],{"class":40},[34,10349,10350,10353,10355,10357],{"class":36,"line":3437},[34,10351,10352],{"class":40},"    t.stu.score",[34,10354,221],{"class":55},[34,10356,1115],{"class":44},[34,10358,2952],{"class":40},[34,10360,10361],{"class":36,"line":4230},[34,10362,3223],{"class":40},[14,10364,10366],{"id":10365},"_45结构体做函数参数","4.5结构体做函数参数",[103,10368,10369],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[24,10371,10373],{"className":1809,"code":10372,"language":1811,"meta":29,"style":29},"#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",[31,10374,10375,10381,10391,10397,10403,10407,10411,10417,10423,10427,10432,10437,10454,10458,10491,10495,10500,10519,10523,10554,10558,10566,10570,10579,10591,10603,10615,10628,10636,10649,10661,10669],{"__ignoreMap":29},[34,10376,10377,10379],{"class":36,"line":37},[34,10378,3603],{"class":55},[34,10380,3606],{"class":504},[34,10382,10383,10385,10387,10389],{"class":36,"line":165},[34,10384,3611],{"class":55},[34,10386,3614],{"class":55},[34,10388,3618],{"class":3617},[34,10390,2952],{"class":40},[34,10392,10393,10395],{"class":36,"line":171},[34,10394,3603],{"class":55},[34,10396,9399],{"class":504},[34,10398,10399,10401],{"class":36,"line":182},[34,10400,9409],{"class":55},[34,10402,9412],{"class":3617},[34,10404,10405],{"class":36,"line":188},[34,10406,3204],{"class":40},[34,10408,10409],{"class":36,"line":518},[34,10410,9435],{"class":40},[34,10412,10413,10415],{"class":36,"line":524},[34,10414,3639],{"class":55},[34,10416,9447],{"class":40},[34,10418,10419,10421],{"class":36,"line":530},[34,10420,3639],{"class":55},[34,10422,9459],{"class":40},[34,10424,10425],{"class":36,"line":624},[34,10426,5648],{"class":40},[34,10428,10429],{"class":36,"line":630},[34,10430,10431],{"class":161},"\u002F\u002F打印学生信息的函数\n",[34,10433,10434],{"class":36,"line":636},[34,10435,10436],{"class":161},"\u002F\u002F值传递\n",[34,10438,10439,10441,10444,10446,10448,10450,10452],{"class":36,"line":1513},[34,10440,7014],{"class":55},[34,10442,10443],{"class":3617}," printStudent1",[34,10445,286],{"class":40},[34,10447,9409],{"class":55},[34,10449,9548],{"class":3617},[34,10451,10078],{"class":51},[34,10453,101],{"class":40},[34,10455,10456],{"class":36,"line":1519},[34,10457,3204],{"class":40},[34,10459,10460,10462,10464,10467,10469,10472,10474,10477,10479,10481,10483,10486,10488],{"class":36,"line":3283},[34,10461,8179],{"class":40},[34,10463,2835],{"class":55},[34,10465,10466],{"class":40}," s.name ",[34,10468,2835],{"class":55},[34,10470,10471],{"class":504}," \" \"",[34,10473,3103],{"class":55},[34,10475,10476],{"class":40}," s.age ",[34,10478,2835],{"class":55},[34,10480,10471],{"class":504},[34,10482,3103],{"class":55},[34,10484,10485],{"class":40}," s.score ",[34,10487,2835],{"class":55},[34,10489,10490],{"class":40}," endl;\n",[34,10492,10493],{"class":36,"line":3297},[34,10494,3223],{"class":40},[34,10496,10497],{"class":36,"line":3302},[34,10498,10499],{"class":161},"\u002F\u002F地址传递\n",[34,10501,10502,10504,10507,10509,10511,10513,10515,10517],{"class":36,"line":3308},[34,10503,7014],{"class":55},[34,10505,10506],{"class":3617}," printStudent2",[34,10508,286],{"class":40},[34,10510,9409],{"class":55},[34,10512,9548],{"class":3617},[34,10514,8168],{"class":55},[34,10516,2490],{"class":51},[34,10518,101],{"class":40},[34,10520,10521],{"class":36,"line":3328},[34,10522,3204],{"class":40},[34,10524,10525,10527,10529,10532,10534,10536,10538,10541,10543,10545,10547,10550,10552],{"class":36,"line":3333},[34,10526,8179],{"class":40},[34,10528,2835],{"class":55},[34,10530,10531],{"class":40}," s->name ",[34,10533,2835],{"class":55},[34,10535,10471],{"class":504},[34,10537,3103],{"class":55},[34,10539,10540],{"class":40}," s->age ",[34,10542,2835],{"class":55},[34,10544,10471],{"class":504},[34,10546,3103],{"class":55},[34,10548,10549],{"class":40}," s->score ",[34,10551,2835],{"class":55},[34,10553,10490],{"class":40},[34,10555,10556],{"class":36,"line":3347},[34,10557,3223],{"class":40},[34,10559,10560,10562,10564],{"class":36,"line":3352},[34,10561,571],{"class":55},[34,10563,3627],{"class":3617},[34,10565,3630],{"class":40},[34,10567,10568],{"class":36,"line":3381},[34,10569,3204],{"class":40},[34,10571,10572,10574,10576],{"class":36,"line":3386},[34,10573,9545],{"class":55},[34,10575,9548],{"class":3617},[34,10577,10578],{"class":40}," s;\n",[34,10580,10581,10584,10586,10589],{"class":36,"line":3403},[34,10582,10583],{"class":40},"    s.name ",[34,10585,221],{"class":55},[34,10587,10588],{"class":504}," \"张三\"",[34,10590,2952],{"class":40},[34,10592,10593,10596,10598,10601],{"class":36,"line":3408},[34,10594,10595],{"class":40},"    s.age ",[34,10597,221],{"class":55},[34,10599,10600],{"class":44}," 20",[34,10602,2952],{"class":40},[34,10604,10605,10608,10610,10613],{"class":36,"line":3413},[34,10606,10607],{"class":40},"    s.score ",[34,10609,221],{"class":55},[34,10611,10612],{"class":44}," 85",[34,10614,2952],{"class":40},[34,10616,10617,10619,10621,10624,10626],{"class":36,"line":3418},[34,10618,3209],{"class":40},[34,10620,2835],{"class":55},[34,10622,10623],{"class":504},"\"值传递:\"",[34,10625,2835],{"class":55},[34,10627,2857],{"class":40},[34,10629,10630,10633],{"class":36,"line":3432},[34,10631,10632],{"class":3617},"    printStudent1",[34,10634,10635],{"class":40},"(s);\n",[34,10637,10638,10640,10642,10645,10647],{"class":36,"line":3437},[34,10639,3209],{"class":40},[34,10641,2835],{"class":55},[34,10643,10644],{"class":504},"\"地址传递:\"",[34,10646,2835],{"class":55},[34,10648,2857],{"class":40},[34,10650,10651,10654,10656,10658],{"class":36,"line":4230},[34,10652,10653],{"class":3617},"    printStudent2",[34,10655,286],{"class":40},[34,10657,2155],{"class":55},[34,10659,10660],{"class":40},"s); \n",[34,10662,10663,10665,10667],{"class":36,"line":4244},[34,10664,5743],{"class":55},[34,10666,98],{"class":44},[34,10668,2952],{"class":40},[34,10670,10671],{"class":36,"line":4252},[34,10672,3223],{"class":40},[103,10674,10675],{},"注意：",[2798,10677,10678,10681],{},[1775,10679,10680],{},"1.先定义结构体，不要在函数中写结构体的定义",[1775,10682,10683],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10685,10687],{"id":10686},"_46结构体中const使用场景","4.6结构体中const使用场景",[103,10689,10690],{},"用const防止误操作",[24,10692,10694],{"className":1809,"code":10693,"language":1811,"meta":29,"style":29},"#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",[31,10695,10696,10702,10712,10718,10723,10727,10731,10737,10743,10747,10763,10767,10790,10794,10802,10806,10827,10834,10838],{"__ignoreMap":29},[34,10697,10698,10700],{"class":36,"line":37},[34,10699,3603],{"class":55},[34,10701,3606],{"class":504},[34,10703,10704,10706,10708,10710],{"class":36,"line":165},[34,10705,3611],{"class":55},[34,10707,3614],{"class":55},[34,10709,3618],{"class":3617},[34,10711,2952],{"class":40},[34,10713,10714,10716],{"class":36,"line":171},[34,10715,3603],{"class":55},[34,10717,9399],{"class":504},[34,10719,10720],{"class":36,"line":182},[34,10721,10722],{"class":40},"sctuct Student\n",[34,10724,10725],{"class":36,"line":188},[34,10726,3204],{"class":40},[34,10728,10729],{"class":36,"line":518},[34,10730,9435],{"class":40},[34,10732,10733,10735],{"class":36,"line":524},[34,10734,3639],{"class":55},[34,10736,9447],{"class":40},[34,10738,10739,10741],{"class":36,"line":530},[34,10740,3639],{"class":55},[34,10742,9459],{"class":40},[34,10744,10745],{"class":36,"line":624},[34,10746,5648],{"class":40},[34,10748,10749,10751,10754,10756,10759,10761],{"class":36,"line":630},[34,10750,7014],{"class":55},[34,10752,10753],{"class":3617}," printStudents",[34,10755,286],{"class":40},[34,10757,10758],{"class":3617},"student",[34,10760,10078],{"class":51},[34,10762,101],{"class":40},[34,10764,10765],{"class":36,"line":636},[34,10766,3204],{"class":40},[34,10768,10769,10771,10773,10776,10778,10781,10783,10786,10788],{"class":36,"line":1513},[34,10770,3209],{"class":40},[34,10772,2835],{"class":55},[34,10774,10775],{"class":40},"s.name",[34,10777,2835],{"class":55},[34,10779,10780],{"class":40},"s.age",[34,10782,2835],{"class":55},[34,10784,10785],{"class":40},"s.score",[34,10787,2835],{"class":55},[34,10789,2857],{"class":40},[34,10791,10792],{"class":36,"line":1519},[34,10793,3223],{"class":40},[34,10795,10796,10798,10800],{"class":36,"line":3283},[34,10797,571],{"class":55},[34,10799,3627],{"class":3617},[34,10801,7628],{"class":40},[34,10803,10804],{"class":36,"line":3297},[34,10805,3204],{"class":40},[34,10807,10808,10811,10813,10815,10817,10819,10821,10823,10825],{"class":36,"line":3302},[34,10809,10810],{"class":40},"    Student s",[34,10812,221],{"class":55},[34,10814,2687],{"class":40},[34,10816,9566],{"class":504},[34,10818,291],{"class":40},[34,10820,2445],{"class":44},[34,10822,291],{"class":40},[34,10824,2445],{"class":44},[34,10826,5648],{"class":40},[34,10828,10829,10832],{"class":36,"line":3308},[34,10830,10831],{"class":3617},"    printStudent",[34,10833,10635],{"class":40},[34,10835,10836],{"class":36,"line":3328},[34,10837,1475],{"emptyLinePlaceholder":1474},[34,10839,10840],{"class":36,"line":3333},[34,10841,3223],{"class":40},[103,10843,10675],{},[2798,10845,10846,10849,10852],{},[1775,10847,10848],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[1775,10850,10851],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[1775,10853,10854],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[24,10856,10858],{"className":1809,"code":10857,"language":1811,"meta":29,"style":29},"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",[31,10859,10860,10879,10883,10888,10908],{"__ignoreMap":29},[34,10861,10862,10864,10866,10868,10870,10873,10875,10877],{"class":36,"line":37},[34,10863,7014],{"class":55},[34,10865,10753],{"class":3617},[34,10867,286],{"class":40},[34,10869,8442],{"class":55},[34,10871,10872],{"class":3617}," student",[34,10874,8168],{"class":55},[34,10876,2490],{"class":51},[34,10878,101],{"class":40},[34,10880,10881],{"class":36,"line":165},[34,10882,3204],{"class":40},[34,10884,10885],{"class":36,"line":171},[34,10886,10887],{"class":161},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[34,10889,10890,10892,10894,10896,10898,10900,10902,10904,10906],{"class":36,"line":182},[34,10891,3209],{"class":40},[34,10893,2835],{"class":55},[34,10895,10775],{"class":40},[34,10897,2835],{"class":55},[34,10899,10780],{"class":40},[34,10901,2835],{"class":55},[34,10903,10785],{"class":40},[34,10905,2835],{"class":55},[34,10907,2857],{"class":40},[34,10909,10910],{"class":36,"line":188},[34,10911,3223],{"class":40},[14,10913,10915],{"id":10914},"_47案例","4.7案例",[1772,10917,10918],{},[1775,10919,10920],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[24,10922,10924],{"className":1809,"code":10923,"language":1811,"meta":29,"style":29},"#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",[31,10925,10926,10932,10942,10948,10955,10959,10965,10969,10974,10980,10986,10990,10994,11000,11004,11009,11014,11027,11031,11036,11062,11066,11078,11105,11109,11121,11131,11135,11140,11169,11173,11185,11194,11221,11232,11242,11246,11250,11254,11259,11283,11287,11311,11315,11334,11360,11364,11389,11412,11436,11441,11446,11451,11460,11465,11471,11492,11498,11512,11518,11545,11554,11560,11568,11573],{"__ignoreMap":29},[34,10927,10928,10930],{"class":36,"line":37},[34,10929,3603],{"class":55},[34,10931,3606],{"class":504},[34,10933,10934,10936,10938,10940],{"class":36,"line":165},[34,10935,3611],{"class":55},[34,10937,3614],{"class":55},[34,10939,3618],{"class":3617},[34,10941,2952],{"class":40},[34,10943,10944,10946],{"class":36,"line":171},[34,10945,3603],{"class":55},[34,10947,9399],{"class":504},[34,10949,10950,10952],{"class":36,"line":182},[34,10951,3603],{"class":55},[34,10953,10954],{"class":504},"\u003Cctime>\n",[34,10956,10957],{"class":36,"line":188},[34,10958,10188],{"class":161},[34,10960,10961,10963],{"class":36,"line":518},[34,10962,9409],{"class":55},[34,10964,9412],{"class":3617},[34,10966,10967],{"class":36,"line":524},[34,10968,3204],{"class":40},[34,10970,10971],{"class":36,"line":530},[34,10972,10973],{"class":40},"    string sName;\n",[34,10975,10976,10978],{"class":36,"line":624},[34,10977,3639],{"class":55},[34,10979,9447],{"class":40},[34,10981,10982,10984],{"class":36,"line":630},[34,10983,3639],{"class":55},[34,10985,9459],{"class":40},[34,10987,10988],{"class":36,"line":636},[34,10989,5648],{"class":40},[34,10991,10992],{"class":36,"line":1513},[34,10993,10225],{"class":161},[34,10995,10996,10998],{"class":36,"line":1519},[34,10997,9409],{"class":55},[34,10999,10232],{"class":3617},[34,11001,11002],{"class":36,"line":3283},[34,11003,3204],{"class":40},[34,11005,11006],{"class":36,"line":3297},[34,11007,11008],{"class":40},"    string tName;\n",[34,11010,11011],{"class":36,"line":3302},[34,11012,11013],{"class":161},"    \u002F\u002F学生数组\n",[34,11015,11016,11018,11020,11023,11025],{"class":36,"line":3308},[34,11017,9545],{"class":55},[34,11019,9548],{"class":3617},[34,11021,11022],{"class":40}," sArray[",[34,11024,224],{"class":44},[34,11026,6341],{"class":40},[34,11028,11029],{"class":36,"line":3328},[34,11030,5648],{"class":40},[34,11032,11033],{"class":36,"line":3333},[34,11034,11035],{"class":161},"\u002F\u002F给老师和学生赋值的函数\n",[34,11037,11038,11040,11043,11045,11047,11050,11053,11056,11058,11060],{"class":36,"line":3347},[34,11039,7014],{"class":55},[34,11041,11042],{"class":3617}," allocateSpace",[34,11044,286],{"class":40},[34,11046,9409],{"class":55},[34,11048,11049],{"class":3617}," Teacher",[34,11051,11052],{"class":51}," tArray",[34,11054,11055],{"class":40},"[],",[34,11057,571],{"class":55},[34,11059,8981],{"class":51},[34,11061,101],{"class":40},[34,11063,11064],{"class":36,"line":3352},[34,11065,3204],{"class":40},[34,11067,11068,11071,11073,11076],{"class":36,"line":3381},[34,11069,11070],{"class":40},"    string nameSeed",[34,11072,221],{"class":55},[34,11074,11075],{"class":504},"\"ABCDE\"",[34,11077,2952],{"class":40},[34,11079,11080,11082,11084,11086,11089,11091,11093,11096,11098,11101,11103],{"class":36,"line":3386},[34,11081,4854],{"class":55},[34,11083,3313],{"class":40},[34,11085,571],{"class":55},[34,11087,11088],{"class":40}," i ",[34,11090,221],{"class":55},[34,11092,98],{"class":44},[34,11094,11095],{"class":40},"; i ",[34,11097,2701],{"class":55},[34,11099,11100],{"class":40}," len; i",[34,11102,3946],{"class":55},[34,11104,101],{"class":40},[34,11106,11107],{"class":36,"line":3403},[34,11108,3684],{"class":40},[34,11110,11111,11114,11116,11119],{"class":36,"line":3408},[34,11112,11113],{"class":40},"        tArray[i].tName ",[34,11115,221],{"class":55},[34,11117,11118],{"class":504}," \"Teacher_\"",[34,11120,2952],{"class":40},[34,11122,11123,11125,11128],{"class":36,"line":3413},[34,11124,11113],{"class":40},[34,11126,11127],{"class":55},"+=",[34,11129,11130],{"class":40},"nameSeed[i];\n",[34,11132,11133],{"class":36,"line":3418},[34,11134,1475],{"emptyLinePlaceholder":1474},[34,11136,11137],{"class":36,"line":3432},[34,11138,11139],{"class":161},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[34,11141,11142,11144,11146,11148,11151,11153,11155,11158,11160,11162,11165,11167],{"class":36,"line":3437},[34,11143,5056],{"class":55},[34,11145,3313],{"class":40},[34,11147,571],{"class":55},[34,11149,11150],{"class":40}," j ",[34,11152,221],{"class":55},[34,11154,98],{"class":44},[34,11156,11157],{"class":40},"; j ",[34,11159,2701],{"class":55},[34,11161,3802],{"class":44},[34,11163,11164],{"class":40},"; j",[34,11166,3946],{"class":55},[34,11168,101],{"class":40},[34,11170,11171],{"class":36,"line":4230},[34,11172,4163],{"class":40},[34,11174,11175,11178,11180,11183],{"class":36,"line":4244},[34,11176,11177],{"class":40},"            tArray[i].sArray[j].sName ",[34,11179,221],{"class":55},[34,11181,11182],{"class":504}," \"Student_\"",[34,11184,2952],{"class":40},[34,11186,11187,11189,11191],{"class":36,"line":4252},[34,11188,11177],{"class":40},[34,11190,11127],{"class":55},[34,11192,11193],{"class":40}," nameSeed[j];\n",[34,11195,11196,11199,11202,11204,11206,11208,11210,11212,11214,11216,11218],{"class":36,"line":4257},[34,11197,11198],{"class":55},"            int",[34,11200,11201],{"class":40}," random",[34,11203,221],{"class":55},[34,11205,4077],{"class":3617},[34,11207,4080],{"class":40},[34,11209,2131],{"class":55},[34,11211,2698],{"class":44},[34,11213,2277],{"class":55},[34,11215,2201],{"class":44},[34,11217,1870],{"class":40},[34,11219,11220],{"class":161},"\u002F\u002F40~99\n",[34,11222,11223,11226,11228,11230],{"class":36,"line":4263},[34,11224,11225],{"class":40},"            tArray[i].sArray[j].age ",[34,11227,221],{"class":55},[34,11229,10600],{"class":44},[34,11231,2952],{"class":40},[34,11233,11234,11237,11239],{"class":36,"line":4269},[34,11235,11236],{"class":40},"            tArray[i].sArray[j].score ",[34,11238,221],{"class":55},[34,11240,11241],{"class":40}," random;\n",[34,11243,11244],{"class":36,"line":4274},[34,11245,4182],{"class":40},[34,11247,11248],{"class":36,"line":9598},[34,11249,3841],{"class":40},[34,11251,11252],{"class":36,"line":9622},[34,11253,3223],{"class":40},[34,11255,11256],{"class":36,"line":9627},[34,11257,11258],{"class":161},"\u002F\u002F打印所有信息的函数\n",[34,11260,11261,11263,11266,11268,11270,11272,11274,11277,11279,11281],{"class":36,"line":9633},[34,11262,7014],{"class":55},[34,11264,11265],{"class":3617}," printInfo",[34,11267,286],{"class":40},[34,11269,9409],{"class":55},[34,11271,11049],{"class":3617},[34,11273,11052],{"class":51},[34,11275,11276],{"class":40},"[], ",[34,11278,571],{"class":55},[34,11280,8981],{"class":51},[34,11282,101],{"class":40},[34,11284,11285],{"class":36,"line":9660},[34,11286,3204],{"class":40},[34,11288,11289,11291,11293,11295,11297,11299,11301,11303,11305,11307,11309],{"class":36,"line":9665},[34,11290,4854],{"class":55},[34,11292,3313],{"class":40},[34,11294,571],{"class":55},[34,11296,11088],{"class":40},[34,11298,221],{"class":55},[34,11300,98],{"class":44},[34,11302,11095],{"class":40},[34,11304,2701],{"class":55},[34,11306,11100],{"class":40},[34,11308,3946],{"class":55},[34,11310,101],{"class":40},[34,11312,11313],{"class":36,"line":9671},[34,11314,3684],{"class":40},[34,11316,11317,11320,11322,11325,11327,11330,11332],{"class":36,"line":9683},[34,11318,11319],{"class":40},"        cout ",[34,11321,2835],{"class":55},[34,11323,11324],{"class":504}," \"Teacher: \"",[34,11326,3103],{"class":55},[34,11328,11329],{"class":40}," tArray[i].tName ",[34,11331,2835],{"class":55},[34,11333,10490],{"class":40},[34,11335,11336,11338,11340,11342,11344,11346,11348,11350,11352,11354,11356,11358],{"class":36,"line":9695},[34,11337,5056],{"class":55},[34,11339,3313],{"class":40},[34,11341,571],{"class":55},[34,11343,11150],{"class":40},[34,11345,221],{"class":55},[34,11347,98],{"class":44},[34,11349,11157],{"class":40},[34,11351,2701],{"class":55},[34,11353,3802],{"class":44},[34,11355,11164],{"class":40},[34,11357,3946],{"class":55},[34,11359,101],{"class":40},[34,11361,11362],{"class":36,"line":9707},[34,11363,4163],{"class":40},[34,11365,11367,11370,11372,11375,11377,11380,11382,11385,11387],{"class":36,"line":11366},47,[34,11368,11369],{"class":40},"            cout ",[34,11371,2835],{"class":55},[34,11373,11374],{"class":504}," \"",[34,11376,2892],{"class":44},[34,11378,11379],{"class":504},"Student: \"",[34,11381,3103],{"class":55},[34,11383,11384],{"class":40}," tArray[i].sArray[j].sName",[34,11386,2835],{"class":55},[34,11388,2857],{"class":40},[34,11390,11392,11394,11396,11398,11400,11403,11405,11408,11410],{"class":36,"line":11391},48,[34,11393,11369],{"class":40},[34,11395,2835],{"class":55},[34,11397,11374],{"class":504},[34,11399,2892],{"class":44},[34,11401,11402],{"class":504},"Age: \"",[34,11404,3103],{"class":55},[34,11406,11407],{"class":40}," tArray[i].sArray[j].age ",[34,11409,2835],{"class":55},[34,11411,10490],{"class":40},[34,11413,11415,11417,11419,11421,11423,11426,11428,11431,11433],{"class":36,"line":11414},49,[34,11416,11369],{"class":40},[34,11418,2835],{"class":55},[34,11420,11374],{"class":504},[34,11422,2892],{"class":44},[34,11424,11425],{"class":504},"Score: \"",[34,11427,3103],{"class":55},[34,11429,11430],{"class":40}," tArray[i].sArray[j].score ",[34,11432,2835],{"class":55},[34,11434,11435],{"class":40}," endl;   \n",[34,11437,11439],{"class":36,"line":11438},50,[34,11440,4182],{"class":40},[34,11442,11444],{"class":36,"line":11443},51,[34,11445,3841],{"class":40},[34,11447,11449],{"class":36,"line":11448},52,[34,11450,3223],{"class":40},[34,11452,11454,11456,11458],{"class":36,"line":11453},53,[34,11455,571],{"class":55},[34,11457,3627],{"class":3617},[34,11459,3630],{"class":40},[34,11461,11463],{"class":36,"line":11462},54,[34,11464,3204],{"class":40},[34,11466,11468],{"class":36,"line":11467},55,[34,11469,11470],{"class":161},"    \u002F\u002F随机数种子\n",[34,11472,11474,11476,11478,11480,11482,11484,11486,11488,11490],{"class":36,"line":11473},56,[34,11475,4027],{"class":3617},[34,11477,4030],{"class":40},[34,11479,4033],{"class":55},[34,11481,4036],{"class":55},[34,11483,918],{"class":40},[34,11485,4041],{"class":3617},[34,11487,286],{"class":40},[34,11489,4046],{"class":44},[34,11491,4049],{"class":40},[34,11493,11495],{"class":36,"line":11494},57,[34,11496,11497],{"class":161},"    \u002F\u002F1.创建3名老师的数组\n",[34,11499,11501,11503,11505,11508,11510],{"class":36,"line":11500},58,[34,11502,9545],{"class":55},[34,11504,11049],{"class":3617},[34,11506,11507],{"class":40}," tArray[",[34,11509,337],{"class":44},[34,11511,6341],{"class":40},[34,11513,11515],{"class":36,"line":11514},59,[34,11516,11517],{"class":161},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[34,11519,11521,11523,11526,11528,11531,11534,11536,11538,11541,11543],{"class":36,"line":11520},60,[34,11522,3639],{"class":55},[34,11524,11525],{"class":40}," len ",[34,11527,221],{"class":55},[34,11529,11530],{"class":55}," sizeof",[34,11532,11533],{"class":40},"(tArray) ",[34,11535,2379],{"class":55},[34,11537,11530],{"class":55},[34,11539,11540],{"class":40},"(tArray[",[34,11542,177],{"class":44},[34,11544,5509],{"class":40},[34,11546,11548,11551],{"class":36,"line":11547},61,[34,11549,11550],{"class":3617},"    allocateSpace",[34,11552,11553],{"class":40},"(tArray, len);\n",[34,11555,11557],{"class":36,"line":11556},62,[34,11558,11559],{"class":161},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[34,11561,11563,11566],{"class":36,"line":11562},63,[34,11564,11565],{"class":3617},"    printInfo",[34,11567,11553],{"class":40},[34,11569,11571],{"class":36,"line":11570},64,[34,11572,1475],{"emptyLinePlaceholder":1474},[34,11574,11576],{"class":36,"line":11575},65,[34,11577,3223],{"class":40},[1772,11579,11580],{"start":165},[1775,11581,11582,11585],{},[1165,11583,11584],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[103,11587,11588],{},"五名英雄信息如下：",[24,11590,11594],{"className":11591,"code":11592,"language":11593,"meta":29,"style":29},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[31,11595,11596,11614,11631,11648,11665],{"__ignoreMap":29},[34,11597,11598,11600,11603,11605,11607,11609,11612],{"class":36,"line":37},[34,11599,6568],{"class":40},[34,11601,11602],{"class":504},"\"刘备\"",[34,11604,291],{"class":40},[34,11606,2568],{"class":44},[34,11608,291],{"class":40},[34,11610,11611],{"class":504},"\"男\"",[34,11613,6581],{"class":40},[34,11615,11616,11618,11621,11623,11625,11627,11629],{"class":36,"line":165},[34,11617,6568],{"class":40},[34,11619,11620],{"class":504},"\"关羽\"",[34,11622,291],{"class":40},[34,11624,2543],{"class":44},[34,11626,291],{"class":40},[34,11628,11611],{"class":504},[34,11630,6581],{"class":40},[34,11632,11633,11635,11638,11640,11642,11644,11646],{"class":36,"line":171},[34,11634,6568],{"class":40},[34,11636,11637],{"class":504},"\"张飞\"",[34,11639,291],{"class":40},[34,11641,1249],{"class":44},[34,11643,291],{"class":40},[34,11645,11611],{"class":504},[34,11647,6581],{"class":40},[34,11649,11650,11652,11655,11657,11659,11661,11663],{"class":36,"line":182},[34,11651,6568],{"class":40},[34,11653,11654],{"class":504},"\"赵云\"",[34,11656,291],{"class":40},[34,11658,558],{"class":44},[34,11660,291],{"class":40},[34,11662,11611],{"class":504},[34,11664,6581],{"class":40},[34,11666,11667,11669,11672,11674,11676,11678,11681],{"class":36,"line":188},[34,11668,6568],{"class":40},[34,11670,11671],{"class":504},"\"貂蝉\"",[34,11673,291],{"class":40},[34,11675,2470],{"class":44},[34,11677,291],{"class":40},[34,11679,11680],{"class":504},"\"女\"",[34,11682,6581],{"class":40},[103,11684,11685],{},"代码：",[24,11687,11689],{"className":1809,"code":11688,"language":1811,"meta":29,"style":29},"#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",[31,11690,11691,11697,11707,11713,11720,11724,11728,11734,11739,11743,11748,11771,11775,11800,11804,11837,11842,11871,11876,11891,11917,11937,11942,11947,11951,11955,11960,11982,11986,12010,12014,12076,12080,12084,12092,12096,12101,12112,12116,12132,12148,12164,12180,12196,12200,12220,12242,12247,12260,12267,12272,12278,12283,12296,12302],{"__ignoreMap":29},[34,11692,11693,11695],{"class":36,"line":37},[34,11694,3603],{"class":55},[34,11696,3606],{"class":504},[34,11698,11699,11701,11703,11705],{"class":36,"line":165},[34,11700,3611],{"class":55},[34,11702,3614],{"class":55},[34,11704,3618],{"class":3617},[34,11706,2952],{"class":40},[34,11708,11709,11711],{"class":36,"line":171},[34,11710,3603],{"class":55},[34,11712,9399],{"class":504},[34,11714,11715,11717],{"class":36,"line":182},[34,11716,9409],{"class":55},[34,11718,11719],{"class":3617}," Sanguo\n",[34,11721,11722],{"class":36,"line":188},[34,11723,3204],{"class":40},[34,11725,11726],{"class":36,"line":518},[34,11727,9435],{"class":40},[34,11729,11730,11732],{"class":36,"line":524},[34,11731,3639],{"class":55},[34,11733,9447],{"class":40},[34,11735,11736],{"class":36,"line":530},[34,11737,11738],{"class":40},"    string gender;\n",[34,11740,11741],{"class":36,"line":624},[34,11742,5648],{"class":40},[34,11744,11745],{"class":36,"line":630},[34,11746,11747],{"class":161},"\u002F\u002F定义排序函数\n",[34,11749,11750,11752,11754,11756,11759,11761,11763,11765,11767,11769],{"class":36,"line":636},[34,11751,7014],{"class":55},[34,11753,8966],{"class":3617},[34,11755,286],{"class":40},[34,11757,11758],{"class":3617},"Sanguo",[34,11760,8168],{"class":55},[34,11762,2490],{"class":51},[34,11764,291],{"class":40},[34,11766,571],{"class":55},[34,11768,8981],{"class":51},[34,11770,101],{"class":40},[34,11772,11773],{"class":36,"line":1513},[34,11774,3204],{"class":40},[34,11776,11777,11779,11781,11783,11785,11787,11789,11791,11793,11796,11798],{"class":36,"line":1519},[34,11778,4854],{"class":55},[34,11780,286],{"class":40},[34,11782,571],{"class":55},[34,11784,4685],{"class":40},[34,11786,221],{"class":55},[34,11788,177],{"class":44},[34,11790,4692],{"class":40},[34,11792,2701],{"class":55},[34,11794,11795],{"class":40},"len;i",[34,11797,3946],{"class":55},[34,11799,101],{"class":40},[34,11801,11802],{"class":36,"line":3283},[34,11803,3684],{"class":40},[34,11805,11806,11809,11811,11813,11815,11817,11819,11821,11823,11825,11827,11829,11831,11833,11835],{"class":36,"line":3297},[34,11807,11808],{"class":55},"     for",[34,11810,3313],{"class":40},[34,11812,571],{"class":55},[34,11814,5063],{"class":40},[34,11816,221],{"class":55},[34,11818,177],{"class":44},[34,11820,5070],{"class":40},[34,11822,2701],{"class":55},[34,11824,9008],{"class":40},[34,11826,2327],{"class":55},[34,11828,394],{"class":44},[34,11830,2327],{"class":55},[34,11832,5203],{"class":40},[34,11834,3946],{"class":55},[34,11836,101],{"class":40},[34,11838,11839],{"class":36,"line":3302},[34,11840,11841],{"class":40},"     {\n",[34,11843,11844,11847,11850,11852,11855,11857,11860,11862,11864,11866,11868],{"class":36,"line":3308},[34,11845,11846],{"class":55},"         if",[34,11848,11849],{"class":40}," ((s",[34,11851,2277],{"class":55},[34,11853,11854],{"class":40},"j)->age ",[34,11856,2751],{"class":55},[34,11858,11859],{"class":40}," (s",[34,11861,2277],{"class":55},[34,11863,2264],{"class":40},[34,11865,2277],{"class":55},[34,11867,394],{"class":44},[34,11869,11870],{"class":40},")->age)\n",[34,11872,11873],{"class":36,"line":3328},[34,11874,11875],{"class":40},"         {\n",[34,11877,11878,11881,11883,11886,11888],{"class":36,"line":3333},[34,11879,11880],{"class":40},"             Sanguo temp",[34,11882,8803],{"class":55},[34,11884,11885],{"class":40},"(s",[34,11887,2277],{"class":55},[34,11889,11890],{"class":40},"j);\n",[34,11892,11893,11896,11898,11900,11903,11905,11907,11909,11911,11913,11915],{"class":36,"line":3347},[34,11894,11895],{"class":55},"             *",[34,11897,11885],{"class":40},[34,11899,2277],{"class":55},[34,11901,11902],{"class":40},"j)",[34,11904,8803],{"class":55},[34,11906,11885],{"class":40},[34,11908,2277],{"class":55},[34,11910,2264],{"class":40},[34,11912,2277],{"class":55},[34,11914,394],{"class":44},[34,11916,4372],{"class":40},[34,11918,11919,11921,11923,11925,11927,11929,11931,11933,11935],{"class":36,"line":3352},[34,11920,11895],{"class":55},[34,11922,11885],{"class":40},[34,11924,2277],{"class":55},[34,11926,2264],{"class":40},[34,11928,2277],{"class":55},[34,11930,394],{"class":44},[34,11932,918],{"class":40},[34,11934,221],{"class":55},[34,11936,5932],{"class":40},[34,11938,11939],{"class":36,"line":3381},[34,11940,11941],{"class":40},"         }\n",[34,11943,11944],{"class":36,"line":3386},[34,11945,11946],{"class":40},"     }\n",[34,11948,11949],{"class":36,"line":3403},[34,11950,3841],{"class":40},[34,11952,11953],{"class":36,"line":3408},[34,11954,3223],{"class":40},[34,11956,11957],{"class":36,"line":3413},[34,11958,11959],{"class":161},"\u002F\u002F定义打印函数\n",[34,11961,11962,11964,11966,11968,11970,11972,11974,11976,11978,11980],{"class":36,"line":3418},[34,11963,7014],{"class":55},[34,11965,11265],{"class":3617},[34,11967,286],{"class":40},[34,11969,11758],{"class":3617},[34,11971,8168],{"class":55},[34,11973,2490],{"class":51},[34,11975,291],{"class":40},[34,11977,571],{"class":55},[34,11979,8981],{"class":51},[34,11981,101],{"class":40},[34,11983,11984],{"class":36,"line":3432},[34,11985,3204],{"class":40},[34,11987,11988,11990,11992,11994,11996,11998,12000,12002,12004,12006,12008],{"class":36,"line":3437},[34,11989,4854],{"class":55},[34,11991,3313],{"class":40},[34,11993,571],{"class":55},[34,11995,4685],{"class":40},[34,11997,221],{"class":55},[34,11999,177],{"class":44},[34,12001,4692],{"class":40},[34,12003,2701],{"class":55},[34,12005,11795],{"class":40},[34,12007,3946],{"class":55},[34,12009,101],{"class":40},[34,12011,12012],{"class":36,"line":4230},[34,12013,3684],{"class":40},[34,12015,12016,12018,12020,12022,12024,12027,12029,12031,12033,12036,12038,12040,12042,12045,12047,12049,12051,12054,12056,12058,12060,12063,12065,12067,12069,12072,12074],{"class":36,"line":4244},[34,12017,5104],{"class":40},[34,12019,2835],{"class":55},[34,12021,2058],{"class":504},[34,12023,2892],{"class":44},[34,12025,12026],{"class":504},"姓名：\"",[34,12028,2835],{"class":55},[34,12030,11885],{"class":40},[34,12032,2277],{"class":55},[34,12034,12035],{"class":40},"i)->name",[34,12037,2835],{"class":55},[34,12039,2058],{"class":504},[34,12041,2892],{"class":44},[34,12043,12044],{"class":504},"年龄：\"",[34,12046,2835],{"class":55},[34,12048,11885],{"class":40},[34,12050,2277],{"class":55},[34,12052,12053],{"class":40},"i)->age",[34,12055,2835],{"class":55},[34,12057,2058],{"class":504},[34,12059,2892],{"class":44},[34,12061,12062],{"class":504},"性别：\"",[34,12064,2835],{"class":55},[34,12066,11885],{"class":40},[34,12068,2277],{"class":55},[34,12070,12071],{"class":40},"i)->gender",[34,12073,2835],{"class":55},[34,12075,2857],{"class":40},[34,12077,12078],{"class":36,"line":4252},[34,12079,3841],{"class":40},[34,12081,12082],{"class":36,"line":4257},[34,12083,3223],{"class":40},[34,12085,12086,12088,12090],{"class":36,"line":4263},[34,12087,571],{"class":55},[34,12089,3627],{"class":3617},[34,12091,3630],{"class":40},[34,12093,12094],{"class":36,"line":4269},[34,12095,3204],{"class":40},[34,12097,12098],{"class":36,"line":4274},[34,12099,12100],{"class":161},"    \u002F\u002F定义结构体变量\n",[34,12102,12103,12106,12108,12110],{"class":36,"line":9598},[34,12104,12105],{"class":40},"    Sanguo s1[",[34,12107,224],{"class":44},[34,12109,2731],{"class":40},[34,12111,6559],{"class":55},[34,12113,12114],{"class":36,"line":9622},[34,12115,3684],{"class":40},[34,12117,12118,12120,12122,12124,12126,12128,12130],{"class":36,"line":9627},[34,12119,6568],{"class":40},[34,12121,11602],{"class":504},[34,12123,291],{"class":40},[34,12125,2568],{"class":44},[34,12127,291],{"class":40},[34,12129,11611],{"class":504},[34,12131,6581],{"class":40},[34,12133,12134,12136,12138,12140,12142,12144,12146],{"class":36,"line":9633},[34,12135,6568],{"class":40},[34,12137,11620],{"class":504},[34,12139,291],{"class":40},[34,12141,2543],{"class":44},[34,12143,291],{"class":40},[34,12145,11611],{"class":504},[34,12147,6581],{"class":40},[34,12149,12150,12152,12154,12156,12158,12160,12162],{"class":36,"line":9660},[34,12151,6568],{"class":40},[34,12153,11637],{"class":504},[34,12155,291],{"class":40},[34,12157,1249],{"class":44},[34,12159,291],{"class":40},[34,12161,11611],{"class":504},[34,12163,6581],{"class":40},[34,12165,12166,12168,12170,12172,12174,12176,12178],{"class":36,"line":9665},[34,12167,6568],{"class":40},[34,12169,11654],{"class":504},[34,12171,291],{"class":40},[34,12173,558],{"class":44},[34,12175,291],{"class":40},[34,12177,11611],{"class":504},[34,12179,6581],{"class":40},[34,12181,12182,12184,12186,12188,12190,12192,12194],{"class":36,"line":9671},[34,12183,6568],{"class":40},[34,12185,11671],{"class":504},[34,12187,291],{"class":40},[34,12189,2470],{"class":44},[34,12191,291],{"class":40},[34,12193,11680],{"class":504},[34,12195,6581],{"class":40},[34,12197,12198],{"class":36,"line":9683},[34,12199,6602],{"class":40},[34,12201,12202,12204,12206,12208,12211,12213,12216,12218],{"class":36,"line":9695},[34,12203,3639],{"class":55},[34,12205,8981],{"class":40},[34,12207,5855],{"class":55},[34,12209,12210],{"class":40},"(s1)",[34,12212,5861],{"class":55},[34,12214,12215],{"class":40},"(s1[",[34,12217,177],{"class":44},[34,12219,5509],{"class":40},[34,12221,12222,12225,12227,12230,12232,12235,12238,12240],{"class":36,"line":9707},[34,12223,12224],{"class":40},"    Sanguo ",[34,12226,2252],{"class":55},[34,12228,12229],{"class":40},"s ",[34,12231,221],{"class":55},[34,12233,12234],{"class":55}," &",[34,12236,12237],{"class":40},"s1[",[34,12239,177],{"class":44},[34,12241,6341],{"class":40},[34,12243,12244],{"class":36,"line":11366},[34,12245,12246],{"class":161},"    \u002F\u002F排序前：\n",[34,12248,12249,12251,12253,12256,12258],{"class":36,"line":11391},[34,12250,8179],{"class":40},[34,12252,2835],{"class":55},[34,12254,12255],{"class":504}," \"排序前：\"",[34,12257,3103],{"class":55},[34,12259,10490],{"class":40},[34,12261,12262,12264],{"class":36,"line":11414},[34,12263,11565],{"class":3617},[34,12265,12266],{"class":40},"(s,len);\n",[34,12268,12269],{"class":36,"line":11438},[34,12270,12271],{"class":161},"    \u002F\u002F调用排序函数\n",[34,12273,12274,12276],{"class":36,"line":11443},[34,12275,9248],{"class":3617},[34,12277,12266],{"class":40},[34,12279,12280],{"class":36,"line":11448},[34,12281,12282],{"class":161},"    \u002F\u002F排序后\n",[34,12284,12285,12287,12289,12292,12294],{"class":36,"line":11453},[34,12286,8179],{"class":40},[34,12288,2835],{"class":55},[34,12290,12291],{"class":504}," \"排序后：\"",[34,12293,3103],{"class":55},[34,12295,10490],{"class":40},[34,12297,12298,12300],{"class":36,"line":11462},[34,12299,11565],{"class":3617},[34,12301,12266],{"class":40},[34,12303,12304],{"class":36,"line":11467},[34,12305,3223],{"class":40},[103,12307,12308,12309,12311],{},"注意：使用指针时直接用传首地址**&s",[34,12310,177],{},"**",[1711,12313,12314],{},"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":29,"searchDepth":165,"depth":165,"links":12316},[12317,12318,12319,12320,12321,12322,12323],{"id":9353,"depth":165,"text":9354},{"id":9715,"depth":165,"text":9716},{"id":9984,"depth":165,"text":9985},{"id":10149,"depth":165,"text":10150},{"id":10365,"depth":165,"text":10366},{"id":10686,"depth":165,"text":10687},{"id":10914,"depth":165,"text":10915},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9342,"description":9350},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12330,"title":12331,"body":12332,"description":29,"extension":1745,"meta":13674,"navigation":1474,"path":13675,"seo":13676,"stem":13677,"__hash__":13678},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12333,"toc":13668},[12334,12337,12341,12347,12361,12366,12369,12373,12380,12386,12389,12396,12402,12407,12410,12413,12416,12980,12983,12997,13001,13006,13022,13162,13164,13170,13173,13178,13186,13294,13297,13302,13305,13310,13313,13319,13322,13665],[10,12335,12331],{"id":12336},"_5程序内存模型",[14,12338,12340],{"id":12339},"_51内存分区模型","5.1内存分区模型",[103,12342,12343,12344],{},"C++程序在执行时，将内存大方向划分为",[1165,12345,12346],{},"4个区域",[2798,12348,12349,12352,12355,12358],{},[1775,12350,12351],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[1775,12353,12354],{},"全局区：存放全局变量和静态变量以及常量",[1775,12356,12357],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[1775,12359,12360],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[103,12362,12363],{},[1165,12364,12365],{},"内存四区意义：",[103,12367,12368],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[19,12370,12372],{"id":12371},"_511程序运行前","5.1.1程序运行前",[103,12374,12375,12376,12379],{},"​\t在程序编译后，生成了exe可执行程序，",[1165,12377,12378],{},"未执行该程序前","分为两个区域",[103,12381,12382,12383],{},"​\t",[1165,12384,12385],{},"代码区：",[103,12387,12388],{},"​\t\t存放 CPU 执行的机器指令",[103,12390,12391,12392,12395],{},"​\t\t代码区是",[1165,12393,12394],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[103,12397,12391,12398,12401],{},[1165,12399,12400],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[103,12403,12382,12404],{},[1165,12405,12406],{},"全局区：",[103,12408,12409],{},"​\t\t全局变量和静态变量存放在此.",[103,12411,12412],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[103,12414,12415],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[24,12417,12419],{"className":1809,"code":12418,"language":1811,"meta":29,"style":29},"\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",[31,12420,12421,12426,12439,12452,12456,12461,12476,12491,12495,12504,12508,12513,12526,12539,12543,12548,12574,12600,12604,12631,12657,12661,12666,12682,12697,12701,12727,12753,12757,12782,12807,12811,12837,12863,12867,12883,12898,12924,12950,12954,12964,12968,12976],{"__ignoreMap":29},[34,12422,12423],{"class":36,"line":37},[34,12424,12425],{"class":161},"\u002F\u002F全局变量\n",[34,12427,12428,12430,12433,12435,12437],{"class":36,"line":165},[34,12429,571],{"class":55},[34,12431,12432],{"class":40}," g_a ",[34,12434,221],{"class":55},[34,12436,3692],{"class":44},[34,12438,2952],{"class":40},[34,12440,12441,12443,12446,12448,12450],{"class":36,"line":171},[34,12442,571],{"class":55},[34,12444,12445],{"class":40}," g_b ",[34,12447,221],{"class":55},[34,12449,3692],{"class":44},[34,12451,2952],{"class":40},[34,12453,12454],{"class":36,"line":182},[34,12455,1475],{"emptyLinePlaceholder":1474},[34,12457,12458],{"class":36,"line":188},[34,12459,12460],{"class":161},"\u002F\u002F全局常量\n",[34,12462,12463,12465,12467,12470,12472,12474],{"class":36,"line":518},[34,12464,8442],{"class":55},[34,12466,4036],{"class":55},[34,12468,12469],{"class":40}," c_g_a ",[34,12471,221],{"class":55},[34,12473,3692],{"class":44},[34,12475,2952],{"class":40},[34,12477,12478,12480,12482,12485,12487,12489],{"class":36,"line":524},[34,12479,8442],{"class":55},[34,12481,4036],{"class":55},[34,12483,12484],{"class":40}," c_g_b ",[34,12486,221],{"class":55},[34,12488,3692],{"class":44},[34,12490,2952],{"class":40},[34,12492,12493],{"class":36,"line":530},[34,12494,1475],{"emptyLinePlaceholder":1474},[34,12496,12497,12499,12501],{"class":36,"line":624},[34,12498,571],{"class":55},[34,12500,3627],{"class":3617},[34,12502,12503],{"class":40},"() {\n",[34,12505,12506],{"class":36,"line":630},[34,12507,1475],{"emptyLinePlaceholder":1474},[34,12509,12510],{"class":36,"line":636},[34,12511,12512],{"class":161},"    \u002F\u002F局部变量\n",[34,12514,12515,12517,12520,12522,12524],{"class":36,"line":1513},[34,12516,3639],{"class":55},[34,12518,12519],{"class":40}," a ",[34,12521,221],{"class":55},[34,12523,3692],{"class":44},[34,12525,2952],{"class":40},[34,12527,12528,12530,12533,12535,12537],{"class":36,"line":1519},[34,12529,3639],{"class":55},[34,12531,12532],{"class":40}," b ",[34,12534,221],{"class":55},[34,12536,3692],{"class":44},[34,12538,2952],{"class":40},[34,12540,12541],{"class":36,"line":3283},[34,12542,1475],{"emptyLinePlaceholder":1474},[34,12544,12545],{"class":36,"line":3297},[34,12546,12547],{"class":161},"    \u002F\u002F打印地址\n",[34,12549,12550,12552,12554,12557,12559,12561,12563,12565,12567,12570,12572],{"class":36,"line":3302},[34,12551,8179],{"class":40},[34,12553,2835],{"class":55},[34,12555,12556],{"class":504}," \"局部变量a地址为： \"",[34,12558,3103],{"class":55},[34,12560,3313],{"class":40},[34,12562,571],{"class":55},[34,12564,918],{"class":40},[34,12566,2155],{"class":55},[34,12568,12569],{"class":40},"a ",[34,12571,2835],{"class":55},[34,12573,10490],{"class":40},[34,12575,12576,12578,12580,12583,12585,12587,12589,12591,12593,12596,12598],{"class":36,"line":3308},[34,12577,8179],{"class":40},[34,12579,2835],{"class":55},[34,12581,12582],{"class":504}," \"局部变量b地址为： \"",[34,12584,3103],{"class":55},[34,12586,3313],{"class":40},[34,12588,571],{"class":55},[34,12590,918],{"class":40},[34,12592,2155],{"class":55},[34,12594,12595],{"class":40},"b ",[34,12597,2835],{"class":55},[34,12599,10490],{"class":40},[34,12601,12602],{"class":36,"line":3328},[34,12603,1475],{"emptyLinePlaceholder":1474},[34,12605,12606,12608,12610,12613,12615,12618,12620,12622,12624,12627,12629],{"class":36,"line":3333},[34,12607,8179],{"class":40},[34,12609,2835],{"class":55},[34,12611,12612],{"class":504}," \"全局变量g_a地址为： \"",[34,12614,3103],{"class":55},[34,12616,12617],{"class":40},"  (",[34,12619,571],{"class":55},[34,12621,918],{"class":40},[34,12623,2155],{"class":55},[34,12625,12626],{"class":40},"g_a ",[34,12628,2835],{"class":55},[34,12630,10490],{"class":40},[34,12632,12633,12635,12637,12640,12642,12644,12646,12648,12650,12653,12655],{"class":36,"line":3347},[34,12634,8179],{"class":40},[34,12636,2835],{"class":55},[34,12638,12639],{"class":504}," \"全局变量g_b地址为： \"",[34,12641,3103],{"class":55},[34,12643,12617],{"class":40},[34,12645,571],{"class":55},[34,12647,918],{"class":40},[34,12649,2155],{"class":55},[34,12651,12652],{"class":40},"g_b ",[34,12654,2835],{"class":55},[34,12656,10490],{"class":40},[34,12658,12659],{"class":36,"line":3352},[34,12660,1475],{"emptyLinePlaceholder":1474},[34,12662,12663],{"class":36,"line":3381},[34,12664,12665],{"class":161},"    \u002F\u002F静态变量\n",[34,12667,12668,12671,12673,12676,12678,12680],{"class":36,"line":3386},[34,12669,12670],{"class":55},"    static",[34,12672,4036],{"class":55},[34,12674,12675],{"class":40}," s_a ",[34,12677,221],{"class":55},[34,12679,3692],{"class":44},[34,12681,2952],{"class":40},[34,12683,12684,12686,12688,12691,12693,12695],{"class":36,"line":3403},[34,12685,12670],{"class":55},[34,12687,4036],{"class":55},[34,12689,12690],{"class":40}," s_b ",[34,12692,221],{"class":55},[34,12694,3692],{"class":44},[34,12696,2952],{"class":40},[34,12698,12699],{"class":36,"line":3408},[34,12700,1475],{"emptyLinePlaceholder":1474},[34,12702,12703,12705,12707,12710,12712,12714,12716,12718,12720,12723,12725],{"class":36,"line":3413},[34,12704,8179],{"class":40},[34,12706,2835],{"class":55},[34,12708,12709],{"class":504}," \"静态变量s_a地址为： \"",[34,12711,3103],{"class":55},[34,12713,3313],{"class":40},[34,12715,571],{"class":55},[34,12717,918],{"class":40},[34,12719,2155],{"class":55},[34,12721,12722],{"class":40},"s_a ",[34,12724,2835],{"class":55},[34,12726,10490],{"class":40},[34,12728,12729,12731,12733,12736,12738,12740,12742,12744,12746,12749,12751],{"class":36,"line":3418},[34,12730,8179],{"class":40},[34,12732,2835],{"class":55},[34,12734,12735],{"class":504}," \"静态变量s_b地址为： \"",[34,12737,3103],{"class":55},[34,12739,3313],{"class":40},[34,12741,571],{"class":55},[34,12743,918],{"class":40},[34,12745,2155],{"class":55},[34,12747,12748],{"class":40},"s_b ",[34,12750,2835],{"class":55},[34,12752,10490],{"class":40},[34,12754,12755],{"class":36,"line":3432},[34,12756,1475],{"emptyLinePlaceholder":1474},[34,12758,12759,12761,12763,12766,12768,12770,12772,12774,12776,12778,12780],{"class":36,"line":3437},[34,12760,8179],{"class":40},[34,12762,2835],{"class":55},[34,12764,12765],{"class":504}," \"字符串常量地址为： \"",[34,12767,3103],{"class":55},[34,12769,3313],{"class":40},[34,12771,571],{"class":55},[34,12773,918],{"class":40},[34,12775,2155],{"class":55},[34,12777,2852],{"class":504},[34,12779,3103],{"class":55},[34,12781,10490],{"class":40},[34,12783,12784,12786,12788,12790,12792,12794,12796,12798,12800,12803,12805],{"class":36,"line":4230},[34,12785,8179],{"class":40},[34,12787,2835],{"class":55},[34,12789,12765],{"class":504},[34,12791,3103],{"class":55},[34,12793,3313],{"class":40},[34,12795,571],{"class":55},[34,12797,918],{"class":40},[34,12799,2155],{"class":55},[34,12801,12802],{"class":504},"\"hello world1\"",[34,12804,3103],{"class":55},[34,12806,10490],{"class":40},[34,12808,12809],{"class":36,"line":4244},[34,12810,1475],{"emptyLinePlaceholder":1474},[34,12812,12813,12815,12817,12820,12822,12824,12826,12828,12830,12833,12835],{"class":36,"line":4252},[34,12814,8179],{"class":40},[34,12816,2835],{"class":55},[34,12818,12819],{"class":504}," \"全局常量c_g_a地址为： \"",[34,12821,3103],{"class":55},[34,12823,3313],{"class":40},[34,12825,571],{"class":55},[34,12827,918],{"class":40},[34,12829,2155],{"class":55},[34,12831,12832],{"class":40},"c_g_a ",[34,12834,2835],{"class":55},[34,12836,10490],{"class":40},[34,12838,12839,12841,12843,12846,12848,12850,12852,12854,12856,12859,12861],{"class":36,"line":4257},[34,12840,8179],{"class":40},[34,12842,2835],{"class":55},[34,12844,12845],{"class":504}," \"全局常量c_g_b地址为： \"",[34,12847,3103],{"class":55},[34,12849,3313],{"class":40},[34,12851,571],{"class":55},[34,12853,918],{"class":40},[34,12855,2155],{"class":55},[34,12857,12858],{"class":40},"c_g_b ",[34,12860,2835],{"class":55},[34,12862,10490],{"class":40},[34,12864,12865],{"class":36,"line":4263},[34,12866,1475],{"emptyLinePlaceholder":1474},[34,12868,12869,12872,12874,12877,12879,12881],{"class":36,"line":4269},[34,12870,12871],{"class":55},"    const",[34,12873,4036],{"class":55},[34,12875,12876],{"class":40}," c_l_a ",[34,12878,221],{"class":55},[34,12880,3692],{"class":44},[34,12882,2952],{"class":40},[34,12884,12885,12887,12889,12892,12894,12896],{"class":36,"line":4274},[34,12886,12871],{"class":55},[34,12888,4036],{"class":55},[34,12890,12891],{"class":40}," c_l_b ",[34,12893,221],{"class":55},[34,12895,3692],{"class":44},[34,12897,2952],{"class":40},[34,12899,12900,12902,12904,12907,12909,12911,12913,12915,12917,12920,12922],{"class":36,"line":9598},[34,12901,8179],{"class":40},[34,12903,2835],{"class":55},[34,12905,12906],{"class":504}," \"局部常量c_l_a地址为： \"",[34,12908,3103],{"class":55},[34,12910,3313],{"class":40},[34,12912,571],{"class":55},[34,12914,918],{"class":40},[34,12916,2155],{"class":55},[34,12918,12919],{"class":40},"c_l_a ",[34,12921,2835],{"class":55},[34,12923,10490],{"class":40},[34,12925,12926,12928,12930,12933,12935,12937,12939,12941,12943,12946,12948],{"class":36,"line":9622},[34,12927,8179],{"class":40},[34,12929,2835],{"class":55},[34,12931,12932],{"class":504}," \"局部常量c_l_b地址为： \"",[34,12934,3103],{"class":55},[34,12936,3313],{"class":40},[34,12938,571],{"class":55},[34,12940,918],{"class":40},[34,12942,2155],{"class":55},[34,12944,12945],{"class":40},"c_l_b ",[34,12947,2835],{"class":55},[34,12949,10490],{"class":40},[34,12951,12952],{"class":36,"line":9627},[34,12953,1475],{"emptyLinePlaceholder":1474},[34,12955,12956,12958,12960,12962],{"class":36,"line":9633},[34,12957,3957],{"class":3617},[34,12959,286],{"class":40},[34,12961,3962],{"class":504},[34,12963,4372],{"class":40},[34,12965,12966],{"class":36,"line":9660},[34,12967,1475],{"emptyLinePlaceholder":1474},[34,12969,12970,12972,12974],{"class":36,"line":9665},[34,12971,5743],{"class":55},[34,12973,98],{"class":44},[34,12975,2952],{"class":40},[34,12977,12978],{"class":36,"line":9671},[34,12979,3223],{"class":40},[103,12981,12982],{},"总结：",[2798,12984,12985,12988,12991,12994],{},[1775,12986,12987],{},"c++中程序运行前分为全局区和代码区",[1775,12989,12990],{},"代码区特点是共享和只读",[1775,12992,12993],{},"全局区中存放全局变量、静态变量、常量",[1775,12995,12996],{},"常量区中存放const修饰的全局常量和字符串常量",[19,12998,13000],{"id":12999},"_512程序运行后","5.1.2程序运行后",[1772,13002,13003],{},[1775,13004,13005],{},"栈区：",[2798,13007,13008,13015],{},[1775,13009,13010,13011,13014],{},"由编译器自动分配释放, 存放",[1165,13012,13013],{},"函数的参数值,局部变量","等",[1775,13016,13017,13018,13021],{},"注意事项：",[1165,13019,13020],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[24,13023,13025],{"className":1809,"code":13024,"language":1811,"meta":29,"style":29},"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",[31,13026,13027,13038,13042,13057,13069,13073,13077,13085,13090,13105,13123,13140,13150,13158],{"__ignoreMap":29},[34,13028,13029,13031,13033,13036],{"class":36,"line":37},[34,13030,571],{"class":55},[34,13032,8168],{"class":55},[34,13034,13035],{"class":3617}," func",[34,13037,3630],{"class":40},[34,13039,13040],{"class":36,"line":165},[34,13041,3204],{"class":40},[34,13043,13044,13046,13048,13050,13052,13054],{"class":36,"line":171},[34,13045,3639],{"class":55},[34,13047,12519],{"class":40},[34,13049,221],{"class":55},[34,13051,3692],{"class":44},[34,13053,1870],{"class":40},[34,13055,13056],{"class":161}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[34,13058,13059,13061,13063,13066],{"class":36,"line":182},[34,13060,5743],{"class":55},[34,13062,12234],{"class":55},[34,13064,13065],{"class":40},"a;",[34,13067,13068],{"class":161}," \u002F\u002F放回局部变量的地址\n",[34,13070,13071],{"class":36,"line":188},[34,13072,3223],{"class":40},[34,13074,13075],{"class":36,"line":518},[34,13076,1475],{"emptyLinePlaceholder":1474},[34,13078,13079,13081,13083],{"class":36,"line":524},[34,13080,571],{"class":55},[34,13082,3627],{"class":3617},[34,13084,12503],{"class":40},[34,13086,13087],{"class":36,"line":530},[34,13088,13089],{"class":161},"    \u002F\u002F接受func的返回值\n",[34,13091,13092,13094,13096,13099,13101,13103],{"class":36,"line":624},[34,13093,3639],{"class":55},[34,13095,8168],{"class":55},[34,13097,13098],{"class":40},"p ",[34,13100,221],{"class":55},[34,13102,13035],{"class":3617},[34,13104,7286],{"class":40},[34,13106,13107,13109,13111,13113,13115,13117,13120],{"class":36,"line":630},[34,13108,8179],{"class":40},[34,13110,2835],{"class":55},[34,13112,8168],{"class":55},[34,13114,13098],{"class":40},[34,13116,2835],{"class":55},[34,13118,13119],{"class":40}," endl;",[34,13121,13122],{"class":161}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[34,13124,13125,13127,13129,13131,13133,13135,13137],{"class":36,"line":636},[34,13126,8179],{"class":40},[34,13128,2835],{"class":55},[34,13130,8168],{"class":55},[34,13132,13098],{"class":40},[34,13134,2835],{"class":55},[34,13136,13119],{"class":40},[34,13138,13139],{"class":161}," \u002F\u002F第二次这个数据不再保留\n",[34,13141,13142,13144,13146,13148],{"class":36,"line":1513},[34,13143,3957],{"class":3617},[34,13145,286],{"class":40},[34,13147,3962],{"class":504},[34,13149,4372],{"class":40},[34,13151,13152,13154,13156],{"class":36,"line":1519},[34,13153,5743],{"class":55},[34,13155,98],{"class":44},[34,13157,2952],{"class":40},[34,13159,13160],{"class":36,"line":3283},[34,13161,3223],{"class":40},[103,13163,1090],{},[103,13165,13166],{},[109,13167],{"alt":13168,"src":13169},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[103,13171,13172],{},"总结：不要返回局部变量的地址",[1772,13174,13175],{"start":165},[1775,13176,13177],{},"堆区",[2798,13179,13180,13183],{},[1775,13181,13182],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[1775,13184,13185],{},"在c++中主要利用new在堆区开辟内存",[24,13187,13189],{"className":1809,"code":13188,"language":1811,"meta":29,"style":29},"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",[31,13190,13191,13206,13210,13215,13236,13243,13247,13255,13259,13264,13278,13290],{"__ignoreMap":29},[34,13192,13193,13195,13198,13201,13203],{"class":36,"line":37},[34,13194,571],{"class":55},[34,13196,13197],{"class":55},"  *",[34,13199,13200],{"class":3617},"func",[34,13202,4080],{"class":40},[34,13204,13205],{"class":161},"  \u002F\u002F函数返回指针\n",[34,13207,13208],{"class":36,"line":165},[34,13209,3204],{"class":40},[34,13211,13212],{"class":36,"line":171},[34,13213,13214],{"class":161},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[34,13216,13217,13219,13221,13223,13225,13228,13230,13232,13234],{"class":36,"line":182},[34,13218,5799],{"class":55},[34,13220,8168],{"class":55},[34,13222,103],{"class":40},[34,13224,221],{"class":55},[34,13226,13227],{"class":55}," new",[34,13229,4036],{"class":55},[34,13231,286],{"class":40},[34,13233,410],{"class":44},[34,13235,4372],{"class":40},[34,13237,13238,13240],{"class":36,"line":188},[34,13239,6033],{"class":55},[34,13241,13242],{"class":40}," p;\n",[34,13244,13245],{"class":36,"line":518},[34,13246,3223],{"class":40},[34,13248,13249,13251,13253],{"class":36,"line":524},[34,13250,571],{"class":55},[34,13252,3627],{"class":3617},[34,13254,3630],{"class":40},[34,13256,13257],{"class":36,"line":530},[34,13258,3204],{"class":40},[34,13260,13261],{"class":36,"line":624},[34,13262,13263],{"class":161},"    \u002F\u002F在堆区开辟数据\n",[34,13265,13266,13268,13270,13272,13274,13276],{"class":36,"line":630},[34,13267,3639],{"class":55},[34,13269,8168],{"class":55},[34,13271,103],{"class":40},[34,13273,221],{"class":55},[34,13275,13200],{"class":3617},[34,13277,7286],{"class":40},[34,13279,13280,13282,13284,13286,13288],{"class":36,"line":636},[34,13281,3209],{"class":40},[34,13283,8069],{"class":55},[34,13285,103],{"class":40},[34,13287,2835],{"class":55},[34,13289,2857],{"class":40},[34,13291,13292],{"class":36,"line":1513},[34,13293,3223],{"class":40},[103,13295,13296],{},"图片展示：",[103,13298,13299],{},[109,13300],{"alt":13168,"src":13301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[103,13303,13304],{},"堆区内存由程序员管生死！！！",[1772,13306,13307],{"start":171},[1775,13308,13309],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[103,13311,13312],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[103,13314,13315,13316],{},"​语法：",[31,13317,13318],{}," new 数据类型",[103,13320,13321],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[24,13323,13325],{"className":1809,"code":13324,"language":1811,"meta":29,"style":29},"\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",[31,13326,13327,13332,13342,13346,13351,13356,13378,13382,13390,13394,13408,13420,13432,13444,13449,13454,13465,13469,13474,13482,13486,13491,13513,13539,13543,13561,13565,13591,13595,13607,13611,13616,13621,13629,13633,13637,13645,13649,13655,13661],{"__ignoreMap":29},[34,13328,13329],{"class":36,"line":37},[34,13330,13331],{"class":161},"\u002F\u002F1.new的基本语法\n",[34,13333,13334,13336,13338,13340],{"class":36,"line":165},[34,13335,571],{"class":55},[34,13337,8168],{"class":55},[34,13339,13200],{"class":3617},[34,13341,3630],{"class":40},[34,13343,13344],{"class":36,"line":171},[34,13345,3204],{"class":40},[34,13347,13348],{"class":36,"line":182},[34,13349,13350],{"class":161},"    \u002F\u002F在堆区创建整型数据\n",[34,13352,13353],{"class":36,"line":188},[34,13354,13355],{"class":161},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[34,13357,13358,13360,13362,13364,13367,13369,13371,13373,13375],{"class":36,"line":518},[34,13359,3639],{"class":55},[34,13361,8168],{"class":55},[34,13363,103],{"class":40},[34,13365,13366],{"class":55},"=new",[34,13368,4036],{"class":55},[34,13370,286],{"class":40},[34,13372,410],{"class":44},[34,13374,7616],{"class":40},[34,13376,13377],{"class":161},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[34,13379,13380],{"class":36,"line":524},[34,13381,3223],{"class":40},[34,13383,13384,13386,13388],{"class":36,"line":530},[34,13385,7014],{"class":55},[34,13387,7238],{"class":3617},[34,13389,3630],{"class":40},[34,13391,13392],{"class":36,"line":624},[34,13393,3204],{"class":40},[34,13395,13396,13398,13400,13402,13404,13406],{"class":36,"line":630},[34,13397,3639],{"class":55},[34,13399,8168],{"class":55},[34,13401,103],{"class":40},[34,13403,221],{"class":55},[34,13405,13200],{"class":3617},[34,13407,7286],{"class":40},[34,13409,13410,13412,13414,13416,13418],{"class":36,"line":636},[34,13411,3209],{"class":40},[34,13413,8069],{"class":55},[34,13415,103],{"class":40},[34,13417,2835],{"class":55},[34,13419,2857],{"class":40},[34,13421,13422,13424,13426,13428,13430],{"class":36,"line":1513},[34,13423,3209],{"class":40},[34,13425,8069],{"class":55},[34,13427,103],{"class":40},[34,13429,2835],{"class":55},[34,13431,2857],{"class":40},[34,13433,13434,13436,13438,13440,13442],{"class":36,"line":1519},[34,13435,3209],{"class":40},[34,13437,8069],{"class":55},[34,13439,103],{"class":40},[34,13441,2835],{"class":55},[34,13443,2857],{"class":40},[34,13445,13446],{"class":36,"line":3283},[34,13447,13448],{"class":161},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[34,13450,13451],{"class":36,"line":3297},[34,13452,13453],{"class":161},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[34,13455,13456,13459,13462],{"class":36,"line":3302},[34,13457,13458],{"class":55},"    delete",[34,13460,13461],{"class":40}," p;",[34,13463,13464],{"class":161},"\u002F\u002F删除这块地址\n",[34,13466,13467],{"class":36,"line":3308},[34,13468,3223],{"class":40},[34,13470,13471],{"class":36,"line":3328},[34,13472,13473],{"class":161},"\u002F\u002F2.在堆区利用new开辟数组\n",[34,13475,13476,13478,13480],{"class":36,"line":3333},[34,13477,7014],{"class":55},[34,13479,7307],{"class":3617},[34,13481,3630],{"class":40},[34,13483,13484],{"class":36,"line":3347},[34,13485,3204],{"class":40},[34,13487,13488],{"class":36,"line":3352},[34,13489,13490],{"class":161},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[34,13492,13493,13495,13497,13499,13501,13503,13505,13507,13510],{"class":36,"line":3381},[34,13494,3639],{"class":55},[34,13496,8168],{"class":55},[34,13498,5533],{"class":40},[34,13500,13366],{"class":55},[34,13502,4036],{"class":55},[34,13504,2681],{"class":40},[34,13506,410],{"class":44},[34,13508,13509],{"class":40},"];",[34,13511,13512],{"class":161},"\u002F\u002F10代表数组有10个元素\n",[34,13514,13515,13517,13519,13521,13523,13525,13527,13529,13531,13533,13535,13537],{"class":36,"line":3386},[34,13516,4854],{"class":55},[34,13518,3313],{"class":40},[34,13520,571],{"class":55},[34,13522,4685],{"class":40},[34,13524,221],{"class":55},[34,13526,177],{"class":44},[34,13528,4692],{"class":40},[34,13530,2701],{"class":55},[34,13532,410],{"class":44},[34,13534,4692],{"class":40},[34,13536,3946],{"class":55},[34,13538,101],{"class":40},[34,13540,13541],{"class":36,"line":3403},[34,13542,3684],{"class":40},[34,13544,13545,13548,13550,13552,13554,13556,13558],{"class":36,"line":3408},[34,13546,13547],{"class":40},"        arr[i]",[34,13549,221],{"class":55},[34,13551,2239],{"class":40},[34,13553,2277],{"class":55},[34,13555,451],{"class":44},[34,13557,1870],{"class":40},[34,13559,13560],{"class":161},"\u002F\u002F给10个元素赋值100～109\n",[34,13562,13563],{"class":36,"line":3413},[34,13564,3841],{"class":40},[34,13566,13567,13569,13571,13573,13575,13577,13579,13581,13583,13585,13587,13589],{"class":36,"line":3418},[34,13568,4854],{"class":55},[34,13570,3313],{"class":40},[34,13572,571],{"class":55},[34,13574,4685],{"class":40},[34,13576,221],{"class":55},[34,13578,177],{"class":44},[34,13580,4692],{"class":40},[34,13582,2701],{"class":55},[34,13584,410],{"class":44},[34,13586,4692],{"class":40},[34,13588,3946],{"class":55},[34,13590,101],{"class":40},[34,13592,13593],{"class":36,"line":3432},[34,13594,3684],{"class":40},[34,13596,13597,13599,13601,13603,13605],{"class":36,"line":3437},[34,13598,5104],{"class":40},[34,13600,2835],{"class":55},[34,13602,6006],{"class":40},[34,13604,2835],{"class":55},[34,13606,2857],{"class":40},[34,13608,13609],{"class":36,"line":4230},[34,13610,3841],{"class":40},[34,13612,13613],{"class":36,"line":4244},[34,13614,13615],{"class":161},"    \u002F\u002F释放堆区数组\n",[34,13617,13618],{"class":36,"line":4252},[34,13619,13620],{"class":161},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[34,13622,13623,13626],{"class":36,"line":4257},[34,13624,13625],{"class":55},"    delete[]",[34,13627,13628],{"class":40}," arr;\n",[34,13630,13631],{"class":36,"line":4263},[34,13632,3223],{"class":40},[34,13634,13635],{"class":36,"line":4269},[34,13636,1475],{"emptyLinePlaceholder":1474},[34,13638,13639,13641,13643],{"class":36,"line":4274},[34,13640,571],{"class":55},[34,13642,3627],{"class":3617},[34,13644,3630],{"class":40},[34,13646,13647],{"class":36,"line":9598},[34,13648,3204],{"class":40},[34,13650,13651,13653],{"class":36,"line":9622},[34,13652,7283],{"class":3617},[34,13654,7286],{"class":40},[34,13656,13657,13659],{"class":36,"line":9627},[34,13658,7352],{"class":3617},[34,13660,7286],{"class":40},[34,13662,13663],{"class":36,"line":9633},[34,13664,3223],{"class":40},[1711,13666,13667],{},"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":29,"searchDepth":165,"depth":165,"links":13669},[13670],{"id":12339,"depth":165,"text":12340,"children":13671},[13672,13673],{"id":12371,"depth":171,"text":12372},{"id":12999,"depth":171,"text":13000},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12331,"description":29},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13680,"title":13681,"body":13682,"description":29,"extension":1745,"meta":15162,"navigation":1474,"path":15163,"seo":15164,"stem":15165,"__hash__":15166},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13683,"toc":15154},[13684,13687,13691,13694,13697,13866,13870,13875,13892,13897,14049,14053,14056,14059,14452,14456,14459,14464,14467,14779,14783,14789,14949,14951,14959,14963,14966,14973,15151],[10,13685,13681],{"id":13686},"_6引用",[14,13688,13690],{"id":13689},"_61引用基本用法","6.1引用基本用法",[103,13692,13693],{},"引用的本质：给变量起别名",[103,13695,13696],{},"语法：数据类型 &别名=原名",[24,13698,13700],{"className":1809,"code":13699,"language":1811,"meta":29,"style":29},"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",[31,13701,13702,13710,13714,13726,13738,13742,13761,13780,13784,13795,13799,13818,13836,13840,13850,13854,13862],{"__ignoreMap":29},[34,13703,13704,13706,13708],{"class":36,"line":37},[34,13705,571],{"class":55},[34,13707,3627],{"class":3617},[34,13709,12503],{"class":40},[34,13711,13712],{"class":36,"line":165},[34,13713,1475],{"emptyLinePlaceholder":1474},[34,13715,13716,13718,13720,13722,13724],{"class":36,"line":171},[34,13717,3639],{"class":55},[34,13719,12519],{"class":40},[34,13721,221],{"class":55},[34,13723,3692],{"class":44},[34,13725,2952],{"class":40},[34,13727,13728,13730,13732,13734,13736],{"class":36,"line":182},[34,13729,3639],{"class":55},[34,13731,12234],{"class":55},[34,13733,12595],{"class":40},[34,13735,221],{"class":55},[34,13737,3091],{"class":40},[34,13739,13740],{"class":36,"line":188},[34,13741,1475],{"emptyLinePlaceholder":1474},[34,13743,13744,13746,13748,13751,13753,13755,13757,13759],{"class":36,"line":518},[34,13745,8179],{"class":40},[34,13747,2835],{"class":55},[34,13749,13750],{"class":504}," \"a = \"",[34,13752,3103],{"class":55},[34,13754,12519],{"class":40},[34,13756,2835],{"class":55},[34,13758,13119],{"class":40},[34,13760,8918],{"class":161},[34,13762,13763,13765,13767,13770,13772,13774,13776,13778],{"class":36,"line":524},[34,13764,8179],{"class":40},[34,13766,2835],{"class":55},[34,13768,13769],{"class":504}," \"b = \"",[34,13771,3103],{"class":55},[34,13773,12532],{"class":40},[34,13775,2835],{"class":55},[34,13777,13119],{"class":40},[34,13779,8918],{"class":161},[34,13781,13782],{"class":36,"line":530},[34,13783,1475],{"emptyLinePlaceholder":1474},[34,13785,13786,13789,13791,13793],{"class":36,"line":624},[34,13787,13788],{"class":40},"    b ",[34,13790,221],{"class":55},[34,13792,7404],{"class":44},[34,13794,2952],{"class":40},[34,13796,13797],{"class":36,"line":630},[34,13798,1475],{"emptyLinePlaceholder":1474},[34,13800,13801,13803,13805,13807,13809,13811,13813,13815],{"class":36,"line":636},[34,13802,8179],{"class":40},[34,13804,2835],{"class":55},[34,13806,13750],{"class":504},[34,13808,3103],{"class":55},[34,13810,12519],{"class":40},[34,13812,2835],{"class":55},[34,13814,13119],{"class":40},[34,13816,13817],{"class":161},"\u002F\u002F100\n",[34,13819,13820,13822,13824,13826,13828,13830,13832,13834],{"class":36,"line":1513},[34,13821,8179],{"class":40},[34,13823,2835],{"class":55},[34,13825,13769],{"class":504},[34,13827,3103],{"class":55},[34,13829,12532],{"class":40},[34,13831,2835],{"class":55},[34,13833,13119],{"class":40},[34,13835,13817],{"class":161},[34,13837,13838],{"class":36,"line":1519},[34,13839,1475],{"emptyLinePlaceholder":1474},[34,13841,13842,13844,13846,13848],{"class":36,"line":3283},[34,13843,3957],{"class":3617},[34,13845,286],{"class":40},[34,13847,3962],{"class":504},[34,13849,4372],{"class":40},[34,13851,13852],{"class":36,"line":3297},[34,13853,1475],{"emptyLinePlaceholder":1474},[34,13855,13856,13858,13860],{"class":36,"line":3302},[34,13857,5743],{"class":55},[34,13859,98],{"class":44},[34,13861,2952],{"class":40},[34,13863,13864],{"class":36,"line":3308},[34,13865,3223],{"class":40},[14,13867,13869],{"id":13868},"_62引用的注意事项","6.2引用的注意事项",[1772,13871,13872],{},[1775,13873,13874],{},"引用必须要初始化",[24,13876,13878],{"className":1809,"code":13877,"language":1811,"meta":29,"style":29},"int &b;\u002F\u002F非常错误！\n",[31,13879,13880],{"__ignoreMap":29},[34,13881,13882,13884,13886,13889],{"class":36,"line":37},[34,13883,571],{"class":55},[34,13885,12234],{"class":55},[34,13887,13888],{"class":40},"b;",[34,13890,13891],{"class":161},"\u002F\u002F非常错误！\n",[1772,13893,13894],{"start":165},[1775,13895,13896],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[24,13898,13900],{"className":1809,"code":13899,"language":1811,"meta":29,"style":29},"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",[31,13901,13902,13910,13922,13934,13942,13958,13971,13989,14007,14027,14037,14045],{"__ignoreMap":29},[34,13903,13904,13906,13908],{"class":36,"line":37},[34,13905,571],{"class":55},[34,13907,3627],{"class":3617},[34,13909,12503],{"class":40},[34,13911,13912,13914,13916,13918,13920],{"class":36,"line":165},[34,13913,3639],{"class":55},[34,13915,12519],{"class":40},[34,13917,221],{"class":55},[34,13919,3692],{"class":44},[34,13921,2952],{"class":40},[34,13923,13924,13926,13928,13930,13932],{"class":36,"line":171},[34,13925,3639],{"class":55},[34,13927,12532],{"class":40},[34,13929,221],{"class":55},[34,13931,10600],{"class":44},[34,13933,2952],{"class":40},[34,13935,13936,13939],{"class":36,"line":182},[34,13937,13938],{"class":161},"    \u002F\u002Fint &c;",[34,13940,13941],{"class":161}," \u002F\u002F错误，引用必须初始化\n",[34,13943,13944,13946,13948,13950,13952,13955],{"class":36,"line":188},[34,13945,3639],{"class":55},[34,13947,12234],{"class":55},[34,13949,4599],{"class":40},[34,13951,221],{"class":55},[34,13953,13954],{"class":40}," a;",[34,13956,13957],{"class":161}," \u002F\u002F一旦初始化后，就不可以更改\n",[34,13959,13960,13963,13965,13968],{"class":36,"line":518},[34,13961,13962],{"class":40},"    c ",[34,13964,221],{"class":55},[34,13966,13967],{"class":40}," b;",[34,13969,13970],{"class":161}," \u002F\u002F这是赋值操作，不是更改引用\n",[34,13972,13973,13975,13977,13979,13981,13983,13985,13987],{"class":36,"line":524},[34,13974,8179],{"class":40},[34,13976,2835],{"class":55},[34,13978,13750],{"class":504},[34,13980,3103],{"class":55},[34,13982,12519],{"class":40},[34,13984,2835],{"class":55},[34,13986,13119],{"class":40},[34,13988,8903],{"class":161},[34,13990,13991,13993,13995,13997,13999,14001,14003,14005],{"class":36,"line":530},[34,13992,8179],{"class":40},[34,13994,2835],{"class":55},[34,13996,13769],{"class":504},[34,13998,3103],{"class":55},[34,14000,12532],{"class":40},[34,14002,2835],{"class":55},[34,14004,13119],{"class":40},[34,14006,8903],{"class":161},[34,14008,14009,14011,14013,14016,14018,14021,14023,14025],{"class":36,"line":624},[34,14010,8179],{"class":40},[34,14012,2835],{"class":55},[34,14014,14015],{"class":504}," \"c = \"",[34,14017,3103],{"class":55},[34,14019,14020],{"class":40}," c ",[34,14022,2835],{"class":55},[34,14024,13119],{"class":40},[34,14026,8903],{"class":161},[34,14028,14029,14031,14033,14035],{"class":36,"line":630},[34,14030,3957],{"class":3617},[34,14032,286],{"class":40},[34,14034,3962],{"class":504},[34,14036,4372],{"class":40},[34,14038,14039,14041,14043],{"class":36,"line":636},[34,14040,5743],{"class":55},[34,14042,98],{"class":44},[34,14044,2952],{"class":40},[34,14046,14047],{"class":36,"line":1513},[34,14048,3223],{"class":40},[14,14050,14052],{"id":14051},"_63引用做函数参数","6.3引用做函数参数",[103,14054,14055],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[103,14057,14058],{},"优点：可以简化指针修改实参",[24,14060,14062],{"className":1809,"code":14061,"language":1811,"meta":29,"style":29},"\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",[31,14063,14064,14069,14091,14102,14112,14121,14125,14129,14134,14156,14168,14180,14190,14194,14198,14203,14225,14235,14243,14251,14255,14259,14267,14271,14283,14295,14299,14310,14336,14340,14360,14384,14388,14398,14422,14426,14436,14440,14448],{"__ignoreMap":29},[34,14065,14066],{"class":36,"line":37},[34,14067,14068],{"class":161},"\u002F\u002F1. 值传递\n",[34,14070,14071,14073,14076,14078,14080,14082,14084,14086,14088],{"class":36,"line":165},[34,14072,7014],{"class":55},[34,14074,14075],{"class":3617}," mySwap01",[34,14077,286],{"class":40},[34,14079,571],{"class":55},[34,14081,3057],{"class":51},[34,14083,48],{"class":40},[34,14085,571],{"class":55},[34,14087,4486],{"class":51},[34,14089,14090],{"class":40},") {\n",[34,14092,14093,14095,14098,14100],{"class":36,"line":171},[34,14094,3639],{"class":55},[34,14096,14097],{"class":40}," temp ",[34,14099,221],{"class":55},[34,14101,3091],{"class":40},[34,14103,14104,14107,14109],{"class":36,"line":182},[34,14105,14106],{"class":40},"    a ",[34,14108,221],{"class":55},[34,14110,14111],{"class":40}," b;\n",[34,14113,14114,14116,14118],{"class":36,"line":188},[34,14115,13788],{"class":40},[34,14117,221],{"class":55},[34,14119,14120],{"class":40}," temp;\n",[34,14122,14123],{"class":36,"line":518},[34,14124,3223],{"class":40},[34,14126,14127],{"class":36,"line":524},[34,14128,1475],{"emptyLinePlaceholder":1474},[34,14130,14131],{"class":36,"line":530},[34,14132,14133],{"class":161},"\u002F\u002F2. 地址传递\n",[34,14135,14136,14138,14141,14143,14146,14148,14150,14152,14154],{"class":36,"line":624},[34,14137,7014],{"class":55},[34,14139,14140],{"class":3617}," mySwap02",[34,14142,286],{"class":40},[34,14144,14145],{"class":55},"int*",[34,14147,3057],{"class":51},[34,14149,48],{"class":40},[34,14151,14145],{"class":55},[34,14153,4486],{"class":51},[34,14155,14090],{"class":40},[34,14157,14158,14160,14162,14164,14166],{"class":36,"line":630},[34,14159,3639],{"class":55},[34,14161,14097],{"class":40},[34,14163,221],{"class":55},[34,14165,8168],{"class":55},[34,14167,7847],{"class":40},[34,14169,14170,14172,14174,14176,14178],{"class":36,"line":636},[34,14171,8053],{"class":55},[34,14173,12569],{"class":40},[34,14175,221],{"class":55},[34,14177,8168],{"class":55},[34,14179,7719],{"class":40},[34,14181,14182,14184,14186,14188],{"class":36,"line":1513},[34,14183,8053],{"class":55},[34,14185,12595],{"class":40},[34,14187,221],{"class":55},[34,14189,14120],{"class":40},[34,14191,14192],{"class":36,"line":1519},[34,14193,3223],{"class":40},[34,14195,14196],{"class":36,"line":3283},[34,14197,1475],{"emptyLinePlaceholder":1474},[34,14199,14200],{"class":36,"line":3297},[34,14201,14202],{"class":161},"\u002F\u002F3. 引用传递\n",[34,14204,14205,14207,14210,14212,14215,14217,14219,14221,14223],{"class":36,"line":3302},[34,14206,7014],{"class":55},[34,14208,14209],{"class":3617}," mySwap03",[34,14211,286],{"class":40},[34,14213,14214],{"class":55},"int&",[34,14216,3057],{"class":51},[34,14218,48],{"class":40},[34,14220,14214],{"class":55},[34,14222,4486],{"class":51},[34,14224,14090],{"class":40},[34,14226,14227,14229,14231,14233],{"class":36,"line":3308},[34,14228,3639],{"class":55},[34,14230,14097],{"class":40},[34,14232,221],{"class":55},[34,14234,3091],{"class":40},[34,14236,14237,14239,14241],{"class":36,"line":3328},[34,14238,14106],{"class":40},[34,14240,221],{"class":55},[34,14242,14111],{"class":40},[34,14244,14245,14247,14249],{"class":36,"line":3333},[34,14246,13788],{"class":40},[34,14248,221],{"class":55},[34,14250,14120],{"class":40},[34,14252,14253],{"class":36,"line":3347},[34,14254,3223],{"class":40},[34,14256,14257],{"class":36,"line":3352},[34,14258,1475],{"emptyLinePlaceholder":1474},[34,14260,14261,14263,14265],{"class":36,"line":3381},[34,14262,571],{"class":55},[34,14264,3627],{"class":3617},[34,14266,12503],{"class":40},[34,14268,14269],{"class":36,"line":3386},[34,14270,1475],{"emptyLinePlaceholder":1474},[34,14272,14273,14275,14277,14279,14281],{"class":36,"line":3403},[34,14274,3639],{"class":55},[34,14276,12519],{"class":40},[34,14278,221],{"class":55},[34,14280,3692],{"class":44},[34,14282,2952],{"class":40},[34,14284,14285,14287,14289,14291,14293],{"class":36,"line":3408},[34,14286,3639],{"class":55},[34,14288,12532],{"class":40},[34,14290,221],{"class":55},[34,14292,10600],{"class":44},[34,14294,2952],{"class":40},[34,14296,14297],{"class":36,"line":3413},[34,14298,1475],{"emptyLinePlaceholder":1474},[34,14300,14301,14304,14307],{"class":36,"line":3418},[34,14302,14303],{"class":3617},"    mySwap01",[34,14305,14306],{"class":40},"(a, b);",[34,14308,14309],{"class":161},"\u002F\u002F值传递，形参不会修饰实参\n",[34,14311,14312,14314,14316,14319,14321,14323,14325,14328,14330,14332,14334],{"class":36,"line":3432},[34,14313,8179],{"class":40},[34,14315,2835],{"class":55},[34,14317,14318],{"class":504}," \"a:\"",[34,14320,3103],{"class":55},[34,14322,12519],{"class":40},[34,14324,2835],{"class":55},[34,14326,14327],{"class":504}," \" b:\"",[34,14329,3103],{"class":55},[34,14331,12532],{"class":40},[34,14333,2835],{"class":55},[34,14335,10490],{"class":40},[34,14337,14338],{"class":36,"line":3437},[34,14339,1475],{"emptyLinePlaceholder":1474},[34,14341,14342,14345,14347,14349,14352,14354,14357],{"class":36,"line":4230},[34,14343,14344],{"class":3617},"    mySwap02",[34,14346,286],{"class":40},[34,14348,2155],{"class":55},[34,14350,14351],{"class":40},"a, ",[34,14353,2155],{"class":55},[34,14355,14356],{"class":40},"b);",[34,14358,14359],{"class":161},"\u002F\u002F地址传递，形参会修饰实参\n",[34,14361,14362,14364,14366,14368,14370,14372,14374,14376,14378,14380,14382],{"class":36,"line":4244},[34,14363,8179],{"class":40},[34,14365,2835],{"class":55},[34,14367,14318],{"class":504},[34,14369,3103],{"class":55},[34,14371,12519],{"class":40},[34,14373,2835],{"class":55},[34,14375,14327],{"class":504},[34,14377,3103],{"class":55},[34,14379,12532],{"class":40},[34,14381,2835],{"class":55},[34,14383,10490],{"class":40},[34,14385,14386],{"class":36,"line":4252},[34,14387,1475],{"emptyLinePlaceholder":1474},[34,14389,14390,14393,14395],{"class":36,"line":4257},[34,14391,14392],{"class":3617},"    mySwap03",[34,14394,14306],{"class":40},[34,14396,14397],{"class":161},"\u002F\u002F引用传递，形参会修饰实参\n",[34,14399,14400,14402,14404,14406,14408,14410,14412,14414,14416,14418,14420],{"class":36,"line":4263},[34,14401,8179],{"class":40},[34,14403,2835],{"class":55},[34,14405,14318],{"class":504},[34,14407,3103],{"class":55},[34,14409,12519],{"class":40},[34,14411,2835],{"class":55},[34,14413,14327],{"class":504},[34,14415,3103],{"class":55},[34,14417,12532],{"class":40},[34,14419,2835],{"class":55},[34,14421,10490],{"class":40},[34,14423,14424],{"class":36,"line":4269},[34,14425,1475],{"emptyLinePlaceholder":1474},[34,14427,14428,14430,14432,14434],{"class":36,"line":4274},[34,14429,3957],{"class":3617},[34,14431,286],{"class":40},[34,14433,3962],{"class":504},[34,14435,4372],{"class":40},[34,14437,14438],{"class":36,"line":9598},[34,14439,1475],{"emptyLinePlaceholder":1474},[34,14441,14442,14444,14446],{"class":36,"line":9622},[34,14443,5743],{"class":55},[34,14445,98],{"class":44},[34,14447,2952],{"class":40},[34,14449,14450],{"class":36,"line":9627},[34,14451,3223],{"class":40},[14,14453,14455],{"id":14454},"_64引用做函数的返回值","6.4引用做函数的返回值",[103,14457,14458],{},"作用：引用是可以作为函数的返回值存在的",[103,14460,10675,14461],{},[1165,14462,14463],{},"不要返回局部变量引用",[103,14465,14466],{},"用法：函数调用作为左值",[24,14468,14470],{"className":11591,"code":14469,"language":11593,"meta":29,"style":29},"\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",[31,14471,14472,14477,14485,14500,14506,14510,14514,14519,14527,14544,14550,14554,14558,14566,14570,14575,14589,14609,14628,14632,14637,14650,14670,14688,14692,14708,14712,14731,14749,14753,14763,14767,14775],{"__ignoreMap":29},[34,14473,14474],{"class":36,"line":37},[34,14475,14476],{"class":161},"\u002F\u002F返回局部变量引用\n",[34,14478,14479,14481,14483],{"class":36,"line":165},[34,14480,14214],{"class":55},[34,14482,7238],{"class":3617},[34,14484,12503],{"class":40},[34,14486,14487,14489,14491,14493,14495,14497],{"class":36,"line":171},[34,14488,3639],{"class":55},[34,14490,12519],{"class":40},[34,14492,221],{"class":55},[34,14494,3692],{"class":44},[34,14496,1870],{"class":40},[34,14498,14499],{"class":161}," \u002F\u002F局部变量\n",[34,14501,14502,14504],{"class":36,"line":182},[34,14503,5743],{"class":55},[34,14505,3091],{"class":40},[34,14507,14508],{"class":36,"line":188},[34,14509,3223],{"class":40},[34,14511,14512],{"class":36,"line":518},[34,14513,1475],{"emptyLinePlaceholder":1474},[34,14515,14516],{"class":36,"line":524},[34,14517,14518],{"class":161},"\u002F\u002F返回静态变量引用\n",[34,14520,14521,14523,14525],{"class":36,"line":530},[34,14522,14214],{"class":55},[34,14524,7307],{"class":3617},[34,14526,12503],{"class":40},[34,14528,14529,14531,14533,14535,14537,14539,14541],{"class":36,"line":624},[34,14530,12670],{"class":55},[34,14532,4036],{"class":55},[34,14534,12519],{"class":40},[34,14536,221],{"class":55},[34,14538,10600],{"class":44},[34,14540,1870],{"class":40},[34,14542,14543],{"class":161},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[34,14545,14546,14548],{"class":36,"line":630},[34,14547,5743],{"class":55},[34,14549,3091],{"class":40},[34,14551,14552],{"class":36,"line":636},[34,14553,3223],{"class":40},[34,14555,14556],{"class":36,"line":1513},[34,14557,1475],{"emptyLinePlaceholder":1474},[34,14559,14560,14562,14564],{"class":36,"line":1519},[34,14561,571],{"class":55},[34,14563,3627],{"class":3617},[34,14565,12503],{"class":40},[34,14567,14568],{"class":36,"line":3283},[34,14569,1475],{"emptyLinePlaceholder":1474},[34,14571,14572],{"class":36,"line":3297},[34,14573,14574],{"class":161},"    \u002F\u002F不能返回局部变量的引用\n",[34,14576,14577,14580,14583,14585,14587],{"class":36,"line":3302},[34,14578,14579],{"class":55},"    int&",[34,14581,14582],{"class":40}," ref ",[34,14584,221],{"class":55},[34,14586,7238],{"class":3617},[34,14588,7286],{"class":40},[34,14590,14591,14593,14595,14598,14600,14602,14604,14606],{"class":36,"line":3308},[34,14592,8179],{"class":40},[34,14594,2835],{"class":55},[34,14596,14597],{"class":504}," \"ref = \"",[34,14599,3103],{"class":55},[34,14601,14582],{"class":40},[34,14603,2835],{"class":55},[34,14605,13119],{"class":40},[34,14607,14608],{"class":161},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[34,14610,14611,14613,14615,14617,14619,14621,14623,14625],{"class":36,"line":3328},[34,14612,8179],{"class":40},[34,14614,2835],{"class":55},[34,14616,14597],{"class":504},[34,14618,3103],{"class":55},[34,14620,14582],{"class":40},[34,14622,2835],{"class":55},[34,14624,13119],{"class":40},[34,14626,14627],{"class":161},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[34,14629,14630],{"class":36,"line":3333},[34,14631,1475],{"emptyLinePlaceholder":1474},[34,14633,14634],{"class":36,"line":3347},[34,14635,14636],{"class":161},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[34,14638,14639,14641,14644,14646,14648],{"class":36,"line":3352},[34,14640,14579],{"class":55},[34,14642,14643],{"class":40}," ref2 ",[34,14645,221],{"class":55},[34,14647,7307],{"class":3617},[34,14649,7286],{"class":40},[34,14651,14652,14654,14656,14659,14661,14663,14665,14667],{"class":36,"line":3381},[34,14653,8179],{"class":40},[34,14655,2835],{"class":55},[34,14657,14658],{"class":504}," \"ref2 = \"",[34,14660,3103],{"class":55},[34,14662,14643],{"class":40},[34,14664,2835],{"class":55},[34,14666,13119],{"class":40},[34,14668,14669],{"class":161}," \u002F\u002F20\n",[34,14671,14672,14674,14676,14678,14680,14682,14684,14686],{"class":36,"line":3386},[34,14673,8179],{"class":40},[34,14675,2835],{"class":55},[34,14677,14658],{"class":504},[34,14679,3103],{"class":55},[34,14681,14643],{"class":40},[34,14683,2835],{"class":55},[34,14685,13119],{"class":40},[34,14687,14669],{"class":161},[34,14689,14690],{"class":36,"line":3403},[34,14691,1475],{"emptyLinePlaceholder":1474},[34,14693,14694,14696,14699,14701,14703,14705],{"class":36,"line":3408},[34,14695,7352],{"class":3617},[34,14697,14698],{"class":40},"() ",[34,14700,221],{"class":55},[34,14702,4652],{"class":44},[34,14704,1870],{"class":40},[34,14706,14707],{"class":161},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[34,14709,14710],{"class":36,"line":3413},[34,14711,1475],{"emptyLinePlaceholder":1474},[34,14713,14714,14716,14718,14720,14722,14724,14726,14728],{"class":36,"line":3418},[34,14715,8179],{"class":40},[34,14717,2835],{"class":55},[34,14719,14658],{"class":504},[34,14721,3103],{"class":55},[34,14723,14643],{"class":40},[34,14725,2835],{"class":55},[34,14727,13119],{"class":40},[34,14729,14730],{"class":161}," \u002F\u002F1000\n",[34,14732,14733,14735,14737,14739,14741,14743,14745,14747],{"class":36,"line":3432},[34,14734,8179],{"class":40},[34,14736,2835],{"class":55},[34,14738,14658],{"class":504},[34,14740,3103],{"class":55},[34,14742,14643],{"class":40},[34,14744,2835],{"class":55},[34,14746,13119],{"class":40},[34,14748,14730],{"class":161},[34,14750,14751],{"class":36,"line":3437},[34,14752,1475],{"emptyLinePlaceholder":1474},[34,14754,14755,14757,14759,14761],{"class":36,"line":4230},[34,14756,3957],{"class":3617},[34,14758,286],{"class":40},[34,14760,3962],{"class":504},[34,14762,4372],{"class":40},[34,14764,14765],{"class":36,"line":4244},[34,14766,1475],{"emptyLinePlaceholder":1474},[34,14768,14769,14771,14773],{"class":36,"line":4252},[34,14770,5743],{"class":55},[34,14772,98],{"class":44},[34,14774,2952],{"class":40},[34,14776,14777],{"class":36,"line":4257},[34,14778,3223],{"class":40},[14,14780,14782],{"id":14781},"_65引用的本质","6.5引用的本质",[103,14784,14785,14786],{},"本质：",[1165,14787,14788],{},"引用的本质在c++内部实现是一个指针常量.",[24,14790,14792],{"className":1809,"code":14791,"language":1811,"meta":29,"style":29},"\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",[31,14793,14794,14799,14815,14829,14833,14842,14854,14859,14864,14875,14888,14892,14908,14925,14929,14937,14945],{"__ignoreMap":29},[34,14795,14796],{"class":36,"line":37},[34,14797,14798],{"class":161},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[34,14800,14801,14803,14805,14807,14809,14812],{"class":36,"line":165},[34,14802,7014],{"class":55},[34,14804,13035],{"class":3617},[34,14806,286],{"class":40},[34,14808,14214],{"class":55},[34,14810,14811],{"class":51}," ref",[34,14813,14814],{"class":40},"){\n",[34,14816,14817,14820,14822,14824,14826],{"class":36,"line":171},[34,14818,14819],{"class":40},"    ref ",[34,14821,221],{"class":55},[34,14823,7404],{"class":44},[34,14825,1870],{"class":40},[34,14827,14828],{"class":161}," \u002F\u002F ref是引用，转换为*ref = 100\n",[34,14830,14831],{"class":36,"line":182},[34,14832,3223],{"class":40},[34,14834,14835,14837,14839],{"class":36,"line":188},[34,14836,571],{"class":55},[34,14838,3627],{"class":3617},[34,14840,14841],{"class":40},"(){\n",[34,14843,14844,14846,14848,14850,14852],{"class":36,"line":518},[34,14845,3639],{"class":55},[34,14847,12519],{"class":40},[34,14849,221],{"class":55},[34,14851,3692],{"class":44},[34,14853,2952],{"class":40},[34,14855,14856],{"class":36,"line":524},[34,14857,14858],{"class":40},"    \n",[34,14860,14861],{"class":36,"line":530},[34,14862,14863],{"class":161},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[34,14865,14866,14868,14870,14872],{"class":36,"line":624},[34,14867,14579],{"class":55},[34,14869,14582],{"class":40},[34,14871,221],{"class":55},[34,14873,14874],{"class":40}," a; \n",[34,14876,14877,14879,14881,14883,14885],{"class":36,"line":630},[34,14878,14819],{"class":40},[34,14880,221],{"class":55},[34,14882,10600],{"class":44},[34,14884,1870],{"class":40},[34,14886,14887],{"class":161}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[34,14889,14890],{"class":36,"line":636},[34,14891,14858],{"class":40},[34,14893,14894,14896,14898,14900,14902,14904,14906],{"class":36,"line":1513},[34,14895,8179],{"class":40},[34,14897,2835],{"class":55},[34,14899,14318],{"class":504},[34,14901,3103],{"class":55},[34,14903,12519],{"class":40},[34,14905,2835],{"class":55},[34,14907,10490],{"class":40},[34,14909,14910,14912,14914,14917,14919,14921,14923],{"class":36,"line":1519},[34,14911,8179],{"class":40},[34,14913,2835],{"class":55},[34,14915,14916],{"class":504}," \"ref:\"",[34,14918,3103],{"class":55},[34,14920,14582],{"class":40},[34,14922,2835],{"class":55},[34,14924,10490],{"class":40},[34,14926,14927],{"class":36,"line":3283},[34,14928,14858],{"class":40},[34,14930,14931,14934],{"class":36,"line":3297},[34,14932,14933],{"class":3617},"    func",[34,14935,14936],{"class":40},"(a);\n",[34,14938,14939,14941,14943],{"class":36,"line":3302},[34,14940,5743],{"class":55},[34,14942,98],{"class":44},[34,14944,2952],{"class":40},[34,14946,14947],{"class":36,"line":3308},[34,14948,3223],{"class":40},[103,14950,12982],{},[1772,14952,14953,14956],{},[1775,14954,14955],{},"引用的本质，就是一个指针常量",[1775,14957,14958],{},"引用一旦初始化，就不可以发生改变",[14,14960,14962],{"id":14961},"_66常量引用","6.6常量引用",[103,14964,14965],{},"作用：常量引用主要用来修饰形参",[103,14967,14968,14969,14972],{},"在函数形参列表中，可以加",[1165,14970,14971],{},"const修饰形参","，防止形参改变实参",[24,14974,14976],{"className":1809,"code":14975,"language":1811,"meta":29,"style":29},"\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",[31,14977,14978,14983,14988,15007,15012,15025,15029,15033,15041,15045,15050,15055,15069,15073,15081,15093,15097,15102,15114,15121,15125,15135,15139,15147],{"__ignoreMap":29},[34,14979,14980],{"class":36,"line":37},[34,14981,14982],{"class":161},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[34,14984,14985],{"class":36,"line":165},[34,14986,14987],{"class":161},"\u002F\u002F加上const就不能修改实参的\n",[34,14989,14990,14992,14995,14997,14999,15002,15005],{"class":36,"line":171},[34,14991,7014],{"class":55},[34,14993,14994],{"class":3617}," showValue",[34,14996,286],{"class":40},[34,14998,8442],{"class":55},[34,15000,15001],{"class":55}," int&",[34,15003,15004],{"class":51}," v",[34,15006,14090],{"class":40},[34,15008,15009],{"class":36,"line":182},[34,15010,15011],{"class":161},"    \u002F\u002Fv += 100;\n",[34,15013,15014,15016,15018,15021,15023],{"class":36,"line":188},[34,15015,8179],{"class":40},[34,15017,2835],{"class":55},[34,15019,15020],{"class":40}," v ",[34,15022,2835],{"class":55},[34,15024,10490],{"class":40},[34,15026,15027],{"class":36,"line":518},[34,15028,3223],{"class":40},[34,15030,15031],{"class":36,"line":524},[34,15032,1475],{"emptyLinePlaceholder":1474},[34,15034,15035,15037,15039],{"class":36,"line":530},[34,15036,571],{"class":55},[34,15038,3627],{"class":3617},[34,15040,12503],{"class":40},[34,15042,15043],{"class":36,"line":624},[34,15044,1475],{"emptyLinePlaceholder":1474},[34,15046,15047],{"class":36,"line":630},[34,15048,15049],{"class":161},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[34,15051,15052],{"class":36,"line":636},[34,15053,15054],{"class":161},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[34,15056,15057,15059,15061,15063,15065,15067],{"class":36,"line":1513},[34,15058,12871],{"class":55},[34,15060,15001],{"class":55},[34,15062,14582],{"class":40},[34,15064,221],{"class":55},[34,15066,3692],{"class":44},[34,15068,2952],{"class":40},[34,15070,15071],{"class":36,"line":1519},[34,15072,1475],{"emptyLinePlaceholder":1474},[34,15074,15075,15078],{"class":36,"line":3283},[34,15076,15077],{"class":161},"    \u002F\u002Fref = 100;",[34,15079,15080],{"class":161},"  \u002F\u002F加入const后不可以修改变量\n",[34,15082,15083,15085,15087,15089,15091],{"class":36,"line":3297},[34,15084,8179],{"class":40},[34,15086,2835],{"class":55},[34,15088,14582],{"class":40},[34,15090,2835],{"class":55},[34,15092,10490],{"class":40},[34,15094,15095],{"class":36,"line":3302},[34,15096,1475],{"emptyLinePlaceholder":1474},[34,15098,15099],{"class":36,"line":3308},[34,15100,15101],{"class":161},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[34,15103,15104,15106,15108,15110,15112],{"class":36,"line":3328},[34,15105,3639],{"class":55},[34,15107,12519],{"class":40},[34,15109,221],{"class":55},[34,15111,3692],{"class":44},[34,15113,2952],{"class":40},[34,15115,15116,15119],{"class":36,"line":3333},[34,15117,15118],{"class":3617},"    showValue",[34,15120,14936],{"class":40},[34,15122,15123],{"class":36,"line":3347},[34,15124,1475],{"emptyLinePlaceholder":1474},[34,15126,15127,15129,15131,15133],{"class":36,"line":3352},[34,15128,3957],{"class":3617},[34,15130,286],{"class":40},[34,15132,3962],{"class":504},[34,15134,4372],{"class":40},[34,15136,15137],{"class":36,"line":3381},[34,15138,1475],{"emptyLinePlaceholder":1474},[34,15140,15141,15143,15145],{"class":36,"line":3386},[34,15142,5743],{"class":55},[34,15144,98],{"class":44},[34,15146,2952],{"class":40},[34,15148,15149],{"class":36,"line":3403},[34,15150,3223],{"class":40},[1711,15152,15153],{},"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":29,"searchDepth":165,"depth":165,"links":15155},[15156,15157,15158,15159,15160,15161],{"id":13689,"depth":165,"text":13690},{"id":13868,"depth":165,"text":13869},{"id":14051,"depth":165,"text":14052},{"id":14454,"depth":165,"text":14455},{"id":14781,"depth":165,"text":14782},{"id":14961,"depth":165,"text":14962},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13681,"description":29},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15168,"title":15169,"body":15170,"description":29,"extension":1745,"meta":16249,"navigation":1474,"path":16250,"seo":16251,"stem":16252,"__hash__":16253},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15171,"toc":16241},[15172,15175,15179,15182,15187,15417,15419,15430,15434,15437,15445,15549,15552,15556,15559,15563,15566,15571,15593,15599,15926,15929,15933,15941,16238],[10,15173,15169],{"id":15174},"_7函数高级部分",[14,15176,15178],{"id":15177},"_71函数默认参数","7.1函数默认参数",[103,15180,15181],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[103,15183,6832,15184],{},[31,15185,15186],{}," 返回值类型  函数名 （参数= 默认值）{}",[24,15188,15190],{"className":1809,"code":15189,"language":1811,"meta":29,"style":29},"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",[31,15191,15192,15226,15241,15245,15249,15254,15259,15288,15308,15318,15322,15326,15334,15338,15365,15387,15391,15401,15405,15413],{"__ignoreMap":29},[34,15193,15194,15196,15198,15200,15202,15204,15206,15208,15210,15212,15214,15216,15218,15220,15222,15224],{"class":36,"line":37},[34,15195,571],{"class":55},[34,15197,13035],{"class":3617},[34,15199,286],{"class":40},[34,15201,571],{"class":55},[34,15203,3057],{"class":51},[34,15205,48],{"class":40},[34,15207,571],{"class":55},[34,15209,4486],{"class":51},[34,15211,56],{"class":55},[34,15213,3692],{"class":44},[34,15215,48],{"class":40},[34,15217,571],{"class":55},[34,15219,4502],{"class":51},[34,15221,56],{"class":55},[34,15223,3692],{"class":44},[34,15225,14090],{"class":40},[34,15227,15228,15230,15232,15234,15236,15238],{"class":36,"line":165},[34,15229,5743],{"class":55},[34,15231,12519],{"class":40},[34,15233,2277],{"class":55},[34,15235,12532],{"class":40},[34,15237,2277],{"class":55},[34,15239,15240],{"class":40}," c;\n",[34,15242,15243],{"class":36,"line":171},[34,15244,3223],{"class":40},[34,15246,15247],{"class":36,"line":182},[34,15248,1475],{"emptyLinePlaceholder":1474},[34,15250,15251],{"class":36,"line":188},[34,15252,15253],{"class":161},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[34,15255,15256],{"class":36,"line":518},[34,15257,15258],{"class":161},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[34,15260,15261,15263,15266,15268,15270,15272,15274,15276,15278,15280,15282,15284,15286],{"class":36,"line":524},[34,15262,571],{"class":55},[34,15264,15265],{"class":3617}," func2",[34,15267,286],{"class":40},[34,15269,571],{"class":55},[34,15271,3057],{"class":51},[34,15273,56],{"class":55},[34,15275,3692],{"class":44},[34,15277,48],{"class":40},[34,15279,571],{"class":55},[34,15281,4486],{"class":51},[34,15283,56],{"class":55},[34,15285,3692],{"class":44},[34,15287,4372],{"class":40},[34,15289,15290,15292,15294,15296,15298,15300,15302,15304,15306],{"class":36,"line":530},[34,15291,571],{"class":55},[34,15293,15265],{"class":3617},[34,15295,286],{"class":40},[34,15297,571],{"class":55},[34,15299,3057],{"class":51},[34,15301,48],{"class":40},[34,15303,571],{"class":55},[34,15305,4486],{"class":51},[34,15307,14090],{"class":40},[34,15309,15310,15312,15314,15316],{"class":36,"line":624},[34,15311,5743],{"class":55},[34,15313,12519],{"class":40},[34,15315,2277],{"class":55},[34,15317,14111],{"class":40},[34,15319,15320],{"class":36,"line":630},[34,15321,3223],{"class":40},[34,15323,15324],{"class":36,"line":636},[34,15325,1475],{"emptyLinePlaceholder":1474},[34,15327,15328,15330,15332],{"class":36,"line":1513},[34,15329,571],{"class":55},[34,15331,3627],{"class":3617},[34,15333,12503],{"class":40},[34,15335,15336],{"class":36,"line":1519},[34,15337,1475],{"emptyLinePlaceholder":1474},[34,15339,15340,15342,15344,15347,15349,15351,15353,15355,15357,15359,15361,15363],{"class":36,"line":3283},[34,15341,8179],{"class":40},[34,15343,2835],{"class":55},[34,15345,15346],{"class":504}," \"ret = \"",[34,15348,3103],{"class":55},[34,15350,13035],{"class":3617},[34,15352,286],{"class":40},[34,15354,1249],{"class":44},[34,15356,48],{"class":40},[34,15358,1249],{"class":44},[34,15360,372],{"class":40},[34,15362,2835],{"class":55},[34,15364,10490],{"class":40},[34,15366,15367,15369,15371,15373,15375,15377,15379,15381,15383,15385],{"class":36,"line":3297},[34,15368,8179],{"class":40},[34,15370,2835],{"class":55},[34,15372,15346],{"class":504},[34,15374,3103],{"class":55},[34,15376,13035],{"class":3617},[34,15378,286],{"class":40},[34,15380,451],{"class":44},[34,15382,372],{"class":40},[34,15384,2835],{"class":55},[34,15386,10490],{"class":40},[34,15388,15389],{"class":36,"line":3302},[34,15390,1475],{"emptyLinePlaceholder":1474},[34,15392,15393,15395,15397,15399],{"class":36,"line":3308},[34,15394,3957],{"class":3617},[34,15396,286],{"class":40},[34,15398,3962],{"class":504},[34,15400,4372],{"class":40},[34,15402,15403],{"class":36,"line":3328},[34,15404,1475],{"emptyLinePlaceholder":1474},[34,15406,15407,15409,15411],{"class":36,"line":3333},[34,15408,5743],{"class":55},[34,15410,98],{"class":44},[34,15412,2952],{"class":40},[34,15414,15415],{"class":36,"line":3347},[34,15416,3223],{"class":40},[103,15418,12982],{},[1772,15420,15421,15424,15427],{},[1775,15422,15423],{},"我传就用我；没传就用你",[1775,15425,15426],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[1775,15428,15429],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15431,15433],{"id":15432},"_72函数的占位参数","7.2函数的占位参数",[103,15435,15436],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[103,15438,15439,15441,15442],{},[1165,15440,6832],{}," ",[31,15443,15444],{},"返回值类型 函数名 (数据类型){}",[24,15446,15448],{"className":1809,"code":15447,"language":1811,"meta":29,"style":29},"\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",[31,15449,15450,15455,15473,15486,15490,15498,15502,15519,15523,15533,15537,15545],{"__ignoreMap":29},[34,15451,15452],{"class":36,"line":37},[34,15453,15454],{"class":161},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[34,15456,15457,15459,15461,15463,15465,15467,15469,15471],{"class":36,"line":165},[34,15458,7014],{"class":55},[34,15460,13035],{"class":3617},[34,15462,286],{"class":40},[34,15464,571],{"class":55},[34,15466,3057],{"class":51},[34,15468,48],{"class":40},[34,15470,571],{"class":55},[34,15472,14090],{"class":40},[34,15474,15475,15477,15479,15482,15484],{"class":36,"line":171},[34,15476,8179],{"class":40},[34,15478,2835],{"class":55},[34,15480,15481],{"class":504}," \"this is func\"",[34,15483,3103],{"class":55},[34,15485,10490],{"class":40},[34,15487,15488],{"class":36,"line":182},[34,15489,3223],{"class":40},[34,15491,15492,15494,15496],{"class":36,"line":188},[34,15493,571],{"class":55},[34,15495,3627],{"class":3617},[34,15497,12503],{"class":40},[34,15499,15500],{"class":36,"line":518},[34,15501,1475],{"emptyLinePlaceholder":1474},[34,15503,15504,15506,15508,15510,15512,15514,15516],{"class":36,"line":524},[34,15505,14933],{"class":3617},[34,15507,286],{"class":40},[34,15509,410],{"class":44},[34,15511,291],{"class":40},[34,15513,410],{"class":44},[34,15515,7616],{"class":40},[34,15517,15518],{"class":161}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[34,15520,15521],{"class":36,"line":530},[34,15522,1475],{"emptyLinePlaceholder":1474},[34,15524,15525,15527,15529,15531],{"class":36,"line":624},[34,15526,3957],{"class":3617},[34,15528,286],{"class":40},[34,15530,3962],{"class":504},[34,15532,4372],{"class":40},[34,15534,15535],{"class":36,"line":630},[34,15536,1475],{"emptyLinePlaceholder":1474},[34,15538,15539,15541,15543],{"class":36,"line":636},[34,15540,5743],{"class":55},[34,15542,98],{"class":44},[34,15544,2952],{"class":40},[34,15546,15547],{"class":36,"line":1513},[34,15548,3223],{"class":40},[103,15550,15551],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15553,15555],{"id":15554},"_73函数重载","7.3函数重载",[103,15557,15558],{},"意思是函数名是可以相同的",[19,15560,15562],{"id":15561},"_731基本语法","7.3.1基本语法",[103,15564,15565],{},"作用：函数名可以相同，提高复用性",[103,15567,15568],{},[1165,15569,15570],{},"函数重载满足条件：",[2798,15572,15573,15576,15579],{},[1775,15574,15575],{},"同一个作用域下",[1775,15577,15578],{},"函数名称相同",[1775,15580,15581,15582,15585,15586,15589,15590],{},"函数参数",[1165,15583,15584],{},"类型不同","  或者 ",[1165,15587,15588],{},"个数不同"," 或者 ",[1165,15591,15592],{},"顺序不同",[103,15594,15595,15598],{},[1165,15596,15597],{},"注意:","  函数的返回值不可以作为函数重载的条件",[24,15600,15602],{"className":11591,"code":15601,"language":11593,"meta":29,"style":29},"\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",[31,15603,15604,15609,15617,15621,15634,15638,15652,15656,15669,15673,15688,15692,15705,15709,15730,15734,15747,15751,15771,15775,15788,15792,15796,15801,15806,15811,15816,15821,15825,15829,15837,15841,15847,15857,15867,15881,15896,15900,15910,15914,15922],{"__ignoreMap":29},[34,15605,15606],{"class":36,"line":37},[34,15607,15608],{"class":161},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[34,15610,15611,15613,15615],{"class":36,"line":165},[34,15612,7014],{"class":55},[34,15614,13035],{"class":3617},[34,15616,3630],{"class":40},[34,15618,15619],{"class":36,"line":171},[34,15620,3204],{"class":40},[34,15622,15623,15625,15627,15630,15632],{"class":36,"line":182},[34,15624,8179],{"class":40},[34,15626,2835],{"class":55},[34,15628,15629],{"class":504}," \"func 的调用！\"",[34,15631,3103],{"class":55},[34,15633,10490],{"class":40},[34,15635,15636],{"class":36,"line":188},[34,15637,3223],{"class":40},[34,15639,15640,15642,15644,15646,15648,15650],{"class":36,"line":518},[34,15641,7014],{"class":55},[34,15643,13035],{"class":3617},[34,15645,286],{"class":40},[34,15647,571],{"class":55},[34,15649,3057],{"class":51},[34,15651,101],{"class":40},[34,15653,15654],{"class":36,"line":524},[34,15655,3204],{"class":40},[34,15657,15658,15660,15662,15665,15667],{"class":36,"line":530},[34,15659,8179],{"class":40},[34,15661,2835],{"class":55},[34,15663,15664],{"class":504}," \"func (int a) 的调用！\"",[34,15666,3103],{"class":55},[34,15668,10490],{"class":40},[34,15670,15671],{"class":36,"line":624},[34,15672,3223],{"class":40},[34,15674,15675,15677,15679,15681,15684,15686],{"class":36,"line":630},[34,15676,7014],{"class":55},[34,15678,13035],{"class":3617},[34,15680,286],{"class":40},[34,15682,15683],{"class":55},"double",[34,15685,3057],{"class":51},[34,15687,101],{"class":40},[34,15689,15690],{"class":36,"line":636},[34,15691,3204],{"class":40},[34,15693,15694,15696,15698,15701,15703],{"class":36,"line":1513},[34,15695,8179],{"class":40},[34,15697,2835],{"class":55},[34,15699,15700],{"class":504}," \"func (double a)的调用！\"",[34,15702,3103],{"class":55},[34,15704,10490],{"class":40},[34,15706,15707],{"class":36,"line":1519},[34,15708,3223],{"class":40},[34,15710,15711,15713,15715,15717,15719,15721,15724,15726,15728],{"class":36,"line":3283},[34,15712,7014],{"class":55},[34,15714,13035],{"class":3617},[34,15716,286],{"class":40},[34,15718,571],{"class":55},[34,15720,3057],{"class":51},[34,15722,15723],{"class":40}," ,",[34,15725,15683],{"class":55},[34,15727,4486],{"class":51},[34,15729,101],{"class":40},[34,15731,15732],{"class":36,"line":3297},[34,15733,3204],{"class":40},[34,15735,15736,15738,15740,15743,15745],{"class":36,"line":3302},[34,15737,8179],{"class":40},[34,15739,2835],{"class":55},[34,15741,15742],{"class":504}," \"func (int a ,double b) 的调用！\"",[34,15744,3103],{"class":55},[34,15746,10490],{"class":40},[34,15748,15749],{"class":36,"line":3308},[34,15750,3223],{"class":40},[34,15752,15753,15755,15757,15759,15761,15763,15765,15767,15769],{"class":36,"line":3328},[34,15754,7014],{"class":55},[34,15756,13035],{"class":3617},[34,15758,286],{"class":40},[34,15760,15683],{"class":55},[34,15762,3057],{"class":51},[34,15764,15723],{"class":40},[34,15766,571],{"class":55},[34,15768,4486],{"class":51},[34,15770,101],{"class":40},[34,15772,15773],{"class":36,"line":3333},[34,15774,3204],{"class":40},[34,15776,15777,15779,15781,15784,15786],{"class":36,"line":3347},[34,15778,8179],{"class":40},[34,15780,2835],{"class":55},[34,15782,15783],{"class":504}," \"func (double a ,int b)的调用！\"",[34,15785,3103],{"class":55},[34,15787,10490],{"class":40},[34,15789,15790],{"class":36,"line":3352},[34,15791,3223],{"class":40},[34,15793,15794],{"class":36,"line":3381},[34,15795,1475],{"emptyLinePlaceholder":1474},[34,15797,15798],{"class":36,"line":3386},[34,15799,15800],{"class":161},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[34,15802,15803],{"class":36,"line":3403},[34,15804,15805],{"class":161},"\u002F\u002Fint func(double a, int b)\n",[34,15807,15808],{"class":36,"line":3408},[34,15809,15810],{"class":161},"\u002F\u002F{\n",[34,15812,15813],{"class":36,"line":3413},[34,15814,15815],{"class":161},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[34,15817,15818],{"class":36,"line":3418},[34,15819,15820],{"class":161},"\u002F\u002F}\n",[34,15822,15823],{"class":36,"line":3432},[34,15824,1475],{"emptyLinePlaceholder":1474},[34,15826,15827],{"class":36,"line":3437},[34,15828,1475],{"emptyLinePlaceholder":1474},[34,15830,15831,15833,15835],{"class":36,"line":4230},[34,15832,571],{"class":55},[34,15834,3627],{"class":3617},[34,15836,12503],{"class":40},[34,15838,15839],{"class":36,"line":4244},[34,15840,1475],{"emptyLinePlaceholder":1474},[34,15842,15843,15845],{"class":36,"line":4252},[34,15844,14933],{"class":3617},[34,15846,7286],{"class":40},[34,15848,15849,15851,15853,15855],{"class":36,"line":4257},[34,15850,14933],{"class":3617},[34,15852,286],{"class":40},[34,15854,410],{"class":44},[34,15856,4372],{"class":40},[34,15858,15859,15861,15863,15865],{"class":36,"line":4263},[34,15860,14933],{"class":3617},[34,15862,286],{"class":40},[34,15864,1864],{"class":44},[34,15866,4372],{"class":40},[34,15868,15869,15871,15873,15875,15877,15879],{"class":36,"line":4269},[34,15870,14933],{"class":3617},[34,15872,286],{"class":40},[34,15874,410],{"class":44},[34,15876,291],{"class":40},[34,15878,1864],{"class":44},[34,15880,4372],{"class":40},[34,15882,15883,15885,15887,15889,15892,15894],{"class":36,"line":4274},[34,15884,14933],{"class":3617},[34,15886,286],{"class":40},[34,15888,1864],{"class":44},[34,15890,15891],{"class":40}," , ",[34,15893,410],{"class":44},[34,15895,4372],{"class":40},[34,15897,15898],{"class":36,"line":9598},[34,15899,14858],{"class":40},[34,15901,15902,15904,15906,15908],{"class":36,"line":9622},[34,15903,3957],{"class":3617},[34,15905,286],{"class":40},[34,15907,3962],{"class":504},[34,15909,4372],{"class":40},[34,15911,15912],{"class":36,"line":9627},[34,15913,1475],{"emptyLinePlaceholder":1474},[34,15915,15916,15918,15920],{"class":36,"line":9633},[34,15917,5743],{"class":55},[34,15919,98],{"class":44},[34,15921,2952],{"class":40},[34,15923,15924],{"class":36,"line":9660},[34,15925,3223],{"class":40},[103,15927,15928],{},"重点：函数返回值不可以作为函数重载条件！",[19,15930,15932],{"id":15931},"_732注意事项","7.3.2注意事项",[2798,15934,15935,15938],{},[1775,15936,15937],{},"引用作为重载条件!!!",[1775,15939,15940],{},"函数重载碰到函数默认参数",[24,15942,15944],{"className":1809,"code":15943,"language":1811,"meta":29,"style":29},"\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",[31,15945,15946,15951,15956,15960,15976,15980,15993,15997,16001,16019,16023,16036,16040,16044,16048,16053,16057,16081,16085,16098,16102,16106,16120,16124,16137,16141,16145,16153,16157,16169,16179,16192,16196,16200,16208,16212,16222,16226,16234],{"__ignoreMap":29},[34,15947,15948],{"class":36,"line":37},[34,15949,15950],{"class":161},"\u002F\u002F函数重载注意事项\n",[34,15952,15953],{"class":36,"line":165},[34,15954,15955],{"class":161},"\u002F\u002F1、引用作为重载条件\n",[34,15957,15958],{"class":36,"line":171},[34,15959,1475],{"emptyLinePlaceholder":1474},[34,15961,15962,15964,15966,15968,15970,15972,15974],{"class":36,"line":182},[34,15963,7014],{"class":55},[34,15965,13035],{"class":3617},[34,15967,286],{"class":40},[34,15969,571],{"class":55},[34,15971,12234],{"class":55},[34,15973,236],{"class":51},[34,15975,101],{"class":40},[34,15977,15978],{"class":36,"line":188},[34,15979,3204],{"class":40},[34,15981,15982,15984,15986,15989,15991],{"class":36,"line":518},[34,15983,8179],{"class":40},[34,15985,2835],{"class":55},[34,15987,15988],{"class":504}," \"func (int &a) 调用 \"",[34,15990,3103],{"class":55},[34,15992,10490],{"class":40},[34,15994,15995],{"class":36,"line":524},[34,15996,3223],{"class":40},[34,15998,15999],{"class":36,"line":530},[34,16000,1475],{"emptyLinePlaceholder":1474},[34,16002,16003,16005,16007,16009,16011,16013,16015,16017],{"class":36,"line":624},[34,16004,7014],{"class":55},[34,16006,13035],{"class":3617},[34,16008,286],{"class":40},[34,16010,8442],{"class":55},[34,16012,4036],{"class":55},[34,16014,12234],{"class":55},[34,16016,236],{"class":51},[34,16018,101],{"class":40},[34,16020,16021],{"class":36,"line":630},[34,16022,3204],{"class":40},[34,16024,16025,16027,16029,16032,16034],{"class":36,"line":636},[34,16026,8179],{"class":40},[34,16028,2835],{"class":55},[34,16030,16031],{"class":504}," \"func (const int &a) 调用 \"",[34,16033,3103],{"class":55},[34,16035,10490],{"class":40},[34,16037,16038],{"class":36,"line":1513},[34,16039,3223],{"class":40},[34,16041,16042],{"class":36,"line":1519},[34,16043,1475],{"emptyLinePlaceholder":1474},[34,16045,16046],{"class":36,"line":3283},[34,16047,1475],{"emptyLinePlaceholder":1474},[34,16049,16050],{"class":36,"line":3297},[34,16051,16052],{"class":161},"\u002F\u002F2、函数重载碰到函数默认参数\n",[34,16054,16055],{"class":36,"line":3302},[34,16056,1475],{"emptyLinePlaceholder":1474},[34,16058,16059,16061,16063,16065,16067,16069,16071,16073,16075,16077,16079],{"class":36,"line":3308},[34,16060,7014],{"class":55},[34,16062,15265],{"class":3617},[34,16064,286],{"class":40},[34,16066,571],{"class":55},[34,16068,3057],{"class":51},[34,16070,48],{"class":40},[34,16072,571],{"class":55},[34,16074,4486],{"class":51},[34,16076,56],{"class":55},[34,16078,3692],{"class":44},[34,16080,101],{"class":40},[34,16082,16083],{"class":36,"line":3328},[34,16084,3204],{"class":40},[34,16086,16087,16089,16091,16094,16096],{"class":36,"line":3333},[34,16088,8179],{"class":40},[34,16090,2835],{"class":55},[34,16092,16093],{"class":504}," \"func2(int a, int b = 10) 调用\"",[34,16095,3103],{"class":55},[34,16097,10490],{"class":40},[34,16099,16100],{"class":36,"line":3347},[34,16101,3223],{"class":40},[34,16103,16104],{"class":36,"line":3352},[34,16105,1475],{"emptyLinePlaceholder":1474},[34,16107,16108,16110,16112,16114,16116,16118],{"class":36,"line":3381},[34,16109,7014],{"class":55},[34,16111,15265],{"class":3617},[34,16113,286],{"class":40},[34,16115,571],{"class":55},[34,16117,3057],{"class":51},[34,16119,101],{"class":40},[34,16121,16122],{"class":36,"line":3386},[34,16123,3204],{"class":40},[34,16125,16126,16128,16130,16133,16135],{"class":36,"line":3403},[34,16127,8179],{"class":40},[34,16129,2835],{"class":55},[34,16131,16132],{"class":504}," \"func2(int a) 调用\"",[34,16134,3103],{"class":55},[34,16136,10490],{"class":40},[34,16138,16139],{"class":36,"line":3408},[34,16140,3223],{"class":40},[34,16142,16143],{"class":36,"line":3413},[34,16144,1475],{"emptyLinePlaceholder":1474},[34,16146,16147,16149,16151],{"class":36,"line":3418},[34,16148,571],{"class":55},[34,16150,3627],{"class":3617},[34,16152,12503],{"class":40},[34,16154,16155],{"class":36,"line":3432},[34,16156,14858],{"class":40},[34,16158,16159,16161,16163,16165,16167],{"class":36,"line":3437},[34,16160,3639],{"class":55},[34,16162,12519],{"class":40},[34,16164,221],{"class":55},[34,16166,3692],{"class":44},[34,16168,2952],{"class":40},[34,16170,16171,16173,16176],{"class":36,"line":4230},[34,16172,14933],{"class":3617},[34,16174,16175],{"class":40},"(a);",[34,16177,16178],{"class":161}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[34,16180,16181,16183,16185,16187,16189],{"class":36,"line":4244},[34,16182,14933],{"class":3617},[34,16184,286],{"class":40},[34,16186,410],{"class":44},[34,16188,7616],{"class":40},[34,16190,16191],{"class":161},"\u002F\u002F调用有const   10是个常量\n",[34,16193,16194],{"class":36,"line":4252},[34,16195,1475],{"emptyLinePlaceholder":1474},[34,16197,16198],{"class":36,"line":4257},[34,16199,1475],{"emptyLinePlaceholder":1474},[34,16201,16202,16205],{"class":36,"line":4263},[34,16203,16204],{"class":161},"    \u002F\u002Ffunc2(10);",[34,16206,16207],{"class":161}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[34,16209,16210],{"class":36,"line":4269},[34,16211,1475],{"emptyLinePlaceholder":1474},[34,16213,16214,16216,16218,16220],{"class":36,"line":4274},[34,16215,3957],{"class":3617},[34,16217,286],{"class":40},[34,16219,3962],{"class":504},[34,16221,4372],{"class":40},[34,16223,16224],{"class":36,"line":9598},[34,16225,1475],{"emptyLinePlaceholder":1474},[34,16227,16228,16230,16232],{"class":36,"line":9622},[34,16229,5743],{"class":55},[34,16231,98],{"class":44},[34,16233,2952],{"class":40},[34,16235,16236],{"class":36,"line":9627},[34,16237,3223],{"class":40},[1711,16239,16240],{},"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":29,"searchDepth":165,"depth":165,"links":16242},[16243,16244,16245],{"id":15177,"depth":165,"text":15178},{"id":15432,"depth":165,"text":15433},{"id":15554,"depth":165,"text":15555,"children":16246},[16247,16248],{"id":15561,"depth":171,"text":15562},{"id":15931,"depth":171,"text":15932},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15169,"description":29},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16255,"title":16256,"body":16257,"description":25010,"extension":1745,"meta":25011,"navigation":1474,"path":25012,"seo":25013,"stem":25014,"__hash__":25015},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16258,"toc":24991},[16259,16262,16268,16275,16280,16283,16286,16289,16293,16297,16300,16303,16311,16316,16319,16326,16331,16490,16493,16746,16749,16752,16755,16760,16763,16766,16777,16782,17018,17022,17032,17035,17043,17190,17194,17197,17200,17204,17649,17653,17661,17669,18581,18588,18593,19221,19224,19227,19230,19349,19352,19439,19442,19568,19571,19665,19668,20021,20025,20033,20037,20044,20047,20050,20061,20067,20072,20084,20092,20112,20120,20137,20323,20326,20330,20333,20336,20339,20342,20345,20348,20351,20811,20817,20821,20824,20835,21422,21425,21914,21918,21921,21924,21927,21930,21933,21941,22337,22341,22344,22347,22794,22797,22800,22805,22808,22813,22816,22820,22823,22825,22831,22834,23140,23150,23191,23195,23198,23200,23233,23236,23543,23545,23560,23563,23586,23595,23601,23604,23608,23611,23614,23619,23630,23635,23643,23647,23777,23780,23783,23958,23963,24175,24179,24182,24296,24301,24540,24544,24548,24551,24554,24559,24664,24667,24670,24673,24677,24788,24791,24794,24799,24851,24854,24857,24862,24908,24911,24916,24984,24986,24989],[10,16260,16256],{"id":16261},"_8类和对象",[103,16263,16264,16265],{},"C++面向对象的三大特性为",[1165,16266,16267],{},"封装、继承、多态",[103,16269,16270,16271,16274],{},"C++认为",[1165,16272,16273],{},"万事万物都皆为对象","，对象上有其属性和行为",[103,16276,16277],{},[1165,16278,16279],{},"例如：",[103,16281,16282],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[103,16284,16285],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[103,16287,16288],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16290,16292],{"id":16291},"_81封装","8.1封装",[19,16294,16296],{"id":16295},"_811封装的意义","8.1.1封装的意义",[103,16298,16299],{},"封装是C++面向对象三大特性之一",[103,16301,16302],{},"封装的意义：",[2798,16304,16305,16308],{},[1775,16306,16307],{},"将属性和行为作为一个整体，表现生活中的事物",[1775,16309,16310],{},"将属性和行为加以权限控制",[103,16312,16313],{},[1165,16314,16315],{},"封装意义一：",[103,16317,16318],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[103,16320,16321,15441,16323],{},[1165,16322,6832],{},[31,16324,16325],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[1772,16327,16328],{},[1775,16329,16330],{},"**示例1：**设计一个圆类，求圆的周长",[24,16332,16334],{"className":1809,"code":16333,"language":1811,"meta":29,"style":29},"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",[31,16335,16336,16344,16348,16353,16358,16363,16368,16375,16380,16390,16394,16412,16416,16420,16428,16432,16437,16442,16447,16452,16463,16486],{"__ignoreMap":29},[34,16337,16338,16341],{"class":36,"line":37},[34,16339,16340],{"class":55},"class",[34,16342,16343],{"class":3617}," Circle\n",[34,16345,16346],{"class":36,"line":165},[34,16347,3204],{"class":40},[34,16349,16350],{"class":36,"line":171},[34,16351,16352],{"class":161},"    \u002F\u002F访问权限\n",[34,16354,16355],{"class":36,"line":182},[34,16356,16357],{"class":161},"    \u002F\u002F公共权限\n",[34,16359,16360],{"class":36,"line":188},[34,16361,16362],{"class":55},"public:\n",[34,16364,16365],{"class":36,"line":518},[34,16366,16367],{"class":161},"    \u002F\u002F属性\n",[34,16369,16370,16372],{"class":36,"line":524},[34,16371,3639],{"class":55},[34,16373,16374],{"class":40}," m_r;\n",[34,16376,16377],{"class":36,"line":530},[34,16378,16379],{"class":161},"    \u002F\u002F行为\n",[34,16381,16382,16385,16388],{"class":36,"line":624},[34,16383,16384],{"class":55},"    double",[34,16386,16387],{"class":3617}," calculateZC",[34,16389,3630],{"class":40},[34,16391,16392],{"class":36,"line":630},[34,16393,3684],{"class":40},[34,16395,16396,16399,16402,16404,16407,16409],{"class":36,"line":636},[34,16397,16398],{"class":55},"        return",[34,16400,16401],{"class":44}," 2",[34,16403,2252],{"class":55},[34,16405,16406],{"class":40},"PI",[34,16408,2252],{"class":55},[34,16410,16411],{"class":40},"m_r;\n",[34,16413,16414],{"class":36,"line":1513},[34,16415,3841],{"class":40},[34,16417,16418],{"class":36,"line":1519},[34,16419,5648],{"class":40},[34,16421,16422,16424,16426],{"class":36,"line":3283},[34,16423,571],{"class":55},[34,16425,3627],{"class":3617},[34,16427,3630],{"class":40},[34,16429,16430],{"class":36,"line":3297},[34,16431,3204],{"class":40},[34,16433,16434],{"class":36,"line":3302},[34,16435,16436],{"class":161},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[34,16438,16439],{"class":36,"line":3308},[34,16440,16441],{"class":161},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[34,16443,16444],{"class":36,"line":3328},[34,16445,16446],{"class":40},"    Circle c1;\n",[34,16448,16449],{"class":36,"line":3333},[34,16450,16451],{"class":161},"    \u002F\u002F给圆对象 的属性进行赋值\n",[34,16453,16454,16457,16459,16461],{"class":36,"line":3347},[34,16455,16456],{"class":40},"    c1.m_r",[34,16458,221],{"class":55},[34,16460,410],{"class":44},[34,16462,2952],{"class":40},[34,16464,16465,16467,16469,16472,16474,16477,16480,16482,16484],{"class":36,"line":3352},[34,16466,3209],{"class":40},[34,16468,2835],{"class":55},[34,16470,16471],{"class":504},"\"圆的周长\"",[34,16473,2835],{"class":55},[34,16475,16476],{"class":40},"c1.",[34,16478,16479],{"class":3617},"calculateZC",[34,16481,4080],{"class":40},[34,16483,2835],{"class":55},[34,16485,2857],{"class":40},[34,16487,16488],{"class":36,"line":3381},[34,16489,3223],{"class":40},[103,16491,16492],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[24,16494,16496],{"className":1809,"code":16495,"language":1811,"meta":29,"style":29},"#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",[31,16497,16498,16504,16514,16520,16526,16530,16534,16539,16546,16551,16569,16573,16583,16587,16592,16608,16612,16622,16626,16631,16639,16643,16675,16679,16683,16691,16695,16700,16705,16719,16733,16742],{"__ignoreMap":29},[34,16499,16500,16502],{"class":36,"line":37},[34,16501,3603],{"class":55},[34,16503,3606],{"class":504},[34,16505,16506,16508,16510,16512],{"class":36,"line":165},[34,16507,3611],{"class":55},[34,16509,3614],{"class":55},[34,16511,3618],{"class":3617},[34,16513,2952],{"class":40},[34,16515,16516,16518],{"class":36,"line":171},[34,16517,3603],{"class":55},[34,16519,9399],{"class":504},[34,16521,16522,16524],{"class":36,"line":182},[34,16523,16340],{"class":55},[34,16525,9412],{"class":3617},[34,16527,16528],{"class":36,"line":188},[34,16529,3204],{"class":40},[34,16531,16532],{"class":36,"line":518},[34,16533,16362],{"class":55},[34,16535,16536],{"class":36,"line":524},[34,16537,16538],{"class":40},"    string m_name;\n",[34,16540,16541,16543],{"class":36,"line":530},[34,16542,3639],{"class":55},[34,16544,16545],{"class":40}," m_id;\n",[34,16547,16548],{"class":36,"line":624},[34,16549,16550],{"class":161},"    \u002F\u002F赋值姓名\n",[34,16552,16553,16556,16559,16561,16564,16567],{"class":36,"line":630},[34,16554,16555],{"class":55},"    void",[34,16557,16558],{"class":3617}," setName",[34,16560,286],{"class":40},[34,16562,16563],{"class":3617},"string",[34,16565,16566],{"class":51}," name",[34,16568,101],{"class":40},[34,16570,16571],{"class":36,"line":636},[34,16572,3684],{"class":40},[34,16574,16575,16578,16580],{"class":36,"line":1513},[34,16576,16577],{"class":40},"        m_name",[34,16579,221],{"class":55},[34,16581,16582],{"class":40},"name;\n",[34,16584,16585],{"class":36,"line":1519},[34,16586,3841],{"class":40},[34,16588,16589],{"class":36,"line":3283},[34,16590,16591],{"class":161},"    \u002F\u002F赋值学号\n",[34,16593,16594,16596,16599,16601,16603,16606],{"class":36,"line":3297},[34,16595,16555],{"class":55},[34,16597,16598],{"class":3617}," setId",[34,16600,286],{"class":40},[34,16602,571],{"class":55},[34,16604,16605],{"class":51}," id",[34,16607,101],{"class":40},[34,16609,16610],{"class":36,"line":3302},[34,16611,3684],{"class":40},[34,16613,16614,16617,16619],{"class":36,"line":3308},[34,16615,16616],{"class":40},"        m_id",[34,16618,221],{"class":55},[34,16620,16621],{"class":40},"id;\n",[34,16623,16624],{"class":36,"line":3328},[34,16625,3841],{"class":40},[34,16627,16628],{"class":36,"line":3333},[34,16629,16630],{"class":161},"    \u002F\u002F打印学生信息\n",[34,16632,16633,16635,16637],{"class":36,"line":3347},[34,16634,16555],{"class":55},[34,16636,11265],{"class":3617},[34,16638,3630],{"class":40},[34,16640,16641],{"class":36,"line":3352},[34,16642,3684],{"class":40},[34,16644,16645,16647,16649,16652,16654,16657,16659,16661,16663,16666,16668,16671,16673],{"class":36,"line":3381},[34,16646,5104],{"class":40},[34,16648,2835],{"class":55},[34,16650,16651],{"class":504},"\"姓名：\"",[34,16653,2835],{"class":55},[34,16655,16656],{"class":40},"m_name",[34,16658,2835],{"class":55},[34,16660,6011],{"class":504},[34,16662,2835],{"class":55},[34,16664,16665],{"class":504},"\"学号：\"",[34,16667,2835],{"class":55},[34,16669,16670],{"class":40},"m_id",[34,16672,2835],{"class":55},[34,16674,2857],{"class":40},[34,16676,16677],{"class":36,"line":3386},[34,16678,3841],{"class":40},[34,16680,16681],{"class":36,"line":3403},[34,16682,5648],{"class":40},[34,16684,16685,16687,16689],{"class":36,"line":3408},[34,16686,571],{"class":55},[34,16688,3627],{"class":3617},[34,16690,3630],{"class":40},[34,16692,16693],{"class":36,"line":3413},[34,16694,3204],{"class":40},[34,16696,16697],{"class":36,"line":3418},[34,16698,16699],{"class":161},"    \u002F\u002F实例化\n",[34,16701,16702],{"class":36,"line":3432},[34,16703,16704],{"class":40},"    Student s1;\n",[34,16706,16707,16710,16713,16715,16717],{"class":36,"line":3437},[34,16708,16709],{"class":40},"    s1.",[34,16711,16712],{"class":3617},"setName",[34,16714,286],{"class":40},[34,16716,9566],{"class":504},[34,16718,4372],{"class":40},[34,16720,16721,16723,16726,16728,16731],{"class":36,"line":4230},[34,16722,16709],{"class":40},[34,16724,16725],{"class":3617},"setId",[34,16727,286],{"class":40},[34,16729,16730],{"class":44},"123456",[34,16732,4372],{"class":40},[34,16734,16735,16737,16740],{"class":36,"line":4244},[34,16736,16709],{"class":40},[34,16738,16739],{"class":3617},"printInfo",[34,16741,7286],{"class":40},[34,16743,16744],{"class":36,"line":4252},[34,16745,3223],{"class":40},[103,16747,16748],{},"类中的属性和行为统称为成员",[103,16750,16751],{},"属性：成员属性(成员变量)",[103,16753,16754],{},"方法：成员函数(成员方法)",[103,16756,16757],{},[1165,16758,16759],{},"封装意义二：",[103,16761,16762],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[103,16764,16765],{},"访问权限有三种：",[1772,16767,16768,16771,16774],{},[1775,16769,16770],{},"public        公共权限",[1775,16772,16773],{},"protected 保护权限",[1775,16775,16776],{},"private      私有权限",[103,16778,16779],{},[1165,16780,16781],{},"示例：",[24,16783,16785],{"className":11591,"code":16784,"language":11593,"meta":29,"style":29},"\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",[31,16786,16787,16792,16797,16802,16807,16811,16818,16822,16827,16831,16836,16840,16845,16850,16855,16859,16864,16869,16876,16880,16884,16892,16896,16907,16919,16931,16935,16939,16943,16951,16955,16960,16972,16980,16988,16992,17002,17006,17014],{"__ignoreMap":29},[34,16788,16789],{"class":36,"line":37},[34,16790,16791],{"class":161},"\u002F\u002F三种权限\n",[34,16793,16794],{"class":36,"line":165},[34,16795,16796],{"class":161},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[34,16798,16799],{"class":36,"line":171},[34,16800,16801],{"class":161},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[34,16803,16804],{"class":36,"line":182},[34,16805,16806],{"class":161},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[34,16808,16809],{"class":36,"line":188},[34,16810,1475],{"emptyLinePlaceholder":1474},[34,16812,16813,16815],{"class":36,"line":518},[34,16814,16340],{"class":55},[34,16816,16817],{"class":3617}," Person\n",[34,16819,16820],{"class":36,"line":524},[34,16821,3204],{"class":40},[34,16823,16824],{"class":36,"line":530},[34,16825,16826],{"class":161},"    \u002F\u002F姓名  公共权限\n",[34,16828,16829],{"class":36,"line":624},[34,16830,16362],{"class":55},[34,16832,16833],{"class":36,"line":630},[34,16834,16835],{"class":40},"    string m_Name;\n",[34,16837,16838],{"class":36,"line":636},[34,16839,1475],{"emptyLinePlaceholder":1474},[34,16841,16842],{"class":36,"line":1513},[34,16843,16844],{"class":161},"    \u002F\u002F汽车  保护权限\n",[34,16846,16847],{"class":36,"line":1519},[34,16848,16849],{"class":55},"protected:\n",[34,16851,16852],{"class":36,"line":3283},[34,16853,16854],{"class":40},"    string m_Car;\n",[34,16856,16857],{"class":36,"line":3297},[34,16858,1475],{"emptyLinePlaceholder":1474},[34,16860,16861],{"class":36,"line":3302},[34,16862,16863],{"class":161},"    \u002F\u002F银行卡密码  私有权限\n",[34,16865,16866],{"class":36,"line":3308},[34,16867,16868],{"class":55},"private:\n",[34,16870,16871,16873],{"class":36,"line":3328},[34,16872,3639],{"class":55},[34,16874,16875],{"class":40}," m_Password;\n",[34,16877,16878],{"class":36,"line":3333},[34,16879,1475],{"emptyLinePlaceholder":1474},[34,16881,16882],{"class":36,"line":3347},[34,16883,16362],{"class":55},[34,16885,16886,16888,16890],{"class":36,"line":3352},[34,16887,16555],{"class":55},[34,16889,13035],{"class":3617},[34,16891,3630],{"class":40},[34,16893,16894],{"class":36,"line":3381},[34,16895,3684],{"class":40},[34,16897,16898,16901,16903,16905],{"class":36,"line":3386},[34,16899,16900],{"class":40},"        m_Name ",[34,16902,221],{"class":55},[34,16904,10588],{"class":504},[34,16906,2952],{"class":40},[34,16908,16909,16912,16914,16917],{"class":36,"line":3403},[34,16910,16911],{"class":40},"        m_Car ",[34,16913,221],{"class":55},[34,16915,16916],{"class":504}," \"拖拉机\"",[34,16918,2952],{"class":40},[34,16920,16921,16924,16926,16929],{"class":36,"line":3408},[34,16922,16923],{"class":40},"        m_Password ",[34,16925,221],{"class":55},[34,16927,16928],{"class":44}," 123456",[34,16930,2952],{"class":40},[34,16932,16933],{"class":36,"line":3413},[34,16934,3841],{"class":40},[34,16936,16937],{"class":36,"line":3418},[34,16938,5648],{"class":40},[34,16940,16941],{"class":36,"line":3432},[34,16942,1475],{"emptyLinePlaceholder":1474},[34,16944,16945,16947,16949],{"class":36,"line":3437},[34,16946,571],{"class":55},[34,16948,3627],{"class":3617},[34,16950,12503],{"class":40},[34,16952,16953],{"class":36,"line":4230},[34,16954,1475],{"emptyLinePlaceholder":1474},[34,16956,16957],{"class":36,"line":4244},[34,16958,16959],{"class":40},"    Person p;\n",[34,16961,16962,16965,16967,16970],{"class":36,"line":4252},[34,16963,16964],{"class":40},"    p.m_Name ",[34,16966,221],{"class":55},[34,16968,16969],{"class":504}," \"李四\"",[34,16971,2952],{"class":40},[34,16973,16974,16977],{"class":36,"line":4257},[34,16975,16976],{"class":161},"    \u002F\u002Fp.m_Car = \"奔驰\";",[34,16978,16979],{"class":161},"  \u002F\u002F保护权限类外访问不到\n",[34,16981,16982,16985],{"class":36,"line":4263},[34,16983,16984],{"class":161},"    \u002F\u002Fp.m_Password = 123;",[34,16986,16987],{"class":161}," \u002F\u002F私有权限类外访问不到\n",[34,16989,16990],{"class":36,"line":4269},[34,16991,1475],{"emptyLinePlaceholder":1474},[34,16993,16994,16996,16998,17000],{"class":36,"line":4274},[34,16995,3957],{"class":3617},[34,16997,286],{"class":40},[34,16999,3962],{"class":504},[34,17001,4372],{"class":40},[34,17003,17004],{"class":36,"line":9598},[34,17005,1475],{"emptyLinePlaceholder":1474},[34,17007,17008,17010,17012],{"class":36,"line":9622},[34,17009,5743],{"class":55},[34,17011,98],{"class":44},[34,17013,2952],{"class":40},[34,17015,17016],{"class":36,"line":9627},[34,17017,3223],{"class":40},[19,17019,17021],{"id":17020},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[103,17023,17024,17025,17028,17029],{},"在C++中 struct和class唯一的",[1165,17026,17027],{},"区别","就在于 ",[1165,17030,17031],{},"默认的访问权限不同",[103,17033,17034],{},"区别：",[2798,17036,17037,17040],{},[1775,17038,17039],{},"struct 默认权限为公共",[1775,17041,17042],{},"class   默认权限为私有",[24,17044,17046],{"className":11591,"code":17045,"language":11593,"meta":29,"style":29},"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",[31,17047,17048,17055,17059,17069,17073,17077,17084,17088,17098,17102,17106,17114,17118,17123,17137,17141,17146,17160,17164,17174,17178,17186],{"__ignoreMap":29},[34,17049,17050,17052],{"class":36,"line":37},[34,17051,16340],{"class":55},[34,17053,17054],{"class":3617}," C1\n",[34,17056,17057],{"class":36,"line":165},[34,17058,3204],{"class":40},[34,17060,17061,17063,17066],{"class":36,"line":171},[34,17062,3639],{"class":55},[34,17064,17065],{"class":40},"  m_A;",[34,17067,17068],{"class":161}," \u002F\u002F默认是私有权限\n",[34,17070,17071],{"class":36,"line":182},[34,17072,5648],{"class":40},[34,17074,17075],{"class":36,"line":188},[34,17076,1475],{"emptyLinePlaceholder":1474},[34,17078,17079,17081],{"class":36,"line":518},[34,17080,9409],{"class":55},[34,17082,17083],{"class":3617}," C2\n",[34,17085,17086],{"class":36,"line":524},[34,17087,3204],{"class":40},[34,17089,17090,17092,17095],{"class":36,"line":530},[34,17091,3639],{"class":55},[34,17093,17094],{"class":40}," m_A;",[34,17096,17097],{"class":161},"  \u002F\u002F默认是公共权限\n",[34,17099,17100],{"class":36,"line":624},[34,17101,5648],{"class":40},[34,17103,17104],{"class":36,"line":630},[34,17105,1475],{"emptyLinePlaceholder":1474},[34,17107,17108,17110,17112],{"class":36,"line":636},[34,17109,571],{"class":55},[34,17111,3627],{"class":3617},[34,17113,12503],{"class":40},[34,17115,17116],{"class":36,"line":1513},[34,17117,1475],{"emptyLinePlaceholder":1474},[34,17119,17120],{"class":36,"line":1519},[34,17121,17122],{"class":40},"    C1 c1;\n",[34,17124,17125,17128,17130,17132,17134],{"class":36,"line":3283},[34,17126,17127],{"class":40},"    c1.m_A ",[34,17129,221],{"class":55},[34,17131,3692],{"class":44},[34,17133,1870],{"class":40},[34,17135,17136],{"class":161}," \u002F\u002F错误，访问权限是私有\n",[34,17138,17139],{"class":36,"line":3297},[34,17140,1475],{"emptyLinePlaceholder":1474},[34,17142,17143],{"class":36,"line":3302},[34,17144,17145],{"class":40},"    C2 c2;\n",[34,17147,17148,17151,17153,17155,17157],{"class":36,"line":3308},[34,17149,17150],{"class":40},"    c2.m_A ",[34,17152,221],{"class":55},[34,17154,3692],{"class":44},[34,17156,1870],{"class":40},[34,17158,17159],{"class":161}," \u002F\u002F正确，访问权限是公共\n",[34,17161,17162],{"class":36,"line":3328},[34,17163,1475],{"emptyLinePlaceholder":1474},[34,17165,17166,17168,17170,17172],{"class":36,"line":3333},[34,17167,3957],{"class":3617},[34,17169,286],{"class":40},[34,17171,3962],{"class":504},[34,17173,4372],{"class":40},[34,17175,17176],{"class":36,"line":3347},[34,17177,1475],{"emptyLinePlaceholder":1474},[34,17179,17180,17182,17184],{"class":36,"line":3352},[34,17181,5743],{"class":55},[34,17183,98],{"class":44},[34,17185,2952],{"class":40},[34,17187,17188],{"class":36,"line":3381},[34,17189,3223],{"class":40},[19,17191,17193],{"id":17192},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[103,17195,17196],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[103,17198,17199],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[103,17201,17202],{},[1165,17203,16781],{},[24,17205,17207],{"className":11591,"code":17206,"language":11593,"meta":29,"style":29},"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",[31,17208,17209,17219,17223,17227,17232,17246,17255,17259,17269,17273,17280,17284,17288,17292,17297,17306,17313,17317,17322,17338,17361,17374,17381,17385,17394,17398,17402,17407,17423,17433,17437,17441,17445,17453,17457,17467,17471,17479,17483,17487,17495,17499,17503,17508,17521,17544,17548,17553,17566,17588,17592,17597,17611,17619,17623,17633,17637,17645],{"__ignoreMap":29},[34,17210,17211,17213,17216],{"class":36,"line":37},[34,17212,16340],{"class":55},[34,17214,17215],{"class":3617}," Person",[34,17217,17218],{"class":40}," {\n",[34,17220,17221],{"class":36,"line":165},[34,17222,16362],{"class":55},[34,17224,17225],{"class":36,"line":171},[34,17226,1475],{"emptyLinePlaceholder":1474},[34,17228,17229],{"class":36,"line":182},[34,17230,17231],{"class":161},"    \u002F\u002F姓名设置可读可写\n",[34,17233,17234,17236,17238,17240,17242,17244],{"class":36,"line":188},[34,17235,16555],{"class":55},[34,17237,16558],{"class":3617},[34,17239,286],{"class":40},[34,17241,16563],{"class":3617},[34,17243,16566],{"class":51},[34,17245,14090],{"class":40},[34,17247,17248,17250,17252],{"class":36,"line":518},[34,17249,16900],{"class":40},[34,17251,221],{"class":55},[34,17253,17254],{"class":40}," name;\n",[34,17256,17257],{"class":36,"line":524},[34,17258,3841],{"class":40},[34,17260,17261,17264,17267],{"class":36,"line":530},[34,17262,17263],{"class":3617},"    string",[34,17265,17266],{"class":3617}," getName",[34,17268,3630],{"class":40},[34,17270,17271],{"class":36,"line":624},[34,17272,3684],{"class":40},[34,17274,17275,17277],{"class":36,"line":630},[34,17276,16398],{"class":55},[34,17278,17279],{"class":40}," m_Name;\n",[34,17281,17282],{"class":36,"line":636},[34,17283,3841],{"class":40},[34,17285,17286],{"class":36,"line":1513},[34,17287,1475],{"emptyLinePlaceholder":1474},[34,17289,17290],{"class":36,"line":1519},[34,17291,1475],{"emptyLinePlaceholder":1474},[34,17293,17294],{"class":36,"line":3283},[34,17295,17296],{"class":161},"    \u002F\u002F获取年龄 \n",[34,17298,17299,17301,17304],{"class":36,"line":3297},[34,17300,3639],{"class":55},[34,17302,17303],{"class":3617}," getAge",[34,17305,12503],{"class":40},[34,17307,17308,17310],{"class":36,"line":3302},[34,17309,16398],{"class":55},[34,17311,17312],{"class":40}," m_Age;\n",[34,17314,17315],{"class":36,"line":3308},[34,17316,3841],{"class":40},[34,17318,17319],{"class":36,"line":3328},[34,17320,17321],{"class":161},"    \u002F\u002F设置年龄\n",[34,17323,17324,17326,17329,17331,17333,17336],{"class":36,"line":3333},[34,17325,16555],{"class":55},[34,17327,17328],{"class":3617}," setAge",[34,17330,286],{"class":40},[34,17332,571],{"class":55},[34,17334,17335],{"class":51}," age",[34,17337,14090],{"class":40},[34,17339,17340,17342,17345,17347,17349,17351,17354,17356,17359],{"class":36,"line":3347},[34,17341,4150],{"class":55},[34,17343,17344],{"class":40}," (age ",[34,17346,2701],{"class":55},[34,17348,98],{"class":44},[34,17350,4908],{"class":55},[34,17352,17353],{"class":40}," age ",[34,17355,2751],{"class":55},[34,17357,17358],{"class":44}," 150",[34,17360,14090],{"class":40},[34,17362,17363,17365,17367,17370,17372],{"class":36,"line":3352},[34,17364,11369],{"class":40},[34,17366,2835],{"class":55},[34,17368,17369],{"class":504}," \"你个老妖精!\"",[34,17371,3103],{"class":55},[34,17373,10490],{"class":40},[34,17375,17376,17379],{"class":36,"line":3381},[34,17377,17378],{"class":55},"            return",[34,17380,2952],{"class":40},[34,17382,17383],{"class":36,"line":3386},[34,17384,4182],{"class":40},[34,17386,17387,17390,17392],{"class":36,"line":3403},[34,17388,17389],{"class":40},"        m_Age ",[34,17391,221],{"class":55},[34,17393,9447],{"class":40},[34,17395,17396],{"class":36,"line":3408},[34,17397,3841],{"class":40},[34,17399,17400],{"class":36,"line":3413},[34,17401,1475],{"emptyLinePlaceholder":1474},[34,17403,17404],{"class":36,"line":3418},[34,17405,17406],{"class":161},"    \u002F\u002F情人设置为只写\n",[34,17408,17409,17411,17414,17416,17418,17421],{"class":36,"line":3432},[34,17410,16555],{"class":55},[34,17412,17413],{"class":3617}," setLover",[34,17415,286],{"class":40},[34,17417,16563],{"class":3617},[34,17419,17420],{"class":51}," lover",[34,17422,14090],{"class":40},[34,17424,17425,17428,17430],{"class":36,"line":3437},[34,17426,17427],{"class":40},"        m_Lover ",[34,17429,221],{"class":55},[34,17431,17432],{"class":40}," lover;\n",[34,17434,17435],{"class":36,"line":4230},[34,17436,3841],{"class":40},[34,17438,17439],{"class":36,"line":4244},[34,17440,1475],{"emptyLinePlaceholder":1474},[34,17442,17443],{"class":36,"line":4252},[34,17444,16868],{"class":55},[34,17446,17447,17450],{"class":36,"line":4257},[34,17448,17449],{"class":40},"    string m_Name;",[34,17451,17452],{"class":161}," \u002F\u002F可读可写  姓名\n",[34,17454,17455],{"class":36,"line":4263},[34,17456,14858],{"class":40},[34,17458,17459,17461,17464],{"class":36,"line":4269},[34,17460,3639],{"class":55},[34,17462,17463],{"class":40}," m_Age;",[34,17465,17466],{"class":161}," \u002F\u002F只读  年龄\n",[34,17468,17469],{"class":36,"line":4274},[34,17470,1475],{"emptyLinePlaceholder":1474},[34,17472,17473,17476],{"class":36,"line":9598},[34,17474,17475],{"class":40},"    string m_Lover;",[34,17477,17478],{"class":161}," \u002F\u002F只写  情人\n",[34,17480,17481],{"class":36,"line":9622},[34,17482,5648],{"class":40},[34,17484,17485],{"class":36,"line":9627},[34,17486,1475],{"emptyLinePlaceholder":1474},[34,17488,17489,17491,17493],{"class":36,"line":9633},[34,17490,571],{"class":55},[34,17492,3627],{"class":3617},[34,17494,12503],{"class":40},[34,17496,17497],{"class":36,"line":9660},[34,17498,1475],{"emptyLinePlaceholder":1474},[34,17500,17501],{"class":36,"line":9665},[34,17502,16959],{"class":40},[34,17504,17505],{"class":36,"line":9671},[34,17506,17507],{"class":161},"    \u002F\u002F姓名设置\n",[34,17509,17510,17513,17515,17517,17519],{"class":36,"line":9683},[34,17511,17512],{"class":40},"    p.",[34,17514,16712],{"class":3617},[34,17516,286],{"class":40},[34,17518,9566],{"class":504},[34,17520,4372],{"class":40},[34,17522,17523,17525,17527,17530,17532,17535,17538,17540,17542],{"class":36,"line":9695},[34,17524,8179],{"class":40},[34,17526,2835],{"class":55},[34,17528,17529],{"class":504}," \"姓名： \"",[34,17531,3103],{"class":55},[34,17533,17534],{"class":40}," p.",[34,17536,17537],{"class":3617},"getName",[34,17539,14698],{"class":40},[34,17541,2835],{"class":55},[34,17543,10490],{"class":40},[34,17545,17546],{"class":36,"line":9707},[34,17547,1475],{"emptyLinePlaceholder":1474},[34,17549,17550],{"class":36,"line":11366},[34,17551,17552],{"class":161},"    \u002F\u002F年龄设置\n",[34,17554,17555,17557,17560,17562,17564],{"class":36,"line":11391},[34,17556,17512],{"class":40},[34,17558,17559],{"class":3617},"setAge",[34,17561,286],{"class":40},[34,17563,2451],{"class":44},[34,17565,4372],{"class":40},[34,17567,17568,17570,17572,17575,17577,17579,17582,17584,17586],{"class":36,"line":11414},[34,17569,8179],{"class":40},[34,17571,2835],{"class":55},[34,17573,17574],{"class":504}," \"年龄： \"",[34,17576,3103],{"class":55},[34,17578,17534],{"class":40},[34,17580,17581],{"class":3617},"getAge",[34,17583,14698],{"class":40},[34,17585,2835],{"class":55},[34,17587,10490],{"class":40},[34,17589,17590],{"class":36,"line":11438},[34,17591,1475],{"emptyLinePlaceholder":1474},[34,17593,17594],{"class":36,"line":11443},[34,17595,17596],{"class":161},"    \u002F\u002F情人设置\n",[34,17598,17599,17601,17604,17606,17609],{"class":36,"line":11448},[34,17600,17512],{"class":40},[34,17602,17603],{"class":3617},"setLover",[34,17605,286],{"class":40},[34,17607,17608],{"class":504},"\"苍井\"",[34,17610,4372],{"class":40},[34,17612,17613,17616],{"class":36,"line":11453},[34,17614,17615],{"class":161},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[34,17617,17618],{"class":161},"  \u002F\u002F只写属性，不可以读取\n",[34,17620,17621],{"class":36,"line":11462},[34,17622,1475],{"emptyLinePlaceholder":1474},[34,17624,17625,17627,17629,17631],{"class":36,"line":11467},[34,17626,3957],{"class":3617},[34,17628,286],{"class":40},[34,17630,3962],{"class":504},[34,17632,4372],{"class":40},[34,17634,17635],{"class":36,"line":11473},[34,17636,1475],{"emptyLinePlaceholder":1474},[34,17638,17639,17641,17643],{"class":36,"line":11494},[34,17640,5743],{"class":55},[34,17642,98],{"class":44},[34,17644,2952],{"class":40},[34,17646,17647],{"class":36,"line":11500},[34,17648,3223],{"class":40},[19,17650,17652],{"id":17651},"_814封装案例","8.1.4封装案例",[1772,17654,17655],{},[1775,17656,17657,17660],{},[1165,17658,17659],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[2798,17662,17663,17666],{},[1775,17664,17665],{},"求出立方体的面积和体积",[1775,17667,17668],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[24,17670,17672],{"className":1809,"code":17671,"language":1811,"meta":29,"style":29},"#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",[31,17673,17674,17680,17690,17697,17701,17705,17710,17740,17744,17754,17764,17774,17778,17787,17791,17827,17831,17840,17844,17860,17864,17869,17878,17882,17889,17893,17902,17906,17913,17917,17926,17930,17937,17941,17946,17963,17967,18013,18017,18026,18030,18034,18038,18047,18051,18055,18060,18064,18070,18076,18082,18086,18090,18095,18117,18121,18175,18179,18187,18191,18196,18201,18214,18221,18237,18248,18254,18277,18283,18306,18320,18340,18346,18357,18380,18402,18407,18413,18427,18440,18445,18459,18464,18470,18475,18489,18494,18499,18513,18525,18530,18543,18548,18553,18558,18571,18576],{"__ignoreMap":29},[34,17675,17676,17678],{"class":36,"line":37},[34,17677,3603],{"class":55},[34,17679,3606],{"class":504},[34,17681,17682,17684,17686,17688],{"class":36,"line":165},[34,17683,3611],{"class":55},[34,17685,3614],{"class":55},[34,17687,3618],{"class":3617},[34,17689,2952],{"class":40},[34,17691,17692,17694],{"class":36,"line":171},[34,17693,16340],{"class":55},[34,17695,17696],{"class":3617}," Cube\n",[34,17698,17699],{"class":36,"line":182},[34,17700,3204],{"class":40},[34,17702,17703],{"class":36,"line":188},[34,17704,16362],{"class":55},[34,17706,17707],{"class":36,"line":518},[34,17708,17709],{"class":161},"    \u002F\u002F输入长宽高\n",[34,17711,17712,17714,17717,17719,17721,17724,17726,17728,17731,17733,17735,17738],{"class":36,"line":524},[34,17713,16555],{"class":55},[34,17715,17716],{"class":3617}," setLwh",[34,17718,286],{"class":40},[34,17720,571],{"class":55},[34,17722,17723],{"class":51}," l",[34,17725,291],{"class":40},[34,17727,571],{"class":55},[34,17729,17730],{"class":51}," w",[34,17732,291],{"class":40},[34,17734,571],{"class":55},[34,17736,17737],{"class":51}," h",[34,17739,101],{"class":40},[34,17741,17742],{"class":36,"line":530},[34,17743,3684],{"class":40},[34,17745,17746,17749,17751],{"class":36,"line":624},[34,17747,17748],{"class":40},"        m_L",[34,17750,221],{"class":55},[34,17752,17753],{"class":40},"l;\n",[34,17755,17756,17759,17761],{"class":36,"line":630},[34,17757,17758],{"class":40},"        m_W",[34,17760,221],{"class":55},[34,17762,17763],{"class":40},"w;\n",[34,17765,17766,17769,17771],{"class":36,"line":636},[34,17767,17768],{"class":40},"        m_H",[34,17770,221],{"class":55},[34,17772,17773],{"class":40},"h;\n",[34,17775,17776],{"class":36,"line":1513},[34,17777,3841],{"class":40},[34,17779,17780,17782,17785],{"class":36,"line":1519},[34,17781,3639],{"class":55},[34,17783,17784],{"class":3617}," mianji",[34,17786,3630],{"class":40},[34,17788,17789],{"class":36,"line":3283},[34,17790,3684],{"class":40},[34,17792,17793,17795,17797,17799,17802,17804,17807,17809,17812,17814,17817,17819,17822,17824],{"class":36,"line":3297},[34,17794,16398],{"class":55},[34,17796,16401],{"class":44},[34,17798,2252],{"class":55},[34,17800,17801],{"class":40},"(m_L",[34,17803,2252],{"class":55},[34,17805,17806],{"class":40},"m_W ",[34,17808,2277],{"class":55},[34,17810,17811],{"class":40}," m_L",[34,17813,2252],{"class":55},[34,17815,17816],{"class":40},"m_H ",[34,17818,2277],{"class":55},[34,17820,17821],{"class":40}," m_W",[34,17823,2252],{"class":55},[34,17825,17826],{"class":40},"m_H);\n",[34,17828,17829],{"class":36,"line":3302},[34,17830,3841],{"class":40},[34,17832,17833,17835,17838],{"class":36,"line":3308},[34,17834,3639],{"class":55},[34,17836,17837],{"class":3617}," tiji",[34,17839,3630],{"class":40},[34,17841,17842],{"class":36,"line":3328},[34,17843,3684],{"class":40},[34,17845,17846,17848,17850,17852,17855,17857],{"class":36,"line":3333},[34,17847,16398],{"class":55},[34,17849,17811],{"class":40},[34,17851,2252],{"class":55},[34,17853,17854],{"class":40},"m_W",[34,17856,2252],{"class":55},[34,17858,17859],{"class":40},"m_H;\n",[34,17861,17862],{"class":36,"line":3347},[34,17863,3841],{"class":40},[34,17865,17866],{"class":36,"line":3352},[34,17867,17868],{"class":161},"    \u002F\u002F获取长宽高\n",[34,17870,17871,17873,17876],{"class":36,"line":3381},[34,17872,3639],{"class":55},[34,17874,17875],{"class":3617}," getLength",[34,17877,3630],{"class":40},[34,17879,17880],{"class":36,"line":3386},[34,17881,3684],{"class":40},[34,17883,17884,17886],{"class":36,"line":3403},[34,17885,16398],{"class":55},[34,17887,17888],{"class":40}," m_L;\n",[34,17890,17891],{"class":36,"line":3408},[34,17892,3841],{"class":40},[34,17894,17895,17897,17900],{"class":36,"line":3413},[34,17896,3639],{"class":55},[34,17898,17899],{"class":3617}," getWidth",[34,17901,3630],{"class":40},[34,17903,17904],{"class":36,"line":3418},[34,17905,3684],{"class":40},[34,17907,17908,17910],{"class":36,"line":3432},[34,17909,16398],{"class":55},[34,17911,17912],{"class":40}," m_W;\n",[34,17914,17915],{"class":36,"line":3437},[34,17916,3841],{"class":40},[34,17918,17919,17921,17924],{"class":36,"line":4230},[34,17920,3639],{"class":55},[34,17922,17923],{"class":3617}," getHeight",[34,17925,3630],{"class":40},[34,17927,17928],{"class":36,"line":4244},[34,17929,3684],{"class":40},[34,17931,17932,17934],{"class":36,"line":4252},[34,17933,16398],{"class":55},[34,17935,17936],{"class":40}," m_H;\n",[34,17938,17939],{"class":36,"line":4257},[34,17940,3841],{"class":40},[34,17942,17943],{"class":36,"line":4263},[34,17944,17945],{"class":161},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[34,17947,17948,17951,17954,17956,17959,17961],{"class":36,"line":4269},[34,17949,17950],{"class":55},"    bool",[34,17952,17953],{"class":3617}," isEqual",[34,17955,286],{"class":40},[34,17957,17958],{"class":3617},"Cube",[34,17960,4502],{"class":51},[34,17962,101],{"class":40},[34,17964,17965],{"class":36,"line":4274},[34,17966,3684],{"class":40},[34,17968,17969,17971,17974,17977,17979,17981,17984,17986,17989,17992,17994,17996,17999,18001,18003,18006,18008,18010],{"class":36,"line":9598},[34,17970,4150],{"class":55},[34,17972,17973],{"class":40}," (c.",[34,17975,17976],{"class":3617},"getLength",[34,17978,14698],{"class":40},[34,17980,4602],{"class":55},[34,17982,17983],{"class":40}," m_L ",[34,17985,3369],{"class":55},[34,17987,17988],{"class":40}," c.",[34,17990,17991],{"class":3617},"getWidth",[34,17993,14698],{"class":40},[34,17995,4602],{"class":55},[34,17997,17998],{"class":40}," m_W ",[34,18000,3369],{"class":55},[34,18002,17988],{"class":40},[34,18004,18005],{"class":3617},"getHeight",[34,18007,14698],{"class":40},[34,18009,4602],{"class":55},[34,18011,18012],{"class":40}," m_H)\n",[34,18014,18015],{"class":36,"line":9622},[34,18016,4163],{"class":40},[34,18018,18019,18021,18024],{"class":36,"line":9627},[34,18020,17378],{"class":55},[34,18022,18023],{"class":44}," true",[34,18025,2952],{"class":40},[34,18027,18028],{"class":36,"line":9633},[34,18029,4182],{"class":40},[34,18031,18032],{"class":36,"line":9660},[34,18033,4223],{"class":55},[34,18035,18036],{"class":36,"line":9665},[34,18037,4163],{"class":40},[34,18039,18040,18042,18045],{"class":36,"line":9671},[34,18041,17378],{"class":55},[34,18043,18044],{"class":44}," false",[34,18046,2952],{"class":40},[34,18048,18049],{"class":36,"line":9683},[34,18050,4182],{"class":40},[34,18052,18053],{"class":36,"line":9695},[34,18054,3841],{"class":40},[34,18056,18057],{"class":36,"line":9707},[34,18058,18059],{"class":161},"    \u002F\u002F私有属性\n",[34,18061,18062],{"class":36,"line":11366},[34,18063,16868],{"class":55},[34,18065,18066,18068],{"class":36,"line":11391},[34,18067,3639],{"class":55},[34,18069,17888],{"class":40},[34,18071,18072,18074],{"class":36,"line":11414},[34,18073,3639],{"class":55},[34,18075,17912],{"class":40},[34,18077,18078,18080],{"class":36,"line":11438},[34,18079,3639],{"class":55},[34,18081,17936],{"class":40},[34,18083,18084],{"class":36,"line":11443},[34,18085,1475],{"emptyLinePlaceholder":1474},[34,18087,18088],{"class":36,"line":11448},[34,18089,5648],{"class":40},[34,18091,18092],{"class":36,"line":11453},[34,18093,18094],{"class":161},"\u002F\u002F全局函数判断两个立方体是否相等\n",[34,18096,18097,18099,18101,18103,18105,18108,18110,18112,18115],{"class":36,"line":11462},[34,18098,3013],{"class":55},[34,18100,17953],{"class":3617},[34,18102,286],{"class":40},[34,18104,17958],{"class":3617},[34,18106,18107],{"class":51}," c1",[34,18109,291],{"class":40},[34,18111,17958],{"class":3617},[34,18113,18114],{"class":51}," c2",[34,18116,101],{"class":40},[34,18118,18119],{"class":36,"line":11467},[34,18120,3204],{"class":40},[34,18122,18123,18125,18128,18130,18132,18134,18137,18139,18142,18144,18146,18148,18150,18152,18154,18156,18158,18160,18162,18164,18166,18168,18170,18172],{"class":36,"line":11473},[34,18124,5743],{"class":55},[34,18126,18127],{"class":40}," (c1.",[34,18129,17976],{"class":3617},[34,18131,14698],{"class":40},[34,18133,4602],{"class":55},[34,18135,18136],{"class":40}," c2.",[34,18138,17976],{"class":3617},[34,18140,18141],{"class":40},"()) ",[34,18143,3369],{"class":55},[34,18145,18127],{"class":40},[34,18147,17991],{"class":3617},[34,18149,14698],{"class":40},[34,18151,4602],{"class":55},[34,18153,18136],{"class":40},[34,18155,17991],{"class":3617},[34,18157,18141],{"class":40},[34,18159,3369],{"class":55},[34,18161,18127],{"class":40},[34,18163,18005],{"class":3617},[34,18165,14698],{"class":40},[34,18167,4602],{"class":55},[34,18169,18136],{"class":40},[34,18171,18005],{"class":3617},[34,18173,18174],{"class":40},"());\n",[34,18176,18177],{"class":36,"line":11494},[34,18178,3223],{"class":40},[34,18180,18181,18183,18185],{"class":36,"line":11500},[34,18182,571],{"class":55},[34,18184,3627],{"class":3617},[34,18186,3630],{"class":40},[34,18188,18189],{"class":36,"line":11514},[34,18190,3204],{"class":40},[34,18192,18193],{"class":36,"line":11520},[34,18194,18195],{"class":40},"    Cube c1;\n",[34,18197,18198],{"class":36,"line":11547},[34,18199,18200],{"class":161},"    \u002F\u002F输入立方体的长宽高\n",[34,18202,18203,18205,18207,18210,18212],{"class":36,"line":11556},[34,18204,3209],{"class":40},[34,18206,2835],{"class":55},[34,18208,18209],{"class":504},"\"请输入第一个立方体的长、宽、高：\"",[34,18211,2835],{"class":55},[34,18213,2857],{"class":40},[34,18215,18216,18218],{"class":36,"line":11562},[34,18217,3639],{"class":55},[34,18219,18220],{"class":40}," l,w,h,l1,w1,h1;\n",[34,18222,18223,18225,18227,18229,18231,18233,18235],{"class":36,"line":11570},[34,18224,3666],{"class":40},[34,18226,3088],{"class":55},[34,18228,2313],{"class":40},[34,18230,3088],{"class":55},[34,18232,2588],{"class":40},[34,18234,3088],{"class":55},[34,18236,17773],{"class":40},[34,18238,18239,18242,18245],{"class":36,"line":11575},[34,18240,18241],{"class":40},"    c1.",[34,18243,18244],{"class":3617},"setLwh",[34,18246,18247],{"class":40},"(l,w,h);\n",[34,18249,18251],{"class":36,"line":18250},66,[34,18252,18253],{"class":161},"    \u002F\u002F面积\n",[34,18255,18257,18259,18261,18264,18266,18268,18271,18273,18275],{"class":36,"line":18256},67,[34,18258,3209],{"class":40},[34,18260,2835],{"class":55},[34,18262,18263],{"class":504},"\"立方体的表面积为：\"",[34,18265,2835],{"class":55},[34,18267,16476],{"class":40},[34,18269,18270],{"class":3617},"mianji",[34,18272,4080],{"class":40},[34,18274,2835],{"class":55},[34,18276,2857],{"class":40},[34,18278,18280],{"class":36,"line":18279},68,[34,18281,18282],{"class":161},"    \u002F\u002F体积\n",[34,18284,18286,18288,18290,18293,18295,18297,18300,18302,18304],{"class":36,"line":18285},69,[34,18287,3209],{"class":40},[34,18289,2835],{"class":55},[34,18291,18292],{"class":504},"\"立方体的体积为：\"",[34,18294,2835],{"class":55},[34,18296,16476],{"class":40},[34,18298,18299],{"class":3617},"tiji",[34,18301,4080],{"class":40},[34,18303,2835],{"class":55},[34,18305,2857],{"class":40},[34,18307,18309,18311,18313,18316,18318],{"class":36,"line":18308},70,[34,18310,3209],{"class":40},[34,18312,2835],{"class":55},[34,18314,18315],{"class":504},"\"请输入第二个立方体的长、宽、高：\"",[34,18317,2835],{"class":55},[34,18319,2857],{"class":40},[34,18321,18323,18325,18327,18330,18332,18335,18337],{"class":36,"line":18322},71,[34,18324,3666],{"class":40},[34,18326,3088],{"class":55},[34,18328,18329],{"class":40},"l1",[34,18331,3088],{"class":55},[34,18333,18334],{"class":40},"w1",[34,18336,3088],{"class":55},[34,18338,18339],{"class":40},"h1;\n",[34,18341,18343],{"class":36,"line":18342},72,[34,18344,18345],{"class":40},"    Cube c2;\n",[34,18347,18349,18352,18354],{"class":36,"line":18348},73,[34,18350,18351],{"class":40},"    c2.",[34,18353,18244],{"class":3617},[34,18355,18356],{"class":40},"(l1,w1,h1);\n",[34,18358,18360,18362,18364,18367,18369,18372,18374,18376,18378],{"class":36,"line":18359},74,[34,18361,3209],{"class":40},[34,18363,2835],{"class":55},[34,18365,18366],{"class":504},"\"第二个立方体的表面积为：\"",[34,18368,2835],{"class":55},[34,18370,18371],{"class":40},"c2.",[34,18373,18270],{"class":3617},[34,18375,4080],{"class":40},[34,18377,2835],{"class":55},[34,18379,2857],{"class":40},[34,18381,18383,18385,18387,18390,18392,18394,18396,18398,18400],{"class":36,"line":18382},75,[34,18384,3209],{"class":40},[34,18386,2835],{"class":55},[34,18388,18389],{"class":504},"\"第二个立方体的体积为：\"",[34,18391,2835],{"class":55},[34,18393,18371],{"class":40},[34,18395,18299],{"class":3617},[34,18397,4080],{"class":40},[34,18399,2835],{"class":55},[34,18401,2857],{"class":40},[34,18403,18405],{"class":36,"line":18404},76,[34,18406,1475],{"emptyLinePlaceholder":1474},[34,18408,18410],{"class":36,"line":18409},77,[34,18411,18412],{"class":161},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[34,18414,18416,18418,18420,18423,18425],{"class":36,"line":18415},78,[34,18417,3209],{"class":40},[34,18419,2835],{"class":55},[34,18421,18422],{"class":504},"\"内部函数判断结果：\"",[34,18424,2835],{"class":55},[34,18426,2857],{"class":40},[34,18428,18430,18432,18434,18437],{"class":36,"line":18429},79,[34,18431,4754],{"class":55},[34,18433,18127],{"class":40},[34,18435,18436],{"class":3617},"isEqual",[34,18438,18439],{"class":40},"(c2))\n",[34,18441,18443],{"class":36,"line":18442},80,[34,18444,3684],{"class":40},[34,18446,18448,18450,18452,18455,18457],{"class":36,"line":18447},81,[34,18449,5104],{"class":40},[34,18451,2835],{"class":55},[34,18453,18454],{"class":504},"\"两个立方体相等\"",[34,18456,2835],{"class":55},[34,18458,2857],{"class":40},[34,18460,18462],{"class":36,"line":18461},82,[34,18463,3841],{"class":40},[34,18465,18467],{"class":36,"line":18466},83,[34,18468,18469],{"class":55},"    else\n",[34,18471,18473],{"class":36,"line":18472},84,[34,18474,3684],{"class":40},[34,18476,18478,18480,18482,18485,18487],{"class":36,"line":18477},85,[34,18479,5104],{"class":40},[34,18481,2835],{"class":55},[34,18483,18484],{"class":504},"\"两个立方体不相等\"",[34,18486,2835],{"class":55},[34,18488,2857],{"class":40},[34,18490,18492],{"class":36,"line":18491},86,[34,18493,3841],{"class":40},[34,18495,18497],{"class":36,"line":18496},87,[34,18498,1475],{"emptyLinePlaceholder":1474},[34,18500,18502,18504,18506,18509,18511],{"class":36,"line":18501},88,[34,18503,3209],{"class":40},[34,18505,2835],{"class":55},[34,18507,18508],{"class":504},"\"全局函数判断结果：\"",[34,18510,2835],{"class":55},[34,18512,2857],{"class":40},[34,18514,18516,18518,18520,18522],{"class":36,"line":18515},89,[34,18517,4754],{"class":55},[34,18519,3313],{"class":40},[34,18521,18436],{"class":3617},[34,18523,18524],{"class":40},"(c1, c2))\n",[34,18526,18528],{"class":36,"line":18527},90,[34,18529,3684],{"class":40},[34,18531,18533,18535,18537,18539,18541],{"class":36,"line":18532},91,[34,18534,5104],{"class":40},[34,18536,2835],{"class":55},[34,18538,18454],{"class":504},[34,18540,2835],{"class":55},[34,18542,2857],{"class":40},[34,18544,18546],{"class":36,"line":18545},92,[34,18547,3841],{"class":40},[34,18549,18551],{"class":36,"line":18550},93,[34,18552,18469],{"class":55},[34,18554,18556],{"class":36,"line":18555},94,[34,18557,3684],{"class":40},[34,18559,18561,18563,18565,18567,18569],{"class":36,"line":18560},95,[34,18562,5104],{"class":40},[34,18564,2835],{"class":55},[34,18566,18484],{"class":504},[34,18568,2835],{"class":55},[34,18570,2857],{"class":40},[34,18572,18574],{"class":36,"line":18573},96,[34,18575,3841],{"class":40},[34,18577,18579],{"class":36,"line":18578},97,[34,18580,3223],{"class":40},[1772,18582,18583],{"start":165},[1775,18584,18585],{},[1165,18586,18587],{},"练习案例2：点和圆的关系",[2798,18589,18590],{},[1775,18591,18592],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[24,18594,18596],{"className":1809,"code":18595,"language":1811,"meta":29,"style":29},"#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",[31,18597,18598,18604,18614,18621,18628,18632,18636,18641,18675,18680,18696,18710,18714,18718,18725,18732,18736,18742,18746,18750,18754,18776,18799,18804,18818,18833,18837,18841,18847,18852,18857,18861,18887,18891,18921,18949,18977,18994,18998,19011,19015,19019,19023,19036,19040,19044,19052,19056,19060,19064,19069,19073,19084,19091,19100,19110,19121,19128,19141,19152,19162,19173,19180,19194,19199,19209,19217],{"__ignoreMap":29},[34,18599,18600,18602],{"class":36,"line":37},[34,18601,3603],{"class":55},[34,18603,3606],{"class":504},[34,18605,18606,18608,18610,18612],{"class":36,"line":165},[34,18607,3611],{"class":55},[34,18609,3614],{"class":55},[34,18611,3618],{"class":3617},[34,18613,2952],{"class":40},[34,18615,18616,18618],{"class":36,"line":171},[34,18617,3603],{"class":55},[34,18619,18620],{"class":504},"\u003Ccmath>\n",[34,18622,18623,18625],{"class":36,"line":182},[34,18624,16340],{"class":55},[34,18626,18627],{"class":3617}," Point\n",[34,18629,18630],{"class":36,"line":188},[34,18631,3204],{"class":40},[34,18633,18634],{"class":36,"line":518},[34,18635,16362],{"class":55},[34,18637,18638],{"class":36,"line":524},[34,18639,18640],{"class":161},"    \u002F\u002F赋值\n",[34,18642,18643,18645,18648,18650,18652,18655,18657,18659,18662,18665,18667,18670,18672],{"class":36,"line":530},[34,18644,16555],{"class":55},[34,18646,18647],{"class":3617}," setPoint",[34,18649,286],{"class":40},[34,18651,15683],{"class":55},[34,18653,18654],{"class":51}," x",[34,18656,48],{"class":40},[34,18658,15683],{"class":55},[34,18660,18661],{"class":51}," y",[34,18663,18664],{"class":40},") { m_x ",[34,18666,221],{"class":55},[34,18668,18669],{"class":40}," x; m_y ",[34,18671,221],{"class":55},[34,18673,18674],{"class":40}," y; }\n",[34,18676,18677],{"class":36,"line":624},[34,18678,18679],{"class":161},"    \u002F\u002F获取坐标\n",[34,18681,18682,18684,18687,18690,18693],{"class":36,"line":630},[34,18683,16384],{"class":55},[34,18685,18686],{"class":3617}," getX",[34,18688,18689],{"class":40},"() { ",[34,18691,18692],{"class":55},"return",[34,18694,18695],{"class":40}," m_x; }\n",[34,18697,18698,18700,18703,18705,18707],{"class":36,"line":636},[34,18699,16384],{"class":55},[34,18701,18702],{"class":3617}," getY",[34,18704,18689],{"class":40},[34,18706,18692],{"class":55},[34,18708,18709],{"class":40}," m_y; }\n",[34,18711,18712],{"class":36,"line":1513},[34,18713,1475],{"emptyLinePlaceholder":1474},[34,18715,18716],{"class":36,"line":1519},[34,18717,16868],{"class":55},[34,18719,18720,18722],{"class":36,"line":3283},[34,18721,16384],{"class":55},[34,18723,18724],{"class":40}," m_x;\n",[34,18726,18727,18729],{"class":36,"line":3297},[34,18728,16384],{"class":55},[34,18730,18731],{"class":40}," m_y;\n",[34,18733,18734],{"class":36,"line":3302},[34,18735,5648],{"class":40},[34,18737,18738,18740],{"class":36,"line":3308},[34,18739,16340],{"class":55},[34,18741,16343],{"class":3617},[34,18743,18744],{"class":36,"line":3328},[34,18745,3204],{"class":40},[34,18747,18748],{"class":36,"line":3333},[34,18749,16362],{"class":55},[34,18751,18752],{"class":36,"line":3347},[34,18753,18640],{"class":161},[34,18755,18756,18758,18761,18763,18765,18768,18771,18773],{"class":36,"line":3352},[34,18757,16555],{"class":55},[34,18759,18760],{"class":3617}," setRadius",[34,18762,286],{"class":40},[34,18764,15683],{"class":55},[34,18766,18767],{"class":51}," r",[34,18769,18770],{"class":40},") { m_r ",[34,18772,221],{"class":55},[34,18774,18775],{"class":40}," r; }\n",[34,18777,18778,18780,18783,18785,18788,18791,18794,18796],{"class":36,"line":3381},[34,18779,16555],{"class":55},[34,18781,18782],{"class":3617}," setCenter",[34,18784,286],{"class":40},[34,18786,18787],{"class":3617},"Point",[34,18789,18790],{"class":51}," center",[34,18792,18793],{"class":40},") { m_center ",[34,18795,221],{"class":55},[34,18797,18798],{"class":40}," center; }\n",[34,18800,18801],{"class":36,"line":3386},[34,18802,18803],{"class":161},"    \u002F\u002F获取属性\n",[34,18805,18806,18808,18811,18813,18815],{"class":36,"line":3403},[34,18807,16384],{"class":55},[34,18809,18810],{"class":3617}," getRadius",[34,18812,18689],{"class":40},[34,18814,18692],{"class":55},[34,18816,18817],{"class":40}," m_r; }\n",[34,18819,18820,18823,18826,18828,18830],{"class":36,"line":3408},[34,18821,18822],{"class":3617},"    Point",[34,18824,18825],{"class":3617}," getCenter",[34,18827,18689],{"class":40},[34,18829,18692],{"class":55},[34,18831,18832],{"class":40}," m_center; }\n",[34,18834,18835],{"class":36,"line":3413},[34,18836,1475],{"emptyLinePlaceholder":1474},[34,18838,18839],{"class":36,"line":3418},[34,18840,16868],{"class":55},[34,18842,18843,18845],{"class":36,"line":3432},[34,18844,16384],{"class":55},[34,18846,16374],{"class":40},[34,18848,18849],{"class":36,"line":3437},[34,18850,18851],{"class":161},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[34,18853,18854],{"class":36,"line":4230},[34,18855,18856],{"class":40},"    Point m_center;\n",[34,18858,18859],{"class":36,"line":4244},[34,18860,5648],{"class":40},[34,18862,18863,18865,18868,18870,18873,18875,18877,18879,18881,18883,18885],{"class":36,"line":4252},[34,18864,7014],{"class":55},[34,18866,18867],{"class":3617}," isInCircle",[34,18869,286],{"class":40},[34,18871,18872],{"class":3617},"Circle",[34,18874,12234],{"class":55},[34,18876,2095],{"class":51},[34,18878,291],{"class":40},[34,18880,18787],{"class":3617},[34,18882,12234],{"class":55},[34,18884,103],{"class":51},[34,18886,101],{"class":40},[34,18888,18889],{"class":36,"line":4257},[34,18890,3204],{"class":40},[34,18892,18893,18895,18898,18900,18902,18905,18908,18911,18913,18915,18917,18919],{"class":36,"line":4263},[34,18894,16384],{"class":55},[34,18896,18897],{"class":40}," dx ",[34,18899,221],{"class":55},[34,18901,17988],{"class":40},[34,18903,18904],{"class":3617},"getCenter",[34,18906,18907],{"class":40},"().",[34,18909,18910],{"class":3617},"getX",[34,18912,14698],{"class":40},[34,18914,2327],{"class":55},[34,18916,17534],{"class":40},[34,18918,18910],{"class":3617},[34,18920,7286],{"class":40},[34,18922,18923,18925,18928,18930,18932,18934,18936,18939,18941,18943,18945,18947],{"class":36,"line":4269},[34,18924,16384],{"class":55},[34,18926,18927],{"class":40}," dy ",[34,18929,221],{"class":55},[34,18931,17988],{"class":40},[34,18933,18904],{"class":3617},[34,18935,18907],{"class":40},[34,18937,18938],{"class":3617},"getY",[34,18940,14698],{"class":40},[34,18942,2327],{"class":55},[34,18944,17534],{"class":40},[34,18946,18938],{"class":3617},[34,18948,7286],{"class":40},[34,18950,18951,18953,18956,18958,18961,18964,18966,18968,18970,18972,18974],{"class":36,"line":4274},[34,18952,16384],{"class":55},[34,18954,18955],{"class":40}," distance ",[34,18957,221],{"class":55},[34,18959,18960],{"class":3617}," sqrt",[34,18962,18963],{"class":40},"(dx ",[34,18965,2252],{"class":55},[34,18967,18897],{"class":40},[34,18969,2277],{"class":55},[34,18971,18927],{"class":40},[34,18973,2252],{"class":55},[34,18975,18976],{"class":40}," dy);\n",[34,18978,18979,18981,18984,18986,18988,18991],{"class":36,"line":9598},[34,18980,4754],{"class":55},[34,18982,18983],{"class":40}," (distance ",[34,18985,2701],{"class":55},[34,18987,17988],{"class":40},[34,18989,18990],{"class":3617},"getRadius",[34,18992,18993],{"class":40},"())\n",[34,18995,18996],{"class":36,"line":9622},[34,18997,3684],{"class":40},[34,18999,19000,19002,19004,19007,19009],{"class":36,"line":9627},[34,19001,11319],{"class":40},[34,19003,2835],{"class":55},[34,19005,19006],{"class":504}," \"点在圆内\"",[34,19008,3103],{"class":55},[34,19010,10490],{"class":40},[34,19012,19013],{"class":36,"line":9633},[34,19014,3841],{"class":40},[34,19016,19017],{"class":36,"line":9660},[34,19018,18469],{"class":55},[34,19020,19021],{"class":36,"line":9665},[34,19022,3684],{"class":40},[34,19024,19025,19027,19029,19032,19034],{"class":36,"line":9671},[34,19026,11319],{"class":40},[34,19028,2835],{"class":55},[34,19030,19031],{"class":504}," \"点在圆外\"",[34,19033,3103],{"class":55},[34,19035,10490],{"class":40},[34,19037,19038],{"class":36,"line":9683},[34,19039,3841],{"class":40},[34,19041,19042],{"class":36,"line":9695},[34,19043,3223],{"class":40},[34,19045,19046,19048,19050],{"class":36,"line":9707},[34,19047,571],{"class":55},[34,19049,3627],{"class":3617},[34,19051,3630],{"class":40},[34,19053,19054],{"class":36,"line":11366},[34,19055,3204],{"class":40},[34,19057,19058],{"class":36,"line":11391},[34,19059,16699],{"class":161},[34,19061,19062],{"class":36,"line":11414},[34,19063,16446],{"class":40},[34,19065,19066],{"class":36,"line":11438},[34,19067,19068],{"class":40},"    Point p1;\n",[34,19070,19071],{"class":36,"line":11443},[34,19072,18640],{"class":161},[34,19074,19075,19077,19079,19082],{"class":36,"line":11448},[34,19076,3209],{"class":40},[34,19078,2835],{"class":55},[34,19080,19081],{"class":504},"\"请输入圆的半径：\"",[34,19083,2952],{"class":40},[34,19085,19086,19088],{"class":36,"line":11453},[34,19087,16384],{"class":55},[34,19089,19090],{"class":40}," r;\n",[34,19092,19093,19095,19097],{"class":36,"line":11462},[34,19094,3666],{"class":40},[34,19096,3088],{"class":55},[34,19098,19099],{"class":40},"r;\n",[34,19101,19102,19104,19107],{"class":36,"line":11467},[34,19103,18241],{"class":40},[34,19105,19106],{"class":3617},"setRadius",[34,19108,19109],{"class":40},"(r);\n",[34,19111,19112,19114,19116,19119],{"class":36,"line":11473},[34,19113,3209],{"class":40},[34,19115,2835],{"class":55},[34,19117,19118],{"class":504},"\"请输入圆心坐标：\"",[34,19120,2952],{"class":40},[34,19122,19123,19125],{"class":36,"line":11494},[34,19124,16384],{"class":55},[34,19126,19127],{"class":40}," x, y;\n",[34,19129,19130,19132,19134,19136,19138],{"class":36,"line":11500},[34,19131,3666],{"class":40},[34,19133,3088],{"class":55},[34,19135,1046],{"class":40},[34,19137,3088],{"class":55},[34,19139,19140],{"class":40},"y;\n",[34,19142,19143,19146,19149],{"class":36,"line":11514},[34,19144,19145],{"class":40},"    p1.",[34,19147,19148],{"class":3617},"setPoint",[34,19150,19151],{"class":40},"(x, y);\n",[34,19153,19154,19156,19159],{"class":36,"line":11520},[34,19155,18241],{"class":40},[34,19157,19158],{"class":3617},"setCenter",[34,19160,19161],{"class":40},"(p1);\n",[34,19163,19164,19166,19168,19171],{"class":36,"line":11547},[34,19165,3209],{"class":40},[34,19167,2835],{"class":55},[34,19169,19170],{"class":504},"\"请输入测试点坐标：\"",[34,19172,2952],{"class":40},[34,19174,19175,19177],{"class":36,"line":11556},[34,19176,16384],{"class":55},[34,19178,19179],{"class":40}," x1, y1;\n",[34,19181,19182,19184,19186,19189,19191],{"class":36,"line":11562},[34,19183,3666],{"class":40},[34,19185,3088],{"class":55},[34,19187,19188],{"class":40},"x1",[34,19190,3088],{"class":55},[34,19192,19193],{"class":40},"y1;\n",[34,19195,19196],{"class":36,"line":11570},[34,19197,19198],{"class":40},"    Point p2;\n",[34,19200,19201,19204,19206],{"class":36,"line":11575},[34,19202,19203],{"class":40},"    p2.",[34,19205,19148],{"class":3617},[34,19207,19208],{"class":40},"(x1, y1);\n",[34,19210,19211,19214],{"class":36,"line":18250},[34,19212,19213],{"class":3617},"    isInCircle",[34,19215,19216],{"class":40},"(c1, p2);\n",[34,19218,19219],{"class":36,"line":18256},[34,19220,3223],{"class":40},[103,19222,19223],{},"在类中可以让另一个类作为本来的成员",[103,19225,19226],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[103,19228,19229],{},"创建point.h",[24,19231,19233],{"className":1809,"code":19232,"language":1811,"meta":29,"style":29},"#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",[31,19234,19235,19246,19252,19262,19268,19272,19277,19281,19285,19305,19309,19317,19325,19329,19333,19339,19345],{"__ignoreMap":29},[34,19236,19237,19240,19243],{"class":36,"line":37},[34,19238,19239],{"class":55},"#pragma",[34,19241,19242],{"class":3617}," once",[34,19244,19245],{"class":161}," \u002F\u002F防止头文件重复包含\n",[34,19247,19248,19250],{"class":36,"line":165},[34,19249,3603],{"class":55},[34,19251,3606],{"class":504},[34,19253,19254,19256,19258,19260],{"class":36,"line":171},[34,19255,3611],{"class":55},[34,19257,3614],{"class":55},[34,19259,3618],{"class":3617},[34,19261,2952],{"class":40},[34,19263,19264,19266],{"class":36,"line":182},[34,19265,16340],{"class":55},[34,19267,18627],{"class":3617},[34,19269,19270],{"class":36,"line":188},[34,19271,3204],{"class":40},[34,19273,19274],{"class":36,"line":518},[34,19275,19276],{"class":161},"\u002F\u002F做好声明与变量定义就可以\n",[34,19278,19279],{"class":36,"line":524},[34,19280,16362],{"class":55},[34,19282,19283],{"class":36,"line":530},[34,19284,18640],{"class":161},[34,19286,19287,19289,19291,19293,19295,19297,19299,19301,19303],{"class":36,"line":624},[34,19288,16555],{"class":55},[34,19290,18647],{"class":3617},[34,19292,286],{"class":40},[34,19294,15683],{"class":55},[34,19296,18654],{"class":51},[34,19298,48],{"class":40},[34,19300,15683],{"class":55},[34,19302,18661],{"class":51},[34,19304,4372],{"class":40},[34,19306,19307],{"class":36,"line":630},[34,19308,18679],{"class":161},[34,19310,19311,19313,19315],{"class":36,"line":636},[34,19312,16384],{"class":55},[34,19314,18686],{"class":3617},[34,19316,7286],{"class":40},[34,19318,19319,19321,19323],{"class":36,"line":1513},[34,19320,16384],{"class":55},[34,19322,18702],{"class":3617},[34,19324,7286],{"class":40},[34,19326,19327],{"class":36,"line":1519},[34,19328,1475],{"emptyLinePlaceholder":1474},[34,19330,19331],{"class":36,"line":3283},[34,19332,16868],{"class":55},[34,19334,19335,19337],{"class":36,"line":3297},[34,19336,16384],{"class":55},[34,19338,18724],{"class":40},[34,19340,19341,19343],{"class":36,"line":3302},[34,19342,16384],{"class":55},[34,19344,18731],{"class":40},[34,19346,19347],{"class":36,"line":3308},[34,19348,5648],{"class":40},[103,19350,19351],{},"创建point.cpp",[24,19353,19355],{"className":1809,"code":19354,"language":1811,"meta":29,"style":29},"#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",[31,19356,19357,19364,19369,19403,19407,19423],{"__ignoreMap":29},[34,19358,19359,19361],{"class":36,"line":37},[34,19360,3603],{"class":55},[34,19362,19363],{"class":504},"\u003Cpoint.h>\n",[34,19365,19366],{"class":36,"line":165},[34,19367,19368],{"class":161},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[34,19370,19371,19373,19376,19379,19381,19383,19385,19387,19389,19391,19393,19395,19397,19399,19401],{"class":36,"line":171},[34,19372,16555],{"class":55},[34,19374,19375],{"class":3617}," Point",[34,19377,19378],{"class":40},"::",[34,19380,19148],{"class":3617},[34,19382,286],{"class":40},[34,19384,15683],{"class":55},[34,19386,18654],{"class":51},[34,19388,48],{"class":40},[34,19390,15683],{"class":55},[34,19392,18661],{"class":51},[34,19394,18664],{"class":40},[34,19396,221],{"class":55},[34,19398,18669],{"class":40},[34,19400,221],{"class":55},[34,19402,18674],{"class":40},[34,19404,19405],{"class":36,"line":182},[34,19406,18679],{"class":161},[34,19408,19409,19411,19413,19415,19417,19419,19421],{"class":36,"line":188},[34,19410,16384],{"class":55},[34,19412,19375],{"class":3617},[34,19414,19378],{"class":40},[34,19416,18910],{"class":3617},[34,19418,18689],{"class":40},[34,19420,18692],{"class":55},[34,19422,18695],{"class":40},[34,19424,19425,19427,19429,19431,19433,19435,19437],{"class":36,"line":518},[34,19426,16384],{"class":55},[34,19428,19375],{"class":3617},[34,19430,19378],{"class":40},[34,19432,18938],{"class":3617},[34,19434,18689],{"class":40},[34,19436,18692],{"class":55},[34,19438,18709],{"class":40},[103,19440,19441],{},"创建circle.h",[24,19443,19445],{"className":1809,"code":19444,"language":1811,"meta":29,"style":29},"#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",[31,19446,19447,19454,19460,19470,19476,19482,19486,19490,19494,19508,19522,19526,19534,19542,19546,19550,19556,19560,19564],{"__ignoreMap":29},[34,19448,19449,19451],{"class":36,"line":37},[34,19450,19239],{"class":55},[34,19452,19453],{"class":3617}," once\n",[34,19455,19456,19458],{"class":36,"line":165},[34,19457,3603],{"class":55},[34,19459,3606],{"class":504},[34,19461,19462,19464,19466,19468],{"class":36,"line":171},[34,19463,3611],{"class":55},[34,19465,3614],{"class":55},[34,19467,3618],{"class":3617},[34,19469,2952],{"class":40},[34,19471,19472,19474],{"class":36,"line":182},[34,19473,3603],{"class":55},[34,19475,19363],{"class":504},[34,19477,19478,19480],{"class":36,"line":188},[34,19479,16340],{"class":55},[34,19481,16343],{"class":3617},[34,19483,19484],{"class":36,"line":518},[34,19485,3204],{"class":40},[34,19487,19488],{"class":36,"line":524},[34,19489,16362],{"class":55},[34,19491,19492],{"class":36,"line":530},[34,19493,18640],{"class":161},[34,19495,19496,19498,19500,19502,19504,19506],{"class":36,"line":624},[34,19497,16555],{"class":55},[34,19499,18760],{"class":3617},[34,19501,286],{"class":40},[34,19503,15683],{"class":55},[34,19505,18767],{"class":51},[34,19507,4372],{"class":40},[34,19509,19510,19512,19514,19516,19518,19520],{"class":36,"line":630},[34,19511,16555],{"class":55},[34,19513,18782],{"class":3617},[34,19515,286],{"class":40},[34,19517,18787],{"class":3617},[34,19519,18790],{"class":51},[34,19521,4372],{"class":40},[34,19523,19524],{"class":36,"line":636},[34,19525,18803],{"class":161},[34,19527,19528,19530,19532],{"class":36,"line":1513},[34,19529,16384],{"class":55},[34,19531,18810],{"class":3617},[34,19533,7286],{"class":40},[34,19535,19536,19538,19540],{"class":36,"line":1519},[34,19537,18822],{"class":3617},[34,19539,18825],{"class":3617},[34,19541,7286],{"class":40},[34,19543,19544],{"class":36,"line":3283},[34,19545,1475],{"emptyLinePlaceholder":1474},[34,19547,19548],{"class":36,"line":3297},[34,19549,16868],{"class":55},[34,19551,19552,19554],{"class":36,"line":3302},[34,19553,16384],{"class":55},[34,19555,16374],{"class":40},[34,19557,19558],{"class":36,"line":3308},[34,19559,18851],{"class":161},[34,19561,19562],{"class":36,"line":3328},[34,19563,18856],{"class":40},[34,19565,19566],{"class":36,"line":3333},[34,19567,5648],{"class":40},[103,19569,19570],{},"创建circle.cpp",[24,19572,19574],{"className":1809,"code":19573,"language":1811,"meta":29,"style":29},"#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",[31,19575,19576,19583,19606,19628,19633,19649],{"__ignoreMap":29},[34,19577,19578,19580],{"class":36,"line":37},[34,19579,3603],{"class":55},[34,19581,19582],{"class":504},"\u003Ccircle.h>\n",[34,19584,19585,19587,19590,19592,19594,19596,19598,19600,19602,19604],{"class":36,"line":165},[34,19586,7014],{"class":55},[34,19588,19589],{"class":3617}," Circle",[34,19591,19378],{"class":40},[34,19593,19106],{"class":3617},[34,19595,286],{"class":40},[34,19597,15683],{"class":55},[34,19599,18767],{"class":51},[34,19601,18770],{"class":40},[34,19603,221],{"class":55},[34,19605,18775],{"class":40},[34,19607,19608,19610,19612,19614,19616,19618,19620,19622,19624,19626],{"class":36,"line":171},[34,19609,7014],{"class":55},[34,19611,19589],{"class":3617},[34,19613,19378],{"class":40},[34,19615,19158],{"class":3617},[34,19617,286],{"class":40},[34,19619,18787],{"class":3617},[34,19621,18790],{"class":51},[34,19623,18793],{"class":40},[34,19625,221],{"class":55},[34,19627,18798],{"class":40},[34,19629,19630],{"class":36,"line":182},[34,19631,19632],{"class":161},"\u002F\u002F获取属性\n",[34,19634,19635,19637,19639,19641,19643,19645,19647],{"class":36,"line":188},[34,19636,15683],{"class":55},[34,19638,19589],{"class":3617},[34,19640,19378],{"class":40},[34,19642,18990],{"class":3617},[34,19644,18689],{"class":40},[34,19646,18692],{"class":55},[34,19648,18817],{"class":40},[34,19650,19651,19653,19655,19657,19659,19661,19663],{"class":36,"line":518},[34,19652,18787],{"class":3617},[34,19654,19589],{"class":3617},[34,19656,19378],{"class":40},[34,19658,18904],{"class":3617},[34,19660,18689],{"class":40},[34,19662,18692],{"class":55},[34,19664,18832],{"class":40},[103,19666,19667],{},"使用封装的类",[24,19669,19671],{"className":1809,"code":19670,"language":1811,"meta":29,"style":29},"#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",[31,19672,19673,19679,19689,19695,19701,19725,19729,19755,19781,19805,19819,19823,19835,19839,19843,19847,19859,19863,19867,19875,19879,19883,19887,19891,19895,19905,19911,19919,19927,19937,19943,19955,19963,19971,19981,19987,19999,20003,20011,20017],{"__ignoreMap":29},[34,19674,19675,19677],{"class":36,"line":37},[34,19676,3603],{"class":55},[34,19678,3606],{"class":504},[34,19680,19681,19683,19685,19687],{"class":36,"line":165},[34,19682,3611],{"class":55},[34,19684,3614],{"class":55},[34,19686,3618],{"class":3617},[34,19688,2952],{"class":40},[34,19690,19691,19693],{"class":36,"line":171},[34,19692,3603],{"class":55},[34,19694,19582],{"class":504},[34,19696,19697,19699],{"class":36,"line":182},[34,19698,3603],{"class":55},[34,19700,19363],{"class":504},[34,19702,19703,19705,19707,19709,19711,19713,19715,19717,19719,19721,19723],{"class":36,"line":188},[34,19704,7014],{"class":55},[34,19706,18867],{"class":3617},[34,19708,286],{"class":40},[34,19710,18872],{"class":3617},[34,19712,12234],{"class":55},[34,19714,2095],{"class":51},[34,19716,291],{"class":40},[34,19718,18787],{"class":3617},[34,19720,12234],{"class":55},[34,19722,103],{"class":51},[34,19724,101],{"class":40},[34,19726,19727],{"class":36,"line":518},[34,19728,3204],{"class":40},[34,19730,19731,19733,19735,19737,19739,19741,19743,19745,19747,19749,19751,19753],{"class":36,"line":524},[34,19732,16384],{"class":55},[34,19734,18897],{"class":40},[34,19736,221],{"class":55},[34,19738,17988],{"class":40},[34,19740,18904],{"class":3617},[34,19742,18907],{"class":40},[34,19744,18910],{"class":3617},[34,19746,14698],{"class":40},[34,19748,2327],{"class":55},[34,19750,17534],{"class":40},[34,19752,18910],{"class":3617},[34,19754,7286],{"class":40},[34,19756,19757,19759,19761,19763,19765,19767,19769,19771,19773,19775,19777,19779],{"class":36,"line":530},[34,19758,16384],{"class":55},[34,19760,18927],{"class":40},[34,19762,221],{"class":55},[34,19764,17988],{"class":40},[34,19766,18904],{"class":3617},[34,19768,18907],{"class":40},[34,19770,18938],{"class":3617},[34,19772,14698],{"class":40},[34,19774,2327],{"class":55},[34,19776,17534],{"class":40},[34,19778,18938],{"class":3617},[34,19780,7286],{"class":40},[34,19782,19783,19785,19787,19789,19791,19793,19795,19797,19799,19801,19803],{"class":36,"line":624},[34,19784,16384],{"class":55},[34,19786,18955],{"class":40},[34,19788,221],{"class":55},[34,19790,18960],{"class":3617},[34,19792,18963],{"class":40},[34,19794,2252],{"class":55},[34,19796,18897],{"class":40},[34,19798,2277],{"class":55},[34,19800,18927],{"class":40},[34,19802,2252],{"class":55},[34,19804,18976],{"class":40},[34,19806,19807,19809,19811,19813,19815,19817],{"class":36,"line":630},[34,19808,4754],{"class":55},[34,19810,18983],{"class":40},[34,19812,2701],{"class":55},[34,19814,17988],{"class":40},[34,19816,18990],{"class":3617},[34,19818,18993],{"class":40},[34,19820,19821],{"class":36,"line":636},[34,19822,3684],{"class":40},[34,19824,19825,19827,19829,19831,19833],{"class":36,"line":1513},[34,19826,11319],{"class":40},[34,19828,2835],{"class":55},[34,19830,19006],{"class":504},[34,19832,3103],{"class":55},[34,19834,10490],{"class":40},[34,19836,19837],{"class":36,"line":1519},[34,19838,3841],{"class":40},[34,19840,19841],{"class":36,"line":3283},[34,19842,18469],{"class":55},[34,19844,19845],{"class":36,"line":3297},[34,19846,3684],{"class":40},[34,19848,19849,19851,19853,19855,19857],{"class":36,"line":3302},[34,19850,11319],{"class":40},[34,19852,2835],{"class":55},[34,19854,19031],{"class":504},[34,19856,3103],{"class":55},[34,19858,10490],{"class":40},[34,19860,19861],{"class":36,"line":3308},[34,19862,3841],{"class":40},[34,19864,19865],{"class":36,"line":3328},[34,19866,3223],{"class":40},[34,19868,19869,19871,19873],{"class":36,"line":3333},[34,19870,571],{"class":55},[34,19872,3627],{"class":3617},[34,19874,3630],{"class":40},[34,19876,19877],{"class":36,"line":3347},[34,19878,3204],{"class":40},[34,19880,19881],{"class":36,"line":3352},[34,19882,16699],{"class":161},[34,19884,19885],{"class":36,"line":3381},[34,19886,16446],{"class":40},[34,19888,19889],{"class":36,"line":3386},[34,19890,19068],{"class":40},[34,19892,19893],{"class":36,"line":3403},[34,19894,18640],{"class":161},[34,19896,19897,19899,19901,19903],{"class":36,"line":3408},[34,19898,3209],{"class":40},[34,19900,2835],{"class":55},[34,19902,19081],{"class":504},[34,19904,2952],{"class":40},[34,19906,19907,19909],{"class":36,"line":3413},[34,19908,16384],{"class":55},[34,19910,19090],{"class":40},[34,19912,19913,19915,19917],{"class":36,"line":3418},[34,19914,3666],{"class":40},[34,19916,3088],{"class":55},[34,19918,19099],{"class":40},[34,19920,19921,19923,19925],{"class":36,"line":3432},[34,19922,18241],{"class":40},[34,19924,19106],{"class":3617},[34,19926,19109],{"class":40},[34,19928,19929,19931,19933,19935],{"class":36,"line":3437},[34,19930,3209],{"class":40},[34,19932,2835],{"class":55},[34,19934,19118],{"class":504},[34,19936,2952],{"class":40},[34,19938,19939,19941],{"class":36,"line":4230},[34,19940,16384],{"class":55},[34,19942,19127],{"class":40},[34,19944,19945,19947,19949,19951,19953],{"class":36,"line":4244},[34,19946,3666],{"class":40},[34,19948,3088],{"class":55},[34,19950,1046],{"class":40},[34,19952,3088],{"class":55},[34,19954,19140],{"class":40},[34,19956,19957,19959,19961],{"class":36,"line":4252},[34,19958,19145],{"class":40},[34,19960,19148],{"class":3617},[34,19962,19151],{"class":40},[34,19964,19965,19967,19969],{"class":36,"line":4257},[34,19966,18241],{"class":40},[34,19968,19158],{"class":3617},[34,19970,19161],{"class":40},[34,19972,19973,19975,19977,19979],{"class":36,"line":4263},[34,19974,3209],{"class":40},[34,19976,2835],{"class":55},[34,19978,19170],{"class":504},[34,19980,2952],{"class":40},[34,19982,19983,19985],{"class":36,"line":4269},[34,19984,16384],{"class":55},[34,19986,19179],{"class":40},[34,19988,19989,19991,19993,19995,19997],{"class":36,"line":4274},[34,19990,3666],{"class":40},[34,19992,3088],{"class":55},[34,19994,19188],{"class":40},[34,19996,3088],{"class":55},[34,19998,19193],{"class":40},[34,20000,20001],{"class":36,"line":9598},[34,20002,19198],{"class":40},[34,20004,20005,20007,20009],{"class":36,"line":9622},[34,20006,19203],{"class":40},[34,20008,19148],{"class":3617},[34,20010,19208],{"class":40},[34,20012,20013,20015],{"class":36,"line":9627},[34,20014,19213],{"class":3617},[34,20016,19216],{"class":40},[34,20018,20019],{"class":36,"line":9633},[34,20020,3223],{"class":40},[14,20022,20024],{"id":20023},"_82对象的初始化清理","8.2对象的初始化清理",[2798,20026,20027,20030],{},[1775,20028,20029],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[1775,20031,20032],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[19,20034,20036],{"id":20035},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[103,20038,20039,20040,20043],{},"对象的",[1165,20041,20042],{},"初始化和清理","也是两个非常重要的安全问题",[103,20045,20046],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[103,20048,20049],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[103,20051,20052,20053,20056,20057,20060],{},"c++利用了",[1165,20054,20055],{},"构造函数","和",[1165,20058,20059],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[103,20062,20063,20064],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[1165,20065,20066],{},"我们不提供构造和析构，编译器会提供",[103,20068,20069],{},[1165,20070,20071],{},"编译器提供的构造函数和析构函数是空实现。",[2798,20073,20074,20077],{},[1775,20075,20076],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[1775,20078,20079,20080,20083],{},"析构函数：主要作用在于对象",[1165,20081,20082],{},"销毁前","系统自动调用，执行一些清理工作。",[103,20085,20086,20089],{},[1165,20087,20088],{},"构造函数语法：",[31,20090,20091],{},"类名(){}",[1772,20093,20094,20097,20100,20103,20106],{},[1775,20095,20096],{},"构造函数，没有返回值也不写void",[1775,20098,20099],{},"函数名称与类名相同",[1775,20101,20102],{},"构造函数可以有参数，因此可以发生重载",[1775,20104,20105],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[1775,20107,20108,20109,918],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[31,20110,20111],{},"Person(){}",[103,20113,20114,15441,20117],{},[1165,20115,20116],{},"析构函数语法：",[31,20118,20119],{},"~类名(){}",[1772,20121,20122,20125,20128,20134],{},[1775,20123,20124],{},"析构函数，没有返回值也不写void",[1775,20126,20127],{},"函数名称与类名相同,在名称前加上符号  ~",[1775,20129,20130,20131],{},"析构函数不可以有参数，因此",[1165,20132,20133],{},"不可以发生重载",[1775,20135,20136],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[24,20138,20140],{"className":1809,"code":20139,"language":1811,"meta":29,"style":29},"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",[31,20141,20142,20148,20152,20156,20161,20168,20172,20185,20189,20194,20201,20205,20218,20222,20226,20230,20234,20242,20246,20254,20258,20262,20270,20274,20279,20283,20290,20294,20307,20311,20319],{"__ignoreMap":29},[34,20143,20144,20146],{"class":36,"line":37},[34,20145,16340],{"class":55},[34,20147,16817],{"class":3617},[34,20149,20150],{"class":36,"line":165},[34,20151,3204],{"class":40},[34,20153,20154],{"class":36,"line":171},[34,20155,16362],{"class":55},[34,20157,20158],{"class":36,"line":182},[34,20159,20160],{"class":161},"    \u002F\u002F构造函数\n",[34,20162,20163,20166],{"class":36,"line":188},[34,20164,20165],{"class":3617},"    Person",[34,20167,3630],{"class":40},[34,20169,20170],{"class":36,"line":518},[34,20171,3684],{"class":40},[34,20173,20174,20176,20178,20181,20183],{"class":36,"line":524},[34,20175,11319],{"class":40},[34,20177,2835],{"class":55},[34,20179,20180],{"class":504}," \"Person的构造函数调用\"",[34,20182,3103],{"class":55},[34,20184,10490],{"class":40},[34,20186,20187],{"class":36,"line":530},[34,20188,3841],{"class":40},[34,20190,20191],{"class":36,"line":624},[34,20192,20193],{"class":161},"    \u002F\u002F析构函数\n",[34,20195,20196,20199],{"class":36,"line":630},[34,20197,20198],{"class":3617},"    ~Person",[34,20200,3630],{"class":40},[34,20202,20203],{"class":36,"line":636},[34,20204,3684],{"class":40},[34,20206,20207,20209,20211,20214,20216],{"class":36,"line":1513},[34,20208,11319],{"class":40},[34,20210,2835],{"class":55},[34,20212,20213],{"class":504}," \"Person的析构函数调用\"",[34,20215,3103],{"class":55},[34,20217,10490],{"class":40},[34,20219,20220],{"class":36,"line":1519},[34,20221,3841],{"class":40},[34,20223,20224],{"class":36,"line":3283},[34,20225,1475],{"emptyLinePlaceholder":1474},[34,20227,20228],{"class":36,"line":3297},[34,20229,5648],{"class":40},[34,20231,20232],{"class":36,"line":3302},[34,20233,1475],{"emptyLinePlaceholder":1474},[34,20235,20236,20238,20240],{"class":36,"line":3308},[34,20237,7014],{"class":55},[34,20239,7238],{"class":3617},[34,20241,3630],{"class":40},[34,20243,20244],{"class":36,"line":3328},[34,20245,3204],{"class":40},[34,20247,20248,20251],{"class":36,"line":3333},[34,20249,20250],{"class":40},"    Person p;",[34,20252,20253],{"class":161},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[34,20255,20256],{"class":36,"line":3347},[34,20257,3223],{"class":40},[34,20259,20260],{"class":36,"line":3352},[34,20261,1475],{"emptyLinePlaceholder":1474},[34,20263,20264,20266,20268],{"class":36,"line":3381},[34,20265,571],{"class":55},[34,20267,3627],{"class":3617},[34,20269,12503],{"class":40},[34,20271,20272],{"class":36,"line":3386},[34,20273,14858],{"class":40},[34,20275,20276],{"class":36,"line":3403},[34,20277,20278],{"class":161},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[34,20280,20281],{"class":36,"line":3408},[34,20282,1475],{"emptyLinePlaceholder":1474},[34,20284,20285,20287],{"class":36,"line":3413},[34,20286,20250],{"class":40},[34,20288,20289],{"class":161},"\u002F\u002F只有构造函数\n",[34,20291,20292],{"class":36,"line":3418},[34,20293,1475],{"emptyLinePlaceholder":1474},[34,20295,20296,20298,20300,20302,20304],{"class":36,"line":3432},[34,20297,3957],{"class":3617},[34,20299,286],{"class":40},[34,20301,3962],{"class":504},[34,20303,7616],{"class":40},[34,20305,20306],{"class":161},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[34,20308,20309],{"class":36,"line":3437},[34,20310,1475],{"emptyLinePlaceholder":1474},[34,20312,20313,20315,20317],{"class":36,"line":4230},[34,20314,5743],{"class":55},[34,20316,98],{"class":44},[34,20318,2952],{"class":40},[34,20320,20321],{"class":36,"line":4244},[34,20322,3223],{"class":40},[103,20324,20325],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[19,20327,20329],{"id":20328},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[103,20331,20332],{},"两种分类方式：",[103,20334,20335],{},"​\t按参数分为： 有参构造和无参构造",[103,20337,20338],{},"​\t按类型分为： 普通构造和拷贝构造",[103,20340,20341],{},"三种调用方式：",[103,20343,20344],{},"​\t括号法",[103,20346,20347],{},"​\t显示法",[103,20349,20350],{},"​\t隐式转换法",[24,20352,20354],{"className":1809,"code":20353,"language":1811,"meta":29,"style":29},"#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",[31,20355,20356,20362,20372,20377,20382,20387,20392,20396,20404,20408,20412,20416,20422,20426,20439,20443,20455,20459,20468,20481,20485,20489,20495,20499,20512,20516,20521,20537,20541,20546,20555,20568,20572,20578,20582,20587,20595,20599,20604,20608,20616,20620,20625,20630,20635,20640,20645,20649,20654,20659,20664,20669,20673,20678,20683,20699,20711,20716,20720,20725,20730,20735,20739,20744,20758,20771,20775,20783,20787,20793,20799,20807],{"__ignoreMap":29},[34,20357,20358,20360],{"class":36,"line":37},[34,20359,3603],{"class":55},[34,20361,3606],{"class":504},[34,20363,20364,20366,20368,20370],{"class":36,"line":165},[34,20365,3611],{"class":55},[34,20367,3614],{"class":55},[34,20369,3618],{"class":3617},[34,20371,2952],{"class":40},[34,20373,20374],{"class":36,"line":171},[34,20375,20376],{"class":161},"\u002F\u002F1.构造函数的分类及调用\n",[34,20378,20379],{"class":36,"line":182},[34,20380,20381],{"class":161},"\u002F\u002F分类\n",[34,20383,20384],{"class":36,"line":188},[34,20385,20386],{"class":161},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[34,20388,20389],{"class":36,"line":518},[34,20390,20391],{"class":161},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[34,20393,20394],{"class":36,"line":524},[34,20395,1475],{"emptyLinePlaceholder":1474},[34,20397,20398,20400,20402],{"class":36,"line":530},[34,20399,16340],{"class":55},[34,20401,17215],{"class":3617},[34,20403,4327],{"class":40},[34,20405,20406],{"class":36,"line":624},[34,20407,3204],{"class":40},[34,20409,20410],{"class":36,"line":630},[34,20411,16362],{"class":55},[34,20413,20414],{"class":36,"line":636},[34,20415,20160],{"class":161},[34,20417,20418,20420],{"class":36,"line":1513},[34,20419,20165],{"class":3617},[34,20421,3630],{"class":40},[34,20423,20424],{"class":36,"line":1519},[34,20425,3684],{"class":40},[34,20427,20428,20430,20432,20435,20437],{"class":36,"line":3283},[34,20429,5104],{"class":40},[34,20431,2835],{"class":55},[34,20433,20434],{"class":504},"\"Person构造函数无参构造\"",[34,20436,2835],{"class":55},[34,20438,2857],{"class":40},[34,20440,20441],{"class":36,"line":3297},[34,20442,3841],{"class":40},[34,20444,20445,20447,20449,20451,20453],{"class":36,"line":3302},[34,20446,20165],{"class":3617},[34,20448,286],{"class":40},[34,20450,571],{"class":55},[34,20452,3057],{"class":51},[34,20454,101],{"class":40},[34,20456,20457],{"class":36,"line":3308},[34,20458,3684],{"class":40},[34,20460,20461,20464,20466],{"class":36,"line":3328},[34,20462,20463],{"class":40},"        age",[34,20465,221],{"class":55},[34,20467,7847],{"class":40},[34,20469,20470,20472,20474,20477,20479],{"class":36,"line":3333},[34,20471,5104],{"class":40},[34,20473,2835],{"class":55},[34,20475,20476],{"class":504},"\"Person构造函数有参构造\"",[34,20478,2835],{"class":55},[34,20480,2857],{"class":40},[34,20482,20483],{"class":36,"line":3347},[34,20484,3841],{"class":40},[34,20486,20487],{"class":36,"line":3352},[34,20488,20193],{"class":161},[34,20490,20491,20493],{"class":36,"line":3381},[34,20492,20198],{"class":3617},[34,20494,3630],{"class":40},[34,20496,20497],{"class":36,"line":3386},[34,20498,3684],{"class":40},[34,20500,20501,20503,20505,20508,20510],{"class":36,"line":3403},[34,20502,5104],{"class":40},[34,20504,2835],{"class":55},[34,20506,20507],{"class":504},"\"Person析构函数被调用\"",[34,20509,2835],{"class":55},[34,20511,2857],{"class":40},[34,20513,20514],{"class":36,"line":3408},[34,20515,3841],{"class":40},[34,20517,20518],{"class":36,"line":3413},[34,20519,20520],{"class":161},"    \u002F\u002F拷贝构造函数\n",[34,20522,20523,20525,20527,20529,20531,20533,20535],{"class":36,"line":3418},[34,20524,20165],{"class":3617},[34,20526,286],{"class":40},[34,20528,8442],{"class":55},[34,20530,17215],{"class":3617},[34,20532,12234],{"class":55},[34,20534,103],{"class":51},[34,20536,101],{"class":40},[34,20538,20539],{"class":36,"line":3432},[34,20540,3684],{"class":40},[34,20542,20543],{"class":36,"line":3437},[34,20544,20545],{"class":161},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[34,20547,20548,20550,20552],{"class":36,"line":4230},[34,20549,20463],{"class":40},[34,20551,221],{"class":55},[34,20553,20554],{"class":40},"p.age;\n",[34,20556,20557,20559,20561,20564,20566],{"class":36,"line":4244},[34,20558,5104],{"class":40},[34,20560,2835],{"class":55},[34,20562,20563],{"class":504},"\"Person拷贝构造函数被调用\"",[34,20565,2835],{"class":55},[34,20567,2857],{"class":40},[34,20569,20570],{"class":36,"line":4252},[34,20571,3841],{"class":40},[34,20573,20574,20576],{"class":36,"line":4257},[34,20575,3639],{"class":55},[34,20577,9447],{"class":40},[34,20579,20580],{"class":36,"line":4263},[34,20581,5648],{"class":40},[34,20583,20584],{"class":36,"line":4269},[34,20585,20586],{"class":161},"\u002F\u002F调用\n",[34,20588,20589,20591,20593],{"class":36,"line":4274},[34,20590,7014],{"class":55},[34,20592,7238],{"class":3617},[34,20594,3630],{"class":40},[34,20596,20597],{"class":36,"line":9598},[34,20598,3204],{"class":40},[34,20600,20601],{"class":36,"line":9622},[34,20602,20603],{"class":161},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[34,20605,20606],{"class":36,"line":9627},[34,20607,3223],{"class":40},[34,20609,20610,20612,20614],{"class":36,"line":9633},[34,20611,7014],{"class":55},[34,20613,7307],{"class":3617},[34,20615,3630],{"class":40},[34,20617,20618],{"class":36,"line":9660},[34,20619,3204],{"class":40},[34,20621,20622],{"class":36,"line":9665},[34,20623,20624],{"class":161},"    \u002F\u002F1.括号法\n",[34,20626,20627],{"class":36,"line":9671},[34,20628,20629],{"class":161},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[34,20631,20632],{"class":36,"line":9683},[34,20633,20634],{"class":161},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[34,20636,20637],{"class":36,"line":9695},[34,20638,20639],{"class":161},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[34,20641,20642],{"class":36,"line":9707},[34,20643,20644],{"class":161},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[34,20646,20647],{"class":36,"line":11366},[34,20648,1475],{"emptyLinePlaceholder":1474},[34,20650,20651],{"class":36,"line":11391},[34,20652,20653],{"class":161},"    \u002F\u002F注意事项\n",[34,20655,20656],{"class":36,"line":11414},[34,20657,20658],{"class":161},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[34,20660,20661],{"class":36,"line":11438},[34,20662,20663],{"class":161},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[34,20665,20666],{"class":36,"line":11443},[34,20667,20668],{"class":161},"    \u002F\u002F Person p4();\n",[34,20670,20671],{"class":36,"line":11448},[34,20672,1475],{"emptyLinePlaceholder":1474},[34,20674,20675],{"class":36,"line":11453},[34,20676,20677],{"class":161},"    \u002F\u002F2.显示法\n",[34,20679,20680],{"class":36,"line":11462},[34,20681,20682],{"class":40},"    Person p1;\n",[34,20684,20685,20688,20690,20693,20695,20697],{"class":36,"line":11467},[34,20686,20687],{"class":40},"    Person p2",[34,20689,221],{"class":55},[34,20691,20692],{"class":3617},"Person",[34,20694,286],{"class":40},[34,20696,410],{"class":44},[34,20698,4372],{"class":40},[34,20700,20701,20704,20706,20708],{"class":36,"line":11473},[34,20702,20703],{"class":40},"    Person p3",[34,20705,221],{"class":55},[34,20707,20692],{"class":3617},[34,20709,20710],{"class":40},"(p2);\n",[34,20712,20713],{"class":36,"line":11494},[34,20714,20715],{"class":161},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[34,20717,20718],{"class":36,"line":11500},[34,20719,1475],{"emptyLinePlaceholder":1474},[34,20721,20722],{"class":36,"line":11514},[34,20723,20724],{"class":161},"    \u002F\u002F 注意事项2\n",[34,20726,20727],{"class":36,"line":11520},[34,20728,20729],{"class":161},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[34,20731,20732],{"class":36,"line":11547},[34,20733,20734],{"class":161},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[34,20736,20737],{"class":36,"line":11556},[34,20738,1475],{"emptyLinePlaceholder":1474},[34,20740,20741],{"class":36,"line":11562},[34,20742,20743],{"class":161},"    \u002F\u002F3.隐士转换法\n",[34,20745,20746,20749,20751,20753,20755],{"class":36,"line":11570},[34,20747,20748],{"class":40},"    Person p4",[34,20750,221],{"class":55},[34,20752,410],{"class":44},[34,20754,1870],{"class":40},[34,20756,20757],{"class":161},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[34,20759,20760,20763,20765,20768],{"class":36,"line":11575},[34,20761,20762],{"class":40},"    Person p5",[34,20764,221],{"class":55},[34,20766,20767],{"class":40},"p4;",[34,20769,20770],{"class":161}," \u002F\u002F 这里会调用拷贝构造函数\n",[34,20772,20773],{"class":36,"line":18250},[34,20774,3223],{"class":40},[34,20776,20777,20779,20781],{"class":36,"line":18256},[34,20778,571],{"class":55},[34,20780,3627],{"class":3617},[34,20782,3630],{"class":40},[34,20784,20785],{"class":36,"line":18279},[34,20786,3204],{"class":40},[34,20788,20789,20791],{"class":36,"line":18285},[34,20790,7283],{"class":3617},[34,20792,7286],{"class":40},[34,20794,20795,20797],{"class":36,"line":18308},[34,20796,7352],{"class":3617},[34,20798,7286],{"class":40},[34,20800,20801,20803,20805],{"class":36,"line":18322},[34,20802,5743],{"class":55},[34,20804,98],{"class":44},[34,20806,2952],{"class":40},[34,20808,20809],{"class":36,"line":18342},[34,20810,3223],{"class":40},[103,20812,20813,20816],{},[1165,20814,20815],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[19,20818,20820],{"id":20819},"_823拷贝构造函数","8.2.3拷贝构造函数",[103,20822,20823],{},"C++中拷贝构造函数调用时机通常有三种情况",[2798,20825,20826,20829,20832],{},[1775,20827,20828],{},"使用一个已经创建完毕的对象来初始化一个新对象",[1775,20830,20831],{},"值传递的方式给函数参数传值",[1775,20833,20834],{},"以值方式返回局部对象",[24,20836,20838],{"className":1809,"code":20837,"language":1811,"meta":29,"style":29},"#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",[31,20839,20840,20846,20856,20860,20865,20869,20874,20879,20884,20890,20894,20898,20904,20908,20921,20925,20930,20942,20946,20954,20967,20971,20975,20991,20995,21004,21017,21021,21027,21031,21043,21047,21053,21057,21061,21069,21073,21086,21094,21112,21116,21121,21126,21141,21145,21158,21162,21170,21174,21178,21186,21190,21195,21204,21208,21212,21237,21247,21251,21259,21263,21274,21299,21303,21307,21311,21319,21323,21328,21333,21340,21345,21350,21355,21360,21364,21369,21373,21378,21382,21387,21392,21396,21400,21405,21410,21418],{"__ignoreMap":29},[34,20841,20842,20844],{"class":36,"line":37},[34,20843,3603],{"class":55},[34,20845,3606],{"class":504},[34,20847,20848,20850,20852,20854],{"class":36,"line":165},[34,20849,3611],{"class":55},[34,20851,3614],{"class":55},[34,20853,3618],{"class":3617},[34,20855,2952],{"class":40},[34,20857,20858],{"class":36,"line":171},[34,20859,1475],{"emptyLinePlaceholder":1474},[34,20861,20862],{"class":36,"line":182},[34,20863,20864],{"class":161},"\u002F\u002F拷贝构造函数调用时机\n",[34,20866,20867],{"class":36,"line":188},[34,20868,1475],{"emptyLinePlaceholder":1474},[34,20870,20871],{"class":36,"line":518},[34,20872,20873],{"class":161},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[34,20875,20876],{"class":36,"line":524},[34,20877,20878],{"class":161},"\u002F\u002F2.值传递的方式给函数参数传值\n",[34,20880,20881],{"class":36,"line":530},[34,20882,20883],{"class":161},"\u002F\u002F3.以值方式返回局部对象\n",[34,20885,20886,20888],{"class":36,"line":624},[34,20887,16340],{"class":55},[34,20889,16817],{"class":3617},[34,20891,20892],{"class":36,"line":630},[34,20893,3204],{"class":40},[34,20895,20896],{"class":36,"line":636},[34,20897,16362],{"class":55},[34,20899,20900,20902],{"class":36,"line":1513},[34,20901,20165],{"class":3617},[34,20903,3630],{"class":40},[34,20905,20906],{"class":36,"line":1519},[34,20907,3684],{"class":40},[34,20909,20910,20912,20914,20917,20919],{"class":36,"line":3283},[34,20911,11319],{"class":40},[34,20913,2835],{"class":55},[34,20915,20916],{"class":504}," \"Person的默认构造函数调用\"",[34,20918,3103],{"class":55},[34,20920,10490],{"class":40},[34,20922,20923],{"class":36,"line":3297},[34,20924,3841],{"class":40},[34,20926,20927],{"class":36,"line":3302},[34,20928,20929],{"class":161},"    \u002F\u002F有参构造\n",[34,20931,20932,20934,20936,20938,20940],{"class":36,"line":3308},[34,20933,20165],{"class":3617},[34,20935,286],{"class":40},[34,20937,571],{"class":55},[34,20939,17335],{"class":51},[34,20941,101],{"class":40},[34,20943,20944],{"class":36,"line":3328},[34,20945,3684],{"class":40},[34,20947,20948,20950,20952],{"class":36,"line":3333},[34,20949,17389],{"class":40},[34,20951,221],{"class":55},[34,20953,9447],{"class":40},[34,20955,20956,20958,20960,20963,20965],{"class":36,"line":3347},[34,20957,11319],{"class":40},[34,20959,2835],{"class":55},[34,20961,20962],{"class":504}," \"Person的有参构造函数调用\"",[34,20964,3103],{"class":55},[34,20966,10490],{"class":40},[34,20968,20969],{"class":36,"line":3352},[34,20970,3841],{"class":40},[34,20972,20973],{"class":36,"line":3381},[34,20974,20520],{"class":161},[34,20976,20977,20979,20981,20983,20985,20987,20989],{"class":36,"line":3386},[34,20978,20165],{"class":3617},[34,20980,286],{"class":40},[34,20982,8442],{"class":55},[34,20984,17215],{"class":3617},[34,20986,12234],{"class":55},[34,20988,103],{"class":51},[34,20990,101],{"class":40},[34,20992,20993],{"class":36,"line":3403},[34,20994,3684],{"class":40},[34,20996,20997,20999,21001],{"class":36,"line":3408},[34,20998,17389],{"class":40},[34,21000,221],{"class":55},[34,21002,21003],{"class":40}," p.m_Age;\n",[34,21005,21006,21008,21010,21013,21015],{"class":36,"line":3413},[34,21007,11319],{"class":40},[34,21009,2835],{"class":55},[34,21011,21012],{"class":504}," \"Person的拷贝构造函数调用\"",[34,21014,3103],{"class":55},[34,21016,10490],{"class":40},[34,21018,21019],{"class":36,"line":3418},[34,21020,3841],{"class":40},[34,21022,21023,21025],{"class":36,"line":3432},[34,21024,20198],{"class":3617},[34,21026,3630],{"class":40},[34,21028,21029],{"class":36,"line":3437},[34,21030,3684],{"class":40},[34,21032,21033,21035,21037,21039,21041],{"class":36,"line":4230},[34,21034,11319],{"class":40},[34,21036,2835],{"class":55},[34,21038,20213],{"class":504},[34,21040,3103],{"class":55},[34,21042,10490],{"class":40},[34,21044,21045],{"class":36,"line":4244},[34,21046,3841],{"class":40},[34,21048,21049,21051],{"class":36,"line":4252},[34,21050,3639],{"class":55},[34,21052,17312],{"class":40},[34,21054,21055],{"class":36,"line":4257},[34,21056,5648],{"class":40},[34,21058,21059],{"class":36,"line":4263},[34,21060,20873],{"class":161},[34,21062,21063,21065,21067],{"class":36,"line":4269},[34,21064,7014],{"class":55},[34,21066,7238],{"class":3617},[34,21068,3630],{"class":40},[34,21070,21071],{"class":36,"line":4274},[34,21072,3204],{"class":40},[34,21074,21075,21078,21080,21082,21084],{"class":36,"line":9598},[34,21076,21077],{"class":40},"    Person ",[34,21079,8780],{"class":3617},[34,21081,286],{"class":40},[34,21083,1249],{"class":44},[34,21085,4372],{"class":40},[34,21087,21088,21090,21092],{"class":36,"line":9622},[34,21089,21077],{"class":40},[34,21091,8683],{"class":3617},[34,21093,19161],{"class":40},[34,21095,21096,21098,21100,21103,21105,21108,21110],{"class":36,"line":9627},[34,21097,3209],{"class":40},[34,21099,2835],{"class":55},[34,21101,21102],{"class":504},"\"P2的年龄为：\"",[34,21104,2835],{"class":55},[34,21106,21107],{"class":40},"p2.m_Age",[34,21109,2835],{"class":55},[34,21111,2857],{"class":40},[34,21113,21114],{"class":36,"line":9633},[34,21115,3223],{"class":40},[34,21117,21118],{"class":36,"line":9660},[34,21119,21120],{"class":161},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[34,21122,21123],{"class":36,"line":9665},[34,21124,21125],{"class":161},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[34,21127,21128,21130,21133,21135,21137,21139],{"class":36,"line":9671},[34,21129,7014],{"class":55},[34,21131,21132],{"class":3617}," doWork",[34,21134,286],{"class":40},[34,21136,20692],{"class":3617},[34,21138,8475],{"class":51},[34,21140,101],{"class":40},[34,21142,21143],{"class":36,"line":9683},[34,21144,3204],{"class":40},[34,21146,21147,21149,21151,21154,21156],{"class":36,"line":9695},[34,21148,8179],{"class":40},[34,21150,2835],{"class":55},[34,21152,21153],{"class":504}," \"doWork函数调用\"",[34,21155,3103],{"class":55},[34,21157,10490],{"class":40},[34,21159,21160],{"class":36,"line":9707},[34,21161,3223],{"class":40},[34,21163,21164,21166,21168],{"class":36,"line":11366},[34,21165,7014],{"class":55},[34,21167,7307],{"class":3617},[34,21169,3630],{"class":40},[34,21171,21172],{"class":36,"line":11391},[34,21173,3204],{"class":40},[34,21175,21176],{"class":36,"line":11414},[34,21177,16959],{"class":40},[34,21179,21180,21183],{"class":36,"line":11438},[34,21181,21182],{"class":3617},"    doWork",[34,21184,21185],{"class":40},"(p);\n",[34,21187,21188],{"class":36,"line":11443},[34,21189,3223],{"class":40},[34,21191,21192],{"class":36,"line":11448},[34,21193,21194],{"class":161},"\u002F\u002F 3.以值方式返回局部对象\n",[34,21196,21197,21199,21202],{"class":36,"line":11453},[34,21198,20692],{"class":3617},[34,21200,21201],{"class":3617}," doWork2",[34,21203,3630],{"class":40},[34,21205,21206],{"class":36,"line":11462},[34,21207,3204],{"class":40},[34,21209,21210],{"class":36,"line":11467},[34,21211,20682],{"class":40},[34,21213,21214,21216,21218,21220,21222,21224,21226,21228,21230,21232,21234],{"class":36,"line":11473},[34,21215,3209],{"class":40},[34,21217,2835],{"class":55},[34,21219,286],{"class":40},[34,21221,571],{"class":55},[34,21223,8168],{"class":55},[34,21225,918],{"class":40},[34,21227,2155],{"class":55},[34,21229,8780],{"class":40},[34,21231,2835],{"class":55},[34,21233,2900],{"class":40},[34,21235,21236],{"class":161},"\u002F\u002F打印p1的地址\n",[34,21238,21239,21241,21244],{"class":36,"line":11494},[34,21240,5743],{"class":55},[34,21242,21243],{"class":40}," p1;",[34,21245,21246],{"class":161},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[34,21248,21249],{"class":36,"line":11500},[34,21250,3223],{"class":40},[34,21252,21253,21255,21257],{"class":36,"line":11514},[34,21254,7014],{"class":55},[34,21256,7379],{"class":3617},[34,21258,3630],{"class":40},[34,21260,21261],{"class":36,"line":11520},[34,21262,3204],{"class":40},[34,21264,21265,21268,21270,21272],{"class":36,"line":11547},[34,21266,21267],{"class":40},"    Person p ",[34,21269,221],{"class":55},[34,21271,21201],{"class":3617},[34,21273,7286],{"class":40},[34,21275,21276,21278,21280,21282,21284,21286,21288,21290,21292,21294,21296],{"class":36,"line":11556},[34,21277,3209],{"class":40},[34,21279,2835],{"class":55},[34,21281,286],{"class":40},[34,21283,571],{"class":55},[34,21285,8168],{"class":55},[34,21287,918],{"class":40},[34,21289,2155],{"class":55},[34,21291,103],{"class":40},[34,21293,2835],{"class":55},[34,21295,2900],{"class":40},[34,21297,21298],{"class":161},"\u002F\u002F打印p的地址\n",[34,21300,21301],{"class":36,"line":11562},[34,21302,3223],{"class":40},[34,21304,21305],{"class":36,"line":11570},[34,21306,1475],{"emptyLinePlaceholder":1474},[34,21308,21309],{"class":36,"line":11575},[34,21310,1475],{"emptyLinePlaceholder":1474},[34,21312,21313,21315,21317],{"class":36,"line":18250},[34,21314,571],{"class":55},[34,21316,3627],{"class":3617},[34,21318,3630],{"class":40},[34,21320,21321],{"class":36,"line":18256},[34,21322,3204],{"class":40},[34,21324,21325],{"class":36,"line":18279},[34,21326,21327],{"class":161},"    \u002F\u002F test01();\n",[34,21329,21330],{"class":36,"line":18285},[34,21331,21332],{"class":161},"    \u002F\u002F test02();\n",[34,21334,21335,21338],{"class":36,"line":18308},[34,21336,21337],{"class":3617},"    test03",[34,21339,7286],{"class":40},[34,21341,21342],{"class":36,"line":18322},[34,21343,21344],{"class":161},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[34,21346,21347],{"class":36,"line":18342},[34,21348,21349],{"class":161},"\u002F\u002F 输出结果如下：\n",[34,21351,21352],{"class":36,"line":18348},[34,21353,21354],{"class":161},"\u002F\u002F Person的默认构造函数调用\n",[34,21356,21357],{"class":36,"line":18359},[34,21358,21359],{"class":161},"\u002F\u002F 0x7fffffffceec\n",[34,21361,21362],{"class":36,"line":18382},[34,21363,21359],{"class":161},[34,21365,21366],{"class":36,"line":18404},[34,21367,21368],{"class":161},"\u002F\u002F Person的析构函数调用\n",[34,21370,21371],{"class":36,"line":18409},[34,21372,1475],{"emptyLinePlaceholder":1474},[34,21374,21375],{"class":36,"line":18415},[34,21376,21377],{"class":161},"\u002F\u002F 之前的输出结果如下：\n",[34,21379,21380],{"class":36,"line":18429},[34,21381,21354],{"class":161},[34,21383,21384],{"class":36,"line":18442},[34,21385,21386],{"class":161},"\u002F\u002F 地址\n",[34,21388,21389],{"class":36,"line":18447},[34,21390,21391],{"class":161},"\u002F\u002F Person的拷贝构造函数调用\n",[34,21393,21394],{"class":36,"line":18461},[34,21395,21368],{"class":161},[34,21397,21398],{"class":36,"line":18466},[34,21399,21386],{"class":161},[34,21401,21402],{"class":36,"line":18472},[34,21403,21404],{"class":161},"\u002F\u002F (这两次输出的地址也是不同的) \n",[34,21406,21407],{"class":36,"line":18477},[34,21408,21409],{"class":161},"\u002F\u002F Person的析构函数调用     \n",[34,21411,21412,21414,21416],{"class":36,"line":18491},[34,21413,5743],{"class":55},[34,21415,98],{"class":44},[34,21417,2952],{"class":40},[34,21419,21420],{"class":36,"line":18496},[34,21421,3223],{"class":40},[103,21423,21424],{},"简化版理解",[24,21426,21428],{"className":1809,"code":21427,"language":1811,"meta":29,"style":29},"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",[31,21429,21430,21438,21442,21448,21461,21472,21476,21488,21501,21509,21513,21529,21542,21551,21555,21560,21566,21579,21583,21587,21594,21598,21602,21607,21615,21619,21635,21648,21661,21665,21670,21678,21682,21686,21691,21696,21712,21720,21727,21733,21737,21741,21746,21754,21758,21762,21785,21792,21796,21800,21808,21812,21822,21844,21848,21852,21856,21864,21868,21873,21878,21884,21888,21898,21902,21910],{"__ignoreMap":29},[34,21431,21432,21434,21436],{"class":36,"line":37},[34,21433,16340],{"class":55},[34,21435,17215],{"class":3617},[34,21437,17218],{"class":40},[34,21439,21440],{"class":36,"line":165},[34,21441,16362],{"class":55},[34,21443,21444,21446],{"class":36,"line":171},[34,21445,20165],{"class":3617},[34,21447,12503],{"class":40},[34,21449,21450,21452,21454,21457,21459],{"class":36,"line":182},[34,21451,11319],{"class":40},[34,21453,2835],{"class":55},[34,21455,21456],{"class":504}," \"无参构造函数!\"",[34,21458,3103],{"class":55},[34,21460,10490],{"class":40},[34,21462,21463,21466,21468,21470],{"class":36,"line":188},[34,21464,21465],{"class":40},"        mAge ",[34,21467,221],{"class":55},[34,21469,98],{"class":44},[34,21471,2952],{"class":40},[34,21473,21474],{"class":36,"line":518},[34,21475,3841],{"class":40},[34,21477,21478,21480,21482,21484,21486],{"class":36,"line":524},[34,21479,20165],{"class":3617},[34,21481,286],{"class":40},[34,21483,571],{"class":55},[34,21485,17335],{"class":51},[34,21487,14090],{"class":40},[34,21489,21490,21492,21494,21497,21499],{"class":36,"line":530},[34,21491,11319],{"class":40},[34,21493,2835],{"class":55},[34,21495,21496],{"class":504}," \"有参构造函数!\"",[34,21498,3103],{"class":55},[34,21500,10490],{"class":40},[34,21502,21503,21505,21507],{"class":36,"line":624},[34,21504,21465],{"class":40},[34,21506,221],{"class":55},[34,21508,9447],{"class":40},[34,21510,21511],{"class":36,"line":630},[34,21512,3841],{"class":40},[34,21514,21515,21517,21519,21521,21523,21525,21527],{"class":36,"line":636},[34,21516,20165],{"class":3617},[34,21518,286],{"class":40},[34,21520,8442],{"class":55},[34,21522,17215],{"class":3617},[34,21524,2155],{"class":55},[34,21526,8475],{"class":51},[34,21528,14090],{"class":40},[34,21530,21531,21533,21535,21538,21540],{"class":36,"line":1513},[34,21532,11319],{"class":40},[34,21534,2835],{"class":55},[34,21536,21537],{"class":504}," \"拷贝构造函数!\"",[34,21539,3103],{"class":55},[34,21541,10490],{"class":40},[34,21543,21544,21546,21548],{"class":36,"line":1519},[34,21545,21465],{"class":40},[34,21547,221],{"class":55},[34,21549,21550],{"class":40}," p.mAge;\n",[34,21552,21553],{"class":36,"line":3283},[34,21554,3841],{"class":40},[34,21556,21557],{"class":36,"line":3297},[34,21558,21559],{"class":161},"    \u002F\u002F析构函数在释放内存之前调用\n",[34,21561,21562,21564],{"class":36,"line":3302},[34,21563,20198],{"class":3617},[34,21565,12503],{"class":40},[34,21567,21568,21570,21572,21575,21577],{"class":36,"line":3308},[34,21569,11319],{"class":40},[34,21571,2835],{"class":55},[34,21573,21574],{"class":504}," \"析构函数!\"",[34,21576,3103],{"class":55},[34,21578,10490],{"class":40},[34,21580,21581],{"class":36,"line":3328},[34,21582,3841],{"class":40},[34,21584,21585],{"class":36,"line":3333},[34,21586,16362],{"class":55},[34,21588,21589,21591],{"class":36,"line":3347},[34,21590,3639],{"class":55},[34,21592,21593],{"class":40}," mAge;\n",[34,21595,21596],{"class":36,"line":3352},[34,21597,5648],{"class":40},[34,21599,21600],{"class":36,"line":3381},[34,21601,1475],{"emptyLinePlaceholder":1474},[34,21603,21604],{"class":36,"line":3386},[34,21605,21606],{"class":161},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[34,21608,21609,21611,21613],{"class":36,"line":3403},[34,21610,7014],{"class":55},[34,21612,7238],{"class":3617},[34,21614,12503],{"class":40},[34,21616,21617],{"class":36,"line":3408},[34,21618,1475],{"emptyLinePlaceholder":1474},[34,21620,21621,21623,21626,21628,21630,21632],{"class":36,"line":3413},[34,21622,21077],{"class":40},[34,21624,21625],{"class":3617},"man",[34,21627,286],{"class":40},[34,21629,451],{"class":44},[34,21631,7616],{"class":40},[34,21633,21634],{"class":161}," \u002F\u002Fp对象已经创建完毕\n",[34,21636,21637,21639,21642,21645],{"class":36,"line":3418},[34,21638,21077],{"class":40},[34,21640,21641],{"class":3617},"newman",[34,21643,21644],{"class":40},"(man);",[34,21646,21647],{"class":161}," \u002F\u002F调用拷贝构造函数\n",[34,21649,21650,21653,21655,21658],{"class":36,"line":3432},[34,21651,21652],{"class":40},"    Person newman2 ",[34,21654,221],{"class":55},[34,21656,21657],{"class":40}," man;",[34,21659,21660],{"class":161}," \u002F\u002F拷贝构造\n",[34,21662,21663],{"class":36,"line":3437},[34,21664,1475],{"emptyLinePlaceholder":1474},[34,21666,21667],{"class":36,"line":4230},[34,21668,21669],{"class":161},"    \u002F\u002FPerson newman3;\n",[34,21671,21672,21675],{"class":36,"line":4244},[34,21673,21674],{"class":161},"    \u002F\u002Fnewman3 = man;",[34,21676,21677],{"class":161}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[34,21679,21680],{"class":36,"line":4252},[34,21681,3223],{"class":40},[34,21683,21684],{"class":36,"line":4257},[34,21685,1475],{"emptyLinePlaceholder":1474},[34,21687,21688],{"class":36,"line":4263},[34,21689,21690],{"class":161},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[34,21692,21693],{"class":36,"line":4269},[34,21694,21695],{"class":161},"\u002F\u002F相当于Person p1 = p;\n",[34,21697,21698,21700,21702,21704,21706,21709],{"class":36,"line":4274},[34,21699,7014],{"class":55},[34,21701,21132],{"class":3617},[34,21703,286],{"class":40},[34,21705,20692],{"class":3617},[34,21707,21708],{"class":51}," p1",[34,21710,21711],{"class":40},") {}\n",[34,21713,21714,21716,21718],{"class":36,"line":9598},[34,21715,7014],{"class":55},[34,21717,7307],{"class":3617},[34,21719,12503],{"class":40},[34,21721,21722,21724],{"class":36,"line":9622},[34,21723,20250],{"class":40},[34,21725,21726],{"class":161}," \u002F\u002F无参构造函数\n",[34,21728,21729,21731],{"class":36,"line":9627},[34,21730,21182],{"class":3617},[34,21732,21185],{"class":40},[34,21734,21735],{"class":36,"line":9633},[34,21736,3223],{"class":40},[34,21738,21739],{"class":36,"line":9660},[34,21740,1475],{"emptyLinePlaceholder":1474},[34,21742,21743],{"class":36,"line":9665},[34,21744,21745],{"class":161},"\u002F\u002F3. 以值方式返回局部对象\n",[34,21747,21748,21750,21752],{"class":36,"line":9671},[34,21749,20692],{"class":3617},[34,21751,21201],{"class":3617},[34,21753,3630],{"class":40},[34,21755,21756],{"class":36,"line":9683},[34,21757,3204],{"class":40},[34,21759,21760],{"class":36,"line":9695},[34,21761,20682],{"class":40},[34,21763,21764,21766,21768,21770,21772,21774,21776,21778,21781,21783],{"class":36,"line":9707},[34,21765,8179],{"class":40},[34,21767,2835],{"class":55},[34,21769,3313],{"class":40},[34,21771,571],{"class":55},[34,21773,8168],{"class":55},[34,21775,918],{"class":40},[34,21777,2155],{"class":55},[34,21779,21780],{"class":40},"p1 ",[34,21782,2835],{"class":55},[34,21784,10490],{"class":40},[34,21786,21787,21789],{"class":36,"line":11366},[34,21788,5743],{"class":55},[34,21790,21791],{"class":40}," p1;\n",[34,21793,21794],{"class":36,"line":11391},[34,21795,3223],{"class":40},[34,21797,21798],{"class":36,"line":11414},[34,21799,1475],{"emptyLinePlaceholder":1474},[34,21801,21802,21804,21806],{"class":36,"line":11438},[34,21803,7014],{"class":55},[34,21805,7379],{"class":3617},[34,21807,3630],{"class":40},[34,21809,21810],{"class":36,"line":11443},[34,21811,3204],{"class":40},[34,21813,21814,21816,21818,21820],{"class":36,"line":11448},[34,21815,21267],{"class":40},[34,21817,221],{"class":55},[34,21819,21201],{"class":3617},[34,21821,7286],{"class":40},[34,21823,21824,21826,21828,21830,21832,21834,21836,21838,21840,21842],{"class":36,"line":11453},[34,21825,8179],{"class":40},[34,21827,2835],{"class":55},[34,21829,3313],{"class":40},[34,21831,571],{"class":55},[34,21833,8168],{"class":55},[34,21835,918],{"class":40},[34,21837,2155],{"class":55},[34,21839,13098],{"class":40},[34,21841,2835],{"class":55},[34,21843,10490],{"class":40},[34,21845,21846],{"class":36,"line":11462},[34,21847,3223],{"class":40},[34,21849,21850],{"class":36,"line":11467},[34,21851,1475],{"emptyLinePlaceholder":1474},[34,21853,21854],{"class":36,"line":11473},[34,21855,1475],{"emptyLinePlaceholder":1474},[34,21857,21858,21860,21862],{"class":36,"line":11494},[34,21859,571],{"class":55},[34,21861,3627],{"class":3617},[34,21863,12503],{"class":40},[34,21865,21866],{"class":36,"line":11500},[34,21867,1475],{"emptyLinePlaceholder":1474},[34,21869,21870],{"class":36,"line":11514},[34,21871,21872],{"class":161},"    \u002F\u002Ftest01();\n",[34,21874,21875],{"class":36,"line":11520},[34,21876,21877],{"class":161},"    \u002F\u002Ftest02();\n",[34,21879,21880,21882],{"class":36,"line":11547},[34,21881,21337],{"class":3617},[34,21883,7286],{"class":40},[34,21885,21886],{"class":36,"line":11556},[34,21887,1475],{"emptyLinePlaceholder":1474},[34,21889,21890,21892,21894,21896],{"class":36,"line":11562},[34,21891,3957],{"class":3617},[34,21893,286],{"class":40},[34,21895,3962],{"class":504},[34,21897,4372],{"class":40},[34,21899,21900],{"class":36,"line":11570},[34,21901,1475],{"emptyLinePlaceholder":1474},[34,21903,21904,21906,21908],{"class":36,"line":11575},[34,21905,5743],{"class":55},[34,21907,98],{"class":44},[34,21909,2952],{"class":40},[34,21911,21912],{"class":36,"line":18250},[34,21913,3223],{"class":40},[19,21915,21917],{"id":21916},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[103,21919,21920],{},"默认情况下，c++编译器至少给一个类添加3个函数",[103,21922,21923],{},"1．默认构造函数(无参，函数体为空)",[103,21925,21926],{},"2．默认析构函数(无参，函数体为空)",[103,21928,21929],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[103,21931,21932],{},"构造函数调用规则如下：",[2798,21934,21935,21938],{},[1775,21936,21937],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[1775,21939,21940],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[24,21942,21944],{"className":1809,"code":21943,"language":1811,"meta":29,"style":29},"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",[31,21945,21946,21954,21958,21963,21969,21981,21985,21990,22002,22011,22023,22027,22031,22047,22056,22068,22072,22076,22082,22094,22098,22102,22108,22112,22116,22124,22128,22140,22145,22153,22157,22175,22179,22183,22191,22195,22200,22208,22223,22236,22240,22245,22252,22268,22281,22285,22289,22297,22301,22307,22311,22321,22325,22333],{"__ignoreMap":29},[34,21947,21948,21950,21952],{"class":36,"line":37},[34,21949,16340],{"class":55},[34,21951,17215],{"class":3617},[34,21953,17218],{"class":40},[34,21955,21956],{"class":36,"line":165},[34,21957,16362],{"class":55},[34,21959,21960],{"class":36,"line":171},[34,21961,21962],{"class":161},"    \u002F\u002F无参（默认）构造函数\n",[34,21964,21965,21967],{"class":36,"line":182},[34,21966,20165],{"class":3617},[34,21968,12503],{"class":40},[34,21970,21971,21973,21975,21977,21979],{"class":36,"line":188},[34,21972,11319],{"class":40},[34,21974,2835],{"class":55},[34,21976,21456],{"class":504},[34,21978,3103],{"class":55},[34,21980,10490],{"class":40},[34,21982,21983],{"class":36,"line":518},[34,21984,3841],{"class":40},[34,21986,21987],{"class":36,"line":524},[34,21988,21989],{"class":161},"    \u002F\u002F有参构造函数\n",[34,21991,21992,21994,21996,21998,22000],{"class":36,"line":530},[34,21993,20165],{"class":3617},[34,21995,286],{"class":40},[34,21997,571],{"class":55},[34,21999,3057],{"class":51},[34,22001,14090],{"class":40},[34,22003,22004,22007,22009],{"class":36,"line":624},[34,22005,22006],{"class":40},"        age ",[34,22008,221],{"class":55},[34,22010,3091],{"class":40},[34,22012,22013,22015,22017,22019,22021],{"class":36,"line":630},[34,22014,11319],{"class":40},[34,22016,2835],{"class":55},[34,22018,21496],{"class":504},[34,22020,3103],{"class":55},[34,22022,10490],{"class":40},[34,22024,22025],{"class":36,"line":636},[34,22026,3841],{"class":40},[34,22028,22029],{"class":36,"line":1513},[34,22030,20520],{"class":161},[34,22032,22033,22035,22037,22039,22041,22043,22045],{"class":36,"line":1519},[34,22034,20165],{"class":3617},[34,22036,286],{"class":40},[34,22038,8442],{"class":55},[34,22040,17215],{"class":3617},[34,22042,2155],{"class":55},[34,22044,8475],{"class":51},[34,22046,14090],{"class":40},[34,22048,22049,22051,22053],{"class":36,"line":3283},[34,22050,22006],{"class":40},[34,22052,221],{"class":55},[34,22054,22055],{"class":40}," p.age;\n",[34,22057,22058,22060,22062,22064,22066],{"class":36,"line":3297},[34,22059,11319],{"class":40},[34,22061,2835],{"class":55},[34,22063,21537],{"class":504},[34,22065,3103],{"class":55},[34,22067,10490],{"class":40},[34,22069,22070],{"class":36,"line":3302},[34,22071,3841],{"class":40},[34,22073,22074],{"class":36,"line":3308},[34,22075,20193],{"class":161},[34,22077,22078,22080],{"class":36,"line":3328},[34,22079,20198],{"class":3617},[34,22081,12503],{"class":40},[34,22083,22084,22086,22088,22090,22092],{"class":36,"line":3333},[34,22085,11319],{"class":40},[34,22087,2835],{"class":55},[34,22089,21574],{"class":504},[34,22091,3103],{"class":55},[34,22093,10490],{"class":40},[34,22095,22096],{"class":36,"line":3347},[34,22097,3841],{"class":40},[34,22099,22100],{"class":36,"line":3352},[34,22101,16362],{"class":55},[34,22103,22104,22106],{"class":36,"line":3381},[34,22105,3639],{"class":55},[34,22107,9447],{"class":40},[34,22109,22110],{"class":36,"line":3386},[34,22111,5648],{"class":40},[34,22113,22114],{"class":36,"line":3403},[34,22115,1475],{"emptyLinePlaceholder":1474},[34,22117,22118,22120,22122],{"class":36,"line":3408},[34,22119,7014],{"class":55},[34,22121,7238],{"class":3617},[34,22123,3630],{"class":40},[34,22125,22126],{"class":36,"line":3413},[34,22127,3204],{"class":40},[34,22129,22130,22132,22134,22136,22138],{"class":36,"line":3418},[34,22131,21077],{"class":40},[34,22133,8780],{"class":3617},[34,22135,286],{"class":40},[34,22137,2445],{"class":44},[34,22139,4372],{"class":40},[34,22141,22142],{"class":36,"line":3432},[34,22143,22144],{"class":161},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[34,22146,22147,22149,22151],{"class":36,"line":3437},[34,22148,21077],{"class":40},[34,22150,8683],{"class":3617},[34,22152,19161],{"class":40},[34,22154,22155],{"class":36,"line":4230},[34,22156,1475],{"emptyLinePlaceholder":1474},[34,22158,22159,22161,22163,22166,22168,22171,22173],{"class":36,"line":4244},[34,22160,8179],{"class":40},[34,22162,2835],{"class":55},[34,22164,22165],{"class":504}," \"p2的年龄为： \"",[34,22167,3103],{"class":55},[34,22169,22170],{"class":40}," p2.age ",[34,22172,2835],{"class":55},[34,22174,10490],{"class":40},[34,22176,22177],{"class":36,"line":4252},[34,22178,3223],{"class":40},[34,22180,22181],{"class":36,"line":4257},[34,22182,1475],{"emptyLinePlaceholder":1474},[34,22184,22185,22187,22189],{"class":36,"line":4263},[34,22186,7014],{"class":55},[34,22188,7307],{"class":3617},[34,22190,3630],{"class":40},[34,22192,22193],{"class":36,"line":4269},[34,22194,3204],{"class":40},[34,22196,22197],{"class":36,"line":4274},[34,22198,22199],{"class":161},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[34,22201,22202,22205],{"class":36,"line":9598},[34,22203,22204],{"class":40},"    Person p1;",[34,22206,22207],{"class":161}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[34,22209,22210,22212,22214,22216,22218,22220],{"class":36,"line":9622},[34,22211,21077],{"class":40},[34,22213,8683],{"class":3617},[34,22215,286],{"class":40},[34,22217,410],{"class":44},[34,22219,7616],{"class":40},[34,22221,22222],{"class":161}," \u002F\u002F用户提供的有参\n",[34,22224,22225,22227,22230,22233],{"class":36,"line":9627},[34,22226,21077],{"class":40},[34,22228,22229],{"class":3617},"p3",[34,22231,22232],{"class":40},"(p2);",[34,22234,22235],{"class":161}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[34,22237,22238],{"class":36,"line":9633},[34,22239,1475],{"emptyLinePlaceholder":1474},[34,22241,22242],{"class":36,"line":9660},[34,22243,22244],{"class":161},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[34,22246,22247,22250],{"class":36,"line":9665},[34,22248,22249],{"class":40},"    Person p4;",[34,22251,22207],{"class":161},[34,22253,22254,22256,22259,22261,22263,22265],{"class":36,"line":9671},[34,22255,21077],{"class":40},[34,22257,22258],{"class":3617},"p5",[34,22260,286],{"class":40},[34,22262,410],{"class":44},[34,22264,7616],{"class":40},[34,22266,22267],{"class":161}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[34,22269,22270,22272,22275,22278],{"class":36,"line":9683},[34,22271,21077],{"class":40},[34,22273,22274],{"class":3617},"p6",[34,22276,22277],{"class":40},"(p5);",[34,22279,22280],{"class":161}," \u002F\u002F用户自己提供拷贝构造\n",[34,22282,22283],{"class":36,"line":9695},[34,22284,3223],{"class":40},[34,22286,22287],{"class":36,"line":9707},[34,22288,1475],{"emptyLinePlaceholder":1474},[34,22290,22291,22293,22295],{"class":36,"line":11366},[34,22292,571],{"class":55},[34,22294,3627],{"class":3617},[34,22296,12503],{"class":40},[34,22298,22299],{"class":36,"line":11391},[34,22300,1475],{"emptyLinePlaceholder":1474},[34,22302,22303,22305],{"class":36,"line":11414},[34,22304,7283],{"class":3617},[34,22306,7286],{"class":40},[34,22308,22309],{"class":36,"line":11438},[34,22310,1475],{"emptyLinePlaceholder":1474},[34,22312,22313,22315,22317,22319],{"class":36,"line":11443},[34,22314,3957],{"class":3617},[34,22316,286],{"class":40},[34,22318,3962],{"class":504},[34,22320,4372],{"class":40},[34,22322,22323],{"class":36,"line":11448},[34,22324,1475],{"emptyLinePlaceholder":1474},[34,22326,22327,22329,22331],{"class":36,"line":11453},[34,22328,5743],{"class":55},[34,22330,98],{"class":44},[34,22332,2952],{"class":40},[34,22334,22335],{"class":36,"line":11462},[34,22336,3223],{"class":40},[19,22338,22340],{"id":22339},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[103,22342,22343],{},"浅拷贝：简单的赋值拷贝操作",[103,22345,22346],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[24,22348,22350],{"className":1809,"code":22349,"language":1811,"meta":29,"style":29},"#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",[31,22351,22352,22358,22368,22374,22378,22382,22387,22393,22397,22410,22414,22418,22425,22429,22439,22454,22467,22471,22476,22481,22497,22501,22514,22519,22524,22529,22538,22543,22558,22562,22566,22570,22576,22580,22585,22600,22604,22615,22629,22633,22642,22646,22652,22664,22668,22676,22680,22697,22728,22736,22764,22768,22772,22780,22784,22790],{"__ignoreMap":29},[34,22353,22354,22356],{"class":36,"line":37},[34,22355,3603],{"class":55},[34,22357,3606],{"class":504},[34,22359,22360,22362,22364,22366],{"class":36,"line":165},[34,22361,3611],{"class":55},[34,22363,3614],{"class":55},[34,22365,3618],{"class":3617},[34,22367,2952],{"class":40},[34,22369,22370,22372],{"class":36,"line":171},[34,22371,16340],{"class":55},[34,22373,16817],{"class":3617},[34,22375,22376],{"class":36,"line":182},[34,22377,3204],{"class":40},[34,22379,22380],{"class":36,"line":188},[34,22381,16362],{"class":55},[34,22383,22384],{"class":36,"line":518},[34,22385,22386],{"class":161},"    \u002F\u002F默认构造函数\n",[34,22388,22389,22391],{"class":36,"line":524},[34,22390,20165],{"class":3617},[34,22392,3630],{"class":40},[34,22394,22395],{"class":36,"line":530},[34,22396,3684],{"class":40},[34,22398,22399,22401,22403,22406,22408],{"class":36,"line":624},[34,22400,5104],{"class":40},[34,22402,2835],{"class":55},[34,22404,22405],{"class":504},"\"默认构造函数\"",[34,22407,2835],{"class":55},[34,22409,2857],{"class":40},[34,22411,22412],{"class":36,"line":630},[34,22413,3841],{"class":40},[34,22415,22416],{"class":36,"line":636},[34,22417,21989],{"class":161},[34,22419,22420,22422],{"class":36,"line":1513},[34,22421,20198],{"class":3617},[34,22423,22424],{"class":40},"(int age,int height)\n",[34,22426,22427],{"class":36,"line":1519},[34,22428,3684],{"class":40},[34,22430,22431,22434,22436],{"class":36,"line":3283},[34,22432,22433],{"class":40},"        m_Age",[34,22435,221],{"class":55},[34,22437,22438],{"class":40},"age;\n",[34,22440,22441,22444,22446,22448,22451],{"class":36,"line":3297},[34,22442,22443],{"class":40},"        m_Height",[34,22445,13366],{"class":55},[34,22447,4036],{"class":55},[34,22449,22450],{"class":40},"(height);",[34,22452,22453],{"class":161},"\u002F\u002F放到堆区\n",[34,22455,22456,22458,22460,22463,22465],{"class":36,"line":3302},[34,22457,5104],{"class":40},[34,22459,2835],{"class":55},[34,22461,22462],{"class":504},"\"有参构造函数\"",[34,22464,2835],{"class":55},[34,22466,2857],{"class":40},[34,22468,22469],{"class":36,"line":3308},[34,22470,3841],{"class":40},[34,22472,22473],{"class":36,"line":3328},[34,22474,22475],{"class":161},"    \u002F\u002F深拷贝解决上述问题\n",[34,22477,22478],{"class":36,"line":3333},[34,22479,22480],{"class":161},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[34,22482,22483,22485,22487,22489,22491,22493,22495],{"class":36,"line":3347},[34,22484,20165],{"class":3617},[34,22486,286],{"class":40},[34,22488,8442],{"class":55},[34,22490,17215],{"class":3617},[34,22492,12234],{"class":55},[34,22494,103],{"class":51},[34,22496,101],{"class":40},[34,22498,22499],{"class":36,"line":3352},[34,22500,3684],{"class":40},[34,22502,22503,22505,22507,22510,22512],{"class":36,"line":3381},[34,22504,5104],{"class":40},[34,22506,2835],{"class":55},[34,22508,22509],{"class":504},"\"拷贝构造函数\"",[34,22511,2835],{"class":55},[34,22513,2857],{"class":40},[34,22515,22516],{"class":36,"line":3386},[34,22517,22518],{"class":161},"        \u002F\u002F编译器默认的写如下注释部分\n",[34,22520,22521],{"class":36,"line":3403},[34,22522,22523],{"class":161},"        \u002F\u002Fm_Age=p.m_Age;\n",[34,22525,22526],{"class":36,"line":3408},[34,22527,22528],{"class":161},"        \u002F\u002Fm_Height=p.m_Height;\n",[34,22530,22531,22533,22535],{"class":36,"line":3413},[34,22532,22433],{"class":40},[34,22534,221],{"class":55},[34,22536,22537],{"class":40},"p.m_Age;\n",[34,22539,22540],{"class":36,"line":3418},[34,22541,22542],{"class":161},"        \u002F\u002F深拷贝操作\n",[34,22544,22545,22547,22549,22551,22553,22555],{"class":36,"line":3432},[34,22546,22443],{"class":40},[34,22548,13366],{"class":55},[34,22550,4036],{"class":55},[34,22552,286],{"class":40},[34,22554,2252],{"class":55},[34,22556,22557],{"class":40},"p.m_Height);\n",[34,22559,22560],{"class":36,"line":3437},[34,22561,3841],{"class":40},[34,22563,22564],{"class":36,"line":4230},[34,22565,1475],{"emptyLinePlaceholder":1474},[34,22567,22568],{"class":36,"line":4244},[34,22569,20193],{"class":161},[34,22571,22572,22574],{"class":36,"line":4252},[34,22573,20198],{"class":3617},[34,22575,3630],{"class":40},[34,22577,22578],{"class":36,"line":4257},[34,22579,3684],{"class":40},[34,22581,22582],{"class":36,"line":4263},[34,22583,22584],{"class":161},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[34,22586,22587,22589,22592,22595,22598],{"class":36,"line":4269},[34,22588,4150],{"class":55},[34,22590,22591],{"class":40},"(m_Height ",[34,22593,22594],{"class":55},"!=",[34,22596,22597],{"class":44}," NULL",[34,22599,101],{"class":40},[34,22601,22602],{"class":36,"line":4274},[34,22603,4163],{"class":40},[34,22605,22606,22609,22612],{"class":36,"line":9598},[34,22607,22608],{"class":55},"            delete",[34,22610,22611],{"class":40}," m_Height;",[34,22613,22614],{"class":161}," \u002F\u002F释放堆区内存\n",[34,22616,22617,22620,22622,22624,22626],{"class":36,"line":9622},[34,22618,22619],{"class":40},"            m_Height",[34,22621,221],{"class":55},[34,22623,4046],{"class":44},[34,22625,1870],{"class":40},[34,22627,22628],{"class":161}," \u002F\u002F防止野指针\n",[34,22630,22631],{"class":36,"line":9627},[34,22632,4182],{"class":40},[34,22634,22635,22637,22639],{"class":36,"line":9633},[34,22636,5104],{"class":40},[34,22638,2835],{"class":55},[34,22640,22641],{"class":504},"\"Person的析构函数调用\"\n",[34,22643,22644],{"class":36,"line":9660},[34,22645,3841],{"class":40},[34,22647,22648,22650],{"class":36,"line":9665},[34,22649,3639],{"class":55},[34,22651,17312],{"class":40},[34,22653,22654,22656,22658,22661],{"class":36,"line":9671},[34,22655,3639],{"class":55},[34,22657,8168],{"class":55},[34,22659,22660],{"class":40},"m_Height;",[34,22662,22663],{"class":161}," \u002F\u002F定义一个指针，指向身高\n",[34,22665,22666],{"class":36,"line":9683},[34,22667,5648],{"class":40},[34,22669,22670,22672,22674],{"class":36,"line":9695},[34,22671,7014],{"class":55},[34,22673,7238],{"class":3617},[34,22675,3630],{"class":40},[34,22677,22678],{"class":36,"line":9707},[34,22679,3204],{"class":40},[34,22681,22682,22684,22686,22688,22690,22692,22695],{"class":36,"line":11366},[34,22683,21077],{"class":40},[34,22685,8780],{"class":3617},[34,22687,286],{"class":40},[34,22689,2445],{"class":44},[34,22691,291],{"class":40},[34,22693,22694],{"class":44},"160",[34,22696,4372],{"class":40},[34,22698,22699,22701,22703,22706,22708,22711,22713,22716,22718,22721,22723,22725],{"class":36,"line":11391},[34,22700,3209],{"class":40},[34,22702,2835],{"class":55},[34,22704,22705],{"class":504},"\"p1的年龄为:\"",[34,22707,2835],{"class":55},[34,22709,22710],{"class":40},"p1.m_Age",[34,22712,2835],{"class":55},[34,22714,22715],{"class":504},"\"身高为：\"",[34,22717,8069],{"class":55},[34,22719,22720],{"class":40},"p1.m_Height",[34,22722,2835],{"class":55},[34,22724,2900],{"class":40},[34,22726,22727],{"class":161},"  \u002F\u002F18\n",[34,22729,22730,22732,22734],{"class":36,"line":11414},[34,22731,21077],{"class":40},[34,22733,8683],{"class":3617},[34,22735,19161],{"class":40},[34,22737,22738,22740,22742,22745,22747,22749,22751,22753,22755,22758,22760,22762],{"class":36,"line":11438},[34,22739,3209],{"class":40},[34,22741,2835],{"class":55},[34,22743,22744],{"class":504},"\"p2的年龄为：\"",[34,22746,2835],{"class":55},[34,22748,21107],{"class":40},[34,22750,2835],{"class":55},[34,22752,22715],{"class":504},[34,22754,8069],{"class":55},[34,22756,22757],{"class":40},"p2.m_Height",[34,22759,2835],{"class":55},[34,22761,2900],{"class":40},[34,22763,22727],{"class":161},[34,22765,22766],{"class":36,"line":11443},[34,22767,14858],{"class":40},[34,22769,22770],{"class":36,"line":11448},[34,22771,3223],{"class":40},[34,22773,22774,22776,22778],{"class":36,"line":11453},[34,22775,571],{"class":55},[34,22777,3627],{"class":3617},[34,22779,3630],{"class":40},[34,22781,22782],{"class":36,"line":11462},[34,22783,3204],{"class":40},[34,22785,22786,22788],{"class":36,"line":11467},[34,22787,7283],{"class":3617},[34,22789,7286],{"class":40},[34,22791,22792],{"class":36,"line":11473},[34,22793,3223],{"class":40},[103,22795,22796],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[103,22798,22799],{},"浅拷贝带来的问题是堆区的内存重复释放",[103,22801,22802],{},[109,22803],{"alt":29,"src":22804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[103,22806,22807],{},"浅拷贝问题要使用深拷贝来解决",[103,22809,22810],{},[109,22811],{"alt":29,"src":22812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[103,22814,22815],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[19,22817,22819],{"id":22818},"_826初始化列表","8.2.6初始化列表",[103,22821,22822],{},"作用：初始化属性",[103,22824,6832],{},[24,22826,22829],{"className":22827,"code":22828,"language":6838},[6836],"构造函数():属性1(值1),属性2(值2).....{}\n",[31,22830,22828],{"__ignoreMap":29},[103,22832,22833],{},"例子",[24,22835,22837],{"className":1809,"code":22836,"language":1811,"meta":29,"style":29},"#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",[31,22838,22839,22845,22855,22861,22865,22870,22874,22879,22884,22889,22894,22899,22904,22908,22913,22918,22961,22970,22988,23006,23024,23028,23032,23039,23046,23053,23057,23061,23069,23073,23077,23097,23106,23110,23114,23124,23128,23136],{"__ignoreMap":29},[34,22840,22841,22843],{"class":36,"line":37},[34,22842,3603],{"class":55},[34,22844,3606],{"class":504},[34,22846,22847,22849,22851,22853],{"class":36,"line":165},[34,22848,3611],{"class":55},[34,22850,3614],{"class":55},[34,22852,3618],{"class":3617},[34,22854,2952],{"class":40},[34,22856,22857,22859],{"class":36,"line":171},[34,22858,16340],{"class":55},[34,22860,16817],{"class":3617},[34,22862,22863],{"class":36,"line":182},[34,22864,3204],{"class":40},[34,22866,22867],{"class":36,"line":188},[34,22868,22869],{"class":55},"    public:\n",[34,22871,22872],{"class":36,"line":518},[34,22873,1475],{"emptyLinePlaceholder":1474},[34,22875,22876],{"class":36,"line":524},[34,22877,22878],{"class":161},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[34,22880,22881],{"class":36,"line":530},[34,22882,22883],{"class":161},"    \u002F\u002FPerson(int a, int b, int c) {\n",[34,22885,22886],{"class":36,"line":624},[34,22887,22888],{"class":161},"    \u002F\u002F  m_A = a;\n",[34,22890,22891],{"class":36,"line":630},[34,22892,22893],{"class":161},"    \u002F\u002F  m_B = b;\n",[34,22895,22896],{"class":36,"line":636},[34,22897,22898],{"class":161},"    \u002F\u002F  m_C = c;\n",[34,22900,22901],{"class":36,"line":1513},[34,22902,22903],{"class":161},"    \u002F\u002F}\n",[34,22905,22906],{"class":36,"line":1519},[34,22907,1475],{"emptyLinePlaceholder":1474},[34,22909,22910],{"class":36,"line":3283},[34,22911,22912],{"class":161},"    \u002F\u002F初始化列表方式初始化\n",[34,22914,22915],{"class":36,"line":3297},[34,22916,22917],{"class":161},"    \u002F\u002F使用有参构造函数\n",[34,22919,22920,22922,22924,22926,22928,22930,22932,22934,22936,22938,22940,22943,22946,22949,22952,22955,22958],{"class":36,"line":3302},[34,22921,20165],{"class":3617},[34,22923,286],{"class":40},[34,22925,571],{"class":55},[34,22927,3057],{"class":51},[34,22929,48],{"class":40},[34,22931,571],{"class":55},[34,22933,4486],{"class":51},[34,22935,48],{"class":40},[34,22937,571],{"class":55},[34,22939,4502],{"class":51},[34,22941,22942],{"class":40},") :",[34,22944,22945],{"class":3617},"m_A",[34,22947,22948],{"class":40},"(a), ",[34,22950,22951],{"class":3617},"m_B",[34,22953,22954],{"class":40},"(b), ",[34,22956,22957],{"class":3617},"m_C",[34,22959,22960],{"class":40},"(c) {}\n",[34,22962,22963,22965,22968],{"class":36,"line":3308},[34,22964,16555],{"class":55},[34,22966,22967],{"class":3617}," PrintPerson",[34,22969,12503],{"class":40},[34,22971,22972,22974,22976,22979,22981,22984,22986],{"class":36,"line":3328},[34,22973,11319],{"class":40},[34,22975,2835],{"class":55},[34,22977,22978],{"class":504}," \"mA:\"",[34,22980,3103],{"class":55},[34,22982,22983],{"class":40}," m_A ",[34,22985,2835],{"class":55},[34,22987,10490],{"class":40},[34,22989,22990,22992,22994,22997,22999,23002,23004],{"class":36,"line":3333},[34,22991,11319],{"class":40},[34,22993,2835],{"class":55},[34,22995,22996],{"class":504}," \"mB:\"",[34,22998,3103],{"class":55},[34,23000,23001],{"class":40}," m_B ",[34,23003,2835],{"class":55},[34,23005,10490],{"class":40},[34,23007,23008,23010,23012,23015,23017,23020,23022],{"class":36,"line":3347},[34,23009,11319],{"class":40},[34,23011,2835],{"class":55},[34,23013,23014],{"class":504}," \"mC:\"",[34,23016,3103],{"class":55},[34,23018,23019],{"class":40}," m_C ",[34,23021,2835],{"class":55},[34,23023,10490],{"class":40},[34,23025,23026],{"class":36,"line":3352},[34,23027,3841],{"class":40},[34,23029,23030],{"class":36,"line":3381},[34,23031,16868],{"class":55},[34,23033,23034,23036],{"class":36,"line":3386},[34,23035,3639],{"class":55},[34,23037,23038],{"class":40}," m_A;\n",[34,23040,23041,23043],{"class":36,"line":3403},[34,23042,3639],{"class":55},[34,23044,23045],{"class":40}," m_B;\n",[34,23047,23048,23050],{"class":36,"line":3408},[34,23049,3639],{"class":55},[34,23051,23052],{"class":40}," m_C;\n",[34,23054,23055],{"class":36,"line":3413},[34,23056,5648],{"class":40},[34,23058,23059],{"class":36,"line":3418},[34,23060,1475],{"emptyLinePlaceholder":1474},[34,23062,23063,23065,23067],{"class":36,"line":3432},[34,23064,571],{"class":55},[34,23066,3627],{"class":3617},[34,23068,7628],{"class":40},[34,23070,23071],{"class":36,"line":3437},[34,23072,3204],{"class":40},[34,23074,23075],{"class":36,"line":4230},[34,23076,1475],{"emptyLinePlaceholder":1474},[34,23078,23079,23081,23083,23085,23087,23089,23091,23093,23095],{"class":36,"line":4244},[34,23080,21077],{"class":40},[34,23082,103],{"class":3617},[34,23084,286],{"class":40},[34,23086,394],{"class":44},[34,23088,48],{"class":40},[34,23090,332],{"class":44},[34,23092,48],{"class":40},[34,23094,337],{"class":44},[34,23096,4372],{"class":40},[34,23098,23099,23101,23104],{"class":36,"line":4252},[34,23100,17512],{"class":40},[34,23102,23103],{"class":3617},"PrintPerson",[34,23105,7286],{"class":40},[34,23107,23108],{"class":36,"line":4257},[34,23109,1475],{"emptyLinePlaceholder":1474},[34,23111,23112],{"class":36,"line":4263},[34,23113,1475],{"emptyLinePlaceholder":1474},[34,23115,23116,23118,23120,23122],{"class":36,"line":4269},[34,23117,3957],{"class":3617},[34,23119,286],{"class":40},[34,23121,3962],{"class":504},[34,23123,4372],{"class":40},[34,23125,23126],{"class":36,"line":4274},[34,23127,1475],{"emptyLinePlaceholder":1474},[34,23129,23130,23132,23134],{"class":36,"line":9598},[34,23131,5743],{"class":55},[34,23133,98],{"class":44},[34,23135,2952],{"class":40},[34,23137,23138],{"class":36,"line":9622},[34,23139,3223],{"class":40},[103,23141,23142,23143,23146,23147],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[1165,23144,23145],{},"参数名就是定义的对象属性","，",[1165,23148,23149],{},"属性后面的值为有参构造函数的形参",[24,23151,23153],{"className":1809,"code":23152,"language":1811,"meta":29,"style":29},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[31,23154,23155],{"__ignoreMap":29},[34,23156,23157,23159,23161,23163,23166,23168,23171,23173,23176,23178,23181,23183,23186,23188],{"class":36,"line":37},[34,23158,20692],{"class":3617},[34,23160,286],{"class":40},[34,23162,571],{"class":55},[34,23164,23165],{"class":40}," a.",[34,23167,571],{"class":55},[34,23169,23170],{"class":40}," b,",[34,23172,571],{"class":55},[34,23174,23175],{"class":40}," b):",[34,23177,22945],{"class":3617},[34,23179,23180],{"class":40},"(a),",[34,23182,22951],{"class":3617},[34,23184,23185],{"class":40},"(c),",[34,23187,22957],{"class":3617},[34,23189,23190],{"class":40},"(b) {}\n",[19,23192,23194],{"id":23193},"_827类对象作为类成员","8.2.7类对象作为类成员",[103,23196,23197],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[103,23199,16279],{},[24,23201,23203],{"className":1809,"code":23202,"language":1811,"meta":29,"style":29},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[31,23204,23205,23210,23215,23219,23224,23228],{"__ignoreMap":29},[34,23206,23207],{"class":36,"line":37},[34,23208,23209],{"class":40},"A{};\n",[34,23211,23212],{"class":36,"line":165},[34,23213,23214],{"class":40},"B\n",[34,23216,23217],{"class":36,"line":171},[34,23218,3204],{"class":40},[34,23220,23221],{"class":36,"line":182},[34,23222,23223],{"class":40},"    A a;\n",[34,23225,23226],{"class":36,"line":188},[34,23227,3223],{"class":40},[34,23229,23230],{"class":36,"line":518},[34,23231,23232],{"class":161},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[103,23234,23235],{},"案例",[24,23237,23239],{"className":1809,"code":23238,"language":1811,"meta":29,"style":29},"\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",[31,23240,23241,23246,23253,23257,23262,23267,23281,23285,23295,23306,23310,23317,23321,23334,23338,23343,23348,23352,23358,23362,23366,23370,23401,23405,23416,23420,23426,23430,23443,23447,23451,23455,23460,23465,23469,23477,23481,23498,23517,23521,23529,23533,23539],{"__ignoreMap":29},[34,23242,23243],{"class":36,"line":37},[34,23244,23245],{"class":161},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[34,23247,23248,23250],{"class":36,"line":165},[34,23249,16340],{"class":55},[34,23251,23252],{"class":3617}," Phone\n",[34,23254,23255],{"class":36,"line":171},[34,23256,3204],{"class":40},[34,23258,23259],{"class":36,"line":182},[34,23260,23261],{"class":40},"public：\n",[34,23263,23264],{"class":36,"line":188},[34,23265,23266],{"class":161},"    \u002F\u002F 赋值(构造函数)\n",[34,23268,23269,23272,23274,23276,23279],{"class":36,"line":518},[34,23270,23271],{"class":3617},"    Phone",[34,23273,286],{"class":40},[34,23275,16563],{"class":3617},[34,23277,23278],{"class":51}," pName",[34,23280,101],{"class":40},[34,23282,23283],{"class":36,"line":524},[34,23284,3684],{"class":40},[34,23286,23287,23290,23292],{"class":36,"line":530},[34,23288,23289],{"class":40},"        m_pName",[34,23291,221],{"class":55},[34,23293,23294],{"class":40},"pName;\n",[34,23296,23297,23299,23301,23304],{"class":36,"line":624},[34,23298,5104],{"class":40},[34,23300,2835],{"class":55},[34,23302,23303],{"class":504},"\"Phone的构造函数调用\"",[34,23305,2952],{"class":40},[34,23307,23308],{"class":36,"line":630},[34,23309,3841],{"class":40},[34,23311,23312,23315],{"class":36,"line":636},[34,23313,23314],{"class":3617},"    ~Phone",[34,23316,3630],{"class":40},[34,23318,23319],{"class":36,"line":1513},[34,23320,3684],{"class":40},[34,23322,23323,23325,23327,23330,23332],{"class":36,"line":1519},[34,23324,5104],{"class":40},[34,23326,2835],{"class":55},[34,23328,23329],{"class":504},"\"Phone析构函数调用\"",[34,23331,2835],{"class":55},[34,23333,2857],{"class":40},[34,23335,23336],{"class":36,"line":3283},[34,23337,3841],{"class":40},[34,23339,23340],{"class":36,"line":3297},[34,23341,23342],{"class":161},"    \u002F\u002F\n",[34,23344,23345],{"class":36,"line":3302},[34,23346,23347],{"class":40},"    string m_PName;\n",[34,23349,23350],{"class":36,"line":3308},[34,23351,5648],{"class":40},[34,23353,23354,23356],{"class":36,"line":3328},[34,23355,16340],{"class":55},[34,23357,16817],{"class":3617},[34,23359,23360],{"class":36,"line":3333},[34,23361,3204],{"class":40},[34,23363,23364],{"class":36,"line":3347},[34,23365,16362],{"class":55},[34,23367,23368],{"class":36,"line":3352},[34,23369,18640],{"class":161},[34,23371,23372,23374,23376,23378,23380,23382,23384,23387,23390,23392,23395,23398],{"class":36,"line":3381},[34,23373,20165],{"class":3617},[34,23375,286],{"class":40},[34,23377,16563],{"class":3617},[34,23379,16566],{"class":51},[34,23381,291],{"class":40},[34,23383,16563],{"class":3617},[34,23385,23386],{"class":51}," pname",[34,23388,23389],{"class":40},"):",[34,23391,16656],{"class":3617},[34,23393,23394],{"class":40},"(name),m_phone.",[34,23396,23397],{"class":3617},"m_PName",[34,23399,23400],{"class":40},"(pname) \n",[34,23402,23403],{"class":36,"line":3386},[34,23404,3684],{"class":40},[34,23406,23407,23409,23411,23414],{"class":36,"line":3403},[34,23408,5104],{"class":40},[34,23410,2835],{"class":55},[34,23412,23413],{"class":504},"\"Person的构造函数调用\"",[34,23415,2952],{"class":40},[34,23417,23418],{"class":36,"line":3408},[34,23419,3841],{"class":40},[34,23421,23422,23424],{"class":36,"line":3413},[34,23423,20198],{"class":3617},[34,23425,3630],{"class":40},[34,23427,23428],{"class":36,"line":3418},[34,23429,3684],{"class":40},[34,23431,23432,23434,23436,23439,23441],{"class":36,"line":3432},[34,23433,5104],{"class":40},[34,23435,2835],{"class":55},[34,23437,23438],{"class":504},"\"Person析构函数调用\"",[34,23440,2835],{"class":55},[34,23442,2857],{"class":40},[34,23444,23445],{"class":36,"line":3437},[34,23446,3841],{"class":40},[34,23448,23449],{"class":36,"line":4230},[34,23450,9430],{"class":161},[34,23452,23453],{"class":36,"line":4244},[34,23454,16538],{"class":40},[34,23456,23457],{"class":36,"line":4252},[34,23458,23459],{"class":161},"    \u002F\u002F手机\n",[34,23461,23462],{"class":36,"line":4257},[34,23463,23464],{"class":40},"    Phone m_Phone;\n",[34,23466,23467],{"class":36,"line":4263},[34,23468,5648],{"class":40},[34,23470,23471,23473,23475],{"class":36,"line":4269},[34,23472,7014],{"class":55},[34,23474,7238],{"class":3617},[34,23476,3630],{"class":40},[34,23478,23479],{"class":36,"line":4274},[34,23480,3204],{"class":40},[34,23482,23483,23485,23487,23489,23491,23493,23496],{"class":36,"line":9598},[34,23484,21077],{"class":40},[34,23486,103],{"class":3617},[34,23488,286],{"class":40},[34,23490,9566],{"class":504},[34,23492,291],{"class":40},[34,23494,23495],{"class":504},"\"安卓\"",[34,23497,4372],{"class":40},[34,23499,23500,23502,23504,23507,23509,23512,23514],{"class":36,"line":9622},[34,23501,3209],{"class":40},[34,23503,2835],{"class":55},[34,23505,23506],{"class":40},"p.Name",[34,23508,2835],{"class":55},[34,23510,23511],{"class":504},"\"拿着：\"",[34,23513,2835],{"class":55},[34,23515,23516],{"class":40},"p.m_phone.m_PName;\n",[34,23518,23519],{"class":36,"line":9627},[34,23520,3223],{"class":40},[34,23522,23523,23525,23527],{"class":36,"line":9633},[34,23524,571],{"class":55},[34,23526,3627],{"class":3617},[34,23528,3630],{"class":40},[34,23530,23531],{"class":36,"line":9660},[34,23532,3204],{"class":40},[34,23534,23535,23537],{"class":36,"line":9665},[34,23536,7283],{"class":3617},[34,23538,7286],{"class":40},[34,23540,23541],{"class":36,"line":9671},[34,23542,3223],{"class":40},[103,23544,10675],{},[24,23546,23548],{"className":1809,"code":23547,"language":1811,"meta":29,"style":29},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[31,23549,23550,23555],{"__ignoreMap":29},[34,23551,23552],{"class":36,"line":37},[34,23553,23554],{"class":161},"    \u002F\u002F不需要写这个：\n",[34,23556,23557],{"class":36,"line":165},[34,23558,23559],{"class":161},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[103,23561,23562],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[24,23564,23566],{"className":1809,"code":23565,"language":1811,"meta":29,"style":29},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[31,23567,23568],{"__ignoreMap":29},[34,23569,23570,23572,23575,23577,23580,23583],{"class":36,"line":37},[34,23571,20692],{"class":3617},[34,23573,23574],{"class":40},"(string name.string pname):",[34,23576,16656],{"class":3617},[34,23578,23579],{"class":40},"(name),",[34,23581,23582],{"class":3617},"m_phone",[34,23584,23585],{"class":40},"(pname) {}\n",[103,23587,23588,23589,221,23592],{},"采用的是隐式转换法，实际为如下：\n",[31,23590,23591],{},"m_phone(pname)",[31,23593,23594],{},"Phone m_phone=pname",[103,23596,23597,23600],{},[1165,23598,23599],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[103,23602,23603],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[19,23605,23607],{"id":23606},"_828静态对象","8.2.8静态对象",[103,23609,23610],{},"静态对象在成员对象前static，称为静态对象",[103,23612,23613],{},"静态对象分为两类：",[1772,23615,23616],{},[1775,23617,23618],{},"静态成员变量",[2798,23620,23621,23624,23627],{},[1775,23622,23623],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[1775,23625,23626],{},"②在编译阶段分配内存",[1775,23628,23629],{},"③类内声明，类外初始化",[1772,23631,23632],{"start":165},[1775,23633,23634],{},"静态成员函数",[2798,23636,23637,23640],{},[1775,23638,23639],{},"①所有对象共享同一个函数",[1775,23641,23642],{},"②静态成员函数只能访问静态成员变量",[1353,23644,23646],{"id":23645},"_8281静态成员变量","8.2.8.1静态成员变量",[24,23648,23650],{"className":1809,"code":23649,"language":1811,"meta":29,"style":29},"#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",[31,23651,23652,23658,23668,23674,23678,23682,23687,23692,23697,23705,23709,23713,23717,23725,23729,23733,23738,23751,23755,23763,23767,23773],{"__ignoreMap":29},[34,23653,23654,23656],{"class":36,"line":37},[34,23655,3603],{"class":55},[34,23657,3606],{"class":504},[34,23659,23660,23662,23664,23666],{"class":36,"line":165},[34,23661,3611],{"class":55},[34,23663,3614],{"class":55},[34,23665,3618],{"class":3617},[34,23667,2952],{"class":40},[34,23669,23670,23672],{"class":36,"line":171},[34,23671,16340],{"class":55},[34,23673,16817],{"class":3617},[34,23675,23676],{"class":36,"line":182},[34,23677,3204],{"class":40},[34,23679,23680],{"class":36,"line":188},[34,23681,16362],{"class":55},[34,23683,23684],{"class":36,"line":518},[34,23685,23686],{"class":161},"    \u002F\u002F非静态成员变量\n",[34,23688,23689],{"class":36,"line":524},[34,23690,23691],{"class":161},"    \u002F\u002F int m_A;\n",[34,23693,23694],{"class":36,"line":530},[34,23695,23696],{"class":161},"    \u002F\u002F定义静态成员变量\n",[34,23698,23699,23701,23703],{"class":36,"line":624},[34,23700,12670],{"class":55},[34,23702,4036],{"class":55},[34,23704,23038],{"class":40},[34,23706,23707],{"class":36,"line":630},[34,23708,1475],{"emptyLinePlaceholder":1474},[34,23710,23711],{"class":36,"line":636},[34,23712,1475],{"emptyLinePlaceholder":1474},[34,23714,23715],{"class":36,"line":1513},[34,23716,5648],{"class":40},[34,23718,23719,23721,23723],{"class":36,"line":1519},[34,23720,7014],{"class":55},[34,23722,7238],{"class":3617},[34,23724,3630],{"class":40},[34,23726,23727],{"class":36,"line":3283},[34,23728,3204],{"class":40},[34,23730,23731],{"class":36,"line":3297},[34,23732,16959],{"class":40},[34,23734,23735],{"class":36,"line":3302},[34,23736,23737],{"class":161},"    \u002F\u002F输出类成员变量这块内存\n",[34,23739,23740,23742,23744,23747,23749],{"class":36,"line":3308},[34,23741,3209],{"class":40},[34,23743,2835],{"class":55},[34,23745,23746],{"class":40},"p.m_A",[34,23748,2835],{"class":55},[34,23750,2857],{"class":40},[34,23752,23753],{"class":36,"line":3328},[34,23754,3223],{"class":40},[34,23756,23757,23759,23761],{"class":36,"line":3333},[34,23758,571],{"class":55},[34,23760,3627],{"class":3617},[34,23762,3630],{"class":40},[34,23764,23765],{"class":36,"line":3347},[34,23766,3204],{"class":40},[34,23768,23769,23771],{"class":36,"line":3352},[34,23770,7283],{"class":3617},[34,23772,3630],{"class":40},[34,23774,23775],{"class":36,"line":3381},[34,23776,3223],{"class":40},[103,23778,23779],{},"此时输出是报错的：无法解析外部命令",[103,23781,23782],{},"解决这一问题：必须用到类内声明，类外初始化操作",[24,23784,23786],{"className":1809,"code":23785,"language":1811,"meta":29,"style":29},"#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",[31,23787,23788,23794,23804,23810,23814,23818,23823,23831,23835,23840,23855,23863,23867,23871,23876,23881,23893,23898,23909,23914,23919,23932,23936,23944,23948,23954],{"__ignoreMap":29},[34,23789,23790,23792],{"class":36,"line":37},[34,23791,3603],{"class":55},[34,23793,3606],{"class":504},[34,23795,23796,23798,23800,23802],{"class":36,"line":165},[34,23797,3611],{"class":55},[34,23799,3614],{"class":55},[34,23801,3618],{"class":3617},[34,23803,2952],{"class":40},[34,23805,23806,23808],{"class":36,"line":171},[34,23807,16340],{"class":55},[34,23809,16817],{"class":3617},[34,23811,23812],{"class":36,"line":182},[34,23813,3204],{"class":40},[34,23815,23816],{"class":36,"line":188},[34,23817,16362],{"class":55},[34,23819,23820],{"class":36,"line":518},[34,23821,23822],{"class":161},"    \u002F\u002F类内声明\n",[34,23824,23825,23827,23829],{"class":36,"line":524},[34,23826,12670],{"class":55},[34,23828,4036],{"class":55},[34,23830,23038],{"class":40},[34,23832,23833],{"class":36,"line":530},[34,23834,5648],{"class":40},[34,23836,23837],{"class":36,"line":624},[34,23838,23839],{"class":161},"\u002F\u002F类外初始化\n",[34,23841,23842,23844,23846,23849,23851,23853],{"class":36,"line":630},[34,23843,571],{"class":55},[34,23845,17215],{"class":3617},[34,23847,23848],{"class":40},"::m_A",[34,23850,221],{"class":55},[34,23852,410],{"class":44},[34,23854,2952],{"class":40},[34,23856,23857,23859,23861],{"class":36,"line":636},[34,23858,7014],{"class":55},[34,23860,7238],{"class":3617},[34,23862,3630],{"class":40},[34,23864,23865],{"class":36,"line":1513},[34,23866,3204],{"class":40},[34,23868,23869],{"class":36,"line":1519},[34,23870,16959],{"class":40},[34,23872,23873],{"class":36,"line":3283},[34,23874,23875],{"class":161},"    \u002F\u002F访问变量的原内存空间\n",[34,23877,23878],{"class":36,"line":3297},[34,23879,23880],{"class":161},"    \u002F\u002F100\n",[34,23882,23883,23885,23887,23889,23891],{"class":36,"line":3302},[34,23884,3209],{"class":40},[34,23886,2835],{"class":55},[34,23888,23746],{"class":40},[34,23890,2835],{"class":55},[34,23892,2857],{"class":40},[34,23894,23895],{"class":36,"line":3308},[34,23896,23897],{"class":40},"    Person p2;\n",[34,23899,23900,23903,23905,23907],{"class":36,"line":3328},[34,23901,23902],{"class":40},"    p2.m_A",[34,23904,221],{"class":55},[34,23906,3376],{"class":44},[34,23908,2952],{"class":40},[34,23910,23911],{"class":36,"line":3333},[34,23912,23913],{"class":161},"    \u002F\u002F继续访问这片空间\n",[34,23915,23916],{"class":36,"line":3347},[34,23917,23918],{"class":161},"    \u002F\u002F200\n",[34,23920,23921,23923,23925,23928,23930],{"class":36,"line":3352},[34,23922,3209],{"class":40},[34,23924,2835],{"class":55},[34,23926,23927],{"class":40},"p2.m_A",[34,23929,2835],{"class":55},[34,23931,2857],{"class":40},[34,23933,23934],{"class":36,"line":3381},[34,23935,3223],{"class":40},[34,23937,23938,23940,23942],{"class":36,"line":3386},[34,23939,571],{"class":55},[34,23941,3627],{"class":3617},[34,23943,3630],{"class":40},[34,23945,23946],{"class":36,"line":3403},[34,23947,3204],{"class":40},[34,23949,23950,23952],{"class":36,"line":3408},[34,23951,7283],{"class":3617},[34,23953,7286],{"class":40},[34,23955,23956],{"class":36,"line":3413},[34,23957,3223],{"class":40},[103,23959,23960],{},[1165,23961,23962],{},"静态变量的访问",[24,23964,23966],{"className":1809,"code":23965,"language":1811,"meta":29,"style":29},"#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",[31,23967,23968,23974,23984,23990,23994,23998,24002,24010,24014,24019,24027,24031,24035,24049,24064,24072,24076,24081,24086,24091,24096,24108,24113,24118,24132,24149,24153,24161,24165,24171],{"__ignoreMap":29},[34,23969,23970,23972],{"class":36,"line":37},[34,23971,3603],{"class":55},[34,23973,3606],{"class":504},[34,23975,23976,23978,23980,23982],{"class":36,"line":165},[34,23977,3611],{"class":55},[34,23979,3614],{"class":55},[34,23981,3618],{"class":3617},[34,23983,2952],{"class":40},[34,23985,23986,23988],{"class":36,"line":171},[34,23987,16340],{"class":55},[34,23989,16817],{"class":3617},[34,23991,23992],{"class":36,"line":182},[34,23993,3204],{"class":40},[34,23995,23996],{"class":36,"line":188},[34,23997,16362],{"class":55},[34,23999,24000],{"class":36,"line":518},[34,24001,23822],{"class":161},[34,24003,24004,24006,24008],{"class":36,"line":524},[34,24005,12670],{"class":55},[34,24007,4036],{"class":55},[34,24009,23038],{"class":40},[34,24011,24012],{"class":36,"line":530},[34,24013,16868],{"class":55},[34,24015,24016],{"class":36,"line":624},[34,24017,24018],{"class":161},"    \u002F\u002F静态成员变量也是有访问权限的\n",[34,24020,24021,24023,24025],{"class":36,"line":630},[34,24022,12670],{"class":55},[34,24024,4036],{"class":55},[34,24026,23045],{"class":40},[34,24028,24029],{"class":36,"line":636},[34,24030,5648],{"class":40},[34,24032,24033],{"class":36,"line":1513},[34,24034,23839],{"class":161},[34,24036,24037,24039,24041,24043,24045,24047],{"class":36,"line":1519},[34,24038,571],{"class":55},[34,24040,17215],{"class":3617},[34,24042,23848],{"class":40},[34,24044,221],{"class":55},[34,24046,410],{"class":44},[34,24048,2952],{"class":40},[34,24050,24051,24053,24055,24058,24060,24062],{"class":36,"line":3283},[34,24052,571],{"class":55},[34,24054,17215],{"class":3617},[34,24056,24057],{"class":40},"::m_B",[34,24059,221],{"class":55},[34,24061,1249],{"class":44},[34,24063,2952],{"class":40},[34,24065,24066,24068,24070],{"class":36,"line":3297},[34,24067,7014],{"class":55},[34,24069,7307],{"class":3617},[34,24071,3630],{"class":40},[34,24073,24074],{"class":36,"line":3302},[34,24075,3204],{"class":40},[34,24077,24078],{"class":36,"line":3308},[34,24079,24080],{"class":161},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[34,24082,24083],{"class":36,"line":3328},[34,24084,24085],{"class":161},"    \u002F\u002F静态成员变量有两种访问方式：\n",[34,24087,24088],{"class":36,"line":3333},[34,24089,24090],{"class":161},"    \u002F\u002F1.通过对象进行访问\n",[34,24092,24093],{"class":36,"line":3347},[34,24094,24095],{"class":40},"    Person p;  \n",[34,24097,24098,24100,24102,24104,24106],{"class":36,"line":3352},[34,24099,3209],{"class":40},[34,24101,2835],{"class":55},[34,24103,23746],{"class":40},[34,24105,2835],{"class":55},[34,24107,2857],{"class":40},[34,24109,24110],{"class":36,"line":3381},[34,24111,24112],{"class":161},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[34,24114,24115],{"class":36,"line":3386},[34,24116,24117],{"class":161},"    \u002F\u002F2.通过类名进行访问\n",[34,24119,24120,24122,24124,24126,24128,24130],{"class":36,"line":3403},[34,24121,3209],{"class":40},[34,24123,2835],{"class":55},[34,24125,20692],{"class":3617},[34,24127,23848],{"class":40},[34,24129,2835],{"class":55},[34,24131,2857],{"class":40},[34,24133,24134,24136,24138,24140,24142,24144,24146],{"class":36,"line":3408},[34,24135,3209],{"class":40},[34,24137,2835],{"class":55},[34,24139,20692],{"class":3617},[34,24141,24057],{"class":40},[34,24143,2835],{"class":55},[34,24145,2900],{"class":40},[34,24147,24148],{"class":161}," \u002F\u002F没有访问权限，报错\n",[34,24150,24151],{"class":36,"line":3413},[34,24152,3223],{"class":40},[34,24154,24155,24157,24159],{"class":36,"line":3418},[34,24156,571],{"class":55},[34,24158,3627],{"class":3617},[34,24160,3630],{"class":40},[34,24162,24163],{"class":36,"line":3432},[34,24164,3204],{"class":40},[34,24166,24167,24169],{"class":36,"line":3437},[34,24168,7352],{"class":3617},[34,24170,7286],{"class":40},[34,24172,24173],{"class":36,"line":4230},[34,24174,3223],{"class":40},[1353,24176,24178],{"id":24177},"_8282静态成员函数","8.2.8.2静态成员函数",[103,24180,24181],{},"1.静态成员函数定义与访问",[24,24183,24185],{"className":1809,"code":24184,"language":1811,"meta":29,"style":29},"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",[31,24186,24187,24193,24197,24201,24206,24217,24221,24235,24239,24243,24251,24255,24260,24265,24269,24277,24282,24292],{"__ignoreMap":29},[34,24188,24189,24191],{"class":36,"line":37},[34,24190,16340],{"class":55},[34,24192,16817],{"class":3617},[34,24194,24195],{"class":36,"line":165},[34,24196,3204],{"class":40},[34,24198,24199],{"class":36,"line":171},[34,24200,16362],{"class":55},[34,24202,24203],{"class":36,"line":182},[34,24204,24205],{"class":161},"    \u002F\u002F在公共权限下定义静态成员函数\n",[34,24207,24208,24210,24213,24215],{"class":36,"line":188},[34,24209,12670],{"class":55},[34,24211,24212],{"class":55}," void",[34,24214,13035],{"class":3617},[34,24216,3630],{"class":40},[34,24218,24219],{"class":36,"line":518},[34,24220,3684],{"class":40},[34,24222,24223,24226,24228,24231,24233],{"class":36,"line":524},[34,24224,24225],{"class":40},"        coout",[34,24227,2835],{"class":55},[34,24229,24230],{"class":504},"\"静态成员函数的调用\"",[34,24232,2835],{"class":55},[34,24234,2857],{"class":40},[34,24236,24237],{"class":36,"line":530},[34,24238,3841],{"class":40},[34,24240,24241],{"class":36,"line":624},[34,24242,5648],{"class":40},[34,24244,24245,24247,24249],{"class":36,"line":630},[34,24246,7014],{"class":55},[34,24248,7238],{"class":3617},[34,24250,3630],{"class":40},[34,24252,24253],{"class":36,"line":636},[34,24254,3204],{"class":40},[34,24256,24257],{"class":36,"line":1513},[34,24258,24259],{"class":161},"    \u002F\u002F静态成员函数的调用方式:\n",[34,24261,24262],{"class":36,"line":1519},[34,24263,24264],{"class":161},"    \u002F\u002F1.通过对象访问\n",[34,24266,24267],{"class":36,"line":3283},[34,24268,16959],{"class":40},[34,24270,24271,24273,24275],{"class":36,"line":3297},[34,24272,17512],{"class":40},[34,24274,13200],{"class":3617},[34,24276,7286],{"class":40},[34,24278,24279],{"class":36,"line":3302},[34,24280,24281],{"class":161},"    \u002F\u002F2.通过类名访问\n",[34,24283,24284,24286,24288,24290],{"class":36,"line":3308},[34,24285,20165],{"class":3617},[34,24287,19378],{"class":40},[34,24289,13200],{"class":3617},[34,24291,7286],{"class":40},[34,24293,24294],{"class":36,"line":3328},[34,24295,3223],{"class":40},[1772,24297,24298],{"start":165},[1775,24299,24300],{},"静态成员函数只能访问静态成员变量",[24,24302,24304],{"className":1809,"code":24303,"language":1811,"meta":29,"style":29},"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",[31,24305,24306,24312,24316,24320,24324,24334,24338,24352,24357,24369,24373,24384,24394,24398,24402,24406,24416,24420,24433,24437,24441,24445,24449,24463,24471,24475,24479,24483,24487,24495,24499,24509,24514,24518,24526,24530,24536],{"__ignoreMap":29},[34,24307,24308,24310],{"class":36,"line":37},[34,24309,16340],{"class":55},[34,24311,16817],{"class":3617},[34,24313,24314],{"class":36,"line":165},[34,24315,3204],{"class":40},[34,24317,24318],{"class":36,"line":171},[34,24319,16362],{"class":55},[34,24321,24322],{"class":36,"line":182},[34,24323,24205],{"class":161},[34,24325,24326,24328,24330,24332],{"class":36,"line":188},[34,24327,12670],{"class":55},[34,24329,24212],{"class":55},[34,24331,13035],{"class":3617},[34,24333,3630],{"class":40},[34,24335,24336],{"class":36,"line":518},[34,24337,3684],{"class":40},[34,24339,24340,24343,24345,24347,24349],{"class":36,"line":524},[34,24341,24342],{"class":40},"        m_A",[34,24344,221],{"class":55},[34,24346,451],{"class":44},[34,24348,1870],{"class":40},[34,24350,24351],{"class":161}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[34,24353,24354],{"class":36,"line":530},[34,24355,24356],{"class":161},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[34,24358,24359,24361,24363,24365,24367],{"class":36,"line":624},[34,24360,24225],{"class":40},[34,24362,2835],{"class":55},[34,24364,24230],{"class":504},[34,24366,2835],{"class":55},[34,24368,2857],{"class":40},[34,24370,24371],{"class":36,"line":630},[34,24372,3841],{"class":40},[34,24374,24375,24377,24379,24381],{"class":36,"line":636},[34,24376,12670],{"class":55},[34,24378,4036],{"class":55},[34,24380,17094],{"class":40},[34,24382,24383],{"class":161}," \u002F\u002F静态成员变量\n",[34,24385,24386,24388,24391],{"class":36,"line":1513},[34,24387,3639],{"class":55},[34,24389,24390],{"class":40}," m_B;",[34,24392,24393],{"class":161}," \u002F\u002F非静态成员变量\n",[34,24395,24396],{"class":36,"line":1519},[34,24397,1475],{"emptyLinePlaceholder":1474},[34,24399,24400],{"class":36,"line":3283},[34,24401,16868],{"class":55},[34,24403,24404],{"class":36,"line":3297},[34,24405,24018],{"class":161},[34,24407,24408,24410,24412,24414],{"class":36,"line":3302},[34,24409,12670],{"class":55},[34,24411,24212],{"class":55},[34,24413,15265],{"class":3617},[34,24415,3630],{"class":40},[34,24417,24418],{"class":36,"line":3308},[34,24419,3684],{"class":40},[34,24421,24422,24424,24426,24429,24431],{"class":36,"line":3328},[34,24423,5104],{"class":40},[34,24425,2835],{"class":55},[34,24427,24428],{"class":504},"\"这是私有权限下的静态函数调用\"",[34,24430,2835],{"class":55},[34,24432,2857],{"class":40},[34,24434,24435],{"class":36,"line":3333},[34,24436,3841],{"class":40},[34,24438,24439],{"class":36,"line":3347},[34,24440,1475],{"emptyLinePlaceholder":1474},[34,24442,24443],{"class":36,"line":3352},[34,24444,1475],{"emptyLinePlaceholder":1474},[34,24446,24447],{"class":36,"line":3381},[34,24448,5648],{"class":40},[34,24450,24451,24453,24455,24457,24459,24461],{"class":36,"line":3386},[34,24452,571],{"class":55},[34,24454,17215],{"class":3617},[34,24456,23848],{"class":40},[34,24458,221],{"class":55},[34,24460,177],{"class":44},[34,24462,2952],{"class":40},[34,24464,24465,24467,24469],{"class":36,"line":3403},[34,24466,7014],{"class":55},[34,24468,7238],{"class":3617},[34,24470,3630],{"class":40},[34,24472,24473],{"class":36,"line":3408},[34,24474,3204],{"class":40},[34,24476,24477],{"class":36,"line":3413},[34,24478,24259],{"class":161},[34,24480,24481],{"class":36,"line":3418},[34,24482,24264],{"class":161},[34,24484,24485],{"class":36,"line":3432},[34,24486,16959],{"class":40},[34,24488,24489,24491,24493],{"class":36,"line":3437},[34,24490,17512],{"class":40},[34,24492,13200],{"class":3617},[34,24494,7286],{"class":40},[34,24496,24497],{"class":36,"line":4230},[34,24498,24281],{"class":161},[34,24500,24501,24503,24505,24507],{"class":36,"line":4244},[34,24502,20165],{"class":3617},[34,24504,19378],{"class":40},[34,24506,13200],{"class":3617},[34,24508,7286],{"class":40},[34,24510,24511],{"class":36,"line":4252},[34,24512,24513],{"class":161},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[34,24515,24516],{"class":36,"line":4257},[34,24517,3223],{"class":40},[34,24519,24520,24522,24524],{"class":36,"line":4263},[34,24521,571],{"class":55},[34,24523,3627],{"class":3617},[34,24525,3630],{"class":40},[34,24527,24528],{"class":36,"line":4269},[34,24529,3204],{"class":40},[34,24531,24532,24534],{"class":36,"line":4274},[34,24533,7283],{"class":3617},[34,24535,7286],{"class":40},[34,24537,24538],{"class":36,"line":9598},[34,24539,3223],{"class":40},[19,24541,24543],{"id":24542},"_83c对象模型和this指针","8.3C++对象模型和this指针",[1353,24545,24547],{"id":24546},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[103,24549,24550],{},"在c++中，类内的成员变量和成员函数分开存储",[103,24552,24553],{},"只有非静态成员变量才属于类的对象上",[24555,24556,24558],"h5",{"id":24557},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[24,24560,24562],{"className":1809,"code":24561,"language":1811,"meta":29,"style":29},"#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",[31,24563,24564,24571,24581,24587,24591,24595,24599,24607,24611,24615,24638,24642,24650,24654,24660],{"__ignoreMap":29},[34,24565,24566,24568],{"class":36,"line":37},[34,24567,3603],{"class":55},[34,24569,24570],{"class":504},"\u003Ciostraem>\n",[34,24572,24573,24575,24577,24579],{"class":36,"line":165},[34,24574,3611],{"class":55},[34,24576,3614],{"class":55},[34,24578,3618],{"class":3617},[34,24580,2952],{"class":40},[34,24582,24583,24585],{"class":36,"line":171},[34,24584,16340],{"class":55},[34,24586,16817],{"class":3617},[34,24588,24589],{"class":36,"line":182},[34,24590,3204],{"class":40},[34,24592,24593],{"class":36,"line":188},[34,24594,1475],{"emptyLinePlaceholder":1474},[34,24596,24597],{"class":36,"line":518},[34,24598,5648],{"class":40},[34,24600,24601,24603,24605],{"class":36,"line":524},[34,24602,7014],{"class":55},[34,24604,7238],{"class":3617},[34,24606,3630],{"class":40},[34,24608,24609],{"class":36,"line":530},[34,24610,3204],{"class":40},[34,24612,24613],{"class":36,"line":624},[34,24614,16959],{"class":40},[34,24616,24617,24619,24621,24624,24626,24629,24631,24633,24635],{"class":36,"line":630},[34,24618,3209],{"class":40},[34,24620,2835],{"class":55},[34,24622,24623],{"class":504},"\"size of p=\"",[34,24625,2835],{"class":55},[34,24627,24628],{"class":3617},"sizeoif",[34,24630,8189],{"class":40},[34,24632,2835],{"class":55},[34,24634,2900],{"class":40},[34,24636,24637],{"class":161}," \u002F\u002F查看这个空类的占用的内存空间\n",[34,24639,24640],{"class":36,"line":636},[34,24641,3223],{"class":40},[34,24643,24644,24646,24648],{"class":36,"line":1513},[34,24645,571],{"class":55},[34,24647,3627],{"class":3617},[34,24649,3630],{"class":40},[34,24651,24652],{"class":36,"line":1519},[34,24653,3204],{"class":40},[34,24655,24656,24658],{"class":36,"line":3283},[34,24657,7283],{"class":3617},[34,24659,7286],{"class":40},[34,24661,24662],{"class":36,"line":3297},[34,24663,3223],{"class":40},[103,24665,24666],{},"输出结果为：size of p=1",[103,24668,24669],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[103,24671,24672],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24555,24674,24676],{"id":24675},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[24,24678,24680],{"className":1809,"code":24679,"language":1811,"meta":29,"style":29},"#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",[31,24681,24682,24688,24698,24706,24710,24719,24723,24731,24735,24739,24758,24762,24766,24774,24778,24784],{"__ignoreMap":29},[34,24683,24684,24686],{"class":36,"line":37},[34,24685,3603],{"class":55},[34,24687,3606],{"class":504},[34,24689,24690,24692,24694,24696],{"class":36,"line":165},[34,24691,3611],{"class":55},[34,24693,3614],{"class":55},[34,24695,3618],{"class":3617},[34,24697,2952],{"class":40},[34,24699,24700,24702,24704],{"class":36,"line":171},[34,24701,16340],{"class":55},[34,24703,17215],{"class":3617},[34,24705,4327],{"class":40},[34,24707,24708],{"class":36,"line":182},[34,24709,3204],{"class":40},[34,24711,24712,24714,24716],{"class":36,"line":188},[34,24713,3639],{"class":55},[34,24715,17094],{"class":40},[34,24717,24718],{"class":161},"\u002F\u002F非静态成员变量\n",[34,24720,24721],{"class":36,"line":518},[34,24722,5648],{"class":40},[34,24724,24725,24727,24729],{"class":36,"line":524},[34,24726,7014],{"class":55},[34,24728,7238],{"class":3617},[34,24730,3630],{"class":40},[34,24732,24733],{"class":36,"line":530},[34,24734,3204],{"class":40},[34,24736,24737],{"class":36,"line":624},[34,24738,16959],{"class":40},[34,24740,24741,24743,24745,24747,24749,24751,24753,24755],{"class":36,"line":630},[34,24742,3209],{"class":40},[34,24744,2835],{"class":55},[34,24746,24623],{"class":504},[34,24748,3031],{"class":55},[34,24750,8189],{"class":40},[34,24752,2835],{"class":55},[34,24754,2900],{"class":40},[34,24756,24757],{"class":161}," \u002F\u002F查看不是空对象时占用多少内存\n",[34,24759,24760],{"class":36,"line":636},[34,24761,1475],{"emptyLinePlaceholder":1474},[34,24763,24764],{"class":36,"line":1513},[34,24765,3223],{"class":40},[34,24767,24768,24770,24772],{"class":36,"line":1519},[34,24769,571],{"class":55},[34,24771,3627],{"class":3617},[34,24773,3630],{"class":40},[34,24775,24776],{"class":36,"line":3283},[34,24777,3204],{"class":40},[34,24779,24780,24782],{"class":36,"line":3297},[34,24781,7283],{"class":3617},[34,24783,7286],{"class":40},[34,24785,24786],{"class":36,"line":3302},[34,24787,3223],{"class":40},[103,24789,24790],{},"输出结果：size of p=4",[103,24792,24793],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[1772,24795,24796],{},[1775,24797,24798],{},"如果加上非静态成员变量，Person类修改如下",[24,24800,24802],{"className":1809,"code":24801,"language":1811,"meta":29,"style":29},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[31,24803,24804,24810,24814,24820,24828,24832,24837],{"__ignoreMap":29},[34,24805,24806,24808],{"class":36,"line":37},[34,24807,16340],{"class":55},[34,24809,16817],{"class":3617},[34,24811,24812],{"class":36,"line":165},[34,24813,3204],{"class":40},[34,24815,24816,24818],{"class":36,"line":171},[34,24817,3639],{"class":55},[34,24819,23038],{"class":40},[34,24821,24822,24824,24826],{"class":36,"line":182},[34,24823,12670],{"class":55},[34,24825,4036],{"class":55},[34,24827,23045],{"class":40},[34,24829,24830],{"class":36,"line":188},[34,24831,5648],{"class":40},[34,24833,24834],{"class":36,"line":518},[34,24835,24836],{"class":161},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[34,24838,24839,24841,24843,24845,24847,24849],{"class":36,"line":524},[34,24840,571],{"class":55},[34,24842,17215],{"class":3617},[34,24844,24057],{"class":40},[34,24846,221],{"class":55},[34,24848,177],{"class":44},[34,24850,2952],{"class":40},[103,24852,24853],{},"输出结果：4",[103,24855,24856],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[1772,24858,24859],{"start":165},[1775,24860,24861],{},"加上非静态成员函数",[24,24863,24865],{"className":1809,"code":24864,"language":1811,"meta":29,"style":29},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[31,24866,24867,24874,24878,24884,24892,24896,24900,24904],{"__ignoreMap":29},[34,24868,24869,24871],{"class":36,"line":37},[34,24870,16340],{"class":55},[34,24872,24873],{"class":3617},"  Person\n",[34,24875,24876],{"class":36,"line":165},[34,24877,3204],{"class":40},[34,24879,24880,24882],{"class":36,"line":171},[34,24881,3639],{"class":55},[34,24883,23038],{"class":40},[34,24885,24886,24888,24890],{"class":36,"line":182},[34,24887,16555],{"class":55},[34,24889,13035],{"class":3617},[34,24891,3630],{"class":40},[34,24893,24894],{"class":36,"line":188},[34,24895,3684],{"class":40},[34,24897,24898],{"class":36,"line":518},[34,24899,1475],{"emptyLinePlaceholder":1474},[34,24901,24902],{"class":36,"line":524},[34,24903,3841],{"class":40},[34,24905,24906],{"class":36,"line":530},[34,24907,5648],{"class":40},[103,24909,24910],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[1772,24912,24913],{"start":171},[1775,24914,24915],{},"加上静态成员函数",[24,24917,24919],{"className":1809,"code":24918,"language":1811,"meta":29,"style":29},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[31,24920,24921,24927,24931,24937,24945,24949,24953,24957,24968,24972,24976,24980],{"__ignoreMap":29},[34,24922,24923,24925],{"class":36,"line":37},[34,24924,16340],{"class":55},[34,24926,24873],{"class":3617},[34,24928,24929],{"class":36,"line":165},[34,24930,3204],{"class":40},[34,24932,24933,24935],{"class":36,"line":171},[34,24934,3639],{"class":55},[34,24936,23038],{"class":40},[34,24938,24939,24941,24943],{"class":36,"line":182},[34,24940,16555],{"class":55},[34,24942,13035],{"class":3617},[34,24944,3630],{"class":40},[34,24946,24947],{"class":36,"line":188},[34,24948,3684],{"class":40},[34,24950,24951],{"class":36,"line":518},[34,24952,1475],{"emptyLinePlaceholder":1474},[34,24954,24955],{"class":36,"line":524},[34,24956,3841],{"class":40},[34,24958,24959,24961,24963,24966],{"class":36,"line":530},[34,24960,12670],{"class":55},[34,24962,24212],{"class":55},[34,24964,24965],{"class":3617}," func1",[34,24967,3630],{"class":40},[34,24969,24970],{"class":36,"line":624},[34,24971,3684],{"class":40},[34,24973,24974],{"class":36,"line":630},[34,24975,1475],{"emptyLinePlaceholder":1474},[34,24977,24978],{"class":36,"line":636},[34,24979,3841],{"class":40},[34,24981,24982],{"class":36,"line":1513},[34,24983,5648],{"class":40},[103,24985,24853],{},[103,24987,24988],{},"解释：静态成员函数也不属于类上",[1711,24990,9324],{},{"title":29,"searchDepth":165,"depth":165,"links":24992},[24993,24999],{"id":16291,"depth":165,"text":16292,"children":24994},[24995,24996,24997,24998],{"id":16295,"depth":171,"text":16296},{"id":17020,"depth":171,"text":17021},{"id":17192,"depth":171,"text":17193},{"id":17651,"depth":171,"text":17652},{"id":20023,"depth":165,"text":20024,"children":25000},[25001,25002,25003,25004,25005,25006,25007,25008,25009],{"id":20035,"depth":171,"text":20036},{"id":20328,"depth":171,"text":20329},{"id":20819,"depth":171,"text":20820},{"id":21916,"depth":171,"text":21917},{"id":22339,"depth":171,"text":22340},{"id":22818,"depth":171,"text":22819},{"id":23193,"depth":171,"text":23194},{"id":23606,"depth":171,"text":23607},{"id":24542,"depth":171,"text":24543},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16256,"description":25010},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25017,"title":1811,"body":25018,"description":1744,"extension":1745,"meta":25022,"navigation":1474,"path":25024,"seo":25025,"stem":25026,"__hash__":25027},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25019,"toc":25020},[],{"title":29,"searchDepth":165,"depth":165,"links":25021},[],{"category":25023},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1811,"description":1744},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25029,"title":25030,"body":25031,"description":29,"extension":1745,"meta":25622,"navigation":1474,"path":25623,"seo":25624,"stem":25625,"__hash__":25626},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25032,"toc":25604},[25033,25036,25040,25043,25046,25049,25067,25072,25075,25078,25081,25084,25089,25092,25097,25100,25103,25107,25110,25113,25119,25122,25140,25144,25148,25151,25156,25159,25163,25166,25179,25182,25186,25189,25192,25195,25220,25223,25232,25243,25258,25290,25294,25301,25309,25313,25316,25319,25324,25328,25331,25334,25339,25342,25346,25349,25352,25357,25360,25364,25369,25373,25440,25444,25447,25450,25453,25456,25459,25465,25486,25489,25503,25512,25516,25519,25522,25527,25530,25535,25540,25543,25546,25551,25556,25559,25564,25569,25572,25577,25582,25585,25588,25593,25596,25601],[10,25034,25030],{"id":25035},"_1强化学习基本认识",[14,25037,25039],{"id":25038},"_11什么是强化学习","1.1.什么是强化学习",[103,25041,25042],{},"强化学习有两部分组成：智能体和环境；",[103,25044,25045],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[103,25047,25048],{},"强化学习与监督学习的区别:",[1772,25050,25051,25054,25057,25060],{},[1775,25052,25053],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[1775,25055,25056],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[1775,25058,25059],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[1775,25061,25062,25063,25066],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[1165,25064,25065],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[103,25068,25069],{},[109,25070],{"alt":29,"src":25071},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[103,25073,25074],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[103,25076,25077],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[103,25079,25080],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[103,25082,25083],{},"获取奖励",[103,25085,25086],{},[109,25087],{"alt":29,"src":25088},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[103,25090,25091],{},"强化学习可以分成标准强化学习和深度强化学习",[103,25093,25094],{},[109,25095],{"alt":29,"src":25096},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[103,25098,25099],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[103,25101,25102],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25104,25106],{"id":25105},"_12强化学习应用场景","1.2.强化学习应用场景",[103,25108,25109],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[103,25111,25112],{},"具身智能中的应用",[103,25114,25115,25118],{},[1165,25116,25117],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[103,25120,25121],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[103,25123,25124,25125,25128,25129,25132,25133,25136,25137],{},"机器人是",[1165,25126,25127],{},"躯体","，深度学习是",[1165,25130,25131],{},"神经元****网络","，VLA是",[1165,25134,25135],{},"通用的行为逻辑","，而强化学习是",[1165,25138,25139],{},"教练",[14,25141,25143],{"id":25142},"_13序列决策","1.3.序列决策",[19,25145,25147],{"id":25146},"_131智能体与环境","1.3.1.智能体与环境",[103,25149,25150],{},"强化学习研究的问题是智能体agent与环境交互的问题",[103,25152,25153],{},[109,25154],{"alt":29,"src":25155},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[103,25157,25158],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[19,25160,25162],{"id":25161},"_132奖励","1.3.2.奖励",[103,25164,25165],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[103,25167,25168,25169,25178],{},"取某个策略的表现如何。强化学习的目的就是",[1165,25170,25171,25172,25177],{},"最大化",[1165,25173,25174],{},[1165,25175,25176],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[103,25180,25181],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[19,25183,25185],{"id":25184},"_133序列决策","1.3.3.序列决策",[103,25187,25188],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[103,25190,25191],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[103,25193,25194],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[103,25196,25197,25201,25202,25204,25205,25207,25208,25210,25211,15441,25214,15441,25217],{},[25198,25199,25200],"em",{},"Ht"," = ",[25198,25203,2391],{},"1*, a",[25198,25206,394],{},", r",[25198,25209,394],{},", . . . ,* ",[25198,25212,25213],{},"ot",[25198,25215,25216],{},", at ,",[25198,25218,25219],{},"rt",[103,25221,25222],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[103,25224,25225,25201,25228,3313,25230,918],{},[25198,25226,25227],{},"st",[25198,25229,1867],{},[25198,25231,25200],{},[103,25233,25234,25235,25238,25239,25242],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[1165,25236,25237],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[1165,25240,25241],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[103,25244,25245,25246,25249,25250,25253,25254,25257],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[1165,25247,25248],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[1165,25251,25252],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25198,25255,25256],{},"S, A, T, R, Ω, O, γ",")。",[103,25259,25260,25261,25263,25264,25266,25267,286,25269,25272,25273,25275,25276,286,25279,25282,25283,25285,25286,25289],{},"其中 ",[25198,25262,2484],{}," 表示状态空间，为隐变量，",[25198,25265,2040],{}," 为动作空间，",[25198,25268,2508],{},[25198,25270,25271],{},"s ′ |s, a",") 为状态转移概率，",[25198,25274,2459],{}," 为奖励函数，",[25198,25277,25278],{},"Ω",[25198,25280,25281],{},"o|s, a",") 为观测概率，",[25198,25284,2385],{}," 为观测空间，",[25198,25287,25288],{},"γ"," 为折扣因子。",[14,25291,25293],{"id":25292},"_14动作空间","1.4.动作空间",[103,25295,25296,25297,25300],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[1165,25298,25299],{},"动作空间"," ，动作空间分为:",[1772,25302,25303,25306],{},[1775,25304,25305],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[1775,25307,25308],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25310,25312],{"id":25311},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[103,25314,25315],{},"由策略、价值函数、模型三部分组成",[103,25317,25318],{},"这三者组成马尔可夫决策过程",[103,25320,25321],{},[109,25322],{"alt":29,"src":25323},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[19,25325,25327],{"id":25326},"_151策略","1.5.1.策略",[103,25329,25330],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[103,25332,25333],{},"策略可分为两种：",[103,25335,25336],{},[109,25337],{"alt":29,"src":25338},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[103,25340,25341],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[19,25343,25345],{"id":25344},"_152价值函数","1.5.2.价值函数",[103,25347,25348],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[103,25350,25351],{},"价值函数中有一个折扣因子，类似于存款利息",[103,25353,25354],{},[109,25355],{"alt":29,"src":25356},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[103,25358,25359],{},"进入某个状态采取的最优动作可以通过Q函数得到",[19,25361,25363],{"id":25362},"_153模型","1.5.3.模型",[103,25365,25366],{},[109,25367],{"alt":29,"src":25368},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25370,25372],{"id":25371},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1948,25374,25375,25386],{},[1951,25376,25377],{},[1954,25378,25379,25383],{},[1957,25380,25382],{"align":25381},"left","类型",[1957,25384,25385],{"align":25381},"特点",[1994,25387,25388,25398,25408,25418,25430],{},[1954,25389,25390,25395],{},[1999,25391,25392],{"align":25381},[1165,25393,25394],{},"基于价值的智能体",[1999,25396,25397],{"align":25381},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1954,25399,25400,25405],{},[1999,25401,25402],{"align":25381},[1165,25403,25404],{},"基于策略的智能体",[1999,25406,25407],{"align":25381},"直接学习策略，没有学习价值函数",[1954,25409,25410,25415],{},[1999,25411,25412],{"align":25381},[1165,25413,25414],{},"演员-评论员智能体",[1999,25416,25417],{"align":25381},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1954,25419,25420,25425],{},[1999,25421,25422],{"align":25381},[1165,25423,25424],{},"有模型强化学习智能体",[1999,25426,25427],{"align":25381},[109,25428],{"alt":29,"src":25429},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1954,25431,25432,25437],{},[1999,25433,25434],{"align":25381},[1165,25435,25436],{},"免模型强化学习智能体",[1999,25438,25439],{"align":25381},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25441,25443],{"id":25442},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[103,25445,25446],{},"学习和规划是序列决策的两个基本问题",[103,25448,25449],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[103,25451,25452],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[103,25454,25455],{},"强化学习用到的库：Gym",[103,25457,25458],{},"Gym可以检验强化学习算法的优劣",[103,25460,25461,25464],{},[1165,25462,25463],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[24,25466,25470],{"className":25467,"code":25468,"language":25469,"meta":29,"style":29},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[31,25471,25472],{"__ignoreMap":29},[34,25473,25474,25477,25480,25483],{"class":36,"line":37},[34,25475,25476],{"class":3617},"pip",[34,25478,25479],{"class":504}," install",[34,25481,25482],{"class":504}," gym==",[34,25484,25485],{"class":44},"0.25.2\n",[103,25487,25488],{},"显示图形界面需要",[24,25490,25492],{"className":25467,"code":25491,"language":25469,"meta":29,"style":29},"pip install pygame\n",[31,25493,25494],{"__ignoreMap":29},[34,25495,25496,25498,25500],{"class":36,"line":37},[34,25497,25476],{"class":3617},[34,25499,25479],{"class":504},[34,25501,25502],{"class":504}," pygame\n",[103,25504,25505,25506],{},"有关Gym库的相关文档介绍：",[236,25507,25511],{"href":25508,"rel":25509},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25510],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25513,25515],{"id":25514},"_18一些补充基础概念","1.8.一些补充基础概念",[103,25517,25518],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[103,25520,25521],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[103,25523,25524],{},[109,25525],{"alt":29,"src":25526},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[103,25528,25529],{},"折扣率需要自己来设定",[103,25531,25532],{},[109,25533],{"alt":29,"src":25534},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[1772,25536,25537],{},[1775,25538,25539],{},"状态转移函数：",[103,25541,25542],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[103,25544,25545],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[103,25547,25548],{},[109,25549],{"alt":29,"src":25550},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[1772,25552,25553],{"start":165},[1775,25554,25555],{},"动作价值函数：",[103,25557,25558],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[103,25560,25561],{},[109,25562],{"alt":29,"src":25563},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[1772,25565,25566],{"start":171},[1775,25567,25568],{},"最优动作价值函数：",[103,25570,25571],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[103,25573,25574],{},[109,25575],{"alt":29,"src":25576},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[1772,25578,25579],{"start":182},[1775,25580,25581],{},"状态价值函数:",[103,25583,25584],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[103,25586,25587],{},"它衡量的是“一个具体动作”的长期价值",[103,25589,25590],{},[109,25591],{"alt":29,"src":25592},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[103,25594,25595],{},"几个价值函数之间的比较：",[103,25597,25598],{},[109,25599],{"alt":29,"src":25600},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1711,25602,25603],{},"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":29,"searchDepth":165,"depth":165,"links":25605},[25606,25607,25608,25613,25614,25619,25620,25621],{"id":25038,"depth":165,"text":25039},{"id":25105,"depth":165,"text":25106},{"id":25142,"depth":165,"text":25143,"children":25609},[25610,25611,25612],{"id":25146,"depth":171,"text":25147},{"id":25161,"depth":171,"text":25162},{"id":25184,"depth":171,"text":25185},{"id":25292,"depth":165,"text":25293},{"id":25311,"depth":165,"text":25312,"children":25615},[25616,25617,25618],{"id":25326,"depth":171,"text":25327},{"id":25344,"depth":171,"text":25345},{"id":25362,"depth":171,"text":25363},{"id":25371,"depth":165,"text":25372},{"id":25442,"depth":165,"text":25443},{"id":25514,"depth":165,"text":25515},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25030,"description":29},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25628,"title":25629,"body":25630,"description":25637,"extension":1745,"meta":25648,"navigation":1474,"path":25649,"seo":25650,"stem":25651,"__hash__":25652},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25631,"toc":25646},[25632,25635,25638,25643],[10,25633,25629],{"id":25634},"_2马尔可夫决策过程",[103,25636,25637],{},"这是强化学习的基本框架",[103,25639,25640],{},[109,25641],{"alt":29,"src":25642},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[103,25644,25645],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":29,"searchDepth":165,"depth":165,"links":25647},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25629,"description":25637},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25654,"title":25655,"body":25656,"description":29,"extension":1745,"meta":25772,"navigation":1474,"path":25773,"seo":25774,"stem":25775,"__hash__":25776},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25657,"toc":25767},[25658,25661,25665,25668,25673,25678,25681,25686,25689,25694,25697,25701,25706,25709,25714,25719,25724,25727,25731,25736,25739,25744,25749,25754,25759,25762],[10,25659,25655],{"id":25660},"_3动作价值函数",[14,25662,25664],{"id":25663},"_31dqn","3.1.DQN",[103,25666,25667],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[103,25669,25670],{},[109,25671],{"alt":29,"src":25672},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[103,25674,25675],{},[109,25676],{"alt":29,"src":25677},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[103,25679,25680],{},"DQN算法的描述：",[103,25682,25683],{},[109,25684],{"alt":29,"src":25685},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[103,25687,25688],{},"这里的Dense指的是全连接层",[103,25690,25691],{},[109,25692],{"alt":29,"src":25693},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[103,25695,25696],{},"当前观测的状态为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,25698,25700],{"id":25699},"_32dqn的举例","3.2.DQN的举例",[103,25702,25703],{},[109,25704],{"alt":29,"src":25705},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[103,25707,25708],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[103,25710,25711],{},[109,25712],{"alt":29,"src":25713},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[103,25715,25716],{},[109,25717],{"alt":29,"src":25718},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[103,25720,25721],{},[109,25722],{"alt":29,"src":25723},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[103,25725,25726],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25728,25730],{"id":25729},"_33td算法","3.3.TD算法",[103,25732,25733],{},[109,25734],{"alt":29,"src":25735},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[103,25737,25738],{},"强化学习TD算法公式的粗略解释：",[103,25740,25741],{},[109,25742],{"alt":29,"src":25743},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[103,25745,25746],{},[109,25747],{"alt":29,"src":25748},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[103,25750,25751],{},[109,25752],{"alt":29,"src":25753},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[103,25755,25756],{},[109,25757],{"alt":29,"src":25758},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[103,25760,25761],{},"TD算法总结：",[103,25763,25764],{},[109,25765],{"alt":29,"src":25766},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":29,"searchDepth":165,"depth":165,"links":25768},[25769,25770,25771],{"id":25663,"depth":165,"text":25664},{"id":25699,"depth":165,"text":25700},{"id":25729,"depth":165,"text":25730},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25655,"description":29},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25778,"title":25779,"body":25780,"description":29,"extension":1745,"meta":26013,"navigation":1474,"path":26014,"seo":26015,"stem":26016,"__hash__":26017},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25781,"toc":26009},[25782,25785,25789,25792,25795,25800,25805,25808,25813,25818,25821,25826,25829,25834,25837,25842,25845,25850,25853,25858,25863,25866,25871,25874,25877,25882,25885,25890,25895,25899,25902,25905,25910,25915,25918,25923,25928,25931,25936,25939,25942,25947,25950,25955,25958,25963,25968,25971,25976,25981,25984,25989,25992,25997,26000],[10,25783,25779],{"id":25784},"_4策略学习",[14,25786,25788],{"id":25787},"_41概念描述","4.1.概念描述",[103,25790,25791],{},"用神经网络（策略网络）近似策略函数",[103,25793,25794],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[103,25796,25797],{},[109,25798],{"alt":29,"src":25799},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[103,25801,25802],{},[109,25803],{"alt":29,"src":25804},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[103,25806,25807],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[103,25809,25810],{},[109,25811],{"alt":29,"src":25812},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[103,25814,25815],{},[109,25816],{"alt":29,"src":25817},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[103,25819,25820],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[103,25822,25823],{},[109,25824],{"alt":29,"src":25825},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[103,25827,25828],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[103,25830,25831],{},[109,25832],{"alt":29,"src":25833},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[103,25835,25836],{},"改进theta要用到策略梯度算法",[103,25838,25839],{},[109,25840],{"alt":29,"src":25841},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[103,25843,25844],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[103,25846,25847],{},[109,25848],{"alt":29,"src":25849},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[103,25851,25852],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[103,25854,25855],{},[109,25856],{"alt":29,"src":25857},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[103,25859,25860],{},[109,25861],{"alt":29,"src":25862},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[103,25864,25865],{},"梯度公式总结：",[103,25867,25868],{},[109,25869],{"alt":29,"src":25870},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[103,25872,25873],{},"两个公式的分别应用场景：",[103,25875,25876],{},"对于离散的动作：",[103,25878,25879],{},[109,25880],{"alt":29,"src":25881},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[103,25883,25884],{},"对于连续的动作：",[103,25886,25887],{},[109,25888],{"alt":29,"src":25889},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[103,25891,25892],{},[109,25893],{"alt":29,"src":25894},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25896,25898],{"id":25897},"_42概率梯度算法总结","4.2.概率梯度算法总结",[103,25900,25901],{},"使用蒙特卡洛来近似计算策略梯度",[103,25903,25904],{},"蒙特卡洛法的解释如下：",[103,25906,25907],{},[109,25908],{"alt":29,"src":25909},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[103,25911,25912],{},[109,25913],{"alt":29,"src":25914},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[103,25916,25917],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[1772,25919,25920],{},[1775,25921,25922],{},"方法一：reinforce算法",[103,25924,25925],{},[109,25926],{"alt":29,"src":25927},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[103,25929,25930],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[1772,25932,25933],{"start":165},[1775,25934,25935],{},"方法二：actor-critic算法",[103,25937,25938],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[103,25940,25941],{},"两个网络的构建：",[103,25943,25944],{},[109,25945],{"alt":29,"src":25946},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[103,25948,25949],{},"actor网路：",[103,25951,25952],{},[109,25953],{"alt":29,"src":25954},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[103,25956,25957],{},"critic网络",[103,25959,25960],{},[109,25961],{"alt":29,"src":25962},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[1772,25964,25965],{"start":171},[1775,25966,25967],{},"网络的训练",[103,25969,25970],{},"网络描述",[103,25972,25973],{},[109,25974],{"alt":29,"src":25975},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[103,25977,25978],{},[109,25979],{"alt":29,"src":25980},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[103,25982,25983],{},"TD算法更新梯度：",[103,25985,25986],{},[109,25987],{"alt":29,"src":25988},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[103,25990,25991],{},"策略网络更新梯度：",[103,25993,25994],{},[109,25995],{"alt":29,"src":25996},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[103,25998,25999],{},"训练整个流程的具体描述：",[103,26001,26002,26005,26006],{},[109,26003],{"alt":29,"src":26004},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[109,26007],{"alt":29,"src":26008},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":29,"searchDepth":165,"depth":165,"links":26010},[26011,26012],{"id":25787,"depth":165,"text":25788},{"id":25897,"depth":165,"text":25898},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25779,"description":29},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26019,"title":26020,"body":26021,"description":26028,"extension":1745,"meta":26078,"navigation":1474,"path":26079,"seo":26080,"stem":26081,"__hash__":26082},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26022,"toc":26074},[26023,26026,26029,26033,26036,26041,26045,26048,26053,26056,26061,26066,26069],[10,26024,26020],{"id":26025},"_5alphago算法",[103,26027,26028],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26030,26032],{"id":26031},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[103,26034,26035],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[103,26037,26038],{},[109,26039],{"alt":29,"src":26040},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26042,26044],{"id":26043},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[103,26046,26047],{},"采用强化学习的方式训练策略网络",[103,26049,26050],{},[109,26051],{"alt":29,"src":26052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[103,26054,26055],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[103,26057,26058],{},[109,26059],{"alt":29,"src":26060},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[103,26062,26063],{},[109,26064],{"alt":29,"src":26065},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[103,26067,26068],{},"强化学习训练策略网络的总结：",[103,26070,26071],{},[109,26072],{"alt":29,"src":26073},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":29,"searchDepth":165,"depth":165,"links":26075},[26076,26077],{"id":26031,"depth":165,"text":26032},{"id":26043,"depth":165,"text":26044},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26020,"description":26028},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26084,"title":26085,"body":26086,"description":26093,"extension":1745,"meta":26096,"navigation":1474,"path":26097,"seo":26098,"stem":26099,"__hash__":26100},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26087,"toc":26094},[26088,26091],[10,26089,26085],{"id":26090},"_6价值网络",[103,26092,26093],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":29,"searchDepth":165,"depth":165,"links":26095},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26085,"description":26093},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26102,"title":26103,"body":26104,"description":26108,"extension":1745,"meta":26109,"navigation":1474,"path":26110,"seo":26111,"stem":26112,"__hash__":26113},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26105,"toc":26106},[],{"title":29,"searchDepth":165,"depth":165,"links":26107},[],"记录自己的强化学习笔记。",{"category":25023},"\u002Fwiki\u002F2025-12-04",{"title":26103,"description":26108},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26115,"title":26116,"body":26117,"description":1744,"extension":1745,"meta":26156,"navigation":1474,"path":26157,"seo":26158,"stem":26159,"__hash__":26160},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26118,"toc":26154},[26119,26122,26125,26131,26134,26140,26143,26148,26151],[10,26120,26116],{"id":26121},"_1-项目概览与官方资源",[103,26123,26124],{},"官方文档：",[103,26126,26127],{},[236,26128,26129],{"href":26129,"rel":26130},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25510],[103,26132,26133],{},"官方代码仓库：",[103,26135,26136],{},[236,26137,26138],{"href":26138,"rel":26139},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25510],[103,26141,26142],{},"复现大体流程：",[103,26144,26145],{},[109,26146],{"alt":29,"src":26147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[103,26149,26150],{},"本教程的目标是打通这条链路：",[103,26152,26153],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":29,"searchDepth":165,"depth":165,"links":26155},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26116,"description":1744},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26162,"title":26163,"body":26164,"description":1744,"extension":1745,"meta":26280,"navigation":1474,"path":26281,"seo":26282,"stem":26283,"__hash__":26284},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26165,"toc":26275},[26166,26169,26173,26176,26183,26187,26190,26199,26209,26213,26243,26246,26272],[10,26167,26163],{"id":26168},"_2-环境准备与设备连接",[14,26170,26172],{"id":26171},"_21-系统与环境","2.1 系统与环境",[103,26174,26175],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[103,26177,26178,26179,26182],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[31,26180,26181],{},"lerobot"," 依赖。",[14,26184,26186],{"id":26185},"_22-机械臂串口识别","2.2 机械臂串口识别",[103,26188,26189],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[24,26191,26193],{"className":25467,"code":26192,"language":25469,"meta":29,"style":29},"lerobot-find-out\n",[31,26194,26195],{"__ignoreMap":29},[34,26196,26197],{"class":36,"line":37},[34,26198,26192],{"class":3617},[103,26200,26201,26202,2021,26205,26208],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[31,26203,26204],{},"\u002Fdev\u002FttyACM0",[31,26206,26207],{},"\u002Fdev\u002FttyACM1","）。",[14,26210,26212],{"id":26211},"_23-串口授权","2.3 串口授权",[24,26214,26216],{"className":25467,"code":26215,"language":25469,"meta":29,"style":29},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[31,26217,26218,26232],{"__ignoreMap":29},[34,26219,26220,26223,26226,26229],{"class":36,"line":37},[34,26221,26222],{"class":3617},"sudo",[34,26224,26225],{"class":504}," chmod",[34,26227,26228],{"class":44}," 666",[34,26230,26231],{"class":504}," \u002Fdev\u002FttyACM0\n",[34,26233,26234,26236,26238,26240],{"class":36,"line":165},[34,26235,26222],{"class":3617},[34,26237,26225],{"class":504},[34,26239,26228],{"class":44},[34,26241,26242],{"class":504}," \u002Fdev\u002FttyACM1\n",[103,26244,26245],{},"说明：",[2798,26247,26248,26253,26259,26269],{},[1775,26249,26250,26252],{},[31,26251,26222],{},"：以 root 权限执行命令。",[1775,26254,26255,26258],{},[31,26256,26257],{},"chmod","：修改设备节点权限。",[1775,26260,26261,26264,26265,26268],{},[31,26262,26263],{},"666","：",[31,26266,26267],{},"rw-rw-rw-","，所有用户可读写。",[1775,26270,26271],{},"串口号必须替换为你机器上的真实端口。",[1711,26273,26274],{},"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":29,"searchDepth":165,"depth":165,"links":26276},[26277,26278,26279],{"id":26171,"depth":165,"text":26172},{"id":26185,"depth":165,"text":26186},{"id":26211,"depth":165,"text":26212},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26163,"description":1744},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26286,"title":26287,"body":26288,"description":1744,"extension":1745,"meta":26449,"navigation":1474,"path":26450,"seo":26451,"stem":26452,"__hash__":26453},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26289,"toc":26445},[26290,26294,26298,26304,26307,26364,26367,26371,26374,26442],[10,26291,26293],{"id":26292},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26295,26297],{"id":26296},"_31-配置电机-id","3.1 配置电机 ID",[103,26299,26300,26301,26303],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[31,26302,394],{},"，需要改成机械臂链路里不冲突的编号。",[103,26305,26306],{},"方式一：用 LeRobot 命令逐步写入。",[24,26308,26310],{"className":25467,"code":26309,"language":25469,"meta":29,"style":29},"# 主臂舵机配置 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",[31,26311,26312,26317,26325,26332,26337,26341,26346,26352,26359],{"__ignoreMap":29},[34,26313,26314],{"class":36,"line":37},[34,26315,26316],{"class":161},"# 主臂舵机配置 ID\n",[34,26318,26319,26322],{"class":36,"line":165},[34,26320,26321],{"class":3617},"lerobot-setup-motors",[34,26323,26324],{"class":44}," \\\n",[34,26326,26327,26330],{"class":36,"line":171},[34,26328,26329],{"class":44},"  --teleop.type=so101_leader",[34,26331,26324],{"class":44},[34,26333,26334],{"class":36,"line":182},[34,26335,26336],{"class":44},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[34,26338,26339],{"class":36,"line":188},[34,26340,1475],{"emptyLinePlaceholder":1474},[34,26342,26343],{"class":36,"line":518},[34,26344,26345],{"class":161},"# 从臂舵机配置 ID\n",[34,26347,26348,26350],{"class":36,"line":524},[34,26349,26321],{"class":3617},[34,26351,26324],{"class":44},[34,26353,26354,26357],{"class":36,"line":530},[34,26355,26356],{"class":44},"  --robot.type=so101_follower",[34,26358,26324],{"class":44},[34,26360,26361],{"class":36,"line":624},[34,26362,26363],{"class":44},"  --robot.port=\u002Fdev\u002FttyACM1\n",[103,26365,26366],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26368,26370],{"id":26369},"_32-机械臂校准","3.2 机械臂校准",[103,26372,26373],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[24,26375,26377],{"className":25467,"code":26376,"language":25469,"meta":29,"style":29},"# 主臂校准\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",[31,26378,26379,26384,26391,26397,26404,26409,26413,26418,26424,26430,26437],{"__ignoreMap":29},[34,26380,26381],{"class":36,"line":37},[34,26382,26383],{"class":161},"# 主臂校准\n",[34,26385,26386,26389],{"class":36,"line":165},[34,26387,26388],{"class":3617},"lerobot-calibrate",[34,26390,26324],{"class":44},[34,26392,26393,26395],{"class":36,"line":171},[34,26394,26329],{"class":44},[34,26396,26324],{"class":44},[34,26398,26399,26402],{"class":36,"line":182},[34,26400,26401],{"class":44},"  --teleop.port=\u002Fdev\u002FttyACM0",[34,26403,26324],{"class":44},[34,26405,26406],{"class":36,"line":188},[34,26407,26408],{"class":44},"  --teleop.id=my_awesome_leader_arm\n",[34,26410,26411],{"class":36,"line":518},[34,26412,1475],{"emptyLinePlaceholder":1474},[34,26414,26415],{"class":36,"line":524},[34,26416,26417],{"class":161},"# 从臂校准\n",[34,26419,26420,26422],{"class":36,"line":530},[34,26421,26388],{"class":3617},[34,26423,26324],{"class":44},[34,26425,26426,26428],{"class":36,"line":624},[34,26427,26356],{"class":44},[34,26429,26324],{"class":44},[34,26431,26432,26435],{"class":36,"line":630},[34,26433,26434],{"class":44},"  --robot.port=\u002Fdev\u002FttyACM1",[34,26436,26324],{"class":44},[34,26438,26439],{"class":36,"line":636},[34,26440,26441],{"class":44},"  --robot.id=my_awesome_follower_arm\n",[1711,26443,26444],{},"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":29,"searchDepth":165,"depth":165,"links":26446},[26447,26448],{"id":26296,"depth":165,"text":26297},{"id":26369,"depth":165,"text":26370},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26287,"description":1744},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26455,"title":26456,"body":26457,"description":1744,"extension":1745,"meta":26648,"navigation":1474,"path":26649,"seo":26650,"stem":26651,"__hash__":26652},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26458,"toc":26644},[26459,26462,26466,26513,26517,26530,26593,26596,26641],[10,26460,26456],{"id":26461},"_4-遥操与相机接入",[14,26463,26465],{"id":26464},"_41-不带相机遥操","4.1 不带相机遥操",[24,26467,26469],{"className":25467,"code":26468,"language":25469,"meta":29,"style":29},"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",[31,26470,26471,26478,26484,26490,26497,26503,26509],{"__ignoreMap":29},[34,26472,26473,26476],{"class":36,"line":37},[34,26474,26475],{"class":3617},"lerobot-teleoperate",[34,26477,26324],{"class":44},[34,26479,26480,26482],{"class":36,"line":165},[34,26481,26356],{"class":44},[34,26483,26324],{"class":44},[34,26485,26486,26488],{"class":36,"line":171},[34,26487,26434],{"class":44},[34,26489,26324],{"class":44},[34,26491,26492,26495],{"class":36,"line":182},[34,26493,26494],{"class":44},"  --robot.id=my_awesome_follower_arm",[34,26496,26324],{"class":44},[34,26498,26499,26501],{"class":36,"line":188},[34,26500,26329],{"class":44},[34,26502,26324],{"class":44},[34,26504,26505,26507],{"class":36,"line":518},[34,26506,26401],{"class":44},[34,26508,26324],{"class":44},[34,26510,26511],{"class":36,"line":524},[34,26512,26408],{"class":44},[14,26514,26516],{"id":26515},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[24,26518,26520],{"className":25467,"code":26519,"language":25469,"meta":29,"style":29},"lerobot-find-cameras opencv\n",[31,26521,26522],{"__ignoreMap":29},[34,26523,26524,26527],{"class":36,"line":37},[34,26525,26526],{"class":3617},"lerobot-find-cameras",[34,26528,26529],{"class":504}," opencv\n",[24,26531,26533],{"className":25467,"code":26532,"language":25469,"meta":29,"style":29},"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",[31,26534,26535,26541,26547,26553,26559,26569,26575,26581,26588],{"__ignoreMap":29},[34,26536,26537,26539],{"class":36,"line":37},[34,26538,26475],{"class":3617},[34,26540,26324],{"class":44},[34,26542,26543,26545],{"class":36,"line":165},[34,26544,26356],{"class":44},[34,26546,26324],{"class":44},[34,26548,26549,26551],{"class":36,"line":171},[34,26550,26434],{"class":44},[34,26552,26324],{"class":44},[34,26554,26555,26557],{"class":36,"line":182},[34,26556,26494],{"class":44},[34,26558,26324],{"class":44},[34,26560,26561,26564,26567],{"class":36,"line":188},[34,26562,26563],{"class":44},"  --robot.cameras=",[34,26565,26566],{"class":504},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[34,26568,26324],{"class":44},[34,26570,26571,26573],{"class":36,"line":518},[34,26572,26329],{"class":44},[34,26574,26324],{"class":44},[34,26576,26577,26579],{"class":36,"line":524},[34,26578,26401],{"class":44},[34,26580,26324],{"class":44},[34,26582,26583,26586],{"class":36,"line":530},[34,26584,26585],{"class":44},"  --teleop.id=my_awesome_leader_arm",[34,26587,26324],{"class":44},[34,26589,26590],{"class":36,"line":624},[34,26591,26592],{"class":44},"  --display_data=true\n",[103,26594,26595],{},"相机参数说明：",[2798,26597,26598,26604,26610,26619,26629,26635],{},[1775,26599,26600,26603],{},[31,26601,26602],{},"front","：相机名称。",[1775,26605,26606,26609],{},[31,26607,26608],{},"type: opencv","：相机驱动类型。",[1775,26611,26612,26615,26616,26208],{},[31,26613,26614],{},"index_or_path","：设备编号或设备路径（如 ",[31,26617,26618],{},"\u002Fdev\u002Fvideo4",[1775,26620,26621,26624,26625,26628],{},[31,26622,26623],{},"width"," \u002F ",[31,26626,26627],{},"height","：图像分辨率。",[1775,26630,26631,26634],{},[31,26632,26633],{},"fps","：采样帧率。",[1775,26636,26637,26640],{},[31,26638,26639],{},"--display_data=true","：启用实时可视化。",[1711,26642,26643],{},"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":29,"searchDepth":165,"depth":165,"links":26645},[26646,26647],{"id":26464,"depth":165,"text":26465},{"id":26515,"depth":165,"text":26516},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26456,"description":1744},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26654,"title":26655,"body":26656,"description":1744,"extension":1745,"meta":26828,"navigation":1474,"path":26829,"seo":26830,"stem":26831,"__hash__":26832},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26657,"toc":26823},[26658,26662,26666,26671,26676,26679,26721,26727,26731,26780,26785,26789,26792,26800,26805,26810,26815,26820],[10,26659,26661],{"id":26660},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26663,26665],{"id":26664},"_51-生成访问令牌","5.1 生成访问令牌",[103,26667,26668],{},[109,26669],{"alt":29,"src":26670},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[103,26672,26673],{},[109,26674],{"alt":29,"src":26675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[103,26677,26678],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[24,26680,26682],{"className":25467,"code":26681,"language":25469,"meta":29,"style":29},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[31,26683,26684,26697],{"__ignoreMap":29},[34,26685,26686,26689,26692,26694],{"class":36,"line":37},[34,26687,26688],{"class":55},"export",[34,26690,26691],{"class":40}," HF_TOKEN",[34,26693,221],{"class":55},[34,26695,26696],{"class":504},"\"your_huggingface_token\"\n",[34,26698,26699,26702,26705,26708,26711,26713,26716,26718],{"class":36,"line":165},[34,26700,26701],{"class":3617},"hf",[34,26703,26704],{"class":504}," auth",[34,26706,26707],{"class":504}," login",[34,26709,26710],{"class":44}," --token",[34,26712,11374],{"class":504},[34,26714,26715],{"class":40},"$HF_TOKEN",[34,26717,2058],{"class":504},[34,26719,26720],{"class":44}," --add-to-git-credential\n",[103,26722,26723,26726],{},[31,26724,26725],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26728,26730],{"id":26729},"_52-验证登录","5.2 验证登录",[24,26732,26734],{"className":25467,"code":26733,"language":25469,"meta":29,"style":29},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[31,26735,26736,26767],{"__ignoreMap":29},[34,26737,26738,26741,26743,26746,26748,26750,26753,26756,26759,26762,26765],{"class":36,"line":37},[34,26739,26740],{"class":40},"HF_USER",[34,26742,221],{"class":55},[34,26744,26745],{"class":40},"$(",[34,26747,26701],{"class":3617},[34,26749,26704],{"class":504},[34,26751,26752],{"class":504}," whoami",[34,26754,26755],{"class":55}," |",[34,26757,26758],{"class":3617}," head",[34,26760,26761],{"class":44}," -n",[34,26763,26764],{"class":44}," 1",[34,26766,101],{"class":40},[34,26768,26769,26772,26774,26777],{"class":36,"line":165},[34,26770,26771],{"class":44},"echo",[34,26773,11374],{"class":504},[34,26775,26776],{"class":40},"$HF_USER",[34,26778,26779],{"class":504},"\"\n",[103,26781,26782],{},[109,26783],{"alt":29,"src":26784},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26786,26788],{"id":26787},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[103,26790,26791],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[2798,26793,26794,26797],{},[1775,26795,26796],{},"Dataset Repo（用于上传演示数据）",[1775,26798,26799],{},"Model Repo（用于上传训练后的 ACT 权重）",[103,26801,26802],{},[109,26803],{"alt":29,"src":26804},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[103,26806,26807],{},[109,26808],{"alt":29,"src":26809},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[103,26811,26812],{},[109,26813],{"alt":29,"src":26814},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[103,26816,26817],{},[109,26818],{"alt":29,"src":26819},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1711,26821,26822],{},"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":29,"searchDepth":165,"depth":165,"links":26824},[26825,26826,26827],{"id":26664,"depth":165,"text":26665},{"id":26729,"depth":165,"text":26730},{"id":26787,"depth":165,"text":26788},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26655,"description":1744},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26834,"title":26835,"body":26836,"description":1744,"extension":1745,"meta":27033,"navigation":1474,"path":27034,"seo":27035,"stem":27036,"__hash__":27037},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26837,"toc":27028},[26838,26842,26846,26942,26950,26955,26959,26975,26978,26982,27025],[10,26839,26841],{"id":26840},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26843,26845],{"id":26844},"_61-录制示教数据","6.1 录制示教数据",[24,26847,26849],{"className":25467,"code":26848,"language":25469,"meta":29,"style":29},"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",[31,26850,26851,26858,26864,26870,26876,26885,26891,26897,26903,26910,26920,26927,26937],{"__ignoreMap":29},[34,26852,26853,26856],{"class":36,"line":37},[34,26854,26855],{"class":3617},"lerobot-record",[34,26857,26324],{"class":44},[34,26859,26860,26862],{"class":36,"line":165},[34,26861,26356],{"class":44},[34,26863,26324],{"class":44},[34,26865,26866,26868],{"class":36,"line":171},[34,26867,26434],{"class":44},[34,26869,26324],{"class":44},[34,26871,26872,26874],{"class":36,"line":182},[34,26873,26494],{"class":44},[34,26875,26324],{"class":44},[34,26877,26878,26880,26883],{"class":36,"line":188},[34,26879,26563],{"class":44},[34,26881,26882],{"class":504},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[34,26884,26324],{"class":44},[34,26886,26887,26889],{"class":36,"line":518},[34,26888,26329],{"class":44},[34,26890,26324],{"class":44},[34,26892,26893,26895],{"class":36,"line":524},[34,26894,26401],{"class":44},[34,26896,26324],{"class":44},[34,26898,26899,26901],{"class":36,"line":530},[34,26900,26585],{"class":44},[34,26902,26324],{"class":44},[34,26904,26905,26908],{"class":36,"line":624},[34,26906,26907],{"class":44},"  --display_data=true",[34,26909,26324],{"class":44},[34,26911,26912,26915,26918],{"class":36,"line":630},[34,26913,26914],{"class":44},"  --dataset.repo_id=",[34,26916,26917],{"class":504},"\"Embodied-AI-6\u002Fso101_test\"",[34,26919,26324],{"class":44},[34,26921,26922,26925],{"class":36,"line":636},[34,26923,26924],{"class":44},"  --dataset.num_episodes=10",[34,26926,26324],{"class":44},[34,26928,26929,26932,26935],{"class":36,"line":1513},[34,26930,26931],{"class":44},"  --dataset.single_task=",[34,26933,26934],{"class":504},"\"Grab the green cube\"",[34,26936,26324],{"class":44},[34,26938,26939],{"class":36,"line":1519},[34,26940,26941],{"class":44},"  --resume=true\n",[2798,26943,26944],{},[1775,26945,26946,26949],{},[31,26947,26948],{},"--resume=true","：已有同一数据集时继续追加 episode。",[103,26951,26952],{},[109,26953],{"alt":29,"src":26954},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26956,26958],{"id":26957},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[24,26960,26962],{"className":25467,"code":26961,"language":25469,"meta":29,"style":29},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[31,26963,26964],{"__ignoreMap":29},[34,26965,26966,26969,26972],{"class":36,"line":37},[34,26967,26968],{"class":3617},"rm",[34,26970,26971],{"class":44}," -rf",[34,26973,26974],{"class":504}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[103,26976,26977],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26979,26981],{"id":26980},"_63-回放指定-episode","6.3 回放指定 episode",[24,26983,26985],{"className":25467,"code":26984,"language":25469,"meta":29,"style":29},"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",[31,26986,26987,26994,27000,27006,27012,27020],{"__ignoreMap":29},[34,26988,26989,26992],{"class":36,"line":37},[34,26990,26991],{"class":3617},"lerobot-replay",[34,26993,26324],{"class":44},[34,26995,26996,26998],{"class":36,"line":165},[34,26997,26356],{"class":44},[34,26999,26324],{"class":44},[34,27001,27002,27004],{"class":36,"line":171},[34,27003,26434],{"class":44},[34,27005,26324],{"class":44},[34,27007,27008,27010],{"class":36,"line":182},[34,27009,26494],{"class":44},[34,27011,26324],{"class":44},[34,27013,27014,27016,27018],{"class":36,"line":188},[34,27015,26914],{"class":44},[34,27017,26917],{"class":504},[34,27019,26324],{"class":44},[34,27021,27022],{"class":36,"line":518},[34,27023,27024],{"class":44},"  --dataset.episode=0\n",[1711,27026,27027],{},"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":29,"searchDepth":165,"depth":165,"links":27029},[27030,27031,27032],{"id":26844,"depth":165,"text":26845},{"id":26957,"depth":165,"text":26958},{"id":26980,"depth":165,"text":26981},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26835,"description":1744},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27039,"title":27040,"body":27041,"description":1744,"extension":1745,"meta":27169,"navigation":1474,"path":27170,"seo":27171,"stem":27172,"__hash__":27173},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27042,"toc":27167},[27043,27047,27110,27113,27160,27165],[10,27044,27046],{"id":27045},"_7-act-模型训练","7. ACT 模型训练",[24,27048,27050],{"className":25467,"code":27049,"language":25469,"meta":29,"style":29},"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",[31,27051,27052,27059,27067,27074,27081,27088,27095,27102],{"__ignoreMap":29},[34,27053,27054,27057],{"class":36,"line":37},[34,27055,27056],{"class":3617},"lerobot-train",[34,27058,26324],{"class":44},[34,27060,27061,27063,27065],{"class":36,"line":165},[34,27062,26914],{"class":44},[34,27064,26917],{"class":504},[34,27066,26324],{"class":44},[34,27068,27069,27072],{"class":36,"line":171},[34,27070,27071],{"class":44},"  --policy.type=act",[34,27073,26324],{"class":44},[34,27075,27076,27079],{"class":36,"line":182},[34,27077,27078],{"class":44},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[34,27080,26324],{"class":44},[34,27082,27083,27086],{"class":36,"line":188},[34,27084,27085],{"class":44},"  --job_name=act_so101_test",[34,27087,26324],{"class":44},[34,27089,27090,27093],{"class":36,"line":518},[34,27091,27092],{"class":44},"  --policy.device=cuda",[34,27094,26324],{"class":44},[34,27096,27097,27100],{"class":36,"line":524},[34,27098,27099],{"class":44},"  --wandb.enable=false",[34,27101,26324],{"class":44},[34,27103,27104,27107],{"class":36,"line":530},[34,27105,27106],{"class":44},"  --policy.repo_id=",[34,27108,27109],{"class":504},"\"Embodied-AI-6\u002Flerobot_new\"\n",[103,27111,27112],{},"参数说明：",[2798,27114,27115,27121,27127,27133,27139,27148,27154],{},[1775,27116,27117,27120],{},[31,27118,27119],{},"--dataset.repo_id","：训练数据集仓库。",[1775,27122,27123,27126],{},[31,27124,27125],{},"--policy.type=act","：策略模型类型为 ACT。",[1775,27128,27129,27132],{},[31,27130,27131],{},"--output_dir","：本地训练输出目录。",[1775,27134,27135,27138],{},[31,27136,27137],{},"--job_name","：训练任务名称。",[1775,27140,27141,27144,27145,26208],{},[31,27142,27143],{},"--policy.device","：训练设备（如 ",[31,27146,27147],{},"cuda",[1775,27149,27150,27153],{},[31,27151,27152],{},"--wandb.enable","：是否启用 WandB 可视化。",[1775,27155,27156,27159],{},[31,27157,27158],{},"--policy.repo_id","：训练后模型推送目标仓库。",[103,27161,27162],{},[109,27163],{"alt":29,"src":27164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1711,27166,27027],{},{"title":29,"searchDepth":165,"depth":165,"links":27168},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27040,"description":1744},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27175,"title":27176,"body":27177,"description":1744,"extension":1745,"meta":27264,"navigation":1474,"path":27265,"seo":27266,"stem":27267,"__hash__":27268},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27178,"toc":27262},[27179,27182,27185,27252,27260],[10,27180,27176],{"id":27181},"_8-策略部署与自动采集",[103,27183,27184],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[24,27186,27188],{"className":25467,"code":27187,"language":25469,"meta":29,"style":29},"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",[31,27189,27190,27196,27202,27208,27216,27222,27229,27237,27245],{"__ignoreMap":29},[34,27191,27192,27194],{"class":36,"line":37},[34,27193,26855],{"class":3617},[34,27195,26324],{"class":44},[34,27197,27198,27200],{"class":36,"line":165},[34,27199,26356],{"class":44},[34,27201,26324],{"class":44},[34,27203,27204,27206],{"class":36,"line":171},[34,27205,26434],{"class":44},[34,27207,26324],{"class":44},[34,27209,27210,27212,27214],{"class":36,"line":182},[34,27211,26563],{"class":44},[34,27213,26882],{"class":504},[34,27215,26324],{"class":44},[34,27217,27218,27220],{"class":36,"line":188},[34,27219,26494],{"class":44},[34,27221,26324],{"class":44},[34,27223,27224,27227],{"class":36,"line":518},[34,27225,27226],{"class":44},"  --display_data=false",[34,27228,26324],{"class":44},[34,27230,27231,27233,27235],{"class":36,"line":524},[34,27232,26914],{"class":44},[34,27234,26917],{"class":504},[34,27236,26324],{"class":44},[34,27238,27239,27241,27243],{"class":36,"line":530},[34,27240,26931],{"class":44},[34,27242,26934],{"class":504},[34,27244,26324],{"class":44},[34,27246,27247,27250],{"class":36,"line":624},[34,27248,27249],{"class":44},"  --policy.path=",[34,27251,27109],{"class":504},[2798,27253,27254],{},[1775,27255,27256,27259],{},[31,27257,27258],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1711,27261,27027],{},{"title":29,"searchDepth":165,"depth":165,"links":27263},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27176,"description":1744},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27270,"title":27271,"body":27272,"description":1744,"extension":1745,"meta":27301,"navigation":1474,"path":27302,"seo":27303,"stem":27304,"__hash__":27305},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27273,"toc":27299},[27274,27278,27281,27287,27290,27296],[10,27275,27277],{"id":27276},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[103,27279,27280],{},"项目地址：",[103,27282,27283],{},[236,27284,27285],{"href":27285,"rel":27286},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25510],[103,27288,27289],{},"参考教程：",[103,27291,27292],{},[236,27293,27294],{"href":27294,"rel":27295},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25510],[103,27297,27298],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":29,"searchDepth":165,"depth":165,"links":27300},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27271,"description":1744},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27307,"title":27308,"body":27309,"description":27313,"extension":1745,"meta":27314,"navigation":1474,"path":27315,"seo":27316,"stem":27317,"__hash__":27318},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27310,"toc":27311},[],{"title":29,"searchDepth":165,"depth":165,"links":27312},[],"act复现",{"category":25023},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27308,"description":27313},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27320,"title":27321,"body":27322,"description":29,"extension":1745,"meta":27624,"navigation":1474,"path":27625,"seo":27626,"stem":27627,"__hash__":27628},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27323,"toc":27616},[27324,27327,27331,27341,27348,27355,27358,27365,27368,27371,27375,27387,27391,27437,27440,27443,27446,27449,27452,27456,27494,27500,27504,27558,27563,27566,27569,27574,27577,27582,27585,27588,27592,27595,27598,27602],[10,27325,27321],{"id":27326},"_1简介",[19,27328,27330],{"id":27329},"_11什么是-docker","1.1什么是 Docker？",[103,27332,27333,27334,27337,27338],{},"Docker 是一个开源的 ",[1165,27335,27336],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[1165,27339,27340],{},"一次构建，到处运行。",[103,27342,27343,27344,27347],{},"“ ",[1165,27345,27346],{},"一次构建，到处运行"," ”也就是说：",[1772,27349,27350],{},[1775,27351,27352],{},[1165,27353,27354],{},"之前：",[103,27356,27357],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[1772,27359,27360],{},[1775,27361,27362],{},[1165,27363,27364],{},"使用docker后：",[103,27366,27367],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[103,27369,27370],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[19,27372,27374],{"id":27373},"_12它是怎么工作的","1.2.它是怎么工作的？",[2798,27376,27377,27380],{},[1775,27378,27379],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[1775,27381,27382,27383,27386],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[1165,27384,27385],{},"无论在哪运行都一样稳定"," 。",[19,27388,27390],{"id":27389},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1948,27392,27393,27403],{},[1951,27394,27395],{},[1954,27396,27397,27400],{},[1957,27398,27399],{"align":25381},"概念",[1957,27401,27402],{"align":25381},"解释",[1994,27404,27405,27413,27421,27429],{},[1954,27406,27407,27410],{},[1999,27408,27409],{"align":25381},"镜像",[1999,27411,27412],{"align":25381},"Image，运行容器的模板，像是一个应用快照",[1954,27414,27415,27418],{},[1999,27416,27417],{"align":25381},"容器",[1999,27419,27420],{"align":25381},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1954,27422,27423,27426],{},[1999,27424,27425],{"align":25381},"Dockerfile",[1999,27427,27428],{"align":25381},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1954,27430,27431,27434],{},[1999,27432,27433],{"align":25381},"仓库",[1999,27435,27436],{"align":25381},"Registry，存放镜像的地方，比如 Docker Hub",[103,27438,27439],{},"抽象化理解:",[103,27441,27442],{},"Docker镜像≈C++类",[103,27444,27445],{},"Docker容器≈C++类实例(即对象)",[103,27447,27448],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[103,27450,27451],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[19,27453,27455],{"id":27454},"_14类比理解","1.4.类比理解",[1948,27457,27458,27468],{},[1951,27459,27460],{},[1954,27461,27462,27465],{},[1957,27463,27464],{"align":25381},"传统部署",[1957,27466,27467],{"align":25381},"Docker部署",[1994,27469,27470,27478,27486],{},[1954,27471,27472,27475],{},[1999,27473,27474],{"align":25381},"手动安装依赖、调试版本不一致问题",[1999,27476,27477],{"align":25381},"一次打包环境和代码",[1954,27479,27480,27483],{},[1999,27481,27482],{"align":25381},"程序“裸奔”跑在系统上",[1999,27484,27485],{"align":25381},"程序“穿着容器”隔离运行",[1954,27487,27488,27491],{},[1999,27489,27490],{"align":25381},"容易“在我电脑上能跑”",[1999,27492,27493],{"align":25381},"保证“无论在哪都能跑”",[103,27495,27496,27497],{},"就像快递包裹： ",[1165,27498,27499],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[19,27501,27503],{"id":27502},"_15docker-的核心优势","1.5.Docker 的核心优势",[1948,27505,27506,27516],{},[1951,27507,27508],{},[1954,27509,27510,27513],{},[1957,27511,27512],{"align":25381},"优势",[1957,27514,27515],{"align":25381},"说明",[1994,27517,27518,27526,27534,27542,27550],{},[1954,27519,27520,27523],{},[1999,27521,27522],{"align":25381},"轻量级",[1999,27524,27525],{"align":25381},"基于系统内核共享，启动速度快，占资源少",[1954,27527,27528,27531],{},[1999,27529,27530],{"align":25381},"跨平台",[1999,27532,27533],{"align":25381},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1954,27535,27536,27539],{},[1999,27537,27538],{"align":25381},"易于迁移部署",[1999,27540,27541],{"align":25381},"应用和环境一起封装，不怕依赖不一致",[1954,27543,27544,27547],{},[1999,27545,27546],{"align":25381},"易于版本控制",[1999,27548,27549],{"align":25381},"镜像版本可控，支持回滚",[1954,27551,27552,27555],{},[1999,27553,27554],{"align":25381},"生态丰富",[1999,27556,27557],{"align":25381},"Docker Hub 上有成千上万的现成镜像可用",[1772,27559,27560],{},[1775,27561,27562],{},"在Linux上可以几乎实现无性能损失。",[103,27564,27565],{},"docker里的发行版和本机共用Linux内核。",[103,27567,27568],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[1772,27570,27571],{},[1775,27572,27573],{},"可以快速部署在绝大多数Linux发行版",[103,27575,27576],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[1772,27578,27579],{},[1775,27580,27581],{},"配置环境简单",[103,27583,27584],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[103,27586,27587],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[1772,27589,27590],{},[1775,27591,27554],{},[103,27593,27594],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[103,27596,27597],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[19,27599,27601],{"id":27600},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[2798,27603,27604,27607,27610,27613],{},[1775,27605,27606],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[1775,27608,27609],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[1775,27611,27612],{},"微服务架构：每个服务一个容器，灵活组合",[1775,27614,27615],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":29,"searchDepth":165,"depth":165,"links":27617},[27618,27619,27620,27621,27622,27623],{"id":27329,"depth":171,"text":27330},{"id":27373,"depth":171,"text":27374},{"id":27389,"depth":171,"text":27390},{"id":27454,"depth":171,"text":27455},{"id":27502,"depth":171,"text":27503},{"id":27600,"depth":171,"text":27601},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27321,"description":29},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27630,"title":27631,"body":27632,"description":29,"extension":1745,"meta":28365,"navigation":1474,"path":28366,"seo":28367,"stem":28368,"__hash__":28369},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27633,"toc":28360},[27634,27637,27641,27644,27647,27653,27659,27663,27672,27675,27732,27735,27786,27789,27872,27875,27912,27916,27927,27940,27947,27950,28030,28033,28083,28086,28109,28113,28120,28123,28139,28145,28148,28164,28170,28173,28189,28203,28209,28229,28235,28238,28250,28256,28259,28273,28279,28282,28302,28307,28310,28313,28317,28320,28323,28326,28333,28336,28339,28342,28347,28352,28357],[10,27635,27631],{"id":27636},"_2安装docker",[19,27638,27640],{"id":27639},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[103,27642,27643],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[103,27645,27646],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[103,27648,27649],{},[236,27650,27651],{"href":27651,"rel":27652},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25510],[103,27654,27655],{},[236,27656,27657],{"href":27657,"rel":27658},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25510],[1353,27660,27662],{"id":27661},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[103,27664,27665,27666,27671],{},"以下内容根据 ",[236,27667,27670],{"href":27668,"rel":27669},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25510],"官方文档"," 修改而来。",[103,27673,27674],{},"如果你过去安装过 docker，先删掉：",[24,27676,27678],{"className":25467,"code":27677,"language":25469,"meta":29,"style":29},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[31,27679,27680],{"__ignoreMap":29},[34,27681,27682,27684,27687,27690,27693,27696,27699,27702,27705,27708,27711,27714,27717,27720,27723,27726,27729],{"class":36,"line":37},[34,27683,4678],{"class":55},[34,27685,27686],{"class":40}," pkg ",[34,27688,27689],{"class":55},"in",[34,27691,27692],{"class":504}," docker.io",[34,27694,27695],{"class":504}," docker-doc",[34,27697,27698],{"class":504}," docker-compose",[34,27700,27701],{"class":504}," docker-compose-v2",[34,27703,27704],{"class":504}," podman-docker",[34,27706,27707],{"class":504}," containerd",[34,27709,27710],{"class":504}," runc",[34,27712,27713],{"class":40},"; ",[34,27715,27716],{"class":55},"do",[34,27718,27719],{"class":3617}," sudo",[34,27721,27722],{"class":504}," apt-get",[34,27724,27725],{"class":504}," remove",[34,27727,27728],{"class":40}," $pkg; ",[34,27730,27731],{"class":55},"done\n",[103,27733,27734],{},"首先安装依赖和GPG：",[24,27736,27740],{"className":27737,"code":27738,"language":27739,"meta":29,"style":29},"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",[31,27741,27742,27747,27752,27757,27762,27767,27772,27776,27781],{"__ignoreMap":29},[34,27743,27744],{"class":36,"line":37},[34,27745,27746],{},"# Add Docker's official GPG key:\n",[34,27748,27749],{"class":36,"line":165},[34,27750,27751],{},"sudo apt-get update\n",[34,27753,27754],{"class":36,"line":171},[34,27755,27756],{},"sudo apt-get install ca-certificates curl\n",[34,27758,27759],{"class":36,"line":182},[34,27760,27761],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[34,27763,27764],{"class":36,"line":188},[34,27765,27766],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[34,27768,27769],{"class":36,"line":518},[34,27770,27771],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[34,27773,27774],{"class":36,"line":524},[34,27775,1475],{"emptyLinePlaceholder":1474},[34,27777,27778],{"class":36,"line":530},[34,27779,27780],{},"# 如果上面这行报错就弄下面这行\n",[34,27782,27783],{"class":36,"line":624},[34,27784,27785],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[103,27787,27788],{},"信任 Docker 的 GPG 公钥并添加仓库：",[24,27790,27792],{"className":25467,"code":27791,"language":25469,"meta":29,"style":29},"# 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",[31,27793,27794,27799,27805,27822,27855],{"__ignoreMap":29},[34,27795,27796],{"class":36,"line":37},[34,27797,27798],{"class":161},"# Add the repository to Apt sources:\n",[34,27800,27801,27803],{"class":36,"line":165},[34,27802,26771],{"class":44},[34,27804,26324],{"class":44},[34,27806,27807,27810,27813,27816,27819],{"class":36,"line":171},[34,27808,27809],{"class":504},"  \"deb [arch=$(",[34,27811,27812],{"class":3617},"dpkg",[34,27814,27815],{"class":44}," --print-architecture",[34,27817,27818],{"class":504},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[34,27820,27821],{"class":44},"\\\n",[34,27823,27824,27827,27829,27831,27834,27837,27839,27841,27844,27846,27848,27851,27853],{"class":36,"line":182},[34,27825,27826],{"class":504},"  \"",[34,27828,26745],{"class":40},[34,27830,2353],{"class":44},[34,27832,27833],{"class":504}," \u002Fetc\u002Fos-release",[34,27835,27836],{"class":40}," && ",[34,27838,26771],{"class":44},[34,27840,11374],{"class":504},[34,27842,27843],{"class":40},"$VERSION_CODENAME",[34,27845,2058],{"class":504},[34,27847,918],{"class":40},[34,27849,27850],{"class":504},"\" stable\"",[34,27852,26755],{"class":55},[34,27854,26324],{"class":44},[34,27856,27857,27860,27863,27866,27869],{"class":36,"line":188},[34,27858,27859],{"class":3617},"  sudo",[34,27861,27862],{"class":504}," tee",[34,27864,27865],{"class":504}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[34,27867,27868],{"class":55}," >",[34,27870,27871],{"class":504}," \u002Fdev\u002Fnull\n",[103,27873,27874],{},"最后安装",[24,27876,27878],{"className":25467,"code":27877,"language":25469,"meta":29,"style":29},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[31,27879,27880,27889],{"__ignoreMap":29},[34,27881,27882,27884,27886],{"class":36,"line":37},[34,27883,26222],{"class":3617},[34,27885,27722],{"class":504},[34,27887,27888],{"class":504}," update\n",[34,27890,27891,27893,27895,27897,27900,27903,27906,27909],{"class":36,"line":165},[34,27892,26222],{"class":3617},[34,27894,27722],{"class":504},[34,27896,25479],{"class":504},[34,27898,27899],{"class":504}," docker-ce",[34,27901,27902],{"class":504}," docker-ce-cli",[34,27904,27905],{"class":504}," containerd.io",[34,27907,27908],{"class":504}," docker-buildx-plugin",[34,27910,27911],{"class":504}," docker-compose-plugin\n",[1353,27913,27915],{"id":27914},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[103,27917,27918,27919,27922,27923,27926],{},"查看自己自己包管理工具版本（dnf是 ",[1165,27920,27921],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[1165,27924,27925],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[24,27928,27930],{"className":25467,"code":27929,"language":25469,"meta":29,"style":29},"dnf --version\n",[31,27931,27932],{"__ignoreMap":29},[34,27933,27934,27937],{"class":36,"line":37},[34,27935,27936],{"class":3617},"dnf",[34,27938,27939],{"class":44}," --version\n",[103,27941,27665,27942,27946],{},[236,27943,27670],{"href":27944,"rel":27945},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25510]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[103,27948,27949],{},"如果你之前安装过 docker，请先删掉",[24,27951,27953],{"className":25467,"code":27952,"language":25469,"meta":29,"style":29},"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",[31,27954,27955,27969,27976,27983,27990,27997,28004,28011,28018,28025],{"__ignoreMap":29},[34,27956,27957,27959,27962,27964,27967],{"class":36,"line":37},[34,27958,26222],{"class":3617},[34,27960,27961],{"class":504}," dnf",[34,27963,27725],{"class":504},[34,27965,27966],{"class":504}," docker",[34,27968,26324],{"class":44},[34,27970,27971,27974],{"class":36,"line":165},[34,27972,27973],{"class":504},"                  docker-client",[34,27975,26324],{"class":44},[34,27977,27978,27981],{"class":36,"line":171},[34,27979,27980],{"class":504},"                  docker-client-latest",[34,27982,26324],{"class":44},[34,27984,27985,27988],{"class":36,"line":182},[34,27986,27987],{"class":504},"                  docker-common",[34,27989,26324],{"class":44},[34,27991,27992,27995],{"class":36,"line":188},[34,27993,27994],{"class":504},"                  docker-latest",[34,27996,26324],{"class":44},[34,27998,27999,28002],{"class":36,"line":518},[34,28000,28001],{"class":504},"                  docker-latest-logrotate",[34,28003,26324],{"class":44},[34,28005,28006,28009],{"class":36,"line":524},[34,28007,28008],{"class":504},"                  docker-logrotate",[34,28010,26324],{"class":44},[34,28012,28013,28016],{"class":36,"line":530},[34,28014,28015],{"class":504},"                  docker-selinux",[34,28017,26324],{"class":44},[34,28019,28020,28023],{"class":36,"line":624},[34,28021,28022],{"class":504},"                  docker-engine-selinux",[34,28024,26324],{"class":44},[34,28026,28027],{"class":36,"line":630},[34,28028,28029],{"class":504},"                  docker-engine\n",[103,28031,28032],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[24,28034,28036],{"className":25467,"code":28035,"language":25469,"meta":29,"style":29},"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",[31,28037,28038,28052,28067],{"__ignoreMap":29},[34,28039,28040,28042,28044,28047,28049],{"class":36,"line":37},[34,28041,26222],{"class":3617},[34,28043,27961],{"class":504},[34,28045,28046],{"class":44}," -y",[34,28048,25479],{"class":504},[34,28050,28051],{"class":504}," dnf-plugins-core\n",[34,28053,28054,28056,28058,28061,28064],{"class":36,"line":165},[34,28055,26222],{"class":3617},[34,28057,27961],{"class":504},[34,28059,28060],{"class":504}," config-manager",[34,28062,28063],{"class":504}," addrepo",[34,28065,28066],{"class":44}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[34,28068,28069,28071,28074,28077,28080],{"class":36,"line":171},[34,28070,26222],{"class":3617},[34,28072,28073],{"class":504}," sed",[34,28075,28076],{"class":44}," -i",[34,28078,28079],{"class":504}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[34,28081,28082],{"class":504}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[103,28084,28085],{},"最后安装：",[24,28087,28089],{"className":25467,"code":28088,"language":25469,"meta":29,"style":29},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[31,28090,28091],{"__ignoreMap":29},[34,28092,28093,28095,28097,28099,28101,28103,28105,28107],{"class":36,"line":37},[34,28094,26222],{"class":3617},[34,28096,27961],{"class":504},[34,28098,25479],{"class":504},[34,28100,27899],{"class":504},[34,28102,27902],{"class":504},[34,28104,27905],{"class":504},[34,28106,27908],{"class":504},[34,28108,27911],{"class":504},[19,28110,28112],{"id":28111},"_22配置环境","2.2.配置环境",[1353,28114,28116,28119],{"id":28115},"_221检查-docker-服务状态",[1165,28117,28118],{},"2.2.1.检查 Docker 服务状态"," ：",[103,28121,28122],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[24,28124,28126],{"className":25467,"code":28125,"language":25469,"meta":29,"style":29},"systemctl status docker\n",[31,28127,28128],{"__ignoreMap":29},[34,28129,28130,28133,28136],{"class":36,"line":37},[34,28131,28132],{"class":3617},"systemctl",[34,28134,28135],{"class":504}," status",[34,28137,28138],{"class":504}," docker\n",[1353,28140,28142,28119],{"id":28141},"_222启动-docker-服务",[1165,28143,28144],{},"2.2.2.启动 Docker 服务",[103,28146,28147],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[24,28149,28151],{"className":25467,"code":28150,"language":25469,"meta":29,"style":29},"sudo systemctl start docker\n",[31,28152,28153],{"__ignoreMap":29},[34,28154,28155,28157,28160,28162],{"class":36,"line":37},[34,28156,26222],{"class":3617},[34,28158,28159],{"class":504}," systemctl",[34,28161,5836],{"class":504},[34,28163,28138],{"class":504},[1353,28165,28167,28119],{"id":28166},"_223设置-docker-开机自启",[1165,28168,28169],{},"2.2.3.设置 Docker 开机自启",[103,28171,28172],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[24,28174,28176],{"className":25467,"code":28175,"language":25469,"meta":29,"style":29},"sudo systemctl enable docker\n",[31,28177,28178],{"__ignoreMap":29},[34,28179,28180,28182,28184,28187],{"class":36,"line":37},[34,28181,26222],{"class":3617},[34,28183,28159],{"class":504},[34,28185,28186],{"class":504}," enable",[34,28188,28138],{"class":504},[1353,28190,28192,15441,28195,15441,28200,28119],{"id":28191},"_224将用户添加到-docker-组",[1165,28193,28194],{},"2.2.4.将用户添加到",[1165,28196,28197],{},[31,28198,28199],{},"docker",[1165,28201,28202],{},"组",[103,28204,28205,28206,28208],{},"使用以下命令将当前用户添加到 ",[31,28207,28199],{}," 组：",[24,28210,28212],{"className":25467,"code":28211,"language":25469,"meta":29,"style":29},"sudo usermod -aG docker $USER\n",[31,28213,28214],{"__ignoreMap":29},[34,28215,28216,28218,28221,28224,28226],{"class":36,"line":37},[34,28217,26222],{"class":3617},[34,28219,28220],{"class":504}," usermod",[34,28222,28223],{"class":44}," -aG",[34,28225,27966],{"class":504},[34,28227,28228],{"class":40}," $USER\n",[1353,28230,28232,28119],{"id":28231},"_225退出并重新登录",[1165,28233,28234],{},"2.2.5.退出并重新登录",[103,28236,28237],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[24,28239,28241],{"className":25467,"code":28240,"language":25469,"meta":29,"style":29},"newgrp docker\n",[31,28242,28243],{"__ignoreMap":29},[34,28244,28245,28248],{"class":36,"line":37},[34,28246,28247],{"class":3617},"newgrp",[34,28249,28138],{"class":504},[1353,28251,28253,28119],{"id":28252},"_226重新启动-docker-服务如果需要",[1165,28254,28255],{},"2.2.6.重新启动 Docker 服务（如果需要）",[103,28257,28258],{},"确保 Docker 服务正在运行，可以使用以下命令：",[24,28260,28261],{"className":25467,"code":28150,"language":25469,"meta":29,"style":29},[31,28262,28263],{"__ignoreMap":29},[34,28264,28265,28267,28269,28271],{"class":36,"line":37},[34,28266,26222],{"class":3617},[34,28268,28159],{"class":504},[34,28270,5836],{"class":504},[34,28272,28138],{"class":504},[1353,28274,28276,28119],{"id":28275},"_227重启电脑后检查-docker-服务状态",[1165,28277,28278],{},"2.2.7.重启电脑后检查 Docker 服务状态",[103,28280,28281],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[24,28283,28285],{"className":25467,"code":28284,"language":25469,"meta":29,"style":29},"sudo reboot\nsystemctl status docker\n",[31,28286,28287,28294],{"__ignoreMap":29},[34,28288,28289,28291],{"class":36,"line":37},[34,28290,26222],{"class":3617},[34,28292,28293],{"class":504}," reboot\n",[34,28295,28296,28298,28300],{"class":36,"line":165},[34,28297,28132],{"class":3617},[34,28299,28135],{"class":504},[34,28301,28138],{"class":504},[103,28303,28304],{},[109,28305],{"alt":29,"src":28306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[103,28308,28309],{},"第三行显示enabled说明开机自启动成功",[103,28311,28312],{},"按q退出",[19,28314,28316],{"id":28315},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[103,28318,28319],{},"优先使用linux来使用docker是比较好的",[103,28321,28322],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[103,28324,28325],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[103,28327,28328,28329],{},"官方下载安装:",[236,28330,28331],{"href":28331,"rel":28332},"https:\u002F\u002Fwww.docker.com\u002F",[25510],[103,28334,28335],{},"Windows的Docker显卡直通与USB直通:",[103,28337,28338],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[103,28340,28341],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[103,28343,28344],{},[109,28345],{"alt":29,"src":28346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[103,28348,28349],{},[109,28350],{"alt":29,"src":28351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[103,28353,28354],{},[109,28355],{"alt":29,"src":28356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1711,28358,28359],{},"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":29,"searchDepth":165,"depth":165,"links":28361},[28362,28363,28364],{"id":27639,"depth":171,"text":27640},{"id":28111,"depth":171,"text":28112},{"id":28315,"depth":171,"text":28316},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27631,"description":29},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28371,"title":28372,"body":28373,"description":28380,"extension":1745,"meta":29073,"navigation":1474,"path":29074,"seo":29075,"stem":29076,"__hash__":29077},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28374,"toc":29067},[28375,28378,28381,28385,28390,28395,28398,28426,28431,28440,28443,28448,28452,28459,28464,28470,28474,28477,28481,28486,28578,28583,28601,28606,28627,28632,28648,28652,28657,28686,28691,28737,28742,28786,28794,28811,28816,28832,28837,28851,28854,28857,28860,28863,28892,28895,28900,28904,28907,28910,28916,28919,28922,28925,28987,28994,28999,29002,29020,29024,29027,29044,29047,29050,29064],[10,28376,28372],{"id":28377},"_3docker直通",[103,28379,28380],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[19,28382,28384],{"id":28383},"_31usb直通","3.1.USB直通",[103,28386,28387],{},[109,28388],{"alt":29,"src":28389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[1772,28391,28392],{},[1775,28393,28394],{},"方法一(不是很推荐新手)：",[103,28396,28397],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[24,28399,28401],{"className":25467,"code":28400,"language":25469,"meta":29,"style":29},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[31,28402,28403,28411,28416],{"__ignoreMap":29},[34,28404,28405,28408],{"class":36,"line":37},[34,28406,28407],{"class":3617},"ls",[34,28409,28410],{"class":504}," \u002Fdev\n",[34,28412,28413],{"class":36,"line":165},[34,28414,28415],{"class":161},"#例如\n",[34,28417,28418,28421,28423],{"class":36,"line":171},[34,28419,28420],{"class":40},"--device",[34,28422,221],{"class":55},[34,28424,28425],{"class":504},"\u002Fdev\u002Ftty_USB0\n",[1772,28427,28428],{"start":165},[1775,28429,28430],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[24,28432,28434],{"className":25467,"code":28433,"language":25469,"meta":29,"style":29},"--privileged\n",[31,28435,28436],{"__ignoreMap":29},[34,28437,28438],{"class":36,"line":37},[34,28439,28433],{"class":3617},[103,28441,28442],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[103,28444,28445],{},[109,28446],{"alt":29,"src":28447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[19,28449,28451],{"id":28450},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[103,28453,28454,28455,28458],{},"NVIDIA Container Toolkit使用户 ",[1165,28456,28457],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[103,28460,28461],{},[109,28462],{"alt":29,"src":28463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[103,28465,28466],{},[236,28467,28468],{"href":28468,"rel":28469},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25510],[1353,28471,28473],{"id":28472},"_321安装","3.2.1.安装",[103,28475,28476],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24555,28478,28480],{"id":28479},"_3211ubuntu","3.2.1.1.Ubuntu",[1772,28482,28483],{},[1775,28484,28485],{},"配置存储库 并更新",[24,28487,28489],{"className":25467,"code":28488,"language":25469,"meta":29,"style":29},"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",[31,28490,28491,28520,28540,28552,28564,28570],{"__ignoreMap":29},[34,28492,28493,28496,28499,28502,28504,28506,28509,28512,28515,28518],{"class":36,"line":37},[34,28494,28495],{"class":3617},"curl",[34,28497,28498],{"class":44}," -fsSL",[34,28500,28501],{"class":504}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[34,28503,26755],{"class":55},[34,28505,27719],{"class":3617},[34,28507,28508],{"class":504}," gpg",[34,28510,28511],{"class":44}," --dearmor",[34,28513,28514],{"class":44}," -o",[34,28516,28517],{"class":504}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[34,28519,26324],{"class":44},[34,28521,28522,28525,28527,28530,28533,28536,28538],{"class":36,"line":165},[34,28523,28524],{"class":40},"  && ",[34,28526,28495],{"class":3617},[34,28528,28529],{"class":44}," -s",[34,28531,28532],{"class":44}," -L",[34,28534,28535],{"class":504}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[34,28537,26755],{"class":55},[34,28539,26324],{"class":44},[34,28541,28542,28545,28548,28550],{"class":36,"line":171},[34,28543,28544],{"class":3617},"    sed",[34,28546,28547],{"class":504}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[34,28549,26755],{"class":55},[34,28551,26324],{"class":44},[34,28553,28554,28557,28559,28562],{"class":36,"line":182},[34,28555,28556],{"class":3617},"    sudo",[34,28558,27862],{"class":504},[34,28560,28561],{"class":504}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[34,28563,26324],{"class":44},[34,28565,28566,28568],{"class":36,"line":188},[34,28567,28524],{"class":40},[34,28569,27821],{"class":44},[34,28571,28572,28574,28576],{"class":36,"line":518},[34,28573,28556],{"class":3617},[34,28575,27722],{"class":504},[34,28577,27888],{"class":504},[1772,28579,28580],{"start":165},[1775,28581,28582],{},"安装nvidia-docker2",[24,28584,28586],{"className":25467,"code":28585,"language":25469,"meta":29,"style":29},"sudo apt-get install -y nvidia-docker2\n",[31,28587,28588],{"__ignoreMap":29},[34,28589,28590,28592,28594,28596,28598],{"class":36,"line":37},[34,28591,26222],{"class":3617},[34,28593,27722],{"class":504},[34,28595,25479],{"class":504},[34,28597,28046],{"class":44},[34,28599,28600],{"class":504}," nvidia-docker2\n",[1772,28602,28603],{"start":171},[1775,28604,28605],{},"使用nvidia-ctk命令配置container runtime",[24,28607,28609],{"className":25467,"code":28608,"language":25469,"meta":29,"style":29},"sudo nvidia-ctk runtime configure --runtime=docker\n",[31,28610,28611],{"__ignoreMap":29},[34,28612,28613,28615,28618,28621,28624],{"class":36,"line":37},[34,28614,26222],{"class":3617},[34,28616,28617],{"class":504}," nvidia-ctk",[34,28619,28620],{"class":504}," runtime",[34,28622,28623],{"class":504}," configure",[34,28625,28626],{"class":44}," --runtime=docker\n",[1772,28628,28629],{"start":182},[1775,28630,28631],{},"重启docker服务:",[24,28633,28635],{"className":25467,"code":28634,"language":25469,"meta":29,"style":29},"sudo systemctl restart docker\n",[31,28636,28637],{"__ignoreMap":29},[34,28638,28639,28641,28643,28646],{"class":36,"line":37},[34,28640,26222],{"class":3617},[34,28642,28159],{"class":504},[34,28644,28645],{"class":504}," restart",[34,28647,28138],{"class":504},[24555,28649,28651],{"id":28650},"_3212fedora","3.2.1.2.Fedora",[1772,28653,28654],{},[1775,28655,28656],{},"配置存储库",[24,28658,28660],{"className":25467,"code":28659,"language":25469,"meta":29,"style":29},"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",[31,28661,28662,28677],{"__ignoreMap":29},[34,28663,28664,28666,28668,28670,28673,28675],{"class":36,"line":37},[34,28665,28495],{"class":3617},[34,28667,28529],{"class":44},[34,28669,28532],{"class":44},[34,28671,28672],{"class":504}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[34,28674,26755],{"class":55},[34,28676,26324],{"class":44},[34,28678,28679,28681,28683],{"class":36,"line":165},[34,28680,26222],{"class":3617},[34,28682,27862],{"class":504},[34,28684,28685],{"class":504}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[1772,28687,28688],{"start":165},[1775,28689,28690],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[24,28692,28694],{"className":25467,"code":28693,"language":25469,"meta":29,"style":29},"# 如果是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",[31,28695,28696,28701,28715,28719,28724],{"__ignoreMap":29},[34,28697,28698],{"class":36,"line":37},[34,28699,28700],{"class":161},"# 如果是RHEL或者Rocky（DNF4）\n",[34,28702,28703,28705,28707,28709,28712],{"class":36,"line":165},[34,28704,26222],{"class":3617},[34,28706,27961],{"class":504},[34,28708,28060],{"class":504},[34,28710,28711],{"class":44}," --add-repo",[34,28713,28714],{"class":504}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[34,28716,28717],{"class":36,"line":171},[34,28718,1475],{"emptyLinePlaceholder":1474},[34,28720,28721],{"class":36,"line":182},[34,28722,28723],{"class":161},"# 如果是Feodra41+（DNF5）\n",[34,28725,28726,28728,28730,28732,28734],{"class":36,"line":188},[34,28727,26222],{"class":3617},[34,28729,27961],{"class":504},[34,28731,28060],{"class":504},[34,28733,28063],{"class":504},[34,28735,28736],{"class":44}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[1772,28738,28739],{"start":171},[1775,28740,28741],{},"安装NVIDIA Container Toolki包",[24,28743,28745],{"className":25467,"code":28744,"language":25469,"meta":29,"style":29},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[31,28746,28747,28752,28765,28769,28774],{"__ignoreMap":29},[34,28748,28749],{"class":36,"line":37},[34,28750,28751],{"class":161},"# 如果是RHEL或者Rocky\n",[34,28753,28754,28756,28758,28760,28762],{"class":36,"line":165},[34,28755,26222],{"class":3617},[34,28757,27961],{"class":504},[34,28759,25479],{"class":504},[34,28761,28046],{"class":44},[34,28763,28764],{"class":504}," nvidia-container-toolkit\n",[34,28766,28767],{"class":36,"line":171},[34,28768,1475],{"emptyLinePlaceholder":1474},[34,28770,28771],{"class":36,"line":182},[34,28772,28773],{"class":161},"# 如果是Fedora\n",[34,28775,28776,28778,28780,28782,28784],{"class":36,"line":188},[34,28777,26222],{"class":3617},[34,28779,27961],{"class":504},[34,28781,25479],{"class":504},[34,28783,28046],{"class":44},[34,28785,28764],{"class":504},[1772,28787,28788],{"start":182},[1775,28789,28790,28791,28793],{},"安装nvidia-docker2 ： 在Fedora上使用",[31,28792,27936],{},"进行安装",[24,28795,28797],{"className":25467,"code":28796,"language":25469,"meta":29,"style":29},"sudo dnf install -y nvidia-docker2\n",[31,28798,28799],{"__ignoreMap":29},[34,28800,28801,28803,28805,28807,28809],{"class":36,"line":37},[34,28802,26222],{"class":3617},[34,28804,27961],{"class":504},[34,28806,25479],{"class":504},[34,28808,28046],{"class":44},[34,28810,28600],{"class":504},[1772,28812,28813],{"start":188},[1775,28814,28815],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[24,28817,28818],{"className":25467,"code":28608,"language":25469,"meta":29,"style":29},[31,28819,28820],{"__ignoreMap":29},[34,28821,28822,28824,28826,28828,28830],{"class":36,"line":37},[34,28823,26222],{"class":3617},[34,28825,28617],{"class":504},[34,28827,28620],{"class":504},[34,28829,28623],{"class":504},[34,28831,28626],{"class":44},[1772,28833,28834],{"start":518},[1775,28835,28836],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[24,28838,28839],{"className":25467,"code":28634,"language":25469,"meta":29,"style":29},[31,28840,28841],{"__ignoreMap":29},[34,28842,28843,28845,28847,28849],{"class":36,"line":37},[34,28844,26222],{"class":3617},[34,28846,28159],{"class":504},[34,28848,28645],{"class":504},[34,28850,28138],{"class":504},[103,28852,28853],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[103,28855,28856],{},"方法：",[103,28858,28859],{},"1️⃣nvidia-smi",[103,28861,28862],{},"2️⃣运行nvidia cuda 容器进行测试",[24,28864,28866],{"className":25467,"code":28865,"language":25469,"meta":29,"style":29},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[31,28867,28868],{"__ignoreMap":29},[34,28869,28870,28872,28874,28877,28880,28883,28886,28889],{"class":36,"line":37},[34,28871,26222],{"class":3617},[34,28873,27966],{"class":504},[34,28875,28876],{"class":504}," run",[34,28878,28879],{"class":44}," --rm",[34,28881,28882],{"class":44}," --gpus",[34,28884,28885],{"class":504}," all",[34,28887,28888],{"class":504}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[34,28890,28891],{"class":504}," nvidia-smi\n",[103,28893,28894],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[103,28896,28897],{},[109,28898],{"alt":29,"src":28899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[19,28901,28903],{"id":28902},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[103,28905,28906],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[103,28908,28909],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[103,28911,28912],{},[236,28913,28914],{"href":28914,"rel":28915},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25510],[103,28917,28918],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[103,28920,28921],{},"我们只需要找到对应的Docker镜像当底包即可。",[103,28923,28924],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1948,28926,28927,28943],{},[1951,28928,28929],{},[1954,28930,28931,28934,28937,28940],{},[1957,28932,28933],{"align":25381},"镜像类型",[1957,28935,28936],{"align":25381},"适用场景",[1957,28938,28939],{"align":25381},"示例标签",[1957,28941,28942],{"align":25381},"大小",[1994,28944,28945,28959,28973],{},[1954,28946,28947,28950,28953,28956],{},[1999,28948,28949],{"align":25381},"base",[1999,28951,28952],{"align":25381},"仅需 CUDA 运行时库",[1999,28954,28955],{"align":25381},"12.4.0-base-ubuntu22.04",[1999,28957,28958],{"align":25381},"~240MB",[1954,28960,28961,28964,28967,28970],{},[1999,28962,28963],{"align":25381},"runtime",[1999,28965,28966],{"align":25381},"部署编译后的应用（含数学库）",[1999,28968,28969],{"align":25381},"12.4.0-runtime-ubuntu22.04",[1999,28971,28972],{"align":25381},"~2GB",[1954,28974,28975,28978,28981,28984],{},[1999,28976,28977],{"align":25381},"devel",[1999,28979,28980],{"align":25381},"开发环境（含编译工具）",[1999,28982,28983],{"align":25381},"12.4.0-devel-ubuntu22.04",[1999,28985,28986],{"align":25381},"~3GB",[103,28988,28989,28990,28993],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[31,28991,28992],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[103,28995,28996],{},[109,28997],{"alt":29,"src":28998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[103,29000,29001],{},"在dockerfile里就可以开头这么写：",[24,29003,29005],{"className":25467,"code":29004,"language":25469,"meta":29,"style":29},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[31,29006,29007,29012],{"__ignoreMap":29},[34,29008,29009],{"class":36,"line":37},[34,29010,29011],{"class":161},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[34,29013,29014,29017],{"class":36,"line":165},[34,29015,29016],{"class":3617},"FROM",[34,29018,29019],{"class":504}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[19,29021,29023],{"id":29022},"_34配置以太网","3.4.配置以太网",[103,29025,29026],{},"指定网络模式",[24,29028,29030],{"className":25467,"code":29029,"language":25469,"meta":29,"style":29},"--net=host \\\n",[31,29031,29032],{"__ignoreMap":29},[34,29033,29034,29037,29039,29042],{"class":36,"line":37},[34,29035,29036],{"class":40},"--net",[34,29038,221],{"class":55},[34,29040,29041],{"class":504},"host",[34,29043,26324],{"class":3617},[103,29045,29046],{},"启动参数里加上这行即可。具体在下方",[103,29048,29049],{},"--net选项：指定网络模式，该选项有以下参数可选：",[2798,29051,29052,29055,29058,29061],{},[1775,29053,29054],{},"--net=bridge:默认选项，表示连接到默认的网桥",[1775,29056,29057],{},"--net=host:容器使用宿主机的网络",[1775,29059,29060],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[1775,29062,29063],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1711,29065,29066],{},"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":29,"searchDepth":165,"depth":165,"links":29068},[29069,29070,29071,29072],{"id":28383,"depth":171,"text":28384},{"id":28450,"depth":171,"text":28451},{"id":28902,"depth":171,"text":28903},{"id":29022,"depth":171,"text":29023},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28372,"description":28380},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29079,"title":29080,"body":29081,"description":29088,"extension":1745,"meta":29094,"navigation":1474,"path":29095,"seo":29096,"stem":29097,"__hash__":29098},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29082,"toc":29092},[29083,29086,29089],[10,29084,29080],{"id":29085},"_4dockerhub换源",[103,29087,29088],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[103,29090,29091],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":29,"searchDepth":165,"depth":165,"links":29093},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29080,"description":29088},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29100,"title":29101,"body":29102,"description":29,"extension":1745,"meta":30114,"navigation":1474,"path":30115,"seo":30116,"stem":30117,"__hash__":30118},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29103,"toc":30109},[29104,29107,29111,29117,29121,29124,29464,29467,29470,29473,29478,29483,29486,29489,29492,29495,29514,29517,29528,29534,29716,29726,29742,30005,30007,30032,30047,30056,30106],[10,29105,29101],{"id":29106},"_5docker命令学习",[19,29108,29110],{"id":29109},"_51参考文档","5.1.参考文档",[103,29112,29113],{},[236,29114,29115],{"href":29115,"rel":29116},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25510],[19,29118,29120],{"id":29119},"_52常用命令","5.2.常用命令",[103,29122,29123],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1948,29125,29126,29139],{},[1951,29127,29128],{},[1954,29129,29130,29133,29136],{},[1957,29131,29132],{"align":25381},"命令",[1957,29134,29135],{"align":25381},"描述",[1957,29137,29138],{"align":25381},"示例",[1994,29140,29141,29152,29163,29174,29185,29196,29207,29218,29228,29239,29250,29261,29271,29282,29293,29304,29314,29324,29334,29344,29355,29366,29377,29388,29399,29410,29420,29431,29442,29453],{},[1954,29142,29143,29146,29149],{},[1999,29144,29145],{"align":25381},"docker run",[1999,29147,29148],{"align":25381},"创建并启动一个新的容器。",[1999,29150,29151],{"align":25381},"docker run -it ubuntu bash",[1954,29153,29154,29157,29160],{},[1999,29155,29156],{"align":25381},"docker build",[1999,29158,29159],{"align":25381},"通过指定的 Dockerfile 创建一个新的镜像。",[1999,29161,29162],{"align":25381},"docker build -t myimage .",[1954,29164,29165,29168,29171],{},[1999,29166,29167],{"align":25381},"docker pull",[1999,29169,29170],{"align":25381},"从 Docker 仓库拉取镜像。",[1999,29172,29173],{"align":25381},"docker pull ubuntu",[1954,29175,29176,29179,29182],{},[1999,29177,29178],{"align":25381},"docker push",[1999,29180,29181],{"align":25381},"将本地镜像推送到 Docker 仓库。",[1999,29183,29184],{"align":25381},"docker push myimage",[1954,29186,29187,29190,29193],{},[1999,29188,29189],{"align":25381},"docker stop",[1999,29191,29192],{"align":25381},"停止一个正在运行的容器。",[1999,29194,29195],{"align":25381},"docker stop container_id",[1954,29197,29198,29201,29204],{},[1999,29199,29200],{"align":25381},"docker start",[1999,29202,29203],{"align":25381},"启动一个已经存在的容器。",[1999,29205,29206],{"align":25381},"docker start container_id",[1954,29208,29209,29212,29215],{},[1999,29210,29211],{"align":25381},"docker restart",[1999,29213,29214],{"align":25381},"重新启动容器。",[1999,29216,29217],{"align":25381},"docker restart container_id",[1954,29219,29220,29223,29226],{},[1999,29221,29222],{"align":25381},"docker ps",[1999,29224,29225],{"align":25381},"列出当前正在运行的容器。",[1999,29227,29222],{"align":25381},[1954,29229,29230,29233,29236],{},[1999,29231,29232],{"align":25381},"docker rm",[1999,29234,29235],{"align":25381},"删除一个或多个停止的容器。",[1999,29237,29238],{"align":25381},"docker rm container_id",[1954,29240,29241,29244,29247],{},[1999,29242,29243],{"align":25381},"docker exec",[1999,29245,29246],{"align":25381},"在一个正在运行的容器中执行命令。",[1999,29248,29249],{"align":25381},"docker exec -it container_id bash",[1954,29251,29252,29255,29258],{},[1999,29253,29254],{"align":25381},"docker logs",[1999,29256,29257],{"align":25381},"查看容器的日志输出。",[1999,29259,29260],{"align":25381},"docker logs container_id",[1954,29262,29263,29266,29269],{},[1999,29264,29265],{"align":25381},"docker images",[1999,29267,29268],{"align":25381},"列出本地所有镜像。",[1999,29270,29265],{"align":25381},[1954,29272,29273,29276,29279],{},[1999,29274,29275],{"align":25381},"docker rmi",[1999,29277,29278],{"align":25381},"删除一个或多个镜像。",[1999,29280,29281],{"align":25381},"docker rmi myimage",[1954,29283,29284,29287,29290],{},[1999,29285,29286],{"align":25381},"docker network",[1999,29288,29289],{"align":25381},"管理 Docker 网络。",[1999,29291,29292],{"align":25381},"docker network ls",[1954,29294,29295,29298,29301],{},[1999,29296,29297],{"align":25381},"docker volume",[1999,29299,29300],{"align":25381},"管理 Docker 数据卷。",[1999,29302,29303],{"align":25381},"docker volume ls",[1954,29305,29306,29309,29312],{},[1999,29307,29308],{"align":25381},"docker-compose up",[1999,29310,29311],{"align":25381},"启动 docker-compose.yml 中定义的所有服务。",[1999,29313,29308],{"align":25381},[1954,29315,29316,29319,29322],{},[1999,29317,29318],{"align":25381},"docker-compose down",[1999,29320,29321],{"align":25381},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1999,29323,29318],{"align":25381},[1954,29325,29326,29329,29332],{},[1999,29327,29328],{"align":25381},"docker info",[1999,29330,29331],{"align":25381},"显示 Docker 系统的详细信息。",[1999,29333,29328],{"align":25381},[1954,29335,29336,29339,29342],{},[1999,29337,29338],{"align":25381},"docker stats",[1999,29340,29341],{"align":25381},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1999,29343,29338],{"align":25381},[1954,29345,29346,29349,29352],{},[1999,29347,29348],{"align":25381},"docker inspect",[1999,29350,29351],{"align":25381},"查看容器或镜像的详细信息（JSON 格式）。",[1999,29353,29354],{"align":25381},"docker inspect container_id",[1954,29356,29357,29360,29363],{},[1999,29358,29359],{"align":25381},"docker save",[1999,29361,29362],{"align":25381},"将一个镜像保存为 tar 文件。",[1999,29364,29365],{"align":25381},"docker save -o myimage.tar myimage",[1954,29367,29368,29371,29374],{},[1999,29369,29370],{"align":25381},"docker load",[1999,29372,29373],{"align":25381},"从 tar 文件中加载镜像。",[1999,29375,29376],{"align":25381},"docker load -i myimage.tar",[1954,29378,29379,29382,29385],{},[1999,29380,29381],{"align":25381},"docker tag",[1999,29383,29384],{"align":25381},"为镜像添加标签（tag）。",[1999,29386,29387],{"align":25381},"docker tag myimage myimage:v1",[1954,29389,29390,29393,29396],{},[1999,29391,29392],{"align":25381},"docker buildx build",[1999,29394,29395],{"align":25381},"使用 Buildx 构建多架构镜像。",[1999,29397,29398],{"align":25381},"docker buildx build -t myimage .",[1954,29400,29401,29404,29407],{},[1999,29402,29403],{"align":25381},"docker buildx create",[1999,29405,29406],{"align":25381},"创建一个新的 Buildx 构建实例。",[1999,29408,29409],{"align":25381},"docker buildx create –use",[1954,29411,29412,29415,29418],{},[1999,29413,29414],{"align":25381},"docker buildx ls",[1999,29416,29417],{"align":25381},"列出所有可用的 Buildx 构建实例。",[1999,29419,29414],{"align":25381},[1954,29421,29422,29425,29428],{},[1999,29423,29424],{"align":25381},"docker buildx use",[1999,29426,29427],{"align":25381},"设置当前的 Buildx 构建实例。",[1999,29429,29430],{"align":25381},"docker buildx use mybuilder",[1954,29432,29433,29436,29439],{},[1999,29434,29435],{"align":25381},"docker buildx bake",[1999,29437,29438],{"align":25381},"使用 Bake 文件批量构建镜像。",[1999,29440,29441],{"align":25381},"docker buildx bake -f bake.hcl",[1954,29443,29444,29447,29450],{},[1999,29445,29446],{"align":25381},"docker buildx build –push",[1999,29448,29449],{"align":25381},"构建镜像并推送到镜像仓库。",[1999,29451,29452],{"align":25381},"docker buildx build –push -t myimage .",[1954,29454,29455,29458,29461],{},[1999,29456,29457],{"align":25381},"docker buildx build –platform",[1999,29459,29460],{"align":25381},"构建镜像并为多个平台生成支持。",[1999,29462,29463],{"align":25381},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[103,29465,29466],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[103,29468,29469],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[103,29471,29472],{},"docker images 可以查看已经下载的镜像",[103,29474,29475],{},[109,29476],{"alt":29,"src":29477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[103,29479,29480],{},[1165,29481,29482],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[103,29484,29485],{},"docker rmi $(docker images -q) 删除所有的镜像",[103,29487,29488],{},"docker container logs 查看容器日志",[103,29490,29491],{},"docker top 查看容器里的进程",[103,29493,29494],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[24,29496,29498],{"className":25467,"code":29497,"language":25469,"meta":29,"style":29},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[31,29499,29500],{"__ignoreMap":29},[34,29501,29502,29505,29508,29511],{"class":36,"line":37},[34,29503,29504],{"class":3617},"如：docker",[34,29506,29507],{"class":504}," cp",[34,29509,29510],{"class":504}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[34,29512,29513],{"class":504}," \u002Fmydata\u002Fnginx\n",[103,29515,29516],{},"docker run时在启动容器的时候会有几个常用的选项：",[2798,29518,29519,29522,29525],{},[1775,29520,29521],{},"-d选项：表示后台运行",[1775,29523,29524],{},"-P选项：随机端口映射",[1775,29526,29527],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[19,29529,29531],{"id":29530},"_53run命令的参数非常重要",[1165,29532,29533],{},"5.3.run命令的参数（非常重要）",[1948,29535,29536,29549],{},[1951,29537,29538],{},[1954,29539,29540,29543,29546],{},[1957,29541,29542],{"align":25381},"参数\u002F配置",[1957,29544,29545],{"align":25381},"功能说明",[1957,29547,29548],{"align":25381},"重要性与参考依据",[1994,29550,29551,29562,29573,29584,29595,29606,29617,29628,29639,29650,29661,29672,29683,29694,29705],{},[1954,29552,29553,29556,29559],{},[1999,29554,29555],{"align":25381},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1999,29557,29558],{"align":25381},"指定容器名称，便于后续管理",[1999,29560,29561],{"align":25381},"替代随机生成的容器名。",[1954,29563,29564,29567,29570],{},[1999,29565,29566],{"align":25381},"–gpus all",[1999,29568,29569],{"align":25381},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1999,29571,29572],{"align":25381},"用于CUDA加速等GPU依赖任务。",[1954,29574,29575,29578,29581],{},[1999,29576,29577],{"align":25381},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1999,29579,29580],{"align":25381},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1999,29582,29583],{"align":25381},"确保容器内GPU功能完整67。",[1954,29585,29586,29589,29592],{},[1999,29587,29588],{"align":25381},"-dit",[1999,29590,29591],{"align":25381},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1999,29593,29594],{"align":25381},"允许容器在后台运行并支持交互操作。",[1954,29596,29597,29600,29603],{},[1999,29598,29599],{"align":25381},"–privileged",[1999,29601,29602],{"align":25381},"赋予容器完全主机权限（可访问设备、内核模块等）",[1999,29604,29605],{"align":25381},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1954,29607,29608,29611,29614],{},[1999,29609,29610],{"align":25381},"–net=host",[1999,29612,29613],{"align":25381},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1999,29615,29616],{"align":25381},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1954,29618,29619,29622,29625],{},[1999,29620,29621],{"align":25381},"–group-add audio–group-add video–group-add dialout",[1999,29623,29624],{"align":25381},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1999,29626,29627],{"align":25381},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1954,29629,29630,29633,29636],{},[1999,29631,29632],{"align":25381},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1999,29634,29635],{"align":25381},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1999,29637,29638],{"align":25381},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1954,29640,29641,29644,29647],{},[1999,29642,29643],{"align":25381},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1999,29645,29646],{"align":25381},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1999,29648,29649],{"align":25381},"实现容器内图形显示。",[1954,29651,29652,29655,29658],{},[1999,29653,29654],{"align":25381},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1999,29656,29657],{"align":25381},"挂载X11认证文件（只读）",[1999,29659,29660],{"align":25381},"确保容器有权连接宿主机显示服务。",[1954,29662,29663,29666,29669],{},[1999,29664,29665],{"align":25381},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1999,29667,29668],{"align":25381},"挂载Wayland显示协议相关目录",[1999,29670,29671],{"align":25381},"支持Wayland协议的图形显示。",[1954,29673,29674,29677,29680],{},[1999,29675,29676],{"align":25381},"–ulimit nofile=1024:524288",[1999,29678,29679],{"align":25381},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1999,29681,29682],{"align":25381},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1954,29684,29685,29688,29691],{},[1999,29686,29687],{"align":25381},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1999,29689,29690],{"align":25381},"挂载宿主机用户目录到容器内同名路径",[1999,29692,29693],{"align":25381},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1954,29695,29696,29699,29702],{},[1999,29697,29698],{"align":25381},"-w \u002Fhome\u002Ftungchiahui",[1999,29700,29701],{"align":25381},"设置容器启动后的默认工作目录",[1999,29703,29704],{"align":25381},"直接进入项目路径，方便执行命令2324。",[1954,29706,29707,29710,29713],{},[1999,29708,29709],{"align":25381},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1999,29711,29712],{"align":25381},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1999,29714,29715],{"align":25381},"提供预配置的深度学习与机器人开发环境。",[103,29717,29718,29719,29721,29722,29725],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[31,29720,26222],{},"加不加",[31,29723,29724],{},"sudo -E","都无所谓。",[103,29727,29728,29729,29731,29732,29734,29735,29738,29739,29741],{},"用户已经被加到docker组了，不用",[31,29730,26222],{},"也行跑，其次，",[31,29733,26222],{},"运行的话，你的",[31,29736,29737],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[31,29740,29737],{},"更不可能变了。",[24,29743,29745],{"className":25467,"code":29744,"language":25469,"meta":29,"style":29},"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",[31,29746,29747,29760,29770,29780,29792,29799,29806,29813,29823,29832,29841,29855,29867,29879,29888,29898,29907,29922,29955,29982,29993,30000],{"__ignoreMap":29},[34,29748,29749,29751,29753,29755,29758],{"class":36,"line":37},[34,29750,26222],{"class":3617},[34,29752,27966],{"class":504},[34,29754,28876],{"class":504},[34,29756,29757],{"class":44}," --name=ros_opencv_cuda",[34,29759,26324],{"class":44},[34,29761,29762,29765,29768],{"class":36,"line":165},[34,29763,29764],{"class":40},"--gpus ",[34,29766,29767],{"class":504},"all",[34,29769,26324],{"class":44},[34,29771,29772,29775,29778],{"class":36,"line":171},[34,29773,29774],{"class":40},"-e ",[34,29776,29777],{"class":504},"NVIDIA_DRIVER_CAPABILITIES=all",[34,29779,26324],{"class":44},[34,29781,29782,29784,29787,29790],{"class":36,"line":182},[34,29783,29774],{"class":40},[34,29785,29786],{"class":504},"DISPLAY=",[34,29788,29789],{"class":40},"$DISPLAY ",[34,29791,27821],{"class":44},[34,29793,29794,29797],{"class":36,"line":188},[34,29795,29796],{"class":40},"-dit ",[34,29798,27821],{"class":44},[34,29800,29801,29804],{"class":36,"line":518},[34,29802,29803],{"class":40},"--privileged ",[34,29805,27821],{"class":44},[34,29807,29808,29811],{"class":36,"line":524},[34,29809,29810],{"class":40},"--net=host ",[34,29812,27821],{"class":44},[34,29814,29815,29818,29821],{"class":36,"line":530},[34,29816,29817],{"class":40},"--group-add ",[34,29819,29820],{"class":504},"audio",[34,29822,26324],{"class":44},[34,29824,29825,29827,29830],{"class":36,"line":624},[34,29826,29817],{"class":40},[34,29828,29829],{"class":504},"video",[34,29831,26324],{"class":44},[34,29833,29834,29836,29839],{"class":36,"line":630},[34,29835,29817],{"class":40},[34,29837,29838],{"class":504},"dialout",[34,29840,26324],{"class":44},[34,29842,29843,29845,29848,29850,29853],{"class":36,"line":636},[34,29844,29774],{"class":40},[34,29846,29847],{"class":504},"XAUTHORITY=",[34,29849,29737],{"class":40},[34,29851,29852],{"class":504},"\u002F.Xauthority",[34,29854,26324],{"class":44},[34,29856,29857,29859,29862,29865],{"class":36,"line":1513},[34,29858,29774],{"class":40},[34,29860,29861],{"class":504},"WAYLAND_DISPLAY=",[34,29863,29864],{"class":40},"$WAYLAND_DISPLAY ",[34,29866,27821],{"class":44},[34,29868,29869,29871,29874,29877],{"class":36,"line":1519},[34,29870,29774],{"class":40},[34,29872,29873],{"class":504},"XDG_RUNTIME_DIR=",[34,29875,29876],{"class":40},"$XDG_RUNTIME_DIR ",[34,29878,27821],{"class":44},[34,29880,29881,29883,29886],{"class":36,"line":3283},[34,29882,29774],{"class":40},[34,29884,29885],{"class":504},"QT_QPA_PLATFORM=xcb",[34,29887,26324],{"class":44},[34,29889,29890,29893,29896],{"class":36,"line":3297},[34,29891,29892],{"class":40},"-v ",[34,29894,29895],{"class":504},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[34,29897,26324],{"class":44},[34,29899,29900,29902,29905],{"class":36,"line":3302},[34,29901,29892],{"class":40},[34,29903,29904],{"class":504},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[34,29906,26324],{"class":44},[34,29908,29909,29912,29915,29917,29920],{"class":36,"line":3308},[34,29910,29911],{"class":40},"-v $HOME",[34,29913,29914],{"class":504},"\u002F.Xauthority:",[34,29916,29737],{"class":40},[34,29918,29919],{"class":504},"\u002F.Xauthority:ro",[34,29921,26324],{"class":44},[34,29923,29924,29926,29929,29931,29934,29937,29939,29942,29944,29946,29948,29950,29953],{"class":36,"line":3328},[34,29925,29892],{"class":40},[34,29927,29928],{"class":504},"\u002Frun\u002Fuser\u002F",[34,29930,26745],{"class":40},[34,29932,29933],{"class":3617},"id",[34,29935,29936],{"class":44}," -u",[34,29938,918],{"class":40},[34,29940,29941],{"class":504},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[34,29943,26745],{"class":40},[34,29945,29933],{"class":3617},[34,29947,29936],{"class":44},[34,29949,918],{"class":40},[34,29951,29952],{"class":504},"\u002Fwayland-0",[34,29954,26324],{"class":44},[34,29956,29957,29959,29961,29963,29965,29967,29969,29972,29974,29976,29978,29980],{"class":36,"line":3333},[34,29958,29892],{"class":40},[34,29960,29928],{"class":504},[34,29962,26745],{"class":40},[34,29964,29933],{"class":3617},[34,29966,29936],{"class":44},[34,29968,918],{"class":40},[34,29970,29971],{"class":504},":\u002Frun\u002Fuser\u002F",[34,29973,26745],{"class":40},[34,29975,29933],{"class":3617},[34,29977,29936],{"class":44},[34,29979,372],{"class":40},[34,29981,27821],{"class":44},[34,29983,29984,29986,29988,29991],{"class":36,"line":3347},[34,29985,29911],{"class":40},[34,29987,2650],{"class":504},[34,29989,29990],{"class":40},"$HOME ",[34,29992,27821],{"class":44},[34,29994,29995,29998],{"class":36,"line":3352},[34,29996,29997],{"class":40},"-w $HOME ",[34,29999,27821],{"class":44},[34,30001,30002],{"class":36,"line":3381},[34,30003,30004],{"class":40},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[103,30006,10675],{},[1772,30008,30009,30017,30020,30023],{},[1775,30010,30011,15441,30013,30016],{},[31,30012,29777],{},[31,30014,30015],{},"--gpus all","没有英伟达显卡请注释。",[1775,30018,30019],{},"--name后面请自己为容器起名。",[1775,30021,30022],{},"最后一行仓库名称请你自己找对应的镜像填上。",[1775,30024,30025,30026,30031],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25198,30027,30028],{},[1165,30029,30030],{},"请不要加","。",[24,30033,30035],{"className":25467,"code":30034,"language":25469,"meta":29,"style":29},"--ulimit nofile=1024:524288 \\\n",[31,30036,30037],{"__ignoreMap":29},[34,30038,30039,30042,30045],{"class":36,"line":37},[34,30040,30041],{"class":3617},"--ulimit",[34,30043,30044],{"class":504}," nofile=1024:524288",[34,30046,26324],{"class":44},[103,30048,30049,30050,30055],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25198,30051,30052],{},[1165,30053,30054],{},"不建议","**.**",[24,30057,30059],{"className":25467,"code":30058,"language":25469,"meta":29,"style":29},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[31,30060,30061,30088,30097],{"__ignoreMap":29},[34,30062,30063,30066,30069,30071,30073,30075,30077,30079,30081,30084,30086],{"class":36,"line":37},[34,30064,30065],{"class":3617},"--user",[34,30067,30068],{"class":40}," $(",[34,30070,29933],{"class":3617},[34,30072,29936],{"class":44},[34,30074,918],{"class":40},[34,30076,2650],{"class":504},[34,30078,26745],{"class":40},[34,30080,29933],{"class":3617},[34,30082,30083],{"class":44}," -g",[34,30085,372],{"class":40},[34,30087,27821],{"class":44},[34,30089,30090,30092,30095],{"class":36,"line":165},[34,30091,29892],{"class":40},[34,30093,30094],{"class":504},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[34,30096,26324],{"class":44},[34,30098,30099,30101,30104],{"class":36,"line":171},[34,30100,29892],{"class":40},[34,30102,30103],{"class":504},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[34,30105,26324],{"class":44},[1711,30107,30108],{},"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":29,"searchDepth":165,"depth":165,"links":30110},[30111,30112,30113],{"id":29109,"depth":171,"text":29110},{"id":29119,"depth":171,"text":29120},{"id":29530,"depth":171,"text":29533},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29101,"description":29},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30120,"title":30121,"body":30122,"description":29,"extension":1745,"meta":31745,"navigation":1474,"path":31746,"seo":31747,"stem":31748,"__hash__":31749},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30123,"toc":31740},[30124,30127,30131,30134,30356,30360,30364,30367,30473,30478,30481,30486,30489,30494,30497,30502,30505,30517,30520,30525,30532,30560,30567,30643,30648,30651,30674,30676,30751,30756,30759,30763,30771,30776,30781,30785,30796,30802,30805,30808,30832,30835,30838,30866,30869,30872,31337,31340,31345,31350,31354,31377,31382,31386,31390,31393,31396,31399,31426,31429,31432,31450,31453,31456,31478,31486,31491,31496,31500,31503,31506,31509,31512,31557,31560,31578,31581,31586,31589,31610,31613,31669,31672,31677,31681,31684,31691,31694,31697,31702,31705,31721,31724,31737],[10,30125,30121],{"id":30126},"_6手动创建docker镜像",[19,30128,30130],{"id":30129},"_61dockerfile","6.1.DockerFile",[103,30132,30133],{},"常用命令：",[1948,30135,30136,30147],{},[1951,30137,30138],{},[1954,30139,30140,30143,30145],{},[1957,30141,30142],{"align":25381},"指令",[1957,30144,27515],{"align":25381},[1957,30146,29138],{"align":25381},[1994,30148,30149,30159,30175,30186,30197,30208,30219,30230,30241,30255,30269,30280,30294,30305,30316,30330,30345],{},[1954,30150,30151,30153,30156],{},[1999,30152,29016],{"align":25381},[1999,30154,30155],{"align":25381},"指定基础镜像，是 Dockerfile 的起点",[1999,30157,30158],{"align":25381},"FROM ubuntu:22.04",[1954,30160,30161,30164,30167],{},[1999,30162,30163],{"align":25381},"LABEL",[1999,30165,30166],{"align":25381},"添加元数据（如作者、版本等）",[1999,30168,30169,30170,30174],{"align":25381},"LABEL maintainer=”",[236,30171,30173],{"href":30172},"mailto:you@example.com","you@example.com","”",[1954,30176,30177,30180,30183],{},[1999,30178,30179],{"align":25381},"ENV",[1999,30181,30182],{"align":25381},"设置环境变量",[1999,30184,30185],{"align":25381},"ENV PORT=8080",[1954,30187,30188,30191,30194],{},[1999,30189,30190],{"align":25381},"ARG",[1999,30192,30193],{"align":25381},"构建参数，只在构建期间可用",[1999,30195,30196],{"align":25381},"ARG VERSION=1.0",[1954,30198,30199,30202,30205],{},[1999,30200,30201],{"align":25381},"RUN",[1999,30203,30204],{"align":25381},"构建镜像时运行命令",[1999,30206,30207],{"align":25381},"RUN apt-get update && apt-get install -y curl",[1954,30209,30210,30213,30216],{},[1999,30211,30212],{"align":25381},"COPY",[1999,30214,30215],{"align":25381},"复制文件到镜像中",[1999,30217,30218],{"align":25381},"COPY . \u002Fapp",[1954,30220,30221,30224,30227],{},[1999,30222,30223],{"align":25381},"ADD",[1999,30225,30226],{"align":25381},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1999,30228,30229],{"align":25381},"ADD archive.tar.gz \u002Fdata\u002F",[1954,30231,30232,30235,30238],{},[1999,30233,30234],{"align":25381},"WORKDIR",[1999,30236,30237],{"align":25381},"设置工作目录",[1999,30239,30240],{"align":25381},"WORKDIR \u002Fopt",[1954,30242,30243,30246,30249],{},[1999,30244,30245],{"align":25381},"CMD",[1999,30247,30248],{"align":25381},"设置容器启动时默认命令（可被 docker run 覆盖）",[1999,30250,30251,30252],{"align":25381},"CMD ",[34,30253,30254],{},"“node”, “index.js”",[1954,30256,30257,30260,30263],{},[1999,30258,30259],{"align":25381},"ENTRYPOINT",[1999,30261,30262],{"align":25381},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1999,30264,30265,30266],{"align":25381},"ENTRYPOINT ",[34,30267,30268],{},"“python3”",[1954,30270,30271,30274,30277],{},[1999,30272,30273],{"align":25381},"EXPOSE",[1999,30275,30276],{"align":25381},"声明镜像内服务监听的端口（不会自动映射）",[1999,30278,30279],{"align":25381},"EXPOSE 80",[1954,30281,30282,30285,30288],{},[1999,30283,30284],{"align":25381},"VOLUME",[1999,30286,30287],{"align":25381},"声明数据卷挂载点",[1999,30289,30290,30291],{"align":25381},"VOLUME ",[34,30292,30293],{},"“\u002Fdata”",[1954,30295,30296,30299,30302],{},[1999,30297,30298],{"align":25381},"USER",[1999,30300,30301],{"align":25381},"设置后续命令执行的用户",[1999,30303,30304],{"align":25381},"USER appuser",[1954,30306,30307,30310,30313],{},[1999,30308,30309],{"align":25381},"ONBUILD",[1999,30311,30312],{"align":25381},"当镜像作为其他镜像基础镜像时触发的构建指令",[1999,30314,30315],{"align":25381},"ONBUILD COPY . \u002Fsrc",[1954,30317,30318,30321,30324],{},[1999,30319,30320],{"align":25381},"SHELL",[1999,30322,30323],{"align":25381},"更改默认 shell，比如将 sh -c 改为 bash -c",[1999,30325,30326,30327],{"align":25381},"SHELL ",[34,30328,30329],{},"“\u002Fbin\u002Fbash”, “-c”",[1954,30331,30332,30335,30338],{},[1999,30333,30334],{"align":25381},"HEALTHCHECK",[1999,30336,30337],{"align":25381},"定义容器运行时的健康检查命令",[1999,30339,30340,30341],{"align":25381},"`HEALTHCHECK CMD curl –fail ",[236,30342,30343],{"href":30343,"rel":30344},"http:\u002F\u002Flocalhost:8080",[25510],[1954,30346,30347,30350,30353],{},[1999,30348,30349],{"align":25381},"STOPSIGNAL",[1999,30351,30352],{"align":25381},"容器停止时发送的信号",[1999,30354,30355],{"align":25381},"STOPSIGNAL SIGKILL",[19,30357,30359],{"id":30358},"_62自己创建容器","6.2.自己创建容器",[1353,30361,30363],{"id":30362},"_621手动创建","6.2.1.手动创建",[103,30365,30366],{},"在x86电脑上编译x86的：",[24,30368,30370],{"className":25467,"code":30369,"language":25469,"meta":29,"style":29},"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",[31,30371,30372,30388,30392,30405,30409,30422,30426,30439,30443,30456,30460],{"__ignoreMap":29},[34,30373,30374,30376,30379,30382,30385],{"class":36,"line":37},[34,30375,28199],{"class":3617},[34,30377,30378],{"class":504}," build",[34,30380,30381],{"class":44}," -t",[34,30383,30384],{"class":504}," ros-melodic-cuda118-cudnn8-bionic:latest",[34,30386,30387],{"class":504}," .\n",[34,30389,30390],{"class":36,"line":165},[34,30391,1475],{"emptyLinePlaceholder":1474},[34,30393,30394,30396,30398,30400,30403],{"class":36,"line":171},[34,30395,28199],{"class":3617},[34,30397,30378],{"class":504},[34,30399,30381],{"class":44},[34,30401,30402],{"class":504}," ros-noetic-focal:latest",[34,30404,30387],{"class":504},[34,30406,30407],{"class":36,"line":182},[34,30408,1475],{"emptyLinePlaceholder":1474},[34,30410,30411,30413,30415,30417,30420],{"class":36,"line":188},[34,30412,28199],{"class":3617},[34,30414,30378],{"class":504},[34,30416,30381],{"class":44},[34,30418,30419],{"class":504}," ros-humble-jammy:latest",[34,30421,30387],{"class":504},[34,30423,30424],{"class":36,"line":518},[34,30425,1475],{"emptyLinePlaceholder":1474},[34,30427,30428,30430,30432,30434,30437],{"class":36,"line":524},[34,30429,28199],{"class":3617},[34,30431,30378],{"class":504},[34,30433,30381],{"class":44},[34,30435,30436],{"class":504}," ros-jazzy-noble:latest",[34,30438,30387],{"class":504},[34,30440,30441],{"class":36,"line":530},[34,30442,1475],{"emptyLinePlaceholder":1474},[34,30444,30445,30447,30449,30451,30454],{"class":36,"line":624},[34,30446,28199],{"class":3617},[34,30448,30378],{"class":504},[34,30450,30381],{"class":44},[34,30452,30453],{"class":504}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[34,30455,30387],{"class":504},[34,30457,30458],{"class":36,"line":630},[34,30459,1475],{"emptyLinePlaceholder":1474},[34,30461,30462,30464,30466,30468,30471],{"class":36,"line":636},[34,30463,28199],{"class":3617},[34,30465,30378],{"class":504},[34,30467,30381],{"class":44},[34,30469,30470],{"class":504}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[34,30472,30387],{"class":504},[103,30474,30475],{},[109,30476],{"alt":29,"src":30477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[103,30479,30480],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[103,30482,30483],{},[109,30484],{"alt":29,"src":30485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[103,30487,30488],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[1772,30490,30491],{},[1775,30492,30493],{},"创建 Docker Hub 账户",[103,30495,30496],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[1772,30498,30499],{"start":165},[1775,30500,30501],{},"登录 Docker Hub",[103,30503,30504],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[24,30506,30508],{"className":25467,"code":30507,"language":25469,"meta":29,"style":29},"docker login\n",[31,30509,30510],{"__ignoreMap":29},[34,30511,30512,30514],{"class":36,"line":37},[34,30513,28199],{"class":3617},[34,30515,30516],{"class":504}," login\n",[103,30518,30519],{},"输入你的 Docker Hub 用户名和密码进行验证。",[1772,30521,30522],{},[1775,30523,30524],{},"为你的镜像打标签",[103,30526,30527,30528,30531],{},"Docker Hub 使用 ",[31,30529,30530],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[24,30533,30535],{"className":25467,"code":30534,"language":25469,"meta":29,"style":29},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[31,30536,30537],{"__ignoreMap":29},[34,30538,30539,30541,30544,30546,30549,30552,30555,30557],{"class":36,"line":37},[34,30540,28199],{"class":3617},[34,30542,30543],{"class":504}," tag",[34,30545,30436],{"class":504},[34,30547,30548],{"class":55}," \u003C",[34,30550,30551],{"class":504},"你的用户",[34,30553,30554],{"class":40},"名",[34,30556,2751],{"class":55},[34,30558,30559],{"class":504},"\u002Fros-jazzy-noble:latest\n",[103,30561,30562,30563,30566],{},"例如，如果你的 Docker Hub 用户名是 ",[31,30564,30565],{},"tungchiahui","，你应该执行：",[24,30568,30570],{"className":25467,"code":30569,"language":25469,"meta":29,"style":29},"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",[31,30571,30572,30583,30587,30598,30602,30613,30617,30628,30632],{"__ignoreMap":29},[34,30573,30574,30576,30578,30580],{"class":36,"line":37},[34,30575,28199],{"class":3617},[34,30577,30543],{"class":504},[34,30579,30402],{"class":504},[34,30581,30582],{"class":504}," tungchiahui\u002Fros-noetic-focal:latest\n",[34,30584,30585],{"class":36,"line":165},[34,30586,1475],{"emptyLinePlaceholder":1474},[34,30588,30589,30591,30593,30595],{"class":36,"line":171},[34,30590,28199],{"class":3617},[34,30592,30543],{"class":504},[34,30594,30419],{"class":504},[34,30596,30597],{"class":504}," tungchiahui\u002Fros-humble-jammy:latest\n",[34,30599,30600],{"class":36,"line":182},[34,30601,1475],{"emptyLinePlaceholder":1474},[34,30603,30604,30606,30608,30610],{"class":36,"line":188},[34,30605,28199],{"class":3617},[34,30607,30543],{"class":504},[34,30609,30436],{"class":504},[34,30611,30612],{"class":504}," tungchiahui\u002Fros-jazzy-noble:latest\n",[34,30614,30615],{"class":36,"line":518},[34,30616,1475],{"emptyLinePlaceholder":1474},[34,30618,30619,30621,30623,30625],{"class":36,"line":524},[34,30620,28199],{"class":3617},[34,30622,30543],{"class":504},[34,30624,30453],{"class":504},[34,30626,30627],{"class":504}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[34,30629,30630],{"class":36,"line":530},[34,30631,1475],{"emptyLinePlaceholder":1474},[34,30633,30634,30636,30638,30640],{"class":36,"line":624},[34,30635,28199],{"class":3617},[34,30637,30543],{"class":504},[34,30639,30470],{"class":504},[34,30641,30642],{"class":504}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[1772,30644,30645],{"start":165},[1775,30646,30647],{},"推送镜像到 Docker Hub",[103,30649,30650],{},"使用以下命令将镜像推送到 Docker Hub：",[24,30652,30654],{"className":25467,"code":30653,"language":25469,"meta":29,"style":29},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[31,30655,30656],{"__ignoreMap":29},[34,30657,30658,30660,30663,30665,30667,30669,30671],{"class":36,"line":37},[34,30659,28199],{"class":3617},[34,30661,30662],{"class":504}," push",[34,30664,30548],{"class":55},[34,30666,30551],{"class":504},[34,30668,30554],{"class":40},[34,30670,2751],{"class":55},[34,30672,30673],{"class":504},"\u002Fros-noetic-jazzy-noble:latest\n",[103,30675,16279],{},[24,30677,30679],{"className":25467,"code":30678,"language":25469,"meta":29,"style":29},"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",[31,30680,30681,30689,30693,30701,30705,30713,30717,30726,30730,30738,30742],{"__ignoreMap":29},[34,30682,30683,30685,30687],{"class":36,"line":37},[34,30684,28199],{"class":3617},[34,30686,30662],{"class":504},[34,30688,30582],{"class":504},[34,30690,30691],{"class":36,"line":165},[34,30692,1475],{"emptyLinePlaceholder":1474},[34,30694,30695,30697,30699],{"class":36,"line":171},[34,30696,28199],{"class":3617},[34,30698,30662],{"class":504},[34,30700,30597],{"class":504},[34,30702,30703],{"class":36,"line":182},[34,30704,1475],{"emptyLinePlaceholder":1474},[34,30706,30707,30709,30711],{"class":36,"line":188},[34,30708,28199],{"class":3617},[34,30710,30662],{"class":504},[34,30712,30612],{"class":504},[34,30714,30715],{"class":36,"line":518},[34,30716,1475],{"emptyLinePlaceholder":1474},[34,30718,30719,30721,30723],{"class":36,"line":524},[34,30720,28199],{"class":3617},[34,30722,30662],{"class":504},[34,30724,30725],{"class":504}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[34,30727,30728],{"class":36,"line":530},[34,30729,1475],{"emptyLinePlaceholder":1474},[34,30731,30732,30734,30736],{"class":36,"line":624},[34,30733,28199],{"class":3617},[34,30735,30662],{"class":504},[34,30737,30642],{"class":504},[34,30739,30740],{"class":36,"line":630},[34,30741,1475],{"emptyLinePlaceholder":1474},[34,30743,30744,30746,30748],{"class":36,"line":636},[34,30745,28199],{"class":3617},[34,30747,30662],{"class":504},[34,30749,30750],{"class":504}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[1772,30752,30753],{"start":171},[1775,30754,30755],{},"验证推送成功",[103,30757,30758],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[103,30760,30761],{},[1165,30762,5437],{},[2798,30764,30765,30768],{},[1775,30766,30767],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[1775,30769,30770],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[103,30772,30773],{},[109,30774],{"alt":29,"src":30775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[103,30777,30778],{},[109,30779],{"alt":29,"src":30780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[1353,30782,30784],{"id":30783},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[103,30786,30787,30788,30791,30792,30795],{},"如果您想在 ",[1165,30789,30790],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[1165,30793,30794],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[103,30797,30798,30799],{},"1. ",[1165,30800,30801],{},"启用 Docker 跨平台构建",[103,30803,30804],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[103,30806,30807],{},"第一步：启用 buildx（只需执行一次）",[24,30809,30811],{"className":25467,"code":30810,"language":25469,"meta":29,"style":29},"docker buildx create --name multiarch_builder --use\n",[31,30812,30813],{"__ignoreMap":29},[34,30814,30815,30817,30820,30823,30826,30829],{"class":36,"line":37},[34,30816,28199],{"class":3617},[34,30818,30819],{"class":504}," buildx",[34,30821,30822],{"class":504}," create",[34,30824,30825],{"class":44}," --name",[34,30827,30828],{"class":504}," multiarch_builder",[34,30830,30831],{"class":44}," --use\n",[103,30833,30834],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[103,30836,30837],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[24,30839,30841],{"className":25467,"code":30840,"language":25469,"meta":29,"style":29},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[31,30842,30843],{"__ignoreMap":29},[34,30844,30845,30847,30849,30851,30854,30857,30860,30863],{"class":36,"line":37},[34,30846,28199],{"class":3617},[34,30848,28876],{"class":504},[34,30850,28879],{"class":44},[34,30852,30853],{"class":44}," --privileged",[34,30855,30856],{"class":504}," multiarch\u002Fqemu-user-static",[34,30858,30859],{"class":44}," --reset",[34,30861,30862],{"class":44}," -p",[34,30864,30865],{"class":504}," yes\n",[103,30867,30868],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[103,30870,30871],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[24,30873,30875],{"className":25467,"code":30874,"language":25469,"meta":29,"style":29},"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",[31,30876,30877,30919,30923,30928,30938,30948,30957,30963,30967,30971,30981,30989,30998,31004,31008,31012,31022,31030,31039,31045,31049,31053,31063,31071,31080,31086,31090,31094,31104,31112,31121,31127,31131,31135,31145,31153,31162,31168,31172,31176,31186,31194,31203,31209,31213,31217,31227,31235,31244,31250,31254,31258,31268,31276,31285,31291,31295,31299,31310,31318,31327,31333],{"__ignoreMap":29},[34,30878,30879,30881,30883,30885,30888,30891,30893,30895,30898,30900,30902,30904,30906,30909,30912,30914,30917],{"class":36,"line":37},[34,30880,28199],{"class":3617},[34,30882,30819],{"class":504},[34,30884,30378],{"class":504},[34,30886,30887],{"class":44}," --platform",[34,30889,30890],{"class":504}," linux\u002Famd64,linux\u002Farm64",[34,30892,30381],{"class":44},[34,30894,30548],{"class":55},[34,30896,30897],{"class":504},"你的镜像",[34,30899,30554],{"class":40},[34,30901,2751],{"class":55},[34,30903,2650],{"class":504},[34,30905,2701],{"class":55},[34,30907,30908],{"class":504},"标",[34,30910,30911],{"class":40},"签",[34,30913,2751],{"class":55},[34,30915,30916],{"class":44}," --push",[34,30918,30387],{"class":504},[34,30920,30921],{"class":36,"line":165},[34,30922,1475],{"emptyLinePlaceholder":1474},[34,30924,30925],{"class":36,"line":171},[34,30926,30927],{"class":161},"# 例子：\n",[34,30929,30930,30932,30934,30936],{"class":36,"line":182},[34,30931,28199],{"class":3617},[34,30933,30819],{"class":504},[34,30935,30378],{"class":504},[34,30937,26324],{"class":44},[34,30939,30940,30943,30946],{"class":36,"line":188},[34,30941,30942],{"class":40},"--platform ",[34,30944,30945],{"class":504},"linux\u002Famd64,linux\u002Farm64",[34,30947,26324],{"class":44},[34,30949,30950,30952,30955],{"class":36,"line":518},[34,30951,30381],{"class":44},[34,30953,30954],{"class":504}," tungchiahui\u002Fros:noetic-focal",[34,30956,26324],{"class":44},[34,30958,30959,30961],{"class":36,"line":524},[34,30960,30916],{"class":44},[34,30962,26324],{"class":44},[34,30964,30965],{"class":36,"line":530},[34,30966,30387],{"class":504},[34,30968,30969],{"class":36,"line":624},[34,30970,1475],{"emptyLinePlaceholder":1474},[34,30972,30973,30975,30977,30979],{"class":36,"line":630},[34,30974,28199],{"class":3617},[34,30976,30819],{"class":504},[34,30978,30378],{"class":504},[34,30980,26324],{"class":44},[34,30982,30983,30985,30987],{"class":36,"line":636},[34,30984,30942],{"class":40},[34,30986,30945],{"class":504},[34,30988,26324],{"class":44},[34,30990,30991,30993,30996],{"class":36,"line":1513},[34,30992,30381],{"class":44},[34,30994,30995],{"class":504}," tungchiahui\u002Fros:humble-jammy",[34,30997,26324],{"class":44},[34,30999,31000,31002],{"class":36,"line":1519},[34,31001,30916],{"class":44},[34,31003,26324],{"class":44},[34,31005,31006],{"class":36,"line":3283},[34,31007,30387],{"class":504},[34,31009,31010],{"class":36,"line":3297},[34,31011,1475],{"emptyLinePlaceholder":1474},[34,31013,31014,31016,31018,31020],{"class":36,"line":3302},[34,31015,28199],{"class":3617},[34,31017,30819],{"class":504},[34,31019,30378],{"class":504},[34,31021,26324],{"class":44},[34,31023,31024,31026,31028],{"class":36,"line":3308},[34,31025,30942],{"class":40},[34,31027,30945],{"class":504},[34,31029,26324],{"class":44},[34,31031,31032,31034,31037],{"class":36,"line":3328},[34,31033,30381],{"class":44},[34,31035,31036],{"class":504}," tungchiahui\u002Fros:jazzy-noble",[34,31038,26324],{"class":44},[34,31040,31041,31043],{"class":36,"line":3333},[34,31042,30916],{"class":44},[34,31044,26324],{"class":44},[34,31046,31047],{"class":36,"line":3347},[34,31048,30387],{"class":504},[34,31050,31051],{"class":36,"line":3352},[34,31052,1475],{"emptyLinePlaceholder":1474},[34,31054,31055,31057,31059,31061],{"class":36,"line":3381},[34,31056,27966],{"class":3617},[34,31058,30819],{"class":504},[34,31060,30378],{"class":504},[34,31062,26324],{"class":44},[34,31064,31065,31067,31069],{"class":36,"line":3386},[34,31066,30942],{"class":40},[34,31068,30945],{"class":504},[34,31070,26324],{"class":44},[34,31072,31073,31075,31078],{"class":36,"line":3403},[34,31074,30381],{"class":44},[34,31076,31077],{"class":504}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[34,31079,26324],{"class":44},[34,31081,31082,31084],{"class":36,"line":3408},[34,31083,30916],{"class":44},[34,31085,26324],{"class":44},[34,31087,31088],{"class":36,"line":3413},[34,31089,30387],{"class":504},[34,31091,31092],{"class":36,"line":3418},[34,31093,1475],{"emptyLinePlaceholder":1474},[34,31095,31096,31098,31100,31102],{"class":36,"line":3432},[34,31097,28199],{"class":3617},[34,31099,30819],{"class":504},[34,31101,30378],{"class":504},[34,31103,26324],{"class":44},[34,31105,31106,31108,31110],{"class":36,"line":3437},[34,31107,30942],{"class":40},[34,31109,30945],{"class":504},[34,31111,26324],{"class":44},[34,31113,31114,31116,31119],{"class":36,"line":4230},[34,31115,30381],{"class":44},[34,31117,31118],{"class":504}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[34,31120,26324],{"class":44},[34,31122,31123,31125],{"class":36,"line":4244},[34,31124,30916],{"class":44},[34,31126,26324],{"class":44},[34,31128,31129],{"class":36,"line":4252},[34,31130,30387],{"class":504},[34,31132,31133],{"class":36,"line":4257},[34,31134,1475],{"emptyLinePlaceholder":1474},[34,31136,31137,31139,31141,31143],{"class":36,"line":4263},[34,31138,27966],{"class":3617},[34,31140,30819],{"class":504},[34,31142,30378],{"class":504},[34,31144,26324],{"class":44},[34,31146,31147,31149,31151],{"class":36,"line":4269},[34,31148,30942],{"class":40},[34,31150,30945],{"class":504},[34,31152,26324],{"class":44},[34,31154,31155,31157,31160],{"class":36,"line":4274},[34,31156,30381],{"class":44},[34,31158,31159],{"class":504}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[34,31161,26324],{"class":44},[34,31163,31164,31166],{"class":36,"line":9598},[34,31165,30916],{"class":44},[34,31167,26324],{"class":44},[34,31169,31170],{"class":36,"line":9622},[34,31171,30387],{"class":504},[34,31173,31174],{"class":36,"line":9627},[34,31175,1475],{"emptyLinePlaceholder":1474},[34,31177,31178,31180,31182,31184],{"class":36,"line":9633},[34,31179,28199],{"class":3617},[34,31181,30819],{"class":504},[34,31183,30378],{"class":504},[34,31185,26324],{"class":44},[34,31187,31188,31190,31192],{"class":36,"line":9660},[34,31189,30942],{"class":40},[34,31191,30945],{"class":504},[34,31193,26324],{"class":44},[34,31195,31196,31198,31201],{"class":36,"line":9665},[34,31197,30381],{"class":44},[34,31199,31200],{"class":504}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[34,31202,26324],{"class":44},[34,31204,31205,31207],{"class":36,"line":9671},[34,31206,30916],{"class":44},[34,31208,26324],{"class":44},[34,31210,31211],{"class":36,"line":9683},[34,31212,30387],{"class":504},[34,31214,31215],{"class":36,"line":9695},[34,31216,1475],{"emptyLinePlaceholder":1474},[34,31218,31219,31221,31223,31225],{"class":36,"line":9707},[34,31220,28199],{"class":3617},[34,31222,30819],{"class":504},[34,31224,30378],{"class":504},[34,31226,26324],{"class":44},[34,31228,31229,31231,31233],{"class":36,"line":11366},[34,31230,30942],{"class":40},[34,31232,30945],{"class":504},[34,31234,26324],{"class":44},[34,31236,31237,31239,31242],{"class":36,"line":11391},[34,31238,30381],{"class":44},[34,31240,31241],{"class":504}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[34,31243,26324],{"class":44},[34,31245,31246,31248],{"class":36,"line":11414},[34,31247,30916],{"class":44},[34,31249,26324],{"class":44},[34,31251,31252],{"class":36,"line":11438},[34,31253,30387],{"class":504},[34,31255,31256],{"class":36,"line":11443},[34,31257,1475],{"emptyLinePlaceholder":1474},[34,31259,31260,31262,31264,31266],{"class":36,"line":11448},[34,31261,27966],{"class":3617},[34,31263,30819],{"class":504},[34,31265,30378],{"class":504},[34,31267,26324],{"class":44},[34,31269,31270,31272,31274],{"class":36,"line":11453},[34,31271,30942],{"class":40},[34,31273,30945],{"class":504},[34,31275,26324],{"class":44},[34,31277,31278,31280,31283],{"class":36,"line":11462},[34,31279,30381],{"class":44},[34,31281,31282],{"class":504}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[34,31284,26324],{"class":44},[34,31286,31287,31289],{"class":36,"line":11467},[34,31288,30916],{"class":44},[34,31290,26324],{"class":44},[34,31292,31293],{"class":36,"line":11473},[34,31294,30387],{"class":504},[34,31296,31297],{"class":36,"line":11494},[34,31298,1475],{"emptyLinePlaceholder":1474},[34,31300,31301,31304,31306,31308],{"class":36,"line":11500},[34,31302,31303],{"class":3617},"  docker",[34,31305,30819],{"class":504},[34,31307,30378],{"class":504},[34,31309,26324],{"class":44},[34,31311,31312,31314,31316],{"class":36,"line":11514},[34,31313,30942],{"class":40},[34,31315,30945],{"class":504},[34,31317,26324],{"class":44},[34,31319,31320,31322,31325],{"class":36,"line":11520},[34,31321,30381],{"class":44},[34,31323,31324],{"class":504}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[34,31326,26324],{"class":44},[34,31328,31329,31331],{"class":36,"line":11547},[34,31330,30916],{"class":44},[34,31332,26324],{"class":44},[34,31334,31335],{"class":36,"line":11556},[34,31336,30387],{"class":504},[103,31338,31339],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[103,31341,31342],{},[109,31343],{"alt":29,"src":31344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[103,31346,31347],{},[109,31348],{"alt":29,"src":31349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[1353,31351,31353],{"id":31352},"_623清除构建缓存","6.2.3.清除构建缓存",[24,31355,31357],{"className":25467,"code":31356,"language":25469,"meta":29,"style":29},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[31,31358,31359,31364],{"__ignoreMap":29},[34,31360,31361],{"class":36,"line":37},[34,31362,31363],{"class":161},"# 清理BuildKit构建缓存\n",[34,31365,31366,31368,31371,31374],{"class":36,"line":165},[34,31367,28199],{"class":3617},[34,31369,31370],{"class":504}," builder",[34,31372,31373],{"class":504}," prune",[34,31375,31376],{"class":44}," -f\n",[103,31378,31379],{},[109,31380],{"alt":29,"src":31381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[19,31383,31385],{"id":31384},"_63补充","6.3.补充",[1353,31387,31389],{"id":31388},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[103,31391,31392],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[103,31394,31395],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[103,31397,31398],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[24,31400,31402],{"className":25467,"code":31401,"language":25469,"meta":29,"style":29},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[31,31403,31404,31411],{"__ignoreMap":29},[34,31405,31406,31408],{"class":36,"line":37},[34,31407,29016],{"class":3617},[34,31409,31410],{"class":504}," nginx\n",[34,31412,31413,31415,31418,31421,31423],{"class":36,"line":165},[34,31414,30201],{"class":3617},[34,31416,31417],{"class":504}," echo",[34,31419,31420],{"class":504}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[34,31422,27868],{"class":55},[34,31424,31425],{"class":504}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[103,31427,31428],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[103,31430,31431],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[24,31433,31435],{"className":25467,"code":31434,"language":25469,"meta":29,"style":29},"docker build -t nginx:tuling .\n",[31,31436,31437],{"__ignoreMap":29},[34,31438,31439,31441,31443,31445,31448],{"class":36,"line":37},[34,31440,28199],{"class":3617},[34,31442,30378],{"class":504},[34,31444,30381],{"class":44},[34,31446,31447],{"class":504}," nginx:tuling",[34,31449,30387],{"class":504},[103,31451,31452],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[103,31454,31455],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[24,31457,31459],{"className":25467,"code":31458,"language":25469,"meta":29,"style":29},"docker run -d -p 92:80 nginx:tuling\n",[31,31460,31461],{"__ignoreMap":29},[34,31462,31463,31465,31467,31470,31472,31475],{"class":36,"line":37},[34,31464,28199],{"class":3617},[34,31466,28876],{"class":504},[34,31468,31469],{"class":44}," -d",[34,31471,30862],{"class":44},[34,31473,31474],{"class":504}," 92:80",[34,31476,31477],{"class":504}," nginx:tuling\n",[103,31479,31480,31481],{},"4、访问 ",[236,31482,31485],{"href":31483,"rel":31484},"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",[25510],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[103,31487,31488],{},[109,31489],{"alt":29,"src":31490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[103,31492,31493],{},[109,31494],{"alt":29,"src":31495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[1353,31497,31499],{"id":31498},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[103,31501,31502],{},"只需要知道大体流程即可",[103,31504,31505],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[103,31507,31508],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[103,31510,31511],{},"2、在Dockerfile中添加以下内容",[24,31513,31515],{"className":27737,"code":31514,"language":27739,"meta":29,"style":29},"# 基于哪个镜像\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",[31,31516,31517,31522,31527,31532,31537,31542,31547,31552],{"__ignoreMap":29},[34,31518,31519],{"class":36,"line":37},[34,31520,31521],{},"# 基于哪个镜像\n",[34,31523,31524],{"class":36,"line":165},[34,31525,31526],{},"From java:8\n",[34,31528,31529],{"class":36,"line":171},[34,31530,31531],{},"# 复制文件到容器\n",[34,31533,31534],{"class":36,"line":182},[34,31535,31536],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[34,31538,31539],{"class":36,"line":188},[34,31540,31541],{},"# 声明需要暴露的端口\n",[34,31543,31544],{"class":36,"line":518},[34,31545,31546],{},"EXPOSE 8877\n",[34,31548,31549],{"class":36,"line":524},[34,31550,31551],{},"# 配置容器启动后执行的命令\n",[34,31553,31554],{"class":36,"line":530},[34,31555,31556],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[103,31558,31559],{},"3、使用docker build命令构建镜像",[24,31561,31563],{"className":25467,"code":31562,"language":25469,"meta":29,"style":29},"docker build -t tulingmall-member:0.0.5 .\n",[31,31564,31565],{"__ignoreMap":29},[34,31566,31567,31569,31571,31573,31576],{"class":36,"line":37},[34,31568,28199],{"class":3617},[34,31570,30378],{"class":504},[34,31572,30381],{"class":44},[34,31574,31575],{"class":504}," tulingmall-member:0.0.5",[34,31577,30387],{"class":504},[103,31579,31580],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[103,31582,31583],{},[109,31584],{"alt":29,"src":31585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[103,31587,31588],{},"4、启动镜像，加-d可在后台启动",[24,31590,31592],{"className":25467,"code":31591,"language":25469,"meta":29,"style":29},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[31,31593,31594],{"__ignoreMap":29},[34,31595,31596,31598,31600,31602,31604,31607],{"class":36,"line":37},[34,31597,28199],{"class":3617},[34,31599,28876],{"class":504},[34,31601,31469],{"class":44},[34,31603,30862],{"class":44},[34,31605,31606],{"class":504}," 8877:8877",[34,31608,31609],{"class":504}," tulingmall-member:0.0.5\n",[103,31611,31612],{},"加上JVM参数：",[24,31614,31616],{"className":25467,"code":31615,"language":25469,"meta":29,"style":29},"# --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",[31,31617,31618,31623,31638,31648,31657,31664],{"__ignoreMap":29},[34,31619,31620],{"class":36,"line":37},[34,31621,31622],{"class":161},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[34,31624,31625,31627,31629,31632,31634,31636],{"class":36,"line":165},[34,31626,28199],{"class":3617},[34,31628,28876],{"class":504},[34,31630,31631],{"class":44},"  -d",[34,31633,30862],{"class":44},[34,31635,31606],{"class":504},[34,31637,26324],{"class":44},[34,31639,31640,31642,31645],{"class":36,"line":171},[34,31641,29774],{"class":40},[34,31643,31644],{"class":504},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[34,31646,31647],{"class":44},"  \\\n",[34,31649,31650,31652,31655],{"class":36,"line":182},[34,31651,29774],{"class":40},[34,31653,31654],{"class":504},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[34,31656,31647],{"class":44},[34,31658,31659,31662],{"class":36,"line":188},[34,31660,31661],{"class":40},"--cap-add=SYS_PTRACE  ",[34,31663,27821],{"class":44},[34,31665,31666],{"class":36,"line":518},[34,31667,31668],{"class":40},"tulingmall-member:0.0.5\n",[103,31670,31671],{},"5、访问会员服务接口",[103,31673,31674],{},[109,31675],{"alt":29,"src":31676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[1353,31678,31680],{"id":31679},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[103,31682,31683],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[103,31685,31686,31687],{},"阿里云docker镜像仓库：",[236,31688,31689],{"href":31689,"rel":31690},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25510],[103,31692,31693],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[103,31695,31696],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[103,31698,31699],{},[109,31700],{"alt":29,"src":31701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[103,31703,31704],{},"要把镜像推送到镜像仓库",[24,31706,31708],{"className":25467,"code":31707,"language":25469,"meta":29,"style":29},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[31,31709,31710],{"__ignoreMap":29},[34,31711,31712,31714,31716,31718],{"class":36,"line":37},[34,31713,28199],{"class":3617},[34,31715,30543],{"class":504},[34,31717,31575],{"class":504},[34,31719,31720],{"class":504}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[103,31722,31723],{},"最后将镜像推送到远程仓库",[24,31725,31727],{"className":25467,"code":31726,"language":25469,"meta":29,"style":29},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[31,31728,31729],{"__ignoreMap":29},[34,31730,31731,31733,31735],{"class":36,"line":37},[34,31732,28199],{"class":3617},[34,31734,30662],{"class":504},[34,31736,31720],{"class":504},[1711,31738,31739],{},"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":29,"searchDepth":165,"depth":165,"links":31741},[31742,31743,31744],{"id":30129,"depth":171,"text":30130},{"id":30358,"depth":171,"text":30359},{"id":31384,"depth":171,"text":31385},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30121,"description":29},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31751,"title":31752,"body":31753,"description":29,"extension":1745,"meta":31896,"navigation":1474,"path":31897,"seo":31898,"stem":31899,"__hash__":31900},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31754,"toc":31894},[31755,31758,31763,31768,31771,31776,31781,31784,31789,31794,31797,31802,31805,31808,31811,31814,31817,31820,31840,31862,31865,31868,31888,31891],[10,31756,31752],{"id":31757},"_7vscode远程开发",[1772,31759,31760],{},[1775,31761,31762],{},"插件1：微软Docker工具",[103,31764,31765],{},[109,31766],{"alt":29,"src":31767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[103,31769,31770],{},"docker扩展插件已经进化为container tools了，请安装container tools",[103,31772,31773],{},[109,31774],{"alt":29,"src":31775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[1772,31777,31778],{"start":165},[1775,31779,31780],{},"插件2：微软Docker远程开发工具",[103,31782,31783],{},"下面这是远程开发的插件。",[103,31785,31786],{},[109,31787],{"alt":29,"src":31788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[103,31790,31791],{},[109,31792],{"alt":29,"src":31793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[103,31795,31796],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[103,31798,31799],{},[109,31800],{"alt":29,"src":31801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[103,31803,31804],{},"安装完拓展之后，vscode进行链接：",[103,31806,31807],{},"1.按ctrl+shift+p",[103,31809,31810],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[103,31812,31813],{},"3.选择目前运行的容器",[103,31815,31816],{},"4.VS Code 会在新窗口中打开并连接到容器",[103,31818,31819],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[24,31821,31823],{"className":25467,"code":31822,"language":25469,"meta":29,"style":29},"docker run -v 主机目录:容器目录 image-name\n",[31,31824,31825],{"__ignoreMap":29},[34,31826,31827,31829,31831,31834,31837],{"class":36,"line":37},[34,31828,28199],{"class":3617},[34,31830,28876],{"class":504},[34,31832,31833],{"class":44}," -v",[34,31835,31836],{"class":504}," 主机目录:容器目录",[34,31838,31839],{"class":504}," image-name\n",[24,31841,31843],{"className":25467,"code":31842,"language":25469,"meta":29,"style":29},"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",[31,31844,31845],{"__ignoreMap":29},[34,31846,31847,31849,31851,31854,31856,31859],{"class":36,"line":37},[34,31848,28199],{"class":3617},[34,31850,28876],{"class":504},[34,31852,31853],{"class":44}," -it",[34,31855,31833],{"class":44},[34,31857,31858],{"class":504}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[34,31860,31861],{"class":504}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[103,31863,31864],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[103,31866,31867],{},"查看挂载情况：",[24,31869,31871],{"className":25467,"code":31870,"language":25469,"meta":29,"style":29},"mount | grep -i project\n",[31,31872,31873],{"__ignoreMap":29},[34,31874,31875,31878,31880,31883,31885],{"class":36,"line":37},[34,31876,31877],{"class":3617},"mount",[34,31879,26755],{"class":55},[34,31881,31882],{"class":3617}," grep",[34,31884,28076],{"class":44},[34,31886,31887],{"class":504}," project\n",[103,31889,31890],{},"也可以通过ls来进行查看",[1711,31892,31893],{},"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":29,"searchDepth":165,"depth":165,"links":31895},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31752,"description":29},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31902,"title":31903,"body":31904,"description":1744,"extension":1745,"meta":31908,"navigation":1474,"path":31910,"seo":31911,"stem":31912,"__hash__":31913},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31905,"toc":31906},[],{"title":29,"searchDepth":165,"depth":165,"links":31907},[],{"category":31909},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31903,"description":1744},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31915,"title":31916,"body":31917,"description":1744,"extension":1745,"meta":31921,"navigation":1474,"path":31922,"seo":31923,"stem":31924,"__hash__":31925},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31918,"toc":31919},[],{"title":29,"searchDepth":165,"depth":165,"links":31920},[],{"category":31909},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31916,"description":1744},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31927,"title":31928,"body":31929,"description":1744,"extension":1745,"meta":32218,"navigation":1474,"path":32219,"seo":32220,"stem":32221,"__hash__":32222},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31930,"toc":32216},[31931,31934,31942,31957,31962,32013,32016,32022,32205,32210,32213],[10,31932,31928],{"id":31933},"_1验证深度学习环境",[103,31935,31936,31937],{},"关于环境的安装，看",[236,31938,31941],{"href":31939,"rel":31940},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25510],"Pytorch-->深度学习",[103,31943,31944,31945,31948,31949,31952,31953,31956],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[31,31946,31947],{},"pytorch-cuda=12.4"," 是一个“ ",[1165,31950,31951],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[1165,31954,31955],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[103,31958,31959],{},[109,31960],{"alt":29,"src":31961},"\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",[24,31963,31965],{"className":25467,"code":31964,"language":25469,"meta":29,"style":29},"# 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",[31,31966,31967,31972],{"__ignoreMap":29},[34,31968,31969],{"class":36,"line":37},[34,31970,31971],{"class":161},"# CUDA 12.4\n",[34,31973,31974,31977,31979,31982,31985,31988,31991,31994,31996,31999,32002,32005,32008,32010],{"class":36,"line":165},[34,31975,31976],{"class":3617},"conda",[34,31978,25479],{"class":504},[34,31980,31981],{"class":504}," pytorch==",[34,31983,31984],{"class":44},"2.5.1",[34,31986,31987],{"class":504}," torchvision==",[34,31989,31990],{"class":44},"0.20.1",[34,31992,31993],{"class":504}," torchaudio==",[34,31995,31984],{"class":44},[34,31997,31998],{"class":504}," pytorch-cuda=",[34,32000,32001],{"class":44},"12.4",[34,32003,32004],{"class":44}," -c",[34,32006,32007],{"class":504}," pytorch",[34,32009,32004],{"class":44},[34,32011,32012],{"class":504}," nvidia\n",[103,32014,32015],{},"）：",[103,32017,32018],{},[236,32019,32020],{"href":32020,"rel":32021},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25510],[24,32023,32025],{"className":26,"code":32024,"language":28,"meta":29,"style":29},"# 对深度学习环境进行测试\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",[31,32026,32027,32032,32040,32045,32055,32070,32075,32085,32122,32129,32140,32156,32161,32171,32183,32193],{"__ignoreMap":29},[34,32028,32029],{"class":36,"line":37},[34,32030,32031],{"class":161},"# 对深度学习环境进行测试\n",[34,32033,32034,32037],{"class":36,"line":165},[34,32035,32036],{"class":55},"import",[34,32038,32039],{"class":40}," torch\n",[34,32041,32042],{"class":36,"line":171},[34,32043,32044],{"class":161},"# 查看cuda是否被激活\n",[34,32046,32047,32050,32052],{"class":36,"line":182},[34,32048,32049],{"class":40},"flag",[34,32051,221],{"class":55},[34,32053,32054],{"class":40},"torch.cuda.is_available()\n",[34,32056,32057,32059,32061,32064,32067],{"class":36,"line":188},[34,32058,723],{"class":44},[34,32060,286],{"class":40},[34,32062,32063],{"class":504},"\"cuda:\"",[34,32065,32066],{"class":40},", flag)   ",[34,32068,32069],{"class":161},"#返回true的话说明被激活\n",[34,32071,32072],{"class":36,"line":518},[34,32073,32074],{"class":161},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[34,32076,32077,32080,32082],{"class":36,"line":524},[34,32078,32079],{"class":40},"ngpu",[34,32081,221],{"class":55},[34,32083,32084],{"class":44},"1\n",[34,32086,32087,32090,32092,32095,32098,32100,32103,32106,32109,32111,32113,32115,32117,32120],{"class":36,"line":530},[34,32088,32089],{"class":40},"device",[34,32091,221],{"class":55},[34,32093,32094],{"class":40},"torch.device(",[34,32096,32097],{"class":504},"\"cuda:0\"",[34,32099,3358],{"class":55},[34,32101,32102],{"class":40},"(torch.cuda.is_available() ",[34,32104,32105],{"class":55},"and",[34,32107,32108],{"class":40}," ngpu",[34,32110,2751],{"class":55},[34,32112,177],{"class":44},[34,32114,372],{"class":40},[34,32116,3355],{"class":55},[34,32118,32119],{"class":504}," \"cpu\"",[34,32121,101],{"class":40},[34,32123,32124,32126],{"class":36,"line":624},[34,32125,723],{"class":44},[34,32127,32128],{"class":40},"(device)\n",[34,32130,32131,32133,32136,32138],{"class":36,"line":630},[34,32132,723],{"class":44},[34,32134,32135],{"class":40},"(torch.cuda.get_device_name(",[34,32137,177],{"class":44},[34,32139,296],{"class":40},[34,32141,32142,32144,32147,32149,32151,32153],{"class":36,"line":636},[34,32143,723],{"class":44},[34,32145,32146],{"class":40},"(torch.rand(",[34,32148,337],{"class":44},[34,32150,291],{"class":40},[34,32152,337],{"class":44},[34,32154,32155],{"class":40},").cuda())\n",[34,32157,32158],{"class":36,"line":1513},[34,32159,32160],{"class":161},"# 查看cuda和cudnn的版本\n",[34,32162,32163,32166,32168],{"class":36,"line":1519},[34,32164,32165],{"class":40},"cuda_version",[34,32167,221],{"class":55},[34,32169,32170],{"class":40},"torch.version.cuda\n",[34,32172,32173,32175,32177,32180],{"class":36,"line":3283},[34,32174,723],{"class":44},[34,32176,286],{"class":40},[34,32178,32179],{"class":504},"\"cuda version\"",[34,32181,32182],{"class":40},",cuda_version)\n",[34,32184,32185,32188,32190],{"class":36,"line":3297},[34,32186,32187],{"class":40},"cudnn_version",[34,32189,221],{"class":55},[34,32191,32192],{"class":40},"torch.backends.cudnn.version()\n",[34,32194,32195,32197,32199,32202],{"class":36,"line":3302},[34,32196,723],{"class":44},[34,32198,286],{"class":40},[34,32200,32201],{"class":504},"\"cudnn version\"",[34,32203,32204],{"class":40},",cudnn_version)\n",[103,32206,32207],{},[109,32208],{"alt":29,"src":32209},"\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",[103,32211,32212],{},"cuda:0 指的是一块显卡",[1711,32214,32215],{},"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":29,"searchDepth":165,"depth":165,"links":32217},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31928,"description":1744},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32224,"title":32225,"body":32226,"description":1744,"extension":1745,"meta":52027,"navigation":1474,"path":52028,"seo":52029,"stem":52030,"__hash__":52031},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32227,"toc":52021},[32228,32231,32235,32239,32242,32247,32252,32255,32260,32265,32270,32273,32277,32282,32286,32291,32294,32299,32302,32305,32308,32311,32316,32319,32324,32329,32334,32339,32342,32346,32349,32354,32958,32963,32966,32971,32974,32977,33440,33443,33446,33449,33452,35503,35506,35511,35516,36311,36314,36319,37097,37101,38760,38764,39478,39482,39486,39491,39496,39501,39504,39509,39514,39519,39524,39529,39533,39538,40819,40824,40827,40830,40833,40988,40991,40994,42210,42215,42910,42914,42918,42923,42928,42931,42936,42941,42946,42951,42956,42961,42966,42971,42976,42981,42986,42991,42996,43001,43006,43011,43016,43021,43026,43031,43036,43041,43046,43051,43056,43061,43066,43071,43076,43081,43085,43089,43092,44569,44573,46220,46224,46918,46922,46925,46928,47472,47475,47479,47482,48879,48883,48886,49464,51251,51255,51258,52018],[10,32229,32225],{"id":32230},"_2经典神经网络",[19,32232,32234],{"id":32233},"_21lenet与alexnet","2.1.LeNet与AlexNet",[1353,32236,32238],{"id":32237},"_211原理介绍","2.1.1.原理介绍",[103,32240,32241],{},"LeNet-5",[1772,32243,32244],{},[1775,32245,32246],{},"原理",[103,32248,32249],{},[109,32250],{"alt":29,"src":32251},"\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",[103,32253,32254],{},"B是batch批次；C是channel通道",[1772,32256,32257],{"start":165},[1775,32258,32259],{},"网络参数详细",[103,32261,32262],{},[109,32263],{"alt":29,"src":32264},"\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",[103,32266,32267],{},[109,32268],{"alt":29,"src":32269},"\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",[103,32271,32272],{},"AlexNet",[1772,32274,32275],{},[1775,32276,32246],{},[103,32278,32279],{},[109,32280],{"alt":29,"src":32281},"\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",[1772,32283,32284],{"start":165},[1775,32285,32259],{},[103,32287,32288],{},[109,32289],{"alt":29,"src":32290},"\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",[103,32292,32293],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[103,32295,32296],{},[109,32297],{"alt":29,"src":32298},"\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",[103,32300,32301],{},"数据处理中的图像增强操作:",[103,32303,32304],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[103,32306,32307],{},"①增加数据量，保证训练数据充足；②防止过拟合",[103,32309,32310],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[103,32312,32313],{},[109,32314],{"alt":29,"src":32315},"\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",[103,32317,32318],{},"提升网络精确度的方法：LRN正则化",[103,32320,32321],{},[109,32322],{"alt":29,"src":32323},"\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",[103,32325,32326],{},[109,32327],{"alt":29,"src":32328},"\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",[1772,32330,32331],{"start":171},[1775,32332,32333],{},"AlexNet的总结",[103,32335,32336],{},[109,32337],{"alt":29,"src":32338},"\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",[103,32340,32341],{},"比LeNet模型要深一丢丢",[1353,32343,32345],{"id":32344},"_212代码实现","2.1.2.代码实现",[103,32347,32348],{},"（1）LeNet",[1772,32350,32351],{},[1775,32352,32353],{},"模型搭建",[24,32355,32357],{"className":26,"code":32356,"language":28,"meta":29,"style":29},"# 导入库\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",[31,32358,32359,32364,32370,32375,32388,32393,32405,32409,32429,32434,32439,32450,32455,32474,32478,32483,32532,32544,32549,32578,32613,32640,32645,32657,32662,32682,32701,32720,32724,32729,32739,32756,32767,32782,32793,32804,32819,32834,32845,32852,32856,32870,32875,32898,32903,32908,32913,32917,32922,32927,32937],{"__ignoreMap":29},[34,32360,32361],{"class":36,"line":37},[34,32362,32363],{"class":161},"# 导入库\n",[34,32365,32366,32368],{"class":36,"line":165},[34,32367,32036],{"class":55},[34,32369,32039],{"class":40},[34,32371,32372],{"class":36,"line":171},[34,32373,32374],{"class":161},"# 导入神经网络层\n",[34,32376,32377,32380,32383,32385],{"class":36,"line":182},[34,32378,32379],{"class":55},"from",[34,32381,32382],{"class":40}," torch ",[34,32384,32036],{"class":55},[34,32386,32387],{"class":40}," nn\n",[34,32389,32390],{"class":36,"line":188},[34,32391,32392],{"class":161},"# 导入展示神经网络参数的包\n",[34,32394,32395,32397,32400,32402],{"class":36,"line":518},[34,32396,32379],{"class":55},[34,32398,32399],{"class":40}," torchsummary ",[34,32401,32036],{"class":55},[34,32403,32404],{"class":40}," summary\n",[34,32406,32407],{"class":36,"line":524},[34,32408,1475],{"emptyLinePlaceholder":1474},[34,32410,32411,32413,32416,32418,32421,32423,32426],{"class":36,"line":530},[34,32412,16340],{"class":55},[34,32414,32415],{"class":3617}," LeNet",[34,32417,286],{"class":40},[34,32419,32420],{"class":3617},"nn",[34,32422,2353],{"class":40},[34,32424,32425],{"class":3617},"Module",[34,32427,32428],{"class":40},"):\n",[34,32430,32431],{"class":36,"line":624},[34,32432,32433],{"class":161},"    # 模型初始化:\n",[34,32435,32436],{"class":36,"line":630},[34,32437,32438],{"class":161},"    # 定义一些网络层和激活函数\n",[34,32440,32441,32444,32447],{"class":36,"line":636},[34,32442,32443],{"class":55},"    def",[34,32445,32446],{"class":44}," __init__",[34,32448,32449],{"class":40},"(self):\n",[34,32451,32452],{"class":36,"line":1513},[34,32453,32454],{"class":161},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[34,32456,32457,32460,32463,32466,32469,32472],{"class":36,"line":1519},[34,32458,32459],{"class":44},"        super",[34,32461,32462],{"class":40},"(LeNet,",[34,32464,32465],{"class":44},"self",[34,32467,32468],{"class":40},").",[34,32470,32471],{"class":44},"__init__",[34,32473,3630],{"class":40},[34,32475,32476],{"class":36,"line":3283},[34,32477,1475],{"emptyLinePlaceholder":1474},[34,32479,32480],{"class":36,"line":3297},[34,32481,32482],{"class":161},"        # 定义网络层\n",[34,32484,32485,32488,32491,32493,32496,32499,32501,32503,32505,32508,32510,32512,32514,32517,32519,32521,32523,32526,32528,32530],{"class":36,"line":3302},[34,32486,32487],{"class":44},"        self",[34,32489,32490],{"class":40},".c1",[34,32492,221],{"class":55},[34,32494,32495],{"class":40},"nn.Conv2d(",[34,32497,32498],{"class":51},"in_channels",[34,32500,221],{"class":55},[34,32502,394],{"class":44},[34,32504,291],{"class":40},[34,32506,32507],{"class":51},"out_channels",[34,32509,221],{"class":55},[34,32511,1115],{"class":44},[34,32513,291],{"class":40},[34,32515,32516],{"class":51},"kernel_size",[34,32518,221],{"class":55},[34,32520,224],{"class":44},[34,32522,291],{"class":40},[34,32524,32525],{"class":51},"padding",[34,32527,221],{"class":55},[34,32529,332],{"class":44},[34,32531,101],{"class":40},[34,32533,32534,32536,32539,32541],{"class":36,"line":3308},[34,32535,32487],{"class":44},[34,32537,32538],{"class":40},".sig",[34,32540,221],{"class":55},[34,32542,32543],{"class":40},"nn.Sigmoid()\n",[34,32545,32546],{"class":36,"line":3328},[34,32547,32548],{"class":161},"        # 定义池化\n",[34,32550,32551,32553,32556,32558,32561,32563,32565,32567,32569,32572,32574,32576],{"class":36,"line":3333},[34,32552,32487],{"class":44},[34,32554,32555],{"class":40},".s2",[34,32557,221],{"class":55},[34,32559,32560],{"class":40},"nn.AvgPool2d(",[34,32562,32516],{"class":51},[34,32564,221],{"class":55},[34,32566,332],{"class":44},[34,32568,291],{"class":40},[34,32570,32571],{"class":51},"stride",[34,32573,221],{"class":55},[34,32575,332],{"class":44},[34,32577,101],{"class":40},[34,32579,32580,32582,32585,32587,32589,32591,32593,32595,32597,32599,32601,32603,32605,32607,32609,32611],{"class":36,"line":3347},[34,32581,32487],{"class":44},[34,32583,32584],{"class":40},".c3",[34,32586,221],{"class":55},[34,32588,32495],{"class":40},[34,32590,32498],{"class":51},[34,32592,221],{"class":55},[34,32594,1115],{"class":44},[34,32596,291],{"class":40},[34,32598,32507],{"class":51},[34,32600,221],{"class":55},[34,32602,2396],{"class":44},[34,32604,291],{"class":40},[34,32606,32516],{"class":51},[34,32608,221],{"class":55},[34,32610,224],{"class":44},[34,32612,101],{"class":40},[34,32614,32615,32617,32620,32622,32624,32626,32628,32630,32632,32634,32636,32638],{"class":36,"line":3352},[34,32616,32487],{"class":44},[34,32618,32619],{"class":40},".s4",[34,32621,221],{"class":55},[34,32623,32560],{"class":40},[34,32625,32516],{"class":51},[34,32627,221],{"class":55},[34,32629,332],{"class":44},[34,32631,291],{"class":40},[34,32633,32571],{"class":51},[34,32635,221],{"class":55},[34,32637,332],{"class":44},[34,32639,101],{"class":40},[34,32641,32642],{"class":36,"line":3381},[34,32643,32644],{"class":161},"        # 定义平展层\n",[34,32646,32647,32649,32652,32654],{"class":36,"line":3386},[34,32648,32487],{"class":44},[34,32650,32651],{"class":40},".flatten",[34,32653,221],{"class":55},[34,32655,32656],{"class":40},"nn.Flatten()\n",[34,32658,32659],{"class":36,"line":3403},[34,32660,32661],{"class":161},"        # 定义全连接层\n",[34,32663,32664,32666,32669,32671,32674,32676,32678,32680],{"class":36,"line":3408},[34,32665,32487],{"class":44},[34,32667,32668],{"class":40},".f5",[34,32670,221],{"class":55},[34,32672,32673],{"class":40},"nn.Linear(",[34,32675,5640],{"class":44},[34,32677,291],{"class":40},[34,32679,2610],{"class":44},[34,32681,101],{"class":40},[34,32683,32684,32686,32689,32691,32693,32695,32697,32699],{"class":36,"line":3413},[34,32685,32487],{"class":44},[34,32687,32688],{"class":40},".f6",[34,32690,221],{"class":55},[34,32692,32673],{"class":40},[34,32694,2610],{"class":44},[34,32696,291],{"class":40},[34,32698,2505],{"class":44},[34,32700,101],{"class":40},[34,32702,32703,32705,32708,32710,32712,32714,32716,32718],{"class":36,"line":3418},[34,32704,32487],{"class":44},[34,32706,32707],{"class":40},".f7",[34,32709,221],{"class":55},[34,32711,32673],{"class":40},[34,32713,2505],{"class":44},[34,32715,291],{"class":40},[34,32717,410],{"class":44},[34,32719,101],{"class":40},[34,32721,32722],{"class":36,"line":3432},[34,32723,1475],{"emptyLinePlaceholder":1474},[34,32725,32726],{"class":36,"line":3437},[34,32727,32728],{"class":161},"    # 写工具->写前向传播\n",[34,32730,32731,32733,32736],{"class":36,"line":4230},[34,32732,32443],{"class":55},[34,32734,32735],{"class":3617}," forward",[34,32737,32738],{"class":40},"(self,x):\n",[34,32740,32741,32744,32746,32748,32751,32753],{"class":36,"line":4244},[34,32742,32743],{"class":40},"        x",[34,32745,221],{"class":55},[34,32747,32465],{"class":44},[34,32749,32750],{"class":40},".sig(",[34,32752,32465],{"class":44},[34,32754,32755],{"class":40},".c1(x))\n",[34,32757,32758,32760,32762,32764],{"class":36,"line":4252},[34,32759,32743],{"class":40},[34,32761,221],{"class":55},[34,32763,32465],{"class":44},[34,32765,32766],{"class":40},".s2(x)\n",[34,32768,32769,32771,32773,32775,32777,32779],{"class":36,"line":4257},[34,32770,32743],{"class":40},[34,32772,221],{"class":55},[34,32774,32465],{"class":44},[34,32776,32750],{"class":40},[34,32778,32465],{"class":44},[34,32780,32781],{"class":40},".c3(x))\n",[34,32783,32784,32786,32788,32790],{"class":36,"line":4263},[34,32785,32743],{"class":40},[34,32787,221],{"class":55},[34,32789,32465],{"class":44},[34,32791,32792],{"class":40},".s4(x)\n",[34,32794,32795,32797,32799,32801],{"class":36,"line":4269},[34,32796,32743],{"class":40},[34,32798,221],{"class":55},[34,32800,32465],{"class":44},[34,32802,32803],{"class":40},".flatten(x)\n",[34,32805,32806,32808,32810,32812,32814,32816],{"class":36,"line":4274},[34,32807,32743],{"class":40},[34,32809,221],{"class":55},[34,32811,32465],{"class":44},[34,32813,32750],{"class":40},[34,32815,32465],{"class":44},[34,32817,32818],{"class":40},".f5(x))\n",[34,32820,32821,32823,32825,32827,32829,32831],{"class":36,"line":9598},[34,32822,32743],{"class":40},[34,32824,221],{"class":55},[34,32826,32465],{"class":44},[34,32828,32750],{"class":40},[34,32830,32465],{"class":44},[34,32832,32833],{"class":40},".f6(x))\n",[34,32835,32836,32838,32840,32842],{"class":36,"line":9622},[34,32837,32743],{"class":40},[34,32839,221],{"class":55},[34,32841,32465],{"class":44},[34,32843,32844],{"class":40},".f7(x)\n",[34,32846,32847,32849],{"class":36,"line":9627},[34,32848,16398],{"class":55},[34,32850,32851],{"class":40}," x\n",[34,32853,32854],{"class":36,"line":9633},[34,32855,1475],{"emptyLinePlaceholder":1474},[34,32857,32858,32860,32863,32865,32868],{"class":36,"line":9660},[34,32859,3189],{"class":55},[34,32861,32862],{"class":44}," __name__",[34,32864,4602],{"class":55},[34,32866,32867],{"class":504},"\"__main__\"",[34,32869,5392],{"class":40},[34,32871,32872],{"class":36,"line":9665},[34,32873,32874],{"class":161},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[34,32876,32877,32880,32882,32884,32887,32889,32892,32894,32896],{"class":36,"line":9671},[34,32878,32879],{"class":40},"    device",[34,32881,221],{"class":55},[34,32883,32094],{"class":40},[34,32885,32886],{"class":504},"\"cuda\"",[34,32888,3358],{"class":55},[34,32890,32891],{"class":40}," torch.cuda.is_available() ",[34,32893,3355],{"class":55},[34,32895,32119],{"class":504},[34,32897,101],{"class":40},[34,32899,32900],{"class":36,"line":9683},[34,32901,32902],{"class":161},"    # 如果就是想指定用cpu用下方代码:\n",[34,32904,32905],{"class":36,"line":9695},[34,32906,32907],{"class":161},"    # device=\"cpu\"\n",[34,32909,32910],{"class":36,"line":9707},[34,32911,32912],{"class":161},"    # print(device)\n",[34,32914,32915],{"class":36,"line":11366},[34,32916,1475],{"emptyLinePlaceholder":1474},[34,32918,32919],{"class":36,"line":11391},[34,32920,32921],{"class":161},"    # 实例化模型\n",[34,32923,32924],{"class":36,"line":11414},[34,32925,32926],{"class":161},"    # 将模型放到设备中去运行\n",[34,32928,32929,32932,32934],{"class":36,"line":11438},[34,32930,32931],{"class":40},"    model",[34,32933,221],{"class":55},[34,32935,32936],{"class":40},"LeNet().to(device)\n",[34,32938,32939,32942,32945,32947,32949,32951,32953,32955],{"class":36,"line":11443},[34,32940,32941],{"class":44},"    print",[34,32943,32944],{"class":40},"(summary(model,(",[34,32946,394],{"class":44},[34,32948,291],{"class":40},[34,32950,2692],{"class":44},[34,32952,291],{"class":40},[34,32954,2692],{"class":44},[34,32956,32957],{"class":40},")))\n",[103,32959,32960],{},[109,32961],{"alt":29,"src":32962},"\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",[103,32964,32965],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[1772,32967,32968],{"start":165},[1775,32969,32970],{},"训练",[103,32972,32973],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[103,32975,32976],{},"在训练之前可以将数据展示看一下",[24,32978,32980],{"className":26,"code":32979,"language":28,"meta":29,"style":29},"# 建立画图的函数，用于展示数据\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",[31,32981,32982,32987,32992,33004,33016,33029,33034,33046,33051,33063,33068,33080,33084,33088,33109,33121,33126,33146,33157,33161,33166,33184,33195,33200,33211,33216,33227,33231,33236,33251,33264,33269,33274,33287,33300,33313,33318,33322,33327,33347,33364,33384,33397,33410,33420,33435],{"__ignoreMap":29},[34,32983,32984],{"class":36,"line":37},[34,32985,32986],{"class":161},"# 建立画图的函数，用于展示数据\n",[34,32988,32989],{"class":36,"line":165},[34,32990,32991],{"class":161},"# torchvision中包含很多内置的数据集\n",[34,32993,32994,32996,32999,33001],{"class":36,"line":171},[34,32995,32379],{"class":55},[34,32997,32998],{"class":40}," sklearn.externals.array_api_compat.torch ",[34,33000,32036],{"class":55},[34,33002,33003],{"class":40}," squeeze\n",[34,33005,33006,33008,33011,33013],{"class":36,"line":182},[34,33007,32379],{"class":55},[34,33009,33010],{"class":40}," torchvision.datasets ",[34,33012,32036],{"class":55},[34,33014,33015],{"class":40}," FashionMNIST\n",[34,33017,33018,33020,33023,33026],{"class":36,"line":188},[34,33019,32036],{"class":55},[34,33021,33022],{"class":40}," numpy ",[34,33024,33025],{"class":55},"as",[34,33027,33028],{"class":40}," np\n",[34,33030,33031],{"class":36,"line":518},[34,33032,33033],{"class":161},"# 引入处理数据集的包\n",[34,33035,33036,33038,33041,33043],{"class":36,"line":524},[34,33037,32379],{"class":55},[34,33039,33040],{"class":40}," torchvision ",[34,33042,32036],{"class":55},[34,33044,33045],{"class":40}," transforms\n",[34,33047,33048],{"class":36,"line":530},[34,33049,33050],{"class":161},"# 从torch库中引入数据处理的包\n",[34,33052,33053,33055,33058,33060],{"class":36,"line":624},[34,33054,32036],{"class":55},[34,33056,33057],{"class":40}," torch.utils.data ",[34,33059,33025],{"class":55},[34,33061,33062],{"class":40}," Data\n",[34,33064,33065],{"class":36,"line":630},[34,33066,33067],{"class":161},"# 导入画图的库\n",[34,33069,33070,33072,33075,33077],{"class":36,"line":636},[34,33071,32036],{"class":55},[34,33073,33074],{"class":40}," matplotlib.pyplot ",[34,33076,33025],{"class":55},[34,33078,33079],{"class":40}," plt\n",[34,33081,33082],{"class":36,"line":1513},[34,33083,1475],{"emptyLinePlaceholder":1474},[34,33085,33086],{"class":36,"line":1519},[34,33087,1475],{"emptyLinePlaceholder":1474},[34,33089,33090,33093,33095,33098,33101,33103,33106],{"class":36,"line":3283},[34,33091,33092],{"class":40},"train_data",[34,33094,221],{"class":55},[34,33096,33097],{"class":40},"FashionMNIST(",[34,33099,33100],{"class":51},"root",[34,33102,221],{"class":55},[34,33104,33105],{"class":504},"'.\u002Fdata'",[34,33107,33108],{"class":40},",\n",[34,33110,33111,33114,33116,33119],{"class":36,"line":3297},[34,33112,33113],{"class":51},"                        train",[34,33115,221],{"class":55},[34,33117,33118],{"class":44},"True",[34,33120,33108],{"class":40},[34,33122,33123],{"class":36,"line":3302},[34,33124,33125],{"class":161},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[34,33127,33128,33131,33133,33136,33138,33140,33143],{"class":36,"line":3308},[34,33129,33130],{"class":51},"                        transform",[34,33132,221],{"class":55},[34,33134,33135],{"class":40},"transforms.Compose([transforms.Resize(",[34,33137,218],{"class":51},[34,33139,221],{"class":55},[34,33141,33142],{"class":44},"224",[34,33144,33145],{"class":40},"),transforms.ToTensor()]),\n",[34,33147,33148,33151,33153,33155],{"class":36,"line":3328},[34,33149,33150],{"class":51},"                        download",[34,33152,221],{"class":55},[34,33154,33118],{"class":44},[34,33156,101],{"class":40},[34,33158,33159],{"class":36,"line":3333},[34,33160,1475],{"emptyLinePlaceholder":1474},[34,33162,33163],{"class":36,"line":3347},[34,33164,33165],{"class":161},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[34,33167,33168,33171,33173,33176,33179,33181],{"class":36,"line":3352},[34,33169,33170],{"class":40},"train_loader",[34,33172,221],{"class":55},[34,33174,33175],{"class":40},"Data.DataLoader(",[34,33177,33178],{"class":51},"dataset",[34,33180,221],{"class":55},[34,33182,33183],{"class":40},"train_data,\n",[34,33185,33186,33189,33191,33193],{"class":36,"line":3381},[34,33187,33188],{"class":51},"                             batch_size",[34,33190,221],{"class":55},[34,33192,2012],{"class":44},[34,33194,33108],{"class":40},[34,33196,33197],{"class":36,"line":3386},[34,33198,33199],{"class":161},"                             # 数据是否打乱\n",[34,33201,33202,33205,33207,33209],{"class":36,"line":3403},[34,33203,33204],{"class":51},"                             shuffle",[34,33206,221],{"class":55},[34,33208,33118],{"class":44},[34,33210,33108],{"class":40},[34,33212,33213],{"class":36,"line":3408},[34,33214,33215],{"class":161},"                             # 规定加载数据的进程\n",[34,33217,33218,33221,33223,33225],{"class":36,"line":3413},[34,33219,33220],{"class":51},"                             num_workers",[34,33222,221],{"class":55},[34,33224,177],{"class":44},[34,33226,101],{"class":40},[34,33228,33229],{"class":36,"line":3418},[34,33230,1475],{"emptyLinePlaceholder":1474},[34,33232,33233],{"class":36,"line":3432},[34,33234,33235],{"class":161},"# 获得一个batch的数据\n",[34,33237,33238,33240,33243,33245,33248],{"class":36,"line":3437},[34,33239,4678],{"class":55},[34,33241,33242],{"class":40}," step,(b_x,b_y) ",[34,33244,27689],{"class":55},[34,33246,33247],{"class":44}," enumerate",[34,33249,33250],{"class":40},"(train_loader):\n",[34,33252,33253,33255,33258,33260,33262],{"class":36,"line":4230},[34,33254,4754],{"class":55},[34,33256,33257],{"class":40}," step ",[34,33259,2751],{"class":55},[34,33261,98],{"class":44},[34,33263,5392],{"class":40},[34,33265,33266],{"class":36,"line":4244},[34,33267,33268],{"class":55},"        break\n",[34,33270,33271],{"class":36,"line":4252},[34,33272,33273],{"class":161},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[34,33275,33276,33279,33281,33284],{"class":36,"line":4257},[34,33277,33278],{"class":40},"batch_x",[34,33280,221],{"class":55},[34,33282,33283],{"class":40},"b_x.squeeze().numpy()  ",[34,33285,33286],{"class":161},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[34,33288,33289,33292,33294,33297],{"class":36,"line":4263},[34,33290,33291],{"class":40},"batch_y",[34,33293,221],{"class":55},[34,33295,33296],{"class":40},"b_y.numpy()   ",[34,33298,33299],{"class":161},"#将张量转换成功numpy数组\n",[34,33301,33302,33305,33307,33310],{"class":36,"line":4269},[34,33303,33304],{"class":40},"class_label",[34,33306,221],{"class":55},[34,33308,33309],{"class":40},"train_data.classes  ",[34,33311,33312],{"class":161},"#训练集标签\n",[34,33314,33315],{"class":36,"line":4274},[34,33316,33317],{"class":161},"# print(class_label)\n",[34,33319,33320],{"class":36,"line":9598},[34,33321,1475],{"emptyLinePlaceholder":1474},[34,33323,33324],{"class":36,"line":9622},[34,33325,33326],{"class":161},"# 可视化一个batch的图像\n",[34,33328,33329,33332,33335,33337,33339,33341,33343,33345],{"class":36,"line":9627},[34,33330,33331],{"class":40},"plt.figure(",[34,33333,33334],{"class":51},"figsize",[34,33336,221],{"class":55},[34,33338,286],{"class":40},[34,33340,2293],{"class":44},[34,33342,291],{"class":40},[34,33344,224],{"class":44},[34,33346,296],{"class":40},[34,33348,33349,33351,33354,33356,33359,33361],{"class":36,"line":9633},[34,33350,4678],{"class":55},[34,33352,33353],{"class":40}," ii ",[34,33355,27689],{"class":55},[34,33357,33358],{"class":40}," np.arange(",[34,33360,9008],{"class":44},[34,33362,33363],{"class":40},"(batch_y)):\n",[34,33365,33366,33369,33371,33373,33375,33378,33380,33382],{"class":36,"line":9660},[34,33367,33368],{"class":40},"    plt.subplot(",[34,33370,247],{"class":44},[34,33372,291],{"class":40},[34,33374,2396],{"class":44},[34,33376,33377],{"class":40},",ii ",[34,33379,2277],{"class":55},[34,33381,26764],{"class":44},[34,33383,101],{"class":40},[34,33385,33386,33389,33392,33394],{"class":36,"line":9665},[34,33387,33388],{"class":40},"    plt.imshow(batch_x[ii,:,:],",[34,33390,33391],{"class":51},"cmap",[34,33393,221],{"class":55},[34,33395,33396],{"class":40},"plt.cm.gray)\n",[34,33398,33399,33402,33404,33406,33408],{"class":36,"line":9671},[34,33400,33401],{"class":40},"    plt.title(class_label[batch_y[ii]],",[34,33403,218],{"class":51},[34,33405,221],{"class":55},[34,33407,410],{"class":44},[34,33409,101],{"class":40},[34,33411,33412,33415,33418],{"class":36,"line":9683},[34,33413,33414],{"class":40},"    plt.axis(",[34,33416,33417],{"class":504},"\"off\"",[34,33419,101],{"class":40},[34,33421,33422,33425,33428,33430,33433],{"class":36,"line":9695},[34,33423,33424],{"class":40},"    plt.subplots_adjust(",[34,33426,33427],{"class":51},"wspace",[34,33429,221],{"class":55},[34,33431,33432],{"class":44},"0.05",[34,33434,101],{"class":40},[34,33436,33437],{"class":36,"line":9707},[34,33438,33439],{"class":40},"plt.show()\n",[103,33441,33442],{},"用matplotlib进行展示的过程可以后续再补",[103,33444,33445],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[103,33447,33448],{},"训练次数就是按照批次过整个训练集数据的次数",[103,33450,33451],{},"模型训练：",[24,33453,33455],{"className":26,"code":33454,"language":28,"meta":29,"style":29},"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",[31,33456,33457,33464,33471,33475,33487,33493,33504,33514,33524,33534,33544,33549,33561,33571,33575,33579,33584,33595,33608,33619,33636,33647,33686,33702,33714,33725,33730,33741,33757,33768,33779,33790,33797,33801,33806,33811,33815,33820,33830,33851,33855,33859,33864,33869,33874,33894,33898,33903,33913,33917,33922,33931,33936,33941,33946,33956,33960,33964,33969,33974,33984,33989,33999,34004,34013,34018,34027,34032,34041,34045,34050,34060,34064,34068,34073,34088,34116,34131,34135,34140,34145,34154,34159,34168,34173,34182,34187,34196,34201,34210,34215,34224,34229,34242,34247,34257,34262,34272,34278,34284,34290,34296,34307,34313,34333,34339,34350,34356,34362,34368,34374,34380,34386,34392,34412,34418,34434,34440,34454,34460,34475,34481,34490,34496,34505,34511,34517,34526,34532,34543,34549,34568,34574,34585,34591,34611,34627,34633,34647,34653,34659,34670,34676,34682,34692,34698,34709,34715,34725,34730,34736,34785,34832,34837,34843,34862,34868,34888,34894,34900,34910,34915,34921,34937,34982,34988,34994,35000,35011,35017,35023,35029,35047,35061,35070,35079,35088,35097,35103,35109,35117,35122,35128,35139,35145,35165,35171,35177,35183,35200,35206,35212,35218,35224,35230,35257,35281,35287,35293,35299,35310,35321,35327,35344,35367,35390,35396,35401,35410,35420,35426,35431,35437,35450,35456,35467,35478,35497],{"__ignoreMap":29},[34,33458,33459,33461],{"class":36,"line":37},[34,33460,32036],{"class":55},[34,33462,33463],{"class":40}," copy\n",[34,33465,33466,33468],{"class":36,"line":165},[34,33467,32036],{"class":55},[34,33469,33470],{"class":40}," time\n",[34,33472,33473],{"class":36,"line":171},[34,33474,1475],{"emptyLinePlaceholder":1474},[34,33476,33477,33479,33482,33484],{"class":36,"line":182},[34,33478,32036],{"class":55},[34,33480,33481],{"class":40}," pandas ",[34,33483,33025],{"class":55},[34,33485,33486],{"class":40}," pd\n",[34,33488,33489,33491],{"class":36,"line":188},[34,33490,32036],{"class":55},[34,33492,32039],{"class":40},[34,33494,33495,33497,33499,33501],{"class":36,"line":518},[34,33496,32379],{"class":55},[34,33498,33057],{"class":40},[34,33500,32036],{"class":55},[34,33502,33503],{"class":40}," Dataset\n",[34,33505,33506,33508,33510,33512],{"class":36,"line":524},[34,33507,32379],{"class":55},[34,33509,33010],{"class":40},[34,33511,32036],{"class":55},[34,33513,33015],{"class":40},[34,33515,33516,33518,33520,33522],{"class":36,"line":530},[34,33517,32379],{"class":55},[34,33519,33040],{"class":40},[34,33521,32036],{"class":55},[34,33523,33045],{"class":40},[34,33525,33526,33528,33530,33532],{"class":36,"line":624},[34,33527,32036],{"class":55},[34,33529,33057],{"class":40},[34,33531,33025],{"class":55},[34,33533,33062],{"class":40},[34,33535,33536,33538,33540,33542],{"class":36,"line":630},[34,33537,32036],{"class":55},[34,33539,33074],{"class":40},[34,33541,33025],{"class":55},[34,33543,33079],{"class":40},[34,33545,33546],{"class":36,"line":636},[34,33547,33548],{"class":161},"# 导入模型\n",[34,33550,33551,33553,33556,33558],{"class":36,"line":1513},[34,33552,32379],{"class":55},[34,33554,33555],{"class":40}," model ",[34,33557,32036],{"class":55},[34,33559,33560],{"class":40}," LeNet\n",[34,33562,33563,33565,33567,33569],{"class":36,"line":1519},[34,33564,32379],{"class":55},[34,33566,32382],{"class":40},[34,33568,32036],{"class":55},[34,33570,32387],{"class":40},[34,33572,33573],{"class":36,"line":3283},[34,33574,1475],{"emptyLinePlaceholder":1474},[34,33576,33577],{"class":36,"line":3297},[34,33578,1475],{"emptyLinePlaceholder":1474},[34,33580,33581],{"class":36,"line":3302},[34,33582,33583],{"class":161},"# 处理训练集与验证集函数--->划分数据集\n",[34,33585,33586,33589,33592],{"class":36,"line":3308},[34,33587,33588],{"class":55},"def",[34,33590,33591],{"class":3617}," train_val_data_process",[34,33593,33594],{"class":40},"():\n",[34,33596,33597,33600,33602,33604,33606],{"class":36,"line":3328},[34,33598,33599],{"class":40},"    train_data",[34,33601,221],{"class":55},[34,33603,33097],{"class":40},[34,33605,33105],{"class":504},[34,33607,33108],{"class":40},[34,33609,33610,33613,33615,33617],{"class":36,"line":3333},[34,33611,33612],{"class":51},"                            train",[34,33614,221],{"class":55},[34,33616,33118],{"class":44},[34,33618,33108],{"class":40},[34,33620,33621,33624,33626,33628,33630,33632,33634],{"class":36,"line":3347},[34,33622,33623],{"class":51},"                            transform",[34,33625,221],{"class":55},[34,33627,33135],{"class":40},[34,33629,218],{"class":51},[34,33631,221],{"class":55},[34,33633,2692],{"class":44},[34,33635,33145],{"class":40},[34,33637,33638,33641,33643,33645],{"class":36,"line":3352},[34,33639,33640],{"class":51},"                            download",[34,33642,221],{"class":55},[34,33644,33118],{"class":44},[34,33646,101],{"class":40},[34,33648,33649,33652,33654,33657,33660,33662,33665,33667,33669,33672,33674,33676,33679,33681,33683],{"class":36,"line":3381},[34,33650,33651],{"class":40},"    train_data,val_data",[34,33653,221],{"class":55},[34,33655,33656],{"class":40},"Data.random_split(train_data,[",[34,33658,33659],{"class":44},"round",[34,33661,286],{"class":40},[34,33663,33664],{"class":44},"0.8",[34,33666,2252],{"class":55},[34,33668,9008],{"class":44},[34,33670,33671],{"class":40},"(train_data)),",[34,33673,33659],{"class":44},[34,33675,286],{"class":40},[34,33677,33678],{"class":44},"0.2",[34,33680,2252],{"class":55},[34,33682,9008],{"class":44},[34,33684,33685],{"class":40},"(train_data))])\n",[34,33687,33688,33691,33693,33696,33698,33700],{"class":36,"line":3386},[34,33689,33690],{"class":40},"    train_dataloader ",[34,33692,221],{"class":55},[34,33694,33695],{"class":40}," Data.DataLoader(",[34,33697,33178],{"class":51},[34,33699,221],{"class":55},[34,33701,33183],{"class":40},[34,33703,33704,33707,33709,33712],{"class":36,"line":3403},[34,33705,33706],{"class":51},"                                       batch_size",[34,33708,221],{"class":55},[34,33710,33711],{"class":44},"128",[34,33713,33108],{"class":40},[34,33715,33716,33719,33721,33723],{"class":36,"line":3408},[34,33717,33718],{"class":51},"                                       shuffle",[34,33720,221],{"class":55},[34,33722,33118],{"class":44},[34,33724,33108],{"class":40},[34,33726,33727],{"class":36,"line":3413},[34,33728,33729],{"class":161},"                                       # 规定8个进程\n",[34,33731,33732,33735,33737,33739],{"class":36,"line":3418},[34,33733,33734],{"class":51},"                                       num_workers",[34,33736,221],{"class":55},[34,33738,2195],{"class":44},[34,33740,101],{"class":40},[34,33742,33743,33746,33748,33750,33752,33754],{"class":36,"line":3432},[34,33744,33745],{"class":40},"    val_dataloader",[34,33747,221],{"class":55},[34,33749,33175],{"class":40},[34,33751,33178],{"class":51},[34,33753,221],{"class":55},[34,33755,33756],{"class":40},"val_data,\n",[34,33758,33759,33762,33764,33766],{"class":36,"line":3437},[34,33760,33761],{"class":51},"                                   batch_size",[34,33763,221],{"class":55},[34,33765,33711],{"class":44},[34,33767,33108],{"class":40},[34,33769,33770,33773,33775,33777],{"class":36,"line":4230},[34,33771,33772],{"class":51},"                                   shuffle",[34,33774,221],{"class":55},[34,33776,33118],{"class":44},[34,33778,33108],{"class":40},[34,33780,33781,33784,33786,33788],{"class":36,"line":4244},[34,33782,33783],{"class":51},"                                   num_workers",[34,33785,221],{"class":55},[34,33787,2195],{"class":44},[34,33789,101],{"class":40},[34,33791,33792,33794],{"class":36,"line":4252},[34,33793,5743],{"class":55},[34,33795,33796],{"class":40}," train_dataloader,val_dataloader\n",[34,33798,33799],{"class":36,"line":4257},[34,33800,1475],{"emptyLinePlaceholder":1474},[34,33802,33803],{"class":36,"line":4263},[34,33804,33805],{"class":161},"# 验证是否出错\n",[34,33807,33808],{"class":36,"line":4269},[34,33809,33810],{"class":161},"# train_val_data_process()\n",[34,33812,33813],{"class":36,"line":4274},[34,33814,1475],{"emptyLinePlaceholder":1474},[34,33816,33817],{"class":36,"line":9598},[34,33818,33819],{"class":161},"# 定义模型训练函数\n",[34,33821,33822,33824,33827],{"class":36,"line":9622},[34,33823,33588],{"class":55},[34,33825,33826],{"class":3617}," train_model_process",[34,33828,33829],{"class":40},"(model,train_dataloader,val_dataloader,num_epochs):\n",[34,33831,33832,33834,33836,33838,33840,33842,33844,33846,33849],{"class":36,"line":9627},[34,33833,32879],{"class":40},[34,33835,221],{"class":55},[34,33837,32094],{"class":40},[34,33839,32886],{"class":504},[34,33841,3358],{"class":55},[34,33843,32891],{"class":40},[34,33845,3355],{"class":55},[34,33847,33848],{"class":504}," 'cpu'",[34,33850,101],{"class":40},[34,33852,33853],{"class":36,"line":9633},[34,33854,1475],{"emptyLinePlaceholder":1474},[34,33856,33857],{"class":36,"line":9660},[34,33858,1475],{"emptyLinePlaceholder":1474},[34,33860,33861],{"class":36,"line":9665},[34,33862,33863],{"class":161},"    # 定义优化器\n",[34,33865,33866],{"class":36,"line":9671},[34,33867,33868],{"class":161},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[34,33870,33871],{"class":36,"line":9683},[34,33872,33873],{"class":161},"    # lr为学习率\n",[34,33875,33876,33879,33881,33884,33887,33889,33892],{"class":36,"line":9695},[34,33877,33878],{"class":40},"    optimizer",[34,33880,221],{"class":55},[34,33882,33883],{"class":40},"torch.optim.Adam(model.parameters(),",[34,33885,33886],{"class":51},"lr",[34,33888,221],{"class":55},[34,33890,33891],{"class":44},"0.001",[34,33893,101],{"class":40},[34,33895,33896],{"class":36,"line":9707},[34,33897,1475],{"emptyLinePlaceholder":1474},[34,33899,33900],{"class":36,"line":11366},[34,33901,33902],{"class":161},"    # 定义损失函数使用交叉熵损失函数\n",[34,33904,33905,33908,33910],{"class":36,"line":11391},[34,33906,33907],{"class":40},"    criterion",[34,33909,221],{"class":55},[34,33911,33912],{"class":40},"nn.CrossEntropyLoss()\n",[34,33914,33915],{"class":36,"line":11414},[34,33916,1475],{"emptyLinePlaceholder":1474},[34,33918,33919],{"class":36,"line":11438},[34,33920,33921],{"class":161},"    # 将模型放到GPU中进行训练\n",[34,33923,33924,33926,33928],{"class":36,"line":11443},[34,33925,32931],{"class":40},[34,33927,221],{"class":55},[34,33929,33930],{"class":40},"model.to(device)\n",[34,33932,33933],{"class":36,"line":11448},[34,33934,33935],{"class":161},"    # 复制当前模型的参数\n",[34,33937,33938],{"class":36,"line":11453},[34,33939,33940],{"class":161},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[34,33942,33943],{"class":36,"line":11462},[34,33944,33945],{"class":161},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[34,33947,33948,33951,33953],{"class":36,"line":11467},[34,33949,33950],{"class":40},"    best_model_wts",[34,33952,221],{"class":55},[34,33954,33955],{"class":40},"copy.deepcopy(model.state_dict())\n",[34,33957,33958],{"class":36,"line":11473},[34,33959,1475],{"emptyLinePlaceholder":1474},[34,33961,33962],{"class":36,"line":11494},[34,33963,1475],{"emptyLinePlaceholder":1474},[34,33965,33966],{"class":36,"line":11500},[34,33967,33968],{"class":161},"    # 初始化参数\n",[34,33970,33971],{"class":36,"line":11514},[34,33972,33973],{"class":161},"    # 最高准确度\n",[34,33975,33976,33979,33981],{"class":36,"line":11520},[34,33977,33978],{"class":40},"    best_acc",[34,33980,221],{"class":55},[34,33982,33983],{"class":44},"0.0\n",[34,33985,33986],{"class":36,"line":11547},[34,33987,33988],{"class":161},"    # 训练集损失列表\n",[34,33990,33991,33994,33996],{"class":36,"line":11556},[34,33992,33993],{"class":40},"    train_loss_all",[34,33995,221],{"class":55},[34,33997,33998],{"class":40},"[]\n",[34,34000,34001],{"class":36,"line":11562},[34,34002,34003],{"class":161},"    # 验证集函数列表\n",[34,34005,34006,34009,34011],{"class":36,"line":11570},[34,34007,34008],{"class":40},"    val_loss_all",[34,34010,221],{"class":55},[34,34012,33998],{"class":40},[34,34014,34015],{"class":36,"line":11575},[34,34016,34017],{"class":161},"    # 训练集准确度列表\n",[34,34019,34020,34023,34025],{"class":36,"line":18250},[34,34021,34022],{"class":40},"    train_acc_all",[34,34024,221],{"class":55},[34,34026,33998],{"class":40},[34,34028,34029],{"class":36,"line":18256},[34,34030,34031],{"class":161},"    # 验证集准确度列表\n",[34,34033,34034,34037,34039],{"class":36,"line":18279},[34,34035,34036],{"class":40},"    val_acc_all",[34,34038,221],{"class":55},[34,34040,33998],{"class":40},[34,34042,34043],{"class":36,"line":18285},[34,34044,1475],{"emptyLinePlaceholder":1474},[34,34046,34047],{"class":36,"line":18308},[34,34048,34049],{"class":161},"    # 保存当前时间--->方便看每轮训练的时间\n",[34,34051,34052,34055,34057],{"class":36,"line":18322},[34,34053,34054],{"class":40},"    since",[34,34056,221],{"class":55},[34,34058,34059],{"class":40},"time.time()\n",[34,34061,34062],{"class":36,"line":18342},[34,34063,1475],{"emptyLinePlaceholder":1474},[34,34065,34066],{"class":36,"line":18348},[34,34067,1475],{"emptyLinePlaceholder":1474},[34,34069,34070],{"class":36,"line":18359},[34,34071,34072],{"class":161},"    # 准备工作完成--->开始训练模型\n",[34,34074,34075,34077,34080,34082,34085],{"class":36,"line":18382},[34,34076,4854],{"class":55},[34,34078,34079],{"class":40}," epoch ",[34,34081,27689],{"class":55},[34,34083,34084],{"class":44}," range",[34,34086,34087],{"class":40},"(num_epochs):\n",[34,34089,34090,34093,34095,34098,34101,34103,34105,34107,34110,34112,34114],{"class":36,"line":18404},[34,34091,34092],{"class":44},"        print",[34,34094,286],{"class":40},[34,34096,34097],{"class":504},"\"Epoch ",[34,34099,34100],{"class":44},"{}",[34,34102,2379],{"class":504},[34,34104,34100],{"class":44},[34,34106,2058],{"class":504},[34,34108,34109],{"class":40},".format(epoch,num_epochs",[34,34111,2327],{"class":55},[34,34113,394],{"class":44},[34,34115,296],{"class":40},[34,34117,34118,34120,34122,34125,34127,34129],{"class":36,"line":18409},[34,34119,34092],{"class":44},[34,34121,286],{"class":40},[34,34123,34124],{"class":504},"\"-\"",[34,34126,2252],{"class":55},[34,34128,410],{"class":44},[34,34130,101],{"class":40},[34,34132,34133],{"class":36,"line":18415},[34,34134,1475],{"emptyLinePlaceholder":1474},[34,34136,34137],{"class":36,"line":18429},[34,34138,34139],{"class":161},"        # 初始化参数\n",[34,34141,34142],{"class":36,"line":18442},[34,34143,34144],{"class":161},"        # 训练集损失函数\n",[34,34146,34147,34150,34152],{"class":36,"line":18447},[34,34148,34149],{"class":40},"        train_loss",[34,34151,221],{"class":55},[34,34153,33983],{"class":44},[34,34155,34156],{"class":36,"line":18461},[34,34157,34158],{"class":161},"        # 训练集准确度\n",[34,34160,34161,34164,34166],{"class":36,"line":18466},[34,34162,34163],{"class":40},"        train_corrects",[34,34165,221],{"class":55},[34,34167,4738],{"class":44},[34,34169,34170],{"class":36,"line":18472},[34,34171,34172],{"class":161},"        # 验证集损失函数\n",[34,34174,34175,34178,34180],{"class":36,"line":18477},[34,34176,34177],{"class":40},"        val_loss",[34,34179,221],{"class":55},[34,34181,33983],{"class":44},[34,34183,34184],{"class":36,"line":18491},[34,34185,34186],{"class":161},"        # 验证集准确度\n",[34,34188,34189,34192,34194],{"class":36,"line":18496},[34,34190,34191],{"class":40},"        val_corrects",[34,34193,221],{"class":55},[34,34195,4738],{"class":44},[34,34197,34198],{"class":36,"line":18501},[34,34199,34200],{"class":161},"        # 训练集样本数量\n",[34,34202,34203,34206,34208],{"class":36,"line":18515},[34,34204,34205],{"class":40},"        train_num",[34,34207,221],{"class":55},[34,34209,4738],{"class":44},[34,34211,34212],{"class":36,"line":18527},[34,34213,34214],{"class":161},"        # 验证集样本数量\n",[34,34216,34217,34220,34222],{"class":36,"line":18532},[34,34218,34219],{"class":40},"        val_num",[34,34221,221],{"class":55},[34,34223,4738],{"class":44},[34,34225,34226],{"class":36,"line":18545},[34,34227,34228],{"class":161},"        # 将数据放到设备,并开始训练\n",[34,34230,34231,34233,34235,34237,34239],{"class":36,"line":18550},[34,34232,5056],{"class":55},[34,34234,33242],{"class":40},[34,34236,27689],{"class":55},[34,34238,33247],{"class":44},[34,34240,34241],{"class":40},"(train_dataloader):\n",[34,34243,34244],{"class":36,"line":18555},[34,34245,34246],{"class":161},"            # 将特征放入到训练设备\n",[34,34248,34249,34252,34254],{"class":36,"line":18560},[34,34250,34251],{"class":40},"            b_x",[34,34253,221],{"class":55},[34,34255,34256],{"class":40},"b_x.to(device)\n",[34,34258,34259],{"class":36,"line":18573},[34,34260,34261],{"class":161},"            # 将标签放入到训练设备当中\n",[34,34263,34264,34267,34269],{"class":36,"line":18578},[34,34265,34266],{"class":40},"            b_y",[34,34268,221],{"class":55},[34,34270,34271],{"class":40},"b_y.to(device)\n",[34,34273,34275],{"class":36,"line":34274},98,[34,34276,34277],{"class":161},"            # 设置模型为训练模式\n",[34,34279,34281],{"class":36,"line":34280},99,[34,34282,34283],{"class":40},"            model.train()\n",[34,34285,34287],{"class":36,"line":34286},100,[34,34288,34289],{"class":161},"            # 将数据放到模型当中,开始前向传播\n",[34,34291,34293],{"class":36,"line":34292},101,[34,34294,34295],{"class":161},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[34,34297,34299,34302,34304],{"class":36,"line":34298},102,[34,34300,34301],{"class":40},"            output",[34,34303,221],{"class":55},[34,34305,34306],{"class":40},"model(b_x)\n",[34,34308,34310],{"class":36,"line":34309},103,[34,34311,34312],{"class":161},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[34,34314,34316,34319,34321,34324,34327,34329,34331],{"class":36,"line":34315},104,[34,34317,34318],{"class":40},"            pre_lab",[34,34320,221],{"class":55},[34,34322,34323],{"class":40},"torch.argmax(output,",[34,34325,34326],{"class":51},"dim",[34,34328,221],{"class":55},[34,34330,394],{"class":44},[34,34332,101],{"class":40},[34,34334,34336],{"class":36,"line":34335},105,[34,34337,34338],{"class":161},"            # 计算每一个batch的损失函数\n",[34,34340,34342,34345,34347],{"class":36,"line":34341},106,[34,34343,34344],{"class":40},"            loss",[34,34346,221],{"class":55},[34,34348,34349],{"class":40},"criterion(output,b_y)\n",[34,34351,34353],{"class":36,"line":34352},107,[34,34354,34355],{"class":161},"            # 将梯度初始化为0\n",[34,34357,34359],{"class":36,"line":34358},108,[34,34360,34361],{"class":40},"            optimizer.zero_grad()\n",[34,34363,34365],{"class":36,"line":34364},109,[34,34366,34367],{"class":161},"            # 梯度置为0后再进行反向传播\n",[34,34369,34371],{"class":36,"line":34370},110,[34,34372,34373],{"class":40},"            loss.backward()\n",[34,34375,34377],{"class":36,"line":34376},111,[34,34378,34379],{"class":161},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[34,34381,34383],{"class":36,"line":34382},112,[34,34384,34385],{"class":40},"            optimizer.step()\n",[34,34387,34389],{"class":36,"line":34388},113,[34,34390,34391],{"class":161},"            # loss.item()指的是batch的平均损失\n",[34,34393,34395,34398,34400,34403,34405,34408,34410],{"class":36,"line":34394},114,[34,34396,34397],{"class":40},"            train_loss",[34,34399,11127],{"class":55},[34,34401,34402],{"class":40},"loss.item()",[34,34404,2252],{"class":55},[34,34406,34407],{"class":40},"b_x.size(",[34,34409,177],{"class":44},[34,34411,101],{"class":40},[34,34413,34415],{"class":36,"line":34414},115,[34,34416,34417],{"class":161},"            # 计算每个批次中正确预测的数量\n",[34,34419,34421,34424,34426,34429,34431],{"class":36,"line":34420},116,[34,34422,34423],{"class":40},"            train_corrects",[34,34425,11127],{"class":55},[34,34427,34428],{"class":40},"torch.sum(pre_lab",[34,34430,4602],{"class":55},[34,34432,34433],{"class":40},"b_y.data)\n",[34,34435,34437],{"class":36,"line":34436},117,[34,34438,34439],{"class":161},"            # 计算目前为止一共处理了多少样本\n",[34,34441,34443,34446,34448,34450,34452],{"class":36,"line":34442},118,[34,34444,34445],{"class":40},"            train_num",[34,34447,11127],{"class":55},[34,34449,34407],{"class":40},[34,34451,177],{"class":44},[34,34453,101],{"class":40},[34,34455,34457],{"class":36,"line":34456},119,[34,34458,34459],{"class":161},"        # 验证数据\n",[34,34461,34463,34465,34468,34470,34472],{"class":36,"line":34462},120,[34,34464,5056],{"class":55},[34,34466,34467],{"class":40}," step ,(b_x,b_y) ",[34,34469,27689],{"class":55},[34,34471,33247],{"class":44},[34,34473,34474],{"class":40},"(val_dataloader):\n",[34,34476,34478],{"class":36,"line":34477},121,[34,34479,34480],{"class":161},"            # 将特征放到验证设备当中\n",[34,34482,34484,34486,34488],{"class":36,"line":34483},122,[34,34485,34251],{"class":40},[34,34487,221],{"class":55},[34,34489,34256],{"class":40},[34,34491,34493],{"class":36,"line":34492},123,[34,34494,34495],{"class":161},"            # 将标签放到放到训练设备当中\n",[34,34497,34499,34501,34503],{"class":36,"line":34498},124,[34,34500,34266],{"class":40},[34,34502,221],{"class":55},[34,34504,34271],{"class":40},[34,34506,34508],{"class":36,"line":34507},125,[34,34509,34510],{"class":161},"            # 开启验证模式，设置模型为评估模式\n",[34,34512,34514],{"class":36,"line":34513},126,[34,34515,34516],{"class":40},"            model.eval()\n",[34,34518,34520,34523],{"class":36,"line":34519},127,[34,34521,34522],{"class":55},"            with",[34,34524,34525],{"class":40}," torch.no_grad():\n",[34,34527,34529],{"class":36,"line":34528},128,[34,34530,34531],{"class":161},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[34,34533,34535,34538,34540],{"class":36,"line":34534},129,[34,34536,34537],{"class":40},"                output ",[34,34539,221],{"class":55},[34,34541,34542],{"class":40}," model(b_x)\n",[34,34544,34546],{"class":36,"line":34545},130,[34,34547,34548],{"class":161},"                # 查找每一行中最大值对应的下标\n",[34,34550,34552,34555,34557,34560,34562,34564,34566],{"class":36,"line":34551},131,[34,34553,34554],{"class":40},"                pre_lab ",[34,34556,221],{"class":55},[34,34558,34559],{"class":40}," torch.argmax(output, ",[34,34561,34326],{"class":51},[34,34563,221],{"class":55},[34,34565,394],{"class":44},[34,34567,101],{"class":40},[34,34569,34571],{"class":36,"line":34570},132,[34,34572,34573],{"class":161},"                # 计算验证集上的当前 batch 损失\n",[34,34575,34577,34580,34582],{"class":36,"line":34576},133,[34,34578,34579],{"class":40},"                val_batch_loss ",[34,34581,221],{"class":55},[34,34583,34584],{"class":40}," criterion(output, b_y)\n",[34,34586,34588],{"class":36,"line":34587},134,[34,34589,34590],{"class":161},"                # 对损失函数进行累加（按样本数加权）\n",[34,34592,34594,34597,34599,34602,34604,34607,34609],{"class":36,"line":34593},135,[34,34595,34596],{"class":40},"                val_loss ",[34,34598,11127],{"class":55},[34,34600,34601],{"class":40}," val_batch_loss.item() ",[34,34603,2252],{"class":55},[34,34605,34606],{"class":40}," b_x.size(",[34,34608,177],{"class":44},[34,34610,101],{"class":40},[34,34612,34614,34617,34619,34622,34624],{"class":36,"line":34613},136,[34,34615,34616],{"class":40},"                val_corrects ",[34,34618,11127],{"class":55},[34,34620,34621],{"class":40}," torch.sum(pre_lab ",[34,34623,4602],{"class":55},[34,34625,34626],{"class":40}," b_y.data)\n",[34,34628,34630],{"class":36,"line":34629},137,[34,34631,34632],{"class":161},"                # 当前用于验证的样本数量\n",[34,34634,34636,34639,34641,34643,34645],{"class":36,"line":34635},138,[34,34637,34638],{"class":40},"            val_num ",[34,34640,11127],{"class":55},[34,34642,34606],{"class":40},[34,34644,177],{"class":44},[34,34646,101],{"class":40},[34,34648,34650],{"class":36,"line":34649},139,[34,34651,34652],{"class":161},"        # 计算并保存每一次迭代的loss值和准确率\n",[34,34654,34656],{"class":36,"line":34655},140,[34,34657,34658],{"class":161},"        # 计算并保存训练集的loss值\n",[34,34660,34662,34665,34667],{"class":36,"line":34661},141,[34,34663,34664],{"class":40},"        train_loss_all.append(train_loss",[34,34666,2379],{"class":55},[34,34668,34669],{"class":40},"train_num)\n",[34,34671,34673],{"class":36,"line":34672},142,[34,34674,34675],{"class":161},"        # 取双精度\n",[34,34677,34679],{"class":36,"line":34678},143,[34,34680,34681],{"class":161},"        # 计算并保存训练集的准确率\n",[34,34683,34685,34688,34690],{"class":36,"line":34684},144,[34,34686,34687],{"class":40},"        train_acc_all.append(train_corrects.double().item()",[34,34689,2379],{"class":55},[34,34691,34669],{"class":40},[34,34693,34695],{"class":36,"line":34694},145,[34,34696,34697],{"class":161},"        # 计算并保存验证集的loss值\n",[34,34699,34701,34704,34706],{"class":36,"line":34700},146,[34,34702,34703],{"class":40},"        val_loss_all.append(val_loss",[34,34705,2379],{"class":55},[34,34707,34708],{"class":40},"val_num)\n",[34,34710,34712],{"class":36,"line":34711},147,[34,34713,34714],{"class":161},"        # 计算并保存验证集的准确率\n",[34,34716,34718,34721,34723],{"class":36,"line":34717},148,[34,34719,34720],{"class":40},"        val_acc_all.append(val_corrects.double().item()",[34,34722,2379],{"class":55},[34,34724,34708],{"class":40},[34,34726,34728],{"class":36,"line":34727},149,[34,34729,1475],{"emptyLinePlaceholder":1474},[34,34731,34733],{"class":36,"line":34732},150,[34,34734,34735],{"class":161},"        # 打印训练一轮的loss值和准确率\n",[34,34737,34739,34741,34743,34745,34747,34750,34752,34755,34757,34760,34762,34764,34766,34768,34771,34773,34775,34778,34780,34782],{"class":36,"line":34738},151,[34,34740,34092],{"class":44},[34,34742,286],{"class":40},[34,34744,5245],{"class":504},[34,34746,34100],{"class":44},[34,34748,34749],{"class":504},"train loss:",[34,34751,2687],{"class":44},[34,34753,34754],{"class":55},":.4f",[34,34756,2737],{"class":44},[34,34758,34759],{"class":504}," train acc:",[34,34761,2687],{"class":44},[34,34763,34754],{"class":55},[34,34765,2737],{"class":44},[34,34767,5245],{"class":504},[34,34769,34770],{"class":40},".format(epoch,train_loss_all[",[34,34772,2327],{"class":55},[34,34774,394],{"class":44},[34,34776,34777],{"class":40},"],train_acc_all[",[34,34779,2327],{"class":55},[34,34781,394],{"class":44},[34,34783,34784],{"class":40},"]))\n",[34,34786,34788,34790,34792,34794,34796,34799,34801,34803,34805,34808,34810,34812,34814,34816,34819,34821,34823,34826,34828,34830],{"class":36,"line":34787},152,[34,34789,34092],{"class":44},[34,34791,286],{"class":40},[34,34793,5245],{"class":504},[34,34795,34100],{"class":44},[34,34797,34798],{"class":504},"val loss:",[34,34800,2687],{"class":44},[34,34802,34754],{"class":55},[34,34804,2737],{"class":44},[34,34806,34807],{"class":504}," val acc:",[34,34809,2687],{"class":44},[34,34811,34754],{"class":55},[34,34813,2737],{"class":44},[34,34815,5245],{"class":504},[34,34817,34818],{"class":40},".format(epoch,val_loss_all[",[34,34820,2327],{"class":55},[34,34822,394],{"class":44},[34,34824,34825],{"class":40},"],val_acc_all[",[34,34827,2327],{"class":55},[34,34829,394],{"class":44},[34,34831,34784],{"class":40},[34,34833,34835],{"class":36,"line":34834},153,[34,34836,1475],{"emptyLinePlaceholder":1474},[34,34838,34840],{"class":36,"line":34839},154,[34,34841,34842],{"class":161},"        # 判断准确度--->保存最优模型\n",[34,34844,34846,34848,34851,34853,34855,34857,34859],{"class":36,"line":34845},155,[34,34847,4150],{"class":55},[34,34849,34850],{"class":40}," val_acc_all[",[34,34852,2327],{"class":55},[34,34854,394],{"class":44},[34,34856,2731],{"class":40},[34,34858,2751],{"class":55},[34,34860,34861],{"class":40},"best_acc:\n",[34,34863,34865],{"class":36,"line":34864},156,[34,34866,34867],{"class":161},"            # 保存当前模型准确度\n",[34,34869,34871,34874,34876,34878,34881,34883,34885],{"class":36,"line":34870},157,[34,34872,34873],{"class":40},"            best_acc:",[34,34875,989],{"class":44},[34,34877,221],{"class":55},[34,34879,34880],{"class":40},"val_acc_all[",[34,34882,2327],{"class":55},[34,34884,394],{"class":44},[34,34886,34887],{"class":40},"]\n",[34,34889,34891],{"class":36,"line":34890},158,[34,34892,34893],{"class":161},"            # 保存当前的准确度\n",[34,34895,34897],{"class":36,"line":34896},159,[34,34898,34899],{"class":161},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[34,34901,34903,34906,34908],{"class":36,"line":34902},160,[34,34904,34905],{"class":40},"            best_model_wts",[34,34907,221],{"class":55},[34,34909,33955],{"class":40},[34,34911,34913],{"class":36,"line":34912},161,[34,34914,1475],{"emptyLinePlaceholder":1474},[34,34916,34918],{"class":36,"line":34917},162,[34,34919,34920],{"class":161},"        # 计算耗时\n",[34,34922,34924,34927,34929,34932,34934],{"class":36,"line":34923},163,[34,34925,34926],{"class":40},"        time_use",[34,34928,221],{"class":55},[34,34930,34931],{"class":40},"time.time()",[34,34933,2327],{"class":55},[34,34935,34936],{"class":40},"since\n",[34,34938,34940,34942,34944,34947,34949,34952,34954,34956,34958,34960,34962,34965,34968,34971,34973,34976,34978,34980],{"class":36,"line":34939},164,[34,34941,34092],{"class":44},[34,34943,286],{"class":40},[34,34945,34946],{"class":504},"'训练和验证耗费的时间",[34,34948,2687],{"class":44},[34,34950,34951],{"class":55},":.0f",[34,34953,2737],{"class":44},[34,34955,2339],{"class":504},[34,34957,2687],{"class":44},[34,34959,34951],{"class":55},[34,34961,2737],{"class":44},[34,34963,34964],{"class":504},"s'",[34,34966,34967],{"class":40},".format(time_use",[34,34969,34970],{"class":55},"\u002F\u002F",[34,34972,2698],{"class":44},[34,34974,34975],{"class":40},",time_use",[34,34977,2131],{"class":55},[34,34979,2698],{"class":44},[34,34981,296],{"class":40},[34,34983,34985],{"class":36,"line":34984},165,[34,34986,34987],{"class":161},"    # 选择最优参数\n",[34,34989,34991],{"class":36,"line":34990},166,[34,34992,34993],{"class":161},"    # 加载最高准确率下的模型参数\n",[34,34995,34997],{"class":36,"line":34996},167,[34,34998,34999],{"class":161},"    # model.load_state_dict(best_model_wts)\n",[34,35001,35003,35006,35009],{"class":36,"line":35002},168,[34,35004,35005],{"class":40},"    torch.save(model.state_dict(best_model_wts), ",[34,35007,35008],{"class":504},"'.\u002Fbest_model.pth'",[34,35010,101],{"class":40},[34,35012,35014],{"class":36,"line":35013},169,[34,35015,35016],{"class":161},"    # 或者写成\n",[34,35018,35020],{"class":36,"line":35019},170,[34,35021,35022],{"class":161},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[34,35024,35026],{"class":36,"line":35025},171,[34,35027,35028],{"class":161},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[34,35030,35032,35035,35037,35040,35043,35045],{"class":36,"line":35031},172,[34,35033,35034],{"class":40},"    train_process",[34,35036,221],{"class":55},[34,35038,35039],{"class":40},"pd.DataFrame(",[34,35041,35042],{"class":51},"data",[34,35044,221],{"class":55},[34,35046,3204],{"class":40},[34,35048,35050,35053,35055,35058],{"class":36,"line":35049},173,[34,35051,35052],{"class":504},"        \"epoch\"",[34,35054,2650],{"class":40},[34,35056,35057],{"class":44},"range",[34,35059,35060],{"class":40},"(num_epochs),\n",[34,35062,35064,35067],{"class":36,"line":35063},174,[34,35065,35066],{"class":504},"        \"train_loss_all\"",[34,35068,35069],{"class":40},":train_loss_all,\n",[34,35071,35073,35076],{"class":36,"line":35072},175,[34,35074,35075],{"class":504},"        \"val_loss_all\"",[34,35077,35078],{"class":40},":val_loss_all,\n",[34,35080,35082,35085],{"class":36,"line":35081},176,[34,35083,35084],{"class":504},"        \"train_acc_all\"",[34,35086,35087],{"class":40},":train_acc_all,\n",[34,35089,35091,35094],{"class":36,"line":35090},177,[34,35092,35093],{"class":504},"        \"val_acc_all\"",[34,35095,35096],{"class":40},":val_acc_all\n",[34,35098,35100],{"class":36,"line":35099},178,[34,35101,35102],{"class":40},"    })\n",[34,35104,35106],{"class":36,"line":35105},179,[34,35107,35108],{"class":161},"    # 返回训练保存的过程\n",[34,35110,35112,35114],{"class":36,"line":35111},180,[34,35113,5743],{"class":55},[34,35115,35116],{"class":40}," train_process\n",[34,35118,35120],{"class":36,"line":35119},181,[34,35121,1475],{"emptyLinePlaceholder":1474},[34,35123,35125],{"class":36,"line":35124},182,[34,35126,35127],{"class":161},"# 将loss值和精度按照图片的形式展示出来\n",[34,35129,35131,35133,35136],{"class":36,"line":35130},183,[34,35132,33588],{"class":55},[34,35134,35135],{"class":3617}," matplot_acc_loss",[34,35137,35138],{"class":40},"(train_process):\n",[34,35140,35142],{"class":36,"line":35141},184,[34,35143,35144],{"class":161},"    # 设置图的大小\n",[34,35146,35148,35151,35153,35155,35157,35159,35161,35163],{"class":36,"line":35147},185,[34,35149,35150],{"class":40},"    plt.figure(",[34,35152,33334],{"class":51},[34,35154,221],{"class":55},[34,35156,286],{"class":40},[34,35158,2293],{"class":44},[34,35160,291],{"class":40},[34,35162,247],{"class":44},[34,35164,296],{"class":40},[34,35166,35168],{"class":36,"line":35167},186,[34,35169,35170],{"class":161},"    # 设置图中有几张图\n",[34,35172,35174],{"class":36,"line":35173},187,[34,35175,35176],{"class":161},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[34,35178,35180],{"class":36,"line":35179},188,[34,35181,35182],{"class":161},"    # ①loss图\n",[34,35184,35186,35188,35190,35192,35194,35196,35198],{"class":36,"line":35185},189,[34,35187,33368],{"class":40},[34,35189,394],{"class":44},[34,35191,291],{"class":40},[34,35193,332],{"class":44},[34,35195,291],{"class":40},[34,35197,394],{"class":44},[34,35199,101],{"class":40},[34,35201,35203],{"class":36,"line":35202},190,[34,35204,35205],{"class":161},"    # 补充:\n",[34,35207,35209],{"class":36,"line":35208},191,[34,35210,35211],{"class":161},"    # plt.subplot(nrows, ncols, index)\n",[34,35213,35215],{"class":36,"line":35214},192,[34,35216,35217],{"class":161},"    # nrows：行数\n",[34,35219,35221],{"class":36,"line":35220},193,[34,35222,35223],{"class":161},"    # ncols：列数\n",[34,35225,35227],{"class":36,"line":35226},194,[34,35228,35229],{"class":161},"    # index：目前选中第几个子图（从1开始）\n",[34,35231,35233,35236,35239,35242,35245,35247,35250,35252,35255],{"class":36,"line":35232},195,[34,35234,35235],{"class":40},"    plt.plot(train_process[",[34,35237,35238],{"class":504},"\"epoch\"",[34,35240,35241],{"class":40},"],train_process.train_loss_all,",[34,35243,35244],{"class":504},"'ro-'",[34,35246,291],{"class":40},[34,35248,35249],{"class":51},"label",[34,35251,221],{"class":55},[34,35253,35254],{"class":504},"'train loss'",[34,35256,101],{"class":40},[34,35258,35260,35262,35264,35267,35270,35272,35274,35276,35279],{"class":36,"line":35259},196,[34,35261,35235],{"class":40},[34,35263,35238],{"class":504},[34,35265,35266],{"class":40},"],train_process.val_loss_all,",[34,35268,35269],{"class":504},"'bs--'",[34,35271,291],{"class":40},[34,35273,35249],{"class":51},[34,35275,221],{"class":55},[34,35277,35278],{"class":504},"'val loss'",[34,35280,101],{"class":40},[34,35282,35284],{"class":36,"line":35283},197,[34,35285,35286],{"class":161},"    # 添加一个图例\n",[34,35288,35290],{"class":36,"line":35289},198,[34,35291,35292],{"class":40},"    plt.legend()\n",[34,35294,35296],{"class":36,"line":35295},199,[34,35297,35298],{"class":161},"    # 给轴添加标签\n",[34,35300,35302,35305,35308],{"class":36,"line":35301},200,[34,35303,35304],{"class":40},"    plt.xlabel(",[34,35306,35307],{"class":504},"'epoch'",[34,35309,101],{"class":40},[34,35311,35313,35316,35319],{"class":36,"line":35312},201,[34,35314,35315],{"class":40},"    plt.ylabel(",[34,35317,35318],{"class":504},"'loss'",[34,35320,101],{"class":40},[34,35322,35324],{"class":36,"line":35323},202,[34,35325,35326],{"class":161},"    # ②准确度图\n",[34,35328,35330,35332,35334,35336,35338,35340,35342],{"class":36,"line":35329},203,[34,35331,33368],{"class":40},[34,35333,394],{"class":44},[34,35335,291],{"class":40},[34,35337,332],{"class":44},[34,35339,291],{"class":40},[34,35341,332],{"class":44},[34,35343,101],{"class":40},[34,35345,35347,35349,35351,35354,35356,35358,35360,35362,35365],{"class":36,"line":35346},204,[34,35348,35235],{"class":40},[34,35350,35238],{"class":504},[34,35352,35353],{"class":40},"],train_process.train_acc_all,",[34,35355,35244],{"class":504},[34,35357,291],{"class":40},[34,35359,35249],{"class":51},[34,35361,221],{"class":55},[34,35363,35364],{"class":504},"'train acc'",[34,35366,101],{"class":40},[34,35368,35370,35372,35374,35377,35379,35381,35383,35385,35388],{"class":36,"line":35369},205,[34,35371,35235],{"class":40},[34,35373,35238],{"class":504},[34,35375,35376],{"class":40},"],train_process.val_acc_all,",[34,35378,35269],{"class":504},[34,35380,291],{"class":40},[34,35382,35249],{"class":51},[34,35384,221],{"class":55},[34,35386,35387],{"class":504},"'val acc'",[34,35389,101],{"class":40},[34,35391,35393],{"class":36,"line":35392},206,[34,35394,35395],{"class":161},"    # 添加图例\n",[34,35397,35399],{"class":36,"line":35398},207,[34,35400,35292],{"class":40},[34,35402,35404,35406,35408],{"class":36,"line":35403},208,[34,35405,35304],{"class":40},[34,35407,35238],{"class":504},[34,35409,101],{"class":40},[34,35411,35413,35415,35418],{"class":36,"line":35412},209,[34,35414,35315],{"class":40},[34,35416,35417],{"class":504},"\"acc\"",[34,35419,101],{"class":40},[34,35421,35423],{"class":36,"line":35422},210,[34,35424,35425],{"class":40},"    plt.show()\n",[34,35427,35429],{"class":36,"line":35428},211,[34,35430,1475],{"emptyLinePlaceholder":1474},[34,35432,35434],{"class":36,"line":35433},212,[34,35435,35436],{"class":161},"# 正式开始训练:\n",[34,35438,35440,35442,35444,35446,35448],{"class":36,"line":35439},213,[34,35441,3189],{"class":55},[34,35443,32862],{"class":44},[34,35445,4602],{"class":55},[34,35447,32867],{"class":504},[34,35449,5392],{"class":40},[34,35451,35453],{"class":36,"line":35452},214,[34,35454,35455],{"class":161},"    # 将模型实例化\n",[34,35457,35459,35462,35464],{"class":36,"line":35458},215,[34,35460,35461],{"class":40},"    LeNet",[34,35463,221],{"class":55},[34,35465,35466],{"class":40},"LeNet()\n",[34,35468,35470,35473,35475],{"class":36,"line":35469},216,[34,35471,35472],{"class":40},"    train_dataloader,val_dataloader",[34,35474,221],{"class":55},[34,35476,35477],{"class":40},"train_val_data_process()\n",[34,35479,35481,35483,35485,35488,35491,35493,35495],{"class":36,"line":35480},217,[34,35482,35034],{"class":40},[34,35484,221],{"class":55},[34,35486,35487],{"class":40},"train_model_process(LeNet,train_dataloader,val_dataloader,",[34,35489,35490],{"class":51},"num_epochs",[34,35492,221],{"class":55},[34,35494,1249],{"class":44},[34,35496,101],{"class":40},[34,35498,35500],{"class":36,"line":35499},218,[34,35501,35502],{"class":40},"    matplot_acc_loss(train_process)\n",[103,35504,35505],{},"画图的补充点学习：",[103,35507,35508],{},[109,35509],{"alt":29,"src":35510},"\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",[1772,35512,35513],{"start":171},[1775,35514,35515],{},"测试",[24,35517,35519],{"className":26,"code":35518,"language":28,"meta":29,"style":29},"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",[31,35520,35521,35527,35537,35549,35559,35564,35574,35584,35588,35593,35602,35619,35631,35648,35659,35675,35680,35691,35702,35713,35720,35724,35729,35739,35744,35761,35769,35773,35778,35787,35796,35800,35805,35810,35815,35822,35827,35839,35849,35859,35864,35868,35873,35882,35887,35903,35908,35913,35918,35932,35937,35951,35955,35960,35975,35980,35992,35996,36001,36013,36018,36026,36031,36036,36046,36051,36060,36065,36070,36074,36079,36084,36100,36108,36113,36118,36177,36183,36188,36199,36207,36215,36219,36224,36228,36233,36241,36246,36262,36267,36277,36287],{"__ignoreMap":29},[34,35522,35523,35525],{"class":36,"line":37},[34,35524,32036],{"class":55},[34,35526,32039],{"class":40},[34,35528,35529,35531,35533,35535],{"class":36,"line":165},[34,35530,32036],{"class":55},[34,35532,33057],{"class":40},[34,35534,33025],{"class":55},[34,35536,33062],{"class":40},[34,35538,35539,35541,35544,35546],{"class":36,"line":171},[34,35540,32379],{"class":55},[34,35542,35543],{"class":40}," jupyter_client.consoleapp ",[34,35545,32036],{"class":55},[34,35547,35548],{"class":40}," classes\n",[34,35550,35551,35553,35555,35557],{"class":36,"line":182},[34,35552,32379],{"class":55},[34,35554,33040],{"class":40},[34,35556,32036],{"class":55},[34,35558,33045],{"class":40},[34,35560,35561],{"class":36,"line":188},[34,35562,35563],{"class":161},"# 导入数据集\n",[34,35565,35566,35568,35570,35572],{"class":36,"line":518},[34,35567,32379],{"class":55},[34,35569,33010],{"class":40},[34,35571,32036],{"class":55},[34,35573,33015],{"class":40},[34,35575,35576,35578,35580,35582],{"class":36,"line":524},[34,35577,32379],{"class":55},[34,35579,33555],{"class":40},[34,35581,32036],{"class":55},[34,35583,33560],{"class":40},[34,35585,35586],{"class":36,"line":530},[34,35587,1475],{"emptyLinePlaceholder":1474},[34,35589,35590],{"class":36,"line":624},[34,35591,35592],{"class":161},"# 测试数据处理\n",[34,35594,35595,35597,35600],{"class":36,"line":630},[34,35596,33588],{"class":55},[34,35598,35599],{"class":3617}," test_data_process",[34,35601,33594],{"class":40},[34,35603,35604,35607,35609,35611,35613,35615,35617],{"class":36,"line":636},[34,35605,35606],{"class":40},"    test_data",[34,35608,221],{"class":55},[34,35610,33097],{"class":40},[34,35612,33100],{"class":51},[34,35614,221],{"class":55},[34,35616,33105],{"class":504},[34,35618,33108],{"class":40},[34,35620,35621,35624,35626,35629],{"class":36,"line":1513},[34,35622,35623],{"class":51},"                           train",[34,35625,221],{"class":55},[34,35627,35628],{"class":44},"False",[34,35630,33108],{"class":40},[34,35632,35633,35636,35638,35640,35642,35644,35646],{"class":36,"line":1519},[34,35634,35635],{"class":51},"                           transform",[34,35637,221],{"class":55},[34,35639,33135],{"class":40},[34,35641,218],{"class":51},[34,35643,221],{"class":55},[34,35645,2692],{"class":44},[34,35647,33145],{"class":40},[34,35649,35650,35653,35655,35657],{"class":36,"line":3283},[34,35651,35652],{"class":51},"                           download",[34,35654,221],{"class":55},[34,35656,33118],{"class":44},[34,35658,101],{"class":40},[34,35660,35661,35664,35666,35668,35670,35672],{"class":36,"line":3297},[34,35662,35663],{"class":40},"    test_dataloader",[34,35665,221],{"class":55},[34,35667,33175],{"class":40},[34,35669,33178],{"class":51},[34,35671,221],{"class":55},[34,35673,35674],{"class":40},"test_data,\n",[34,35676,35677],{"class":36,"line":3302},[34,35678,35679],{"class":161},"                                    # 这里是一张一张进行测试\n",[34,35681,35682,35685,35687,35689],{"class":36,"line":3308},[34,35683,35684],{"class":51},"                                    batch_size",[34,35686,221],{"class":55},[34,35688,394],{"class":44},[34,35690,33108],{"class":40},[34,35692,35693,35696,35698,35700],{"class":36,"line":3328},[34,35694,35695],{"class":51},"                                    shuffle",[34,35697,221],{"class":55},[34,35699,33118],{"class":44},[34,35701,33108],{"class":40},[34,35703,35704,35707,35709,35711],{"class":36,"line":3333},[34,35705,35706],{"class":51},"                                    num_workers",[34,35708,221],{"class":55},[34,35710,177],{"class":44},[34,35712,101],{"class":40},[34,35714,35715,35717],{"class":36,"line":3347},[34,35716,5743],{"class":55},[34,35718,35719],{"class":40}," test_dataloader\n",[34,35721,35722],{"class":36,"line":3352},[34,35723,1475],{"emptyLinePlaceholder":1474},[34,35725,35726],{"class":36,"line":3381},[34,35727,35728],{"class":161},"# 定义模型测试函数\n",[34,35730,35731,35733,35736],{"class":36,"line":3386},[34,35732,33588],{"class":55},[34,35734,35735],{"class":3617}," test_model_process",[34,35737,35738],{"class":40},"(model,test_dataloader):\n",[34,35740,35741],{"class":36,"line":3403},[34,35742,35743],{"class":161},"    # 将模型放到设备当中，先进行判断\n",[34,35745,35746,35748,35750,35752,35754,35756,35758],{"class":36,"line":3408},[34,35747,32879],{"class":40},[34,35749,221],{"class":55},[34,35751,32886],{"class":504},[34,35753,3358],{"class":55},[34,35755,32891],{"class":40},[34,35757,3355],{"class":55},[34,35759,35760],{"class":504}," \"cpu\"\n",[34,35762,35763,35765,35767],{"class":36,"line":3413},[34,35764,32931],{"class":40},[34,35766,221],{"class":55},[34,35768,33930],{"class":40},[34,35770,35771],{"class":36,"line":3418},[34,35772,1475],{"emptyLinePlaceholder":1474},[34,35774,35775],{"class":36,"line":3432},[34,35776,35777],{"class":161},"    # 设置初始化参数\n",[34,35779,35780,35783,35785],{"class":36,"line":3437},[34,35781,35782],{"class":40},"    test_corrects",[34,35784,221],{"class":55},[34,35786,33983],{"class":44},[34,35788,35789,35792,35794],{"class":36,"line":4230},[34,35790,35791],{"class":40},"    test_num",[34,35793,221],{"class":55},[34,35795,4738],{"class":44},[34,35797,35798],{"class":36,"line":4244},[34,35799,1475],{"emptyLinePlaceholder":1474},[34,35801,35802],{"class":36,"line":4252},[34,35803,35804],{"class":161},"    # 进行模型测试\n",[34,35806,35807],{"class":36,"line":4257},[34,35808,35809],{"class":161},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[34,35811,35812],{"class":36,"line":4263},[34,35813,35814],{"class":161},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[34,35816,35817,35820],{"class":36,"line":4269},[34,35818,35819],{"class":55},"    with",[34,35821,34525],{"class":40},[34,35823,35824],{"class":36,"line":4274},[34,35825,35826],{"class":161},"        # 从数据中进行\n",[34,35828,35829,35831,35834,35836],{"class":36,"line":9598},[34,35830,5056],{"class":55},[34,35832,35833],{"class":40}," test_data_x,test_data_y ",[34,35835,27689],{"class":55},[34,35837,35838],{"class":40}," test_dataloader:\n",[34,35840,35841,35844,35846],{"class":36,"line":9622},[34,35842,35843],{"class":40},"            test_data_x",[34,35845,221],{"class":55},[34,35847,35848],{"class":40},"test_data_x.to(device)\n",[34,35850,35851,35854,35856],{"class":36,"line":9627},[34,35852,35853],{"class":40},"            test_data_y",[34,35855,221],{"class":55},[34,35857,35858],{"class":40},"test_data_y.to(device)\n",[34,35860,35861],{"class":36,"line":9633},[34,35862,35863],{"class":161},"            # 设置为验证模式\n",[34,35865,35866],{"class":36,"line":9660},[34,35867,34516],{"class":40},[34,35869,35870],{"class":36,"line":9665},[34,35871,35872],{"class":161},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[34,35874,35875,35877,35879],{"class":36,"line":9671},[34,35876,34301],{"class":40},[34,35878,221],{"class":55},[34,35880,35881],{"class":40},"model(test_data_x)\n",[34,35883,35884],{"class":36,"line":9683},[34,35885,35886],{"class":161},"            # 查找每一行中最大值对应的下标\n",[34,35888,35889,35891,35893,35895,35897,35899,35901],{"class":36,"line":9695},[34,35890,34318],{"class":40},[34,35892,221],{"class":55},[34,35894,34323],{"class":40},[34,35896,34326],{"class":51},[34,35898,221],{"class":55},[34,35900,394],{"class":44},[34,35902,101],{"class":40},[34,35904,35905],{"class":36,"line":9707},[34,35906,35907],{"class":161},"            # 计算正确率\n",[34,35909,35910],{"class":36,"line":11366},[34,35911,35912],{"class":161},"            # .data表示是一个不带梯度信息的tensor\n",[34,35914,35915],{"class":36,"line":11391},[34,35916,35917],{"class":161},"            # 如果预测正确，则准确度test_corrects加1\n",[34,35919,35920,35923,35925,35927,35929],{"class":36,"line":11414},[34,35921,35922],{"class":40},"            test_corrects",[34,35924,11127],{"class":55},[34,35926,34428],{"class":40},[34,35928,4602],{"class":55},[34,35930,35931],{"class":40},"test_data_y.data)\n",[34,35933,35934],{"class":36,"line":11438},[34,35935,35936],{"class":161},"            # 将所有的测试样本进行累计\n",[34,35938,35939,35942,35944,35947,35949],{"class":36,"line":11443},[34,35940,35941],{"class":40},"            test_num",[34,35943,11127],{"class":55},[34,35945,35946],{"class":40},"test_data_x.size(",[34,35948,177],{"class":44},[34,35950,101],{"class":40},[34,35952,35953],{"class":36,"line":11448},[34,35954,1475],{"emptyLinePlaceholder":1474},[34,35956,35957],{"class":36,"line":11453},[34,35958,35959],{"class":161},"        # 计算准确度\n",[34,35961,35962,35965,35967,35970,35972],{"class":36,"line":11462},[34,35963,35964],{"class":40},"        test_acc",[34,35966,221],{"class":55},[34,35968,35969],{"class":40},"test_corrects.double().item()",[34,35971,2379],{"class":55},[34,35973,35974],{"class":40},"test_num\n",[34,35976,35977],{"class":36,"line":11467},[34,35978,35979],{"class":161},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[34,35981,35982,35984,35986,35989],{"class":36,"line":11473},[34,35983,34092],{"class":44},[34,35985,286],{"class":40},[34,35987,35988],{"class":504},"\"测试的准确率：\"",[34,35990,35991],{"class":40},",test_acc)\n",[34,35993,35994],{"class":36,"line":11494},[34,35995,1475],{"emptyLinePlaceholder":1474},[34,35997,35998],{"class":36,"line":11500},[34,35999,36000],{"class":161},"# 实现模型的测试功能\n",[34,36002,36003,36005,36007,36009,36011],{"class":36,"line":11514},[34,36004,3189],{"class":55},[34,36006,32862],{"class":44},[34,36008,4602],{"class":55},[34,36010,32867],{"class":504},[34,36012,5392],{"class":40},[34,36014,36015],{"class":36,"line":11520},[34,36016,36017],{"class":161},"    # 加载模型\n",[34,36019,36020,36022,36024],{"class":36,"line":11547},[34,36021,32931],{"class":40},[34,36023,221],{"class":55},[34,36025,35466],{"class":40},[34,36027,36028],{"class":36,"line":11556},[34,36029,36030],{"class":161},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[34,36032,36033],{"class":36,"line":11562},[34,36034,36035],{"class":161},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[34,36037,36038,36041,36044],{"class":36,"line":11570},[34,36039,36040],{"class":40},"    model.load_state_dict(torch.load(",[34,36042,36043],{"class":504},"'best_model.pth'",[34,36045,296],{"class":40},[34,36047,36048],{"class":36,"line":11575},[34,36049,36050],{"class":161},"    # 数据加载\n",[34,36052,36053,36055,36057],{"class":36,"line":18250},[34,36054,35663],{"class":40},[34,36056,221],{"class":55},[34,36058,36059],{"class":40},"test_data_process()\n",[34,36061,36062],{"class":36,"line":18256},[34,36063,36064],{"class":161},"    # 加载模型测试的函数\n",[34,36066,36067],{"class":36,"line":18279},[34,36068,36069],{"class":40},"    test_model_process(model,test_dataloader)\n",[34,36071,36072],{"class":36,"line":18285},[34,36073,1475],{"emptyLinePlaceholder":1474},[34,36075,36076],{"class":36,"line":18308},[34,36077,36078],{"class":161},"    # 验证集推理实现：\n",[34,36080,36081],{"class":36,"line":18322},[34,36082,36083],{"class":161},"    # 加载数据加载的更详细一些\n",[34,36085,36086,36088,36090,36092,36094,36096,36098],{"class":36,"line":18342},[34,36087,32879],{"class":40},[34,36089,221],{"class":55},[34,36091,32886],{"class":504},[34,36093,3358],{"class":55},[34,36095,32891],{"class":40},[34,36097,3355],{"class":55},[34,36099,35760],{"class":504},[34,36101,36102,36104,36106],{"class":36,"line":18348},[34,36103,32931],{"class":40},[34,36105,221],{"class":55},[34,36107,33930],{"class":40},[34,36109,36110],{"class":36,"line":18359},[34,36111,36112],{"class":161},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[34,36114,36115],{"class":36,"line":18382},[34,36116,36117],{"class":161},"    # 顺序不可改变\n",[34,36119,36120,36123,36125,36127,36130,36132,36135,36137,36140,36142,36145,36147,36150,36152,36155,36157,36160,36162,36165,36167,36170,36172,36175],{"class":36,"line":18404},[34,36121,36122],{"class":40},"    classes",[34,36124,221],{"class":55},[34,36126,2681],{"class":40},[34,36128,36129],{"class":504},"'T-shirt\u002Ftop'",[34,36131,291],{"class":40},[34,36133,36134],{"class":504},"'Trouser'",[34,36136,291],{"class":40},[34,36138,36139],{"class":504},"'Pullover'",[34,36141,291],{"class":40},[34,36143,36144],{"class":504},"'Dress'",[34,36146,291],{"class":40},[34,36148,36149],{"class":504},"'Coat'",[34,36151,291],{"class":40},[34,36153,36154],{"class":504},"'Sandal'",[34,36156,291],{"class":40},[34,36158,36159],{"class":504},"'Shirt'",[34,36161,291],{"class":40},[34,36163,36164],{"class":504},"'Sneaker'",[34,36166,291],{"class":40},[34,36168,36169],{"class":504},"'Bag'",[34,36171,291],{"class":40},[34,36173,36174],{"class":504},"'Ankle boot'",[34,36176,34887],{"class":40},[34,36178,36179,36181],{"class":36,"line":18409},[34,36180,35819],{"class":55},[34,36182,34525],{"class":40},[34,36184,36185],{"class":36,"line":18415},[34,36186,36187],{"class":161},"        # 将数据和标签都放到设备当中\n",[34,36189,36190,36192,36195,36197],{"class":36,"line":18429},[34,36191,5056],{"class":55},[34,36193,36194],{"class":40}," b_x,b_y ",[34,36196,27689],{"class":55},[34,36198,35838],{"class":40},[34,36200,36201,36203,36205],{"class":36,"line":18442},[34,36202,34251],{"class":40},[34,36204,221],{"class":55},[34,36206,34256],{"class":40},[34,36208,36209,36211,36213],{"class":36,"line":18447},[34,36210,34266],{"class":40},[34,36212,221],{"class":55},[34,36214,34271],{"class":40},[34,36216,36217],{"class":36,"line":18461},[34,36218,1475],{"emptyLinePlaceholder":1474},[34,36220,36221],{"class":36,"line":18466},[34,36222,36223],{"class":161},"            # 设置模型为验证模式\n",[34,36225,36226],{"class":36,"line":18472},[34,36227,34516],{"class":40},[34,36229,36230],{"class":36,"line":18477},[34,36231,36232],{"class":161},"            # 模型推理结果\n",[34,36234,36235,36237,36239],{"class":36,"line":18491},[34,36236,34301],{"class":40},[34,36238,221],{"class":55},[34,36240,34306],{"class":40},[34,36242,36243],{"class":36,"line":18496},[34,36244,36245],{"class":161},"            # 获取最大下标，最大下标就是类别号\n",[34,36247,36248,36250,36252,36254,36256,36258,36260],{"class":36,"line":18501},[34,36249,34318],{"class":40},[34,36251,221],{"class":55},[34,36253,34323],{"class":40},[34,36255,34326],{"class":51},[34,36257,221],{"class":55},[34,36259,394],{"class":44},[34,36261,101],{"class":40},[34,36263,36264],{"class":36,"line":18515},[34,36265,36266],{"class":161},"            # 取出张量中的数值\n",[34,36268,36269,36272,36274],{"class":36,"line":18527},[34,36270,36271],{"class":40},"            result",[34,36273,221],{"class":55},[34,36275,36276],{"class":40},"pre_lab.item()\n",[34,36278,36279,36282,36284],{"class":36,"line":18532},[34,36280,36281],{"class":40},"            label",[34,36283,221],{"class":55},[34,36285,36286],{"class":40},"b_y.item()\n",[34,36288,36289,36292,36294,36297,36300,36303,36305,36308],{"class":36,"line":18545},[34,36290,36291],{"class":44},"            print",[34,36293,286],{"class":40},[34,36295,36296],{"class":504},"\"预测值：\"",[34,36298,36299],{"class":40},",classes[result],",[34,36301,36302],{"class":504},"\"------\"",[34,36304,291],{"class":40},[34,36306,36307],{"class":504},"\"真实值：\"",[34,36309,36310],{"class":40},",classes[label])\n",[103,36312,36313],{},"（2）AlexNet",[1772,36315,36316],{},[1775,36317,36318],{},"神经网络构建",[24,36320,36322],{"className":26,"code":36321,"language":28,"meta":29,"style":29},"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",[31,36323,36324,36330,36340,36350,36362,36366,36383,36391,36406,36418,36460,36487,36530,36556,36600,36643,36686,36713,36717,36727,36732,36760,36779,36798,36802,36807,36815,36830,36840,36854,36864,36879,36894,36909,36920,36924,36929,36939,36954,36959,36973,36988,37000,37005,37016,37021,37027,37032,37044,37064,37069,37078],{"__ignoreMap":29},[34,36325,36326,36328],{"class":36,"line":37},[34,36327,32036],{"class":55},[34,36329,32039],{"class":40},[34,36331,36332,36334,36336,36338],{"class":36,"line":165},[34,36333,32379],{"class":55},[34,36335,32382],{"class":40},[34,36337,32036],{"class":55},[34,36339,32387],{"class":40},[34,36341,36342,36344,36346,36348],{"class":36,"line":171},[34,36343,32379],{"class":55},[34,36345,32399],{"class":40},[34,36347,32036],{"class":55},[34,36349,32404],{"class":40},[34,36351,36352,36354,36357,36359],{"class":36,"line":182},[34,36353,32036],{"class":55},[34,36355,36356],{"class":40}," torch.nn.functional ",[34,36358,33025],{"class":55},[34,36360,36361],{"class":40}," F\n",[34,36363,36364],{"class":36,"line":188},[34,36365,1475],{"emptyLinePlaceholder":1474},[34,36367,36368,36370,36373,36375,36377,36379,36381],{"class":36,"line":518},[34,36369,16340],{"class":55},[34,36371,36372],{"class":3617}," AlexNet",[34,36374,286],{"class":40},[34,36376,32420],{"class":3617},[34,36378,2353],{"class":40},[34,36380,32425],{"class":3617},[34,36382,32428],{"class":40},[34,36384,36385,36387,36389],{"class":36,"line":524},[34,36386,32443],{"class":55},[34,36388,32446],{"class":44},[34,36390,32449],{"class":40},[34,36392,36393,36395,36398,36400,36402,36404],{"class":36,"line":530},[34,36394,32459],{"class":44},[34,36396,36397],{"class":40},"(AlexNet,",[34,36399,32465],{"class":44},[34,36401,32468],{"class":40},[34,36403,32471],{"class":44},[34,36405,3630],{"class":40},[34,36407,36408,36410,36413,36415],{"class":36,"line":624},[34,36409,32487],{"class":44},[34,36411,36412],{"class":40},".ReLu",[34,36414,221],{"class":55},[34,36416,36417],{"class":40},"nn.ReLU()\n",[34,36419,36420,36422,36424,36426,36428,36430,36432,36434,36436,36438,36440,36442,36444,36446,36448,36450,36452,36454,36456,36458],{"class":36,"line":630},[34,36421,32487],{"class":44},[34,36423,32490],{"class":40},[34,36425,221],{"class":55},[34,36427,32495],{"class":40},[34,36429,32498],{"class":51},[34,36431,221],{"class":55},[34,36433,394],{"class":44},[34,36435,291],{"class":40},[34,36437,32507],{"class":51},[34,36439,221],{"class":55},[34,36441,2018],{"class":44},[34,36443,291],{"class":40},[34,36445,32516],{"class":51},[34,36447,221],{"class":55},[34,36449,399],{"class":44},[34,36451,291],{"class":40},[34,36453,32571],{"class":51},[34,36455,221],{"class":55},[34,36457,247],{"class":44},[34,36459,101],{"class":40},[34,36461,36462,36464,36466,36468,36471,36473,36475,36477,36479,36481,36483,36485],{"class":36,"line":636},[34,36463,32487],{"class":44},[34,36465,32555],{"class":40},[34,36467,221],{"class":55},[34,36469,36470],{"class":40},"nn.MaxPool2d(",[34,36472,32516],{"class":51},[34,36474,221],{"class":55},[34,36476,337],{"class":44},[34,36478,291],{"class":40},[34,36480,32571],{"class":51},[34,36482,221],{"class":55},[34,36484,332],{"class":44},[34,36486,101],{"class":40},[34,36488,36489,36491,36493,36495,36497,36499,36501,36503,36505,36507,36509,36512,36514,36516,36518,36520,36522,36524,36526,36528],{"class":36,"line":1513},[34,36490,32487],{"class":44},[34,36492,32584],{"class":40},[34,36494,221],{"class":55},[34,36496,32495],{"class":40},[34,36498,32498],{"class":51},[34,36500,221],{"class":55},[34,36502,2018],{"class":44},[34,36504,291],{"class":40},[34,36506,32507],{"class":51},[34,36508,221],{"class":55},[34,36510,36511],{"class":44},"256",[34,36513,291],{"class":40},[34,36515,32516],{"class":51},[34,36517,221],{"class":55},[34,36519,224],{"class":44},[34,36521,291],{"class":40},[34,36523,32525],{"class":51},[34,36525,221],{"class":55},[34,36527,332],{"class":44},[34,36529,101],{"class":40},[34,36531,36532,36534,36536,36538,36540,36542,36544,36546,36548,36550,36552,36554],{"class":36,"line":1519},[34,36533,32487],{"class":44},[34,36535,32619],{"class":40},[34,36537,221],{"class":55},[34,36539,36470],{"class":40},[34,36541,32516],{"class":51},[34,36543,221],{"class":55},[34,36545,337],{"class":44},[34,36547,291],{"class":40},[34,36549,32571],{"class":51},[34,36551,221],{"class":55},[34,36553,332],{"class":44},[34,36555,101],{"class":40},[34,36557,36558,36560,36563,36565,36567,36569,36571,36573,36575,36577,36579,36582,36584,36586,36588,36590,36592,36594,36596,36598],{"class":36,"line":3283},[34,36559,32487],{"class":44},[34,36561,36562],{"class":40},".c5",[34,36564,221],{"class":55},[34,36566,32495],{"class":40},[34,36568,32498],{"class":51},[34,36570,221],{"class":55},[34,36572,36511],{"class":44},[34,36574,291],{"class":40},[34,36576,32507],{"class":51},[34,36578,221],{"class":55},[34,36580,36581],{"class":44},"384",[34,36583,291],{"class":40},[34,36585,32516],{"class":51},[34,36587,221],{"class":55},[34,36589,337],{"class":44},[34,36591,291],{"class":40},[34,36593,32525],{"class":51},[34,36595,221],{"class":55},[34,36597,394],{"class":44},[34,36599,101],{"class":40},[34,36601,36602,36604,36607,36609,36611,36613,36615,36617,36619,36621,36623,36625,36627,36629,36631,36633,36635,36637,36639,36641],{"class":36,"line":3297},[34,36603,32487],{"class":44},[34,36605,36606],{"class":40},".c6",[34,36608,221],{"class":55},[34,36610,32495],{"class":40},[34,36612,32498],{"class":51},[34,36614,221],{"class":55},[34,36616,36581],{"class":44},[34,36618,291],{"class":40},[34,36620,32507],{"class":51},[34,36622,221],{"class":55},[34,36624,36581],{"class":44},[34,36626,291],{"class":40},[34,36628,32516],{"class":51},[34,36630,221],{"class":55},[34,36632,337],{"class":44},[34,36634,291],{"class":40},[34,36636,32525],{"class":51},[34,36638,221],{"class":55},[34,36640,394],{"class":44},[34,36642,101],{"class":40},[34,36644,36645,36647,36650,36652,36654,36656,36658,36660,36662,36664,36666,36668,36670,36672,36674,36676,36678,36680,36682,36684],{"class":36,"line":3302},[34,36646,32487],{"class":44},[34,36648,36649],{"class":40},".c7",[34,36651,221],{"class":55},[34,36653,32495],{"class":40},[34,36655,32498],{"class":51},[34,36657,221],{"class":55},[34,36659,36581],{"class":44},[34,36661,291],{"class":40},[34,36663,32507],{"class":51},[34,36665,221],{"class":55},[34,36667,36511],{"class":44},[34,36669,291],{"class":40},[34,36671,32516],{"class":51},[34,36673,221],{"class":55},[34,36675,337],{"class":44},[34,36677,291],{"class":40},[34,36679,32525],{"class":51},[34,36681,221],{"class":55},[34,36683,394],{"class":44},[34,36685,101],{"class":40},[34,36687,36688,36690,36693,36695,36697,36699,36701,36703,36705,36707,36709,36711],{"class":36,"line":3308},[34,36689,32487],{"class":44},[34,36691,36692],{"class":40},".s8",[34,36694,221],{"class":55},[34,36696,36470],{"class":40},[34,36698,32516],{"class":51},[34,36700,221],{"class":55},[34,36702,337],{"class":44},[34,36704,291],{"class":40},[34,36706,32571],{"class":51},[34,36708,221],{"class":55},[34,36710,332],{"class":44},[34,36712,101],{"class":40},[34,36714,36715],{"class":36,"line":3328},[34,36716,32644],{"class":161},[34,36718,36719,36721,36723,36725],{"class":36,"line":3333},[34,36720,32487],{"class":44},[34,36722,32651],{"class":40},[34,36724,221],{"class":55},[34,36726,32656],{"class":40},[34,36728,36729],{"class":36,"line":3347},[34,36730,36731],{"class":161},"       # 定义全连接层\n",[34,36733,36734,36736,36739,36741,36743,36745,36747,36749,36751,36753,36755,36758],{"class":36,"line":3352},[34,36735,32487],{"class":44},[34,36737,36738],{"class":40},".f1",[34,36740,221],{"class":55},[34,36742,32673],{"class":40},[34,36744,1115],{"class":44},[34,36746,2252],{"class":55},[34,36748,1115],{"class":44},[34,36750,2252],{"class":55},[34,36752,36511],{"class":44},[34,36754,291],{"class":40},[34,36756,36757],{"class":44},"4096",[34,36759,101],{"class":40},[34,36761,36762,36764,36767,36769,36771,36773,36775,36777],{"class":36,"line":3381},[34,36763,32487],{"class":44},[34,36765,36766],{"class":40},".f2",[34,36768,221],{"class":55},[34,36770,32673],{"class":40},[34,36772,36757],{"class":44},[34,36774,291],{"class":40},[34,36776,36757],{"class":44},[34,36778,101],{"class":40},[34,36780,36781,36783,36786,36788,36790,36792,36794,36796],{"class":36,"line":3386},[34,36782,32487],{"class":44},[34,36784,36785],{"class":40},".f3",[34,36787,221],{"class":55},[34,36789,32673],{"class":40},[34,36791,36757],{"class":44},[34,36793,291],{"class":40},[34,36795,410],{"class":44},[34,36797,101],{"class":40},[34,36799,36800],{"class":36,"line":3403},[34,36801,1475],{"emptyLinePlaceholder":1474},[34,36803,36804],{"class":36,"line":3408},[34,36805,36806],{"class":161},"    # 定义前向传播\n",[34,36808,36809,36811,36813],{"class":36,"line":3413},[34,36810,32443],{"class":55},[34,36812,32735],{"class":3617},[34,36814,32738],{"class":40},[34,36816,36817,36819,36821,36823,36826,36828],{"class":36,"line":3418},[34,36818,32743],{"class":40},[34,36820,221],{"class":55},[34,36822,32465],{"class":44},[34,36824,36825],{"class":40},".ReLu(",[34,36827,32465],{"class":44},[34,36829,32755],{"class":40},[34,36831,36832,36834,36836,36838],{"class":36,"line":3432},[34,36833,32743],{"class":40},[34,36835,221],{"class":55},[34,36837,32465],{"class":44},[34,36839,32766],{"class":40},[34,36841,36842,36844,36846,36848,36850,36852],{"class":36,"line":3437},[34,36843,32743],{"class":40},[34,36845,221],{"class":55},[34,36847,32465],{"class":44},[34,36849,36825],{"class":40},[34,36851,32465],{"class":44},[34,36853,32781],{"class":40},[34,36855,36856,36858,36860,36862],{"class":36,"line":4230},[34,36857,32743],{"class":40},[34,36859,221],{"class":55},[34,36861,32465],{"class":44},[34,36863,32792],{"class":40},[34,36865,36866,36868,36870,36872,36874,36876],{"class":36,"line":4244},[34,36867,32743],{"class":40},[34,36869,221],{"class":55},[34,36871,32465],{"class":44},[34,36873,36825],{"class":40},[34,36875,32465],{"class":44},[34,36877,36878],{"class":40},".c5(x))\n",[34,36880,36881,36883,36885,36887,36889,36891],{"class":36,"line":4252},[34,36882,32743],{"class":40},[34,36884,221],{"class":55},[34,36886,32465],{"class":44},[34,36888,36825],{"class":40},[34,36890,32465],{"class":44},[34,36892,36893],{"class":40},".c6(x))\n",[34,36895,36896,36898,36900,36902,36904,36906],{"class":36,"line":4257},[34,36897,32743],{"class":40},[34,36899,221],{"class":55},[34,36901,32465],{"class":44},[34,36903,36825],{"class":40},[34,36905,32465],{"class":44},[34,36907,36908],{"class":40},".c7(x))\n",[34,36910,36911,36913,36915,36917],{"class":36,"line":4263},[34,36912,32743],{"class":40},[34,36914,221],{"class":55},[34,36916,32465],{"class":44},[34,36918,36919],{"class":40},".s8(x)\n",[34,36921,36922],{"class":36,"line":4269},[34,36923,1475],{"emptyLinePlaceholder":1474},[34,36925,36926],{"class":36,"line":4274},[34,36927,36928],{"class":161},"        # 展平加线性全连接层\n",[34,36930,36931,36933,36935,36937],{"class":36,"line":9598},[34,36932,32743],{"class":40},[34,36934,221],{"class":55},[34,36936,32465],{"class":44},[34,36938,32803],{"class":40},[34,36940,36941,36943,36945,36947,36949,36951],{"class":36,"line":9622},[34,36942,32743],{"class":40},[34,36944,221],{"class":55},[34,36946,32465],{"class":44},[34,36948,36825],{"class":40},[34,36950,32465],{"class":44},[34,36952,36953],{"class":40},".f1(x))\n",[34,36955,36956],{"class":36,"line":9627},[34,36957,36958],{"class":161},"        # 还需要dropout对神经元随机进行失活\n",[34,36960,36961,36963,36965,36968,36971],{"class":36,"line":9633},[34,36962,32743],{"class":40},[34,36964,221],{"class":55},[34,36966,36967],{"class":40},"F.dropout(x,",[34,36969,36970],{"class":44},"0.5",[34,36972,101],{"class":40},[34,36974,36975,36977,36979,36981,36983,36985],{"class":36,"line":9660},[34,36976,32743],{"class":40},[34,36978,221],{"class":55},[34,36980,32465],{"class":44},[34,36982,36825],{"class":40},[34,36984,32465],{"class":44},[34,36986,36987],{"class":40},".f2(x))\n",[34,36989,36990,36992,36994,36996,36998],{"class":36,"line":9665},[34,36991,32743],{"class":40},[34,36993,221],{"class":55},[34,36995,36967],{"class":40},[34,36997,36970],{"class":44},[34,36999,101],{"class":40},[34,37001,37002],{"class":36,"line":9671},[34,37003,37004],{"class":161},"        # 直接输出\n",[34,37006,37007,37009,37011,37013],{"class":36,"line":9683},[34,37008,32743],{"class":40},[34,37010,221],{"class":55},[34,37012,32465],{"class":44},[34,37014,37015],{"class":40},".f3(x)\n",[34,37017,37018],{"class":36,"line":9695},[34,37019,37020],{"class":161},"        # 前向传播输出\n",[34,37022,37023,37025],{"class":36,"line":9707},[34,37024,16398],{"class":55},[34,37026,32851],{"class":40},[34,37028,37029],{"class":36,"line":11366},[34,37030,37031],{"class":161},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[34,37033,37034,37036,37038,37040,37042],{"class":36,"line":11391},[34,37035,3189],{"class":55},[34,37037,32862],{"class":44},[34,37039,4602],{"class":55},[34,37041,32867],{"class":504},[34,37043,5392],{"class":40},[34,37045,37046,37048,37050,37052,37054,37056,37058,37060,37062],{"class":36,"line":11414},[34,37047,32879],{"class":40},[34,37049,221],{"class":55},[34,37051,32094],{"class":40},[34,37053,32886],{"class":504},[34,37055,3358],{"class":55},[34,37057,32891],{"class":40},[34,37059,3355],{"class":55},[34,37061,32119],{"class":504},[34,37063,101],{"class":40},[34,37065,37066],{"class":36,"line":11438},[34,37067,37068],{"class":161},"    # 模型实例化，然后将实例化的模型放到设备中\n",[34,37070,37071,37073,37075],{"class":36,"line":11443},[34,37072,32931],{"class":40},[34,37074,221],{"class":55},[34,37076,37077],{"class":40},"AlexNet().to(device)\n",[34,37079,37080,37082,37084,37086,37088,37091,37093,37095],{"class":36,"line":11448},[34,37081,32941],{"class":44},[34,37083,32944],{"class":40},[34,37085,394],{"class":44},[34,37087,291],{"class":40},[34,37089,37090],{"class":44},"227",[34,37092,291],{"class":40},[34,37094,37090],{"class":44},[34,37096,32957],{"class":40},[1772,37098,37099],{"start":165},[1775,37100,32970],{},[24,37102,37104],{"className":26,"code":37103,"language":28,"meta":29,"style":29},"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",[31,37105,37106,37112,37118,37128,37134,37144,37154,37164,37174,37184,37188,37199,37209,37213,37217,37221,37229,37241,37251,37267,37277,37309,37323,37333,37343,37347,37357,37371,37381,37391,37401,37407,37411,37415,37419,37423,37427,37435,37455,37459,37463,37467,37471,37475,37491,37495,37499,37507,37511,37515,37523,37527,37531,37535,37543,37547,37551,37555,37559,37567,37571,37579,37583,37591,37595,37603,37607,37615,37619,37623,37631,37635,37639,37643,37655,37679,37693,37697,37701,37705,37713,37717,37725,37729,37737,37741,37749,37753,37761,37765,37773,37777,37789,37793,37801,37805,37813,37817,37821,37825,37829,37837,37841,37857,37861,37869,37873,37877,37881,37885,37889,37893,37897,37913,37917,37929,37933,37945,37949,37961,37965,37973,37977,37985,37989,37993,37998,38004,38008,38017,38021,38038,38042,38051,38055,38073,38086,38091,38104,38108,38112,38120,38124,38128,38136,38140,38148,38152,38160,38164,38168,38210,38252,38256,38260,38276,38280,38296,38300,38304,38312,38316,38320,38332,38370,38375,38380,38389,38393,38407,38417,38423,38429,38435,38441,38445,38449,38455,38459,38463,38471,38475,38493,38497,38501,38505,38521,38525,38529,38533,38537,38541,38561,38581,38585,38589,38593,38601,38609,38613,38629,38649,38669,38673,38677,38685,38693,38697,38701,38705,38717,38721,38731,38739,38756],{"__ignoreMap":29},[34,37107,37108,37110],{"class":36,"line":37},[34,37109,32036],{"class":55},[34,37111,33463],{"class":40},[34,37113,37114,37116],{"class":36,"line":165},[34,37115,32036],{"class":55},[34,37117,33470],{"class":40},[34,37119,37120,37122,37124,37126],{"class":36,"line":171},[34,37121,32036],{"class":55},[34,37123,33481],{"class":40},[34,37125,33025],{"class":55},[34,37127,33486],{"class":40},[34,37129,37130,37132],{"class":36,"line":182},[34,37131,32036],{"class":55},[34,37133,32039],{"class":40},[34,37135,37136,37138,37140,37142],{"class":36,"line":188},[34,37137,32379],{"class":55},[34,37139,33057],{"class":40},[34,37141,32036],{"class":55},[34,37143,33503],{"class":40},[34,37145,37146,37148,37150,37152],{"class":36,"line":518},[34,37147,32379],{"class":55},[34,37149,33010],{"class":40},[34,37151,32036],{"class":55},[34,37153,33015],{"class":40},[34,37155,37156,37158,37160,37162],{"class":36,"line":524},[34,37157,32379],{"class":55},[34,37159,33040],{"class":40},[34,37161,32036],{"class":55},[34,37163,33045],{"class":40},[34,37165,37166,37168,37170,37172],{"class":36,"line":530},[34,37167,32036],{"class":55},[34,37169,33057],{"class":40},[34,37171,33025],{"class":55},[34,37173,33062],{"class":40},[34,37175,37176,37178,37180,37182],{"class":36,"line":624},[34,37177,32036],{"class":55},[34,37179,33074],{"class":40},[34,37181,33025],{"class":55},[34,37183,33079],{"class":40},[34,37185,37186],{"class":36,"line":630},[34,37187,33548],{"class":161},[34,37189,37190,37192,37194,37196],{"class":36,"line":636},[34,37191,32379],{"class":55},[34,37193,33555],{"class":40},[34,37195,32036],{"class":55},[34,37197,37198],{"class":40}," AlexNet\n",[34,37200,37201,37203,37205,37207],{"class":36,"line":1513},[34,37202,32379],{"class":55},[34,37204,32382],{"class":40},[34,37206,32036],{"class":55},[34,37208,32387],{"class":40},[34,37210,37211],{"class":36,"line":1519},[34,37212,1475],{"emptyLinePlaceholder":1474},[34,37214,37215],{"class":36,"line":3283},[34,37216,1475],{"emptyLinePlaceholder":1474},[34,37218,37219],{"class":36,"line":3297},[34,37220,33583],{"class":161},[34,37222,37223,37225,37227],{"class":36,"line":3302},[34,37224,33588],{"class":55},[34,37226,33591],{"class":3617},[34,37228,33594],{"class":40},[34,37230,37231,37233,37235,37237,37239],{"class":36,"line":3308},[34,37232,33599],{"class":40},[34,37234,221],{"class":55},[34,37236,33097],{"class":40},[34,37238,33105],{"class":504},[34,37240,33108],{"class":40},[34,37242,37243,37245,37247,37249],{"class":36,"line":3328},[34,37244,33612],{"class":51},[34,37246,221],{"class":55},[34,37248,33118],{"class":44},[34,37250,33108],{"class":40},[34,37252,37253,37255,37257,37259,37261,37263,37265],{"class":36,"line":3333},[34,37254,33623],{"class":51},[34,37256,221],{"class":55},[34,37258,33135],{"class":40},[34,37260,218],{"class":51},[34,37262,221],{"class":55},[34,37264,37090],{"class":44},[34,37266,33145],{"class":40},[34,37268,37269,37271,37273,37275],{"class":36,"line":3347},[34,37270,33640],{"class":51},[34,37272,221],{"class":55},[34,37274,33118],{"class":44},[34,37276,101],{"class":40},[34,37278,37279,37281,37283,37285,37287,37289,37291,37293,37295,37297,37299,37301,37303,37305,37307],{"class":36,"line":3352},[34,37280,33651],{"class":40},[34,37282,221],{"class":55},[34,37284,33656],{"class":40},[34,37286,33659],{"class":44},[34,37288,286],{"class":40},[34,37290,33664],{"class":44},[34,37292,2252],{"class":55},[34,37294,9008],{"class":44},[34,37296,33671],{"class":40},[34,37298,33659],{"class":44},[34,37300,286],{"class":40},[34,37302,33678],{"class":44},[34,37304,2252],{"class":55},[34,37306,9008],{"class":44},[34,37308,33685],{"class":40},[34,37310,37311,37313,37315,37317,37319,37321],{"class":36,"line":3381},[34,37312,33690],{"class":40},[34,37314,221],{"class":55},[34,37316,33695],{"class":40},[34,37318,33178],{"class":51},[34,37320,221],{"class":55},[34,37322,33183],{"class":40},[34,37324,37325,37327,37329,37331],{"class":36,"line":3386},[34,37326,33706],{"class":51},[34,37328,221],{"class":55},[34,37330,33711],{"class":44},[34,37332,33108],{"class":40},[34,37334,37335,37337,37339,37341],{"class":36,"line":3403},[34,37336,33718],{"class":51},[34,37338,221],{"class":55},[34,37340,33118],{"class":44},[34,37342,33108],{"class":40},[34,37344,37345],{"class":36,"line":3408},[34,37346,33729],{"class":161},[34,37348,37349,37351,37353,37355],{"class":36,"line":3413},[34,37350,33734],{"class":51},[34,37352,221],{"class":55},[34,37354,2195],{"class":44},[34,37356,101],{"class":40},[34,37358,37359,37361,37363,37365,37367,37369],{"class":36,"line":3418},[34,37360,33745],{"class":40},[34,37362,221],{"class":55},[34,37364,33175],{"class":40},[34,37366,33178],{"class":51},[34,37368,221],{"class":55},[34,37370,33756],{"class":40},[34,37372,37373,37375,37377,37379],{"class":36,"line":3432},[34,37374,33761],{"class":51},[34,37376,221],{"class":55},[34,37378,33711],{"class":44},[34,37380,33108],{"class":40},[34,37382,37383,37385,37387,37389],{"class":36,"line":3437},[34,37384,33772],{"class":51},[34,37386,221],{"class":55},[34,37388,33118],{"class":44},[34,37390,33108],{"class":40},[34,37392,37393,37395,37397,37399],{"class":36,"line":4230},[34,37394,33783],{"class":51},[34,37396,221],{"class":55},[34,37398,2195],{"class":44},[34,37400,101],{"class":40},[34,37402,37403,37405],{"class":36,"line":4244},[34,37404,5743],{"class":55},[34,37406,33796],{"class":40},[34,37408,37409],{"class":36,"line":4252},[34,37410,1475],{"emptyLinePlaceholder":1474},[34,37412,37413],{"class":36,"line":4257},[34,37414,33805],{"class":161},[34,37416,37417],{"class":36,"line":4263},[34,37418,33810],{"class":161},[34,37420,37421],{"class":36,"line":4269},[34,37422,1475],{"emptyLinePlaceholder":1474},[34,37424,37425],{"class":36,"line":4274},[34,37426,33819],{"class":161},[34,37428,37429,37431,37433],{"class":36,"line":9598},[34,37430,33588],{"class":55},[34,37432,33826],{"class":3617},[34,37434,33829],{"class":40},[34,37436,37437,37439,37441,37443,37445,37447,37449,37451,37453],{"class":36,"line":9622},[34,37438,32879],{"class":40},[34,37440,221],{"class":55},[34,37442,32094],{"class":40},[34,37444,32886],{"class":504},[34,37446,3358],{"class":55},[34,37448,32891],{"class":40},[34,37450,3355],{"class":55},[34,37452,33848],{"class":504},[34,37454,101],{"class":40},[34,37456,37457],{"class":36,"line":9627},[34,37458,1475],{"emptyLinePlaceholder":1474},[34,37460,37461],{"class":36,"line":9633},[34,37462,1475],{"emptyLinePlaceholder":1474},[34,37464,37465],{"class":36,"line":9660},[34,37466,33863],{"class":161},[34,37468,37469],{"class":36,"line":9665},[34,37470,33868],{"class":161},[34,37472,37473],{"class":36,"line":9671},[34,37474,33873],{"class":161},[34,37476,37477,37479,37481,37483,37485,37487,37489],{"class":36,"line":9683},[34,37478,33878],{"class":40},[34,37480,221],{"class":55},[34,37482,33883],{"class":40},[34,37484,33886],{"class":51},[34,37486,221],{"class":55},[34,37488,33891],{"class":44},[34,37490,101],{"class":40},[34,37492,37493],{"class":36,"line":9695},[34,37494,1475],{"emptyLinePlaceholder":1474},[34,37496,37497],{"class":36,"line":9707},[34,37498,33902],{"class":161},[34,37500,37501,37503,37505],{"class":36,"line":11366},[34,37502,33907],{"class":40},[34,37504,221],{"class":55},[34,37506,33912],{"class":40},[34,37508,37509],{"class":36,"line":11391},[34,37510,1475],{"emptyLinePlaceholder":1474},[34,37512,37513],{"class":36,"line":11414},[34,37514,33921],{"class":161},[34,37516,37517,37519,37521],{"class":36,"line":11438},[34,37518,32931],{"class":40},[34,37520,221],{"class":55},[34,37522,33930],{"class":40},[34,37524,37525],{"class":36,"line":11443},[34,37526,33935],{"class":161},[34,37528,37529],{"class":36,"line":11448},[34,37530,33940],{"class":161},[34,37532,37533],{"class":36,"line":11453},[34,37534,33945],{"class":161},[34,37536,37537,37539,37541],{"class":36,"line":11462},[34,37538,33950],{"class":40},[34,37540,221],{"class":55},[34,37542,33955],{"class":40},[34,37544,37545],{"class":36,"line":11467},[34,37546,1475],{"emptyLinePlaceholder":1474},[34,37548,37549],{"class":36,"line":11473},[34,37550,1475],{"emptyLinePlaceholder":1474},[34,37552,37553],{"class":36,"line":11494},[34,37554,33968],{"class":161},[34,37556,37557],{"class":36,"line":11500},[34,37558,33973],{"class":161},[34,37560,37561,37563,37565],{"class":36,"line":11514},[34,37562,33978],{"class":40},[34,37564,221],{"class":55},[34,37566,33983],{"class":44},[34,37568,37569],{"class":36,"line":11520},[34,37570,33988],{"class":161},[34,37572,37573,37575,37577],{"class":36,"line":11547},[34,37574,33993],{"class":40},[34,37576,221],{"class":55},[34,37578,33998],{"class":40},[34,37580,37581],{"class":36,"line":11556},[34,37582,34003],{"class":161},[34,37584,37585,37587,37589],{"class":36,"line":11562},[34,37586,34008],{"class":40},[34,37588,221],{"class":55},[34,37590,33998],{"class":40},[34,37592,37593],{"class":36,"line":11570},[34,37594,34017],{"class":161},[34,37596,37597,37599,37601],{"class":36,"line":11575},[34,37598,34022],{"class":40},[34,37600,221],{"class":55},[34,37602,33998],{"class":40},[34,37604,37605],{"class":36,"line":18250},[34,37606,34031],{"class":161},[34,37608,37609,37611,37613],{"class":36,"line":18256},[34,37610,34036],{"class":40},[34,37612,221],{"class":55},[34,37614,33998],{"class":40},[34,37616,37617],{"class":36,"line":18279},[34,37618,1475],{"emptyLinePlaceholder":1474},[34,37620,37621],{"class":36,"line":18285},[34,37622,34049],{"class":161},[34,37624,37625,37627,37629],{"class":36,"line":18308},[34,37626,34054],{"class":40},[34,37628,221],{"class":55},[34,37630,34059],{"class":40},[34,37632,37633],{"class":36,"line":18322},[34,37634,1475],{"emptyLinePlaceholder":1474},[34,37636,37637],{"class":36,"line":18342},[34,37638,1475],{"emptyLinePlaceholder":1474},[34,37640,37641],{"class":36,"line":18348},[34,37642,34072],{"class":161},[34,37644,37645,37647,37649,37651,37653],{"class":36,"line":18359},[34,37646,4854],{"class":55},[34,37648,34079],{"class":40},[34,37650,27689],{"class":55},[34,37652,34084],{"class":44},[34,37654,34087],{"class":40},[34,37656,37657,37659,37661,37663,37665,37667,37669,37671,37673,37675,37677],{"class":36,"line":18382},[34,37658,34092],{"class":44},[34,37660,286],{"class":40},[34,37662,34097],{"class":504},[34,37664,34100],{"class":44},[34,37666,2379],{"class":504},[34,37668,34100],{"class":44},[34,37670,2058],{"class":504},[34,37672,34109],{"class":40},[34,37674,2327],{"class":55},[34,37676,394],{"class":44},[34,37678,296],{"class":40},[34,37680,37681,37683,37685,37687,37689,37691],{"class":36,"line":18404},[34,37682,34092],{"class":44},[34,37684,286],{"class":40},[34,37686,34124],{"class":504},[34,37688,2252],{"class":55},[34,37690,410],{"class":44},[34,37692,101],{"class":40},[34,37694,37695],{"class":36,"line":18409},[34,37696,1475],{"emptyLinePlaceholder":1474},[34,37698,37699],{"class":36,"line":18415},[34,37700,34139],{"class":161},[34,37702,37703],{"class":36,"line":18429},[34,37704,34144],{"class":161},[34,37706,37707,37709,37711],{"class":36,"line":18442},[34,37708,34149],{"class":40},[34,37710,221],{"class":55},[34,37712,33983],{"class":44},[34,37714,37715],{"class":36,"line":18447},[34,37716,34158],{"class":161},[34,37718,37719,37721,37723],{"class":36,"line":18461},[34,37720,34163],{"class":40},[34,37722,221],{"class":55},[34,37724,4738],{"class":44},[34,37726,37727],{"class":36,"line":18466},[34,37728,34172],{"class":161},[34,37730,37731,37733,37735],{"class":36,"line":18472},[34,37732,34177],{"class":40},[34,37734,221],{"class":55},[34,37736,33983],{"class":44},[34,37738,37739],{"class":36,"line":18477},[34,37740,34186],{"class":161},[34,37742,37743,37745,37747],{"class":36,"line":18491},[34,37744,34191],{"class":40},[34,37746,221],{"class":55},[34,37748,4738],{"class":44},[34,37750,37751],{"class":36,"line":18496},[34,37752,34200],{"class":161},[34,37754,37755,37757,37759],{"class":36,"line":18501},[34,37756,34205],{"class":40},[34,37758,221],{"class":55},[34,37760,4738],{"class":44},[34,37762,37763],{"class":36,"line":18515},[34,37764,34214],{"class":161},[34,37766,37767,37769,37771],{"class":36,"line":18527},[34,37768,34219],{"class":40},[34,37770,221],{"class":55},[34,37772,4738],{"class":44},[34,37774,37775],{"class":36,"line":18532},[34,37776,34228],{"class":161},[34,37778,37779,37781,37783,37785,37787],{"class":36,"line":18545},[34,37780,5056],{"class":55},[34,37782,33242],{"class":40},[34,37784,27689],{"class":55},[34,37786,33247],{"class":44},[34,37788,34241],{"class":40},[34,37790,37791],{"class":36,"line":18550},[34,37792,34246],{"class":161},[34,37794,37795,37797,37799],{"class":36,"line":18555},[34,37796,34251],{"class":40},[34,37798,221],{"class":55},[34,37800,34256],{"class":40},[34,37802,37803],{"class":36,"line":18560},[34,37804,34261],{"class":161},[34,37806,37807,37809,37811],{"class":36,"line":18573},[34,37808,34266],{"class":40},[34,37810,221],{"class":55},[34,37812,34271],{"class":40},[34,37814,37815],{"class":36,"line":18578},[34,37816,34277],{"class":161},[34,37818,37819],{"class":36,"line":34274},[34,37820,34283],{"class":40},[34,37822,37823],{"class":36,"line":34280},[34,37824,34289],{"class":161},[34,37826,37827],{"class":36,"line":34286},[34,37828,34295],{"class":161},[34,37830,37831,37833,37835],{"class":36,"line":34292},[34,37832,34301],{"class":40},[34,37834,221],{"class":55},[34,37836,34306],{"class":40},[34,37838,37839],{"class":36,"line":34298},[34,37840,34312],{"class":161},[34,37842,37843,37845,37847,37849,37851,37853,37855],{"class":36,"line":34309},[34,37844,34318],{"class":40},[34,37846,221],{"class":55},[34,37848,34323],{"class":40},[34,37850,34326],{"class":51},[34,37852,221],{"class":55},[34,37854,394],{"class":44},[34,37856,101],{"class":40},[34,37858,37859],{"class":36,"line":34315},[34,37860,34338],{"class":161},[34,37862,37863,37865,37867],{"class":36,"line":34335},[34,37864,34344],{"class":40},[34,37866,221],{"class":55},[34,37868,34349],{"class":40},[34,37870,37871],{"class":36,"line":34341},[34,37872,34355],{"class":161},[34,37874,37875],{"class":36,"line":34352},[34,37876,34361],{"class":40},[34,37878,37879],{"class":36,"line":34358},[34,37880,34367],{"class":161},[34,37882,37883],{"class":36,"line":34364},[34,37884,34373],{"class":40},[34,37886,37887],{"class":36,"line":34370},[34,37888,34379],{"class":161},[34,37890,37891],{"class":36,"line":34376},[34,37892,34385],{"class":40},[34,37894,37895],{"class":36,"line":34382},[34,37896,34391],{"class":161},[34,37898,37899,37901,37903,37905,37907,37909,37911],{"class":36,"line":34388},[34,37900,34397],{"class":40},[34,37902,11127],{"class":55},[34,37904,34402],{"class":40},[34,37906,2252],{"class":55},[34,37908,34407],{"class":40},[34,37910,177],{"class":44},[34,37912,101],{"class":40},[34,37914,37915],{"class":36,"line":34394},[34,37916,34417],{"class":161},[34,37918,37919,37921,37923,37925,37927],{"class":36,"line":34414},[34,37920,34423],{"class":40},[34,37922,11127],{"class":55},[34,37924,34428],{"class":40},[34,37926,4602],{"class":55},[34,37928,34433],{"class":40},[34,37930,37931],{"class":36,"line":34420},[34,37932,34439],{"class":161},[34,37934,37935,37937,37939,37941,37943],{"class":36,"line":34436},[34,37936,34445],{"class":40},[34,37938,11127],{"class":55},[34,37940,34407],{"class":40},[34,37942,177],{"class":44},[34,37944,101],{"class":40},[34,37946,37947],{"class":36,"line":34442},[34,37948,34459],{"class":161},[34,37950,37951,37953,37955,37957,37959],{"class":36,"line":34456},[34,37952,5056],{"class":55},[34,37954,34467],{"class":40},[34,37956,27689],{"class":55},[34,37958,33247],{"class":44},[34,37960,34474],{"class":40},[34,37962,37963],{"class":36,"line":34462},[34,37964,34480],{"class":161},[34,37966,37967,37969,37971],{"class":36,"line":34477},[34,37968,34251],{"class":40},[34,37970,221],{"class":55},[34,37972,34256],{"class":40},[34,37974,37975],{"class":36,"line":34483},[34,37976,34495],{"class":161},[34,37978,37979,37981,37983],{"class":36,"line":34492},[34,37980,34266],{"class":40},[34,37982,221],{"class":55},[34,37984,34271],{"class":40},[34,37986,37987],{"class":36,"line":34498},[34,37988,34510],{"class":161},[34,37990,37991],{"class":36,"line":34507},[34,37992,34516],{"class":40},[34,37994,37995],{"class":36,"line":34513},[34,37996,37997],{"class":161},"            # 验证时不计算梯度以节省内存\u002F计算\n",[34,37999,38000,38002],{"class":36,"line":34519},[34,38001,34522],{"class":55},[34,38003,34525],{"class":40},[34,38005,38006],{"class":36,"line":34528},[34,38007,34531],{"class":161},[34,38009,38010,38013,38015],{"class":36,"line":34534},[34,38011,38012],{"class":40},"                output",[34,38014,221],{"class":55},[34,38016,34306],{"class":40},[34,38018,38019],{"class":36,"line":34545},[34,38020,34548],{"class":161},[34,38022,38023,38026,38028,38030,38032,38034,38036],{"class":36,"line":34551},[34,38024,38025],{"class":40},"                pre_lab",[34,38027,221],{"class":55},[34,38029,34323],{"class":40},[34,38031,34326],{"class":51},[34,38033,221],{"class":55},[34,38035,394],{"class":44},[34,38037,101],{"class":40},[34,38039,38040],{"class":36,"line":34570},[34,38041,34573],{"class":161},[34,38043,38044,38047,38049],{"class":36,"line":34576},[34,38045,38046],{"class":40},"                val_batch_loss",[34,38048,221],{"class":55},[34,38050,34349],{"class":40},[34,38052,38053],{"class":36,"line":34587},[34,38054,34590],{"class":161},[34,38056,38057,38060,38062,38065,38067,38069,38071],{"class":36,"line":34593},[34,38058,38059],{"class":40},"                val_loss",[34,38061,11127],{"class":55},[34,38063,38064],{"class":40},"val_batch_loss.item()",[34,38066,2252],{"class":55},[34,38068,34407],{"class":40},[34,38070,177],{"class":44},[34,38072,101],{"class":40},[34,38074,38075,38078,38080,38082,38084],{"class":36,"line":34613},[34,38076,38077],{"class":40},"                val_corrects",[34,38079,11127],{"class":55},[34,38081,34428],{"class":40},[34,38083,4602],{"class":55},[34,38085,34433],{"class":40},[34,38087,38088],{"class":36,"line":34629},[34,38089,38090],{"class":161},"            # 当前用于验证的样本数量\n",[34,38092,38093,38096,38098,38100,38102],{"class":36,"line":34635},[34,38094,38095],{"class":40},"            val_num",[34,38097,11127],{"class":55},[34,38099,34407],{"class":40},[34,38101,177],{"class":44},[34,38103,101],{"class":40},[34,38105,38106],{"class":36,"line":34649},[34,38107,34652],{"class":161},[34,38109,38110],{"class":36,"line":34655},[34,38111,34658],{"class":161},[34,38113,38114,38116,38118],{"class":36,"line":34661},[34,38115,34664],{"class":40},[34,38117,2379],{"class":55},[34,38119,34669],{"class":40},[34,38121,38122],{"class":36,"line":34672},[34,38123,34675],{"class":161},[34,38125,38126],{"class":36,"line":34678},[34,38127,34681],{"class":161},[34,38129,38130,38132,38134],{"class":36,"line":34684},[34,38131,34687],{"class":40},[34,38133,2379],{"class":55},[34,38135,34669],{"class":40},[34,38137,38138],{"class":36,"line":34694},[34,38139,34697],{"class":161},[34,38141,38142,38144,38146],{"class":36,"line":34700},[34,38143,34703],{"class":40},[34,38145,2379],{"class":55},[34,38147,34708],{"class":40},[34,38149,38150],{"class":36,"line":34711},[34,38151,34714],{"class":161},[34,38153,38154,38156,38158],{"class":36,"line":34717},[34,38155,34720],{"class":40},[34,38157,2379],{"class":55},[34,38159,34708],{"class":40},[34,38161,38162],{"class":36,"line":34727},[34,38163,1475],{"emptyLinePlaceholder":1474},[34,38165,38166],{"class":36,"line":34732},[34,38167,34735],{"class":161},[34,38169,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198,38200,38202,38204,38206,38208],{"class":36,"line":34738},[34,38171,34092],{"class":44},[34,38173,286],{"class":40},[34,38175,5245],{"class":504},[34,38177,34100],{"class":44},[34,38179,34749],{"class":504},[34,38181,2687],{"class":44},[34,38183,34754],{"class":55},[34,38185,2737],{"class":44},[34,38187,34759],{"class":504},[34,38189,2687],{"class":44},[34,38191,34754],{"class":55},[34,38193,2737],{"class":44},[34,38195,5245],{"class":504},[34,38197,34770],{"class":40},[34,38199,2327],{"class":55},[34,38201,394],{"class":44},[34,38203,34777],{"class":40},[34,38205,2327],{"class":55},[34,38207,394],{"class":44},[34,38209,34784],{"class":40},[34,38211,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246,38248,38250],{"class":36,"line":34787},[34,38213,34092],{"class":44},[34,38215,286],{"class":40},[34,38217,5245],{"class":504},[34,38219,34100],{"class":44},[34,38221,34798],{"class":504},[34,38223,2687],{"class":44},[34,38225,34754],{"class":55},[34,38227,2737],{"class":44},[34,38229,34807],{"class":504},[34,38231,2687],{"class":44},[34,38233,34754],{"class":55},[34,38235,2737],{"class":44},[34,38237,5245],{"class":504},[34,38239,34818],{"class":40},[34,38241,2327],{"class":55},[34,38243,394],{"class":44},[34,38245,34825],{"class":40},[34,38247,2327],{"class":55},[34,38249,394],{"class":44},[34,38251,34784],{"class":40},[34,38253,38254],{"class":36,"line":34834},[34,38255,1475],{"emptyLinePlaceholder":1474},[34,38257,38258],{"class":36,"line":34839},[34,38259,34842],{"class":161},[34,38261,38262,38264,38266,38268,38270,38272,38274],{"class":36,"line":34845},[34,38263,4150],{"class":55},[34,38265,34850],{"class":40},[34,38267,2327],{"class":55},[34,38269,394],{"class":44},[34,38271,2731],{"class":40},[34,38273,2751],{"class":55},[34,38275,34861],{"class":40},[34,38277,38278],{"class":36,"line":34864},[34,38279,34867],{"class":161},[34,38281,38282,38284,38286,38288,38290,38292,38294],{"class":36,"line":34870},[34,38283,34873],{"class":40},[34,38285,989],{"class":44},[34,38287,221],{"class":55},[34,38289,34880],{"class":40},[34,38291,2327],{"class":55},[34,38293,394],{"class":44},[34,38295,34887],{"class":40},[34,38297,38298],{"class":36,"line":34890},[34,38299,34893],{"class":161},[34,38301,38302],{"class":36,"line":34896},[34,38303,34899],{"class":161},[34,38305,38306,38308,38310],{"class":36,"line":34902},[34,38307,34905],{"class":40},[34,38309,221],{"class":55},[34,38311,33955],{"class":40},[34,38313,38314],{"class":36,"line":34912},[34,38315,1475],{"emptyLinePlaceholder":1474},[34,38317,38318],{"class":36,"line":34917},[34,38319,34920],{"class":161},[34,38321,38322,38324,38326,38328,38330],{"class":36,"line":34923},[34,38323,34926],{"class":40},[34,38325,221],{"class":55},[34,38327,34931],{"class":40},[34,38329,2327],{"class":55},[34,38331,34936],{"class":40},[34,38333,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368],{"class":36,"line":34939},[34,38335,34092],{"class":44},[34,38337,286],{"class":40},[34,38339,34946],{"class":504},[34,38341,2687],{"class":44},[34,38343,34951],{"class":55},[34,38345,2737],{"class":44},[34,38347,2339],{"class":504},[34,38349,2687],{"class":44},[34,38351,34951],{"class":55},[34,38353,2737],{"class":44},[34,38355,34964],{"class":504},[34,38357,34967],{"class":40},[34,38359,34970],{"class":55},[34,38361,2698],{"class":44},[34,38363,34975],{"class":40},[34,38365,2131],{"class":55},[34,38367,2698],{"class":44},[34,38369,296],{"class":40},[34,38371,38372],{"class":36,"line":34984},[34,38373,38374],{"class":161},"    # 选择最优参数并保存\n",[34,38376,38377],{"class":36,"line":34990},[34,38378,38379],{"class":161},"    # 保存最佳模型权重字典\n",[34,38381,38382,38385,38387],{"class":36,"line":34996},[34,38383,38384],{"class":40},"    torch.save(best_model_wts,",[34,38386,35008],{"class":504},[34,38388,101],{"class":40},[34,38390,38391],{"class":36,"line":35002},[34,38392,35028],{"class":161},[34,38394,38395,38397,38399,38401,38403,38405],{"class":36,"line":35013},[34,38396,35034],{"class":40},[34,38398,221],{"class":55},[34,38400,35039],{"class":40},[34,38402,35042],{"class":51},[34,38404,221],{"class":55},[34,38406,3204],{"class":40},[34,38408,38409,38411,38413,38415],{"class":36,"line":35019},[34,38410,35052],{"class":504},[34,38412,2650],{"class":40},[34,38414,35057],{"class":44},[34,38416,35060],{"class":40},[34,38418,38419,38421],{"class":36,"line":35025},[34,38420,35066],{"class":504},[34,38422,35069],{"class":40},[34,38424,38425,38427],{"class":36,"line":35031},[34,38426,35075],{"class":504},[34,38428,35078],{"class":40},[34,38430,38431,38433],{"class":36,"line":35049},[34,38432,35084],{"class":504},[34,38434,35087],{"class":40},[34,38436,38437,38439],{"class":36,"line":35063},[34,38438,35093],{"class":504},[34,38440,35096],{"class":40},[34,38442,38443],{"class":36,"line":35072},[34,38444,35102],{"class":40},[34,38446,38447],{"class":36,"line":35081},[34,38448,35108],{"class":161},[34,38450,38451,38453],{"class":36,"line":35090},[34,38452,5743],{"class":55},[34,38454,35116],{"class":40},[34,38456,38457],{"class":36,"line":35099},[34,38458,1475],{"emptyLinePlaceholder":1474},[34,38460,38461],{"class":36,"line":35105},[34,38462,35127],{"class":161},[34,38464,38465,38467,38469],{"class":36,"line":35111},[34,38466,33588],{"class":55},[34,38468,35135],{"class":3617},[34,38470,35138],{"class":40},[34,38472,38473],{"class":36,"line":35119},[34,38474,35144],{"class":161},[34,38476,38477,38479,38481,38483,38485,38487,38489,38491],{"class":36,"line":35124},[34,38478,35150],{"class":40},[34,38480,33334],{"class":51},[34,38482,221],{"class":55},[34,38484,286],{"class":40},[34,38486,2293],{"class":44},[34,38488,291],{"class":40},[34,38490,247],{"class":44},[34,38492,296],{"class":40},[34,38494,38495],{"class":36,"line":35130},[34,38496,35170],{"class":161},[34,38498,38499],{"class":36,"line":35141},[34,38500,35176],{"class":161},[34,38502,38503],{"class":36,"line":35147},[34,38504,35182],{"class":161},[34,38506,38507,38509,38511,38513,38515,38517,38519],{"class":36,"line":35167},[34,38508,33368],{"class":40},[34,38510,394],{"class":44},[34,38512,291],{"class":40},[34,38514,332],{"class":44},[34,38516,291],{"class":40},[34,38518,394],{"class":44},[34,38520,101],{"class":40},[34,38522,38523],{"class":36,"line":35173},[34,38524,35205],{"class":161},[34,38526,38527],{"class":36,"line":35179},[34,38528,35211],{"class":161},[34,38530,38531],{"class":36,"line":35185},[34,38532,35217],{"class":161},[34,38534,38535],{"class":36,"line":35202},[34,38536,35223],{"class":161},[34,38538,38539],{"class":36,"line":35208},[34,38540,35229],{"class":161},[34,38542,38543,38545,38547,38549,38551,38553,38555,38557,38559],{"class":36,"line":35214},[34,38544,35235],{"class":40},[34,38546,35238],{"class":504},[34,38548,35241],{"class":40},[34,38550,35244],{"class":504},[34,38552,291],{"class":40},[34,38554,35249],{"class":51},[34,38556,221],{"class":55},[34,38558,35254],{"class":504},[34,38560,101],{"class":40},[34,38562,38563,38565,38567,38569,38571,38573,38575,38577,38579],{"class":36,"line":35220},[34,38564,35235],{"class":40},[34,38566,35238],{"class":504},[34,38568,35266],{"class":40},[34,38570,35269],{"class":504},[34,38572,291],{"class":40},[34,38574,35249],{"class":51},[34,38576,221],{"class":55},[34,38578,35278],{"class":504},[34,38580,101],{"class":40},[34,38582,38583],{"class":36,"line":35226},[34,38584,35286],{"class":161},[34,38586,38587],{"class":36,"line":35232},[34,38588,35292],{"class":40},[34,38590,38591],{"class":36,"line":35259},[34,38592,35298],{"class":161},[34,38594,38595,38597,38599],{"class":36,"line":35283},[34,38596,35304],{"class":40},[34,38598,35307],{"class":504},[34,38600,101],{"class":40},[34,38602,38603,38605,38607],{"class":36,"line":35289},[34,38604,35315],{"class":40},[34,38606,35318],{"class":504},[34,38608,101],{"class":40},[34,38610,38611],{"class":36,"line":35295},[34,38612,35326],{"class":161},[34,38614,38615,38617,38619,38621,38623,38625,38627],{"class":36,"line":35301},[34,38616,33368],{"class":40},[34,38618,394],{"class":44},[34,38620,291],{"class":40},[34,38622,332],{"class":44},[34,38624,291],{"class":40},[34,38626,332],{"class":44},[34,38628,101],{"class":40},[34,38630,38631,38633,38635,38637,38639,38641,38643,38645,38647],{"class":36,"line":35312},[34,38632,35235],{"class":40},[34,38634,35238],{"class":504},[34,38636,35353],{"class":40},[34,38638,35244],{"class":504},[34,38640,291],{"class":40},[34,38642,35249],{"class":51},[34,38644,221],{"class":55},[34,38646,35364],{"class":504},[34,38648,101],{"class":40},[34,38650,38651,38653,38655,38657,38659,38661,38663,38665,38667],{"class":36,"line":35323},[34,38652,35235],{"class":40},[34,38654,35238],{"class":504},[34,38656,35376],{"class":40},[34,38658,35269],{"class":504},[34,38660,291],{"class":40},[34,38662,35249],{"class":51},[34,38664,221],{"class":55},[34,38666,35387],{"class":504},[34,38668,101],{"class":40},[34,38670,38671],{"class":36,"line":35329},[34,38672,35395],{"class":161},[34,38674,38675],{"class":36,"line":35346},[34,38676,35292],{"class":40},[34,38678,38679,38681,38683],{"class":36,"line":35369},[34,38680,35304],{"class":40},[34,38682,35238],{"class":504},[34,38684,101],{"class":40},[34,38686,38687,38689,38691],{"class":36,"line":35392},[34,38688,35315],{"class":40},[34,38690,35417],{"class":504},[34,38692,101],{"class":40},[34,38694,38695],{"class":36,"line":35398},[34,38696,35425],{"class":40},[34,38698,38699],{"class":36,"line":35403},[34,38700,1475],{"emptyLinePlaceholder":1474},[34,38702,38703],{"class":36,"line":35412},[34,38704,35436],{"class":161},[34,38706,38707,38709,38711,38713,38715],{"class":36,"line":35422},[34,38708,3189],{"class":55},[34,38710,32862],{"class":44},[34,38712,4602],{"class":55},[34,38714,32867],{"class":504},[34,38716,5392],{"class":40},[34,38718,38719],{"class":36,"line":35428},[34,38720,35455],{"class":161},[34,38722,38723,38726,38728],{"class":36,"line":35433},[34,38724,38725],{"class":40},"    AlexNet",[34,38727,221],{"class":55},[34,38729,38730],{"class":40},"AlexNet()\n",[34,38732,38733,38735,38737],{"class":36,"line":35439},[34,38734,35472],{"class":40},[34,38736,221],{"class":55},[34,38738,35477],{"class":40},[34,38740,38741,38743,38745,38748,38750,38752,38754],{"class":36,"line":35452},[34,38742,35034],{"class":40},[34,38744,221],{"class":55},[34,38746,38747],{"class":40},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[34,38749,35490],{"class":51},[34,38751,221],{"class":55},[34,38753,1249],{"class":44},[34,38755,101],{"class":40},[34,38757,38758],{"class":36,"line":35458},[34,38759,35502],{"class":40},[1772,38761,38762],{"start":171},[1775,38763,35515],{},[24,38765,38767],{"className":26,"code":38766,"language":28,"meta":29,"style":29},"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",[31,38768,38769,38775,38785,38795,38805,38809,38819,38829,38840,38844,38848,38852,38860,38876,38886,38902,38912,38926,38930,38940,38950,38960,38966,38970,38974,38982,38986,39002,39010,39014,39018,39026,39034,39038,39042,39046,39050,39056,39060,39070,39078,39086,39090,39094,39098,39106,39110,39126,39130,39134,39138,39150,39154,39166,39170,39174,39186,39190,39200,39204,39208,39220,39224,39232,39236,39240,39248,39252,39260,39264,39268,39272,39276,39280,39296,39304,39308,39312,39360,39366,39370,39380,39388,39396,39400,39404,39408,39412,39420,39424,39440,39444,39452,39460],{"__ignoreMap":29},[34,38770,38771,38773],{"class":36,"line":37},[34,38772,32036],{"class":55},[34,38774,32039],{"class":40},[34,38776,38777,38779,38781,38783],{"class":36,"line":165},[34,38778,32036],{"class":55},[34,38780,33057],{"class":40},[34,38782,33025],{"class":55},[34,38784,33062],{"class":40},[34,38786,38787,38789,38791,38793],{"class":36,"line":171},[34,38788,32379],{"class":55},[34,38790,35543],{"class":40},[34,38792,32036],{"class":55},[34,38794,35548],{"class":40},[34,38796,38797,38799,38801,38803],{"class":36,"line":182},[34,38798,32379],{"class":55},[34,38800,33040],{"class":40},[34,38802,32036],{"class":55},[34,38804,33045],{"class":40},[34,38806,38807],{"class":36,"line":188},[34,38808,35563],{"class":161},[34,38810,38811,38813,38815,38817],{"class":36,"line":518},[34,38812,32379],{"class":55},[34,38814,33010],{"class":40},[34,38816,32036],{"class":55},[34,38818,33015],{"class":40},[34,38820,38821,38823,38825,38827],{"class":36,"line":524},[34,38822,32379],{"class":55},[34,38824,33555],{"class":40},[34,38826,32036],{"class":55},[34,38828,37198],{"class":40},[34,38830,38831,38833,38836,38838],{"class":36,"line":530},[34,38832,32379],{"class":55},[34,38834,38835],{"class":40}," 练习.AlexNet.model ",[34,38837,32036],{"class":55},[34,38839,37198],{"class":40},[34,38841,38842],{"class":36,"line":624},[34,38843,1475],{"emptyLinePlaceholder":1474},[34,38845,38846],{"class":36,"line":630},[34,38847,1475],{"emptyLinePlaceholder":1474},[34,38849,38850],{"class":36,"line":636},[34,38851,35592],{"class":161},[34,38853,38854,38856,38858],{"class":36,"line":1513},[34,38855,33588],{"class":55},[34,38857,35599],{"class":3617},[34,38859,33594],{"class":40},[34,38861,38862,38864,38866,38868,38870,38872,38874],{"class":36,"line":1519},[34,38863,35606],{"class":40},[34,38865,221],{"class":55},[34,38867,33097],{"class":40},[34,38869,33100],{"class":51},[34,38871,221],{"class":55},[34,38873,33105],{"class":504},[34,38875,33108],{"class":40},[34,38877,38878,38880,38882,38884],{"class":36,"line":3283},[34,38879,35623],{"class":51},[34,38881,221],{"class":55},[34,38883,35628],{"class":44},[34,38885,33108],{"class":40},[34,38887,38888,38890,38892,38894,38896,38898,38900],{"class":36,"line":3297},[34,38889,35635],{"class":51},[34,38891,221],{"class":55},[34,38893,33135],{"class":40},[34,38895,218],{"class":51},[34,38897,221],{"class":55},[34,38899,37090],{"class":44},[34,38901,33145],{"class":40},[34,38903,38904,38906,38908,38910],{"class":36,"line":3302},[34,38905,35652],{"class":51},[34,38907,221],{"class":55},[34,38909,33118],{"class":44},[34,38911,101],{"class":40},[34,38913,38914,38916,38918,38920,38922,38924],{"class":36,"line":3308},[34,38915,35663],{"class":40},[34,38917,221],{"class":55},[34,38919,33175],{"class":40},[34,38921,33178],{"class":51},[34,38923,221],{"class":55},[34,38925,35674],{"class":40},[34,38927,38928],{"class":36,"line":3328},[34,38929,35679],{"class":161},[34,38931,38932,38934,38936,38938],{"class":36,"line":3333},[34,38933,35684],{"class":51},[34,38935,221],{"class":55},[34,38937,394],{"class":44},[34,38939,33108],{"class":40},[34,38941,38942,38944,38946,38948],{"class":36,"line":3347},[34,38943,35695],{"class":51},[34,38945,221],{"class":55},[34,38947,33118],{"class":44},[34,38949,33108],{"class":40},[34,38951,38952,38954,38956,38958],{"class":36,"line":3352},[34,38953,35706],{"class":51},[34,38955,221],{"class":55},[34,38957,177],{"class":44},[34,38959,101],{"class":40},[34,38961,38962,38964],{"class":36,"line":3381},[34,38963,5743],{"class":55},[34,38965,35719],{"class":40},[34,38967,38968],{"class":36,"line":3386},[34,38969,1475],{"emptyLinePlaceholder":1474},[34,38971,38972],{"class":36,"line":3403},[34,38973,35728],{"class":161},[34,38975,38976,38978,38980],{"class":36,"line":3408},[34,38977,33588],{"class":55},[34,38979,35735],{"class":3617},[34,38981,35738],{"class":40},[34,38983,38984],{"class":36,"line":3413},[34,38985,35743],{"class":161},[34,38987,38988,38990,38992,38994,38996,38998,39000],{"class":36,"line":3418},[34,38989,32879],{"class":40},[34,38991,221],{"class":55},[34,38993,32886],{"class":504},[34,38995,3358],{"class":55},[34,38997,32891],{"class":40},[34,38999,3355],{"class":55},[34,39001,35760],{"class":504},[34,39003,39004,39006,39008],{"class":36,"line":3432},[34,39005,32931],{"class":40},[34,39007,221],{"class":55},[34,39009,33930],{"class":40},[34,39011,39012],{"class":36,"line":3437},[34,39013,1475],{"emptyLinePlaceholder":1474},[34,39015,39016],{"class":36,"line":4230},[34,39017,35777],{"class":161},[34,39019,39020,39022,39024],{"class":36,"line":4244},[34,39021,35782],{"class":40},[34,39023,221],{"class":55},[34,39025,33983],{"class":44},[34,39027,39028,39030,39032],{"class":36,"line":4252},[34,39029,35791],{"class":40},[34,39031,221],{"class":55},[34,39033,4738],{"class":44},[34,39035,39036],{"class":36,"line":4257},[34,39037,1475],{"emptyLinePlaceholder":1474},[34,39039,39040],{"class":36,"line":4263},[34,39041,35804],{"class":161},[34,39043,39044],{"class":36,"line":4269},[34,39045,35809],{"class":161},[34,39047,39048],{"class":36,"line":4274},[34,39049,35814],{"class":161},[34,39051,39052,39054],{"class":36,"line":9598},[34,39053,35819],{"class":55},[34,39055,34525],{"class":40},[34,39057,39058],{"class":36,"line":9622},[34,39059,35826],{"class":161},[34,39061,39062,39064,39066,39068],{"class":36,"line":9627},[34,39063,5056],{"class":55},[34,39065,35833],{"class":40},[34,39067,27689],{"class":55},[34,39069,35838],{"class":40},[34,39071,39072,39074,39076],{"class":36,"line":9633},[34,39073,35843],{"class":40},[34,39075,221],{"class":55},[34,39077,35848],{"class":40},[34,39079,39080,39082,39084],{"class":36,"line":9660},[34,39081,35853],{"class":40},[34,39083,221],{"class":55},[34,39085,35858],{"class":40},[34,39087,39088],{"class":36,"line":9665},[34,39089,35863],{"class":161},[34,39091,39092],{"class":36,"line":9671},[34,39093,34516],{"class":40},[34,39095,39096],{"class":36,"line":9683},[34,39097,35872],{"class":161},[34,39099,39100,39102,39104],{"class":36,"line":9695},[34,39101,34301],{"class":40},[34,39103,221],{"class":55},[34,39105,35881],{"class":40},[34,39107,39108],{"class":36,"line":9707},[34,39109,35886],{"class":161},[34,39111,39112,39114,39116,39118,39120,39122,39124],{"class":36,"line":11366},[34,39113,34318],{"class":40},[34,39115,221],{"class":55},[34,39117,34323],{"class":40},[34,39119,34326],{"class":51},[34,39121,221],{"class":55},[34,39123,394],{"class":44},[34,39125,101],{"class":40},[34,39127,39128],{"class":36,"line":11391},[34,39129,35907],{"class":161},[34,39131,39132],{"class":36,"line":11414},[34,39133,35912],{"class":161},[34,39135,39136],{"class":36,"line":11438},[34,39137,35917],{"class":161},[34,39139,39140,39142,39144,39146,39148],{"class":36,"line":11443},[34,39141,35922],{"class":40},[34,39143,11127],{"class":55},[34,39145,34428],{"class":40},[34,39147,4602],{"class":55},[34,39149,35931],{"class":40},[34,39151,39152],{"class":36,"line":11448},[34,39153,35936],{"class":161},[34,39155,39156,39158,39160,39162,39164],{"class":36,"line":11453},[34,39157,35941],{"class":40},[34,39159,11127],{"class":55},[34,39161,35946],{"class":40},[34,39163,177],{"class":44},[34,39165,101],{"class":40},[34,39167,39168],{"class":36,"line":11462},[34,39169,1475],{"emptyLinePlaceholder":1474},[34,39171,39172],{"class":36,"line":11467},[34,39173,35959],{"class":161},[34,39175,39176,39178,39180,39182,39184],{"class":36,"line":11473},[34,39177,35964],{"class":40},[34,39179,221],{"class":55},[34,39181,35969],{"class":40},[34,39183,2379],{"class":55},[34,39185,35974],{"class":40},[34,39187,39188],{"class":36,"line":11494},[34,39189,35979],{"class":161},[34,39191,39192,39194,39196,39198],{"class":36,"line":11500},[34,39193,34092],{"class":44},[34,39195,286],{"class":40},[34,39197,35988],{"class":504},[34,39199,35991],{"class":40},[34,39201,39202],{"class":36,"line":11514},[34,39203,1475],{"emptyLinePlaceholder":1474},[34,39205,39206],{"class":36,"line":11520},[34,39207,36000],{"class":161},[34,39209,39210,39212,39214,39216,39218],{"class":36,"line":11547},[34,39211,3189],{"class":55},[34,39213,32862],{"class":44},[34,39215,4602],{"class":55},[34,39217,32867],{"class":504},[34,39219,5392],{"class":40},[34,39221,39222],{"class":36,"line":11556},[34,39223,36017],{"class":161},[34,39225,39226,39228,39230],{"class":36,"line":11562},[34,39227,32931],{"class":40},[34,39229,221],{"class":55},[34,39231,38730],{"class":40},[34,39233,39234],{"class":36,"line":11570},[34,39235,36030],{"class":161},[34,39237,39238],{"class":36,"line":11575},[34,39239,36035],{"class":161},[34,39241,39242,39244,39246],{"class":36,"line":18250},[34,39243,36040],{"class":40},[34,39245,36043],{"class":504},[34,39247,296],{"class":40},[34,39249,39250],{"class":36,"line":18256},[34,39251,36050],{"class":161},[34,39253,39254,39256,39258],{"class":36,"line":18279},[34,39255,35663],{"class":40},[34,39257,221],{"class":55},[34,39259,36059],{"class":40},[34,39261,39262],{"class":36,"line":18285},[34,39263,36064],{"class":161},[34,39265,39266],{"class":36,"line":18308},[34,39267,36069],{"class":40},[34,39269,39270],{"class":36,"line":18322},[34,39271,1475],{"emptyLinePlaceholder":1474},[34,39273,39274],{"class":36,"line":18342},[34,39275,36078],{"class":161},[34,39277,39278],{"class":36,"line":18348},[34,39279,36083],{"class":161},[34,39281,39282,39284,39286,39288,39290,39292,39294],{"class":36,"line":18359},[34,39283,32879],{"class":40},[34,39285,221],{"class":55},[34,39287,32886],{"class":504},[34,39289,3358],{"class":55},[34,39291,32891],{"class":40},[34,39293,3355],{"class":55},[34,39295,35760],{"class":504},[34,39297,39298,39300,39302],{"class":36,"line":18382},[34,39299,32931],{"class":40},[34,39301,221],{"class":55},[34,39303,33930],{"class":40},[34,39305,39306],{"class":36,"line":18404},[34,39307,36112],{"class":161},[34,39309,39310],{"class":36,"line":18409},[34,39311,36117],{"class":161},[34,39313,39314,39316,39318,39320,39322,39324,39326,39328,39330,39332,39334,39336,39338,39340,39342,39344,39346,39348,39350,39352,39354,39356,39358],{"class":36,"line":18415},[34,39315,36122],{"class":40},[34,39317,221],{"class":55},[34,39319,2681],{"class":40},[34,39321,36129],{"class":504},[34,39323,291],{"class":40},[34,39325,36134],{"class":504},[34,39327,291],{"class":40},[34,39329,36139],{"class":504},[34,39331,291],{"class":40},[34,39333,36144],{"class":504},[34,39335,291],{"class":40},[34,39337,36149],{"class":504},[34,39339,291],{"class":40},[34,39341,36154],{"class":504},[34,39343,291],{"class":40},[34,39345,36159],{"class":504},[34,39347,291],{"class":40},[34,39349,36164],{"class":504},[34,39351,291],{"class":40},[34,39353,36169],{"class":504},[34,39355,291],{"class":40},[34,39357,36174],{"class":504},[34,39359,34887],{"class":40},[34,39361,39362,39364],{"class":36,"line":18429},[34,39363,35819],{"class":55},[34,39365,34525],{"class":40},[34,39367,39368],{"class":36,"line":18442},[34,39369,36187],{"class":161},[34,39371,39372,39374,39376,39378],{"class":36,"line":18447},[34,39373,5056],{"class":55},[34,39375,36194],{"class":40},[34,39377,27689],{"class":55},[34,39379,35838],{"class":40},[34,39381,39382,39384,39386],{"class":36,"line":18461},[34,39383,34251],{"class":40},[34,39385,221],{"class":55},[34,39387,34256],{"class":40},[34,39389,39390,39392,39394],{"class":36,"line":18466},[34,39391,34266],{"class":40},[34,39393,221],{"class":55},[34,39395,34271],{"class":40},[34,39397,39398],{"class":36,"line":18472},[34,39399,1475],{"emptyLinePlaceholder":1474},[34,39401,39402],{"class":36,"line":18477},[34,39403,36223],{"class":161},[34,39405,39406],{"class":36,"line":18491},[34,39407,34516],{"class":40},[34,39409,39410],{"class":36,"line":18496},[34,39411,36232],{"class":161},[34,39413,39414,39416,39418],{"class":36,"line":18501},[34,39415,34301],{"class":40},[34,39417,221],{"class":55},[34,39419,34306],{"class":40},[34,39421,39422],{"class":36,"line":18515},[34,39423,36245],{"class":161},[34,39425,39426,39428,39430,39432,39434,39436,39438],{"class":36,"line":18527},[34,39427,34318],{"class":40},[34,39429,221],{"class":55},[34,39431,34323],{"class":40},[34,39433,34326],{"class":51},[34,39435,221],{"class":55},[34,39437,394],{"class":44},[34,39439,101],{"class":40},[34,39441,39442],{"class":36,"line":18532},[34,39443,36266],{"class":161},[34,39445,39446,39448,39450],{"class":36,"line":18545},[34,39447,36271],{"class":40},[34,39449,221],{"class":55},[34,39451,36276],{"class":40},[34,39453,39454,39456,39458],{"class":36,"line":18550},[34,39455,36281],{"class":40},[34,39457,221],{"class":55},[34,39459,36286],{"class":40},[34,39461,39462,39464,39466,39468,39470,39472,39474,39476],{"class":36,"line":18555},[34,39463,36291],{"class":44},[34,39465,286],{"class":40},[34,39467,36296],{"class":504},[34,39469,36299],{"class":40},[34,39471,36302],{"class":504},[34,39473,291],{"class":40},[34,39475,36307],{"class":504},[34,39477,36310],{"class":40},[19,39479,39481],{"id":39480},"_22vgg","2.2.VGG",[1353,39483,39485],{"id":39484},"_221原理","2.2.1.原理",[103,39487,39488],{},[109,39489],{"alt":29,"src":39490},"\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",[103,39492,39493],{},[109,39494],{"alt":29,"src":39495},"\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",[103,39497,39498],{},[109,39499],{"alt":29,"src":39500},"\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",[103,39502,39503],{},"参数详细描述：",[103,39505,39506],{},[109,39507],{"alt":29,"src":39508},"\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",[103,39510,39511],{},[109,39512],{"alt":29,"src":39513},"\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",[103,39515,39516],{},[109,39517],{"alt":29,"src":39518},"\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",[103,39520,39521],{},[109,39522],{"alt":29,"src":39523},"\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",[103,39525,39526],{},[109,39527],{"alt":29,"src":39528},"\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",[1353,39530,39532],{"id":39531},"_222代码实现","2.2.2.代码实现",[1772,39534,39535],{},[1775,39536,39537],{},"网络搭建",[24,39539,39541],{"className":26,"code":39540,"language":28,"meta":29,"style":29},"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",[31,39542,39543,39549,39561,39571,39581,39585,39602,39610,39629,39634,39639,39651,39689,39694,39730,39734,39763,39768,39773,39784,39820,39824,39860,39864,39892,39896,39901,39912,39948,39952,39988,39992,40028,40032,40060,40064,40069,40080,40117,40121,40157,40161,40197,40201,40229,40233,40238,40249,40285,40289,40325,40329,40365,40369,40397,40401,40406,40417,40422,40427,40432,40453,40457,40469,40473,40485,40489,40493,40498,40503,40518,40523,40533,40538,40553,40558,40576,40581,40590,40595,40605,40610,40615,40629,40634,40648,40656,40660,40664,40672,40683,40694,40705,40716,40727,40738,40744,40748,40753,40766,40786,40792,40801],{"__ignoreMap":29},[34,39544,39545,39547],{"class":36,"line":37},[34,39546,32036],{"class":55},[34,39548,32039],{"class":40},[34,39550,39551,39553,39556,39558],{"class":36,"line":165},[34,39552,32379],{"class":55},[34,39554,39555],{"class":40}," sympy.core.sympify ",[34,39557,32036],{"class":55},[34,39559,39560],{"class":40}," kernS\n",[34,39562,39563,39565,39567,39569],{"class":36,"line":171},[34,39564,32379],{"class":55},[34,39566,32382],{"class":40},[34,39568,32036],{"class":55},[34,39570,32387],{"class":40},[34,39572,39573,39575,39577,39579],{"class":36,"line":182},[34,39574,32379],{"class":55},[34,39576,32399],{"class":40},[34,39578,32036],{"class":55},[34,39580,32404],{"class":40},[34,39582,39583],{"class":36,"line":188},[34,39584,1475],{"emptyLinePlaceholder":1474},[34,39586,39587,39589,39592,39594,39596,39598,39600],{"class":36,"line":518},[34,39588,16340],{"class":55},[34,39590,39591],{"class":3617}," VGG16",[34,39593,286],{"class":40},[34,39595,32420],{"class":3617},[34,39597,2353],{"class":40},[34,39599,32425],{"class":3617},[34,39601,32428],{"class":40},[34,39603,39604,39606,39608],{"class":36,"line":524},[34,39605,32443],{"class":55},[34,39607,32446],{"class":44},[34,39609,32449],{"class":40},[34,39611,39612,39614,39616,39619,39621,39623,39625,39627],{"class":36,"line":530},[34,39613,32459],{"class":44},[34,39615,286],{"class":40},[34,39617,39618],{"class":44},"VGG16",[34,39620,48],{"class":40},[34,39622,32465],{"class":44},[34,39624,32468],{"class":40},[34,39626,32471],{"class":44},[34,39628,3630],{"class":40},[34,39630,39631],{"class":36,"line":624},[34,39632,39633],{"class":161},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[34,39635,39636],{"class":36,"line":630},[34,39637,39638],{"class":161},"        # 这里用的是灰度图\n",[34,39640,39641,39643,39646,39648],{"class":36,"line":636},[34,39642,32487],{"class":44},[34,39644,39645],{"class":40},".block1",[34,39647,221],{"class":55},[34,39649,39650],{"class":40},"nn.Sequential(\n",[34,39652,39653,39656,39658,39660,39662,39664,39666,39668,39670,39672,39674,39676,39678,39680,39682,39684,39686],{"class":36,"line":1513},[34,39654,39655],{"class":40},"            nn.Conv2d(",[34,39657,32498],{"class":51},[34,39659,221],{"class":55},[34,39661,394],{"class":44},[34,39663,291],{"class":40},[34,39665,32507],{"class":51},[34,39667,221],{"class":55},[34,39669,2012],{"class":44},[34,39671,291],{"class":40},[34,39673,32516],{"class":51},[34,39675,221],{"class":55},[34,39677,337],{"class":44},[34,39679,291],{"class":40},[34,39681,32525],{"class":51},[34,39683,221],{"class":55},[34,39685,394],{"class":44},[34,39687,39688],{"class":40},"),\n",[34,39690,39691],{"class":36,"line":1519},[34,39692,39693],{"class":40},"            nn.ReLU(),\n",[34,39695,39696,39698,39700,39702,39704,39706,39708,39710,39712,39714,39716,39718,39720,39722,39724,39726,39728],{"class":36,"line":3283},[34,39697,39655],{"class":40},[34,39699,32498],{"class":51},[34,39701,221],{"class":55},[34,39703,2012],{"class":44},[34,39705,291],{"class":40},[34,39707,32507],{"class":51},[34,39709,221],{"class":55},[34,39711,2012],{"class":44},[34,39713,291],{"class":40},[34,39715,32516],{"class":51},[34,39717,221],{"class":55},[34,39719,337],{"class":44},[34,39721,291],{"class":40},[34,39723,32525],{"class":51},[34,39725,221],{"class":55},[34,39727,394],{"class":44},[34,39729,39688],{"class":40},[34,39731,39732],{"class":36,"line":3297},[34,39733,39693],{"class":40},[34,39735,39736,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761],{"class":36,"line":3302},[34,39737,39738],{"class":40},"            nn.MaxPool2d(",[34,39740,32516],{"class":51},[34,39742,221],{"class":55},[34,39744,332],{"class":44},[34,39746,291],{"class":40},[34,39748,32571],{"class":51},[34,39750,221],{"class":55},[34,39752,332],{"class":44},[34,39754,291],{"class":40},[34,39756,32525],{"class":51},[34,39758,221],{"class":55},[34,39760,177],{"class":44},[34,39762,101],{"class":40},[34,39764,39765],{"class":36,"line":3308},[34,39766,39767],{"class":40},"        )\n",[34,39769,39770],{"class":36,"line":3328},[34,39771,39772],{"class":161},"        # 第二层\n",[34,39774,39775,39777,39780,39782],{"class":36,"line":3333},[34,39776,32487],{"class":44},[34,39778,39779],{"class":40},".block2",[34,39781,221],{"class":55},[34,39783,39650],{"class":40},[34,39785,39786,39788,39790,39792,39794,39796,39798,39800,39802,39804,39806,39808,39810,39812,39814,39816,39818],{"class":36,"line":3347},[34,39787,39655],{"class":40},[34,39789,32498],{"class":51},[34,39791,221],{"class":55},[34,39793,2012],{"class":44},[34,39795,291],{"class":40},[34,39797,32507],{"class":51},[34,39799,221],{"class":55},[34,39801,33711],{"class":44},[34,39803,291],{"class":40},[34,39805,32516],{"class":51},[34,39807,221],{"class":55},[34,39809,337],{"class":44},[34,39811,291],{"class":40},[34,39813,32525],{"class":51},[34,39815,221],{"class":55},[34,39817,394],{"class":44},[34,39819,39688],{"class":40},[34,39821,39822],{"class":36,"line":3352},[34,39823,39693],{"class":40},[34,39825,39826,39828,39830,39832,39834,39836,39838,39840,39842,39844,39846,39848,39850,39852,39854,39856,39858],{"class":36,"line":3381},[34,39827,39655],{"class":40},[34,39829,32498],{"class":51},[34,39831,221],{"class":55},[34,39833,33711],{"class":44},[34,39835,291],{"class":40},[34,39837,32507],{"class":51},[34,39839,221],{"class":55},[34,39841,33711],{"class":44},[34,39843,291],{"class":40},[34,39845,32516],{"class":51},[34,39847,221],{"class":55},[34,39849,337],{"class":44},[34,39851,291],{"class":40},[34,39853,32525],{"class":51},[34,39855,221],{"class":55},[34,39857,394],{"class":44},[34,39859,39688],{"class":40},[34,39861,39862],{"class":36,"line":3386},[34,39863,39693],{"class":40},[34,39865,39866,39868,39870,39872,39874,39876,39878,39880,39882,39884,39886,39888,39890],{"class":36,"line":3403},[34,39867,39738],{"class":40},[34,39869,32516],{"class":51},[34,39871,221],{"class":55},[34,39873,332],{"class":44},[34,39875,291],{"class":40},[34,39877,32571],{"class":51},[34,39879,221],{"class":55},[34,39881,332],{"class":44},[34,39883,291],{"class":40},[34,39885,32525],{"class":51},[34,39887,221],{"class":55},[34,39889,177],{"class":44},[34,39891,101],{"class":40},[34,39893,39894],{"class":36,"line":3408},[34,39895,39767],{"class":40},[34,39897,39898],{"class":36,"line":3413},[34,39899,39900],{"class":161},"        # 第三层\n",[34,39902,39903,39905,39908,39910],{"class":36,"line":3418},[34,39904,32487],{"class":44},[34,39906,39907],{"class":40},".block3",[34,39909,221],{"class":55},[34,39911,39650],{"class":40},[34,39913,39914,39916,39918,39920,39922,39924,39926,39928,39930,39932,39934,39936,39938,39940,39942,39944,39946],{"class":36,"line":3432},[34,39915,39655],{"class":40},[34,39917,32498],{"class":51},[34,39919,221],{"class":55},[34,39921,33711],{"class":44},[34,39923,291],{"class":40},[34,39925,32507],{"class":51},[34,39927,221],{"class":55},[34,39929,36511],{"class":44},[34,39931,291],{"class":40},[34,39933,32516],{"class":51},[34,39935,221],{"class":55},[34,39937,337],{"class":44},[34,39939,291],{"class":40},[34,39941,32525],{"class":51},[34,39943,221],{"class":55},[34,39945,394],{"class":44},[34,39947,39688],{"class":40},[34,39949,39950],{"class":36,"line":3437},[34,39951,39693],{"class":40},[34,39953,39954,39956,39958,39960,39962,39964,39966,39968,39970,39972,39974,39976,39978,39980,39982,39984,39986],{"class":36,"line":4230},[34,39955,39655],{"class":40},[34,39957,32498],{"class":51},[34,39959,221],{"class":55},[34,39961,36511],{"class":44},[34,39963,291],{"class":40},[34,39965,32507],{"class":51},[34,39967,221],{"class":55},[34,39969,36511],{"class":44},[34,39971,291],{"class":40},[34,39973,32516],{"class":51},[34,39975,221],{"class":55},[34,39977,337],{"class":44},[34,39979,291],{"class":40},[34,39981,32525],{"class":51},[34,39983,221],{"class":55},[34,39985,394],{"class":44},[34,39987,39688],{"class":40},[34,39989,39990],{"class":36,"line":4244},[34,39991,39693],{"class":40},[34,39993,39994,39996,39998,40000,40002,40004,40006,40008,40010,40012,40014,40016,40018,40020,40022,40024,40026],{"class":36,"line":4252},[34,39995,39655],{"class":40},[34,39997,32498],{"class":51},[34,39999,221],{"class":55},[34,40001,36511],{"class":44},[34,40003,291],{"class":40},[34,40005,32507],{"class":51},[34,40007,221],{"class":55},[34,40009,36511],{"class":44},[34,40011,291],{"class":40},[34,40013,32516],{"class":51},[34,40015,221],{"class":55},[34,40017,337],{"class":44},[34,40019,291],{"class":40},[34,40021,32525],{"class":51},[34,40023,221],{"class":55},[34,40025,394],{"class":44},[34,40027,39688],{"class":40},[34,40029,40030],{"class":36,"line":4257},[34,40031,39693],{"class":40},[34,40033,40034,40036,40038,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058],{"class":36,"line":4263},[34,40035,39738],{"class":40},[34,40037,32516],{"class":51},[34,40039,221],{"class":55},[34,40041,332],{"class":44},[34,40043,291],{"class":40},[34,40045,32571],{"class":51},[34,40047,221],{"class":55},[34,40049,332],{"class":44},[34,40051,291],{"class":40},[34,40053,32525],{"class":51},[34,40055,221],{"class":55},[34,40057,177],{"class":44},[34,40059,101],{"class":40},[34,40061,40062],{"class":36,"line":4269},[34,40063,39767],{"class":40},[34,40065,40066],{"class":36,"line":4274},[34,40067,40068],{"class":161},"        # 第四层\n",[34,40070,40071,40073,40076,40078],{"class":36,"line":9598},[34,40072,32487],{"class":44},[34,40074,40075],{"class":40},".block4",[34,40077,221],{"class":55},[34,40079,39650],{"class":40},[34,40081,40082,40084,40086,40088,40090,40092,40094,40096,40099,40101,40103,40105,40107,40109,40111,40113,40115],{"class":36,"line":9622},[34,40083,39655],{"class":40},[34,40085,32498],{"class":51},[34,40087,221],{"class":55},[34,40089,36511],{"class":44},[34,40091,291],{"class":40},[34,40093,32507],{"class":51},[34,40095,221],{"class":55},[34,40097,40098],{"class":44},"512",[34,40100,291],{"class":40},[34,40102,32516],{"class":51},[34,40104,221],{"class":55},[34,40106,337],{"class":44},[34,40108,291],{"class":40},[34,40110,32525],{"class":51},[34,40112,221],{"class":55},[34,40114,394],{"class":44},[34,40116,39688],{"class":40},[34,40118,40119],{"class":36,"line":9627},[34,40120,39693],{"class":40},[34,40122,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155],{"class":36,"line":9633},[34,40124,39655],{"class":40},[34,40126,32498],{"class":51},[34,40128,221],{"class":55},[34,40130,40098],{"class":44},[34,40132,291],{"class":40},[34,40134,32507],{"class":51},[34,40136,221],{"class":55},[34,40138,40098],{"class":44},[34,40140,291],{"class":40},[34,40142,32516],{"class":51},[34,40144,221],{"class":55},[34,40146,337],{"class":44},[34,40148,291],{"class":40},[34,40150,32525],{"class":51},[34,40152,221],{"class":55},[34,40154,394],{"class":44},[34,40156,39688],{"class":40},[34,40158,40159],{"class":36,"line":9660},[34,40160,39693],{"class":40},[34,40162,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195],{"class":36,"line":9665},[34,40164,39655],{"class":40},[34,40166,32498],{"class":51},[34,40168,221],{"class":55},[34,40170,40098],{"class":44},[34,40172,291],{"class":40},[34,40174,32507],{"class":51},[34,40176,221],{"class":55},[34,40178,40098],{"class":44},[34,40180,291],{"class":40},[34,40182,32516],{"class":51},[34,40184,221],{"class":55},[34,40186,337],{"class":44},[34,40188,291],{"class":40},[34,40190,32525],{"class":51},[34,40192,221],{"class":55},[34,40194,394],{"class":44},[34,40196,39688],{"class":40},[34,40198,40199],{"class":36,"line":9671},[34,40200,39693],{"class":40},[34,40202,40203,40205,40207,40209,40211,40213,40215,40217,40219,40221,40223,40225,40227],{"class":36,"line":9683},[34,40204,39738],{"class":40},[34,40206,32516],{"class":51},[34,40208,221],{"class":55},[34,40210,332],{"class":44},[34,40212,291],{"class":40},[34,40214,32571],{"class":51},[34,40216,221],{"class":55},[34,40218,332],{"class":44},[34,40220,291],{"class":40},[34,40222,32525],{"class":51},[34,40224,221],{"class":55},[34,40226,177],{"class":44},[34,40228,101],{"class":40},[34,40230,40231],{"class":36,"line":9695},[34,40232,39767],{"class":40},[34,40234,40235],{"class":36,"line":9707},[34,40236,40237],{"class":161},"        # 第五层\n",[34,40239,40240,40242,40245,40247],{"class":36,"line":11366},[34,40241,32487],{"class":44},[34,40243,40244],{"class":40},".block5",[34,40246,221],{"class":55},[34,40248,39650],{"class":40},[34,40250,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283],{"class":36,"line":11391},[34,40252,39655],{"class":40},[34,40254,32498],{"class":51},[34,40256,221],{"class":55},[34,40258,40098],{"class":44},[34,40260,291],{"class":40},[34,40262,32507],{"class":51},[34,40264,221],{"class":55},[34,40266,40098],{"class":44},[34,40268,291],{"class":40},[34,40270,32516],{"class":51},[34,40272,221],{"class":55},[34,40274,337],{"class":44},[34,40276,291],{"class":40},[34,40278,32525],{"class":51},[34,40280,221],{"class":55},[34,40282,394],{"class":44},[34,40284,39688],{"class":40},[34,40286,40287],{"class":36,"line":11414},[34,40288,39693],{"class":40},[34,40290,40291,40293,40295,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317,40319,40321,40323],{"class":36,"line":11438},[34,40292,39655],{"class":40},[34,40294,32498],{"class":51},[34,40296,221],{"class":55},[34,40298,40098],{"class":44},[34,40300,291],{"class":40},[34,40302,32507],{"class":51},[34,40304,221],{"class":55},[34,40306,40098],{"class":44},[34,40308,291],{"class":40},[34,40310,32516],{"class":51},[34,40312,221],{"class":55},[34,40314,337],{"class":44},[34,40316,291],{"class":40},[34,40318,32525],{"class":51},[34,40320,221],{"class":55},[34,40322,394],{"class":44},[34,40324,39688],{"class":40},[34,40326,40327],{"class":36,"line":11443},[34,40328,39693],{"class":40},[34,40330,40331,40333,40335,40337,40339,40341,40343,40345,40347,40349,40351,40353,40355,40357,40359,40361,40363],{"class":36,"line":11448},[34,40332,39655],{"class":40},[34,40334,32498],{"class":51},[34,40336,221],{"class":55},[34,40338,40098],{"class":44},[34,40340,291],{"class":40},[34,40342,32507],{"class":51},[34,40344,221],{"class":55},[34,40346,40098],{"class":44},[34,40348,291],{"class":40},[34,40350,32516],{"class":51},[34,40352,221],{"class":55},[34,40354,337],{"class":44},[34,40356,291],{"class":40},[34,40358,32525],{"class":51},[34,40360,221],{"class":55},[34,40362,394],{"class":44},[34,40364,39688],{"class":40},[34,40366,40367],{"class":36,"line":11453},[34,40368,39693],{"class":40},[34,40370,40371,40373,40375,40377,40379,40381,40383,40385,40387,40389,40391,40393,40395],{"class":36,"line":11462},[34,40372,39738],{"class":40},[34,40374,32516],{"class":51},[34,40376,221],{"class":55},[34,40378,332],{"class":44},[34,40380,291],{"class":40},[34,40382,32571],{"class":51},[34,40384,221],{"class":55},[34,40386,332],{"class":44},[34,40388,291],{"class":40},[34,40390,32525],{"class":51},[34,40392,221],{"class":55},[34,40394,177],{"class":44},[34,40396,101],{"class":40},[34,40398,40399],{"class":36,"line":11467},[34,40400,39767],{"class":40},[34,40402,40403],{"class":36,"line":11473},[34,40404,40405],{"class":161},"        # 全连接层\n",[34,40407,40408,40410,40413,40415],{"class":36,"line":11494},[34,40409,32487],{"class":44},[34,40411,40412],{"class":40},".block6",[34,40414,221],{"class":55},[34,40416,39650],{"class":40},[34,40418,40419],{"class":36,"line":11500},[34,40420,40421],{"class":161},"            # 平展操作\n",[34,40423,40424],{"class":36,"line":11514},[34,40425,40426],{"class":161},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[34,40428,40429],{"class":36,"line":11520},[34,40430,40431],{"class":40},"            nn.Flatten(),\n",[34,40433,40434,40437,40439,40441,40443,40445,40447,40449,40451],{"class":36,"line":11547},[34,40435,40436],{"class":40},"            nn.Linear(",[34,40438,609],{"class":44},[34,40440,2252],{"class":55},[34,40442,609],{"class":44},[34,40444,2252],{"class":55},[34,40446,40098],{"class":44},[34,40448,291],{"class":40},[34,40450,36511],{"class":44},[34,40452,39688],{"class":40},[34,40454,40455],{"class":36,"line":11556},[34,40456,39693],{"class":40},[34,40458,40459,40461,40463,40465,40467],{"class":36,"line":11562},[34,40460,40436],{"class":40},[34,40462,36511],{"class":44},[34,40464,291],{"class":40},[34,40466,33711],{"class":44},[34,40468,39688],{"class":40},[34,40470,40471],{"class":36,"line":11570},[34,40472,39693],{"class":40},[34,40474,40475,40477,40479,40481,40483],{"class":36,"line":11575},[34,40476,40436],{"class":40},[34,40478,33711],{"class":44},[34,40480,291],{"class":40},[34,40482,410],{"class":44},[34,40484,101],{"class":40},[34,40486,40487],{"class":36,"line":18250},[34,40488,39767],{"class":40},[34,40490,40491],{"class":36,"line":18256},[34,40492,1475],{"emptyLinePlaceholder":1474},[34,40494,40495],{"class":36,"line":18279},[34,40496,40497],{"class":161},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[34,40499,40500],{"class":36,"line":18285},[34,40501,40502],{"class":161},"        # 循环遍历模型\n",[34,40504,40505,40507,40510,40512,40515],{"class":36,"line":18308},[34,40506,5056],{"class":55},[34,40508,40509],{"class":40}," m ",[34,40511,27689],{"class":55},[34,40513,40514],{"class":44}," self",[34,40516,40517],{"class":40},".modules():\n",[34,40519,40520],{"class":36,"line":18322},[34,40521,40522],{"class":161},"            # print(m)\n",[34,40524,40525,40527,40530],{"class":36,"line":18342},[34,40526,6294],{"class":55},[34,40528,40529],{"class":44}," isinstance",[34,40531,40532],{"class":40},"(m,nn.Conv2d):\n",[34,40534,40535],{"class":36,"line":18348},[34,40536,40537],{"class":161},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[34,40539,40540,40543,40546,40548,40551],{"class":36,"line":18359},[34,40541,40542],{"class":40},"                nn.init.kaiming_normal_(m.weight,",[34,40544,40545],{"class":51},"nonlinearity",[34,40547,221],{"class":55},[34,40549,40550],{"class":504},"'relu'",[34,40552,101],{"class":40},[34,40554,40555],{"class":36,"line":18382},[34,40556,40557],{"class":161},"                # 判断b参数是否存在\n",[34,40559,40560,40563,40566,40569,40572,40574],{"class":36,"line":18404},[34,40561,40562],{"class":55},"                if",[34,40564,40565],{"class":40}," m.bias ",[34,40567,40568],{"class":55},"is",[34,40570,40571],{"class":55}," not",[34,40573,59],{"class":44},[34,40575,5392],{"class":40},[34,40577,40578],{"class":36,"line":18409},[34,40579,40580],{"class":161},"                    # 如果参数不存在的化初始化b=0\n",[34,40582,40583,40586,40588],{"class":36,"line":18415},[34,40584,40585],{"class":40},"                    nn.init.constant_(m.bias,",[34,40587,177],{"class":44},[34,40589,101],{"class":40},[34,40591,40592],{"class":36,"line":18429},[34,40593,40594],{"class":161},"            # 全连接层初始化\n",[34,40596,40597,40600,40602],{"class":36,"line":18442},[34,40598,40599],{"class":55},"            elif",[34,40601,40529],{"class":44},[34,40603,40604],{"class":40},"(m,nn.Linear):\n",[34,40606,40607],{"class":36,"line":18447},[34,40608,40609],{"class":161},"                # 这个初始化方法是利用的是正太分布的方式\n",[34,40611,40612],{"class":36,"line":18461},[34,40613,40614],{"class":161},"                # 均值为0，方差为0.01\n",[34,40616,40617,40620,40622,40624,40627],{"class":36,"line":18466},[34,40618,40619],{"class":40},"                nn.init.normal_(m.weight,",[34,40621,177],{"class":44},[34,40623,291],{"class":40},[34,40625,40626],{"class":44},"0.01",[34,40628,101],{"class":40},[34,40630,40631],{"class":36,"line":18472},[34,40632,40633],{"class":161},"                # 初始化b参数\n",[34,40635,40636,40638,40640,40642,40644,40646],{"class":36,"line":18477},[34,40637,40562],{"class":55},[34,40639,40565],{"class":40},[34,40641,40568],{"class":55},[34,40643,40571],{"class":55},[34,40645,59],{"class":44},[34,40647,5392],{"class":40},[34,40649,40650,40652,40654],{"class":36,"line":18491},[34,40651,40585],{"class":40},[34,40653,177],{"class":44},[34,40655,101],{"class":40},[34,40657,40658],{"class":36,"line":18496},[34,40659,1475],{"emptyLinePlaceholder":1474},[34,40661,40662],{"class":36,"line":18501},[34,40663,36806],{"class":161},[34,40665,40666,40668,40670],{"class":36,"line":18515},[34,40667,32443],{"class":55},[34,40669,32735],{"class":3617},[34,40671,32738],{"class":40},[34,40673,40674,40676,40678,40680],{"class":36,"line":18527},[34,40675,32743],{"class":40},[34,40677,221],{"class":55},[34,40679,32465],{"class":44},[34,40681,40682],{"class":40},".block1(x)\n",[34,40684,40685,40687,40689,40691],{"class":36,"line":18532},[34,40686,32743],{"class":40},[34,40688,221],{"class":55},[34,40690,32465],{"class":44},[34,40692,40693],{"class":40},".block2(x)\n",[34,40695,40696,40698,40700,40702],{"class":36,"line":18545},[34,40697,32743],{"class":40},[34,40699,221],{"class":55},[34,40701,32465],{"class":44},[34,40703,40704],{"class":40},".block3(x)\n",[34,40706,40707,40709,40711,40713],{"class":36,"line":18550},[34,40708,32743],{"class":40},[34,40710,221],{"class":55},[34,40712,32465],{"class":44},[34,40714,40715],{"class":40},".block4(x)\n",[34,40717,40718,40720,40722,40724],{"class":36,"line":18555},[34,40719,32743],{"class":40},[34,40721,221],{"class":55},[34,40723,32465],{"class":44},[34,40725,40726],{"class":40},".block5(x)\n",[34,40728,40729,40731,40733,40735],{"class":36,"line":18560},[34,40730,32743],{"class":40},[34,40732,221],{"class":55},[34,40734,32465],{"class":44},[34,40736,40737],{"class":40},".block6(x)\n",[34,40739,40740,40742],{"class":36,"line":18573},[34,40741,16398],{"class":55},[34,40743,32851],{"class":40},[34,40745,40746],{"class":36,"line":18578},[34,40747,1475],{"emptyLinePlaceholder":1474},[34,40749,40750],{"class":36,"line":34274},[34,40751,40752],{"class":161},"# 验证模型\n",[34,40754,40755,40757,40759,40761,40764],{"class":36,"line":34280},[34,40756,3189],{"class":55},[34,40758,32862],{"class":44},[34,40760,4602],{"class":55},[34,40762,40763],{"class":504},"'__main__'",[34,40765,5392],{"class":40},[34,40767,40768,40770,40772,40774,40776,40778,40780,40782,40784],{"class":36,"line":34286},[34,40769,32879],{"class":40},[34,40771,221],{"class":55},[34,40773,32094],{"class":40},[34,40775,32886],{"class":504},[34,40777,3358],{"class":55},[34,40779,32891],{"class":40},[34,40781,3355],{"class":55},[34,40783,32119],{"class":504},[34,40785,101],{"class":40},[34,40787,40788,40790],{"class":36,"line":34292},[34,40789,32941],{"class":44},[34,40791,32128],{"class":40},[34,40793,40794,40796,40798],{"class":36,"line":34298},[34,40795,32931],{"class":40},[34,40797,221],{"class":55},[34,40799,40800],{"class":40},"VGG16().to(device)\n",[34,40802,40803,40805,40807,40809,40811,40813,40815,40817],{"class":36,"line":34309},[34,40804,32941],{"class":44},[34,40806,32944],{"class":40},[34,40808,394],{"class":44},[34,40810,291],{"class":40},[34,40812,33142],{"class":44},[34,40814,291],{"class":40},[34,40816,33142],{"class":44},[34,40818,32957],{"class":40},[1772,40820,40821],{"start":165},[1775,40822,40823],{},"训练代码",[103,40825,40826],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[103,40828,40829],{},"解决方式:",[103,40831,40832],{},"①权重初始化",[24,40834,40836],{"className":26,"code":40835,"language":28,"meta":29,"style":29},"# 权重初始化,保证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",[31,40837,40838,40843,40848,40860,40865,40873,40878,40891,40896,40910,40915,40924,40929,40938,40943,40948,40961,40966,40980],{"__ignoreMap":29},[34,40839,40840],{"class":36,"line":37},[34,40841,40842],{"class":161},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[34,40844,40845],{"class":36,"line":165},[34,40846,40847],{"class":161},"# 循环遍历模型\n",[34,40849,40850,40852,40854,40856,40858],{"class":36,"line":171},[34,40851,4678],{"class":55},[34,40853,40509],{"class":40},[34,40855,27689],{"class":55},[34,40857,40514],{"class":44},[34,40859,40517],{"class":40},[34,40861,40862],{"class":36,"line":182},[34,40863,40864],{"class":161},"    # print(m)\n",[34,40866,40867,40869,40871],{"class":36,"line":188},[34,40868,4754],{"class":55},[34,40870,40529],{"class":44},[34,40872,40532],{"class":40},[34,40874,40875],{"class":36,"line":518},[34,40876,40877],{"class":161},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[34,40879,40880,40883,40885,40887,40889],{"class":36,"line":524},[34,40881,40882],{"class":40},"        nn.init.kaiming_normal_(m.weight,",[34,40884,40545],{"class":51},[34,40886,221],{"class":55},[34,40888,40550],{"class":504},[34,40890,101],{"class":40},[34,40892,40893],{"class":36,"line":530},[34,40894,40895],{"class":161},"        # 判断b参数是否存在\n",[34,40897,40898,40900,40902,40904,40906,40908],{"class":36,"line":624},[34,40899,4150],{"class":55},[34,40901,40565],{"class":40},[34,40903,40568],{"class":55},[34,40905,40571],{"class":55},[34,40907,59],{"class":44},[34,40909,5392],{"class":40},[34,40911,40912],{"class":36,"line":630},[34,40913,40914],{"class":161},"            # 如果参数不存在的化初始化b=0\n",[34,40916,40917,40920,40922],{"class":36,"line":636},[34,40918,40919],{"class":40},"            nn.init.constant_(m.bias,",[34,40921,177],{"class":44},[34,40923,101],{"class":40},[34,40925,40926],{"class":36,"line":1513},[34,40927,40928],{"class":161},"    # 全连接层初始化\n",[34,40930,40931,40934,40936],{"class":36,"line":1519},[34,40932,40933],{"class":55},"    elif",[34,40935,40529],{"class":44},[34,40937,40604],{"class":40},[34,40939,40940],{"class":36,"line":3283},[34,40941,40942],{"class":161},"        # 这个初始化方法是利用的是正太分布的方式\n",[34,40944,40945],{"class":36,"line":3297},[34,40946,40947],{"class":161},"        # 均值为0，方差为0.01\n",[34,40949,40950,40953,40955,40957,40959],{"class":36,"line":3302},[34,40951,40952],{"class":40},"        nn.init.normal_(m.weight,",[34,40954,177],{"class":44},[34,40956,291],{"class":40},[34,40958,40626],{"class":44},[34,40960,101],{"class":40},[34,40962,40963],{"class":36,"line":3308},[34,40964,40965],{"class":161},"        # 初始化b参数\n",[34,40967,40968,40970,40972,40974,40976,40978],{"class":36,"line":3328},[34,40969,4150],{"class":55},[34,40971,40565],{"class":40},[34,40973,40568],{"class":55},[34,40975,40571],{"class":55},[34,40977,59],{"class":44},[34,40979,5392],{"class":40},[34,40981,40982,40984,40986],{"class":36,"line":3333},[34,40983,40919],{"class":40},[34,40985,177],{"class":44},[34,40987,101],{"class":40},[103,40989,40990],{},"②尽可能地增加批次",[103,40992,40993],{},"训练完整代码：",[24,40995,40996],{"className":26,"code":39540,"language":28,"meta":29,"style":29},[31,40997,40998,41004,41014,41024,41034,41038,41054,41062,41080,41084,41088,41098,41134,41138,41174,41178,41206,41210,41214,41224,41260,41264,41300,41304,41332,41336,41340,41350,41386,41390,41426,41430,41466,41470,41498,41502,41506,41516,41552,41556,41592,41596,41632,41636,41664,41668,41672,41682,41718,41722,41758,41762,41798,41802,41830,41834,41838,41848,41852,41856,41860,41880,41884,41896,41900,41912,41916,41920,41924,41928,41940,41944,41952,41956,41968,41972,41986,41990,41998,42002,42010,42014,42018,42030,42034,42048,42056,42060,42064,42072,42082,42092,42102,42112,42122,42132,42138,42142,42146,42158,42178,42184,42192],{"__ignoreMap":29},[34,40999,41000,41002],{"class":36,"line":37},[34,41001,32036],{"class":55},[34,41003,32039],{"class":40},[34,41005,41006,41008,41010,41012],{"class":36,"line":165},[34,41007,32379],{"class":55},[34,41009,39555],{"class":40},[34,41011,32036],{"class":55},[34,41013,39560],{"class":40},[34,41015,41016,41018,41020,41022],{"class":36,"line":171},[34,41017,32379],{"class":55},[34,41019,32382],{"class":40},[34,41021,32036],{"class":55},[34,41023,32387],{"class":40},[34,41025,41026,41028,41030,41032],{"class":36,"line":182},[34,41027,32379],{"class":55},[34,41029,32399],{"class":40},[34,41031,32036],{"class":55},[34,41033,32404],{"class":40},[34,41035,41036],{"class":36,"line":188},[34,41037,1475],{"emptyLinePlaceholder":1474},[34,41039,41040,41042,41044,41046,41048,41050,41052],{"class":36,"line":518},[34,41041,16340],{"class":55},[34,41043,39591],{"class":3617},[34,41045,286],{"class":40},[34,41047,32420],{"class":3617},[34,41049,2353],{"class":40},[34,41051,32425],{"class":3617},[34,41053,32428],{"class":40},[34,41055,41056,41058,41060],{"class":36,"line":524},[34,41057,32443],{"class":55},[34,41059,32446],{"class":44},[34,41061,32449],{"class":40},[34,41063,41064,41066,41068,41070,41072,41074,41076,41078],{"class":36,"line":530},[34,41065,32459],{"class":44},[34,41067,286],{"class":40},[34,41069,39618],{"class":44},[34,41071,48],{"class":40},[34,41073,32465],{"class":44},[34,41075,32468],{"class":40},[34,41077,32471],{"class":44},[34,41079,3630],{"class":40},[34,41081,41082],{"class":36,"line":624},[34,41083,39633],{"class":161},[34,41085,41086],{"class":36,"line":630},[34,41087,39638],{"class":161},[34,41089,41090,41092,41094,41096],{"class":36,"line":636},[34,41091,32487],{"class":44},[34,41093,39645],{"class":40},[34,41095,221],{"class":55},[34,41097,39650],{"class":40},[34,41099,41100,41102,41104,41106,41108,41110,41112,41114,41116,41118,41120,41122,41124,41126,41128,41130,41132],{"class":36,"line":1513},[34,41101,39655],{"class":40},[34,41103,32498],{"class":51},[34,41105,221],{"class":55},[34,41107,394],{"class":44},[34,41109,291],{"class":40},[34,41111,32507],{"class":51},[34,41113,221],{"class":55},[34,41115,2012],{"class":44},[34,41117,291],{"class":40},[34,41119,32516],{"class":51},[34,41121,221],{"class":55},[34,41123,337],{"class":44},[34,41125,291],{"class":40},[34,41127,32525],{"class":51},[34,41129,221],{"class":55},[34,41131,394],{"class":44},[34,41133,39688],{"class":40},[34,41135,41136],{"class":36,"line":1519},[34,41137,39693],{"class":40},[34,41139,41140,41142,41144,41146,41148,41150,41152,41154,41156,41158,41160,41162,41164,41166,41168,41170,41172],{"class":36,"line":3283},[34,41141,39655],{"class":40},[34,41143,32498],{"class":51},[34,41145,221],{"class":55},[34,41147,2012],{"class":44},[34,41149,291],{"class":40},[34,41151,32507],{"class":51},[34,41153,221],{"class":55},[34,41155,2012],{"class":44},[34,41157,291],{"class":40},[34,41159,32516],{"class":51},[34,41161,221],{"class":55},[34,41163,337],{"class":44},[34,41165,291],{"class":40},[34,41167,32525],{"class":51},[34,41169,221],{"class":55},[34,41171,394],{"class":44},[34,41173,39688],{"class":40},[34,41175,41176],{"class":36,"line":3297},[34,41177,39693],{"class":40},[34,41179,41180,41182,41184,41186,41188,41190,41192,41194,41196,41198,41200,41202,41204],{"class":36,"line":3302},[34,41181,39738],{"class":40},[34,41183,32516],{"class":51},[34,41185,221],{"class":55},[34,41187,332],{"class":44},[34,41189,291],{"class":40},[34,41191,32571],{"class":51},[34,41193,221],{"class":55},[34,41195,332],{"class":44},[34,41197,291],{"class":40},[34,41199,32525],{"class":51},[34,41201,221],{"class":55},[34,41203,177],{"class":44},[34,41205,101],{"class":40},[34,41207,41208],{"class":36,"line":3308},[34,41209,39767],{"class":40},[34,41211,41212],{"class":36,"line":3328},[34,41213,39772],{"class":161},[34,41215,41216,41218,41220,41222],{"class":36,"line":3333},[34,41217,32487],{"class":44},[34,41219,39779],{"class":40},[34,41221,221],{"class":55},[34,41223,39650],{"class":40},[34,41225,41226,41228,41230,41232,41234,41236,41238,41240,41242,41244,41246,41248,41250,41252,41254,41256,41258],{"class":36,"line":3347},[34,41227,39655],{"class":40},[34,41229,32498],{"class":51},[34,41231,221],{"class":55},[34,41233,2012],{"class":44},[34,41235,291],{"class":40},[34,41237,32507],{"class":51},[34,41239,221],{"class":55},[34,41241,33711],{"class":44},[34,41243,291],{"class":40},[34,41245,32516],{"class":51},[34,41247,221],{"class":55},[34,41249,337],{"class":44},[34,41251,291],{"class":40},[34,41253,32525],{"class":51},[34,41255,221],{"class":55},[34,41257,394],{"class":44},[34,41259,39688],{"class":40},[34,41261,41262],{"class":36,"line":3352},[34,41263,39693],{"class":40},[34,41265,41266,41268,41270,41272,41274,41276,41278,41280,41282,41284,41286,41288,41290,41292,41294,41296,41298],{"class":36,"line":3381},[34,41267,39655],{"class":40},[34,41269,32498],{"class":51},[34,41271,221],{"class":55},[34,41273,33711],{"class":44},[34,41275,291],{"class":40},[34,41277,32507],{"class":51},[34,41279,221],{"class":55},[34,41281,33711],{"class":44},[34,41283,291],{"class":40},[34,41285,32516],{"class":51},[34,41287,221],{"class":55},[34,41289,337],{"class":44},[34,41291,291],{"class":40},[34,41293,32525],{"class":51},[34,41295,221],{"class":55},[34,41297,394],{"class":44},[34,41299,39688],{"class":40},[34,41301,41302],{"class":36,"line":3386},[34,41303,39693],{"class":40},[34,41305,41306,41308,41310,41312,41314,41316,41318,41320,41322,41324,41326,41328,41330],{"class":36,"line":3403},[34,41307,39738],{"class":40},[34,41309,32516],{"class":51},[34,41311,221],{"class":55},[34,41313,332],{"class":44},[34,41315,291],{"class":40},[34,41317,32571],{"class":51},[34,41319,221],{"class":55},[34,41321,332],{"class":44},[34,41323,291],{"class":40},[34,41325,32525],{"class":51},[34,41327,221],{"class":55},[34,41329,177],{"class":44},[34,41331,101],{"class":40},[34,41333,41334],{"class":36,"line":3408},[34,41335,39767],{"class":40},[34,41337,41338],{"class":36,"line":3413},[34,41339,39900],{"class":161},[34,41341,41342,41344,41346,41348],{"class":36,"line":3418},[34,41343,32487],{"class":44},[34,41345,39907],{"class":40},[34,41347,221],{"class":55},[34,41349,39650],{"class":40},[34,41351,41352,41354,41356,41358,41360,41362,41364,41366,41368,41370,41372,41374,41376,41378,41380,41382,41384],{"class":36,"line":3432},[34,41353,39655],{"class":40},[34,41355,32498],{"class":51},[34,41357,221],{"class":55},[34,41359,33711],{"class":44},[34,41361,291],{"class":40},[34,41363,32507],{"class":51},[34,41365,221],{"class":55},[34,41367,36511],{"class":44},[34,41369,291],{"class":40},[34,41371,32516],{"class":51},[34,41373,221],{"class":55},[34,41375,337],{"class":44},[34,41377,291],{"class":40},[34,41379,32525],{"class":51},[34,41381,221],{"class":55},[34,41383,394],{"class":44},[34,41385,39688],{"class":40},[34,41387,41388],{"class":36,"line":3437},[34,41389,39693],{"class":40},[34,41391,41392,41394,41396,41398,41400,41402,41404,41406,41408,41410,41412,41414,41416,41418,41420,41422,41424],{"class":36,"line":4230},[34,41393,39655],{"class":40},[34,41395,32498],{"class":51},[34,41397,221],{"class":55},[34,41399,36511],{"class":44},[34,41401,291],{"class":40},[34,41403,32507],{"class":51},[34,41405,221],{"class":55},[34,41407,36511],{"class":44},[34,41409,291],{"class":40},[34,41411,32516],{"class":51},[34,41413,221],{"class":55},[34,41415,337],{"class":44},[34,41417,291],{"class":40},[34,41419,32525],{"class":51},[34,41421,221],{"class":55},[34,41423,394],{"class":44},[34,41425,39688],{"class":40},[34,41427,41428],{"class":36,"line":4244},[34,41429,39693],{"class":40},[34,41431,41432,41434,41436,41438,41440,41442,41444,41446,41448,41450,41452,41454,41456,41458,41460,41462,41464],{"class":36,"line":4252},[34,41433,39655],{"class":40},[34,41435,32498],{"class":51},[34,41437,221],{"class":55},[34,41439,36511],{"class":44},[34,41441,291],{"class":40},[34,41443,32507],{"class":51},[34,41445,221],{"class":55},[34,41447,36511],{"class":44},[34,41449,291],{"class":40},[34,41451,32516],{"class":51},[34,41453,221],{"class":55},[34,41455,337],{"class":44},[34,41457,291],{"class":40},[34,41459,32525],{"class":51},[34,41461,221],{"class":55},[34,41463,394],{"class":44},[34,41465,39688],{"class":40},[34,41467,41468],{"class":36,"line":4257},[34,41469,39693],{"class":40},[34,41471,41472,41474,41476,41478,41480,41482,41484,41486,41488,41490,41492,41494,41496],{"class":36,"line":4263},[34,41473,39738],{"class":40},[34,41475,32516],{"class":51},[34,41477,221],{"class":55},[34,41479,332],{"class":44},[34,41481,291],{"class":40},[34,41483,32571],{"class":51},[34,41485,221],{"class":55},[34,41487,332],{"class":44},[34,41489,291],{"class":40},[34,41491,32525],{"class":51},[34,41493,221],{"class":55},[34,41495,177],{"class":44},[34,41497,101],{"class":40},[34,41499,41500],{"class":36,"line":4269},[34,41501,39767],{"class":40},[34,41503,41504],{"class":36,"line":4274},[34,41505,40068],{"class":161},[34,41507,41508,41510,41512,41514],{"class":36,"line":9598},[34,41509,32487],{"class":44},[34,41511,40075],{"class":40},[34,41513,221],{"class":55},[34,41515,39650],{"class":40},[34,41517,41518,41520,41522,41524,41526,41528,41530,41532,41534,41536,41538,41540,41542,41544,41546,41548,41550],{"class":36,"line":9622},[34,41519,39655],{"class":40},[34,41521,32498],{"class":51},[34,41523,221],{"class":55},[34,41525,36511],{"class":44},[34,41527,291],{"class":40},[34,41529,32507],{"class":51},[34,41531,221],{"class":55},[34,41533,40098],{"class":44},[34,41535,291],{"class":40},[34,41537,32516],{"class":51},[34,41539,221],{"class":55},[34,41541,337],{"class":44},[34,41543,291],{"class":40},[34,41545,32525],{"class":51},[34,41547,221],{"class":55},[34,41549,394],{"class":44},[34,41551,39688],{"class":40},[34,41553,41554],{"class":36,"line":9627},[34,41555,39693],{"class":40},[34,41557,41558,41560,41562,41564,41566,41568,41570,41572,41574,41576,41578,41580,41582,41584,41586,41588,41590],{"class":36,"line":9633},[34,41559,39655],{"class":40},[34,41561,32498],{"class":51},[34,41563,221],{"class":55},[34,41565,40098],{"class":44},[34,41567,291],{"class":40},[34,41569,32507],{"class":51},[34,41571,221],{"class":55},[34,41573,40098],{"class":44},[34,41575,291],{"class":40},[34,41577,32516],{"class":51},[34,41579,221],{"class":55},[34,41581,337],{"class":44},[34,41583,291],{"class":40},[34,41585,32525],{"class":51},[34,41587,221],{"class":55},[34,41589,394],{"class":44},[34,41591,39688],{"class":40},[34,41593,41594],{"class":36,"line":9660},[34,41595,39693],{"class":40},[34,41597,41598,41600,41602,41604,41606,41608,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630],{"class":36,"line":9665},[34,41599,39655],{"class":40},[34,41601,32498],{"class":51},[34,41603,221],{"class":55},[34,41605,40098],{"class":44},[34,41607,291],{"class":40},[34,41609,32507],{"class":51},[34,41611,221],{"class":55},[34,41613,40098],{"class":44},[34,41615,291],{"class":40},[34,41617,32516],{"class":51},[34,41619,221],{"class":55},[34,41621,337],{"class":44},[34,41623,291],{"class":40},[34,41625,32525],{"class":51},[34,41627,221],{"class":55},[34,41629,394],{"class":44},[34,41631,39688],{"class":40},[34,41633,41634],{"class":36,"line":9671},[34,41635,39693],{"class":40},[34,41637,41638,41640,41642,41644,41646,41648,41650,41652,41654,41656,41658,41660,41662],{"class":36,"line":9683},[34,41639,39738],{"class":40},[34,41641,32516],{"class":51},[34,41643,221],{"class":55},[34,41645,332],{"class":44},[34,41647,291],{"class":40},[34,41649,32571],{"class":51},[34,41651,221],{"class":55},[34,41653,332],{"class":44},[34,41655,291],{"class":40},[34,41657,32525],{"class":51},[34,41659,221],{"class":55},[34,41661,177],{"class":44},[34,41663,101],{"class":40},[34,41665,41666],{"class":36,"line":9695},[34,41667,39767],{"class":40},[34,41669,41670],{"class":36,"line":9707},[34,41671,40237],{"class":161},[34,41673,41674,41676,41678,41680],{"class":36,"line":11366},[34,41675,32487],{"class":44},[34,41677,40244],{"class":40},[34,41679,221],{"class":55},[34,41681,39650],{"class":40},[34,41683,41684,41686,41688,41690,41692,41694,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716],{"class":36,"line":11391},[34,41685,39655],{"class":40},[34,41687,32498],{"class":51},[34,41689,221],{"class":55},[34,41691,40098],{"class":44},[34,41693,291],{"class":40},[34,41695,32507],{"class":51},[34,41697,221],{"class":55},[34,41699,40098],{"class":44},[34,41701,291],{"class":40},[34,41703,32516],{"class":51},[34,41705,221],{"class":55},[34,41707,337],{"class":44},[34,41709,291],{"class":40},[34,41711,32525],{"class":51},[34,41713,221],{"class":55},[34,41715,394],{"class":44},[34,41717,39688],{"class":40},[34,41719,41720],{"class":36,"line":11414},[34,41721,39693],{"class":40},[34,41723,41724,41726,41728,41730,41732,41734,41736,41738,41740,41742,41744,41746,41748,41750,41752,41754,41756],{"class":36,"line":11438},[34,41725,39655],{"class":40},[34,41727,32498],{"class":51},[34,41729,221],{"class":55},[34,41731,40098],{"class":44},[34,41733,291],{"class":40},[34,41735,32507],{"class":51},[34,41737,221],{"class":55},[34,41739,40098],{"class":44},[34,41741,291],{"class":40},[34,41743,32516],{"class":51},[34,41745,221],{"class":55},[34,41747,337],{"class":44},[34,41749,291],{"class":40},[34,41751,32525],{"class":51},[34,41753,221],{"class":55},[34,41755,394],{"class":44},[34,41757,39688],{"class":40},[34,41759,41760],{"class":36,"line":11443},[34,41761,39693],{"class":40},[34,41763,41764,41766,41768,41770,41772,41774,41776,41778,41780,41782,41784,41786,41788,41790,41792,41794,41796],{"class":36,"line":11448},[34,41765,39655],{"class":40},[34,41767,32498],{"class":51},[34,41769,221],{"class":55},[34,41771,40098],{"class":44},[34,41773,291],{"class":40},[34,41775,32507],{"class":51},[34,41777,221],{"class":55},[34,41779,40098],{"class":44},[34,41781,291],{"class":40},[34,41783,32516],{"class":51},[34,41785,221],{"class":55},[34,41787,337],{"class":44},[34,41789,291],{"class":40},[34,41791,32525],{"class":51},[34,41793,221],{"class":55},[34,41795,394],{"class":44},[34,41797,39688],{"class":40},[34,41799,41800],{"class":36,"line":11453},[34,41801,39693],{"class":40},[34,41803,41804,41806,41808,41810,41812,41814,41816,41818,41820,41822,41824,41826,41828],{"class":36,"line":11462},[34,41805,39738],{"class":40},[34,41807,32516],{"class":51},[34,41809,221],{"class":55},[34,41811,332],{"class":44},[34,41813,291],{"class":40},[34,41815,32571],{"class":51},[34,41817,221],{"class":55},[34,41819,332],{"class":44},[34,41821,291],{"class":40},[34,41823,32525],{"class":51},[34,41825,221],{"class":55},[34,41827,177],{"class":44},[34,41829,101],{"class":40},[34,41831,41832],{"class":36,"line":11467},[34,41833,39767],{"class":40},[34,41835,41836],{"class":36,"line":11473},[34,41837,40405],{"class":161},[34,41839,41840,41842,41844,41846],{"class":36,"line":11494},[34,41841,32487],{"class":44},[34,41843,40412],{"class":40},[34,41845,221],{"class":55},[34,41847,39650],{"class":40},[34,41849,41850],{"class":36,"line":11500},[34,41851,40421],{"class":161},[34,41853,41854],{"class":36,"line":11514},[34,41855,40426],{"class":161},[34,41857,41858],{"class":36,"line":11520},[34,41859,40431],{"class":40},[34,41861,41862,41864,41866,41868,41870,41872,41874,41876,41878],{"class":36,"line":11547},[34,41863,40436],{"class":40},[34,41865,609],{"class":44},[34,41867,2252],{"class":55},[34,41869,609],{"class":44},[34,41871,2252],{"class":55},[34,41873,40098],{"class":44},[34,41875,291],{"class":40},[34,41877,36511],{"class":44},[34,41879,39688],{"class":40},[34,41881,41882],{"class":36,"line":11556},[34,41883,39693],{"class":40},[34,41885,41886,41888,41890,41892,41894],{"class":36,"line":11562},[34,41887,40436],{"class":40},[34,41889,36511],{"class":44},[34,41891,291],{"class":40},[34,41893,33711],{"class":44},[34,41895,39688],{"class":40},[34,41897,41898],{"class":36,"line":11570},[34,41899,39693],{"class":40},[34,41901,41902,41904,41906,41908,41910],{"class":36,"line":11575},[34,41903,40436],{"class":40},[34,41905,33711],{"class":44},[34,41907,291],{"class":40},[34,41909,410],{"class":44},[34,41911,101],{"class":40},[34,41913,41914],{"class":36,"line":18250},[34,41915,39767],{"class":40},[34,41917,41918],{"class":36,"line":18256},[34,41919,1475],{"emptyLinePlaceholder":1474},[34,41921,41922],{"class":36,"line":18279},[34,41923,40497],{"class":161},[34,41925,41926],{"class":36,"line":18285},[34,41927,40502],{"class":161},[34,41929,41930,41932,41934,41936,41938],{"class":36,"line":18308},[34,41931,5056],{"class":55},[34,41933,40509],{"class":40},[34,41935,27689],{"class":55},[34,41937,40514],{"class":44},[34,41939,40517],{"class":40},[34,41941,41942],{"class":36,"line":18322},[34,41943,40522],{"class":161},[34,41945,41946,41948,41950],{"class":36,"line":18342},[34,41947,6294],{"class":55},[34,41949,40529],{"class":44},[34,41951,40532],{"class":40},[34,41953,41954],{"class":36,"line":18348},[34,41955,40537],{"class":161},[34,41957,41958,41960,41962,41964,41966],{"class":36,"line":18359},[34,41959,40542],{"class":40},[34,41961,40545],{"class":51},[34,41963,221],{"class":55},[34,41965,40550],{"class":504},[34,41967,101],{"class":40},[34,41969,41970],{"class":36,"line":18382},[34,41971,40557],{"class":161},[34,41973,41974,41976,41978,41980,41982,41984],{"class":36,"line":18404},[34,41975,40562],{"class":55},[34,41977,40565],{"class":40},[34,41979,40568],{"class":55},[34,41981,40571],{"class":55},[34,41983,59],{"class":44},[34,41985,5392],{"class":40},[34,41987,41988],{"class":36,"line":18409},[34,41989,40580],{"class":161},[34,41991,41992,41994,41996],{"class":36,"line":18415},[34,41993,40585],{"class":40},[34,41995,177],{"class":44},[34,41997,101],{"class":40},[34,41999,42000],{"class":36,"line":18429},[34,42001,40594],{"class":161},[34,42003,42004,42006,42008],{"class":36,"line":18442},[34,42005,40599],{"class":55},[34,42007,40529],{"class":44},[34,42009,40604],{"class":40},[34,42011,42012],{"class":36,"line":18447},[34,42013,40609],{"class":161},[34,42015,42016],{"class":36,"line":18461},[34,42017,40614],{"class":161},[34,42019,42020,42022,42024,42026,42028],{"class":36,"line":18466},[34,42021,40619],{"class":40},[34,42023,177],{"class":44},[34,42025,291],{"class":40},[34,42027,40626],{"class":44},[34,42029,101],{"class":40},[34,42031,42032],{"class":36,"line":18472},[34,42033,40633],{"class":161},[34,42035,42036,42038,42040,42042,42044,42046],{"class":36,"line":18477},[34,42037,40562],{"class":55},[34,42039,40565],{"class":40},[34,42041,40568],{"class":55},[34,42043,40571],{"class":55},[34,42045,59],{"class":44},[34,42047,5392],{"class":40},[34,42049,42050,42052,42054],{"class":36,"line":18491},[34,42051,40585],{"class":40},[34,42053,177],{"class":44},[34,42055,101],{"class":40},[34,42057,42058],{"class":36,"line":18496},[34,42059,1475],{"emptyLinePlaceholder":1474},[34,42061,42062],{"class":36,"line":18501},[34,42063,36806],{"class":161},[34,42065,42066,42068,42070],{"class":36,"line":18515},[34,42067,32443],{"class":55},[34,42069,32735],{"class":3617},[34,42071,32738],{"class":40},[34,42073,42074,42076,42078,42080],{"class":36,"line":18527},[34,42075,32743],{"class":40},[34,42077,221],{"class":55},[34,42079,32465],{"class":44},[34,42081,40682],{"class":40},[34,42083,42084,42086,42088,42090],{"class":36,"line":18532},[34,42085,32743],{"class":40},[34,42087,221],{"class":55},[34,42089,32465],{"class":44},[34,42091,40693],{"class":40},[34,42093,42094,42096,42098,42100],{"class":36,"line":18545},[34,42095,32743],{"class":40},[34,42097,221],{"class":55},[34,42099,32465],{"class":44},[34,42101,40704],{"class":40},[34,42103,42104,42106,42108,42110],{"class":36,"line":18550},[34,42105,32743],{"class":40},[34,42107,221],{"class":55},[34,42109,32465],{"class":44},[34,42111,40715],{"class":40},[34,42113,42114,42116,42118,42120],{"class":36,"line":18555},[34,42115,32743],{"class":40},[34,42117,221],{"class":55},[34,42119,32465],{"class":44},[34,42121,40726],{"class":40},[34,42123,42124,42126,42128,42130],{"class":36,"line":18560},[34,42125,32743],{"class":40},[34,42127,221],{"class":55},[34,42129,32465],{"class":44},[34,42131,40737],{"class":40},[34,42133,42134,42136],{"class":36,"line":18573},[34,42135,16398],{"class":55},[34,42137,32851],{"class":40},[34,42139,42140],{"class":36,"line":18578},[34,42141,1475],{"emptyLinePlaceholder":1474},[34,42143,42144],{"class":36,"line":34274},[34,42145,40752],{"class":161},[34,42147,42148,42150,42152,42154,42156],{"class":36,"line":34280},[34,42149,3189],{"class":55},[34,42151,32862],{"class":44},[34,42153,4602],{"class":55},[34,42155,40763],{"class":504},[34,42157,5392],{"class":40},[34,42159,42160,42162,42164,42166,42168,42170,42172,42174,42176],{"class":36,"line":34286},[34,42161,32879],{"class":40},[34,42163,221],{"class":55},[34,42165,32094],{"class":40},[34,42167,32886],{"class":504},[34,42169,3358],{"class":55},[34,42171,32891],{"class":40},[34,42173,3355],{"class":55},[34,42175,32119],{"class":504},[34,42177,101],{"class":40},[34,42179,42180,42182],{"class":36,"line":34292},[34,42181,32941],{"class":44},[34,42183,32128],{"class":40},[34,42185,42186,42188,42190],{"class":36,"line":34298},[34,42187,32931],{"class":40},[34,42189,221],{"class":55},[34,42191,40800],{"class":40},[34,42193,42194,42196,42198,42200,42202,42204,42206,42208],{"class":36,"line":34309},[34,42195,32941],{"class":44},[34,42197,32944],{"class":40},[34,42199,394],{"class":44},[34,42201,291],{"class":40},[34,42203,33142],{"class":44},[34,42205,291],{"class":40},[34,42207,33142],{"class":44},[34,42209,32957],{"class":40},[1772,42211,42212],{"start":171},[1775,42213,42214],{},"测试代码",[24,42216,42218],{"className":26,"code":42217,"language":28,"meta":29,"style":29},"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",[31,42219,42220,42226,42236,42246,42250,42260,42271,42275,42279,42283,42291,42307,42317,42333,42343,42357,42361,42371,42381,42391,42397,42401,42405,42413,42417,42433,42441,42445,42449,42457,42465,42469,42473,42477,42481,42487,42491,42501,42509,42517,42521,42525,42529,42537,42541,42557,42561,42565,42569,42581,42585,42597,42601,42605,42617,42621,42631,42635,42639,42651,42655,42664,42668,42672,42680,42684,42692,42696,42700,42704,42708,42712,42728,42736,42740,42744,42792,42798,42802,42812,42820,42828,42832,42836,42840,42844,42852,42856,42872,42876,42884,42892],{"__ignoreMap":29},[34,42221,42222,42224],{"class":36,"line":37},[34,42223,32036],{"class":55},[34,42225,32039],{"class":40},[34,42227,42228,42230,42232,42234],{"class":36,"line":165},[34,42229,32036],{"class":55},[34,42231,33057],{"class":40},[34,42233,33025],{"class":55},[34,42235,33062],{"class":40},[34,42237,42238,42240,42242,42244],{"class":36,"line":171},[34,42239,32379],{"class":55},[34,42241,33040],{"class":40},[34,42243,32036],{"class":55},[34,42245,33045],{"class":40},[34,42247,42248],{"class":36,"line":182},[34,42249,35563],{"class":161},[34,42251,42252,42254,42256,42258],{"class":36,"line":188},[34,42253,32379],{"class":55},[34,42255,33010],{"class":40},[34,42257,32036],{"class":55},[34,42259,33015],{"class":40},[34,42261,42262,42264,42266,42268],{"class":36,"line":518},[34,42263,32379],{"class":55},[34,42265,33555],{"class":40},[34,42267,32036],{"class":55},[34,42269,42270],{"class":44}," VGG16\n",[34,42272,42273],{"class":36,"line":524},[34,42274,1475],{"emptyLinePlaceholder":1474},[34,42276,42277],{"class":36,"line":530},[34,42278,1475],{"emptyLinePlaceholder":1474},[34,42280,42281],{"class":36,"line":624},[34,42282,35592],{"class":161},[34,42284,42285,42287,42289],{"class":36,"line":630},[34,42286,33588],{"class":55},[34,42288,35599],{"class":3617},[34,42290,33594],{"class":40},[34,42292,42293,42295,42297,42299,42301,42303,42305],{"class":36,"line":636},[34,42294,35606],{"class":40},[34,42296,221],{"class":55},[34,42298,33097],{"class":40},[34,42300,33100],{"class":51},[34,42302,221],{"class":55},[34,42304,33105],{"class":504},[34,42306,33108],{"class":40},[34,42308,42309,42311,42313,42315],{"class":36,"line":1513},[34,42310,35623],{"class":51},[34,42312,221],{"class":55},[34,42314,35628],{"class":44},[34,42316,33108],{"class":40},[34,42318,42319,42321,42323,42325,42327,42329,42331],{"class":36,"line":1519},[34,42320,35635],{"class":51},[34,42322,221],{"class":55},[34,42324,33135],{"class":40},[34,42326,218],{"class":51},[34,42328,221],{"class":55},[34,42330,33142],{"class":44},[34,42332,33145],{"class":40},[34,42334,42335,42337,42339,42341],{"class":36,"line":3283},[34,42336,35652],{"class":51},[34,42338,221],{"class":55},[34,42340,33118],{"class":44},[34,42342,101],{"class":40},[34,42344,42345,42347,42349,42351,42353,42355],{"class":36,"line":3297},[34,42346,35663],{"class":40},[34,42348,221],{"class":55},[34,42350,33175],{"class":40},[34,42352,33178],{"class":51},[34,42354,221],{"class":55},[34,42356,35674],{"class":40},[34,42358,42359],{"class":36,"line":3302},[34,42360,35679],{"class":161},[34,42362,42363,42365,42367,42369],{"class":36,"line":3308},[34,42364,35684],{"class":51},[34,42366,221],{"class":55},[34,42368,394],{"class":44},[34,42370,33108],{"class":40},[34,42372,42373,42375,42377,42379],{"class":36,"line":3328},[34,42374,35695],{"class":51},[34,42376,221],{"class":55},[34,42378,33118],{"class":44},[34,42380,33108],{"class":40},[34,42382,42383,42385,42387,42389],{"class":36,"line":3333},[34,42384,35706],{"class":51},[34,42386,221],{"class":55},[34,42388,177],{"class":44},[34,42390,101],{"class":40},[34,42392,42393,42395],{"class":36,"line":3347},[34,42394,5743],{"class":55},[34,42396,35719],{"class":40},[34,42398,42399],{"class":36,"line":3352},[34,42400,1475],{"emptyLinePlaceholder":1474},[34,42402,42403],{"class":36,"line":3381},[34,42404,35728],{"class":161},[34,42406,42407,42409,42411],{"class":36,"line":3386},[34,42408,33588],{"class":55},[34,42410,35735],{"class":3617},[34,42412,35738],{"class":40},[34,42414,42415],{"class":36,"line":3403},[34,42416,35743],{"class":161},[34,42418,42419,42421,42423,42425,42427,42429,42431],{"class":36,"line":3408},[34,42420,32879],{"class":40},[34,42422,221],{"class":55},[34,42424,32886],{"class":504},[34,42426,3358],{"class":55},[34,42428,32891],{"class":40},[34,42430,3355],{"class":55},[34,42432,35760],{"class":504},[34,42434,42435,42437,42439],{"class":36,"line":3413},[34,42436,32931],{"class":40},[34,42438,221],{"class":55},[34,42440,33930],{"class":40},[34,42442,42443],{"class":36,"line":3418},[34,42444,1475],{"emptyLinePlaceholder":1474},[34,42446,42447],{"class":36,"line":3432},[34,42448,35777],{"class":161},[34,42450,42451,42453,42455],{"class":36,"line":3437},[34,42452,35782],{"class":40},[34,42454,221],{"class":55},[34,42456,33983],{"class":44},[34,42458,42459,42461,42463],{"class":36,"line":4230},[34,42460,35791],{"class":40},[34,42462,221],{"class":55},[34,42464,4738],{"class":44},[34,42466,42467],{"class":36,"line":4244},[34,42468,1475],{"emptyLinePlaceholder":1474},[34,42470,42471],{"class":36,"line":4252},[34,42472,35804],{"class":161},[34,42474,42475],{"class":36,"line":4257},[34,42476,35809],{"class":161},[34,42478,42479],{"class":36,"line":4263},[34,42480,35814],{"class":161},[34,42482,42483,42485],{"class":36,"line":4269},[34,42484,35819],{"class":55},[34,42486,34525],{"class":40},[34,42488,42489],{"class":36,"line":4274},[34,42490,35826],{"class":161},[34,42492,42493,42495,42497,42499],{"class":36,"line":9598},[34,42494,5056],{"class":55},[34,42496,35833],{"class":40},[34,42498,27689],{"class":55},[34,42500,35838],{"class":40},[34,42502,42503,42505,42507],{"class":36,"line":9622},[34,42504,35843],{"class":40},[34,42506,221],{"class":55},[34,42508,35848],{"class":40},[34,42510,42511,42513,42515],{"class":36,"line":9627},[34,42512,35853],{"class":40},[34,42514,221],{"class":55},[34,42516,35858],{"class":40},[34,42518,42519],{"class":36,"line":9633},[34,42520,35863],{"class":161},[34,42522,42523],{"class":36,"line":9660},[34,42524,34516],{"class":40},[34,42526,42527],{"class":36,"line":9665},[34,42528,35872],{"class":161},[34,42530,42531,42533,42535],{"class":36,"line":9671},[34,42532,34301],{"class":40},[34,42534,221],{"class":55},[34,42536,35881],{"class":40},[34,42538,42539],{"class":36,"line":9683},[34,42540,35886],{"class":161},[34,42542,42543,42545,42547,42549,42551,42553,42555],{"class":36,"line":9695},[34,42544,34318],{"class":40},[34,42546,221],{"class":55},[34,42548,34323],{"class":40},[34,42550,34326],{"class":51},[34,42552,221],{"class":55},[34,42554,394],{"class":44},[34,42556,101],{"class":40},[34,42558,42559],{"class":36,"line":9707},[34,42560,35907],{"class":161},[34,42562,42563],{"class":36,"line":11366},[34,42564,35912],{"class":161},[34,42566,42567],{"class":36,"line":11391},[34,42568,35917],{"class":161},[34,42570,42571,42573,42575,42577,42579],{"class":36,"line":11414},[34,42572,35922],{"class":40},[34,42574,11127],{"class":55},[34,42576,34428],{"class":40},[34,42578,4602],{"class":55},[34,42580,35931],{"class":40},[34,42582,42583],{"class":36,"line":11438},[34,42584,35936],{"class":161},[34,42586,42587,42589,42591,42593,42595],{"class":36,"line":11443},[34,42588,35941],{"class":40},[34,42590,11127],{"class":55},[34,42592,35946],{"class":40},[34,42594,177],{"class":44},[34,42596,101],{"class":40},[34,42598,42599],{"class":36,"line":11448},[34,42600,1475],{"emptyLinePlaceholder":1474},[34,42602,42603],{"class":36,"line":11453},[34,42604,35959],{"class":161},[34,42606,42607,42609,42611,42613,42615],{"class":36,"line":11462},[34,42608,35964],{"class":40},[34,42610,221],{"class":55},[34,42612,35969],{"class":40},[34,42614,2379],{"class":55},[34,42616,35974],{"class":40},[34,42618,42619],{"class":36,"line":11467},[34,42620,35979],{"class":161},[34,42622,42623,42625,42627,42629],{"class":36,"line":11473},[34,42624,34092],{"class":44},[34,42626,286],{"class":40},[34,42628,35988],{"class":504},[34,42630,35991],{"class":40},[34,42632,42633],{"class":36,"line":11494},[34,42634,1475],{"emptyLinePlaceholder":1474},[34,42636,42637],{"class":36,"line":11500},[34,42638,36000],{"class":161},[34,42640,42641,42643,42645,42647,42649],{"class":36,"line":11514},[34,42642,3189],{"class":55},[34,42644,32862],{"class":44},[34,42646,4602],{"class":55},[34,42648,32867],{"class":504},[34,42650,5392],{"class":40},[34,42652,42653],{"class":36,"line":11520},[34,42654,36017],{"class":161},[34,42656,42657,42659,42661],{"class":36,"line":11547},[34,42658,32931],{"class":40},[34,42660,221],{"class":55},[34,42662,42663],{"class":40},"VGG16()\n",[34,42665,42666],{"class":36,"line":11556},[34,42667,36030],{"class":161},[34,42669,42670],{"class":36,"line":11562},[34,42671,36035],{"class":161},[34,42673,42674,42676,42678],{"class":36,"line":11570},[34,42675,36040],{"class":40},[34,42677,36043],{"class":504},[34,42679,296],{"class":40},[34,42681,42682],{"class":36,"line":11575},[34,42683,36050],{"class":161},[34,42685,42686,42688,42690],{"class":36,"line":18250},[34,42687,35663],{"class":40},[34,42689,221],{"class":55},[34,42691,36059],{"class":40},[34,42693,42694],{"class":36,"line":18256},[34,42695,36064],{"class":161},[34,42697,42698],{"class":36,"line":18279},[34,42699,36069],{"class":40},[34,42701,42702],{"class":36,"line":18285},[34,42703,1475],{"emptyLinePlaceholder":1474},[34,42705,42706],{"class":36,"line":18308},[34,42707,36078],{"class":161},[34,42709,42710],{"class":36,"line":18322},[34,42711,36083],{"class":161},[34,42713,42714,42716,42718,42720,42722,42724,42726],{"class":36,"line":18342},[34,42715,32879],{"class":40},[34,42717,221],{"class":55},[34,42719,32886],{"class":504},[34,42721,3358],{"class":55},[34,42723,32891],{"class":40},[34,42725,3355],{"class":55},[34,42727,35760],{"class":504},[34,42729,42730,42732,42734],{"class":36,"line":18348},[34,42731,32931],{"class":40},[34,42733,221],{"class":55},[34,42735,33930],{"class":40},[34,42737,42738],{"class":36,"line":18359},[34,42739,36112],{"class":161},[34,42741,42742],{"class":36,"line":18382},[34,42743,36117],{"class":161},[34,42745,42746,42748,42750,42752,42754,42756,42758,42760,42762,42764,42766,42768,42770,42772,42774,42776,42778,42780,42782,42784,42786,42788,42790],{"class":36,"line":18404},[34,42747,36122],{"class":40},[34,42749,221],{"class":55},[34,42751,2681],{"class":40},[34,42753,36129],{"class":504},[34,42755,291],{"class":40},[34,42757,36134],{"class":504},[34,42759,291],{"class":40},[34,42761,36139],{"class":504},[34,42763,291],{"class":40},[34,42765,36144],{"class":504},[34,42767,291],{"class":40},[34,42769,36149],{"class":504},[34,42771,291],{"class":40},[34,42773,36154],{"class":504},[34,42775,291],{"class":40},[34,42777,36159],{"class":504},[34,42779,291],{"class":40},[34,42781,36164],{"class":504},[34,42783,291],{"class":40},[34,42785,36169],{"class":504},[34,42787,291],{"class":40},[34,42789,36174],{"class":504},[34,42791,34887],{"class":40},[34,42793,42794,42796],{"class":36,"line":18409},[34,42795,35819],{"class":55},[34,42797,34525],{"class":40},[34,42799,42800],{"class":36,"line":18415},[34,42801,36187],{"class":161},[34,42803,42804,42806,42808,42810],{"class":36,"line":18429},[34,42805,5056],{"class":55},[34,42807,36194],{"class":40},[34,42809,27689],{"class":55},[34,42811,35838],{"class":40},[34,42813,42814,42816,42818],{"class":36,"line":18442},[34,42815,34251],{"class":40},[34,42817,221],{"class":55},[34,42819,34256],{"class":40},[34,42821,42822,42824,42826],{"class":36,"line":18447},[34,42823,34266],{"class":40},[34,42825,221],{"class":55},[34,42827,34271],{"class":40},[34,42829,42830],{"class":36,"line":18461},[34,42831,1475],{"emptyLinePlaceholder":1474},[34,42833,42834],{"class":36,"line":18466},[34,42835,36223],{"class":161},[34,42837,42838],{"class":36,"line":18472},[34,42839,34516],{"class":40},[34,42841,42842],{"class":36,"line":18477},[34,42843,36232],{"class":161},[34,42845,42846,42848,42850],{"class":36,"line":18491},[34,42847,34301],{"class":40},[34,42849,221],{"class":55},[34,42851,34306],{"class":40},[34,42853,42854],{"class":36,"line":18496},[34,42855,36245],{"class":161},[34,42857,42858,42860,42862,42864,42866,42868,42870],{"class":36,"line":18501},[34,42859,34318],{"class":40},[34,42861,221],{"class":55},[34,42863,34323],{"class":40},[34,42865,34326],{"class":51},[34,42867,221],{"class":55},[34,42869,394],{"class":44},[34,42871,101],{"class":40},[34,42873,42874],{"class":36,"line":18515},[34,42875,36266],{"class":161},[34,42877,42878,42880,42882],{"class":36,"line":18527},[34,42879,36271],{"class":40},[34,42881,221],{"class":55},[34,42883,36276],{"class":40},[34,42885,42886,42888,42890],{"class":36,"line":18532},[34,42887,36281],{"class":40},[34,42889,221],{"class":55},[34,42891,36286],{"class":40},[34,42893,42894,42896,42898,42900,42902,42904,42906,42908],{"class":36,"line":18545},[34,42895,36291],{"class":44},[34,42897,286],{"class":40},[34,42899,36296],{"class":504},[34,42901,36299],{"class":40},[34,42903,36302],{"class":504},[34,42905,291],{"class":40},[34,42907,36307],{"class":504},[34,42909,36310],{"class":40},[19,42911,42913],{"id":42912},"_23googlenet","2.3.GoogLeNet",[1353,42915,42917],{"id":42916},"_231原理","2.3.1.原理",[1772,42919,42920],{},[1775,42921,42922],{},"网络结构",[103,42924,42925],{},[109,42926],{"alt":29,"src":42927},"\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",[103,42929,42930],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[103,42932,42933],{},[109,42934],{"alt":29,"src":42935},"\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",[103,42937,42938],{},[109,42939],{"alt":29,"src":42940},"\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",[103,42942,42943],{},[109,42944],{"alt":29,"src":42945},"\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",[1772,42947,42948],{"start":165},[1775,42949,42950],{},"1x1卷积的优点",[103,42952,42953],{},[109,42954],{"alt":29,"src":42955},"\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",[1772,42957,42958],{"start":171},[1775,42959,42960],{},"全局平均池化层优点",[103,42962,42963],{},[109,42964],{"alt":29,"src":42965},"\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",[103,42967,42968],{},[109,42969],{"alt":29,"src":42970},"\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",[1772,42972,42973],{"start":182},[1775,42974,42975],{},"参数详细描述",[103,42977,42978],{},[109,42979],{"alt":29,"src":42980},"\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",[103,42982,42983],{},[109,42984],{"alt":29,"src":42985},"\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",[103,42987,42988],{},[109,42989],{"alt":29,"src":42990},"\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",[103,42992,42993],{},[109,42994],{"alt":29,"src":42995},"\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",[103,42997,42998],{},[109,42999],{"alt":29,"src":43000},"\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",[103,43002,43003],{},[109,43004],{"alt":29,"src":43005},"\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",[103,43007,43008],{},[109,43009],{"alt":29,"src":43010},"\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",[103,43012,43013],{},[109,43014],{"alt":29,"src":43015},"\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",[103,43017,43018],{},[109,43019],{"alt":29,"src":43020},"\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",[103,43022,43023],{},[109,43024],{"alt":29,"src":43025},"\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",[103,43027,43028],{},[109,43029],{"alt":29,"src":43030},"\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",[103,43032,43033],{},[109,43034],{"alt":29,"src":43035},"\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",[103,43037,43038],{},[109,43039],{"alt":29,"src":43040},"\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",[103,43042,43043],{},[109,43044],{"alt":29,"src":43045},"\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",[103,43047,43048],{},[109,43049],{"alt":29,"src":43050},"\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",[103,43052,43053],{},[109,43054],{"alt":29,"src":43055},"\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",[103,43057,43058],{},[109,43059],{"alt":29,"src":43060},"\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",[103,43062,43063],{},[109,43064],{"alt":29,"src":43065},"\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",[103,43067,43068],{},[109,43069],{"alt":29,"src":43070},"\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",[103,43072,43073],{},[109,43074],{"alt":29,"src":43075},"\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",[103,43077,43078],{},[109,43079],{"alt":29,"src":43080},"\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",[1353,43082,43084],{"id":43083},"_232代码实现","2.3.2.代码实现",[1772,43086,43087],{},[1775,43088,32353],{},[103,43090,43091],{},"根据原理一步一步搭建即可",[24,43093,43095],{"className":26,"code":43094,"language":28,"meta":29,"style":29},"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",[31,43096,43097,43103,43113,43123,43127,43144,43153,43168,43178,43183,43216,43221,43258,43305,43310,43346,43393,43398,43403,43438,43470,43474,43482,43498,43522,43547,43568,43573,43588,43592,43596,43601,43618,43623,43632,43647,43658,43702,43706,43734,43738,43749,43777,43781,43818,43822,43850,43854,43865,43900,43932,43960,43964,43975,44009,44041,44073,44106,44140,44168,44172,44183,44216,44248,44262,44266,44279,44283,44288,44300,44308,44330,44335,44340,44345,44350,44355,44360,44374,44382,44391,44404,44419,44428,44432,44440,44451,44462,44473,44484,44495,44501,44505,44510,44522,44542,44551],{"__ignoreMap":29},[34,43098,43099,43101],{"class":36,"line":37},[34,43100,32036],{"class":55},[34,43102,32039],{"class":40},[34,43104,43105,43107,43109,43111],{"class":36,"line":165},[34,43106,32379],{"class":55},[34,43108,32382],{"class":40},[34,43110,32036],{"class":55},[34,43112,32387],{"class":40},[34,43114,43115,43117,43119,43121],{"class":36,"line":171},[34,43116,32379],{"class":55},[34,43118,32399],{"class":40},[34,43120,32036],{"class":55},[34,43122,32404],{"class":40},[34,43124,43125],{"class":36,"line":182},[34,43126,1475],{"emptyLinePlaceholder":1474},[34,43128,43129,43131,43134,43136,43138,43140,43142],{"class":36,"line":188},[34,43130,16340],{"class":55},[34,43132,43133],{"class":3617}," Inception",[34,43135,286],{"class":40},[34,43137,32420],{"class":3617},[34,43139,2353],{"class":40},[34,43141,32425],{"class":3617},[34,43143,32428],{"class":40},[34,43145,43146,43148,43150],{"class":36,"line":518},[34,43147,32443],{"class":55},[34,43149,32446],{"class":44},[34,43151,43152],{"class":40},"(self,in_channels,c1,c2,c3,c4):\n",[34,43154,43155,43157,43160,43162,43164,43166],{"class":36,"line":524},[34,43156,32459],{"class":44},[34,43158,43159],{"class":40},"(Inception,",[34,43161,32465],{"class":44},[34,43163,32468],{"class":40},[34,43165,32471],{"class":44},[34,43167,3630],{"class":40},[34,43169,43170,43172,43174,43176],{"class":36,"line":530},[34,43171,32487],{"class":44},[34,43173,36412],{"class":40},[34,43175,221],{"class":55},[34,43177,36417],{"class":40},[34,43179,43180],{"class":36,"line":624},[34,43181,43182],{"class":161},"        # 路线1：定义1*1卷积\n",[34,43184,43185,43187,43190,43192,43194,43196,43198,43201,43203,43205,43208,43210,43212,43214],{"class":36,"line":630},[34,43186,32487],{"class":44},[34,43188,43189],{"class":40},".p1_1",[34,43191,221],{"class":55},[34,43193,32495],{"class":40},[34,43195,32498],{"class":51},[34,43197,221],{"class":55},[34,43199,43200],{"class":40},"in_channels,",[34,43202,32507],{"class":51},[34,43204,221],{"class":55},[34,43206,43207],{"class":40},"c1,",[34,43209,32516],{"class":51},[34,43211,221],{"class":55},[34,43213,394],{"class":44},[34,43215,101],{"class":40},[34,43217,43218],{"class":36,"line":636},[34,43219,43220],{"class":161},"        # 路线2：定义1*1卷积和3*3\n",[34,43222,43223,43225,43228,43230,43232,43234,43236,43238,43240,43242,43245,43247,43250,43252,43254,43256],{"class":36,"line":1513},[34,43224,32487],{"class":44},[34,43226,43227],{"class":40},".p2_1",[34,43229,221],{"class":55},[34,43231,32495],{"class":40},[34,43233,32498],{"class":51},[34,43235,221],{"class":55},[34,43237,43200],{"class":40},[34,43239,32507],{"class":51},[34,43241,221],{"class":55},[34,43243,43244],{"class":40},"c2[",[34,43246,177],{"class":44},[34,43248,43249],{"class":40},"],",[34,43251,32516],{"class":51},[34,43253,221],{"class":55},[34,43255,394],{"class":44},[34,43257,101],{"class":40},[34,43259,43260,43262,43265,43267,43269,43271,43273,43275,43277,43279,43281,43283,43285,43287,43289,43291,43293,43295,43297,43299,43301,43303],{"class":36,"line":1519},[34,43261,32487],{"class":44},[34,43263,43264],{"class":40},".p2_2",[34,43266,221],{"class":55},[34,43268,32495],{"class":40},[34,43270,32498],{"class":51},[34,43272,221],{"class":55},[34,43274,43244],{"class":40},[34,43276,177],{"class":44},[34,43278,43249],{"class":40},[34,43280,32507],{"class":51},[34,43282,221],{"class":55},[34,43284,43244],{"class":40},[34,43286,394],{"class":44},[34,43288,43249],{"class":40},[34,43290,32516],{"class":51},[34,43292,221],{"class":55},[34,43294,337],{"class":44},[34,43296,291],{"class":40},[34,43298,32525],{"class":51},[34,43300,221],{"class":55},[34,43302,394],{"class":44},[34,43304,101],{"class":40},[34,43306,43307],{"class":36,"line":3283},[34,43308,43309],{"class":161},"        # 路线3：定义1*1卷积和5*5\n",[34,43311,43312,43314,43317,43319,43321,43323,43325,43327,43329,43331,43334,43336,43338,43340,43342,43344],{"class":36,"line":3297},[34,43313,32487],{"class":44},[34,43315,43316],{"class":40},".p3_1",[34,43318,221],{"class":55},[34,43320,32495],{"class":40},[34,43322,32498],{"class":51},[34,43324,221],{"class":55},[34,43326,43200],{"class":40},[34,43328,32507],{"class":51},[34,43330,221],{"class":55},[34,43332,43333],{"class":40},"c3[",[34,43335,177],{"class":44},[34,43337,43249],{"class":40},[34,43339,32516],{"class":51},[34,43341,221],{"class":55},[34,43343,394],{"class":44},[34,43345,101],{"class":40},[34,43347,43348,43350,43353,43355,43357,43359,43361,43363,43365,43367,43369,43371,43373,43375,43377,43379,43381,43383,43385,43387,43389,43391],{"class":36,"line":3302},[34,43349,32487],{"class":44},[34,43351,43352],{"class":40},".p3_2",[34,43354,221],{"class":55},[34,43356,32495],{"class":40},[34,43358,32498],{"class":51},[34,43360,221],{"class":55},[34,43362,43333],{"class":40},[34,43364,177],{"class":44},[34,43366,43249],{"class":40},[34,43368,32507],{"class":51},[34,43370,221],{"class":55},[34,43372,43333],{"class":40},[34,43374,394],{"class":44},[34,43376,43249],{"class":40},[34,43378,32516],{"class":51},[34,43380,221],{"class":55},[34,43382,224],{"class":44},[34,43384,291],{"class":40},[34,43386,32525],{"class":51},[34,43388,221],{"class":55},[34,43390,332],{"class":44},[34,43392,101],{"class":40},[34,43394,43395],{"class":36,"line":3308},[34,43396,43397],{"class":161},"        # 路线4：定义3*3最大池化和1*1卷积\n",[34,43399,43400],{"class":36,"line":3328},[34,43401,43402],{"class":161},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[34,43404,43405,43407,43410,43412,43414,43416,43418,43420,43422,43424,43426,43428,43430,43432,43434,43436],{"class":36,"line":3333},[34,43406,32487],{"class":44},[34,43408,43409],{"class":40},".p4_1",[34,43411,221],{"class":55},[34,43413,36470],{"class":40},[34,43415,32516],{"class":51},[34,43417,221],{"class":55},[34,43419,337],{"class":44},[34,43421,291],{"class":40},[34,43423,32571],{"class":51},[34,43425,221],{"class":55},[34,43427,394],{"class":44},[34,43429,291],{"class":40},[34,43431,32525],{"class":51},[34,43433,221],{"class":55},[34,43435,394],{"class":44},[34,43437,101],{"class":40},[34,43439,43440,43442,43445,43447,43449,43451,43453,43455,43457,43459,43462,43464,43466,43468],{"class":36,"line":3347},[34,43441,32487],{"class":44},[34,43443,43444],{"class":40},".p4_2",[34,43446,221],{"class":55},[34,43448,32495],{"class":40},[34,43450,32498],{"class":51},[34,43452,221],{"class":55},[34,43454,43200],{"class":40},[34,43456,32507],{"class":51},[34,43458,221],{"class":55},[34,43460,43461],{"class":40},"c4,",[34,43463,32516],{"class":51},[34,43465,221],{"class":55},[34,43467,394],{"class":44},[34,43469,101],{"class":40},[34,43471,43472],{"class":36,"line":3352},[34,43473,1475],{"emptyLinePlaceholder":1474},[34,43475,43476,43478,43480],{"class":36,"line":3381},[34,43477,32443],{"class":55},[34,43479,32735],{"class":3617},[34,43481,32738],{"class":40},[34,43483,43484,43487,43489,43491,43493,43495],{"class":36,"line":3386},[34,43485,43486],{"class":40},"        p1",[34,43488,221],{"class":55},[34,43490,32465],{"class":44},[34,43492,36825],{"class":40},[34,43494,32465],{"class":44},[34,43496,43497],{"class":40},".p1_1(x))\n",[34,43499,43500,43502,43504,43506,43508,43510,43513,43515,43517,43519],{"class":36,"line":3403},[34,43501,8735],{"class":40},[34,43503,221],{"class":55},[34,43505,32465],{"class":44},[34,43507,36825],{"class":40},[34,43509,32465],{"class":44},[34,43511,43512],{"class":40},".p2_2(",[34,43514,32465],{"class":44},[34,43516,36825],{"class":40},[34,43518,32465],{"class":44},[34,43520,43521],{"class":40},".p2_1(x))))\n",[34,43523,43524,43527,43529,43531,43533,43535,43538,43540,43542,43544],{"class":36,"line":3408},[34,43525,43526],{"class":40},"        p3",[34,43528,221],{"class":55},[34,43530,32465],{"class":44},[34,43532,36825],{"class":40},[34,43534,32465],{"class":44},[34,43536,43537],{"class":40},".p3_2(",[34,43539,32465],{"class":44},[34,43541,36825],{"class":40},[34,43543,32465],{"class":44},[34,43545,43546],{"class":40},".p3_1(x))))\n",[34,43548,43549,43552,43554,43556,43558,43560,43563,43565],{"class":36,"line":3413},[34,43550,43551],{"class":40},"        p4",[34,43553,221],{"class":55},[34,43555,32465],{"class":44},[34,43557,36825],{"class":40},[34,43559,32465],{"class":44},[34,43561,43562],{"class":40},".p4_2(",[34,43564,32465],{"class":44},[34,43566,43567],{"class":40},".p4_1(x)))\n",[34,43569,43570],{"class":36,"line":3418},[34,43571,43572],{"class":161},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[34,43574,43575,43577,43580,43582,43584,43586],{"class":36,"line":3432},[34,43576,16398],{"class":55},[34,43578,43579],{"class":40}," torch.cat((p1,p2,p3,p4),",[34,43581,34326],{"class":51},[34,43583,221],{"class":55},[34,43585,394],{"class":44},[34,43587,101],{"class":40},[34,43589,43590],{"class":36,"line":3437},[34,43591,1475],{"emptyLinePlaceholder":1474},[34,43593,43594],{"class":36,"line":4230},[34,43595,1475],{"emptyLinePlaceholder":1474},[34,43597,43598],{"class":36,"line":4244},[34,43599,43600],{"class":161},"# 搭建GoogLeNet网络\n",[34,43602,43603,43605,43608,43610,43612,43614,43616],{"class":36,"line":4252},[34,43604,16340],{"class":55},[34,43606,43607],{"class":3617}," GoogLeNet",[34,43609,286],{"class":40},[34,43611,32420],{"class":3617},[34,43613,2353],{"class":40},[34,43615,32425],{"class":3617},[34,43617,32428],{"class":40},[34,43619,43620],{"class":36,"line":4257},[34,43621,43622],{"class":161},"    # 必须把Inception导入到里边\n",[34,43624,43625,43627,43629],{"class":36,"line":4263},[34,43626,32443],{"class":55},[34,43628,32446],{"class":44},[34,43630,43631],{"class":40},"(self,Inception):\n",[34,43633,43634,43636,43639,43641,43643,43645],{"class":36,"line":4269},[34,43635,32459],{"class":44},[34,43637,43638],{"class":40},"(GoogLeNet,",[34,43640,32465],{"class":44},[34,43642,32468],{"class":40},[34,43644,32471],{"class":44},[34,43646,3630],{"class":40},[34,43648,43649,43651,43654,43656],{"class":36,"line":4274},[34,43650,32487],{"class":44},[34,43652,43653],{"class":40},".b1",[34,43655,221],{"class":55},[34,43657,39650],{"class":40},[34,43659,43660,43662,43664,43666,43668,43670,43672,43674,43676,43678,43680,43682,43684,43686,43688,43690,43692,43694,43696,43698,43700],{"class":36,"line":9598},[34,43661,39655],{"class":40},[34,43663,32498],{"class":51},[34,43665,221],{"class":55},[34,43667,394],{"class":44},[34,43669,291],{"class":40},[34,43671,32507],{"class":51},[34,43673,221],{"class":55},[34,43675,2012],{"class":44},[34,43677,291],{"class":40},[34,43679,32516],{"class":51},[34,43681,221],{"class":55},[34,43683,609],{"class":44},[34,43685,291],{"class":40},[34,43687,32571],{"class":51},[34,43689,221],{"class":55},[34,43691,332],{"class":44},[34,43693,291],{"class":40},[34,43695,32525],{"class":51},[34,43697,221],{"class":55},[34,43699,337],{"class":44},[34,43701,39688],{"class":40},[34,43703,43704],{"class":36,"line":9622},[34,43705,39693],{"class":40},[34,43707,43708,43710,43712,43714,43716,43718,43720,43722,43724,43726,43728,43730,43732],{"class":36,"line":9627},[34,43709,39738],{"class":40},[34,43711,32516],{"class":51},[34,43713,221],{"class":55},[34,43715,337],{"class":44},[34,43717,291],{"class":40},[34,43719,32571],{"class":51},[34,43721,221],{"class":55},[34,43723,332],{"class":44},[34,43725,291],{"class":40},[34,43727,32525],{"class":51},[34,43729,221],{"class":55},[34,43731,394],{"class":44},[34,43733,101],{"class":40},[34,43735,43736],{"class":36,"line":9633},[34,43737,39767],{"class":40},[34,43739,43740,43742,43745,43747],{"class":36,"line":9660},[34,43741,32487],{"class":44},[34,43743,43744],{"class":40},".b2",[34,43746,221],{"class":55},[34,43748,39650],{"class":40},[34,43750,43751,43753,43755,43757,43759,43761,43763,43765,43767,43769,43771,43773,43775],{"class":36,"line":9665},[34,43752,39655],{"class":40},[34,43754,32498],{"class":51},[34,43756,221],{"class":55},[34,43758,2012],{"class":44},[34,43760,291],{"class":40},[34,43762,32507],{"class":51},[34,43764,221],{"class":55},[34,43766,2012],{"class":44},[34,43768,291],{"class":40},[34,43770,32516],{"class":51},[34,43772,221],{"class":55},[34,43774,394],{"class":44},[34,43776,39688],{"class":40},[34,43778,43779],{"class":36,"line":9671},[34,43780,39693],{"class":40},[34,43782,43783,43785,43787,43789,43791,43793,43795,43797,43800,43802,43804,43806,43808,43810,43812,43814,43816],{"class":36,"line":9683},[34,43784,39655],{"class":40},[34,43786,32498],{"class":51},[34,43788,221],{"class":55},[34,43790,2012],{"class":44},[34,43792,291],{"class":40},[34,43794,32507],{"class":51},[34,43796,221],{"class":55},[34,43798,43799],{"class":44},"192",[34,43801,291],{"class":40},[34,43803,32516],{"class":51},[34,43805,221],{"class":55},[34,43807,337],{"class":44},[34,43809,291],{"class":40},[34,43811,32525],{"class":51},[34,43813,221],{"class":55},[34,43815,394],{"class":44},[34,43817,39688],{"class":40},[34,43819,43820],{"class":36,"line":9695},[34,43821,39693],{"class":40},[34,43823,43824,43826,43828,43830,43832,43834,43836,43838,43840,43842,43844,43846,43848],{"class":36,"line":9707},[34,43825,39738],{"class":40},[34,43827,32516],{"class":51},[34,43829,221],{"class":55},[34,43831,337],{"class":44},[34,43833,291],{"class":40},[34,43835,32571],{"class":51},[34,43837,221],{"class":55},[34,43839,332],{"class":44},[34,43841,291],{"class":40},[34,43843,32525],{"class":51},[34,43845,221],{"class":55},[34,43847,394],{"class":44},[34,43849,101],{"class":40},[34,43851,43852],{"class":36,"line":11366},[34,43853,39767],{"class":40},[34,43855,43856,43858,43861,43863],{"class":36,"line":11391},[34,43857,32487],{"class":44},[34,43859,43860],{"class":40},".b3",[34,43862,221],{"class":55},[34,43864,39650],{"class":40},[34,43866,43867,43870,43872,43874,43876,43879,43881,43883,43885,43888,43890,43892,43894,43896,43898],{"class":36,"line":11414},[34,43868,43869],{"class":40},"            Inception(",[34,43871,43799],{"class":44},[34,43873,291],{"class":40},[34,43875,2012],{"class":44},[34,43877,43878],{"class":40},",(",[34,43880,2018],{"class":44},[34,43882,291],{"class":40},[34,43884,33711],{"class":44},[34,43886,43887],{"class":40},"),(",[34,43889,2396],{"class":44},[34,43891,291],{"class":40},[34,43893,2006],{"class":44},[34,43895,847],{"class":40},[34,43897,2006],{"class":44},[34,43899,39688],{"class":40},[34,43901,43902,43904,43906,43908,43910,43912,43914,43916,43918,43920,43922,43924,43926,43928,43930],{"class":36,"line":11438},[34,43903,43869],{"class":40},[34,43905,36511],{"class":44},[34,43907,291],{"class":40},[34,43909,33711],{"class":44},[34,43911,43878],{"class":40},[34,43913,33711],{"class":44},[34,43915,291],{"class":40},[34,43917,43799],{"class":44},[34,43919,43887],{"class":40},[34,43921,2006],{"class":44},[34,43923,291],{"class":40},[34,43925,2018],{"class":44},[34,43927,847],{"class":40},[34,43929,2012],{"class":44},[34,43931,39688],{"class":40},[34,43933,43934,43936,43938,43940,43942,43944,43946,43948,43950,43952,43954,43956,43958],{"class":36,"line":11443},[34,43935,39738],{"class":40},[34,43937,32516],{"class":51},[34,43939,221],{"class":55},[34,43941,337],{"class":44},[34,43943,291],{"class":40},[34,43945,32571],{"class":51},[34,43947,221],{"class":55},[34,43949,332],{"class":44},[34,43951,291],{"class":40},[34,43953,32525],{"class":51},[34,43955,221],{"class":55},[34,43957,394],{"class":44},[34,43959,101],{"class":40},[34,43961,43962],{"class":36,"line":11448},[34,43963,39767],{"class":40},[34,43965,43966,43968,43971,43973],{"class":36,"line":11453},[34,43967,32487],{"class":44},[34,43969,43970],{"class":40},".b4",[34,43972,221],{"class":55},[34,43974,39650],{"class":40},[34,43976,43977,43979,43982,43984,43986,43988,43990,43992,43995,43997,43999,44001,44003,44005,44007],{"class":36,"line":11462},[34,43978,43869],{"class":40},[34,43980,43981],{"class":44},"480",[34,43983,291],{"class":40},[34,43985,43799],{"class":44},[34,43987,43878],{"class":40},[34,43989,2018],{"class":44},[34,43991,291],{"class":40},[34,43993,43994],{"class":44},"208",[34,43996,43887],{"class":40},[34,43998,2396],{"class":44},[34,44000,291],{"class":40},[34,44002,2402],{"class":44},[34,44004,847],{"class":40},[34,44006,2012],{"class":44},[34,44008,39688],{"class":40},[34,44010,44011,44013,44015,44017,44019,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039],{"class":36,"line":11467},[34,44012,43869],{"class":40},[34,44014,40098],{"class":44},[34,44016,291],{"class":40},[34,44018,22694],{"class":44},[34,44020,43878],{"class":40},[34,44022,2413],{"class":44},[34,44024,291],{"class":40},[34,44026,33142],{"class":44},[34,44028,43887],{"class":40},[34,44030,2593],{"class":44},[34,44032,291],{"class":40},[34,44034,2012],{"class":44},[34,44036,847],{"class":40},[34,44038,2012],{"class":44},[34,44040,39688],{"class":40},[34,44042,44043,44045,44047,44049,44051,44053,44055,44057,44059,44061,44063,44065,44067,44069,44071],{"class":36,"line":11473},[34,44044,43869],{"class":40},[34,44046,40098],{"class":44},[34,44048,291],{"class":40},[34,44050,33711],{"class":44},[34,44052,43878],{"class":40},[34,44054,33711],{"class":44},[34,44056,291],{"class":40},[34,44058,36511],{"class":44},[34,44060,43887],{"class":40},[34,44062,2593],{"class":44},[34,44064,291],{"class":40},[34,44066,2012],{"class":44},[34,44068,847],{"class":40},[34,44070,2012],{"class":44},[34,44072,39688],{"class":40},[34,44074,44075,44077,44079,44081,44083,44085,44087,44089,44092,44094,44096,44098,44100,44102,44104],{"class":36,"line":11494},[34,44076,43869],{"class":40},[34,44078,40098],{"class":44},[34,44080,291],{"class":40},[34,44082,2413],{"class":44},[34,44084,43878],{"class":40},[34,44086,33711],{"class":44},[34,44088,291],{"class":40},[34,44090,44091],{"class":44},"288",[34,44093,43887],{"class":40},[34,44095,2006],{"class":44},[34,44097,291],{"class":40},[34,44099,2012],{"class":44},[34,44101,847],{"class":40},[34,44103,2012],{"class":44},[34,44105,39688],{"class":40},[34,44107,44108,44110,44113,44115,44117,44119,44121,44123,44126,44128,44130,44132,44134,44136,44138],{"class":36,"line":11500},[34,44109,43869],{"class":40},[34,44111,44112],{"class":44},"528",[34,44114,291],{"class":40},[34,44116,36511],{"class":44},[34,44118,43878],{"class":40},[34,44120,22694],{"class":44},[34,44122,291],{"class":40},[34,44124,44125],{"class":44},"320",[34,44127,43887],{"class":40},[34,44129,2006],{"class":44},[34,44131,291],{"class":40},[34,44133,33711],{"class":44},[34,44135,847],{"class":40},[34,44137,33711],{"class":44},[34,44139,39688],{"class":40},[34,44141,44142,44144,44146,44148,44150,44152,44154,44156,44158,44160,44162,44164,44166],{"class":36,"line":11514},[34,44143,39738],{"class":40},[34,44145,32516],{"class":51},[34,44147,221],{"class":55},[34,44149,337],{"class":44},[34,44151,291],{"class":40},[34,44153,32571],{"class":51},[34,44155,221],{"class":55},[34,44157,332],{"class":44},[34,44159,291],{"class":40},[34,44161,32525],{"class":51},[34,44163,221],{"class":55},[34,44165,394],{"class":44},[34,44167,101],{"class":40},[34,44169,44170],{"class":36,"line":11520},[34,44171,39767],{"class":40},[34,44173,44174,44176,44179,44181],{"class":36,"line":11547},[34,44175,32487],{"class":44},[34,44177,44178],{"class":40},".b5",[34,44180,221],{"class":55},[34,44182,39650],{"class":40},[34,44184,44185,44187,44190,44192,44194,44196,44198,44200,44202,44204,44206,44208,44210,44212,44214],{"class":36,"line":11556},[34,44186,43869],{"class":40},[34,44188,44189],{"class":44},"832",[34,44191,291],{"class":40},[34,44193,36511],{"class":44},[34,44195,43878],{"class":40},[34,44197,22694],{"class":44},[34,44199,291],{"class":40},[34,44201,44125],{"class":44},[34,44203,43887],{"class":40},[34,44205,2006],{"class":44},[34,44207,291],{"class":40},[34,44209,33711],{"class":44},[34,44211,847],{"class":40},[34,44213,33711],{"class":44},[34,44215,39688],{"class":40},[34,44217,44218,44220,44222,44224,44226,44228,44230,44232,44234,44236,44238,44240,44242,44244,44246],{"class":36,"line":11562},[34,44219,43869],{"class":40},[34,44221,44189],{"class":44},[34,44223,291],{"class":40},[34,44225,36581],{"class":44},[34,44227,43878],{"class":40},[34,44229,43799],{"class":44},[34,44231,291],{"class":40},[34,44233,36581],{"class":44},[34,44235,43887],{"class":40},[34,44237,2402],{"class":44},[34,44239,291],{"class":40},[34,44241,33711],{"class":44},[34,44243,847],{"class":40},[34,44245,33711],{"class":44},[34,44247,39688],{"class":40},[34,44249,44250,44253,44255,44257,44259],{"class":36,"line":11570},[34,44251,44252],{"class":40},"            nn.AdaptiveAvgPool2d((",[34,44254,394],{"class":44},[34,44256,291],{"class":40},[34,44258,394],{"class":44},[34,44260,44261],{"class":40},")),\n",[34,44263,44264],{"class":36,"line":11575},[34,44265,40431],{"class":40},[34,44267,44268,44270,44273,44275,44277],{"class":36,"line":18250},[34,44269,40436],{"class":40},[34,44271,44272],{"class":44},"1024",[34,44274,291],{"class":40},[34,44276,410],{"class":44},[34,44278,101],{"class":40},[34,44280,44281],{"class":36,"line":18256},[34,44282,39767],{"class":40},[34,44284,44285],{"class":36,"line":18279},[34,44286,44287],{"class":161},"        # 对模型参数初始化\n",[34,44289,44290,44292,44294,44296,44298],{"class":36,"line":18285},[34,44291,5056],{"class":55},[34,44293,40509],{"class":40},[34,44295,27689],{"class":55},[34,44297,40514],{"class":44},[34,44299,40517],{"class":40},[34,44301,44302,44304,44306],{"class":36,"line":18308},[34,44303,6294],{"class":55},[34,44305,40529],{"class":44},[34,44307,40532],{"class":40},[34,44309,44310,44312,44315,44317,44320,44322,44324,44326,44328],{"class":36,"line":18322},[34,44311,40542],{"class":40},[34,44313,44314],{"class":51},"mode",[34,44316,221],{"class":55},[34,44318,44319],{"class":504},"'fan_out'",[34,44321,291],{"class":40},[34,44323,40545],{"class":51},[34,44325,221],{"class":55},[34,44327,40550],{"class":504},[34,44329,101],{"class":40},[34,44331,44332],{"class":36,"line":18342},[34,44333,44334],{"class":161},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[34,44336,44337],{"class":36,"line":18348},[34,44338,44339],{"class":161},"                # ② mode = 'fan_out'决定使用的fan值：\n",[34,44341,44342],{"class":36,"line":18359},[34,44343,44344],{"class":161},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[34,44346,44347],{"class":36,"line":18382},[34,44348,44349],{"class":161},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[34,44351,44352],{"class":36,"line":18404},[34,44353,44354],{"class":161},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[34,44356,44357],{"class":36,"line":18409},[34,44358,44359],{"class":161},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[34,44361,44362,44364,44366,44368,44370,44372],{"class":36,"line":18415},[34,44363,40562],{"class":55},[34,44365,40565],{"class":40},[34,44367,40568],{"class":55},[34,44369,40571],{"class":55},[34,44371,59],{"class":44},[34,44373,5392],{"class":40},[34,44375,44376,44378,44380],{"class":36,"line":18429},[34,44377,40585],{"class":40},[34,44379,177],{"class":44},[34,44381,101],{"class":40},[34,44383,44384,44387,44389],{"class":36,"line":18442},[34,44385,44386],{"class":55},"                elif",[34,44388,40529],{"class":44},[34,44390,40604],{"class":40},[34,44392,44393,44396,44398,44400,44402],{"class":36,"line":18447},[34,44394,44395],{"class":40},"                    nn.init.normal_(m.weight,",[34,44397,177],{"class":44},[34,44399,291],{"class":40},[34,44401,40626],{"class":44},[34,44403,101],{"class":40},[34,44405,44406,44409,44411,44413,44415,44417],{"class":36,"line":18461},[34,44407,44408],{"class":55},"                    if",[34,44410,40565],{"class":40},[34,44412,40568],{"class":55},[34,44414,40571],{"class":55},[34,44416,59],{"class":44},[34,44418,5392],{"class":40},[34,44420,44421,44424,44426],{"class":36,"line":18466},[34,44422,44423],{"class":40},"                        nn.init.constant_(m.bias,",[34,44425,177],{"class":44},[34,44427,101],{"class":40},[34,44429,44430],{"class":36,"line":18472},[34,44431,36806],{"class":161},[34,44433,44434,44436,44438],{"class":36,"line":18477},[34,44435,32443],{"class":55},[34,44437,32735],{"class":3617},[34,44439,32738],{"class":40},[34,44441,44442,44444,44446,44448],{"class":36,"line":18491},[34,44443,32743],{"class":40},[34,44445,221],{"class":55},[34,44447,32465],{"class":44},[34,44449,44450],{"class":40},".b1(x)\n",[34,44452,44453,44455,44457,44459],{"class":36,"line":18496},[34,44454,32743],{"class":40},[34,44456,221],{"class":55},[34,44458,32465],{"class":44},[34,44460,44461],{"class":40},".b2(x)\n",[34,44463,44464,44466,44468,44470],{"class":36,"line":18501},[34,44465,32743],{"class":40},[34,44467,221],{"class":55},[34,44469,32465],{"class":44},[34,44471,44472],{"class":40},".b3(x)\n",[34,44474,44475,44477,44479,44481],{"class":36,"line":18515},[34,44476,32743],{"class":40},[34,44478,221],{"class":55},[34,44480,32465],{"class":44},[34,44482,44483],{"class":40},".b4(x)\n",[34,44485,44486,44488,44490,44492],{"class":36,"line":18527},[34,44487,32743],{"class":40},[34,44489,221],{"class":55},[34,44491,32465],{"class":44},[34,44493,44494],{"class":40},".b5(x)\n",[34,44496,44497,44499],{"class":36,"line":18532},[34,44498,16398],{"class":55},[34,44500,32851],{"class":40},[34,44502,44503],{"class":36,"line":18545},[34,44504,1475],{"emptyLinePlaceholder":1474},[34,44506,44507],{"class":36,"line":18550},[34,44508,44509],{"class":161},"# 模型展示\n",[34,44511,44512,44514,44516,44518,44520],{"class":36,"line":18555},[34,44513,3189],{"class":55},[34,44515,32862],{"class":44},[34,44517,4602],{"class":55},[34,44519,32867],{"class":504},[34,44521,5392],{"class":40},[34,44523,44524,44526,44528,44530,44532,44534,44536,44538,44540],{"class":36,"line":18560},[34,44525,32879],{"class":40},[34,44527,221],{"class":55},[34,44529,32094],{"class":40},[34,44531,32886],{"class":504},[34,44533,3358],{"class":55},[34,44535,32891],{"class":40},[34,44537,3355],{"class":55},[34,44539,32119],{"class":504},[34,44541,101],{"class":40},[34,44543,44544,44546,44548],{"class":36,"line":18573},[34,44545,32931],{"class":40},[34,44547,221],{"class":55},[34,44549,44550],{"class":40},"GoogLeNet(Inception).to(device)\n",[34,44552,44553,44555,44557,44559,44561,44563,44565,44567],{"class":36,"line":18578},[34,44554,32941],{"class":44},[34,44556,32944],{"class":40},[34,44558,394],{"class":44},[34,44560,291],{"class":40},[34,44562,33142],{"class":44},[34,44564,291],{"class":40},[34,44566,33142],{"class":44},[34,44568,32957],{"class":40},[1772,44570,44571],{"start":165},[1775,44572,40823],{},[24,44574,44576],{"className":26,"code":44575,"language":28,"meta":29,"style":29},"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",[31,44577,44578,44584,44590,44600,44606,44616,44626,44636,44646,44656,44660,44671,44681,44685,44689,44693,44701,44713,44723,44739,44749,44781,44795,44805,44815,44819,44829,44843,44853,44863,44873,44879,44883,44887,44891,44895,44899,44907,44927,44931,44935,44939,44943,44947,44963,44967,44971,44979,44983,44987,44995,44999,45003,45007,45015,45019,45023,45027,45031,45039,45043,45051,45055,45063,45067,45075,45079,45087,45091,45095,45103,45107,45111,45115,45127,45151,45165,45169,45173,45177,45185,45189,45197,45201,45209,45213,45221,45225,45233,45237,45245,45249,45261,45265,45273,45277,45285,45289,45293,45297,45301,45309,45313,45329,45333,45341,45345,45349,45353,45357,45361,45365,45369,45385,45389,45401,45405,45417,45421,45433,45437,45445,45449,45457,45461,45465,45469,45475,45479,45487,45491,45507,45511,45519,45523,45539,45551,45555,45567,45571,45575,45583,45587,45591,45599,45603,45611,45615,45623,45627,45631,45673,45715,45719,45723,45739,45743,45759,45763,45767,45775,45779,45783,45795,45833,45837,45841,45849,45853,45867,45877,45883,45889,45895,45901,45905,45909,45915,45919,45923,45931,45935,45953,45957,45961,45965,45981,45985,45989,45993,45997,46001,46021,46041,46045,46049,46053,46061,46069,46073,46089,46109,46129,46133,46137,46145,46153,46157,46161,46165,46177,46181,46191,46199,46216],{"__ignoreMap":29},[34,44579,44580,44582],{"class":36,"line":37},[34,44581,32036],{"class":55},[34,44583,33463],{"class":40},[34,44585,44586,44588],{"class":36,"line":165},[34,44587,32036],{"class":55},[34,44589,33470],{"class":40},[34,44591,44592,44594,44596,44598],{"class":36,"line":171},[34,44593,32036],{"class":55},[34,44595,33481],{"class":40},[34,44597,33025],{"class":55},[34,44599,33486],{"class":40},[34,44601,44602,44604],{"class":36,"line":182},[34,44603,32036],{"class":55},[34,44605,32039],{"class":40},[34,44607,44608,44610,44612,44614],{"class":36,"line":188},[34,44609,32379],{"class":55},[34,44611,33057],{"class":40},[34,44613,32036],{"class":55},[34,44615,33503],{"class":40},[34,44617,44618,44620,44622,44624],{"class":36,"line":518},[34,44619,32379],{"class":55},[34,44621,33010],{"class":40},[34,44623,32036],{"class":55},[34,44625,33015],{"class":40},[34,44627,44628,44630,44632,44634],{"class":36,"line":524},[34,44629,32379],{"class":55},[34,44631,33040],{"class":40},[34,44633,32036],{"class":55},[34,44635,33045],{"class":40},[34,44637,44638,44640,44642,44644],{"class":36,"line":530},[34,44639,32036],{"class":55},[34,44641,33057],{"class":40},[34,44643,33025],{"class":55},[34,44645,33062],{"class":40},[34,44647,44648,44650,44652,44654],{"class":36,"line":624},[34,44649,32036],{"class":55},[34,44651,33074],{"class":40},[34,44653,33025],{"class":55},[34,44655,33079],{"class":40},[34,44657,44658],{"class":36,"line":630},[34,44659,33548],{"class":161},[34,44661,44662,44664,44666,44668],{"class":36,"line":636},[34,44663,32379],{"class":55},[34,44665,33555],{"class":40},[34,44667,32036],{"class":55},[34,44669,44670],{"class":40}," GoogLeNet, Inception\n",[34,44672,44673,44675,44677,44679],{"class":36,"line":1513},[34,44674,32379],{"class":55},[34,44676,32382],{"class":40},[34,44678,32036],{"class":55},[34,44680,32387],{"class":40},[34,44682,44683],{"class":36,"line":1519},[34,44684,1475],{"emptyLinePlaceholder":1474},[34,44686,44687],{"class":36,"line":3283},[34,44688,1475],{"emptyLinePlaceholder":1474},[34,44690,44691],{"class":36,"line":3297},[34,44692,33583],{"class":161},[34,44694,44695,44697,44699],{"class":36,"line":3302},[34,44696,33588],{"class":55},[34,44698,33591],{"class":3617},[34,44700,33594],{"class":40},[34,44702,44703,44705,44707,44709,44711],{"class":36,"line":3308},[34,44704,33599],{"class":40},[34,44706,221],{"class":55},[34,44708,33097],{"class":40},[34,44710,33105],{"class":504},[34,44712,33108],{"class":40},[34,44714,44715,44717,44719,44721],{"class":36,"line":3328},[34,44716,33612],{"class":51},[34,44718,221],{"class":55},[34,44720,33118],{"class":44},[34,44722,33108],{"class":40},[34,44724,44725,44727,44729,44731,44733,44735,44737],{"class":36,"line":3333},[34,44726,33623],{"class":51},[34,44728,221],{"class":55},[34,44730,33135],{"class":40},[34,44732,218],{"class":51},[34,44734,221],{"class":55},[34,44736,37090],{"class":44},[34,44738,33145],{"class":40},[34,44740,44741,44743,44745,44747],{"class":36,"line":3347},[34,44742,33640],{"class":51},[34,44744,221],{"class":55},[34,44746,33118],{"class":44},[34,44748,101],{"class":40},[34,44750,44751,44753,44755,44757,44759,44761,44763,44765,44767,44769,44771,44773,44775,44777,44779],{"class":36,"line":3352},[34,44752,33651],{"class":40},[34,44754,221],{"class":55},[34,44756,33656],{"class":40},[34,44758,33659],{"class":44},[34,44760,286],{"class":40},[34,44762,33664],{"class":44},[34,44764,2252],{"class":55},[34,44766,9008],{"class":44},[34,44768,33671],{"class":40},[34,44770,33659],{"class":44},[34,44772,286],{"class":40},[34,44774,33678],{"class":44},[34,44776,2252],{"class":55},[34,44778,9008],{"class":44},[34,44780,33685],{"class":40},[34,44782,44783,44785,44787,44789,44791,44793],{"class":36,"line":3381},[34,44784,33690],{"class":40},[34,44786,221],{"class":55},[34,44788,33695],{"class":40},[34,44790,33178],{"class":51},[34,44792,221],{"class":55},[34,44794,33183],{"class":40},[34,44796,44797,44799,44801,44803],{"class":36,"line":3386},[34,44798,33706],{"class":51},[34,44800,221],{"class":55},[34,44802,2006],{"class":44},[34,44804,33108],{"class":40},[34,44806,44807,44809,44811,44813],{"class":36,"line":3403},[34,44808,33718],{"class":51},[34,44810,221],{"class":55},[34,44812,33118],{"class":44},[34,44814,33108],{"class":40},[34,44816,44817],{"class":36,"line":3408},[34,44818,33729],{"class":161},[34,44820,44821,44823,44825,44827],{"class":36,"line":3413},[34,44822,33734],{"class":51},[34,44824,221],{"class":55},[34,44826,2195],{"class":44},[34,44828,101],{"class":40},[34,44830,44831,44833,44835,44837,44839,44841],{"class":36,"line":3418},[34,44832,33745],{"class":40},[34,44834,221],{"class":55},[34,44836,33175],{"class":40},[34,44838,33178],{"class":51},[34,44840,221],{"class":55},[34,44842,33756],{"class":40},[34,44844,44845,44847,44849,44851],{"class":36,"line":3432},[34,44846,33761],{"class":51},[34,44848,221],{"class":55},[34,44850,2006],{"class":44},[34,44852,33108],{"class":40},[34,44854,44855,44857,44859,44861],{"class":36,"line":3437},[34,44856,33772],{"class":51},[34,44858,221],{"class":55},[34,44860,33118],{"class":44},[34,44862,33108],{"class":40},[34,44864,44865,44867,44869,44871],{"class":36,"line":4230},[34,44866,33783],{"class":51},[34,44868,221],{"class":55},[34,44870,2195],{"class":44},[34,44872,101],{"class":40},[34,44874,44875,44877],{"class":36,"line":4244},[34,44876,5743],{"class":55},[34,44878,33796],{"class":40},[34,44880,44881],{"class":36,"line":4252},[34,44882,1475],{"emptyLinePlaceholder":1474},[34,44884,44885],{"class":36,"line":4257},[34,44886,33805],{"class":161},[34,44888,44889],{"class":36,"line":4263},[34,44890,33810],{"class":161},[34,44892,44893],{"class":36,"line":4269},[34,44894,1475],{"emptyLinePlaceholder":1474},[34,44896,44897],{"class":36,"line":4274},[34,44898,33819],{"class":161},[34,44900,44901,44903,44905],{"class":36,"line":9598},[34,44902,33588],{"class":55},[34,44904,33826],{"class":3617},[34,44906,33829],{"class":40},[34,44908,44909,44911,44913,44915,44917,44919,44921,44923,44925],{"class":36,"line":9622},[34,44910,32879],{"class":40},[34,44912,221],{"class":55},[34,44914,32094],{"class":40},[34,44916,32886],{"class":504},[34,44918,3358],{"class":55},[34,44920,32891],{"class":40},[34,44922,3355],{"class":55},[34,44924,33848],{"class":504},[34,44926,101],{"class":40},[34,44928,44929],{"class":36,"line":9627},[34,44930,1475],{"emptyLinePlaceholder":1474},[34,44932,44933],{"class":36,"line":9633},[34,44934,1475],{"emptyLinePlaceholder":1474},[34,44936,44937],{"class":36,"line":9660},[34,44938,33863],{"class":161},[34,44940,44941],{"class":36,"line":9665},[34,44942,33868],{"class":161},[34,44944,44945],{"class":36,"line":9671},[34,44946,33873],{"class":161},[34,44948,44949,44951,44953,44955,44957,44959,44961],{"class":36,"line":9683},[34,44950,33878],{"class":40},[34,44952,221],{"class":55},[34,44954,33883],{"class":40},[34,44956,33886],{"class":51},[34,44958,221],{"class":55},[34,44960,33891],{"class":44},[34,44962,101],{"class":40},[34,44964,44965],{"class":36,"line":9695},[34,44966,1475],{"emptyLinePlaceholder":1474},[34,44968,44969],{"class":36,"line":9707},[34,44970,33902],{"class":161},[34,44972,44973,44975,44977],{"class":36,"line":11366},[34,44974,33907],{"class":40},[34,44976,221],{"class":55},[34,44978,33912],{"class":40},[34,44980,44981],{"class":36,"line":11391},[34,44982,1475],{"emptyLinePlaceholder":1474},[34,44984,44985],{"class":36,"line":11414},[34,44986,33921],{"class":161},[34,44988,44989,44991,44993],{"class":36,"line":11438},[34,44990,32931],{"class":40},[34,44992,221],{"class":55},[34,44994,33930],{"class":40},[34,44996,44997],{"class":36,"line":11443},[34,44998,33935],{"class":161},[34,45000,45001],{"class":36,"line":11448},[34,45002,33940],{"class":161},[34,45004,45005],{"class":36,"line":11453},[34,45006,33945],{"class":161},[34,45008,45009,45011,45013],{"class":36,"line":11462},[34,45010,33950],{"class":40},[34,45012,221],{"class":55},[34,45014,33955],{"class":40},[34,45016,45017],{"class":36,"line":11467},[34,45018,1475],{"emptyLinePlaceholder":1474},[34,45020,45021],{"class":36,"line":11473},[34,45022,1475],{"emptyLinePlaceholder":1474},[34,45024,45025],{"class":36,"line":11494},[34,45026,33968],{"class":161},[34,45028,45029],{"class":36,"line":11500},[34,45030,33973],{"class":161},[34,45032,45033,45035,45037],{"class":36,"line":11514},[34,45034,33978],{"class":40},[34,45036,221],{"class":55},[34,45038,33983],{"class":44},[34,45040,45041],{"class":36,"line":11520},[34,45042,33988],{"class":161},[34,45044,45045,45047,45049],{"class":36,"line":11547},[34,45046,33993],{"class":40},[34,45048,221],{"class":55},[34,45050,33998],{"class":40},[34,45052,45053],{"class":36,"line":11556},[34,45054,34003],{"class":161},[34,45056,45057,45059,45061],{"class":36,"line":11562},[34,45058,34008],{"class":40},[34,45060,221],{"class":55},[34,45062,33998],{"class":40},[34,45064,45065],{"class":36,"line":11570},[34,45066,34017],{"class":161},[34,45068,45069,45071,45073],{"class":36,"line":11575},[34,45070,34022],{"class":40},[34,45072,221],{"class":55},[34,45074,33998],{"class":40},[34,45076,45077],{"class":36,"line":18250},[34,45078,34031],{"class":161},[34,45080,45081,45083,45085],{"class":36,"line":18256},[34,45082,34036],{"class":40},[34,45084,221],{"class":55},[34,45086,33998],{"class":40},[34,45088,45089],{"class":36,"line":18279},[34,45090,1475],{"emptyLinePlaceholder":1474},[34,45092,45093],{"class":36,"line":18285},[34,45094,34049],{"class":161},[34,45096,45097,45099,45101],{"class":36,"line":18308},[34,45098,34054],{"class":40},[34,45100,221],{"class":55},[34,45102,34059],{"class":40},[34,45104,45105],{"class":36,"line":18322},[34,45106,1475],{"emptyLinePlaceholder":1474},[34,45108,45109],{"class":36,"line":18342},[34,45110,1475],{"emptyLinePlaceholder":1474},[34,45112,45113],{"class":36,"line":18348},[34,45114,34072],{"class":161},[34,45116,45117,45119,45121,45123,45125],{"class":36,"line":18359},[34,45118,4854],{"class":55},[34,45120,34079],{"class":40},[34,45122,27689],{"class":55},[34,45124,34084],{"class":44},[34,45126,34087],{"class":40},[34,45128,45129,45131,45133,45135,45137,45139,45141,45143,45145,45147,45149],{"class":36,"line":18382},[34,45130,34092],{"class":44},[34,45132,286],{"class":40},[34,45134,34097],{"class":504},[34,45136,34100],{"class":44},[34,45138,2379],{"class":504},[34,45140,34100],{"class":44},[34,45142,2058],{"class":504},[34,45144,34109],{"class":40},[34,45146,2327],{"class":55},[34,45148,394],{"class":44},[34,45150,296],{"class":40},[34,45152,45153,45155,45157,45159,45161,45163],{"class":36,"line":18404},[34,45154,34092],{"class":44},[34,45156,286],{"class":40},[34,45158,34124],{"class":504},[34,45160,2252],{"class":55},[34,45162,410],{"class":44},[34,45164,101],{"class":40},[34,45166,45167],{"class":36,"line":18409},[34,45168,1475],{"emptyLinePlaceholder":1474},[34,45170,45171],{"class":36,"line":18415},[34,45172,34139],{"class":161},[34,45174,45175],{"class":36,"line":18429},[34,45176,34144],{"class":161},[34,45178,45179,45181,45183],{"class":36,"line":18442},[34,45180,34149],{"class":40},[34,45182,221],{"class":55},[34,45184,33983],{"class":44},[34,45186,45187],{"class":36,"line":18447},[34,45188,34158],{"class":161},[34,45190,45191,45193,45195],{"class":36,"line":18461},[34,45192,34163],{"class":40},[34,45194,221],{"class":55},[34,45196,4738],{"class":44},[34,45198,45199],{"class":36,"line":18466},[34,45200,34172],{"class":161},[34,45202,45203,45205,45207],{"class":36,"line":18472},[34,45204,34177],{"class":40},[34,45206,221],{"class":55},[34,45208,33983],{"class":44},[34,45210,45211],{"class":36,"line":18477},[34,45212,34186],{"class":161},[34,45214,45215,45217,45219],{"class":36,"line":18491},[34,45216,34191],{"class":40},[34,45218,221],{"class":55},[34,45220,4738],{"class":44},[34,45222,45223],{"class":36,"line":18496},[34,45224,34200],{"class":161},[34,45226,45227,45229,45231],{"class":36,"line":18501},[34,45228,34205],{"class":40},[34,45230,221],{"class":55},[34,45232,4738],{"class":44},[34,45234,45235],{"class":36,"line":18515},[34,45236,34214],{"class":161},[34,45238,45239,45241,45243],{"class":36,"line":18527},[34,45240,34219],{"class":40},[34,45242,221],{"class":55},[34,45244,4738],{"class":44},[34,45246,45247],{"class":36,"line":18532},[34,45248,34228],{"class":161},[34,45250,45251,45253,45255,45257,45259],{"class":36,"line":18545},[34,45252,5056],{"class":55},[34,45254,33242],{"class":40},[34,45256,27689],{"class":55},[34,45258,33247],{"class":44},[34,45260,34241],{"class":40},[34,45262,45263],{"class":36,"line":18550},[34,45264,34246],{"class":161},[34,45266,45267,45269,45271],{"class":36,"line":18555},[34,45268,34251],{"class":40},[34,45270,221],{"class":55},[34,45272,34256],{"class":40},[34,45274,45275],{"class":36,"line":18560},[34,45276,34261],{"class":161},[34,45278,45279,45281,45283],{"class":36,"line":18573},[34,45280,34266],{"class":40},[34,45282,221],{"class":55},[34,45284,34271],{"class":40},[34,45286,45287],{"class":36,"line":18578},[34,45288,34277],{"class":161},[34,45290,45291],{"class":36,"line":34274},[34,45292,34283],{"class":40},[34,45294,45295],{"class":36,"line":34280},[34,45296,34289],{"class":161},[34,45298,45299],{"class":36,"line":34286},[34,45300,34295],{"class":161},[34,45302,45303,45305,45307],{"class":36,"line":34292},[34,45304,34301],{"class":40},[34,45306,221],{"class":55},[34,45308,34306],{"class":40},[34,45310,45311],{"class":36,"line":34298},[34,45312,34312],{"class":161},[34,45314,45315,45317,45319,45321,45323,45325,45327],{"class":36,"line":34309},[34,45316,34318],{"class":40},[34,45318,221],{"class":55},[34,45320,34323],{"class":40},[34,45322,34326],{"class":51},[34,45324,221],{"class":55},[34,45326,394],{"class":44},[34,45328,101],{"class":40},[34,45330,45331],{"class":36,"line":34315},[34,45332,34338],{"class":161},[34,45334,45335,45337,45339],{"class":36,"line":34335},[34,45336,34344],{"class":40},[34,45338,221],{"class":55},[34,45340,34349],{"class":40},[34,45342,45343],{"class":36,"line":34341},[34,45344,34355],{"class":161},[34,45346,45347],{"class":36,"line":34352},[34,45348,34361],{"class":40},[34,45350,45351],{"class":36,"line":34358},[34,45352,34367],{"class":161},[34,45354,45355],{"class":36,"line":34364},[34,45356,34373],{"class":40},[34,45358,45359],{"class":36,"line":34370},[34,45360,34379],{"class":161},[34,45362,45363],{"class":36,"line":34376},[34,45364,34385],{"class":40},[34,45366,45367],{"class":36,"line":34382},[34,45368,34391],{"class":161},[34,45370,45371,45373,45375,45377,45379,45381,45383],{"class":36,"line":34388},[34,45372,34397],{"class":40},[34,45374,11127],{"class":55},[34,45376,34402],{"class":40},[34,45378,2252],{"class":55},[34,45380,34407],{"class":40},[34,45382,177],{"class":44},[34,45384,101],{"class":40},[34,45386,45387],{"class":36,"line":34394},[34,45388,34417],{"class":161},[34,45390,45391,45393,45395,45397,45399],{"class":36,"line":34414},[34,45392,34423],{"class":40},[34,45394,11127],{"class":55},[34,45396,34428],{"class":40},[34,45398,4602],{"class":55},[34,45400,34433],{"class":40},[34,45402,45403],{"class":36,"line":34420},[34,45404,34439],{"class":161},[34,45406,45407,45409,45411,45413,45415],{"class":36,"line":34436},[34,45408,34445],{"class":40},[34,45410,11127],{"class":55},[34,45412,34407],{"class":40},[34,45414,177],{"class":44},[34,45416,101],{"class":40},[34,45418,45419],{"class":36,"line":34442},[34,45420,34459],{"class":161},[34,45422,45423,45425,45427,45429,45431],{"class":36,"line":34456},[34,45424,5056],{"class":55},[34,45426,34467],{"class":40},[34,45428,27689],{"class":55},[34,45430,33247],{"class":44},[34,45432,34474],{"class":40},[34,45434,45435],{"class":36,"line":34462},[34,45436,34480],{"class":161},[34,45438,45439,45441,45443],{"class":36,"line":34477},[34,45440,34251],{"class":40},[34,45442,221],{"class":55},[34,45444,34256],{"class":40},[34,45446,45447],{"class":36,"line":34483},[34,45448,34495],{"class":161},[34,45450,45451,45453,45455],{"class":36,"line":34492},[34,45452,34266],{"class":40},[34,45454,221],{"class":55},[34,45456,34271],{"class":40},[34,45458,45459],{"class":36,"line":34498},[34,45460,34510],{"class":161},[34,45462,45463],{"class":36,"line":34507},[34,45464,34516],{"class":40},[34,45466,45467],{"class":36,"line":34513},[34,45468,37997],{"class":161},[34,45470,45471,45473],{"class":36,"line":34519},[34,45472,34522],{"class":55},[34,45474,34525],{"class":40},[34,45476,45477],{"class":36,"line":34528},[34,45478,34531],{"class":161},[34,45480,45481,45483,45485],{"class":36,"line":34534},[34,45482,38012],{"class":40},[34,45484,221],{"class":55},[34,45486,34306],{"class":40},[34,45488,45489],{"class":36,"line":34545},[34,45490,34548],{"class":161},[34,45492,45493,45495,45497,45499,45501,45503,45505],{"class":36,"line":34551},[34,45494,38025],{"class":40},[34,45496,221],{"class":55},[34,45498,34323],{"class":40},[34,45500,34326],{"class":51},[34,45502,221],{"class":55},[34,45504,394],{"class":44},[34,45506,101],{"class":40},[34,45508,45509],{"class":36,"line":34570},[34,45510,34573],{"class":161},[34,45512,45513,45515,45517],{"class":36,"line":34576},[34,45514,38046],{"class":40},[34,45516,221],{"class":55},[34,45518,34349],{"class":40},[34,45520,45521],{"class":36,"line":34587},[34,45522,34590],{"class":161},[34,45524,45525,45527,45529,45531,45533,45535,45537],{"class":36,"line":34593},[34,45526,38059],{"class":40},[34,45528,11127],{"class":55},[34,45530,38064],{"class":40},[34,45532,2252],{"class":55},[34,45534,34407],{"class":40},[34,45536,177],{"class":44},[34,45538,101],{"class":40},[34,45540,45541,45543,45545,45547,45549],{"class":36,"line":34613},[34,45542,38077],{"class":40},[34,45544,11127],{"class":55},[34,45546,34428],{"class":40},[34,45548,4602],{"class":55},[34,45550,34433],{"class":40},[34,45552,45553],{"class":36,"line":34629},[34,45554,38090],{"class":161},[34,45556,45557,45559,45561,45563,45565],{"class":36,"line":34635},[34,45558,38095],{"class":40},[34,45560,11127],{"class":55},[34,45562,34407],{"class":40},[34,45564,177],{"class":44},[34,45566,101],{"class":40},[34,45568,45569],{"class":36,"line":34649},[34,45570,34652],{"class":161},[34,45572,45573],{"class":36,"line":34655},[34,45574,34658],{"class":161},[34,45576,45577,45579,45581],{"class":36,"line":34661},[34,45578,34664],{"class":40},[34,45580,2379],{"class":55},[34,45582,34669],{"class":40},[34,45584,45585],{"class":36,"line":34672},[34,45586,34675],{"class":161},[34,45588,45589],{"class":36,"line":34678},[34,45590,34681],{"class":161},[34,45592,45593,45595,45597],{"class":36,"line":34684},[34,45594,34687],{"class":40},[34,45596,2379],{"class":55},[34,45598,34669],{"class":40},[34,45600,45601],{"class":36,"line":34694},[34,45602,34697],{"class":161},[34,45604,45605,45607,45609],{"class":36,"line":34700},[34,45606,34703],{"class":40},[34,45608,2379],{"class":55},[34,45610,34708],{"class":40},[34,45612,45613],{"class":36,"line":34711},[34,45614,34714],{"class":161},[34,45616,45617,45619,45621],{"class":36,"line":34717},[34,45618,34720],{"class":40},[34,45620,2379],{"class":55},[34,45622,34708],{"class":40},[34,45624,45625],{"class":36,"line":34727},[34,45626,1475],{"emptyLinePlaceholder":1474},[34,45628,45629],{"class":36,"line":34732},[34,45630,34735],{"class":161},[34,45632,45633,45635,45637,45639,45641,45643,45645,45647,45649,45651,45653,45655,45657,45659,45661,45663,45665,45667,45669,45671],{"class":36,"line":34738},[34,45634,34092],{"class":44},[34,45636,286],{"class":40},[34,45638,5245],{"class":504},[34,45640,34100],{"class":44},[34,45642,34749],{"class":504},[34,45644,2687],{"class":44},[34,45646,34754],{"class":55},[34,45648,2737],{"class":44},[34,45650,34759],{"class":504},[34,45652,2687],{"class":44},[34,45654,34754],{"class":55},[34,45656,2737],{"class":44},[34,45658,5245],{"class":504},[34,45660,34770],{"class":40},[34,45662,2327],{"class":55},[34,45664,394],{"class":44},[34,45666,34777],{"class":40},[34,45668,2327],{"class":55},[34,45670,394],{"class":44},[34,45672,34784],{"class":40},[34,45674,45675,45677,45679,45681,45683,45685,45687,45689,45691,45693,45695,45697,45699,45701,45703,45705,45707,45709,45711,45713],{"class":36,"line":34787},[34,45676,34092],{"class":44},[34,45678,286],{"class":40},[34,45680,5245],{"class":504},[34,45682,34100],{"class":44},[34,45684,34798],{"class":504},[34,45686,2687],{"class":44},[34,45688,34754],{"class":55},[34,45690,2737],{"class":44},[34,45692,34807],{"class":504},[34,45694,2687],{"class":44},[34,45696,34754],{"class":55},[34,45698,2737],{"class":44},[34,45700,5245],{"class":504},[34,45702,34818],{"class":40},[34,45704,2327],{"class":55},[34,45706,394],{"class":44},[34,45708,34825],{"class":40},[34,45710,2327],{"class":55},[34,45712,394],{"class":44},[34,45714,34784],{"class":40},[34,45716,45717],{"class":36,"line":34834},[34,45718,1475],{"emptyLinePlaceholder":1474},[34,45720,45721],{"class":36,"line":34839},[34,45722,34842],{"class":161},[34,45724,45725,45727,45729,45731,45733,45735,45737],{"class":36,"line":34845},[34,45726,4150],{"class":55},[34,45728,34850],{"class":40},[34,45730,2327],{"class":55},[34,45732,394],{"class":44},[34,45734,2731],{"class":40},[34,45736,2751],{"class":55},[34,45738,34861],{"class":40},[34,45740,45741],{"class":36,"line":34864},[34,45742,34867],{"class":161},[34,45744,45745,45747,45749,45751,45753,45755,45757],{"class":36,"line":34870},[34,45746,34873],{"class":40},[34,45748,989],{"class":44},[34,45750,221],{"class":55},[34,45752,34880],{"class":40},[34,45754,2327],{"class":55},[34,45756,394],{"class":44},[34,45758,34887],{"class":40},[34,45760,45761],{"class":36,"line":34890},[34,45762,34893],{"class":161},[34,45764,45765],{"class":36,"line":34896},[34,45766,34899],{"class":161},[34,45768,45769,45771,45773],{"class":36,"line":34902},[34,45770,34905],{"class":40},[34,45772,221],{"class":55},[34,45774,33955],{"class":40},[34,45776,45777],{"class":36,"line":34912},[34,45778,1475],{"emptyLinePlaceholder":1474},[34,45780,45781],{"class":36,"line":34917},[34,45782,34920],{"class":161},[34,45784,45785,45787,45789,45791,45793],{"class":36,"line":34923},[34,45786,34926],{"class":40},[34,45788,221],{"class":55},[34,45790,34931],{"class":40},[34,45792,2327],{"class":55},[34,45794,34936],{"class":40},[34,45796,45797,45799,45801,45803,45805,45807,45809,45811,45813,45815,45817,45819,45821,45823,45825,45827,45829,45831],{"class":36,"line":34939},[34,45798,34092],{"class":44},[34,45800,286],{"class":40},[34,45802,34946],{"class":504},[34,45804,2687],{"class":44},[34,45806,34951],{"class":55},[34,45808,2737],{"class":44},[34,45810,2339],{"class":504},[34,45812,2687],{"class":44},[34,45814,34951],{"class":55},[34,45816,2737],{"class":44},[34,45818,34964],{"class":504},[34,45820,34967],{"class":40},[34,45822,34970],{"class":55},[34,45824,2698],{"class":44},[34,45826,34975],{"class":40},[34,45828,2131],{"class":55},[34,45830,2698],{"class":44},[34,45832,296],{"class":40},[34,45834,45835],{"class":36,"line":34984},[34,45836,38374],{"class":161},[34,45838,45839],{"class":36,"line":34990},[34,45840,38379],{"class":161},[34,45842,45843,45845,45847],{"class":36,"line":34996},[34,45844,38384],{"class":40},[34,45846,35008],{"class":504},[34,45848,101],{"class":40},[34,45850,45851],{"class":36,"line":35002},[34,45852,35028],{"class":161},[34,45854,45855,45857,45859,45861,45863,45865],{"class":36,"line":35013},[34,45856,35034],{"class":40},[34,45858,221],{"class":55},[34,45860,35039],{"class":40},[34,45862,35042],{"class":51},[34,45864,221],{"class":55},[34,45866,3204],{"class":40},[34,45868,45869,45871,45873,45875],{"class":36,"line":35019},[34,45870,35052],{"class":504},[34,45872,2650],{"class":40},[34,45874,35057],{"class":44},[34,45876,35060],{"class":40},[34,45878,45879,45881],{"class":36,"line":35025},[34,45880,35066],{"class":504},[34,45882,35069],{"class":40},[34,45884,45885,45887],{"class":36,"line":35031},[34,45886,35075],{"class":504},[34,45888,35078],{"class":40},[34,45890,45891,45893],{"class":36,"line":35049},[34,45892,35084],{"class":504},[34,45894,35087],{"class":40},[34,45896,45897,45899],{"class":36,"line":35063},[34,45898,35093],{"class":504},[34,45900,35096],{"class":40},[34,45902,45903],{"class":36,"line":35072},[34,45904,35102],{"class":40},[34,45906,45907],{"class":36,"line":35081},[34,45908,35108],{"class":161},[34,45910,45911,45913],{"class":36,"line":35090},[34,45912,5743],{"class":55},[34,45914,35116],{"class":40},[34,45916,45917],{"class":36,"line":35099},[34,45918,1475],{"emptyLinePlaceholder":1474},[34,45920,45921],{"class":36,"line":35105},[34,45922,35127],{"class":161},[34,45924,45925,45927,45929],{"class":36,"line":35111},[34,45926,33588],{"class":55},[34,45928,35135],{"class":3617},[34,45930,35138],{"class":40},[34,45932,45933],{"class":36,"line":35119},[34,45934,35144],{"class":161},[34,45936,45937,45939,45941,45943,45945,45947,45949,45951],{"class":36,"line":35124},[34,45938,35150],{"class":40},[34,45940,33334],{"class":51},[34,45942,221],{"class":55},[34,45944,286],{"class":40},[34,45946,2293],{"class":44},[34,45948,291],{"class":40},[34,45950,247],{"class":44},[34,45952,296],{"class":40},[34,45954,45955],{"class":36,"line":35130},[34,45956,35170],{"class":161},[34,45958,45959],{"class":36,"line":35141},[34,45960,35176],{"class":161},[34,45962,45963],{"class":36,"line":35147},[34,45964,35182],{"class":161},[34,45966,45967,45969,45971,45973,45975,45977,45979],{"class":36,"line":35167},[34,45968,33368],{"class":40},[34,45970,394],{"class":44},[34,45972,291],{"class":40},[34,45974,332],{"class":44},[34,45976,291],{"class":40},[34,45978,394],{"class":44},[34,45980,101],{"class":40},[34,45982,45983],{"class":36,"line":35173},[34,45984,35205],{"class":161},[34,45986,45987],{"class":36,"line":35179},[34,45988,35211],{"class":161},[34,45990,45991],{"class":36,"line":35185},[34,45992,35217],{"class":161},[34,45994,45995],{"class":36,"line":35202},[34,45996,35223],{"class":161},[34,45998,45999],{"class":36,"line":35208},[34,46000,35229],{"class":161},[34,46002,46003,46005,46007,46009,46011,46013,46015,46017,46019],{"class":36,"line":35214},[34,46004,35235],{"class":40},[34,46006,35238],{"class":504},[34,46008,35241],{"class":40},[34,46010,35244],{"class":504},[34,46012,291],{"class":40},[34,46014,35249],{"class":51},[34,46016,221],{"class":55},[34,46018,35254],{"class":504},[34,46020,101],{"class":40},[34,46022,46023,46025,46027,46029,46031,46033,46035,46037,46039],{"class":36,"line":35220},[34,46024,35235],{"class":40},[34,46026,35238],{"class":504},[34,46028,35266],{"class":40},[34,46030,35269],{"class":504},[34,46032,291],{"class":40},[34,46034,35249],{"class":51},[34,46036,221],{"class":55},[34,46038,35278],{"class":504},[34,46040,101],{"class":40},[34,46042,46043],{"class":36,"line":35226},[34,46044,35286],{"class":161},[34,46046,46047],{"class":36,"line":35232},[34,46048,35292],{"class":40},[34,46050,46051],{"class":36,"line":35259},[34,46052,35298],{"class":161},[34,46054,46055,46057,46059],{"class":36,"line":35283},[34,46056,35304],{"class":40},[34,46058,35307],{"class":504},[34,46060,101],{"class":40},[34,46062,46063,46065,46067],{"class":36,"line":35289},[34,46064,35315],{"class":40},[34,46066,35318],{"class":504},[34,46068,101],{"class":40},[34,46070,46071],{"class":36,"line":35295},[34,46072,35326],{"class":161},[34,46074,46075,46077,46079,46081,46083,46085,46087],{"class":36,"line":35301},[34,46076,33368],{"class":40},[34,46078,394],{"class":44},[34,46080,291],{"class":40},[34,46082,332],{"class":44},[34,46084,291],{"class":40},[34,46086,332],{"class":44},[34,46088,101],{"class":40},[34,46090,46091,46093,46095,46097,46099,46101,46103,46105,46107],{"class":36,"line":35312},[34,46092,35235],{"class":40},[34,46094,35238],{"class":504},[34,46096,35353],{"class":40},[34,46098,35244],{"class":504},[34,46100,291],{"class":40},[34,46102,35249],{"class":51},[34,46104,221],{"class":55},[34,46106,35364],{"class":504},[34,46108,101],{"class":40},[34,46110,46111,46113,46115,46117,46119,46121,46123,46125,46127],{"class":36,"line":35323},[34,46112,35235],{"class":40},[34,46114,35238],{"class":504},[34,46116,35376],{"class":40},[34,46118,35269],{"class":504},[34,46120,291],{"class":40},[34,46122,35249],{"class":51},[34,46124,221],{"class":55},[34,46126,35387],{"class":504},[34,46128,101],{"class":40},[34,46130,46131],{"class":36,"line":35329},[34,46132,35395],{"class":161},[34,46134,46135],{"class":36,"line":35346},[34,46136,35292],{"class":40},[34,46138,46139,46141,46143],{"class":36,"line":35369},[34,46140,35304],{"class":40},[34,46142,35238],{"class":504},[34,46144,101],{"class":40},[34,46146,46147,46149,46151],{"class":36,"line":35392},[34,46148,35315],{"class":40},[34,46150,35417],{"class":504},[34,46152,101],{"class":40},[34,46154,46155],{"class":36,"line":35398},[34,46156,35425],{"class":40},[34,46158,46159],{"class":36,"line":35403},[34,46160,1475],{"emptyLinePlaceholder":1474},[34,46162,46163],{"class":36,"line":35412},[34,46164,35436],{"class":161},[34,46166,46167,46169,46171,46173,46175],{"class":36,"line":35422},[34,46168,3189],{"class":55},[34,46170,32862],{"class":44},[34,46172,4602],{"class":55},[34,46174,32867],{"class":504},[34,46176,5392],{"class":40},[34,46178,46179],{"class":36,"line":35428},[34,46180,35455],{"class":161},[34,46182,46183,46186,46188],{"class":36,"line":35433},[34,46184,46185],{"class":40},"    GoogLeNet",[34,46187,221],{"class":55},[34,46189,46190],{"class":40},"GoogLeNet(Inception)\n",[34,46192,46193,46195,46197],{"class":36,"line":35439},[34,46194,35472],{"class":40},[34,46196,221],{"class":55},[34,46198,35477],{"class":40},[34,46200,46201,46203,46205,46208,46210,46212,46214],{"class":36,"line":35452},[34,46202,35034],{"class":40},[34,46204,221],{"class":55},[34,46206,46207],{"class":40},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[34,46209,35490],{"class":51},[34,46211,221],{"class":55},[34,46213,2742],{"class":44},[34,46215,101],{"class":40},[34,46217,46218],{"class":36,"line":35458},[34,46219,35502],{"class":40},[1772,46221,46222],{"start":171},[1775,46223,42214],{},[24,46225,46227],{"className":26,"code":46226,"language":28,"meta":29,"style":29},"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",[31,46228,46229,46235,46245,46255,46259,46269,46280,46284,46288,46292,46300,46316,46326,46342,46352,46366,46370,46380,46390,46400,46406,46410,46414,46422,46426,46442,46450,46454,46458,46466,46474,46478,46482,46486,46490,46496,46500,46510,46518,46526,46530,46534,46538,46546,46550,46566,46570,46574,46578,46590,46594,46606,46610,46614,46626,46630,46640,46644,46648,46660,46664,46672,46676,46680,46688,46692,46700,46704,46708,46712,46716,46720,46736,46744,46748,46752,46800,46806,46810,46820,46828,46836,46840,46844,46848,46852,46860,46864,46880,46884,46892,46900],{"__ignoreMap":29},[34,46230,46231,46233],{"class":36,"line":37},[34,46232,32036],{"class":55},[34,46234,32039],{"class":40},[34,46236,46237,46239,46241,46243],{"class":36,"line":165},[34,46238,32036],{"class":55},[34,46240,33057],{"class":40},[34,46242,33025],{"class":55},[34,46244,33062],{"class":40},[34,46246,46247,46249,46251,46253],{"class":36,"line":171},[34,46248,32379],{"class":55},[34,46250,33040],{"class":40},[34,46252,32036],{"class":55},[34,46254,33045],{"class":40},[34,46256,46257],{"class":36,"line":182},[34,46258,35563],{"class":161},[34,46260,46261,46263,46265,46267],{"class":36,"line":188},[34,46262,32379],{"class":55},[34,46264,33010],{"class":40},[34,46266,32036],{"class":55},[34,46268,33015],{"class":40},[34,46270,46271,46273,46275,46277],{"class":36,"line":518},[34,46272,32379],{"class":55},[34,46274,33555],{"class":40},[34,46276,32036],{"class":55},[34,46278,46279],{"class":40}," GoogLeNet,Inception\n",[34,46281,46282],{"class":36,"line":524},[34,46283,1475],{"emptyLinePlaceholder":1474},[34,46285,46286],{"class":36,"line":530},[34,46287,1475],{"emptyLinePlaceholder":1474},[34,46289,46290],{"class":36,"line":624},[34,46291,35592],{"class":161},[34,46293,46294,46296,46298],{"class":36,"line":630},[34,46295,33588],{"class":55},[34,46297,35599],{"class":3617},[34,46299,33594],{"class":40},[34,46301,46302,46304,46306,46308,46310,46312,46314],{"class":36,"line":636},[34,46303,35606],{"class":40},[34,46305,221],{"class":55},[34,46307,33097],{"class":40},[34,46309,33100],{"class":51},[34,46311,221],{"class":55},[34,46313,33105],{"class":504},[34,46315,33108],{"class":40},[34,46317,46318,46320,46322,46324],{"class":36,"line":1513},[34,46319,35623],{"class":51},[34,46321,221],{"class":55},[34,46323,35628],{"class":44},[34,46325,33108],{"class":40},[34,46327,46328,46330,46332,46334,46336,46338,46340],{"class":36,"line":1519},[34,46329,35635],{"class":51},[34,46331,221],{"class":55},[34,46333,33135],{"class":40},[34,46335,218],{"class":51},[34,46337,221],{"class":55},[34,46339,37090],{"class":44},[34,46341,33145],{"class":40},[34,46343,46344,46346,46348,46350],{"class":36,"line":3283},[34,46345,35652],{"class":51},[34,46347,221],{"class":55},[34,46349,33118],{"class":44},[34,46351,101],{"class":40},[34,46353,46354,46356,46358,46360,46362,46364],{"class":36,"line":3297},[34,46355,35663],{"class":40},[34,46357,221],{"class":55},[34,46359,33175],{"class":40},[34,46361,33178],{"class":51},[34,46363,221],{"class":55},[34,46365,35674],{"class":40},[34,46367,46368],{"class":36,"line":3302},[34,46369,35679],{"class":161},[34,46371,46372,46374,46376,46378],{"class":36,"line":3308},[34,46373,35684],{"class":51},[34,46375,221],{"class":55},[34,46377,394],{"class":44},[34,46379,33108],{"class":40},[34,46381,46382,46384,46386,46388],{"class":36,"line":3328},[34,46383,35695],{"class":51},[34,46385,221],{"class":55},[34,46387,33118],{"class":44},[34,46389,33108],{"class":40},[34,46391,46392,46394,46396,46398],{"class":36,"line":3333},[34,46393,35706],{"class":51},[34,46395,221],{"class":55},[34,46397,177],{"class":44},[34,46399,101],{"class":40},[34,46401,46402,46404],{"class":36,"line":3347},[34,46403,5743],{"class":55},[34,46405,35719],{"class":40},[34,46407,46408],{"class":36,"line":3352},[34,46409,1475],{"emptyLinePlaceholder":1474},[34,46411,46412],{"class":36,"line":3381},[34,46413,35728],{"class":161},[34,46415,46416,46418,46420],{"class":36,"line":3386},[34,46417,33588],{"class":55},[34,46419,35735],{"class":3617},[34,46421,35738],{"class":40},[34,46423,46424],{"class":36,"line":3403},[34,46425,35743],{"class":161},[34,46427,46428,46430,46432,46434,46436,46438,46440],{"class":36,"line":3408},[34,46429,32879],{"class":40},[34,46431,221],{"class":55},[34,46433,32886],{"class":504},[34,46435,3358],{"class":55},[34,46437,32891],{"class":40},[34,46439,3355],{"class":55},[34,46441,35760],{"class":504},[34,46443,46444,46446,46448],{"class":36,"line":3413},[34,46445,32931],{"class":40},[34,46447,221],{"class":55},[34,46449,33930],{"class":40},[34,46451,46452],{"class":36,"line":3418},[34,46453,1475],{"emptyLinePlaceholder":1474},[34,46455,46456],{"class":36,"line":3432},[34,46457,35777],{"class":161},[34,46459,46460,46462,46464],{"class":36,"line":3437},[34,46461,35782],{"class":40},[34,46463,221],{"class":55},[34,46465,33983],{"class":44},[34,46467,46468,46470,46472],{"class":36,"line":4230},[34,46469,35791],{"class":40},[34,46471,221],{"class":55},[34,46473,4738],{"class":44},[34,46475,46476],{"class":36,"line":4244},[34,46477,1475],{"emptyLinePlaceholder":1474},[34,46479,46480],{"class":36,"line":4252},[34,46481,35804],{"class":161},[34,46483,46484],{"class":36,"line":4257},[34,46485,35809],{"class":161},[34,46487,46488],{"class":36,"line":4263},[34,46489,35814],{"class":161},[34,46491,46492,46494],{"class":36,"line":4269},[34,46493,35819],{"class":55},[34,46495,34525],{"class":40},[34,46497,46498],{"class":36,"line":4274},[34,46499,35826],{"class":161},[34,46501,46502,46504,46506,46508],{"class":36,"line":9598},[34,46503,5056],{"class":55},[34,46505,35833],{"class":40},[34,46507,27689],{"class":55},[34,46509,35838],{"class":40},[34,46511,46512,46514,46516],{"class":36,"line":9622},[34,46513,35843],{"class":40},[34,46515,221],{"class":55},[34,46517,35848],{"class":40},[34,46519,46520,46522,46524],{"class":36,"line":9627},[34,46521,35853],{"class":40},[34,46523,221],{"class":55},[34,46525,35858],{"class":40},[34,46527,46528],{"class":36,"line":9633},[34,46529,35863],{"class":161},[34,46531,46532],{"class":36,"line":9660},[34,46533,34516],{"class":40},[34,46535,46536],{"class":36,"line":9665},[34,46537,35872],{"class":161},[34,46539,46540,46542,46544],{"class":36,"line":9671},[34,46541,34301],{"class":40},[34,46543,221],{"class":55},[34,46545,35881],{"class":40},[34,46547,46548],{"class":36,"line":9683},[34,46549,35886],{"class":161},[34,46551,46552,46554,46556,46558,46560,46562,46564],{"class":36,"line":9695},[34,46553,34318],{"class":40},[34,46555,221],{"class":55},[34,46557,34323],{"class":40},[34,46559,34326],{"class":51},[34,46561,221],{"class":55},[34,46563,394],{"class":44},[34,46565,101],{"class":40},[34,46567,46568],{"class":36,"line":9707},[34,46569,35907],{"class":161},[34,46571,46572],{"class":36,"line":11366},[34,46573,35912],{"class":161},[34,46575,46576],{"class":36,"line":11391},[34,46577,35917],{"class":161},[34,46579,46580,46582,46584,46586,46588],{"class":36,"line":11414},[34,46581,35922],{"class":40},[34,46583,11127],{"class":55},[34,46585,34428],{"class":40},[34,46587,4602],{"class":55},[34,46589,35931],{"class":40},[34,46591,46592],{"class":36,"line":11438},[34,46593,35936],{"class":161},[34,46595,46596,46598,46600,46602,46604],{"class":36,"line":11443},[34,46597,35941],{"class":40},[34,46599,11127],{"class":55},[34,46601,35946],{"class":40},[34,46603,177],{"class":44},[34,46605,101],{"class":40},[34,46607,46608],{"class":36,"line":11448},[34,46609,1475],{"emptyLinePlaceholder":1474},[34,46611,46612],{"class":36,"line":11453},[34,46613,35959],{"class":161},[34,46615,46616,46618,46620,46622,46624],{"class":36,"line":11462},[34,46617,35964],{"class":40},[34,46619,221],{"class":55},[34,46621,35969],{"class":40},[34,46623,2379],{"class":55},[34,46625,35974],{"class":40},[34,46627,46628],{"class":36,"line":11467},[34,46629,35979],{"class":161},[34,46631,46632,46634,46636,46638],{"class":36,"line":11473},[34,46633,34092],{"class":44},[34,46635,286],{"class":40},[34,46637,35988],{"class":504},[34,46639,35991],{"class":40},[34,46641,46642],{"class":36,"line":11494},[34,46643,1475],{"emptyLinePlaceholder":1474},[34,46645,46646],{"class":36,"line":11500},[34,46647,36000],{"class":161},[34,46649,46650,46652,46654,46656,46658],{"class":36,"line":11514},[34,46651,3189],{"class":55},[34,46653,32862],{"class":44},[34,46655,4602],{"class":55},[34,46657,32867],{"class":504},[34,46659,5392],{"class":40},[34,46661,46662],{"class":36,"line":11520},[34,46663,36017],{"class":161},[34,46665,46666,46668,46670],{"class":36,"line":11547},[34,46667,32931],{"class":40},[34,46669,221],{"class":55},[34,46671,46190],{"class":40},[34,46673,46674],{"class":36,"line":11556},[34,46675,36030],{"class":161},[34,46677,46678],{"class":36,"line":11562},[34,46679,36035],{"class":161},[34,46681,46682,46684,46686],{"class":36,"line":11570},[34,46683,36040],{"class":40},[34,46685,36043],{"class":504},[34,46687,296],{"class":40},[34,46689,46690],{"class":36,"line":11575},[34,46691,36050],{"class":161},[34,46693,46694,46696,46698],{"class":36,"line":18250},[34,46695,35663],{"class":40},[34,46697,221],{"class":55},[34,46699,36059],{"class":40},[34,46701,46702],{"class":36,"line":18256},[34,46703,36064],{"class":161},[34,46705,46706],{"class":36,"line":18279},[34,46707,36069],{"class":40},[34,46709,46710],{"class":36,"line":18285},[34,46711,1475],{"emptyLinePlaceholder":1474},[34,46713,46714],{"class":36,"line":18308},[34,46715,36078],{"class":161},[34,46717,46718],{"class":36,"line":18322},[34,46719,36083],{"class":161},[34,46721,46722,46724,46726,46728,46730,46732,46734],{"class":36,"line":18342},[34,46723,32879],{"class":40},[34,46725,221],{"class":55},[34,46727,32886],{"class":504},[34,46729,3358],{"class":55},[34,46731,32891],{"class":40},[34,46733,3355],{"class":55},[34,46735,35760],{"class":504},[34,46737,46738,46740,46742],{"class":36,"line":18348},[34,46739,32931],{"class":40},[34,46741,221],{"class":55},[34,46743,33930],{"class":40},[34,46745,46746],{"class":36,"line":18359},[34,46747,36112],{"class":161},[34,46749,46750],{"class":36,"line":18382},[34,46751,36117],{"class":161},[34,46753,46754,46756,46758,46760,46762,46764,46766,46768,46770,46772,46774,46776,46778,46780,46782,46784,46786,46788,46790,46792,46794,46796,46798],{"class":36,"line":18404},[34,46755,36122],{"class":40},[34,46757,221],{"class":55},[34,46759,2681],{"class":40},[34,46761,36129],{"class":504},[34,46763,291],{"class":40},[34,46765,36134],{"class":504},[34,46767,291],{"class":40},[34,46769,36139],{"class":504},[34,46771,291],{"class":40},[34,46773,36144],{"class":504},[34,46775,291],{"class":40},[34,46777,36149],{"class":504},[34,46779,291],{"class":40},[34,46781,36154],{"class":504},[34,46783,291],{"class":40},[34,46785,36159],{"class":504},[34,46787,291],{"class":40},[34,46789,36164],{"class":504},[34,46791,291],{"class":40},[34,46793,36169],{"class":504},[34,46795,291],{"class":40},[34,46797,36174],{"class":504},[34,46799,34887],{"class":40},[34,46801,46802,46804],{"class":36,"line":18409},[34,46803,35819],{"class":55},[34,46805,34525],{"class":40},[34,46807,46808],{"class":36,"line":18415},[34,46809,36187],{"class":161},[34,46811,46812,46814,46816,46818],{"class":36,"line":18429},[34,46813,5056],{"class":55},[34,46815,36194],{"class":40},[34,46817,27689],{"class":55},[34,46819,35838],{"class":40},[34,46821,46822,46824,46826],{"class":36,"line":18442},[34,46823,34251],{"class":40},[34,46825,221],{"class":55},[34,46827,34256],{"class":40},[34,46829,46830,46832,46834],{"class":36,"line":18447},[34,46831,34266],{"class":40},[34,46833,221],{"class":55},[34,46835,34271],{"class":40},[34,46837,46838],{"class":36,"line":18461},[34,46839,1475],{"emptyLinePlaceholder":1474},[34,46841,46842],{"class":36,"line":18466},[34,46843,36223],{"class":161},[34,46845,46846],{"class":36,"line":18472},[34,46847,34516],{"class":40},[34,46849,46850],{"class":36,"line":18477},[34,46851,36232],{"class":161},[34,46853,46854,46856,46858],{"class":36,"line":18491},[34,46855,34301],{"class":40},[34,46857,221],{"class":55},[34,46859,34306],{"class":40},[34,46861,46862],{"class":36,"line":18496},[34,46863,36245],{"class":161},[34,46865,46866,46868,46870,46872,46874,46876,46878],{"class":36,"line":18501},[34,46867,34318],{"class":40},[34,46869,221],{"class":55},[34,46871,34323],{"class":40},[34,46873,34326],{"class":51},[34,46875,221],{"class":55},[34,46877,394],{"class":44},[34,46879,101],{"class":40},[34,46881,46882],{"class":36,"line":18515},[34,46883,36266],{"class":161},[34,46885,46886,46888,46890],{"class":36,"line":18527},[34,46887,36271],{"class":40},[34,46889,221],{"class":55},[34,46891,36276],{"class":40},[34,46893,46894,46896,46898],{"class":36,"line":18532},[34,46895,36281],{"class":40},[34,46897,221],{"class":55},[34,46899,36286],{"class":40},[34,46901,46902,46904,46906,46908,46910,46912,46914,46916],{"class":36,"line":18545},[34,46903,36291],{"class":44},[34,46905,286],{"class":40},[34,46907,36296],{"class":504},[34,46909,36299],{"class":40},[34,46911,36302],{"class":504},[34,46913,291],{"class":40},[34,46915,36307],{"class":504},[34,46917,36310],{"class":40},[19,46919,46921],{"id":46920},"_24训练自己的数据集","2.4.训练自己的数据集",[103,46923,46924],{},"猫狗分类任务",[103,46926,46927],{},"划分数据集和验证集",[24,46929,46931],{"className":26,"code":46930,"language":28,"meta":29,"style":29},"# 创建脚本，用于划分数据集和验证集\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",[31,46932,46933,46938,46945,46950,46961,46968,46972,46982,46996,47005,47009,47014,47024,47044,47048,47053,47063,47074,47087,47091,47096,47105,47115,47126,47130,47135,47145,47149,47154,47159,47164,47169,47174,47178,47188,47215,47228,47240,47267,47272,47277,47291,47296,47308,47323,47338,47346,47350,47355,47361,47373,47386,47391,47396,47401,47451,47457,47461],{"__ignoreMap":29},[34,46934,46935],{"class":36,"line":37},[34,46936,46937],{"class":161},"# 创建脚本，用于划分数据集和验证集\n",[34,46939,46940,46942],{"class":36,"line":165},[34,46941,32036],{"class":55},[34,46943,46944],{"class":40}," os\n",[34,46946,46947],{"class":36,"line":171},[34,46948,46949],{"class":161},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[34,46951,46952,46954,46957,46959],{"class":36,"line":182},[34,46953,32379],{"class":55},[34,46955,46956],{"class":40}," shutil ",[34,46958,32036],{"class":55},[34,46960,33463],{"class":40},[34,46962,46963,46965],{"class":36,"line":188},[34,46964,32036],{"class":55},[34,46966,46967],{"class":40}," random\n",[34,46969,46970],{"class":36,"line":518},[34,46971,1475],{"emptyLinePlaceholder":1474},[34,46973,46974,46976,46979],{"class":36,"line":524},[34,46975,33588],{"class":55},[34,46977,46978],{"class":3617}," mkfile",[34,46980,46981],{"class":40},"(file):\n",[34,46983,46984,46986,46988,46991,46994],{"class":36,"line":530},[34,46985,4754],{"class":55},[34,46987,40571],{"class":55},[34,46989,46990],{"class":40}," os.path.exists(",[34,46992,46993],{"class":51},"file",[34,46995,32428],{"class":40},[34,46997,46998,47001,47003],{"class":36,"line":624},[34,46999,47000],{"class":40},"        os.makedirs(",[34,47002,46993],{"class":51},[34,47004,101],{"class":40},[34,47006,47007],{"class":36,"line":630},[34,47008,1475],{"emptyLinePlaceholder":1474},[34,47010,47011],{"class":36,"line":636},[34,47012,47013],{"class":161},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[34,47015,47016,47019,47021],{"class":36,"line":1513},[34,47017,47018],{"class":40},"file_path",[34,47020,221],{"class":55},[34,47022,47023],{"class":504},"'data_cat_dog'\n",[34,47025,47026,47029,47031,47034,47036,47039,47041],{"class":36,"line":1519},[34,47027,47028],{"class":40},"flower_class",[34,47030,221],{"class":55},[34,47032,47033],{"class":40},"[cla ",[34,47035,4678],{"class":55},[34,47037,47038],{"class":40}," cla ",[34,47040,27689],{"class":55},[34,47042,47043],{"class":40}," os.listdir(file_path)]\n",[34,47045,47046],{"class":36,"line":3283},[34,47047,1475],{"emptyLinePlaceholder":1474},[34,47049,47050],{"class":36,"line":3297},[34,47051,47052],{"class":161},"# 创建训练集train文件夹\n",[34,47054,47055,47058,47061],{"class":36,"line":3302},[34,47056,47057],{"class":40},"mkfile(",[34,47059,47060],{"class":504},"'data\u002Ftrain'",[34,47062,101],{"class":40},[34,47064,47065,47067,47069,47071],{"class":36,"line":3308},[34,47066,4678],{"class":55},[34,47068,47038],{"class":40},[34,47070,27689],{"class":55},[34,47072,47073],{"class":40}," flower_class:\n",[34,47075,47076,47079,47082,47084],{"class":36,"line":3328},[34,47077,47078],{"class":40},"    mkfile(",[34,47080,47081],{"class":504},"'data\u002Ftrain\u002F'",[34,47083,2277],{"class":55},[34,47085,47086],{"class":40},"cla)\n",[34,47088,47089],{"class":36,"line":3333},[34,47090,1475],{"emptyLinePlaceholder":1474},[34,47092,47093],{"class":36,"line":3347},[34,47094,47095],{"class":161},"# 创建验证集val文件夹\n",[34,47097,47098,47100,47103],{"class":36,"line":3352},[34,47099,47057],{"class":40},[34,47101,47102],{"class":504},"'data\u002Ftest'",[34,47104,101],{"class":40},[34,47106,47107,47109,47111,47113],{"class":36,"line":3381},[34,47108,4678],{"class":55},[34,47110,47038],{"class":40},[34,47112,27689],{"class":55},[34,47114,47073],{"class":40},[34,47116,47117,47119,47122,47124],{"class":36,"line":3386},[34,47118,47078],{"class":40},[34,47120,47121],{"class":504},"'data\u002Ftest\u002F'",[34,47123,2277],{"class":55},[34,47125,47086],{"class":40},[34,47127,47128],{"class":36,"line":3403},[34,47129,1475],{"emptyLinePlaceholder":1474},[34,47131,47132],{"class":36,"line":3408},[34,47133,47134],{"class":161},"# 划分比例，训练集：测试集=9：1\n",[34,47136,47137,47140,47142],{"class":36,"line":3413},[34,47138,47139],{"class":40},"split_rate",[34,47141,221],{"class":55},[34,47143,47144],{"class":44},"0.1\n",[34,47146,47147],{"class":36,"line":3418},[34,47148,1475],{"emptyLinePlaceholder":1474},[34,47150,47151],{"class":36,"line":3432},[34,47152,47153],{"class":161},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[34,47155,47156],{"class":36,"line":3437},[34,47157,47158],{"class":161},"# cla_path：当前类别的原始图片路径\n",[34,47160,47161],{"class":36,"line":4230},[34,47162,47163],{"class":161},"# images：当前类别下所有图片的文件名列表\n",[34,47165,47166],{"class":36,"line":4244},[34,47167,47168],{"class":161},"# num：该类别图片总数\n",[34,47170,47171],{"class":36,"line":4252},[34,47172,47173],{"class":161},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[34,47175,47176],{"class":36,"line":4257},[34,47177,1475],{"emptyLinePlaceholder":1474},[34,47179,47180,47182,47184,47186],{"class":36,"line":4263},[34,47181,4678],{"class":55},[34,47183,47038],{"class":40},[34,47185,27689],{"class":55},[34,47187,47073],{"class":40},[34,47189,47190,47193,47195,47198,47200,47203,47206,47208,47210,47212],{"class":36,"line":4269},[34,47191,47192],{"class":40},"    cla_path ",[34,47194,221],{"class":55},[34,47196,47197],{"class":40}," file_path ",[34,47199,2277],{"class":55},[34,47201,47202],{"class":504}," '\u002F'",[34,47204,47205],{"class":55}," +",[34,47207,47038],{"class":40},[34,47209,2277],{"class":55},[34,47211,47202],{"class":504},[34,47213,47214],{"class":161},"  # 某一类别的子目录\n",[34,47216,47217,47220,47222,47225],{"class":36,"line":4274},[34,47218,47219],{"class":40},"    images ",[34,47221,221],{"class":55},[34,47223,47224],{"class":40}," os.listdir(cla_path)  ",[34,47226,47227],{"class":161},"# iamges 列表存储了该目录下所有图像的名称\n",[34,47229,47230,47233,47235,47237],{"class":36,"line":9598},[34,47231,47232],{"class":40},"    num ",[34,47234,221],{"class":55},[34,47236,8981],{"class":44},[34,47238,47239],{"class":40},"(images)\n",[34,47241,47242,47245,47247,47250,47252,47254,47256,47259,47261,47264],{"class":36,"line":9622},[34,47243,47244],{"class":40},"    eval_index ",[34,47246,221],{"class":55},[34,47248,47249],{"class":40}," random.sample(images, ",[34,47251,1495],{"class":51},[34,47253,221],{"class":55},[34,47255,571],{"class":44},[34,47257,47258],{"class":40},"(num ",[34,47260,2252],{"class":55},[34,47262,47263],{"class":40}," split_rate))  ",[34,47265,47266],{"class":161},"# 从images列表中随机抽取 k 个图像名称\n",[34,47268,47269],{"class":36,"line":9627},[34,47270,47271],{"class":161},"    # 遍历该类别下的所有图片\n",[34,47273,47274],{"class":36,"line":9633},[34,47275,47276],{"class":161},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[34,47278,47279,47281,47284,47286,47288],{"class":36,"line":9660},[34,47280,4854],{"class":55},[34,47282,47283],{"class":40}," index, image ",[34,47285,27689],{"class":55},[34,47287,33247],{"class":44},[34,47289,47290],{"class":40},"(images):\n",[34,47292,47293],{"class":36,"line":9665},[34,47294,47295],{"class":161},"        # eval_index 中保存验证集val的图像名称\n",[34,47297,47298,47300,47303,47305],{"class":36,"line":9671},[34,47299,4150],{"class":55},[34,47301,47302],{"class":40}," image ",[34,47304,27689],{"class":55},[34,47306,47307],{"class":40}," eval_index:\n",[34,47309,47310,47313,47315,47318,47320],{"class":36,"line":9683},[34,47311,47312],{"class":40},"            image_path ",[34,47314,221],{"class":55},[34,47316,47317],{"class":40}," cla_path ",[34,47319,2277],{"class":55},[34,47321,47322],{"class":40}," image\n",[34,47324,47325,47328,47330,47333,47335],{"class":36,"line":9695},[34,47326,47327],{"class":40},"            new_path ",[34,47329,221],{"class":55},[34,47331,47332],{"class":504}," 'data\u002Ftest\u002F'",[34,47334,47205],{"class":55},[34,47336,47337],{"class":40}," cla\n",[34,47339,47340,47343],{"class":36,"line":9707},[34,47341,47342],{"class":40},"            copy(image_path, new_path)  ",[34,47344,47345],{"class":161},"# 将选中的图像复制到新路径\n",[34,47347,47348],{"class":36,"line":11366},[34,47349,1475],{"emptyLinePlaceholder":1474},[34,47351,47352],{"class":36,"line":11391},[34,47353,47354],{"class":161},"        # 其余的图像保存在训练集train中\n",[34,47356,47357,47359],{"class":36,"line":11414},[34,47358,4187],{"class":55},[34,47360,5392],{"class":40},[34,47362,47363,47365,47367,47369,47371],{"class":36,"line":11438},[34,47364,47312],{"class":40},[34,47366,221],{"class":55},[34,47368,47317],{"class":40},[34,47370,2277],{"class":55},[34,47372,47322],{"class":40},[34,47374,47375,47377,47379,47382,47384],{"class":36,"line":11443},[34,47376,47327],{"class":40},[34,47378,221],{"class":55},[34,47380,47381],{"class":504}," 'data\u002Ftrain\u002F'",[34,47383,47205],{"class":55},[34,47385,47337],{"class":40},[34,47387,47388],{"class":36,"line":11448},[34,47389,47390],{"class":40},"            copy(image_path, new_path)\n",[34,47392,47393],{"class":36,"line":11453},[34,47394,47395],{"class":161},"            # 打印进度条信息\n",[34,47397,47398],{"class":36,"line":11462},[34,47399,47400],{"class":161},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[34,47402,47403,47405,47407,47409,47412,47414,47416,47419,47421,47423,47425,47428,47431,47433,47435,47438,47441,47443,47445,47448],{"class":36,"line":11467},[34,47404,34092],{"class":44},[34,47406,286],{"class":40},[34,47408,2058],{"class":504},[34,47410,47411],{"class":44},"\\r",[34,47413,2681],{"class":504},[34,47415,34100],{"class":44},[34,47417,47418],{"class":504},"] processing [",[34,47420,34100],{"class":44},[34,47422,2379],{"class":504},[34,47424,34100],{"class":44},[34,47426,47427],{"class":504},"]\"",[34,47429,47430],{"class":40},".format(cla, index ",[34,47432,2277],{"class":55},[34,47434,26764],{"class":44},[34,47436,47437],{"class":40},", num), ",[34,47439,47440],{"class":51},"end",[34,47442,221],{"class":55},[34,47444,9302],{"class":504},[34,47446,47447],{"class":40},")  ",[34,47449,47450],{"class":161},"# processing bar\n",[34,47452,47453,47455],{"class":36,"line":11473},[34,47454,32941],{"class":44},[34,47456,3630],{"class":40},[34,47458,47459],{"class":36,"line":11494},[34,47460,1475],{"emptyLinePlaceholder":1474},[34,47462,47463,47465,47467,47470],{"class":36,"line":11500},[34,47464,723],{"class":44},[34,47466,286],{"class":40},[34,47468,47469],{"class":504},"\"processing done!\"",[34,47471,101],{"class":40},[103,47473,47474],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[1353,47476,47478],{"id":47477},"_242模型代码","2.4.2.模型代码",[103,47480,47481],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[24,47483,47485],{"className":26,"code":47484,"language":28,"meta":29,"style":29},"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",[31,47486,47487,47493,47503,47513,47517,47533,47541,47555,47565,47569,47599,47603,47637,47683,47687,47721,47767,47771,47775,47809,47839,47843,47851,47865,47887,47909,47927,47931,47945,47949,47953,47969,47973,47981,47995,48005,48049,48053,48081,48085,48095,48123,48127,48163,48167,48195,48199,48209,48241,48273,48301,48305,48315,48347,48379,48411,48443,48475,48503,48507,48517,48549,48581,48593,48597,48609,48613,48617,48629,48637,48657,48661,48665,48669,48673,48677,48681,48695,48703,48711,48723,48737,48745,48749,48757,48767,48777,48787,48797,48807,48813,48817,48821,48833,48853,48861],{"__ignoreMap":29},[34,47488,47489,47491],{"class":36,"line":37},[34,47490,32036],{"class":55},[34,47492,32039],{"class":40},[34,47494,47495,47497,47499,47501],{"class":36,"line":165},[34,47496,32379],{"class":55},[34,47498,32382],{"class":40},[34,47500,32036],{"class":55},[34,47502,32387],{"class":40},[34,47504,47505,47507,47509,47511],{"class":36,"line":171},[34,47506,32379],{"class":55},[34,47508,32399],{"class":40},[34,47510,32036],{"class":55},[34,47512,32404],{"class":40},[34,47514,47515],{"class":36,"line":182},[34,47516,1475],{"emptyLinePlaceholder":1474},[34,47518,47519,47521,47523,47525,47527,47529,47531],{"class":36,"line":188},[34,47520,16340],{"class":55},[34,47522,43133],{"class":3617},[34,47524,286],{"class":40},[34,47526,32420],{"class":3617},[34,47528,2353],{"class":40},[34,47530,32425],{"class":3617},[34,47532,32428],{"class":40},[34,47534,47535,47537,47539],{"class":36,"line":518},[34,47536,32443],{"class":55},[34,47538,32446],{"class":44},[34,47540,43152],{"class":40},[34,47542,47543,47545,47547,47549,47551,47553],{"class":36,"line":524},[34,47544,32459],{"class":44},[34,47546,43159],{"class":40},[34,47548,32465],{"class":44},[34,47550,32468],{"class":40},[34,47552,32471],{"class":44},[34,47554,3630],{"class":40},[34,47556,47557,47559,47561,47563],{"class":36,"line":530},[34,47558,32487],{"class":44},[34,47560,36412],{"class":40},[34,47562,221],{"class":55},[34,47564,36417],{"class":40},[34,47566,47567],{"class":36,"line":624},[34,47568,43182],{"class":161},[34,47570,47571,47573,47575,47577,47579,47581,47583,47585,47587,47589,47591,47593,47595,47597],{"class":36,"line":630},[34,47572,32487],{"class":44},[34,47574,43189],{"class":40},[34,47576,221],{"class":55},[34,47578,32495],{"class":40},[34,47580,32498],{"class":51},[34,47582,221],{"class":55},[34,47584,43200],{"class":40},[34,47586,32507],{"class":51},[34,47588,221],{"class":55},[34,47590,43207],{"class":40},[34,47592,32516],{"class":51},[34,47594,221],{"class":55},[34,47596,394],{"class":44},[34,47598,101],{"class":40},[34,47600,47601],{"class":36,"line":636},[34,47602,43220],{"class":161},[34,47604,47605,47607,47609,47611,47613,47615,47617,47619,47621,47623,47625,47627,47629,47631,47633,47635],{"class":36,"line":1513},[34,47606,32487],{"class":44},[34,47608,43227],{"class":40},[34,47610,221],{"class":55},[34,47612,32495],{"class":40},[34,47614,32498],{"class":51},[34,47616,221],{"class":55},[34,47618,43200],{"class":40},[34,47620,32507],{"class":51},[34,47622,221],{"class":55},[34,47624,43244],{"class":40},[34,47626,177],{"class":44},[34,47628,43249],{"class":40},[34,47630,32516],{"class":51},[34,47632,221],{"class":55},[34,47634,394],{"class":44},[34,47636,101],{"class":40},[34,47638,47639,47641,47643,47645,47647,47649,47651,47653,47655,47657,47659,47661,47663,47665,47667,47669,47671,47673,47675,47677,47679,47681],{"class":36,"line":1519},[34,47640,32487],{"class":44},[34,47642,43264],{"class":40},[34,47644,221],{"class":55},[34,47646,32495],{"class":40},[34,47648,32498],{"class":51},[34,47650,221],{"class":55},[34,47652,43244],{"class":40},[34,47654,177],{"class":44},[34,47656,43249],{"class":40},[34,47658,32507],{"class":51},[34,47660,221],{"class":55},[34,47662,43244],{"class":40},[34,47664,394],{"class":44},[34,47666,43249],{"class":40},[34,47668,32516],{"class":51},[34,47670,221],{"class":55},[34,47672,337],{"class":44},[34,47674,291],{"class":40},[34,47676,32525],{"class":51},[34,47678,221],{"class":55},[34,47680,394],{"class":44},[34,47682,101],{"class":40},[34,47684,47685],{"class":36,"line":3283},[34,47686,43309],{"class":161},[34,47688,47689,47691,47693,47695,47697,47699,47701,47703,47705,47707,47709,47711,47713,47715,47717,47719],{"class":36,"line":3297},[34,47690,32487],{"class":44},[34,47692,43316],{"class":40},[34,47694,221],{"class":55},[34,47696,32495],{"class":40},[34,47698,32498],{"class":51},[34,47700,221],{"class":55},[34,47702,43200],{"class":40},[34,47704,32507],{"class":51},[34,47706,221],{"class":55},[34,47708,43333],{"class":40},[34,47710,177],{"class":44},[34,47712,43249],{"class":40},[34,47714,32516],{"class":51},[34,47716,221],{"class":55},[34,47718,394],{"class":44},[34,47720,101],{"class":40},[34,47722,47723,47725,47727,47729,47731,47733,47735,47737,47739,47741,47743,47745,47747,47749,47751,47753,47755,47757,47759,47761,47763,47765],{"class":36,"line":3302},[34,47724,32487],{"class":44},[34,47726,43352],{"class":40},[34,47728,221],{"class":55},[34,47730,32495],{"class":40},[34,47732,32498],{"class":51},[34,47734,221],{"class":55},[34,47736,43333],{"class":40},[34,47738,177],{"class":44},[34,47740,43249],{"class":40},[34,47742,32507],{"class":51},[34,47744,221],{"class":55},[34,47746,43333],{"class":40},[34,47748,394],{"class":44},[34,47750,43249],{"class":40},[34,47752,32516],{"class":51},[34,47754,221],{"class":55},[34,47756,224],{"class":44},[34,47758,291],{"class":40},[34,47760,32525],{"class":51},[34,47762,221],{"class":55},[34,47764,332],{"class":44},[34,47766,101],{"class":40},[34,47768,47769],{"class":36,"line":3308},[34,47770,43397],{"class":161},[34,47772,47773],{"class":36,"line":3328},[34,47774,43402],{"class":161},[34,47776,47777,47779,47781,47783,47785,47787,47789,47791,47793,47795,47797,47799,47801,47803,47805,47807],{"class":36,"line":3333},[34,47778,32487],{"class":44},[34,47780,43409],{"class":40},[34,47782,221],{"class":55},[34,47784,36470],{"class":40},[34,47786,32516],{"class":51},[34,47788,221],{"class":55},[34,47790,337],{"class":44},[34,47792,291],{"class":40},[34,47794,32571],{"class":51},[34,47796,221],{"class":55},[34,47798,394],{"class":44},[34,47800,291],{"class":40},[34,47802,32525],{"class":51},[34,47804,221],{"class":55},[34,47806,394],{"class":44},[34,47808,101],{"class":40},[34,47810,47811,47813,47815,47817,47819,47821,47823,47825,47827,47829,47831,47833,47835,47837],{"class":36,"line":3347},[34,47812,32487],{"class":44},[34,47814,43444],{"class":40},[34,47816,221],{"class":55},[34,47818,32495],{"class":40},[34,47820,32498],{"class":51},[34,47822,221],{"class":55},[34,47824,43200],{"class":40},[34,47826,32507],{"class":51},[34,47828,221],{"class":55},[34,47830,43461],{"class":40},[34,47832,32516],{"class":51},[34,47834,221],{"class":55},[34,47836,394],{"class":44},[34,47838,101],{"class":40},[34,47840,47841],{"class":36,"line":3352},[34,47842,1475],{"emptyLinePlaceholder":1474},[34,47844,47845,47847,47849],{"class":36,"line":3381},[34,47846,32443],{"class":55},[34,47848,32735],{"class":3617},[34,47850,32738],{"class":40},[34,47852,47853,47855,47857,47859,47861,47863],{"class":36,"line":3386},[34,47854,43486],{"class":40},[34,47856,221],{"class":55},[34,47858,32465],{"class":44},[34,47860,36825],{"class":40},[34,47862,32465],{"class":44},[34,47864,43497],{"class":40},[34,47866,47867,47869,47871,47873,47875,47877,47879,47881,47883,47885],{"class":36,"line":3403},[34,47868,8735],{"class":40},[34,47870,221],{"class":55},[34,47872,32465],{"class":44},[34,47874,36825],{"class":40},[34,47876,32465],{"class":44},[34,47878,43512],{"class":40},[34,47880,32465],{"class":44},[34,47882,36825],{"class":40},[34,47884,32465],{"class":44},[34,47886,43521],{"class":40},[34,47888,47889,47891,47893,47895,47897,47899,47901,47903,47905,47907],{"class":36,"line":3408},[34,47890,43526],{"class":40},[34,47892,221],{"class":55},[34,47894,32465],{"class":44},[34,47896,36825],{"class":40},[34,47898,32465],{"class":44},[34,47900,43537],{"class":40},[34,47902,32465],{"class":44},[34,47904,36825],{"class":40},[34,47906,32465],{"class":44},[34,47908,43546],{"class":40},[34,47910,47911,47913,47915,47917,47919,47921,47923,47925],{"class":36,"line":3413},[34,47912,43551],{"class":40},[34,47914,221],{"class":55},[34,47916,32465],{"class":44},[34,47918,36825],{"class":40},[34,47920,32465],{"class":44},[34,47922,43562],{"class":40},[34,47924,32465],{"class":44},[34,47926,43567],{"class":40},[34,47928,47929],{"class":36,"line":3418},[34,47930,43572],{"class":161},[34,47932,47933,47935,47937,47939,47941,47943],{"class":36,"line":3432},[34,47934,16398],{"class":55},[34,47936,43579],{"class":40},[34,47938,34326],{"class":51},[34,47940,221],{"class":55},[34,47942,394],{"class":44},[34,47944,101],{"class":40},[34,47946,47947],{"class":36,"line":3437},[34,47948,1475],{"emptyLinePlaceholder":1474},[34,47950,47951],{"class":36,"line":4230},[34,47952,43600],{"class":161},[34,47954,47955,47957,47959,47961,47963,47965,47967],{"class":36,"line":4244},[34,47956,16340],{"class":55},[34,47958,43607],{"class":3617},[34,47960,286],{"class":40},[34,47962,32420],{"class":3617},[34,47964,2353],{"class":40},[34,47966,32425],{"class":3617},[34,47968,32428],{"class":40},[34,47970,47971],{"class":36,"line":4252},[34,47972,43622],{"class":161},[34,47974,47975,47977,47979],{"class":36,"line":4257},[34,47976,32443],{"class":55},[34,47978,32446],{"class":44},[34,47980,43631],{"class":40},[34,47982,47983,47985,47987,47989,47991,47993],{"class":36,"line":4263},[34,47984,32459],{"class":44},[34,47986,43638],{"class":40},[34,47988,32465],{"class":44},[34,47990,32468],{"class":40},[34,47992,32471],{"class":44},[34,47994,3630],{"class":40},[34,47996,47997,47999,48001,48003],{"class":36,"line":4269},[34,47998,32487],{"class":44},[34,48000,43653],{"class":40},[34,48002,221],{"class":55},[34,48004,39650],{"class":40},[34,48006,48007,48009,48011,48013,48015,48017,48019,48021,48023,48025,48027,48029,48031,48033,48035,48037,48039,48041,48043,48045,48047],{"class":36,"line":4274},[34,48008,39655],{"class":40},[34,48010,32498],{"class":51},[34,48012,221],{"class":55},[34,48014,337],{"class":44},[34,48016,291],{"class":40},[34,48018,32507],{"class":51},[34,48020,221],{"class":55},[34,48022,2012],{"class":44},[34,48024,291],{"class":40},[34,48026,32516],{"class":51},[34,48028,221],{"class":55},[34,48030,609],{"class":44},[34,48032,291],{"class":40},[34,48034,32571],{"class":51},[34,48036,221],{"class":55},[34,48038,332],{"class":44},[34,48040,291],{"class":40},[34,48042,32525],{"class":51},[34,48044,221],{"class":55},[34,48046,337],{"class":44},[34,48048,39688],{"class":40},[34,48050,48051],{"class":36,"line":9598},[34,48052,39693],{"class":40},[34,48054,48055,48057,48059,48061,48063,48065,48067,48069,48071,48073,48075,48077,48079],{"class":36,"line":9622},[34,48056,39738],{"class":40},[34,48058,32516],{"class":51},[34,48060,221],{"class":55},[34,48062,337],{"class":44},[34,48064,291],{"class":40},[34,48066,32571],{"class":51},[34,48068,221],{"class":55},[34,48070,332],{"class":44},[34,48072,291],{"class":40},[34,48074,32525],{"class":51},[34,48076,221],{"class":55},[34,48078,394],{"class":44},[34,48080,101],{"class":40},[34,48082,48083],{"class":36,"line":9627},[34,48084,39767],{"class":40},[34,48086,48087,48089,48091,48093],{"class":36,"line":9633},[34,48088,32487],{"class":44},[34,48090,43744],{"class":40},[34,48092,221],{"class":55},[34,48094,39650],{"class":40},[34,48096,48097,48099,48101,48103,48105,48107,48109,48111,48113,48115,48117,48119,48121],{"class":36,"line":9660},[34,48098,39655],{"class":40},[34,48100,32498],{"class":51},[34,48102,221],{"class":55},[34,48104,2012],{"class":44},[34,48106,291],{"class":40},[34,48108,32507],{"class":51},[34,48110,221],{"class":55},[34,48112,2012],{"class":44},[34,48114,291],{"class":40},[34,48116,32516],{"class":51},[34,48118,221],{"class":55},[34,48120,394],{"class":44},[34,48122,39688],{"class":40},[34,48124,48125],{"class":36,"line":9665},[34,48126,39693],{"class":40},[34,48128,48129,48131,48133,48135,48137,48139,48141,48143,48145,48147,48149,48151,48153,48155,48157,48159,48161],{"class":36,"line":9671},[34,48130,39655],{"class":40},[34,48132,32498],{"class":51},[34,48134,221],{"class":55},[34,48136,2012],{"class":44},[34,48138,291],{"class":40},[34,48140,32507],{"class":51},[34,48142,221],{"class":55},[34,48144,43799],{"class":44},[34,48146,291],{"class":40},[34,48148,32516],{"class":51},[34,48150,221],{"class":55},[34,48152,337],{"class":44},[34,48154,291],{"class":40},[34,48156,32525],{"class":51},[34,48158,221],{"class":55},[34,48160,394],{"class":44},[34,48162,39688],{"class":40},[34,48164,48165],{"class":36,"line":9683},[34,48166,39693],{"class":40},[34,48168,48169,48171,48173,48175,48177,48179,48181,48183,48185,48187,48189,48191,48193],{"class":36,"line":9695},[34,48170,39738],{"class":40},[34,48172,32516],{"class":51},[34,48174,221],{"class":55},[34,48176,337],{"class":44},[34,48178,291],{"class":40},[34,48180,32571],{"class":51},[34,48182,221],{"class":55},[34,48184,332],{"class":44},[34,48186,291],{"class":40},[34,48188,32525],{"class":51},[34,48190,221],{"class":55},[34,48192,394],{"class":44},[34,48194,101],{"class":40},[34,48196,48197],{"class":36,"line":9707},[34,48198,39767],{"class":40},[34,48200,48201,48203,48205,48207],{"class":36,"line":11366},[34,48202,32487],{"class":44},[34,48204,43860],{"class":40},[34,48206,221],{"class":55},[34,48208,39650],{"class":40},[34,48210,48211,48213,48215,48217,48219,48221,48223,48225,48227,48229,48231,48233,48235,48237,48239],{"class":36,"line":11391},[34,48212,43869],{"class":40},[34,48214,43799],{"class":44},[34,48216,291],{"class":40},[34,48218,2012],{"class":44},[34,48220,43878],{"class":40},[34,48222,2018],{"class":44},[34,48224,291],{"class":40},[34,48226,33711],{"class":44},[34,48228,43887],{"class":40},[34,48230,2396],{"class":44},[34,48232,291],{"class":40},[34,48234,2006],{"class":44},[34,48236,847],{"class":40},[34,48238,2006],{"class":44},[34,48240,39688],{"class":40},[34,48242,48243,48245,48247,48249,48251,48253,48255,48257,48259,48261,48263,48265,48267,48269,48271],{"class":36,"line":11414},[34,48244,43869],{"class":40},[34,48246,36511],{"class":44},[34,48248,291],{"class":40},[34,48250,33711],{"class":44},[34,48252,43878],{"class":40},[34,48254,33711],{"class":44},[34,48256,291],{"class":40},[34,48258,43799],{"class":44},[34,48260,43887],{"class":40},[34,48262,2006],{"class":44},[34,48264,291],{"class":40},[34,48266,2018],{"class":44},[34,48268,847],{"class":40},[34,48270,2012],{"class":44},[34,48272,39688],{"class":40},[34,48274,48275,48277,48279,48281,48283,48285,48287,48289,48291,48293,48295,48297,48299],{"class":36,"line":11438},[34,48276,39738],{"class":40},[34,48278,32516],{"class":51},[34,48280,221],{"class":55},[34,48282,337],{"class":44},[34,48284,291],{"class":40},[34,48286,32571],{"class":51},[34,48288,221],{"class":55},[34,48290,332],{"class":44},[34,48292,291],{"class":40},[34,48294,32525],{"class":51},[34,48296,221],{"class":55},[34,48298,394],{"class":44},[34,48300,101],{"class":40},[34,48302,48303],{"class":36,"line":11443},[34,48304,39767],{"class":40},[34,48306,48307,48309,48311,48313],{"class":36,"line":11448},[34,48308,32487],{"class":44},[34,48310,43970],{"class":40},[34,48312,221],{"class":55},[34,48314,39650],{"class":40},[34,48316,48317,48319,48321,48323,48325,48327,48329,48331,48333,48335,48337,48339,48341,48343,48345],{"class":36,"line":11453},[34,48318,43869],{"class":40},[34,48320,43981],{"class":44},[34,48322,291],{"class":40},[34,48324,43799],{"class":44},[34,48326,43878],{"class":40},[34,48328,2018],{"class":44},[34,48330,291],{"class":40},[34,48332,43994],{"class":44},[34,48334,43887],{"class":40},[34,48336,2396],{"class":44},[34,48338,291],{"class":40},[34,48340,2402],{"class":44},[34,48342,847],{"class":40},[34,48344,2012],{"class":44},[34,48346,39688],{"class":40},[34,48348,48349,48351,48353,48355,48357,48359,48361,48363,48365,48367,48369,48371,48373,48375,48377],{"class":36,"line":11462},[34,48350,43869],{"class":40},[34,48352,40098],{"class":44},[34,48354,291],{"class":40},[34,48356,22694],{"class":44},[34,48358,43878],{"class":40},[34,48360,2413],{"class":44},[34,48362,291],{"class":40},[34,48364,33142],{"class":44},[34,48366,43887],{"class":40},[34,48368,2593],{"class":44},[34,48370,291],{"class":40},[34,48372,2012],{"class":44},[34,48374,847],{"class":40},[34,48376,2012],{"class":44},[34,48378,39688],{"class":40},[34,48380,48381,48383,48385,48387,48389,48391,48393,48395,48397,48399,48401,48403,48405,48407,48409],{"class":36,"line":11467},[34,48382,43869],{"class":40},[34,48384,40098],{"class":44},[34,48386,291],{"class":40},[34,48388,33711],{"class":44},[34,48390,43878],{"class":40},[34,48392,33711],{"class":44},[34,48394,291],{"class":40},[34,48396,36511],{"class":44},[34,48398,43887],{"class":40},[34,48400,2593],{"class":44},[34,48402,291],{"class":40},[34,48404,2012],{"class":44},[34,48406,847],{"class":40},[34,48408,2012],{"class":44},[34,48410,39688],{"class":40},[34,48412,48413,48415,48417,48419,48421,48423,48425,48427,48429,48431,48433,48435,48437,48439,48441],{"class":36,"line":11473},[34,48414,43869],{"class":40},[34,48416,40098],{"class":44},[34,48418,291],{"class":40},[34,48420,2413],{"class":44},[34,48422,43878],{"class":40},[34,48424,33711],{"class":44},[34,48426,291],{"class":40},[34,48428,44091],{"class":44},[34,48430,43887],{"class":40},[34,48432,2006],{"class":44},[34,48434,291],{"class":40},[34,48436,2012],{"class":44},[34,48438,847],{"class":40},[34,48440,2012],{"class":44},[34,48442,39688],{"class":40},[34,48444,48445,48447,48449,48451,48453,48455,48457,48459,48461,48463,48465,48467,48469,48471,48473],{"class":36,"line":11494},[34,48446,43869],{"class":40},[34,48448,44112],{"class":44},[34,48450,291],{"class":40},[34,48452,36511],{"class":44},[34,48454,43878],{"class":40},[34,48456,22694],{"class":44},[34,48458,291],{"class":40},[34,48460,44125],{"class":44},[34,48462,43887],{"class":40},[34,48464,2006],{"class":44},[34,48466,291],{"class":40},[34,48468,33711],{"class":44},[34,48470,847],{"class":40},[34,48472,33711],{"class":44},[34,48474,39688],{"class":40},[34,48476,48477,48479,48481,48483,48485,48487,48489,48491,48493,48495,48497,48499,48501],{"class":36,"line":11500},[34,48478,39738],{"class":40},[34,48480,32516],{"class":51},[34,48482,221],{"class":55},[34,48484,337],{"class":44},[34,48486,291],{"class":40},[34,48488,32571],{"class":51},[34,48490,221],{"class":55},[34,48492,332],{"class":44},[34,48494,291],{"class":40},[34,48496,32525],{"class":51},[34,48498,221],{"class":55},[34,48500,394],{"class":44},[34,48502,101],{"class":40},[34,48504,48505],{"class":36,"line":11514},[34,48506,39767],{"class":40},[34,48508,48509,48511,48513,48515],{"class":36,"line":11520},[34,48510,32487],{"class":44},[34,48512,44178],{"class":40},[34,48514,221],{"class":55},[34,48516,39650],{"class":40},[34,48518,48519,48521,48523,48525,48527,48529,48531,48533,48535,48537,48539,48541,48543,48545,48547],{"class":36,"line":11547},[34,48520,43869],{"class":40},[34,48522,44189],{"class":44},[34,48524,291],{"class":40},[34,48526,36511],{"class":44},[34,48528,43878],{"class":40},[34,48530,22694],{"class":44},[34,48532,291],{"class":40},[34,48534,44125],{"class":44},[34,48536,43887],{"class":40},[34,48538,2006],{"class":44},[34,48540,291],{"class":40},[34,48542,33711],{"class":44},[34,48544,847],{"class":40},[34,48546,33711],{"class":44},[34,48548,39688],{"class":40},[34,48550,48551,48553,48555,48557,48559,48561,48563,48565,48567,48569,48571,48573,48575,48577,48579],{"class":36,"line":11556},[34,48552,43869],{"class":40},[34,48554,44189],{"class":44},[34,48556,291],{"class":40},[34,48558,36581],{"class":44},[34,48560,43878],{"class":40},[34,48562,43799],{"class":44},[34,48564,291],{"class":40},[34,48566,36581],{"class":44},[34,48568,43887],{"class":40},[34,48570,2402],{"class":44},[34,48572,291],{"class":40},[34,48574,33711],{"class":44},[34,48576,847],{"class":40},[34,48578,33711],{"class":44},[34,48580,39688],{"class":40},[34,48582,48583,48585,48587,48589,48591],{"class":36,"line":11562},[34,48584,44252],{"class":40},[34,48586,394],{"class":44},[34,48588,291],{"class":40},[34,48590,394],{"class":44},[34,48592,44261],{"class":40},[34,48594,48595],{"class":36,"line":11570},[34,48596,40431],{"class":40},[34,48598,48599,48601,48603,48605,48607],{"class":36,"line":11575},[34,48600,40436],{"class":40},[34,48602,44272],{"class":44},[34,48604,291],{"class":40},[34,48606,332],{"class":44},[34,48608,101],{"class":40},[34,48610,48611],{"class":36,"line":18250},[34,48612,39767],{"class":40},[34,48614,48615],{"class":36,"line":18256},[34,48616,44287],{"class":161},[34,48618,48619,48621,48623,48625,48627],{"class":36,"line":18279},[34,48620,5056],{"class":55},[34,48622,40509],{"class":40},[34,48624,27689],{"class":55},[34,48626,40514],{"class":44},[34,48628,40517],{"class":40},[34,48630,48631,48633,48635],{"class":36,"line":18285},[34,48632,6294],{"class":55},[34,48634,40529],{"class":44},[34,48636,40532],{"class":40},[34,48638,48639,48641,48643,48645,48647,48649,48651,48653,48655],{"class":36,"line":18308},[34,48640,40542],{"class":40},[34,48642,44314],{"class":51},[34,48644,221],{"class":55},[34,48646,44319],{"class":504},[34,48648,291],{"class":40},[34,48650,40545],{"class":51},[34,48652,221],{"class":55},[34,48654,40550],{"class":504},[34,48656,101],{"class":40},[34,48658,48659],{"class":36,"line":18322},[34,48660,44334],{"class":161},[34,48662,48663],{"class":36,"line":18342},[34,48664,44339],{"class":161},[34,48666,48667],{"class":36,"line":18348},[34,48668,44344],{"class":161},[34,48670,48671],{"class":36,"line":18359},[34,48672,44349],{"class":161},[34,48674,48675],{"class":36,"line":18382},[34,48676,44354],{"class":161},[34,48678,48679],{"class":36,"line":18404},[34,48680,44359],{"class":161},[34,48682,48683,48685,48687,48689,48691,48693],{"class":36,"line":18409},[34,48684,40562],{"class":55},[34,48686,40565],{"class":40},[34,48688,40568],{"class":55},[34,48690,40571],{"class":55},[34,48692,59],{"class":44},[34,48694,5392],{"class":40},[34,48696,48697,48699,48701],{"class":36,"line":18415},[34,48698,40585],{"class":40},[34,48700,177],{"class":44},[34,48702,101],{"class":40},[34,48704,48705,48707,48709],{"class":36,"line":18429},[34,48706,44386],{"class":55},[34,48708,40529],{"class":44},[34,48710,40604],{"class":40},[34,48712,48713,48715,48717,48719,48721],{"class":36,"line":18442},[34,48714,44395],{"class":40},[34,48716,177],{"class":44},[34,48718,291],{"class":40},[34,48720,40626],{"class":44},[34,48722,101],{"class":40},[34,48724,48725,48727,48729,48731,48733,48735],{"class":36,"line":18447},[34,48726,44408],{"class":55},[34,48728,40565],{"class":40},[34,48730,40568],{"class":55},[34,48732,40571],{"class":55},[34,48734,59],{"class":44},[34,48736,5392],{"class":40},[34,48738,48739,48741,48743],{"class":36,"line":18461},[34,48740,44423],{"class":40},[34,48742,177],{"class":44},[34,48744,101],{"class":40},[34,48746,48747],{"class":36,"line":18466},[34,48748,36806],{"class":161},[34,48750,48751,48753,48755],{"class":36,"line":18472},[34,48752,32443],{"class":55},[34,48754,32735],{"class":3617},[34,48756,32738],{"class":40},[34,48758,48759,48761,48763,48765],{"class":36,"line":18477},[34,48760,32743],{"class":40},[34,48762,221],{"class":55},[34,48764,32465],{"class":44},[34,48766,44450],{"class":40},[34,48768,48769,48771,48773,48775],{"class":36,"line":18491},[34,48770,32743],{"class":40},[34,48772,221],{"class":55},[34,48774,32465],{"class":44},[34,48776,44461],{"class":40},[34,48778,48779,48781,48783,48785],{"class":36,"line":18496},[34,48780,32743],{"class":40},[34,48782,221],{"class":55},[34,48784,32465],{"class":44},[34,48786,44472],{"class":40},[34,48788,48789,48791,48793,48795],{"class":36,"line":18501},[34,48790,32743],{"class":40},[34,48792,221],{"class":55},[34,48794,32465],{"class":44},[34,48796,44483],{"class":40},[34,48798,48799,48801,48803,48805],{"class":36,"line":18515},[34,48800,32743],{"class":40},[34,48802,221],{"class":55},[34,48804,32465],{"class":44},[34,48806,44494],{"class":40},[34,48808,48809,48811],{"class":36,"line":18527},[34,48810,16398],{"class":55},[34,48812,32851],{"class":40},[34,48814,48815],{"class":36,"line":18532},[34,48816,1475],{"emptyLinePlaceholder":1474},[34,48818,48819],{"class":36,"line":18545},[34,48820,44509],{"class":161},[34,48822,48823,48825,48827,48829,48831],{"class":36,"line":18550},[34,48824,3189],{"class":55},[34,48826,32862],{"class":44},[34,48828,4602],{"class":55},[34,48830,32867],{"class":504},[34,48832,5392],{"class":40},[34,48834,48835,48837,48839,48841,48843,48845,48847,48849,48851],{"class":36,"line":18555},[34,48836,32879],{"class":40},[34,48838,221],{"class":55},[34,48840,32094],{"class":40},[34,48842,32886],{"class":504},[34,48844,3358],{"class":55},[34,48846,32891],{"class":40},[34,48848,3355],{"class":55},[34,48850,32119],{"class":504},[34,48852,101],{"class":40},[34,48854,48855,48857,48859],{"class":36,"line":18560},[34,48856,32931],{"class":40},[34,48858,221],{"class":55},[34,48860,44550],{"class":40},[34,48862,48863,48865,48867,48869,48871,48873,48875,48877],{"class":36,"line":18573},[34,48864,32941],{"class":44},[34,48866,32944],{"class":40},[34,48868,394],{"class":44},[34,48870,291],{"class":40},[34,48872,33142],{"class":44},[34,48874,291],{"class":40},[34,48876,33142],{"class":44},[34,48878,32957],{"class":40},[1353,48880,48882],{"id":48881},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[103,48884,48885],{},"计算图片的均值与方差，用于训练中归一化处理操作",[24,48887,48889],{"className":26,"code":48888,"language":28,"meta":29,"style":29},"# 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",[31,48890,48891,48896,48909,48914,48920,48925,48935,48939,48944,48954,48958,48963,48973,48990,48994,48999,49011,49023,49054,49063,49073,49083,49087,49092,49107,49111,49116,49121,49126,49136,49141,49166,49170,49175,49190,49194,49207,49211,49216,49221,49226,49231,49236,49246,49256,49279,49287,49295,49303,49307,49319,49323,49328,49332,49336,49343,49363,49387,49394,49408,49413,49418,49422,49436,49440,49452],{"__ignoreMap":29},[34,48892,48893],{"class":36,"line":37},[34,48894,48895],{"class":161},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[34,48897,48898,48900,48903,48906],{"class":36,"line":165},[34,48899,32379],{"class":55},[34,48901,48902],{"class":44}," PIL",[34,48904,48905],{"class":55}," import",[34,48907,48908],{"class":40}," Image\n",[34,48910,48911],{"class":36,"line":171},[34,48912,48913],{"class":161},"# os 用来处理文件夹和文件路径\n",[34,48915,48916,48918],{"class":36,"line":182},[34,48917,32036],{"class":55},[34,48919,46944],{"class":40},[34,48921,48922],{"class":36,"line":188},[34,48923,48924],{"class":161},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[34,48926,48927,48929,48931,48933],{"class":36,"line":518},[34,48928,32036],{"class":55},[34,48930,33022],{"class":40},[34,48932,33025],{"class":55},[34,48934,33028],{"class":40},[34,48936,48937],{"class":36,"line":524},[34,48938,1475],{"emptyLinePlaceholder":1474},[34,48940,48941],{"class":36,"line":530},[34,48942,48943],{"class":161},"# 文件夹路径，包含所有图片文件\n",[34,48945,48946,48949,48951],{"class":36,"line":624},[34,48947,48948],{"class":40},"folder_path ",[34,48950,221],{"class":55},[34,48952,48953],{"class":504}," 'data_cat_dog'\n",[34,48955,48956],{"class":36,"line":630},[34,48957,1475],{"emptyLinePlaceholder":1474},[34,48959,48960],{"class":36,"line":636},[34,48961,48962],{"class":161},"# 初始化累积变量\n",[34,48964,48965,48968,48970],{"class":36,"line":1513},[34,48966,48967],{"class":40},"total_pixels ",[34,48969,221],{"class":55},[34,48971,48972],{"class":44}," 0\n",[34,48974,48975,48978,48980,48983,48985,48987],{"class":36,"line":1519},[34,48976,48977],{"class":40},"sum_normalized_pixel_values ",[34,48979,221],{"class":55},[34,48981,48982],{"class":40}," np.zeros(",[34,48984,337],{"class":44},[34,48986,47447],{"class":40},[34,48988,48989],{"class":161},"# 如果是RGB图像，需要三个通道的均值和方差\n",[34,48991,48992],{"class":36,"line":3283},[34,48993,1475],{"emptyLinePlaceholder":1474},[34,48995,48996],{"class":36,"line":3297},[34,48997,48998],{"class":161},"# 遍历文件夹中的图片文件\n",[34,49000,49001,49003,49006,49008],{"class":36,"line":3302},[34,49002,4678],{"class":55},[34,49004,49005],{"class":40}," root, dirs, files ",[34,49007,27689],{"class":55},[34,49009,49010],{"class":40}," os.walk(folder_path):\n",[34,49012,49013,49015,49018,49020],{"class":36,"line":3308},[34,49014,4854],{"class":55},[34,49016,49017],{"class":40}," filename ",[34,49019,27689],{"class":55},[34,49021,49022],{"class":40}," files:\n",[34,49024,49025,49027,49030,49033,49035,49038,49040,49043,49045,49048,49051],{"class":36,"line":3328},[34,49026,4150],{"class":55},[34,49028,49029],{"class":40}," filename.endswith((",[34,49031,49032],{"class":504},"'.jpg'",[34,49034,48],{"class":40},[34,49036,49037],{"class":504},"'.jpeg'",[34,49039,48],{"class":40},[34,49041,49042],{"class":504},"'.png'",[34,49044,48],{"class":40},[34,49046,49047],{"class":504},"'.bmp'",[34,49049,49050],{"class":40},")):  ",[34,49052,49053],{"class":161},"# 可根据实际情况添加其他格式\n",[34,49055,49056,49058,49060],{"class":36,"line":3333},[34,49057,47312],{"class":40},[34,49059,221],{"class":55},[34,49061,49062],{"class":40}," os.path.join(root, filename)\n",[34,49064,49065,49068,49070],{"class":36,"line":3347},[34,49066,49067],{"class":40},"            image ",[34,49069,221],{"class":55},[34,49071,49072],{"class":40}," Image.open(image_path)\n",[34,49074,49075,49078,49080],{"class":36,"line":3352},[34,49076,49077],{"class":40},"            image_array ",[34,49079,221],{"class":55},[34,49081,49082],{"class":40}," np.array(image)\n",[34,49084,49085],{"class":36,"line":3381},[34,49086,1475],{"emptyLinePlaceholder":1474},[34,49088,49089],{"class":36,"line":3386},[34,49090,49091],{"class":161},"            # 归一化像素值到0-1之间\n",[34,49093,49094,49097,49099,49102,49104],{"class":36,"line":3403},[34,49095,49096],{"class":40},"            normalized_image_array ",[34,49098,221],{"class":55},[34,49100,49101],{"class":40}," image_array ",[34,49103,2379],{"class":55},[34,49105,49106],{"class":44}," 255.0\n",[34,49108,49109],{"class":36,"line":3408},[34,49110,1475],{"emptyLinePlaceholder":1474},[34,49112,49113],{"class":36,"line":3413},[34,49114,49115],{"class":161},"            # print(image_path)\n",[34,49117,49118],{"class":36,"line":3418},[34,49119,49120],{"class":161},"            # print(normalized_image_array.shape)\n",[34,49122,49123],{"class":36,"line":3432},[34,49124,49125],{"class":161},"            # 累积归一化后的像素值和像素数量\n",[34,49127,49128,49131,49133],{"class":36,"line":3437},[34,49129,49130],{"class":40},"            total_pixels ",[34,49132,11127],{"class":55},[34,49134,49135],{"class":40}," normalized_image_array.size\n",[34,49137,49138],{"class":36,"line":4230},[34,49139,49140],{"class":161},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[34,49142,49143,49146,49148,49151,49154,49156,49158,49160,49162,49164],{"class":36,"line":4244},[34,49144,49145],{"class":40},"            sum_normalized_pixel_values ",[34,49147,11127],{"class":55},[34,49149,49150],{"class":40}," np.sum(normalized_image_array, ",[34,49152,49153],{"class":51},"axis",[34,49155,221],{"class":55},[34,49157,286],{"class":40},[34,49159,177],{"class":44},[34,49161,48],{"class":40},[34,49163,394],{"class":44},[34,49165,296],{"class":40},[34,49167,49168],{"class":36,"line":4252},[34,49169,1475],{"emptyLinePlaceholder":1474},[34,49171,49172],{"class":36,"line":4257},[34,49173,49174],{"class":161},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[34,49176,49177,49180,49182,49185,49187],{"class":36,"line":4263},[34,49178,49179],{"class":40},"mean ",[34,49181,221],{"class":55},[34,49183,49184],{"class":40}," sum_normalized_pixel_values ",[34,49186,2379],{"class":55},[34,49188,49189],{"class":40}," total_pixels\n",[34,49191,49192],{"class":36,"line":4269},[34,49193,1475],{"emptyLinePlaceholder":1474},[34,49195,49196,49199,49201,49203,49205],{"class":36,"line":4274},[34,49197,49198],{"class":40},"sum_squared_diff ",[34,49200,221],{"class":55},[34,49202,48982],{"class":40},[34,49204,337],{"class":44},[34,49206,101],{"class":40},[34,49208,49209],{"class":36,"line":9598},[34,49210,1475],{"emptyLinePlaceholder":1474},[34,49212,49213],{"class":36,"line":9622},[34,49214,49215],{"class":161},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[34,49217,49218],{"class":36,"line":9627},[34,49219,49220],{"class":161},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[34,49222,49223],{"class":36,"line":9633},[34,49224,49225],{"class":161},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[34,49227,49228],{"class":36,"line":9660},[34,49229,49230],{"class":161},"# Image.open(image_path)：打开图片\n",[34,49232,49233],{"class":36,"line":9665},[34,49234,49235],{"class":161},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[34,49237,49238,49240,49242,49244],{"class":36,"line":9671},[34,49239,4678],{"class":55},[34,49241,49005],{"class":40},[34,49243,27689],{"class":55},[34,49245,49010],{"class":40},[34,49247,49248,49250,49252,49254],{"class":36,"line":9683},[34,49249,4854],{"class":55},[34,49251,49017],{"class":40},[34,49253,27689],{"class":55},[34,49255,49022],{"class":40},[34,49257,49258,49260,49262,49264,49266,49268,49270,49272,49274,49276],{"class":36,"line":9695},[34,49259,4150],{"class":55},[34,49261,49029],{"class":40},[34,49263,49032],{"class":504},[34,49265,48],{"class":40},[34,49267,49037],{"class":504},[34,49269,48],{"class":40},[34,49271,49042],{"class":504},[34,49273,48],{"class":40},[34,49275,49047],{"class":504},[34,49277,49278],{"class":40},")):\n",[34,49280,49281,49283,49285],{"class":36,"line":9707},[34,49282,47312],{"class":40},[34,49284,221],{"class":55},[34,49286,49062],{"class":40},[34,49288,49289,49291,49293],{"class":36,"line":11366},[34,49290,49067],{"class":40},[34,49292,221],{"class":55},[34,49294,49072],{"class":40},[34,49296,49297,49299,49301],{"class":36,"line":11391},[34,49298,49077],{"class":40},[34,49300,221],{"class":55},[34,49302,49082],{"class":40},[34,49304,49305],{"class":36,"line":11414},[34,49306,49091],{"class":161},[34,49308,49309,49311,49313,49315,49317],{"class":36,"line":11438},[34,49310,49096],{"class":40},[34,49312,221],{"class":55},[34,49314,49101],{"class":40},[34,49316,2379],{"class":55},[34,49318,49106],{"class":44},[34,49320,49321],{"class":36,"line":11443},[34,49322,49120],{"class":161},[34,49324,49325],{"class":36,"line":11448},[34,49326,49327],{"class":161},"            # print(mean.shape)\n",[34,49329,49330],{"class":36,"line":11453},[34,49331,49115],{"class":161},[34,49333,49334],{"class":36,"line":11462},[34,49335,1475],{"emptyLinePlaceholder":1474},[34,49337,49338,49341],{"class":36,"line":11467},[34,49339,49340],{"class":55},"            try",[34,49342,5392],{"class":40},[34,49344,49345,49348,49350,49353,49355,49358,49360],{"class":36,"line":11473},[34,49346,49347],{"class":40},"                diff ",[34,49349,221],{"class":55},[34,49351,49352],{"class":40}," (normalized_image_array ",[34,49354,2327],{"class":55},[34,49356,49357],{"class":40}," mean) ",[34,49359,12311],{"class":55},[34,49361,49362],{"class":44}," 2\n",[34,49364,49365,49368,49370,49373,49375,49377,49379,49381,49383,49385],{"class":36,"line":11494},[34,49366,49367],{"class":40},"                sum_squared_diff ",[34,49369,11127],{"class":55},[34,49371,49372],{"class":40}," np.sum(diff, ",[34,49374,49153],{"class":51},[34,49376,221],{"class":55},[34,49378,286],{"class":40},[34,49380,177],{"class":44},[34,49382,48],{"class":40},[34,49384,394],{"class":44},[34,49386,296],{"class":40},[34,49388,49389,49392],{"class":36,"line":11500},[34,49390,49391],{"class":55},"            except",[34,49393,5392],{"class":40},[34,49395,49396,49399,49401,49403,49406],{"class":36,"line":11514},[34,49397,49398],{"class":44},"                print",[34,49400,286],{"class":40},[34,49402,1867],{"class":55},[34,49404,49405],{"class":504},"\"捕获到自定义异常\"",[34,49407,101],{"class":40},[34,49409,49410],{"class":36,"line":11520},[34,49411,49412],{"class":161},"            # diff = (normalized_image_array - mean) ** 2\n",[34,49414,49415],{"class":36,"line":11547},[34,49416,49417],{"class":161},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[34,49419,49420],{"class":36,"line":11556},[34,49421,1475],{"emptyLinePlaceholder":1474},[34,49423,49424,49427,49429,49432,49434],{"class":36,"line":11562},[34,49425,49426],{"class":40},"variance ",[34,49428,221],{"class":55},[34,49430,49431],{"class":40}," sum_squared_diff ",[34,49433,2379],{"class":55},[34,49435,49189],{"class":40},[34,49437,49438],{"class":36,"line":11570},[34,49439,1475],{"emptyLinePlaceholder":1474},[34,49441,49442,49444,49446,49449],{"class":36,"line":11575},[34,49443,723],{"class":44},[34,49445,286],{"class":40},[34,49447,49448],{"class":504},"\"Mean:\"",[34,49450,49451],{"class":40},", mean)\n",[34,49453,49454,49456,49458,49461],{"class":36,"line":18250},[34,49455,723],{"class":44},[34,49457,286],{"class":40},[34,49459,49460],{"class":504},"\"Variance:\"",[34,49462,49463],{"class":40},", variance)\n",[24,49465,49467],{"className":26,"code":49466,"language":28,"meta":29,"style":29},"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",[31,49468,49469,49475,49481,49491,49497,49507,49521,49531,49541,49551,49555,49565,49575,49579,49583,49591,49596,49601,49620,49624,49629,49634,49639,49644,49685,49690,49700,49705,49718,49723,49728,49733,49738,49743,49747,49752,49757,49779,49783,49815,49829,49839,49849,49853,49863,49877,49887,49897,49907,49913,49917,49921,49925,49929,49933,49941,49961,49965,49969,49973,49977,49993,49997,50001,50009,50013,50017,50025,50029,50033,50037,50045,50049,50053,50057,50065,50069,50077,50081,50089,50093,50101,50105,50113,50117,50121,50129,50133,50137,50149,50173,50187,50191,50195,50199,50207,50211,50219,50223,50231,50235,50243,50247,50255,50259,50267,50271,50283,50287,50295,50299,50307,50311,50315,50319,50323,50331,50335,50351,50355,50363,50367,50371,50375,50379,50383,50387,50391,50407,50411,50423,50427,50439,50443,50455,50459,50467,50471,50479,50483,50487,50491,50497,50501,50509,50513,50529,50533,50541,50545,50561,50573,50577,50589,50593,50597,50605,50609,50613,50621,50625,50633,50637,50645,50649,50653,50695,50737,50741,50745,50761,50765,50781,50785,50789,50797,50801,50805,50817,50855,50859,50863,50871,50875,50889,50899,50905,50911,50917,50923,50927,50931,50937,50941,50945,50953,50957,50975,50979,50983,50987,51003,51007,51011,51015,51019,51023,51043,51063,51067,51071,51075,51083,51091,51095,51111,51131,51151,51155,51160,51169,51178,51183,51188,51193,51206,51211,51220,51229,51246],{"__ignoreMap":29},[34,49470,49471,49473],{"class":36,"line":37},[34,49472,32036],{"class":55},[34,49474,33463],{"class":40},[34,49476,49477,49479],{"class":36,"line":165},[34,49478,32036],{"class":55},[34,49480,33470],{"class":40},[34,49482,49483,49485,49487,49489],{"class":36,"line":171},[34,49484,32036],{"class":55},[34,49486,33481],{"class":40},[34,49488,33025],{"class":55},[34,49490,33486],{"class":40},[34,49492,49493,49495],{"class":36,"line":182},[34,49494,32036],{"class":55},[34,49496,32039],{"class":40},[34,49498,49499,49501,49503,49505],{"class":36,"line":188},[34,49500,32379],{"class":55},[34,49502,33057],{"class":40},[34,49504,32036],{"class":55},[34,49506,33503],{"class":40},[34,49508,49509,49511,49513,49515,49518],{"class":36,"line":518},[34,49510,32379],{"class":55},[34,49512,33010],{"class":40},[34,49514,32036],{"class":55},[34,49516,49517],{"class":40}," ImageFolder ",[34,49519,49520],{"class":161},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[34,49522,49523,49525,49527,49529],{"class":36,"line":524},[34,49524,32379],{"class":55},[34,49526,33040],{"class":40},[34,49528,32036],{"class":55},[34,49530,33045],{"class":40},[34,49532,49533,49535,49537,49539],{"class":36,"line":530},[34,49534,32036],{"class":55},[34,49536,33057],{"class":40},[34,49538,33025],{"class":55},[34,49540,33062],{"class":40},[34,49542,49543,49545,49547,49549],{"class":36,"line":624},[34,49544,32036],{"class":55},[34,49546,33074],{"class":40},[34,49548,33025],{"class":55},[34,49550,33079],{"class":40},[34,49552,49553],{"class":36,"line":630},[34,49554,33548],{"class":161},[34,49556,49557,49559,49561,49563],{"class":36,"line":636},[34,49558,32379],{"class":55},[34,49560,33555],{"class":40},[34,49562,32036],{"class":55},[34,49564,44670],{"class":40},[34,49566,49567,49569,49571,49573],{"class":36,"line":1513},[34,49568,32379],{"class":55},[34,49570,32382],{"class":40},[34,49572,32036],{"class":55},[34,49574,32387],{"class":40},[34,49576,49577],{"class":36,"line":1519},[34,49578,1475],{"emptyLinePlaceholder":1474},[34,49580,49581],{"class":36,"line":3283},[34,49582,33583],{"class":161},[34,49584,49585,49587,49589],{"class":36,"line":3297},[34,49586,33588],{"class":55},[34,49588,33591],{"class":3617},[34,49590,33594],{"class":40},[34,49592,49593],{"class":36,"line":3302},[34,49594,49595],{"class":161},"    # 导入自己的数据集，并进行数据处理\n",[34,49597,49598],{"class":36,"line":3308},[34,49599,49600],{"class":161},"    # 定义数据集的路径\n",[34,49602,49603,49606,49608,49610,49612,49614,49618],{"class":36,"line":3328},[34,49604,49605],{"class":44},"    ROOT_PATH",[34,49607,221],{"class":55},[34,49609,2465],{"class":55},[34,49611,2058],{"class":504},[34,49613,2353],{"class":44},[34,49615,49617],{"class":49616},"sA_wV","\u002Fdata\u002Ftrain",[34,49619,26779],{"class":504},[34,49621,49622],{"class":36,"line":3333},[34,49623,1475],{"emptyLinePlaceholder":1474},[34,49625,49626],{"class":36,"line":3347},[34,49627,49628],{"class":161},"    # 定义归一化方法\n",[34,49630,49631],{"class":36,"line":3352},[34,49632,49633],{"class":161},"    # 这里需要先计算一下数据集的均值和方差\n",[34,49635,49636],{"class":36,"line":3381},[34,49637,49638],{"class":161},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[34,49640,49641],{"class":36,"line":3386},[34,49642,49643],{"class":161},"    # 第一个参数是均值，第二个参数是方差\n",[34,49645,49646,49649,49651,49654,49657,49659,49662,49664,49667,49670,49673,49675,49678,49680,49683],{"class":36,"line":3403},[34,49647,49648],{"class":40},"    normalize",[34,49650,221],{"class":55},[34,49652,49653],{"class":40},"transforms.Normalize([",[34,49655,49656],{"class":44},"0.162",[34,49658,291],{"class":40},[34,49660,49661],{"class":44},"0.151",[34,49663,291],{"class":40},[34,49665,49666],{"class":44},"0.138",[34,49668,49669],{"class":40},"],[",[34,49671,49672],{"class":44},"0.058",[34,49674,291],{"class":40},[34,49676,49677],{"class":44},"0.052",[34,49679,291],{"class":40},[34,49681,49682],{"class":44},"0.048",[34,49684,1077],{"class":40},[34,49686,49687],{"class":36,"line":3408},[34,49688,49689],{"class":161},"    # 定义数据集处理方法变量\n",[34,49691,49692,49695,49697],{"class":36,"line":3413},[34,49693,49694],{"class":40},"    train_transform",[34,49696,221],{"class":55},[34,49698,49699],{"class":40},"transforms.Compose([\n",[34,49701,49702],{"class":36,"line":3418},[34,49703,49704],{"class":161},"        # 调整图像大小为224*224\n",[34,49706,49707,49710,49712,49714,49716],{"class":36,"line":3432},[34,49708,49709],{"class":40},"        transforms.Resize((",[34,49711,33142],{"class":44},[34,49713,291],{"class":40},[34,49715,33142],{"class":44},[34,49717,44261],{"class":40},[34,49719,49720],{"class":36,"line":3437},[34,49721,49722],{"class":161},"        # 将图像转换为张量\n",[34,49724,49725],{"class":36,"line":4230},[34,49726,49727],{"class":40},"        transforms.ToTensor(),\n",[34,49729,49730],{"class":36,"line":4244},[34,49731,49732],{"class":40},"        normalize])\n",[34,49734,49735],{"class":36,"line":4252},[34,49736,49737],{"class":161},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[34,49739,49740],{"class":36,"line":4257},[34,49741,49742],{"class":161},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[34,49744,49745],{"class":36,"line":4263},[34,49746,1475],{"emptyLinePlaceholder":1474},[34,49748,49749],{"class":36,"line":4269},[34,49750,49751],{"class":161},"    # 加载数据集\n",[34,49753,49754],{"class":36,"line":4274},[34,49755,49756],{"class":161},"    # 传入数据集路径与处理方法\n",[34,49758,49759,49761,49763,49766,49769,49771,49774,49776],{"class":36,"line":9598},[34,49760,33599],{"class":40},[34,49762,221],{"class":55},[34,49764,49765],{"class":40},"ImageFolder(",[34,49767,49768],{"class":44},"ROOT_PATH",[34,49770,291],{"class":40},[34,49772,49773],{"class":51},"transform",[34,49775,221],{"class":55},[34,49777,49778],{"class":40},"train_transform)\n",[34,49780,49781],{"class":36,"line":9622},[34,49782,1475],{"emptyLinePlaceholder":1474},[34,49784,49785,49787,49789,49791,49793,49795,49797,49799,49801,49803,49805,49807,49809,49811,49813],{"class":36,"line":9627},[34,49786,33651],{"class":40},[34,49788,221],{"class":55},[34,49790,33656],{"class":40},[34,49792,33659],{"class":44},[34,49794,286],{"class":40},[34,49796,33664],{"class":44},[34,49798,2252],{"class":55},[34,49800,9008],{"class":44},[34,49802,33671],{"class":40},[34,49804,33659],{"class":44},[34,49806,286],{"class":40},[34,49808,33678],{"class":44},[34,49810,2252],{"class":55},[34,49812,9008],{"class":44},[34,49814,33685],{"class":40},[34,49816,49817,49819,49821,49823,49825,49827],{"class":36,"line":9633},[34,49818,33690],{"class":40},[34,49820,221],{"class":55},[34,49822,33695],{"class":40},[34,49824,33178],{"class":51},[34,49826,221],{"class":55},[34,49828,33183],{"class":40},[34,49830,49831,49833,49835,49837],{"class":36,"line":9660},[34,49832,33706],{"class":51},[34,49834,221],{"class":55},[34,49836,2006],{"class":44},[34,49838,33108],{"class":40},[34,49840,49841,49843,49845,49847],{"class":36,"line":9665},[34,49842,33718],{"class":51},[34,49844,221],{"class":55},[34,49846,33118],{"class":44},[34,49848,33108],{"class":40},[34,49850,49851],{"class":36,"line":9671},[34,49852,33729],{"class":161},[34,49854,49855,49857,49859,49861],{"class":36,"line":9683},[34,49856,33734],{"class":51},[34,49858,221],{"class":55},[34,49860,2195],{"class":44},[34,49862,101],{"class":40},[34,49864,49865,49867,49869,49871,49873,49875],{"class":36,"line":9695},[34,49866,33745],{"class":40},[34,49868,221],{"class":55},[34,49870,33175],{"class":40},[34,49872,33178],{"class":51},[34,49874,221],{"class":55},[34,49876,33756],{"class":40},[34,49878,49879,49881,49883,49885],{"class":36,"line":9707},[34,49880,33761],{"class":51},[34,49882,221],{"class":55},[34,49884,2006],{"class":44},[34,49886,33108],{"class":40},[34,49888,49889,49891,49893,49895],{"class":36,"line":11366},[34,49890,33772],{"class":51},[34,49892,221],{"class":55},[34,49894,33118],{"class":44},[34,49896,33108],{"class":40},[34,49898,49899,49901,49903,49905],{"class":36,"line":11391},[34,49900,33783],{"class":51},[34,49902,221],{"class":55},[34,49904,2195],{"class":44},[34,49906,101],{"class":40},[34,49908,49909,49911],{"class":36,"line":11414},[34,49910,5743],{"class":55},[34,49912,33796],{"class":40},[34,49914,49915],{"class":36,"line":11438},[34,49916,1475],{"emptyLinePlaceholder":1474},[34,49918,49919],{"class":36,"line":11443},[34,49920,33805],{"class":161},[34,49922,49923],{"class":36,"line":11448},[34,49924,33810],{"class":161},[34,49926,49927],{"class":36,"line":11453},[34,49928,1475],{"emptyLinePlaceholder":1474},[34,49930,49931],{"class":36,"line":11462},[34,49932,33819],{"class":161},[34,49934,49935,49937,49939],{"class":36,"line":11467},[34,49936,33588],{"class":55},[34,49938,33826],{"class":3617},[34,49940,33829],{"class":40},[34,49942,49943,49945,49947,49949,49951,49953,49955,49957,49959],{"class":36,"line":11473},[34,49944,32879],{"class":40},[34,49946,221],{"class":55},[34,49948,32094],{"class":40},[34,49950,32886],{"class":504},[34,49952,3358],{"class":55},[34,49954,32891],{"class":40},[34,49956,3355],{"class":55},[34,49958,33848],{"class":504},[34,49960,101],{"class":40},[34,49962,49963],{"class":36,"line":11494},[34,49964,1475],{"emptyLinePlaceholder":1474},[34,49966,49967],{"class":36,"line":11500},[34,49968,33863],{"class":161},[34,49970,49971],{"class":36,"line":11514},[34,49972,33868],{"class":161},[34,49974,49975],{"class":36,"line":11520},[34,49976,33873],{"class":161},[34,49978,49979,49981,49983,49985,49987,49989,49991],{"class":36,"line":11547},[34,49980,33878],{"class":40},[34,49982,221],{"class":55},[34,49984,33883],{"class":40},[34,49986,33886],{"class":51},[34,49988,221],{"class":55},[34,49990,33891],{"class":44},[34,49992,101],{"class":40},[34,49994,49995],{"class":36,"line":11556},[34,49996,1475],{"emptyLinePlaceholder":1474},[34,49998,49999],{"class":36,"line":11562},[34,50000,33902],{"class":161},[34,50002,50003,50005,50007],{"class":36,"line":11570},[34,50004,33907],{"class":40},[34,50006,221],{"class":55},[34,50008,33912],{"class":40},[34,50010,50011],{"class":36,"line":11575},[34,50012,1475],{"emptyLinePlaceholder":1474},[34,50014,50015],{"class":36,"line":18250},[34,50016,33921],{"class":161},[34,50018,50019,50021,50023],{"class":36,"line":18256},[34,50020,32931],{"class":40},[34,50022,221],{"class":55},[34,50024,33930],{"class":40},[34,50026,50027],{"class":36,"line":18279},[34,50028,33935],{"class":161},[34,50030,50031],{"class":36,"line":18285},[34,50032,33940],{"class":161},[34,50034,50035],{"class":36,"line":18308},[34,50036,33945],{"class":161},[34,50038,50039,50041,50043],{"class":36,"line":18322},[34,50040,33950],{"class":40},[34,50042,221],{"class":55},[34,50044,33955],{"class":40},[34,50046,50047],{"class":36,"line":18342},[34,50048,1475],{"emptyLinePlaceholder":1474},[34,50050,50051],{"class":36,"line":18348},[34,50052,33968],{"class":161},[34,50054,50055],{"class":36,"line":18359},[34,50056,33973],{"class":161},[34,50058,50059,50061,50063],{"class":36,"line":18382},[34,50060,33978],{"class":40},[34,50062,221],{"class":55},[34,50064,33983],{"class":44},[34,50066,50067],{"class":36,"line":18404},[34,50068,33988],{"class":161},[34,50070,50071,50073,50075],{"class":36,"line":18409},[34,50072,33993],{"class":40},[34,50074,221],{"class":55},[34,50076,33998],{"class":40},[34,50078,50079],{"class":36,"line":18415},[34,50080,34003],{"class":161},[34,50082,50083,50085,50087],{"class":36,"line":18429},[34,50084,34008],{"class":40},[34,50086,221],{"class":55},[34,50088,33998],{"class":40},[34,50090,50091],{"class":36,"line":18442},[34,50092,34017],{"class":161},[34,50094,50095,50097,50099],{"class":36,"line":18447},[34,50096,34022],{"class":40},[34,50098,221],{"class":55},[34,50100,33998],{"class":40},[34,50102,50103],{"class":36,"line":18461},[34,50104,34031],{"class":161},[34,50106,50107,50109,50111],{"class":36,"line":18466},[34,50108,34036],{"class":40},[34,50110,221],{"class":55},[34,50112,33998],{"class":40},[34,50114,50115],{"class":36,"line":18472},[34,50116,1475],{"emptyLinePlaceholder":1474},[34,50118,50119],{"class":36,"line":18477},[34,50120,34049],{"class":161},[34,50122,50123,50125,50127],{"class":36,"line":18491},[34,50124,34054],{"class":40},[34,50126,221],{"class":55},[34,50128,34059],{"class":40},[34,50130,50131],{"class":36,"line":18496},[34,50132,1475],{"emptyLinePlaceholder":1474},[34,50134,50135],{"class":36,"line":18501},[34,50136,34072],{"class":161},[34,50138,50139,50141,50143,50145,50147],{"class":36,"line":18515},[34,50140,4854],{"class":55},[34,50142,34079],{"class":40},[34,50144,27689],{"class":55},[34,50146,34084],{"class":44},[34,50148,34087],{"class":40},[34,50150,50151,50153,50155,50157,50159,50161,50163,50165,50167,50169,50171],{"class":36,"line":18527},[34,50152,34092],{"class":44},[34,50154,286],{"class":40},[34,50156,34097],{"class":504},[34,50158,34100],{"class":44},[34,50160,2379],{"class":504},[34,50162,34100],{"class":44},[34,50164,2058],{"class":504},[34,50166,34109],{"class":40},[34,50168,2327],{"class":55},[34,50170,394],{"class":44},[34,50172,296],{"class":40},[34,50174,50175,50177,50179,50181,50183,50185],{"class":36,"line":18532},[34,50176,34092],{"class":44},[34,50178,286],{"class":40},[34,50180,34124],{"class":504},[34,50182,2252],{"class":55},[34,50184,410],{"class":44},[34,50186,101],{"class":40},[34,50188,50189],{"class":36,"line":18545},[34,50190,1475],{"emptyLinePlaceholder":1474},[34,50192,50193],{"class":36,"line":18550},[34,50194,34139],{"class":161},[34,50196,50197],{"class":36,"line":18555},[34,50198,34144],{"class":161},[34,50200,50201,50203,50205],{"class":36,"line":18560},[34,50202,34149],{"class":40},[34,50204,221],{"class":55},[34,50206,33983],{"class":44},[34,50208,50209],{"class":36,"line":18573},[34,50210,34158],{"class":161},[34,50212,50213,50215,50217],{"class":36,"line":18578},[34,50214,34163],{"class":40},[34,50216,221],{"class":55},[34,50218,4738],{"class":44},[34,50220,50221],{"class":36,"line":34274},[34,50222,34172],{"class":161},[34,50224,50225,50227,50229],{"class":36,"line":34280},[34,50226,34177],{"class":40},[34,50228,221],{"class":55},[34,50230,33983],{"class":44},[34,50232,50233],{"class":36,"line":34286},[34,50234,34186],{"class":161},[34,50236,50237,50239,50241],{"class":36,"line":34292},[34,50238,34191],{"class":40},[34,50240,221],{"class":55},[34,50242,4738],{"class":44},[34,50244,50245],{"class":36,"line":34298},[34,50246,34200],{"class":161},[34,50248,50249,50251,50253],{"class":36,"line":34309},[34,50250,34205],{"class":40},[34,50252,221],{"class":55},[34,50254,4738],{"class":44},[34,50256,50257],{"class":36,"line":34315},[34,50258,34214],{"class":161},[34,50260,50261,50263,50265],{"class":36,"line":34335},[34,50262,34219],{"class":40},[34,50264,221],{"class":55},[34,50266,4738],{"class":44},[34,50268,50269],{"class":36,"line":34341},[34,50270,34228],{"class":161},[34,50272,50273,50275,50277,50279,50281],{"class":36,"line":34352},[34,50274,5056],{"class":55},[34,50276,33242],{"class":40},[34,50278,27689],{"class":55},[34,50280,33247],{"class":44},[34,50282,34241],{"class":40},[34,50284,50285],{"class":36,"line":34358},[34,50286,34246],{"class":161},[34,50288,50289,50291,50293],{"class":36,"line":34364},[34,50290,34251],{"class":40},[34,50292,221],{"class":55},[34,50294,34256],{"class":40},[34,50296,50297],{"class":36,"line":34370},[34,50298,34261],{"class":161},[34,50300,50301,50303,50305],{"class":36,"line":34376},[34,50302,34266],{"class":40},[34,50304,221],{"class":55},[34,50306,34271],{"class":40},[34,50308,50309],{"class":36,"line":34382},[34,50310,34277],{"class":161},[34,50312,50313],{"class":36,"line":34388},[34,50314,34283],{"class":40},[34,50316,50317],{"class":36,"line":34394},[34,50318,34289],{"class":161},[34,50320,50321],{"class":36,"line":34414},[34,50322,34295],{"class":161},[34,50324,50325,50327,50329],{"class":36,"line":34420},[34,50326,34301],{"class":40},[34,50328,221],{"class":55},[34,50330,34306],{"class":40},[34,50332,50333],{"class":36,"line":34436},[34,50334,34312],{"class":161},[34,50336,50337,50339,50341,50343,50345,50347,50349],{"class":36,"line":34442},[34,50338,34318],{"class":40},[34,50340,221],{"class":55},[34,50342,34323],{"class":40},[34,50344,34326],{"class":51},[34,50346,221],{"class":55},[34,50348,394],{"class":44},[34,50350,101],{"class":40},[34,50352,50353],{"class":36,"line":34456},[34,50354,34338],{"class":161},[34,50356,50357,50359,50361],{"class":36,"line":34462},[34,50358,34344],{"class":40},[34,50360,221],{"class":55},[34,50362,34349],{"class":40},[34,50364,50365],{"class":36,"line":34477},[34,50366,34355],{"class":161},[34,50368,50369],{"class":36,"line":34483},[34,50370,34361],{"class":40},[34,50372,50373],{"class":36,"line":34492},[34,50374,34367],{"class":161},[34,50376,50377],{"class":36,"line":34498},[34,50378,34373],{"class":40},[34,50380,50381],{"class":36,"line":34507},[34,50382,34379],{"class":161},[34,50384,50385],{"class":36,"line":34513},[34,50386,34385],{"class":40},[34,50388,50389],{"class":36,"line":34519},[34,50390,34391],{"class":161},[34,50392,50393,50395,50397,50399,50401,50403,50405],{"class":36,"line":34528},[34,50394,34397],{"class":40},[34,50396,11127],{"class":55},[34,50398,34402],{"class":40},[34,50400,2252],{"class":55},[34,50402,34407],{"class":40},[34,50404,177],{"class":44},[34,50406,101],{"class":40},[34,50408,50409],{"class":36,"line":34534},[34,50410,34417],{"class":161},[34,50412,50413,50415,50417,50419,50421],{"class":36,"line":34545},[34,50414,34423],{"class":40},[34,50416,11127],{"class":55},[34,50418,34428],{"class":40},[34,50420,4602],{"class":55},[34,50422,34433],{"class":40},[34,50424,50425],{"class":36,"line":34551},[34,50426,34439],{"class":161},[34,50428,50429,50431,50433,50435,50437],{"class":36,"line":34570},[34,50430,34445],{"class":40},[34,50432,11127],{"class":55},[34,50434,34407],{"class":40},[34,50436,177],{"class":44},[34,50438,101],{"class":40},[34,50440,50441],{"class":36,"line":34576},[34,50442,34459],{"class":161},[34,50444,50445,50447,50449,50451,50453],{"class":36,"line":34587},[34,50446,5056],{"class":55},[34,50448,34467],{"class":40},[34,50450,27689],{"class":55},[34,50452,33247],{"class":44},[34,50454,34474],{"class":40},[34,50456,50457],{"class":36,"line":34593},[34,50458,34480],{"class":161},[34,50460,50461,50463,50465],{"class":36,"line":34613},[34,50462,34251],{"class":40},[34,50464,221],{"class":55},[34,50466,34256],{"class":40},[34,50468,50469],{"class":36,"line":34629},[34,50470,34495],{"class":161},[34,50472,50473,50475,50477],{"class":36,"line":34635},[34,50474,34266],{"class":40},[34,50476,221],{"class":55},[34,50478,34271],{"class":40},[34,50480,50481],{"class":36,"line":34649},[34,50482,34510],{"class":161},[34,50484,50485],{"class":36,"line":34655},[34,50486,34516],{"class":40},[34,50488,50489],{"class":36,"line":34661},[34,50490,37997],{"class":161},[34,50492,50493,50495],{"class":36,"line":34672},[34,50494,34522],{"class":55},[34,50496,34525],{"class":40},[34,50498,50499],{"class":36,"line":34678},[34,50500,34531],{"class":161},[34,50502,50503,50505,50507],{"class":36,"line":34684},[34,50504,38012],{"class":40},[34,50506,221],{"class":55},[34,50508,34306],{"class":40},[34,50510,50511],{"class":36,"line":34694},[34,50512,34548],{"class":161},[34,50514,50515,50517,50519,50521,50523,50525,50527],{"class":36,"line":34700},[34,50516,38025],{"class":40},[34,50518,221],{"class":55},[34,50520,34323],{"class":40},[34,50522,34326],{"class":51},[34,50524,221],{"class":55},[34,50526,394],{"class":44},[34,50528,101],{"class":40},[34,50530,50531],{"class":36,"line":34711},[34,50532,34573],{"class":161},[34,50534,50535,50537,50539],{"class":36,"line":34717},[34,50536,38046],{"class":40},[34,50538,221],{"class":55},[34,50540,34349],{"class":40},[34,50542,50543],{"class":36,"line":34727},[34,50544,34590],{"class":161},[34,50546,50547,50549,50551,50553,50555,50557,50559],{"class":36,"line":34732},[34,50548,38059],{"class":40},[34,50550,11127],{"class":55},[34,50552,38064],{"class":40},[34,50554,2252],{"class":55},[34,50556,34407],{"class":40},[34,50558,177],{"class":44},[34,50560,101],{"class":40},[34,50562,50563,50565,50567,50569,50571],{"class":36,"line":34738},[34,50564,38077],{"class":40},[34,50566,11127],{"class":55},[34,50568,34428],{"class":40},[34,50570,4602],{"class":55},[34,50572,34433],{"class":40},[34,50574,50575],{"class":36,"line":34787},[34,50576,38090],{"class":161},[34,50578,50579,50581,50583,50585,50587],{"class":36,"line":34834},[34,50580,38095],{"class":40},[34,50582,11127],{"class":55},[34,50584,34407],{"class":40},[34,50586,177],{"class":44},[34,50588,101],{"class":40},[34,50590,50591],{"class":36,"line":34839},[34,50592,34652],{"class":161},[34,50594,50595],{"class":36,"line":34845},[34,50596,34658],{"class":161},[34,50598,50599,50601,50603],{"class":36,"line":34864},[34,50600,34664],{"class":40},[34,50602,2379],{"class":55},[34,50604,34669],{"class":40},[34,50606,50607],{"class":36,"line":34870},[34,50608,34675],{"class":161},[34,50610,50611],{"class":36,"line":34890},[34,50612,34681],{"class":161},[34,50614,50615,50617,50619],{"class":36,"line":34896},[34,50616,34687],{"class":40},[34,50618,2379],{"class":55},[34,50620,34669],{"class":40},[34,50622,50623],{"class":36,"line":34902},[34,50624,34697],{"class":161},[34,50626,50627,50629,50631],{"class":36,"line":34912},[34,50628,34703],{"class":40},[34,50630,2379],{"class":55},[34,50632,34708],{"class":40},[34,50634,50635],{"class":36,"line":34917},[34,50636,34714],{"class":161},[34,50638,50639,50641,50643],{"class":36,"line":34923},[34,50640,34720],{"class":40},[34,50642,2379],{"class":55},[34,50644,34708],{"class":40},[34,50646,50647],{"class":36,"line":34939},[34,50648,1475],{"emptyLinePlaceholder":1474},[34,50650,50651],{"class":36,"line":34984},[34,50652,34735],{"class":161},[34,50654,50655,50657,50659,50661,50663,50665,50667,50669,50671,50673,50675,50677,50679,50681,50683,50685,50687,50689,50691,50693],{"class":36,"line":34990},[34,50656,34092],{"class":44},[34,50658,286],{"class":40},[34,50660,5245],{"class":504},[34,50662,34100],{"class":44},[34,50664,34749],{"class":504},[34,50666,2687],{"class":44},[34,50668,34754],{"class":55},[34,50670,2737],{"class":44},[34,50672,34759],{"class":504},[34,50674,2687],{"class":44},[34,50676,34754],{"class":55},[34,50678,2737],{"class":44},[34,50680,5245],{"class":504},[34,50682,34770],{"class":40},[34,50684,2327],{"class":55},[34,50686,394],{"class":44},[34,50688,34777],{"class":40},[34,50690,2327],{"class":55},[34,50692,394],{"class":44},[34,50694,34784],{"class":40},[34,50696,50697,50699,50701,50703,50705,50707,50709,50711,50713,50715,50717,50719,50721,50723,50725,50727,50729,50731,50733,50735],{"class":36,"line":34996},[34,50698,34092],{"class":44},[34,50700,286],{"class":40},[34,50702,5245],{"class":504},[34,50704,34100],{"class":44},[34,50706,34798],{"class":504},[34,50708,2687],{"class":44},[34,50710,34754],{"class":55},[34,50712,2737],{"class":44},[34,50714,34807],{"class":504},[34,50716,2687],{"class":44},[34,50718,34754],{"class":55},[34,50720,2737],{"class":44},[34,50722,5245],{"class":504},[34,50724,34818],{"class":40},[34,50726,2327],{"class":55},[34,50728,394],{"class":44},[34,50730,34825],{"class":40},[34,50732,2327],{"class":55},[34,50734,394],{"class":44},[34,50736,34784],{"class":40},[34,50738,50739],{"class":36,"line":35002},[34,50740,1475],{"emptyLinePlaceholder":1474},[34,50742,50743],{"class":36,"line":35013},[34,50744,34842],{"class":161},[34,50746,50747,50749,50751,50753,50755,50757,50759],{"class":36,"line":35019},[34,50748,4150],{"class":55},[34,50750,34850],{"class":40},[34,50752,2327],{"class":55},[34,50754,394],{"class":44},[34,50756,2731],{"class":40},[34,50758,2751],{"class":55},[34,50760,34861],{"class":40},[34,50762,50763],{"class":36,"line":35025},[34,50764,34867],{"class":161},[34,50766,50767,50769,50771,50773,50775,50777,50779],{"class":36,"line":35031},[34,50768,34873],{"class":40},[34,50770,989],{"class":44},[34,50772,221],{"class":55},[34,50774,34880],{"class":40},[34,50776,2327],{"class":55},[34,50778,394],{"class":44},[34,50780,34887],{"class":40},[34,50782,50783],{"class":36,"line":35049},[34,50784,34893],{"class":161},[34,50786,50787],{"class":36,"line":35063},[34,50788,34899],{"class":161},[34,50790,50791,50793,50795],{"class":36,"line":35072},[34,50792,34905],{"class":40},[34,50794,221],{"class":55},[34,50796,33955],{"class":40},[34,50798,50799],{"class":36,"line":35081},[34,50800,1475],{"emptyLinePlaceholder":1474},[34,50802,50803],{"class":36,"line":35090},[34,50804,34920],{"class":161},[34,50806,50807,50809,50811,50813,50815],{"class":36,"line":35099},[34,50808,34926],{"class":40},[34,50810,221],{"class":55},[34,50812,34931],{"class":40},[34,50814,2327],{"class":55},[34,50816,34936],{"class":40},[34,50818,50819,50821,50823,50825,50827,50829,50831,50833,50835,50837,50839,50841,50843,50845,50847,50849,50851,50853],{"class":36,"line":35105},[34,50820,34092],{"class":44},[34,50822,286],{"class":40},[34,50824,34946],{"class":504},[34,50826,2687],{"class":44},[34,50828,34951],{"class":55},[34,50830,2737],{"class":44},[34,50832,2339],{"class":504},[34,50834,2687],{"class":44},[34,50836,34951],{"class":55},[34,50838,2737],{"class":44},[34,50840,34964],{"class":504},[34,50842,34967],{"class":40},[34,50844,34970],{"class":55},[34,50846,2698],{"class":44},[34,50848,34975],{"class":40},[34,50850,2131],{"class":55},[34,50852,2698],{"class":44},[34,50854,296],{"class":40},[34,50856,50857],{"class":36,"line":35111},[34,50858,38374],{"class":161},[34,50860,50861],{"class":36,"line":35119},[34,50862,38379],{"class":161},[34,50864,50865,50867,50869],{"class":36,"line":35124},[34,50866,38384],{"class":40},[34,50868,35008],{"class":504},[34,50870,101],{"class":40},[34,50872,50873],{"class":36,"line":35130},[34,50874,35028],{"class":161},[34,50876,50877,50879,50881,50883,50885,50887],{"class":36,"line":35141},[34,50878,35034],{"class":40},[34,50880,221],{"class":55},[34,50882,35039],{"class":40},[34,50884,35042],{"class":51},[34,50886,221],{"class":55},[34,50888,3204],{"class":40},[34,50890,50891,50893,50895,50897],{"class":36,"line":35147},[34,50892,35052],{"class":504},[34,50894,2650],{"class":40},[34,50896,35057],{"class":44},[34,50898,35060],{"class":40},[34,50900,50901,50903],{"class":36,"line":35167},[34,50902,35066],{"class":504},[34,50904,35069],{"class":40},[34,50906,50907,50909],{"class":36,"line":35173},[34,50908,35075],{"class":504},[34,50910,35078],{"class":40},[34,50912,50913,50915],{"class":36,"line":35179},[34,50914,35084],{"class":504},[34,50916,35087],{"class":40},[34,50918,50919,50921],{"class":36,"line":35185},[34,50920,35093],{"class":504},[34,50922,35096],{"class":40},[34,50924,50925],{"class":36,"line":35202},[34,50926,35102],{"class":40},[34,50928,50929],{"class":36,"line":35208},[34,50930,35108],{"class":161},[34,50932,50933,50935],{"class":36,"line":35214},[34,50934,5743],{"class":55},[34,50936,35116],{"class":40},[34,50938,50939],{"class":36,"line":35220},[34,50940,1475],{"emptyLinePlaceholder":1474},[34,50942,50943],{"class":36,"line":35226},[34,50944,35127],{"class":161},[34,50946,50947,50949,50951],{"class":36,"line":35232},[34,50948,33588],{"class":55},[34,50950,35135],{"class":3617},[34,50952,35138],{"class":40},[34,50954,50955],{"class":36,"line":35259},[34,50956,35144],{"class":161},[34,50958,50959,50961,50963,50965,50967,50969,50971,50973],{"class":36,"line":35283},[34,50960,35150],{"class":40},[34,50962,33334],{"class":51},[34,50964,221],{"class":55},[34,50966,286],{"class":40},[34,50968,2293],{"class":44},[34,50970,291],{"class":40},[34,50972,247],{"class":44},[34,50974,296],{"class":40},[34,50976,50977],{"class":36,"line":35289},[34,50978,35170],{"class":161},[34,50980,50981],{"class":36,"line":35295},[34,50982,35176],{"class":161},[34,50984,50985],{"class":36,"line":35301},[34,50986,35182],{"class":161},[34,50988,50989,50991,50993,50995,50997,50999,51001],{"class":36,"line":35312},[34,50990,33368],{"class":40},[34,50992,394],{"class":44},[34,50994,291],{"class":40},[34,50996,332],{"class":44},[34,50998,291],{"class":40},[34,51000,394],{"class":44},[34,51002,101],{"class":40},[34,51004,51005],{"class":36,"line":35323},[34,51006,35205],{"class":161},[34,51008,51009],{"class":36,"line":35329},[34,51010,35211],{"class":161},[34,51012,51013],{"class":36,"line":35346},[34,51014,35217],{"class":161},[34,51016,51017],{"class":36,"line":35369},[34,51018,35223],{"class":161},[34,51020,51021],{"class":36,"line":35392},[34,51022,35229],{"class":161},[34,51024,51025,51027,51029,51031,51033,51035,51037,51039,51041],{"class":36,"line":35398},[34,51026,35235],{"class":40},[34,51028,35238],{"class":504},[34,51030,35241],{"class":40},[34,51032,35244],{"class":504},[34,51034,291],{"class":40},[34,51036,35249],{"class":51},[34,51038,221],{"class":55},[34,51040,35254],{"class":504},[34,51042,101],{"class":40},[34,51044,51045,51047,51049,51051,51053,51055,51057,51059,51061],{"class":36,"line":35403},[34,51046,35235],{"class":40},[34,51048,35238],{"class":504},[34,51050,35266],{"class":40},[34,51052,35269],{"class":504},[34,51054,291],{"class":40},[34,51056,35249],{"class":51},[34,51058,221],{"class":55},[34,51060,35278],{"class":504},[34,51062,101],{"class":40},[34,51064,51065],{"class":36,"line":35412},[34,51066,35286],{"class":161},[34,51068,51069],{"class":36,"line":35422},[34,51070,35292],{"class":40},[34,51072,51073],{"class":36,"line":35428},[34,51074,35298],{"class":161},[34,51076,51077,51079,51081],{"class":36,"line":35433},[34,51078,35304],{"class":40},[34,51080,35307],{"class":504},[34,51082,101],{"class":40},[34,51084,51085,51087,51089],{"class":36,"line":35439},[34,51086,35315],{"class":40},[34,51088,35318],{"class":504},[34,51090,101],{"class":40},[34,51092,51093],{"class":36,"line":35452},[34,51094,35326],{"class":161},[34,51096,51097,51099,51101,51103,51105,51107,51109],{"class":36,"line":35458},[34,51098,33368],{"class":40},[34,51100,394],{"class":44},[34,51102,291],{"class":40},[34,51104,332],{"class":44},[34,51106,291],{"class":40},[34,51108,332],{"class":44},[34,51110,101],{"class":40},[34,51112,51113,51115,51117,51119,51121,51123,51125,51127,51129],{"class":36,"line":35469},[34,51114,35235],{"class":40},[34,51116,35238],{"class":504},[34,51118,35353],{"class":40},[34,51120,35244],{"class":504},[34,51122,291],{"class":40},[34,51124,35249],{"class":51},[34,51126,221],{"class":55},[34,51128,35364],{"class":504},[34,51130,101],{"class":40},[34,51132,51133,51135,51137,51139,51141,51143,51145,51147,51149],{"class":36,"line":35480},[34,51134,35235],{"class":40},[34,51136,35238],{"class":504},[34,51138,35376],{"class":40},[34,51140,35269],{"class":504},[34,51142,291],{"class":40},[34,51144,35249],{"class":51},[34,51146,221],{"class":55},[34,51148,35387],{"class":504},[34,51150,101],{"class":40},[34,51152,51153],{"class":36,"line":35499},[34,51154,35395],{"class":161},[34,51156,51158],{"class":36,"line":51157},219,[34,51159,35292],{"class":40},[34,51161,51163,51165,51167],{"class":36,"line":51162},220,[34,51164,35304],{"class":40},[34,51166,35238],{"class":504},[34,51168,101],{"class":40},[34,51170,51172,51174,51176],{"class":36,"line":51171},221,[34,51173,35315],{"class":40},[34,51175,35417],{"class":504},[34,51177,101],{"class":40},[34,51179,51181],{"class":36,"line":51180},222,[34,51182,35425],{"class":40},[34,51184,51186],{"class":36,"line":51185},223,[34,51187,1475],{"emptyLinePlaceholder":1474},[34,51189,51191],{"class":36,"line":51190},224,[34,51192,35436],{"class":161},[34,51194,51196,51198,51200,51202,51204],{"class":36,"line":51195},225,[34,51197,3189],{"class":55},[34,51199,32862],{"class":44},[34,51201,4602],{"class":55},[34,51203,32867],{"class":504},[34,51205,5392],{"class":40},[34,51207,51209],{"class":36,"line":51208},226,[34,51210,35455],{"class":161},[34,51212,51214,51216,51218],{"class":36,"line":51213},227,[34,51215,46185],{"class":40},[34,51217,221],{"class":55},[34,51219,46190],{"class":40},[34,51221,51223,51225,51227],{"class":36,"line":51222},228,[34,51224,35472],{"class":40},[34,51226,221],{"class":55},[34,51228,35477],{"class":40},[34,51230,51232,51234,51236,51238,51240,51242,51244],{"class":36,"line":51231},229,[34,51233,35034],{"class":40},[34,51235,221],{"class":55},[34,51237,46207],{"class":40},[34,51239,35490],{"class":51},[34,51241,221],{"class":55},[34,51243,2698],{"class":44},[34,51245,101],{"class":40},[34,51247,51249],{"class":36,"line":51248},230,[34,51250,35502],{"class":40},[1353,51252,51254],{"id":51253},"_242测试代码","2.4.2.测试代码",[103,51256,51257],{},"使用测试集进行测试与推理",[24,51259,51261],{"className":26,"code":51260,"language":28,"meta":29,"style":29},"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",[31,51262,51263,51269,51279,51289,51300,51310,51314,51318,51326,51331,51335,51352,51356,51360,51364,51368,51372,51404,51408,51416,51420,51432,51436,51440,51444,51448,51452,51456,51460,51464,51482,51496,51500,51510,51520,51530,51536,51540,51544,51552,51556,51572,51580,51584,51588,51596,51604,51608,51612,51616,51620,51626,51630,51640,51648,51656,51660,51664,51668,51676,51680,51696,51700,51704,51708,51720,51724,51736,51740,51744,51756,51760,51770,51774,51778,51790,51794,51802,51806,51810,51818,51822,51830,51834,51838,51842,51846,51850,51866,51874,51878,51882,51900,51906,51910,51920,51928,51936,51940,51944,51948,51952,51960,51964,51980,51984,51992,52000],{"__ignoreMap":29},[34,51264,51265,51267],{"class":36,"line":37},[34,51266,32036],{"class":55},[34,51268,32039],{"class":40},[34,51270,51271,51273,51275,51277],{"class":36,"line":165},[34,51272,32036],{"class":55},[34,51274,33057],{"class":40},[34,51276,33025],{"class":55},[34,51278,33062],{"class":40},[34,51280,51281,51283,51285,51287],{"class":36,"line":171},[34,51282,32379],{"class":55},[34,51284,33040],{"class":40},[34,51286,32036],{"class":55},[34,51288,33045],{"class":40},[34,51290,51291,51293,51295,51297],{"class":36,"line":182},[34,51292,32379],{"class":55},[34,51294,33010],{"class":40},[34,51296,32036],{"class":55},[34,51298,51299],{"class":40}," ImageFolder\n",[34,51301,51302,51304,51306,51308],{"class":36,"line":188},[34,51303,32379],{"class":55},[34,51305,33555],{"class":40},[34,51307,32036],{"class":55},[34,51309,46279],{"class":40},[34,51311,51312],{"class":36,"line":518},[34,51313,1475],{"emptyLinePlaceholder":1474},[34,51315,51316],{"class":36,"line":524},[34,51317,35592],{"class":161},[34,51319,51320,51322,51324],{"class":36,"line":530},[34,51321,33588],{"class":55},[34,51323,35599],{"class":3617},[34,51325,33594],{"class":40},[34,51327,51328],{"class":36,"line":624},[34,51329,51330],{"class":161},"   # 导入自己的数据集，并进行数据处理\n",[34,51332,51333],{"class":36,"line":630},[34,51334,49600],{"class":161},[34,51336,51337,51339,51341,51343,51345,51347,51350],{"class":36,"line":636},[34,51338,49605],{"class":44},[34,51340,221],{"class":55},[34,51342,2465],{"class":55},[34,51344,2058],{"class":504},[34,51346,2353],{"class":44},[34,51348,51349],{"class":49616},"\u002Fdata\u002Ftest",[34,51351,26779],{"class":504},[34,51353,51354],{"class":36,"line":1513},[34,51355,1475],{"emptyLinePlaceholder":1474},[34,51357,51358],{"class":36,"line":1519},[34,51359,49628],{"class":161},[34,51361,51362],{"class":36,"line":3283},[34,51363,49633],{"class":161},[34,51365,51366],{"class":36,"line":3297},[34,51367,49638],{"class":161},[34,51369,51370],{"class":36,"line":3302},[34,51371,49643],{"class":161},[34,51373,51374,51376,51378,51380,51382,51384,51386,51388,51390,51392,51394,51396,51398,51400,51402],{"class":36,"line":3308},[34,51375,49648],{"class":40},[34,51377,221],{"class":55},[34,51379,49653],{"class":40},[34,51381,49656],{"class":44},[34,51383,291],{"class":40},[34,51385,49661],{"class":44},[34,51387,291],{"class":40},[34,51389,49666],{"class":44},[34,51391,49669],{"class":40},[34,51393,49672],{"class":44},[34,51395,291],{"class":40},[34,51397,49677],{"class":44},[34,51399,291],{"class":40},[34,51401,49682],{"class":44},[34,51403,1077],{"class":40},[34,51405,51406],{"class":36,"line":3328},[34,51407,49689],{"class":161},[34,51409,51410,51412,51414],{"class":36,"line":3333},[34,51411,49694],{"class":40},[34,51413,221],{"class":55},[34,51415,49699],{"class":40},[34,51417,51418],{"class":36,"line":3347},[34,51419,49704],{"class":161},[34,51421,51422,51424,51426,51428,51430],{"class":36,"line":3352},[34,51423,49709],{"class":40},[34,51425,33142],{"class":44},[34,51427,291],{"class":40},[34,51429,33142],{"class":44},[34,51431,44261],{"class":40},[34,51433,51434],{"class":36,"line":3381},[34,51435,49722],{"class":161},[34,51437,51438],{"class":36,"line":3386},[34,51439,49727],{"class":40},[34,51441,51442],{"class":36,"line":3403},[34,51443,49732],{"class":40},[34,51445,51446],{"class":36,"line":3408},[34,51447,49737],{"class":161},[34,51449,51450],{"class":36,"line":3413},[34,51451,49742],{"class":161},[34,51453,51454],{"class":36,"line":3418},[34,51455,1475],{"emptyLinePlaceholder":1474},[34,51457,51458],{"class":36,"line":3432},[34,51459,49751],{"class":161},[34,51461,51462],{"class":36,"line":3437},[34,51463,49756],{"class":161},[34,51465,51466,51468,51470,51472,51474,51476,51478,51480],{"class":36,"line":4230},[34,51467,35606],{"class":40},[34,51469,221],{"class":55},[34,51471,49765],{"class":40},[34,51473,49768],{"class":44},[34,51475,291],{"class":40},[34,51477,49773],{"class":51},[34,51479,221],{"class":55},[34,51481,49778],{"class":40},[34,51483,51484,51486,51488,51490,51492,51494],{"class":36,"line":4244},[34,51485,35663],{"class":40},[34,51487,221],{"class":55},[34,51489,33175],{"class":40},[34,51491,33178],{"class":51},[34,51493,221],{"class":55},[34,51495,35674],{"class":40},[34,51497,51498],{"class":36,"line":4252},[34,51499,35679],{"class":161},[34,51501,51502,51504,51506,51508],{"class":36,"line":4257},[34,51503,35684],{"class":51},[34,51505,221],{"class":55},[34,51507,394],{"class":44},[34,51509,33108],{"class":40},[34,51511,51512,51514,51516,51518],{"class":36,"line":4263},[34,51513,35695],{"class":51},[34,51515,221],{"class":55},[34,51517,33118],{"class":44},[34,51519,33108],{"class":40},[34,51521,51522,51524,51526,51528],{"class":36,"line":4269},[34,51523,35706],{"class":51},[34,51525,221],{"class":55},[34,51527,177],{"class":44},[34,51529,101],{"class":40},[34,51531,51532,51534],{"class":36,"line":4274},[34,51533,5743],{"class":55},[34,51535,35719],{"class":40},[34,51537,51538],{"class":36,"line":9598},[34,51539,1475],{"emptyLinePlaceholder":1474},[34,51541,51542],{"class":36,"line":9622},[34,51543,35728],{"class":161},[34,51545,51546,51548,51550],{"class":36,"line":9627},[34,51547,33588],{"class":55},[34,51549,35735],{"class":3617},[34,51551,35738],{"class":40},[34,51553,51554],{"class":36,"line":9633},[34,51555,35743],{"class":161},[34,51557,51558,51560,51562,51564,51566,51568,51570],{"class":36,"line":9660},[34,51559,32879],{"class":40},[34,51561,221],{"class":55},[34,51563,32886],{"class":504},[34,51565,3358],{"class":55},[34,51567,32891],{"class":40},[34,51569,3355],{"class":55},[34,51571,35760],{"class":504},[34,51573,51574,51576,51578],{"class":36,"line":9665},[34,51575,32931],{"class":40},[34,51577,221],{"class":55},[34,51579,33930],{"class":40},[34,51581,51582],{"class":36,"line":9671},[34,51583,1475],{"emptyLinePlaceholder":1474},[34,51585,51586],{"class":36,"line":9683},[34,51587,35777],{"class":161},[34,51589,51590,51592,51594],{"class":36,"line":9695},[34,51591,35782],{"class":40},[34,51593,221],{"class":55},[34,51595,33983],{"class":44},[34,51597,51598,51600,51602],{"class":36,"line":9707},[34,51599,35791],{"class":40},[34,51601,221],{"class":55},[34,51603,4738],{"class":44},[34,51605,51606],{"class":36,"line":11366},[34,51607,1475],{"emptyLinePlaceholder":1474},[34,51609,51610],{"class":36,"line":11391},[34,51611,35804],{"class":161},[34,51613,51614],{"class":36,"line":11414},[34,51615,35809],{"class":161},[34,51617,51618],{"class":36,"line":11438},[34,51619,35814],{"class":161},[34,51621,51622,51624],{"class":36,"line":11443},[34,51623,35819],{"class":55},[34,51625,34525],{"class":40},[34,51627,51628],{"class":36,"line":11448},[34,51629,35826],{"class":161},[34,51631,51632,51634,51636,51638],{"class":36,"line":11453},[34,51633,5056],{"class":55},[34,51635,35833],{"class":40},[34,51637,27689],{"class":55},[34,51639,35838],{"class":40},[34,51641,51642,51644,51646],{"class":36,"line":11462},[34,51643,35843],{"class":40},[34,51645,221],{"class":55},[34,51647,35848],{"class":40},[34,51649,51650,51652,51654],{"class":36,"line":11467},[34,51651,35853],{"class":40},[34,51653,221],{"class":55},[34,51655,35858],{"class":40},[34,51657,51658],{"class":36,"line":11473},[34,51659,35863],{"class":161},[34,51661,51662],{"class":36,"line":11494},[34,51663,34516],{"class":40},[34,51665,51666],{"class":36,"line":11500},[34,51667,35872],{"class":161},[34,51669,51670,51672,51674],{"class":36,"line":11514},[34,51671,34301],{"class":40},[34,51673,221],{"class":55},[34,51675,35881],{"class":40},[34,51677,51678],{"class":36,"line":11520},[34,51679,35886],{"class":161},[34,51681,51682,51684,51686,51688,51690,51692,51694],{"class":36,"line":11547},[34,51683,34318],{"class":40},[34,51685,221],{"class":55},[34,51687,34323],{"class":40},[34,51689,34326],{"class":51},[34,51691,221],{"class":55},[34,51693,394],{"class":44},[34,51695,101],{"class":40},[34,51697,51698],{"class":36,"line":11556},[34,51699,35907],{"class":161},[34,51701,51702],{"class":36,"line":11562},[34,51703,35912],{"class":161},[34,51705,51706],{"class":36,"line":11570},[34,51707,35917],{"class":161},[34,51709,51710,51712,51714,51716,51718],{"class":36,"line":11575},[34,51711,35922],{"class":40},[34,51713,11127],{"class":55},[34,51715,34428],{"class":40},[34,51717,4602],{"class":55},[34,51719,35931],{"class":40},[34,51721,51722],{"class":36,"line":18250},[34,51723,35936],{"class":161},[34,51725,51726,51728,51730,51732,51734],{"class":36,"line":18256},[34,51727,35941],{"class":40},[34,51729,11127],{"class":55},[34,51731,35946],{"class":40},[34,51733,177],{"class":44},[34,51735,101],{"class":40},[34,51737,51738],{"class":36,"line":18279},[34,51739,1475],{"emptyLinePlaceholder":1474},[34,51741,51742],{"class":36,"line":18285},[34,51743,35959],{"class":161},[34,51745,51746,51748,51750,51752,51754],{"class":36,"line":18308},[34,51747,35964],{"class":40},[34,51749,221],{"class":55},[34,51751,35969],{"class":40},[34,51753,2379],{"class":55},[34,51755,35974],{"class":40},[34,51757,51758],{"class":36,"line":18322},[34,51759,35979],{"class":161},[34,51761,51762,51764,51766,51768],{"class":36,"line":18342},[34,51763,34092],{"class":44},[34,51765,286],{"class":40},[34,51767,35988],{"class":504},[34,51769,35991],{"class":40},[34,51771,51772],{"class":36,"line":18348},[34,51773,1475],{"emptyLinePlaceholder":1474},[34,51775,51776],{"class":36,"line":18359},[34,51777,36000],{"class":161},[34,51779,51780,51782,51784,51786,51788],{"class":36,"line":18382},[34,51781,3189],{"class":55},[34,51783,32862],{"class":44},[34,51785,4602],{"class":55},[34,51787,32867],{"class":504},[34,51789,5392],{"class":40},[34,51791,51792],{"class":36,"line":18404},[34,51793,36017],{"class":161},[34,51795,51796,51798,51800],{"class":36,"line":18409},[34,51797,32931],{"class":40},[34,51799,221],{"class":55},[34,51801,46190],{"class":40},[34,51803,51804],{"class":36,"line":18415},[34,51805,36030],{"class":161},[34,51807,51808],{"class":36,"line":18429},[34,51809,36035],{"class":161},[34,51811,51812,51814,51816],{"class":36,"line":18442},[34,51813,36040],{"class":40},[34,51815,36043],{"class":504},[34,51817,296],{"class":40},[34,51819,51820],{"class":36,"line":18447},[34,51821,36050],{"class":161},[34,51823,51824,51826,51828],{"class":36,"line":18461},[34,51825,35663],{"class":40},[34,51827,221],{"class":55},[34,51829,36059],{"class":40},[34,51831,51832],{"class":36,"line":18466},[34,51833,36064],{"class":161},[34,51835,51836],{"class":36,"line":18472},[34,51837,36069],{"class":40},[34,51839,51840],{"class":36,"line":18477},[34,51841,1475],{"emptyLinePlaceholder":1474},[34,51843,51844],{"class":36,"line":18491},[34,51845,36078],{"class":161},[34,51847,51848],{"class":36,"line":18496},[34,51849,36083],{"class":161},[34,51851,51852,51854,51856,51858,51860,51862,51864],{"class":36,"line":18501},[34,51853,32879],{"class":40},[34,51855,221],{"class":55},[34,51857,32886],{"class":504},[34,51859,3358],{"class":55},[34,51861,32891],{"class":40},[34,51863,3355],{"class":55},[34,51865,35760],{"class":504},[34,51867,51868,51870,51872],{"class":36,"line":18515},[34,51869,32931],{"class":40},[34,51871,221],{"class":55},[34,51873,33930],{"class":40},[34,51875,51876],{"class":36,"line":18527},[34,51877,36112],{"class":161},[34,51879,51880],{"class":36,"line":18532},[34,51881,36117],{"class":161},[34,51883,51884,51886,51888,51890,51893,51895,51898],{"class":36,"line":18545},[34,51885,36122],{"class":40},[34,51887,221],{"class":55},[34,51889,2681],{"class":40},[34,51891,51892],{"class":504},"'猫'",[34,51894,291],{"class":40},[34,51896,51897],{"class":504},"'狗'",[34,51899,34887],{"class":40},[34,51901,51902,51904],{"class":36,"line":18550},[34,51903,35819],{"class":55},[34,51905,34525],{"class":40},[34,51907,51908],{"class":36,"line":18555},[34,51909,36187],{"class":161},[34,51911,51912,51914,51916,51918],{"class":36,"line":18560},[34,51913,5056],{"class":55},[34,51915,36194],{"class":40},[34,51917,27689],{"class":55},[34,51919,35838],{"class":40},[34,51921,51922,51924,51926],{"class":36,"line":18573},[34,51923,34251],{"class":40},[34,51925,221],{"class":55},[34,51927,34256],{"class":40},[34,51929,51930,51932,51934],{"class":36,"line":18578},[34,51931,34266],{"class":40},[34,51933,221],{"class":55},[34,51935,34271],{"class":40},[34,51937,51938],{"class":36,"line":34274},[34,51939,1475],{"emptyLinePlaceholder":1474},[34,51941,51942],{"class":36,"line":34280},[34,51943,36223],{"class":161},[34,51945,51946],{"class":36,"line":34286},[34,51947,34516],{"class":40},[34,51949,51950],{"class":36,"line":34292},[34,51951,36232],{"class":161},[34,51953,51954,51956,51958],{"class":36,"line":34298},[34,51955,34301],{"class":40},[34,51957,221],{"class":55},[34,51959,34306],{"class":40},[34,51961,51962],{"class":36,"line":34309},[34,51963,36245],{"class":161},[34,51965,51966,51968,51970,51972,51974,51976,51978],{"class":36,"line":34315},[34,51967,34318],{"class":40},[34,51969,221],{"class":55},[34,51971,34323],{"class":40},[34,51973,34326],{"class":51},[34,51975,221],{"class":55},[34,51977,394],{"class":44},[34,51979,101],{"class":40},[34,51981,51982],{"class":36,"line":34335},[34,51983,36266],{"class":161},[34,51985,51986,51988,51990],{"class":36,"line":34341},[34,51987,36271],{"class":40},[34,51989,221],{"class":55},[34,51991,36276],{"class":40},[34,51993,51994,51996,51998],{"class":36,"line":34352},[34,51995,36281],{"class":40},[34,51997,221],{"class":55},[34,51999,36286],{"class":40},[34,52001,52002,52004,52006,52008,52010,52012,52014,52016],{"class":36,"line":34358},[34,52003,36291],{"class":44},[34,52005,286],{"class":40},[34,52007,36296],{"class":504},[34,52009,36299],{"class":40},[34,52011,36302],{"class":504},[34,52013,291],{"class":40},[34,52015,36307],{"class":504},[34,52017,36310],{"class":40},[1711,52019,52020],{},"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":29,"searchDepth":165,"depth":165,"links":52022},[52023,52024,52025,52026],{"id":32233,"depth":171,"text":32234},{"id":39480,"depth":171,"text":39481},{"id":42912,"depth":171,"text":42913},{"id":46920,"depth":171,"text":46921},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32225,"description":1744},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52033,"title":52034,"body":52035,"description":1744,"extension":1745,"meta":52042,"navigation":1474,"path":52043,"seo":52044,"stem":52045,"__hash__":52046},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52036,"toc":52040},[52037],[10,52038,52034],{"id":52039},"_3yolo模型学习",{"title":29,"searchDepth":165,"depth":165,"links":52041},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52034,"description":1744},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52048,"title":52049,"body":52050,"description":52057,"extension":1745,"meta":52058,"navigation":1474,"path":52060,"seo":52061,"stem":52062,"__hash__":52063},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52051,"toc":52055},[52052],[103,52053,52054],{},"yolo模型还未补充",{"title":29,"searchDepth":165,"depth":165,"links":52056},[],"深度学习学习",{"category":52059},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52049,"description":52057},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52065,"title":52066,"body":52067,"description":1744,"extension":1745,"meta":52092,"navigation":1474,"path":52093,"seo":52094,"stem":52095,"__hash__":52096},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52068,"toc":52090},[52069,52072,52075,52080,52087],[10,52070,52066],{"id":52071},"_1工具",[103,52073,52074],{},"提示错误插件：有问题会提前报错",[103,52076,52077],{},[109,52078],{"alt":29,"src":52079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[103,52081,52082],{},[236,52083,52086],{"href":52084,"rel":52085},"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",[25510],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[103,52088,52089],{},"alt键加上下箭头可以实现语句的移动",{"title":29,"searchDepth":165,"depth":165,"links":52091},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52066,"description":1744},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52098,"title":52099,"body":52100,"description":1744,"extension":1745,"meta":54964,"navigation":1474,"path":54965,"seo":54966,"stem":54967,"__hash__":54968},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52101,"toc":54915},[52102,52105,52109,52113,52118,52121,52126,52130,52137,52142,52149,52154,52161,52166,52170,52175,52178,52182,52187,52191,52196,52199,52202,52205,52208,52211,52214,52217,52220,52225,52230,52235,52239,52242,52245,52249,52254,52257,52265,52270,52287,52295,52300,52305,52310,52315,52320,52323,52328,52333,52337,52346,52351,52356,52360,52365,52368,52372,52377,52385,52390,52395,52398,52403,52408,52413,52416,52419,52422,52427,52432,52435,52440,52443,52448,52451,52454,52457,52462,52465,52468,52483,52488,52493,52498,52501,52504,52507,52521,52524,52529,52534,52537,52540,52543,52546,52549,52552,52555,52559,52563,52568,52572,52575,52580,52585,52588,52593,52596,52600,52605,52608,52611,52614,52617,52620,52623,52626,52629,52632,52636,52641,52646,52651,52654,52657,52661,52666,52669,52673,52676,52679,52684,52687,52690,52694,52698,52701,52706,52711,52714,52743,52748,52753,52758,52763,52767,52772,52776,52781,52784,52788,52792,52797,52801,52806,52811,52815,52820,52823,52825,52828,52833,52837,52842,52846,52850,52855,52860,52865,52870,52874,52879,52884,52889,52892,52895,52900,52903,52908,52913,52918,52923,52927,53734,53738,54081,54086,54089,54092,54095,54098,54101,54104,54107,54110,54112,54115,54117,54120,54124,54129,54132,54135,54138,54142,54147,54152,54172,54175,54179,54184,54189,54206,54210,54239,54243,54265,54267,54306,54314,54320,54324,54327,54330,54335,54340,54343,54346,54349,54354,54359,54362,54365,54368,54371,54374,54377,54380,54383,54386,54389,54392,54394,54397,54400,54403,54406,54409,54412,54415,54418,54422,54427,54430,54435,54438,54441,54444,54447,54450,54453,54456,54458,54461,54464,54467,54470,54473,54476,54480,54483,54492,54495,54500,54503,54508,54511,54514,54517,54520,54523,54526,54529,54533,54537,54540,54543,54548,54553,54558,54562,54567,54572,54575,54578,54581,54584,54587,54592,54595,54600,54602,54607,54610,54614,54619,54622,54625,54630,54634,54637,54642,54645,54648,54677,54682,54685,54688,54691,54694,54697,54701,54704,54790,54794,54797,54802,54807,54814,54817,54820,54823,54826,54829,54834,54839,54842,54845,54848,54851,54854,54857,54860,54863,54866,54868,54871,54875,54880,54885,54890,54893,54898,54903,54906,54909,54912],[10,52103,52099],{"id":52104},"_2基础语法",[14,52106,52108],{"id":52107},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[19,52110,52112],{"id":52111},"_211-js组成","2.1.1 js组成",[1772,52114,52115],{},[1775,52116,52117],{},"js是编程语言，html和css不是编程语言，是标记语言",[103,52119,52120],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[1772,52122,52123],{"start":165},[1775,52124,52125],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[19,52127,52129],{"id":52128},"_212-js书写位置","2.1.2 js书写位置",[1772,52131,52132],{},[1775,52133,52134],{},[1165,52135,52136],{},"内部 JavaScript",[103,52138,52139],{},[109,52140],{"alt":29,"src":52141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[1772,52143,52144],{"start":165},[1775,52145,52146],{},[1165,52147,52148],{},"外部 JavaScript",[103,52150,52151],{},[109,52152],{"alt":29,"src":52153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[1772,52155,52156],{"start":171},[1775,52157,52158],{},[1165,52159,52160],{},"内联 JavaScript",[103,52162,52163],{},[109,52164],{"alt":29,"src":52165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[19,52167,52169],{"id":52168},"_213-javascript注释","2.1.3 JavaScript注释",[103,52171,52172],{},[109,52173],{"alt":29,"src":52174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[103,52176,52177],{},"alt+shift+a一定要记住！",[19,52179,52181],{"id":52180},"_214-javascript结束符","2.1.4 JavaScript结束符",[103,52183,52184],{},[109,52185],{"alt":29,"src":52186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[19,52188,52190],{"id":52189},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[1772,52192,52193],{},[1775,52194,52195],{},"输出语法：",[103,52197,52198],{},"①document.write('要出的内容')",[103,52200,52201],{},"向body内输出内容；",[103,52203,52204],{},"如果输出的内容写的是标签，也会被解析cheng",[103,52206,52207],{},"②alert('要出的内容')",[103,52209,52210],{},"页面弹出警告对话框",[103,52212,52213],{},"③console.log('控制台打印')",[103,52215,52216],{},"控制台输出语法，程序员调试使用",[103,52218,52219],{},"输入log就行，自动生成：",[103,52221,52222],{},[109,52223],{"alt":29,"src":52224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[1772,52226,52227],{"start":165},[1775,52228,52229],{},"输入语法：",[103,52231,52232],{},[109,52233],{"alt":29,"src":52234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[19,52236,52238],{"id":52237},"_2116-字面量","21.1.6 字面量",[103,52240,52241],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[103,52243,52244],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52246,52248],{"id":52247},"_22-变量","2.2 变量",[1772,52250,52251],{},[1775,52252,52253],{},"变量声明",[103,52255,52256],{},"let 变量名",[2798,52258,52259,52262],{},[1775,52260,52261],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[1775,52263,52264],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[1772,52266,52267],{"start":165},[1775,52268,52269],{},"变量赋值",[24,52271,52275],{"className":52272,"code":52273,"language":52274,"meta":29,"style":29},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[31,52276,52277,52282],{"__ignoreMap":29},[34,52278,52279],{"class":36,"line":37},[34,52280,52281],{"class":40},"let age\n",[34,52283,52284],{"class":36,"line":165},[34,52285,52286],{"class":40},"age=18\n",[1772,52288,52289,52292],{"start":171},[1775,52290,52291],{},"连这些（变量的初始化）：let age=18",[1775,52293,52294],{},"更新变量",[103,52296,52297],{},[109,52298],{"alt":29,"src":52299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[1772,52301,52302],{"start":188},[1775,52303,52304],{},"声明多个变量",[103,52306,52307],{},[109,52308],{"alt":29,"src":52309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[1772,52311,52312],{"start":518},[1775,52313,52314],{},"变量命名规则与规范",[103,52316,52317],{},[109,52318],{"alt":29,"src":52319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[103,52321,52322],{},"遵守小驼峰！",[1772,52324,52325],{"start":524},[1775,52326,52327],{},"变量拓展-let和var的区别",[103,52329,52330],{},[109,52331],{"alt":29,"src":52332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52334,52336],{"id":52335},"_23-数组","2.3 数组",[24,52338,52340],{"className":52272,"code":52339,"language":52274,"meta":29,"style":29},"let arr = []\n",[31,52341,52342],{"__ignoreMap":29},[34,52343,52344],{"class":36,"line":37},[34,52345,52339],{"class":40},[103,52347,52348],{},[109,52349],{"alt":29,"src":52350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[103,52352,52353],{},[109,52354],{"alt":29,"src":52355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52357,52359],{"id":52358},"_24-常量","2.4 常量",[103,52361,52362],{},[109,52363],{"alt":29,"src":52364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[103,52366,52367],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52369,52371],{"id":52370},"_25-数据类型","2.5 数据类型",[103,52373,52374],{},[109,52375],{"alt":29,"src":52376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[1772,52378,52379,52382],{},[1775,52380,52381],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[1775,52383,52384],{},"算数运算符：",[103,52386,52387],{},[109,52388],{"alt":29,"src":52389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[1772,52391,52392],{"start":171},[1775,52393,52394],{},"数字类型（Number）",[103,52396,52397],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[103,52399,52400],{},[109,52401],{"alt":29,"src":52402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[1772,52404,52405],{"start":182},[1775,52406,52407],{},"字符串类型（string）",[103,52409,52410],{},[109,52411],{"alt":29,"src":52412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[103,52414,52415],{},"反引号也是可以使用的",[103,52417,52418],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[103,52420,52421],{},"例如：document.write(\"我今年\"+age+\"岁\")",[1772,52423,52424],{"start":188},[1775,52425,52426],{},"模板字符串",[103,52428,52429],{},[109,52430],{"alt":29,"src":52431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[103,52433,52434],{},"类似于python的字符串格式化",[1772,52436,52437],{"start":518},[1775,52438,52439],{},"布尔类型",[103,52441,52442],{},"true 和 false",[1772,52444,52445],{"start":524},[1775,52446,52447],{},"未定义类型（underfined）",[103,52449,52450],{},"表示没有赋值",[103,52452,52453],{},"未定义类型是比较特殊的类型，只有一个值undefined",[103,52455,52456],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[1772,52458,52459],{"start":530},[1775,52460,52461],{},"null（空类型）",[103,52463,52464],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[103,52466,52467],{},"赋值了，但是内容为空",[24,52469,52471],{"className":52272,"code":52470,"language":52274,"meta":29,"style":29},"typeof null\n输出的是'object'，是一个对象数据类型\n",[31,52472,52473,52478],{"__ignoreMap":29},[34,52474,52475],{"class":36,"line":37},[34,52476,52477],{"class":40},"typeof null\n",[34,52479,52480],{"class":36,"line":165},[34,52481,52482],{"class":40},"输出的是'object'，是一个对象数据类型\n",[1772,52484,52485],{"start":624},[1775,52486,52487],{},"控制台检测数据类型",[103,52489,52490],{},[109,52491],{"alt":29,"src":52492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[1772,52494,52495],{"start":630},[1775,52496,52497],{},"类型转换",[103,52499,52500],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[103,52502,52503],{},"转换方式：隐式转换和显示转换",[103,52505,52506],{},"①隐式转换",[2798,52508,52509,52512,52515,52518],{},[1775,52510,52511],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[1775,52513,52514],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[1775,52516,52517],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[1775,52519,52520],{},"任何数据和字符串相加结果都是字符串",[103,52522,52523],{},"②显示转换",[103,52525,52526],{},[109,52527],{"alt":29,"src":52528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[103,52530,52531],{},[109,52532],{"alt":29,"src":52533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[103,52535,52536],{},"在输入的时候要用好隐式转换，简单写起来",[103,52538,52539],{},"let num = +prompt(’请输入数字：‘)",[103,52541,52542],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[103,52544,52545],{},"console.log(parseInt('12.333px'))",[103,52547,52548],{},"输出为：12",[103,52550,52551],{},"console.log(parseInt('a'a'a12.333px'))",[103,52553,52554],{},"输出：NaN",[14,52556,52558],{"id":52557},"_26-运算符","2.6 运算符",[19,52560,52562],{"id":52561},"_261-赋值运算符","2.6.1 赋值运算符",[103,52564,52565],{},[109,52566],{"alt":29,"src":52567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[19,52569,52571],{"id":52570},"_262-一元运算符","2.6.2 一元运算符",[103,52573,52574],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[103,52576,52577],{},[109,52578],{"alt":29,"src":52579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[103,52581,52582],{},[109,52583],{"alt":29,"src":52584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[103,52586,52587],{},"两者的区别：",[103,52589,52590],{},[109,52591],{"alt":29,"src":52592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[103,52594,52595],{},"前置先自加；后置后加，代码执行完之后再加",[19,52597,52599],{"id":52598},"_263-比较运算符","2.6.3 比较运算符",[103,52601,52602],{},[109,52603],{"alt":29,"src":52604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[103,52606,52607],{},"比较运算符也有隐式转换",[103,52609,52610],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[103,52612,52613],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[103,52615,52616],{},"要使用三等，开发的时候",[103,52618,52619],{},"NaN不等于任何人，包括它自己",[103,52621,52622],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[103,52624,52625],{},"7\u002F10=0.7",[103,52627,52628],{},"最后：0.5+0.2=0.7",[103,52630,52631],{},"字符串比较，比较的是字符对应的ASCII码",[19,52633,52635],{"id":52634},"_264-逻辑运算符","2.6.4 逻辑运算符",[103,52637,52638],{},[109,52639],{"alt":29,"src":52640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[103,52642,52643],{},[109,52644],{"alt":29,"src":52645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[103,52647,52648],{},[109,52649],{"alt":29,"src":52650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[103,52652,52653],{},"上述题目选D",[103,52655,52656],{},"与真2假1；或真1假2",[19,52658,52660],{"id":52659},"_265-运算符优先级","2.6.5 运算符优先级",[103,52662,52663],{},[109,52664],{"alt":29,"src":52665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[103,52667,52668],{},"先算逻辑与，后算逻辑或",[14,52670,52672],{"id":52671},"_27-语句","2.7 语句",[103,52674,52675],{},"表达式：是可以被求值的代码，会有结果给我们",[103,52677,52678],{},"语句：语句是可以被执行的代码，例如prompt()",[103,52680,52681],{},[109,52682],{"alt":29,"src":52683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[103,52685,52686],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[103,52688,52689],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[19,52691,52693],{"id":52692},"_271-分支语句","2.7.1 分支语句",[1353,52695,52697],{"id":52696},"_2711-if分支语句","2.7.1.1 if分支语句",[103,52699,52700],{},"if语句单行简单的话，可以不写{}，写在一行就行",[1772,52702,52703],{},[1775,52704,52705],{},"单分支语句",[103,52707,52708],{},[109,52709],{"alt":29,"src":52710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[103,52712,52713],{},"除了0，所有数字都为真",[24,52715,52717],{"className":52272,"code":52716,"language":52274,"meta":29,"style":29},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[31,52718,52719,52724,52729,52734,52738],{"__ignoreMap":29},[34,52720,52721],{"class":36,"line":37},[34,52722,52723],{"class":40},"if（0) {\n",[34,52725,52726],{"class":36,"line":165},[34,52727,52728],{"class":40},"    let a=1\n",[34,52730,52731],{"class":36,"line":171},[34,52732,52733],{"class":40},"    alert(typeof a)\n",[34,52735,52736],{"class":36,"line":182},[34,52737,3223],{"class":40},[34,52739,52740],{"class":36,"line":188},[34,52741,52742],{"class":40},"不输出，括号为假\n",[1772,52744,52745],{"start":165},[1775,52746,52747],{},"双分支语句",[103,52749,52750],{},[109,52751],{"alt":29,"src":52752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[1772,52754,52755],{"start":171},[1775,52756,52757],{},"多分支语句",[103,52759,52760],{},[109,52761],{"alt":29,"src":52762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[1353,52764,52766],{"id":52765},"_2712-三元运算符","2.7.1.2 三元运算符",[103,52768,52769],{},[109,52770],{"alt":29,"src":52771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[1353,52773,52775],{"id":52774},"_2713-switch语句","2.7.1.3 switch语句",[103,52777,52778],{},[109,52779],{"alt":29,"src":52780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[103,52782,52783],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[19,52785,52787],{"id":52786},"_272-循环语句","2.7.2 循环语句",[1353,52789,52791],{"id":52790},"_2721-断点演示","2.7.2.1 断点演示",[103,52793,52794],{},[109,52795],{"alt":29,"src":52796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[1353,52798,52800],{"id":52799},"_2722-while循环","2.7.2.2 while循环",[103,52802,52803],{},[109,52804],{"alt":29,"src":52805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[103,52807,52808],{},[109,52809],{"alt":29,"src":52810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[1353,52812,52814],{"id":52813},"_2723-for循环","2.7.2.3 for循环",[103,52816,52817],{},[109,52818],{"alt":29,"src":52819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[103,52821,52822],{},"for(;;) {",[103,52824,2737],{},[103,52826,52827],{},"表示无限循环",[103,52829,52830],{},[109,52831],{"alt":29,"src":52832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[1353,52834,52836],{"id":52835},"_2724-循环的退出","2.7.2.4 循环的退出",[103,52838,52839],{},[109,52840],{"alt":29,"src":52841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52843,52845],{"id":52844},"_28-数组","2.8 数组",[19,52847,52849],{"id":52848},"_281-基础认识","2.8.1 基础认识",[103,52851,52852],{},[109,52853],{"alt":29,"src":52854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[103,52856,52857],{},[109,52858],{"alt":29,"src":52859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[103,52861,52862],{},[109,52863],{"alt":29,"src":52864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[103,52866,52867],{},[109,52868],{"alt":29,"src":52869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[19,52871,52873],{"id":52872},"_282-操作数组","2.8.2 操作数组",[103,52875,52876],{},[109,52877],{"alt":29,"src":52878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[1772,52880,52881],{},[1775,52882,52883],{},"添加元素",[103,52885,52886],{},[109,52887],{"alt":29,"src":52888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[103,52890,52891],{},"console.log(arr.push('green'))",[103,52893,52894],{},"输出结果：为新数组的长度",[103,52896,52897],{},[109,52898],{"alt":29,"src":52899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[103,52901,52902],{},"push用的非常多，一定要记住",[1772,52904,52905],{},[1775,52906,52907],{},"删除元素",[103,52909,52910],{},[109,52911],{"alt":29,"src":52912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[103,52914,52915],{},[109,52916],{"alt":29,"src":52917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[103,52919,52920],{},[109,52921],{"alt":29,"src":52922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[19,52924,52926],{"id":52925},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[24,52928,52930],{"className":52272,"code":52929,"language":52274,"meta":29,"style":29},"\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",[31,52931,52932,52947,52963,52967,52976,52994,53018,53040,53054,53062,53069,53081,53092,53096,53100,53107,53119,53134,53147,53166,53183,53198,53210,53222,53234,53238,53242,53253,53263,53275,53287,53299,53310,53314,53318,53330,53334,53348,53352,53356,53367,53381,53393,53407,53411,53420,53429,53433,53442,53446,53455,53460,53465,53478,53506,53511,53516,53541,53546,53550,53555,53560,53575,53579,53584,53614,53626,53642,53658,53672,53677,53684,53688,53693,53706,53714,53722,53726],{"__ignoreMap":29},[34,52933,52934,52937,52941,52944],{"class":36,"line":37},[34,52935,52936],{"class":40},"\u003C!",[34,52938,52940],{"class":52939},"s9eBZ","DOCTYPE",[34,52942,52943],{"class":3617}," html",[34,52945,52946],{"class":40},">\n",[34,52948,52949,52951,52953,52956,52958,52961],{"class":36,"line":165},[34,52950,2701],{"class":40},[34,52952,52274],{"class":52939},[34,52954,52955],{"class":3617}," lang",[34,52957,221],{"class":40},[34,52959,52960],{"class":504},"\"en\"",[34,52962,52946],{"class":40},[34,52964,52965],{"class":36,"line":171},[34,52966,1475],{"emptyLinePlaceholder":1474},[34,52968,52969,52971,52974],{"class":36,"line":182},[34,52970,2701],{"class":40},[34,52972,52973],{"class":52939},"head",[34,52975,52946],{"class":40},[34,52977,52978,52981,52984,52987,52989,52992],{"class":36,"line":188},[34,52979,52980],{"class":40},"    \u003C",[34,52982,52983],{"class":52939},"meta",[34,52985,52986],{"class":3617}," charset",[34,52988,221],{"class":40},[34,52990,52991],{"class":504},"\"UTF-8\"",[34,52993,52946],{"class":40},[34,52995,52996,52998,53000,53003,53005,53008,53011,53013,53016],{"class":36,"line":518},[34,52997,52980],{"class":40},[34,52999,52983],{"class":52939},[34,53001,53002],{"class":3617}," http-equiv",[34,53004,221],{"class":40},[34,53006,53007],{"class":504},"\"X-UA-Compatible\"",[34,53009,53010],{"class":3617}," content",[34,53012,221],{"class":40},[34,53014,53015],{"class":504},"\"IE=edge\"",[34,53017,52946],{"class":40},[34,53019,53020,53022,53024,53026,53028,53031,53033,53035,53038],{"class":36,"line":524},[34,53021,52980],{"class":40},[34,53023,52983],{"class":52939},[34,53025,16566],{"class":3617},[34,53027,221],{"class":40},[34,53029,53030],{"class":504},"\"viewport\"",[34,53032,53010],{"class":3617},[34,53034,221],{"class":40},[34,53036,53037],{"class":504},"\"width=device-width, initial-scale=1.0\"",[34,53039,52946],{"class":40},[34,53041,53042,53044,53047,53050,53052],{"class":36,"line":530},[34,53043,52980],{"class":40},[34,53045,53046],{"class":52939},"title",[34,53048,53049],{"class":40},">Document\u003C\u002F",[34,53051,53046],{"class":52939},[34,53053,52946],{"class":40},[34,53055,53056,53058,53060],{"class":36,"line":624},[34,53057,52980],{"class":40},[34,53059,1711],{"class":52939},[34,53061,52946],{"class":40},[34,53063,53064,53067],{"class":36,"line":630},[34,53065,53066],{"class":52939},"        *",[34,53068,17218],{"class":40},[34,53070,53071,53074,53077,53079],{"class":36,"line":636},[34,53072,53073],{"class":44},"            margin",[34,53075,53076],{"class":40},": ",[34,53078,177],{"class":44},[34,53080,2952],{"class":40},[34,53082,53083,53086,53088,53090],{"class":36,"line":1513},[34,53084,53085],{"class":44},"            padding",[34,53087,53076],{"class":40},[34,53089,177],{"class":44},[34,53091,2952],{"class":40},[34,53093,53094],{"class":36,"line":1519},[34,53095,4182],{"class":40},[34,53097,53098],{"class":36,"line":3283},[34,53099,1475],{"emptyLinePlaceholder":1474},[34,53101,53102,53105],{"class":36,"line":3297},[34,53103,53104],{"class":3617},"        .box",[34,53106,17218],{"class":40},[34,53108,53109,53112,53114,53117],{"class":36,"line":3302},[34,53110,53111],{"class":44},"            display",[34,53113,53076],{"class":40},[34,53115,53116],{"class":44},"flex",[34,53118,2952],{"class":40},[34,53120,53121,53124,53126,53129,53132],{"class":36,"line":3308},[34,53122,53123],{"class":44},"            width",[34,53125,53076],{"class":40},[34,53127,53128],{"class":44},"700",[34,53130,53131],{"class":55},"px",[34,53133,2952],{"class":40},[34,53135,53136,53139,53141,53143,53145],{"class":36,"line":3328},[34,53137,53138],{"class":44},"            height",[34,53140,53076],{"class":40},[34,53142,5626],{"class":44},[34,53144,53131],{"class":55},[34,53146,2952],{"class":40},[34,53148,53149,53152,53154,53156,53158,53161,53164],{"class":36,"line":3333},[34,53150,53151],{"class":44},"            border-left",[34,53153,53076],{"class":40},[34,53155,394],{"class":44},[34,53157,53131],{"class":55},[34,53159,53160],{"class":44}," solid",[34,53162,53163],{"class":44}," pink",[34,53165,2952],{"class":40},[34,53167,53168,53171,53173,53175,53177,53179,53181],{"class":36,"line":3347},[34,53169,53170],{"class":44},"            border-bottom",[34,53172,53076],{"class":40},[34,53174,394],{"class":44},[34,53176,53131],{"class":55},[34,53178,53160],{"class":44},[34,53180,53163],{"class":44},[34,53182,2952],{"class":40},[34,53184,53185,53187,53189,53191,53193,53196],{"class":36,"line":3352},[34,53186,53073],{"class":44},[34,53188,53076],{"class":40},[34,53190,2451],{"class":44},[34,53192,53131],{"class":55},[34,53194,53195],{"class":44}," auto",[34,53197,2952],{"class":40},[34,53199,53200,53203,53205,53208],{"class":36,"line":3381},[34,53201,53202],{"class":44},"            justify-content",[34,53204,53076],{"class":40},[34,53206,53207],{"class":44},"space-around",[34,53209,2952],{"class":40},[34,53211,53212,53215,53217,53220],{"class":36,"line":3386},[34,53213,53214],{"class":44},"            align-items",[34,53216,53076],{"class":40},[34,53218,53219],{"class":44},"flex-end",[34,53221,2952],{"class":40},[34,53223,53224,53227,53229,53232],{"class":36,"line":3403},[34,53225,53226],{"class":44},"            text-align",[34,53228,53076],{"class":40},[34,53230,53231],{"class":44},"center",[34,53233,2952],{"class":40},[34,53235,53236],{"class":36,"line":3408},[34,53237,4182],{"class":40},[34,53239,53240],{"class":36,"line":3413},[34,53241,1475],{"emptyLinePlaceholder":1474},[34,53243,53244,53246,53248,53251],{"class":36,"line":3418},[34,53245,53104],{"class":3617},[34,53247,2751],{"class":55},[34,53249,53250],{"class":52939},"div",[34,53252,17218],{"class":40},[34,53254,53255,53257,53259,53261],{"class":36,"line":3432},[34,53256,53111],{"class":44},[34,53258,53076],{"class":40},[34,53260,53116],{"class":44},[34,53262,2952],{"class":40},[34,53264,53265,53267,53269,53271,53273],{"class":36,"line":3437},[34,53266,53123],{"class":44},[34,53268,53076],{"class":40},[34,53270,2451],{"class":44},[34,53272,53131],{"class":55},[34,53274,2952],{"class":40},[34,53276,53277,53280,53282,53285],{"class":36,"line":4230},[34,53278,53279],{"class":44},"            background-color",[34,53281,53076],{"class":40},[34,53283,53284],{"class":44},"pink",[34,53286,2952],{"class":40},[34,53288,53289,53292,53294,53297],{"class":36,"line":4244},[34,53290,53291],{"class":44},"            flex-direction",[34,53293,53076],{"class":40},[34,53295,53296],{"class":44},"column",[34,53298,2952],{"class":40},[34,53300,53301,53303,53305,53308],{"class":36,"line":4252},[34,53302,53202],{"class":44},[34,53304,53076],{"class":40},[34,53306,53307],{"class":44},"space-between",[34,53309,2952],{"class":40},[34,53311,53312],{"class":36,"line":4257},[34,53313,4182],{"class":40},[34,53315,53316],{"class":36,"line":4263},[34,53317,1475],{"emptyLinePlaceholder":1474},[34,53319,53320,53322,53325,53328],{"class":36,"line":4269},[34,53321,53104],{"class":3617},[34,53323,53324],{"class":52939}," div",[34,53326,53327],{"class":52939}," span",[34,53329,17218],{"class":40},[34,53331,53332],{"class":36,"line":4274},[34,53333,1475],{"emptyLinePlaceholder":1474},[34,53335,53336,53339,53341,53344,53346],{"class":36,"line":9598},[34,53337,53338],{"class":44},"            margin-top",[34,53340,53076],{"class":40},[34,53342,53343],{"class":44},"-20",[34,53345,53131],{"class":55},[34,53347,2952],{"class":40},[34,53349,53350],{"class":36,"line":9622},[34,53351,4182],{"class":40},[34,53353,53354],{"class":36,"line":9627},[34,53355,1475],{"emptyLinePlaceholder":1474},[34,53357,53358,53360,53362,53365],{"class":36,"line":9633},[34,53359,53104],{"class":3617},[34,53361,53324],{"class":52939},[34,53363,53364],{"class":52939}," h4",[34,53366,17218],{"class":40},[34,53368,53369,53372,53374,53377,53379],{"class":36,"line":9660},[34,53370,53371],{"class":44},"            margin-bottom",[34,53373,53076],{"class":40},[34,53375,53376],{"class":44},"-35",[34,53378,53131],{"class":55},[34,53380,2952],{"class":40},[34,53382,53383,53385,53387,53389,53391],{"class":36,"line":9665},[34,53384,53123],{"class":44},[34,53386,53076],{"class":40},[34,53388,2158],{"class":44},[34,53390,53131],{"class":55},[34,53392,2952],{"class":40},[34,53394,53395,53398,53400,53403,53405],{"class":36,"line":9671},[34,53396,53397],{"class":44},"            margin-left",[34,53399,53076],{"class":40},[34,53401,53402],{"class":44},"-10",[34,53404,53131],{"class":55},[34,53406,2952],{"class":40},[34,53408,53409],{"class":36,"line":9683},[34,53410,4182],{"class":40},[34,53412,53413,53416,53418],{"class":36,"line":9695},[34,53414,53415],{"class":40},"    \u003C\u002F",[34,53417,1711],{"class":52939},[34,53419,52946],{"class":40},[34,53421,53422,53425,53427],{"class":36,"line":9707},[34,53423,53424],{"class":40},"\u003C\u002F",[34,53426,52973],{"class":52939},[34,53428,52946],{"class":40},[34,53430,53431],{"class":36,"line":11366},[34,53432,1475],{"emptyLinePlaceholder":1474},[34,53434,53435,53437,53440],{"class":36,"line":11391},[34,53436,2701],{"class":40},[34,53438,53439],{"class":52939},"body",[34,53441,52946],{"class":40},[34,53443,53444],{"class":36,"line":11414},[34,53445,1475],{"emptyLinePlaceholder":1474},[34,53447,53448,53450,53453],{"class":36,"line":11438},[34,53449,52980],{"class":40},[34,53451,53452],{"class":52939},"script",[34,53454,52946],{"class":40},[34,53456,53457],{"class":36,"line":11443},[34,53458,53459],{"class":161},"        \u002F\u002F 1. 四次弹框效果\n",[34,53461,53462],{"class":36,"line":11448},[34,53463,53464],{"class":161},"        \u002F\u002F 声明一个新的数组\n",[34,53466,53467,53470,53473,53475],{"class":36,"line":11453},[34,53468,53469],{"class":55},"        let",[34,53471,53472],{"class":40}," arr ",[34,53474,221],{"class":55},[34,53476,53477],{"class":40}," []\n",[34,53479,53480,53482,53484,53487,53489,53491,53493,53495,53497,53500,53502,53504],{"class":36,"line":11462},[34,53481,5056],{"class":55},[34,53483,3313],{"class":40},[34,53485,53486],{"class":55},"let",[34,53488,11088],{"class":40},[34,53490,221],{"class":55},[34,53492,26764],{"class":44},[34,53494,11095],{"class":40},[34,53496,3246],{"class":55},[34,53498,53499],{"class":44}," 4",[34,53501,4867],{"class":40},[34,53503,3946],{"class":55},[34,53505,14090],{"class":40},[34,53507,53508],{"class":36,"line":11467},[34,53509,53510],{"class":161},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[34,53512,53513],{"class":36,"line":11473},[34,53514,53515],{"class":161},"            \u002F\u002F arr.push(num)\n",[34,53517,53518,53521,53524,53526,53529,53531,53534,53536,53539],{"class":36,"line":11494},[34,53519,53520],{"class":40},"            arr.",[34,53522,53523],{"class":3617},"push",[34,53525,286],{"class":40},[34,53527,53528],{"class":3617},"prompt",[34,53530,286],{"class":40},[34,53532,53533],{"class":504},"`请输入第${",[34,53535,2239],{"class":40},[34,53537,53538],{"class":504},"}季度的数据:`",[34,53540,296],{"class":40},[34,53542,53543],{"class":36,"line":11500},[34,53544,53545],{"class":161},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[34,53547,53548],{"class":36,"line":11514},[34,53549,4182],{"class":40},[34,53551,53552],{"class":36,"line":11520},[34,53553,53554],{"class":161},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[34,53556,53557],{"class":36,"line":11547},[34,53558,53559],{"class":161},"        \u002F\u002F 盒子开头\n",[34,53561,53562,53565,53568,53570,53573],{"class":36,"line":11556},[34,53563,53564],{"class":40},"        document.",[34,53566,53567],{"class":3617},"write",[34,53569,286],{"class":40},[34,53571,53572],{"class":504},"` \u003Cdiv class=\"box\">`",[34,53574,101],{"class":40},[34,53576,53577],{"class":36,"line":11562},[34,53578,1475],{"emptyLinePlaceholder":1474},[34,53580,53581],{"class":36,"line":11570},[34,53582,53583],{"class":161},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[34,53585,53586,53588,53590,53592,53594,53596,53598,53600,53602,53605,53608,53610,53612],{"class":36,"line":11575},[34,53587,5056],{"class":55},[34,53589,3313],{"class":40},[34,53591,53486],{"class":55},[34,53593,11088],{"class":40},[34,53595,221],{"class":55},[34,53597,98],{"class":44},[34,53599,11095],{"class":40},[34,53601,2701],{"class":55},[34,53603,53604],{"class":40}," arr.",[34,53606,53607],{"class":44},"length",[34,53609,4867],{"class":40},[34,53611,3946],{"class":55},[34,53613,14090],{"class":40},[34,53615,53616,53619,53621,53623],{"class":36,"line":18250},[34,53617,53618],{"class":40},"            document.",[34,53620,53567],{"class":3617},[34,53622,286],{"class":40},[34,53624,53625],{"class":504},"`\n",[34,53627,53628,53631,53633,53635,53637,53639],{"class":36,"line":18256},[34,53629,53630],{"class":504},"              \u003Cdiv style=\"height: ${",[34,53632,5533],{"class":40},[34,53634,2681],{"class":504},[34,53636,2239],{"class":40},[34,53638,2731],{"class":504},[34,53640,53641],{"class":504},"}px;\">\n",[34,53643,53644,53647,53649,53651,53653,53655],{"class":36,"line":18279},[34,53645,53646],{"class":504},"                \u003Cspan>${",[34,53648,5533],{"class":40},[34,53650,2681],{"class":504},[34,53652,2239],{"class":40},[34,53654,2731],{"class":504},[34,53656,53657],{"class":504},"}\u003C\u002Fspan>\n",[34,53659,53660,53663,53665,53667,53669],{"class":36,"line":18285},[34,53661,53662],{"class":504},"                \u003Ch4>第${",[34,53664,2239],{"class":40},[34,53666,47205],{"class":55},[34,53668,26764],{"class":44},[34,53670,53671],{"class":504},"}季度\u003C\u002Fh4>\n",[34,53673,53674],{"class":36,"line":18308},[34,53675,53676],{"class":504},"              \u003C\u002Fdiv>          \n",[34,53678,53679,53682],{"class":36,"line":18322},[34,53680,53681],{"class":504},"            `",[34,53683,101],{"class":40},[34,53685,53686],{"class":36,"line":18342},[34,53687,4182],{"class":40},[34,53689,53690],{"class":36,"line":18348},[34,53691,53692],{"class":161},"        \u002F\u002F 盒子结尾\n",[34,53694,53695,53697,53699,53701,53704],{"class":36,"line":18359},[34,53696,53564],{"class":40},[34,53698,53567],{"class":3617},[34,53700,286],{"class":40},[34,53702,53703],{"class":504},"` \u003C\u002Fdiv>`",[34,53705,101],{"class":40},[34,53707,53708,53710,53712],{"class":36,"line":18382},[34,53709,53415],{"class":40},[34,53711,53452],{"class":52939},[34,53713,52946],{"class":40},[34,53715,53716,53718,53720],{"class":36,"line":18404},[34,53717,53424],{"class":40},[34,53719,53439],{"class":52939},[34,53721,52946],{"class":40},[34,53723,53724],{"class":36,"line":18409},[34,53725,1475],{"emptyLinePlaceholder":1474},[34,53727,53728,53730,53732],{"class":36,"line":18415},[34,53729,53424],{"class":40},[34,53731,52274],{"class":52939},[34,53733,52946],{"class":40},[19,53735,53737],{"id":53736},"_284-冒泡排序","2.8.4 冒泡排序",[24,53739,53741],{"className":52272,"code":53740,"language":52274,"meta":29,"style":29},"\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",[31,53742,53743,53753,53767,53771,53779,53794,53814,53826,53834,53838,53846,53854,53886,53919,53956,53961,53980,53985,53998,54013,54029,54033,54038,54042,54052,54061,54069,54073],{"__ignoreMap":29},[34,53744,53745,53747,53749,53751],{"class":36,"line":37},[34,53746,52936],{"class":40},[34,53748,52940],{"class":52939},[34,53750,52943],{"class":3617},[34,53752,52946],{"class":40},[34,53754,53755,53757,53759,53761,53763,53765],{"class":36,"line":165},[34,53756,2701],{"class":40},[34,53758,52274],{"class":52939},[34,53760,52955],{"class":3617},[34,53762,221],{"class":40},[34,53764,52960],{"class":504},[34,53766,52946],{"class":40},[34,53768,53769],{"class":36,"line":171},[34,53770,1475],{"emptyLinePlaceholder":1474},[34,53772,53773,53775,53777],{"class":36,"line":182},[34,53774,2701],{"class":40},[34,53776,52973],{"class":52939},[34,53778,52946],{"class":40},[34,53780,53781,53784,53786,53788,53790,53792],{"class":36,"line":188},[34,53782,53783],{"class":40},"  \u003C",[34,53785,52983],{"class":52939},[34,53787,52986],{"class":3617},[34,53789,221],{"class":40},[34,53791,52991],{"class":504},[34,53793,52946],{"class":40},[34,53795,53796,53798,53800,53802,53804,53806,53808,53810,53812],{"class":36,"line":518},[34,53797,53783],{"class":40},[34,53799,52983],{"class":52939},[34,53801,16566],{"class":3617},[34,53803,221],{"class":40},[34,53805,53030],{"class":504},[34,53807,53010],{"class":3617},[34,53809,221],{"class":40},[34,53811,53037],{"class":504},[34,53813,52946],{"class":40},[34,53815,53816,53818,53820,53822,53824],{"class":36,"line":524},[34,53817,53783],{"class":40},[34,53819,53046],{"class":52939},[34,53821,53049],{"class":40},[34,53823,53046],{"class":52939},[34,53825,52946],{"class":40},[34,53827,53828,53830,53832],{"class":36,"line":530},[34,53829,53424],{"class":40},[34,53831,52973],{"class":52939},[34,53833,52946],{"class":40},[34,53835,53836],{"class":36,"line":624},[34,53837,1475],{"emptyLinePlaceholder":1474},[34,53839,53840,53842,53844],{"class":36,"line":630},[34,53841,2701],{"class":40},[34,53843,53439],{"class":52939},[34,53845,52946],{"class":40},[34,53847,53848,53850,53852],{"class":36,"line":636},[34,53849,53783],{"class":40},[34,53851,53452],{"class":52939},[34,53853,52946],{"class":40},[34,53855,53856,53859,53861,53863,53866,53868,53870,53872,53874,53876,53878,53880,53882,53884],{"class":36,"line":1513},[34,53857,53858],{"class":55},"    let",[34,53860,53472],{"class":40},[34,53862,221],{"class":55},[34,53864,53865],{"class":40}," [",[34,53867,224],{"class":44},[34,53869,48],{"class":40},[34,53871,247],{"class":44},[34,53873,48],{"class":40},[34,53875,337],{"class":44},[34,53877,48],{"class":40},[34,53879,332],{"class":44},[34,53881,48],{"class":40},[34,53883,394],{"class":44},[34,53885,34887],{"class":40},[34,53887,53888,53890,53892,53894,53896,53898,53900,53902,53904,53906,53908,53911,53913,53915,53917],{"class":36,"line":1519},[34,53889,4854],{"class":55},[34,53891,3313],{"class":40},[34,53893,53486],{"class":55},[34,53895,11088],{"class":40},[34,53897,221],{"class":55},[34,53899,98],{"class":44},[34,53901,11095],{"class":40},[34,53903,2701],{"class":55},[34,53905,53604],{"class":40},[34,53907,53607],{"class":44},[34,53909,53910],{"class":55}," -",[34,53912,26764],{"class":44},[34,53914,4867],{"class":40},[34,53916,3946],{"class":55},[34,53918,14090],{"class":40},[34,53920,53921,53924,53926,53928,53930,53932,53934,53936,53938,53940,53942,53944,53946,53948,53950,53952,53954],{"class":36,"line":3283},[34,53922,53923],{"class":55},"      for",[34,53925,3313],{"class":40},[34,53927,53486],{"class":55},[34,53929,11150],{"class":40},[34,53931,221],{"class":55},[34,53933,98],{"class":44},[34,53935,11157],{"class":40},[34,53937,2701],{"class":55},[34,53939,53604],{"class":40},[34,53941,53607],{"class":44},[34,53943,53910],{"class":55},[34,53945,11088],{"class":40},[34,53947,2327],{"class":55},[34,53949,26764],{"class":44},[34,53951,11164],{"class":40},[34,53953,3946],{"class":55},[34,53955,14090],{"class":40},[34,53957,53958],{"class":36,"line":3297},[34,53959,53960],{"class":161},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[34,53962,53963,53965,53968,53970,53973,53975,53977],{"class":36,"line":3302},[34,53964,4150],{"class":55},[34,53966,53967],{"class":40}," (arr[j] ",[34,53969,2751],{"class":55},[34,53971,53972],{"class":40}," arr[j ",[34,53974,2277],{"class":55},[34,53976,26764],{"class":44},[34,53978,53979],{"class":40},"]) {\n",[34,53981,53982],{"class":36,"line":3308},[34,53983,53984],{"class":161},"          \u002F\u002F 交换两个变量\n",[34,53986,53987,53990,53993,53995],{"class":36,"line":3328},[34,53988,53989],{"class":55},"          let",[34,53991,53992],{"class":40}," tmp ",[34,53994,221],{"class":55},[34,53996,53997],{"class":40}," arr[j]\n",[34,53999,54000,54003,54005,54007,54009,54011],{"class":36,"line":3333},[34,54001,54002],{"class":40},"          arr[j] ",[34,54004,221],{"class":55},[34,54006,53972],{"class":40},[34,54008,2277],{"class":55},[34,54010,26764],{"class":44},[34,54012,34887],{"class":40},[34,54014,54015,54018,54020,54022,54024,54026],{"class":36,"line":3347},[34,54016,54017],{"class":40},"          arr[j ",[34,54019,2277],{"class":55},[34,54021,26764],{"class":44},[34,54023,6095],{"class":40},[34,54025,221],{"class":55},[34,54027,54028],{"class":40}," tmp\n",[34,54030,54031],{"class":36,"line":3352},[34,54032,4182],{"class":40},[34,54034,54035],{"class":36,"line":3381},[34,54036,54037],{"class":40},"      }\n",[34,54039,54040],{"class":36,"line":3386},[34,54041,3841],{"class":40},[34,54043,54044,54047,54049],{"class":36,"line":3403},[34,54045,54046],{"class":40},"    document.",[34,54048,53567],{"class":3617},[34,54050,54051],{"class":40},"(arr)\n",[34,54053,54054,54057,54059],{"class":36,"line":3408},[34,54055,54056],{"class":40},"  \u003C\u002F",[34,54058,53452],{"class":52939},[34,54060,52946],{"class":40},[34,54062,54063,54065,54067],{"class":36,"line":3413},[34,54064,53424],{"class":40},[34,54066,53439],{"class":52939},[34,54068,52946],{"class":40},[34,54070,54071],{"class":36,"line":3418},[34,54072,1475],{"emptyLinePlaceholder":1474},[34,54074,54075,54077,54079],{"class":36,"line":3432},[34,54076,53424],{"class":40},[34,54078,52274],{"class":52939},[34,54080,52946],{"class":40},[103,54082,54083],{},[109,54084],{"alt":29,"src":54085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[103,54087,54088],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[103,54090,54091],{},"let arr = [4, 2, 5, 1, 3]",[103,54093,54094],{},"\u002F\u002F 1.升序排列写法",[103,54096,54097],{},"arr.sort(function (a, b) {",[103,54099,54100],{},"return a - b",[103,54102,54103],{},"})",[103,54105,54106],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[103,54108,54109],{},"\u002F\u002F 降序排列写法",[103,54111,54097],{},[103,54113,54114],{},"return b - a",[103,54116,54103],{},[103,54118,54119],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54121,54123],{"id":54122},"_29-函数","2.9 函数",[103,54125,54126],{},[109,54127],{"alt":29,"src":54128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[103,54130,54131],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[103,54133,54134],{},"函数的声明用function",[103,54136,54137],{},"函数里边可以嵌套函数",[19,54139,54141],{"id":54140},"_291-函数传参","2.9.1 函数传参",[103,54143,54144],{},[109,54145],{"alt":29,"src":54146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[103,54148,54149],{},[109,54150],{"alt":29,"src":54151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[2798,54153,54154,54157,54160,54163,54166,54169],{},[1775,54155,54156],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[1775,54158,54159],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[1775,54161,54162],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[1775,54164,54165],{},"开发中尽量保持形参和实参个数一致",[1775,54167,54168],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[1775,54170,54171],{},"形参只在函数中有用，所以不需要进行声明这个变量",[103,54173,54174],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[19,54176,54178],{"id":54177},"_292-函数的返回值","2.9.2 函数的返回值",[103,54180,54181],{},[109,54182],{"alt":29,"src":54183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[103,54185,54186],{},[109,54187],{"alt":29,"src":54188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[2798,54190,54191,54194,54197,54200,54203],{},[1775,54192,54193],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[1775,54195,54196],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[1775,54198,54199],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[1775,54201,54202],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[1775,54204,54205],{},"断点调试:进入函数内部看执行过程F11",[19,54207,54209],{"id":54208},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[24,54211,54213],{"className":52272,"code":54212,"language":52274,"meta":29,"style":29},"    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",[31,54214,54215,54220,54225,54229,54234],{"__ignoreMap":29},[34,54216,54217],{"class":36,"line":37},[34,54218,54219],{"class":40},"    function fn(a, b) {\n",[34,54221,54222],{"class":36,"line":165},[34,54223,54224],{"class":40},"      console.log(a + b);\n",[34,54226,54227],{"class":36,"line":171},[34,54228,3841],{"class":40},[34,54230,54231],{"class":36,"line":182},[34,54232,54233],{"class":40},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[34,54235,54236],{"class":36,"line":188},[34,54237,54238],{"class":40},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[19,54240,54242],{"id":54241},"_294-作用域","2.9.4 作用域",[2798,54244,54245,54251,54256,54259,54262],{},[1775,54246,54247,54248],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[1165,54249,54250],{},"作用域",[1775,54252,54253],{},[1165,54254,54255],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[1775,54257,54258],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[1775,54260,54261],{},"函数内部可以直接所使用全局变量",[1775,54263,54264],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[103,54266,16279],{},[24,54268,54270],{"className":52272,"code":54269,"language":52274,"meta":29,"style":29},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[31,54271,54272,54277,54282,54286,54291,54296,54301],{"__ignoreMap":29},[34,54273,54274],{"class":36,"line":37},[34,54275,54276],{"class":40},"    function fun() {\n",[34,54278,54279],{"class":36,"line":165},[34,54280,54281],{"class":40},"      num = 10\n",[34,54283,54284],{"class":36,"line":171},[34,54285,3841],{"class":40},[34,54287,54288],{"class":36,"line":182},[34,54289,54290],{"class":40},"    fun()\n",[34,54292,54293],{"class":36,"line":188},[34,54294,54295],{"class":40},"    console.log(num)\n",[34,54297,54298],{"class":36,"line":518},[34,54299,54300],{"class":40},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[34,54302,54303],{"class":36,"line":524},[34,54304,54305],{"class":40},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[2798,54307,54308,54311],{},[1775,54309,54310],{},"函数内部的形参可以看做是局部变量",[1775,54312,54313],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[103,54315,54316,54317],{},"变量访问原则： ",[1165,54318,54319],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[19,54321,54323],{"id":54322},"_295-匿名函数","2.9.5 匿名函数",[103,54325,54326],{},"函数可以分为具名函数和匿名函数",[103,54328,54329],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[1772,54331,54332],{},[1775,54333,54334],{},"函数表达式",[103,54336,54337],{},[109,54338],{"alt":29,"src":54339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[103,54341,54342],{},"里边也可以写参数",[103,54344,54345],{},"具名函数调用位置可以随意调整；",[103,54347,54348],{},"匿名函数函数表达式形式只能在声明后才可以使用",[1772,54350,54351],{"start":165},[1775,54352,54353],{},"立即执行函数",[103,54355,54356],{},[109,54357],{"alt":29,"src":54358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[103,54360,54361],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[103,54363,54364],{},"写法：两个小括号，然后在第一个小括号中写function",[103,54366,54367],{},"(function () {})();",[103,54369,54370],{},"不要落下最后的;",[103,54372,54373],{},"立即执行函数必须要加;",[103,54375,54376],{},"分号写前写后都没问题",[103,54378,54379],{},"写前：",[103,54381,54382],{},"(function() {})()",[103,54384,54385],{},";(function () {})();",[103,54387,54388],{},"写后:",[103,54390,54391],{},"(function() {})();",[103,54393,54367],{},[103,54395,54396],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[103,54398,54399],{},"还有一种写法：",[103,54401,54402],{},"(function(){}());",[103,54404,54405],{},"或者:",[103,54407,54408],{},"!function(){}();",[103,54410,54411],{},"立即执行函数有时候也是可以加名字的：",[103,54413,54414],{},"(function flexible(window,document) {}(window,document));",[103,54416,54417],{},"省一些调用方法",[19,54419,54421],{"id":54420},"_296-逻辑中断","2.9.6 逻辑中断!!!",[103,54423,54424],{},[109,54425],{"alt":29,"src":54426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[103,54428,54429],{},"这样就不用非得给x,y初始化了",[103,54431,54432],{},[109,54433],{"alt":29,"src":54434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[103,54436,54437],{},"代码执行时先看左边",[103,54439,54440],{},"例如：console.log(false && 3+5)",[103,54442,54443],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[103,54445,54446],{},"&&都是真时，就返回最后一个真值",[103,54448,54449],{},"console.log(11 && 22)",[103,54451,54452],{},"输出22",[103,54454,54455],{},"逻辑与：遇真则真",[103,54457,16279],{},[103,54459,54460],{},"let age=1",[103,54462,54463],{},"console.log(11 || age++)",[103,54465,54466],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[103,54468,54469],{},"console.log(11 || 22)",[103,54471,54472],{},"||逻辑或遇到真就直接输出，输出结果为11",[103,54474,54475],{},"||如果都是假的话，就取最后一个假的值了",[19,54477,54479],{"id":54478},"_297-转换为boolean型","2.9.7 转换为Boolean型",[103,54481,54482],{},"显示转换：",[103,54484,54485,54488,54489],{},[1165,54486,54487],{},"记忆","： ",[1165,54490,54491],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[103,54493,54494],{},"空字符串为假，其他字符串全为真",[103,54496,54497],{},[109,54498],{"alt":29,"src":54499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[103,54501,54502],{},"隐式转换：",[103,54504,54505],{},[109,54506],{"alt":29,"src":54507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[103,54509,54510],{},"隐式转换:",[103,54512,54513],{},"null+3=3",[103,54515,54516],{},"undefined+3=NaN",[103,54518,54519],{},"null==undefined 输出true,他两个都当0看",[103,54521,54522],{},"null===undefined 输出false",[103,54524,54525],{},"undefined做任何操作都是NaN",[103,54527,54528],{},"NaN不等于NaN，NaN表示计算错误",[14,54530,54532],{"id":54531},"_210-对象","2.10 对象",[19,54534,54536],{"id":54535},"_2101-对象的介绍","2.10.1 对象的介绍",[103,54538,54539],{},"对象也是一种数据类型，里边的数据是无序的",[103,54541,54542],{},"对象由属性和方法组成",[103,54544,54545],{},[109,54546],{"alt":29,"src":54547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[103,54549,54550],{},[109,54551],{"alt":29,"src":54552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[103,54554,54555],{},[109,54556],{"alt":29,"src":54557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[19,54559,54561],{"id":54560},"_2102-对象属性","2.10.2 对象属性",[103,54563,54564],{},[109,54565],{"alt":29,"src":54566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[1772,54568,54569],{},[1775,54570,54571],{},"查询对象",[103,54573,54574],{},"对象名.属性 goods.uname",[103,54576,54577],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[103,54579,54580],{},"不带字符串的属性名也可以使用 对象名['属性名']",[103,54582,54583],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[103,54585,54586],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[1772,54588,54589],{"start":165},[1775,54590,54591],{},"重新赋值",[103,54593,54594],{},"对象名.属性=新值",[1772,54596,54597],{"start":171},[1775,54598,54599],{},"增加新数据",[103,54601,54594],{},[1772,54603,54604],{"start":182},[1775,54605,54606],{},"删除对象中的属性",[103,54608,54609],{},"delete 对象名.属性",[19,54611,54613],{"id":54612},"_2103-对象方法","2.10.3 对象方法",[103,54615,54616],{},[109,54617],{"alt":29,"src":54618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[103,54620,54621],{},"后边跟的是匿名函数",[103,54623,54624],{},"对象外面的叫函数；对象内部的叫方法",[103,54626,54627],{},[109,54628],{"alt":29,"src":54629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[19,54631,54633],{"id":54632},"_2104-遍历对象","2.10.4 遍历对象",[103,54635,54636],{},"理解为加括号的python字典遍历",[103,54638,54639],{},[109,54640],{"alt":29,"src":54641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[103,54643,54644],{},"k是字符串类型",[103,54646,54647],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[24,54649,54651],{"className":52272,"code":54650,"language":52274,"meta":29,"style":29},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[31,54652,54653,54658,54663,54668,54673],{"__ignoreMap":29},[34,54654,54655],{"class":36,"line":37},[34,54656,54657],{"class":40},"   let arr = [1, 2, 3]\n",[34,54659,54660],{"class":36,"line":165},[34,54661,54662],{"class":40},"    for (let k in arr) {\n",[34,54664,54665],{"class":36,"line":171},[34,54666,54667],{"class":40},"      console.log(k)\n",[34,54669,54670],{"class":36,"line":182},[34,54671,54672],{"class":40},"      console.log(arr[k])\n",[34,54674,54675],{"class":36,"line":188},[34,54676,3841],{"class":40},[103,54678,54679],{},[109,54680],{"alt":29,"src":54681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[103,54683,54684],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[103,54686,54687],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[103,54689,54690],{},"for in 得到的k是属性名",[53452,54692,54693],{},"\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",[103,54695,54696],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[19,54698,54700],{"id":54699},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[103,54702,54703],{},"数组中放对象信息",[24,54705,54709],{"className":54706,"code":54707,"language":54708,"meta":29,"style":29},"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",[31,54710,54711,54719,54724,54729,54734,54739,54744,54749,54754,54759,54764,54769,54774,54778,54782],{"__ignoreMap":29},[34,54712,54713,54715,54717],{"class":36,"line":37},[34,54714,2701],{"class":40},[34,54716,53452],{"class":52939},[34,54718,52946],{"class":40},[34,54720,54721],{"class":36,"line":165},[34,54722,54723],{"class":40},"    let students = [\n",[34,54725,54726],{"class":36,"line":171},[34,54727,54728],{"class":40},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[34,54730,54731],{"class":36,"line":182},[34,54732,54733],{"class":40},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[34,54735,54736],{"class":36,"line":188},[34,54737,54738],{"class":40},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[34,54740,54741],{"class":36,"line":518},[34,54742,54743],{"class":40},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[34,54745,54746],{"class":36,"line":524},[34,54747,54748],{"class":40},"    ]\n",[34,54750,54751],{"class":36,"line":530},[34,54752,54753],{"class":40},"    for (let i = 0; i \u003C students.length; i++) {\n",[34,54755,54756],{"class":36,"line":624},[34,54757,54758],{"class":40},"      for (let k in students[i]) {\n",[34,54760,54761],{"class":36,"line":630},[34,54762,54763],{"class":40},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[34,54765,54766],{"class":36,"line":636},[34,54767,54768],{"class":40},"        \u002F\u002F输出每个人的名字：\n",[34,54770,54771],{"class":36,"line":1513},[34,54772,54773],{"class":40},"        \u002F\u002Fconsole.log(students[i].name)\n",[34,54775,54776],{"class":36,"line":1519},[34,54777,54037],{"class":40},[34,54779,54780],{"class":36,"line":3283},[34,54781,3841],{"class":40},[34,54783,54784,54786,54788],{"class":36,"line":3297},[34,54785,54056],{"class":40},[34,54787,53452],{"class":52939},[34,54789,52946],{"class":40},[19,54791,54793],{"id":54792},"_2106-内置对象","2.10.6 内置对象",[103,54795,54796],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[1772,54798,54799],{},[1775,54800,54801],{},"数学对象Math",[103,54803,54804],{},[109,54805],{"alt":29,"src":54806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[103,54808,54809],{},[236,54810,54813],{"href":54811,"rel":54812},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25510],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[103,54815,54816],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[103,54818,54819],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[103,54821,54822],{},"数组不可以使用Math中的max,min来求最大值与最小值",[103,54824,54825],{},"null是一个空对象，可以认为：null类似于let obj={}",[103,54827,54828],{},"null属于对象数据类型",[1772,54830,54831],{"start":165},[1775,54832,54833],{},"生成任意范围随机数",[103,54835,54836],{},[109,54837],{"alt":29,"src":54838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[103,54840,54841],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[103,54843,54844],{},"乘以几就取不到几",[103,54846,54847],{},"取数组中的随机元素：",[103,54849,54850],{},"let arr = ['red', 'green', 'blue']",[103,54852,54853],{},"let random = Math.floor(Math.random() * arr.length)",[103,54855,54856],{},"console.log(arr[random])",[103,54858,54859],{},"这个函数得到的是全闭区间",[103,54861,54862],{},"function getRandom(N, M) {",[103,54864,54865],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[103,54867,2737],{},[103,54869,54870],{},"console.log(getRandom(4, 8))",[19,54872,54874],{"id":54873},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[103,54876,54877],{},[109,54878],{"alt":29,"src":54879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[103,54881,54882],{},[109,54883],{"alt":29,"src":54884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[103,54886,54887],{},[109,54888],{"alt":29,"src":54889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[103,54891,54892],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[103,54894,54895],{},[109,54896],{"alt":29,"src":54897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[103,54899,54900],{},[109,54901],{"alt":29,"src":54902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[103,54904,54905],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[103,54907,54908],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[103,54910,54911],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1711,54913,54914],{},"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":29,"searchDepth":165,"depth":165,"links":54916},[54917,54925,54926,54927,54928,54929,54936,54940,54946,54955],{"id":52107,"depth":165,"text":52108,"children":54918},[54919,54920,54921,54922,54923,54924],{"id":52111,"depth":171,"text":52112},{"id":52128,"depth":171,"text":52129},{"id":52168,"depth":171,"text":52169},{"id":52180,"depth":171,"text":52181},{"id":52189,"depth":171,"text":52190},{"id":52237,"depth":171,"text":52238},{"id":52247,"depth":165,"text":52248},{"id":52335,"depth":165,"text":52336},{"id":52358,"depth":165,"text":52359},{"id":52370,"depth":165,"text":52371},{"id":52557,"depth":165,"text":52558,"children":54930},[54931,54932,54933,54934,54935],{"id":52561,"depth":171,"text":52562},{"id":52570,"depth":171,"text":52571},{"id":52598,"depth":171,"text":52599},{"id":52634,"depth":171,"text":52635},{"id":52659,"depth":171,"text":52660},{"id":52671,"depth":165,"text":52672,"children":54937},[54938,54939],{"id":52692,"depth":171,"text":52693},{"id":52786,"depth":171,"text":52787},{"id":52844,"depth":165,"text":52845,"children":54941},[54942,54943,54944,54945],{"id":52848,"depth":171,"text":52849},{"id":52872,"depth":171,"text":52873},{"id":52925,"depth":171,"text":52926},{"id":53736,"depth":171,"text":53737},{"id":54122,"depth":165,"text":54123,"children":54947},[54948,54949,54950,54951,54952,54953,54954],{"id":54140,"depth":171,"text":54141},{"id":54177,"depth":171,"text":54178},{"id":54208,"depth":171,"text":54209},{"id":54241,"depth":171,"text":54242},{"id":54322,"depth":171,"text":54323},{"id":54420,"depth":171,"text":54421},{"id":54478,"depth":171,"text":54479},{"id":54531,"depth":165,"text":54532,"children":54956},[54957,54958,54959,54960,54961,54962,54963],{"id":54535,"depth":171,"text":54536},{"id":54560,"depth":171,"text":54561},{"id":54612,"depth":171,"text":54613},{"id":54632,"depth":171,"text":54633},{"id":54699,"depth":171,"text":54700},{"id":54792,"depth":171,"text":54793},{"id":54873,"depth":171,"text":54874},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52099,"description":1744},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54970,"title":54971,"body":54972,"description":1744,"extension":1745,"meta":78311,"navigation":1474,"path":78312,"seo":78313,"stem":78314,"__hash__":78315},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54973,"toc":78251},[54974,54977,54980,54983,54988,54991,54994,54997,55001,55005,55011,55016,55024,55031,55034,55038,55043,55048,55053,55056,55059,55070,55073,55077,55080,55083,55088,55093,55098,55101,55104,55196,55199,55204,55207,55212,55215,55218,55223,55226,55231,55235,55238,55252,55256,55261,55264,55267,55271,55276,55279,55283,55287,55292,55296,55301,55304,55307,55310,55313,55316,55319,55324,55329,55357,55360,55363,55366,55371,55374,55377,55380,55383,55387,55416,55420,55425,55430,55433,55436,55439,55444,55559,55564,55569,55730,55735,55738,55742,55747,55752,55755,55758,55761,55764,55767,55770,55773,55776,55779,55782,55785,55788,55791,55794,55796,55799,55802,55805,55810,55814,56211,56214,56220,56224,56229,57511,57516,57519,57522,57525,57530,58726,58730,58736,58741,58744,58749,58754,58758,58762,58767,58770,58775,58778,58781,58785,59693,59696,59700,59921,59924,59927,59930,60156,60159,60383,60386,60390,60395,60398,60401,60629,60632,60665,60668,60672,60677,60681,60684,60687,60690,60693,60696,60699,60702,60707,61987,61991,61994,63087,63091,63094,63097,63100,63103,63107,63110,63113,63115,63123,64604,64608,64611,64614,64617,64826,64829,64833,64837,64842,64847,64850,64853,64858,64862,64867,64870,64979,64983,64988,64993,64996,64999,65003,65008,65013,65018,65021,65024,65035,65038,65043,65048,65051,65054,65127,65131,65136,65139,65141,65152,65156,65161,66487,66490,66493,66496,66498,66501,66504,66507,66510,66513,66516,66519,66522,66525,66528,66531,66534,66536,66538,66541,66545,67639,67642,67645,67661,67675,67678,67683,67689,67694,67698,67702,67707,67711,67716,68158,68163,68166,68170,68175,68178,68181,68185,68190,68194,68199,68204,68208,68213,68218,68221,68226,68231,68235,68240,68245,68349,68352,68356,68361,68727,68730,68733,68736,68739,68742,68745,68748,68751,70047,70051,70056,70061,70064,70067,70070,70073,70075,70080,70085,70088,70092,70097,70102,70107,70110,70113,70116,70119,70122,70127,70130,70134,70139,70144,70148,70153,70156,70161,70164,70167,70170,70173,70176,70181,70184,70187,70190,70193,70197,70202,70205,70209,70214,70217,70220,70224,70253,70256,70260,70264,70269,70273,70278,70281,70284,70287,70290,70293,70296,70299,70302,70305,70308,70311,70314,70317,70320,70324,70329,70334,70337,70341,70345,70350,70353,70357,70360,70363,70368,70373,70378,70383,70388,70391,70394,70399,70404,70408,70413,70416,70421,70424,70427,70430,70433,70438,70441,70450,70454,70459,70462,70465,70469,70472,70477,70481,70484,70490,70496,70500,70526,70529,72090,72093,72589,72592,72597,72602,72607,72611,72616,72621,72626,72630,72635,72638,72641,72644,72647,72651,72654,72659,72662,72667,72671,72676,72679,72684,72689,72694,72697,72700,72705,72710,72713,72716,72720,72723,72728,72731,72736,72739,72744,72749,72754,72757,72762,72827,72830,72841,72845,72850,73022,73026,73031,73034,73037,73040,73044,73055,73059,73062,73067,73072,73075,73078,73081,73084,73087,73089,73092,73095,73098,73103,73106,73111,73114,73118,73121,73124,73138,73142,73145,73200,73205,73208,73211,73216,73219,73223,73228,73358,73362,73367,73372,73453,73458,73462,73465,73470,73475,73481,73484,73487,73490,73494,73499,73502,73513,73517,73534,76581,76585,76588,76591,76594,76615,76619,76622,76630,76633,76638,76641,76644,76649,76654,76658,76679,76683,76688,76691,76694,76697,76700,76704,76709,76712,76716,76721,76724,76729,76732,76737,76740,76745,77947,77951,77956,77959,77964,78248],[10,54975,54971],{"id":54976},"_3web-apis",[103,54978,54979],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[103,54981,54982],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[103,54984,54985],{},[109,54986],{"alt":29,"src":54987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[103,54989,54990],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[103,54992,54993],{},"建议数组和对象使用 const 来声明",[103,54995,54996],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54998,55000],{"id":54999},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[19,55002,55004],{"id":55003},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[103,55006,55007,55010],{},[31,55008,55009],{},"document"," = HTML 文件解析后的对象化表示；",[103,55012,55013,55015],{},[31,55014,55009],{}," ≠ HTML 文件本身",[103,55017,55018,55023],{},[1165,55019,55020],{},[31,55021,55022],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[103,55025,55026,55030],{},[1165,55027,55028],{},[31,55029,55009],{}," ：容器里的内容，代表当前加载的网页（DOM）",[103,55032,55033],{},"document实际上为window.document的简写",[19,55035,55037],{"id":55036},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[103,55039,55040],{},[109,55041],{"alt":29,"src":55042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[103,55044,55045],{},[109,55046],{"alt":29,"src":55047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[103,55049,55050],{},[109,55051],{"alt":29,"src":55052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[103,55054,55055],{},"console.dir()",[103,55057,55058],{},"dir用来打印对象",[2798,55060,55061,55064,55067],{},[1775,55062,55063],{},"任何一个标签，都是一个对象",[1775,55065,55066],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[1775,55068,55069],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[103,55071,55072],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[19,55074,55076],{"id":55075},"_312-获取dom对象","3.1.2 获取DoM对象",[103,55078,55079],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[103,55081,55082],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[103,55084,55085],{},[1165,55086,55087],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[1772,55089,55090],{},[1775,55091,55092],{},"利用CSS选择器来获取标签元素",[103,55094,55095],{},[109,55096],{"alt":29,"src":55097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[103,55099,55100],{},"里边的选择器必须必须加引号！！！",[103,55102,55103],{},"只选择第一个元素",[24,55105,55107],{"className":54706,"code":55106,"language":54708,"meta":29,"style":29},"\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",[31,55108,55109,55117,55138,55157,55165,55170,55175,55180,55188],{"__ignoreMap":29},[34,55110,55111,55113,55115],{"class":36,"line":37},[34,55112,2701],{"class":40},[34,55114,53439],{"class":52939},[34,55116,52946],{"class":40},[34,55118,55119,55121,55123,55126,55128,55131,55134,55136],{"class":36,"line":165},[34,55120,53783],{"class":40},[34,55122,53250],{"class":52939},[34,55124,55125],{"class":3617}," class",[34,55127,221],{"class":40},[34,55129,55130],{"class":504},"\"box\"",[34,55132,55133],{"class":40},">123\u003C\u002F",[34,55135,53250],{"class":52939},[34,55137,52946],{"class":40},[34,55139,55140,55142,55144,55146,55148,55150,55153,55155],{"class":36,"line":171},[34,55141,53783],{"class":40},[34,55143,53250],{"class":52939},[34,55145,55125],{"class":3617},[34,55147,221],{"class":40},[34,55149,55130],{"class":504},[34,55151,55152],{"class":40},">456\u003C\u002F",[34,55154,53250],{"class":52939},[34,55156,52946],{"class":40},[34,55158,55159,55161,55163],{"class":36,"line":182},[34,55160,53783],{"class":40},[34,55162,53452],{"class":52939},[34,55164,52946],{"class":40},[34,55166,55167],{"class":36,"line":188},[34,55168,55169],{"class":40},"    \u002F\u002F 1.获取匹配的第一个元素\n",[34,55171,55172],{"class":36,"line":518},[34,55173,55174],{"class":40},"    const box = document.querySelector('div')\n",[34,55176,55177],{"class":36,"line":524},[34,55178,55179],{"class":40},"    console.dir(box)\n",[34,55181,55182,55184,55186],{"class":36,"line":530},[34,55183,54056],{"class":40},[34,55185,53452],{"class":52939},[34,55187,52946],{"class":40},[34,55189,55190,55192,55194],{"class":36,"line":624},[34,55191,53424],{"class":40},[34,55193,53439],{"class":52939},[34,55195,52946],{"class":40},[103,55197,55198],{},"只选123，不选456",[103,55200,55201],{},[109,55202],{"alt":29,"src":55203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[103,55205,55206],{},"返回的是一个数组的集合，不能对其进行直接修改",[103,55208,55209],{},[109,55210],{"alt":29,"src":55211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[103,55213,55214],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[103,55216,55217],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[1772,55219,55220],{"start":165},[1775,55221,55222],{},"其他方法来获取标签元素",[103,55224,55225],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[103,55227,55228],{},[109,55229],{"alt":29,"src":55230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[19,55232,55234],{"id":55233},"_313-操作元素的内容","3.1.3 操作元素的内容",[103,55236,55237],{},"设置修改DOM元素内容有两种方式：",[2798,55239,55240,55243,55246,55249],{},[1775,55241,55242],{},"元素.innerText=''",[1775,55244,55245],{},"元素.innerHTML=''",[1775,55247,55248],{},"不写字符串输出数字也是可以的",[1775,55250,55251],{},"元素.innerHtml=1",[1353,55253,55255],{"id":55254},"_3131-innertext","3.1.3.1 innerText",[103,55257,55258],{},[109,55259],{"alt":29,"src":55260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[103,55262,55263],{},"思路：实现了修改盒子中的内容！",[103,55265,55266],{},"它只显示纯文本，不解析标签",[1353,55268,55270],{"id":55269},"_3132-innerhtml","3.1.3.2 innerHTML",[103,55272,55273],{},[109,55274],{"alt":29,"src":55275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[103,55277,55278],{},"相比于innerText，他的强大之处在于可以解析标签",[19,55280,55282],{"id":55281},"_314-操作元素属性","3.1.4 操作元素属性",[1353,55284,55286],{"id":55285},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[103,55288,55289],{},[109,55290],{"alt":29,"src":55291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[1353,55293,55295],{"id":55294},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[103,55297,55298],{},[109,55299],{"alt":29,"src":55300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[103,55302,55303],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[103,55305,55306],{},"div.style.backgroundColor = 'hotpink'",[103,55308,55309],{},"如果按照css的写法，-表示减，就会出错",[103,55311,55312],{},"body元素不需要再获取，直接用就行！！！！！！",[103,55314,55315],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[103,55317,55318],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[103,55320,55321],{},[109,55322],{"alt":29,"src":55323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[103,55325,55326],{},[109,55327],{"alt":29,"src":55328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[1772,55330,55331,55334,55337,55340,55343,55346],{},[1775,55332,55333],{},"className这个方式就是修改很多样式的时候来使用的！",[1775,55335,55336],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[1775,55338,55339],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[1775,55341,55342],{},"className为属性名，如果还用class的话就导致与关键字冲突",[1775,55344,55345],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[1775,55347,55348,55349,55354],{},"解析标签的时候就变为了",[53250,55350],{"className":55351},[55352,55353],"nav","box",[55355,55356],"br",{},[103,55358,55359],{},"例子：",[53250,55361],{"className":55362},[55352],[53452,55364,55365],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[103,55367,55368],{},[109,55369],{"alt":29,"src":55370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[103,55372,55373],{},"追加和删除类名用classList",[103,55375,55376],{},"常用于类似于开关的操作",[103,55378,55379],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[103,55381,55382],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[1353,55384,55386],{"id":55385},"_3143-牢记点","3.1.4.3 牢记点",[1772,55388,55389,55392,55395,55398,55401,55404,55407,55410,55413],{},[1775,55390,55391],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[1775,55393,55394],{},"使用style属性操作css时不要忘记引号",[1775,55396,55397],{},"使用className或者classList时也不要忘记引号",[1775,55399,55400],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[1775,55402,55403],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[1775,55405,55406],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[1775,55408,55409],{},"若： let arr=['1','2',3] arr[0]=1",[1775,55411,55412],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[1775,55414,55415],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[19,55417,55419],{"id":55418},"_315-操作表单元素","3.1.5 操作表单元素",[1772,55421,55422],{},[1775,55423,55424],{},"天生的属性",[103,55426,55427],{},[109,55428],{"alt":29,"src":55429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[103,55431,55432],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[103,55434,55435],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[103,55437,55438],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[103,55440,55441],{},[109,55442],{"alt":29,"src":55443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[24,55445,55447],{"className":52272,"code":55446,"language":52274,"meta":29,"style":29},"在复选框中如果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",[31,55448,55449,55454,55486,55491,55496,55501,55506,55510,55515,55520,55537,55549,55554],{"__ignoreMap":29},[34,55450,55451],{"class":36,"line":37},[34,55452,55453],{"class":40},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[34,55455,55456,55458,55461,55464,55466,55469,55471,55473,55475,55477,55479,55481,55484],{"class":36,"line":165},[34,55457,2701],{"class":40},[34,55459,55460],{"class":52939},"input",[34,55462,55463],{"class":3617}," type",[34,55465,221],{"class":40},[34,55467,55468],{"class":504},"\"checkbox\"",[34,55470,16566],{"class":3617},[34,55472,221],{"class":40},[34,55474,9302],{"class":504},[34,55476,16605],{"class":3617},[34,55478,221],{"class":40},[34,55480,9302],{"class":504},[34,55482,55483],{"class":3617}," checked",[34,55485,52946],{"class":40},[34,55487,55488],{"class":36,"line":171},[34,55489,55490],{"class":40},"不选的话：\n",[34,55492,55493],{"class":36,"line":182},[34,55494,55495],{"class":40},"const input = document.querySelector('input')\n",[34,55497,55498],{"class":36,"line":188},[34,55499,55500],{"class":40},"input.checked=false\n",[34,55502,55503],{"class":36,"line":518},[34,55504,55505],{"class":40},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[34,55507,55508],{"class":36,"line":524},[34,55509,1475],{"emptyLinePlaceholder":1474},[34,55511,55512],{"class":36,"line":530},[34,55513,55514],{"class":40},"禁用按钮：\n",[34,55516,55517],{"class":36,"line":624},[34,55518,55519],{"class":40},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[34,55521,55522,55524,55527,55530,55533,55535],{"class":36,"line":630},[34,55523,2701],{"class":40},[34,55525,55526],{"class":52939},"button",[34,55528,55529],{"class":3617}," disabled",[34,55531,55532],{"class":40},">点击\u003C\u002F",[34,55534,55526],{"class":52939},[34,55536,52946],{"class":40},[34,55538,55539,55541,55543,55545,55547],{"class":36,"line":636},[34,55540,2701],{"class":40},[34,55542,55526],{"class":52939},[34,55544,55532],{"class":40},[34,55546,55526],{"class":52939},[34,55548,52946],{"class":40},[34,55550,55551],{"class":36,"line":1513},[34,55552,55553],{"class":40},"const bt = document.querySelector('button')\n",[34,55555,55556],{"class":36,"line":1519},[34,55557,55558],{"class":40},"bt.disabled = false\n",[1772,55560,55561],{"start":165},[1775,55562,55563],{},"自定义属性",[103,55565,55566],{},[109,55567],{"alt":29,"src":55568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[24,55570,55572],{"className":54706,"code":55571,"language":54708,"meta":29,"style":29},"\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",[31,55573,55574,55582,55610,55629,55648,55667,55686,55694,55699,55704,55709,55714,55722],{"__ignoreMap":29},[34,55575,55576,55578,55580],{"class":36,"line":37},[34,55577,2701],{"class":40},[34,55579,53439],{"class":52939},[34,55581,52946],{"class":40},[34,55583,55584,55586,55588,55591,55593,55595,55598,55600,55603,55606,55608],{"class":36,"line":165},[34,55585,53783],{"class":40},[34,55587,53250],{"class":52939},[34,55589,55590],{"class":3617}," data-id",[34,55592,221],{"class":40},[34,55594,5331],{"class":504},[34,55596,55597],{"class":3617}," data-spm",[34,55599,221],{"class":40},[34,55601,55602],{"class":504},"\"我不知道\"",[34,55604,55605],{"class":40},">1\u003C\u002F",[34,55607,53250],{"class":52939},[34,55609,52946],{"class":40},[34,55611,55612,55614,55616,55618,55620,55622,55625,55627],{"class":36,"line":171},[34,55613,53783],{"class":40},[34,55615,53250],{"class":52939},[34,55617,55590],{"class":3617},[34,55619,221],{"class":40},[34,55621,5354],{"class":504},[34,55623,55624],{"class":40},">2\u003C\u002F",[34,55626,53250],{"class":52939},[34,55628,52946],{"class":40},[34,55630,55631,55633,55635,55637,55639,55641,55644,55646],{"class":36,"line":182},[34,55632,53783],{"class":40},[34,55634,53250],{"class":52939},[34,55636,55590],{"class":3617},[34,55638,221],{"class":40},[34,55640,5367],{"class":504},[34,55642,55643],{"class":40},">3\u003C\u002F",[34,55645,53250],{"class":52939},[34,55647,52946],{"class":40},[34,55649,55650,55652,55654,55656,55658,55660,55663,55665],{"class":36,"line":188},[34,55651,53783],{"class":40},[34,55653,53250],{"class":52939},[34,55655,55590],{"class":3617},[34,55657,221],{"class":40},[34,55659,5380],{"class":504},[34,55661,55662],{"class":40},">4\u003C\u002F",[34,55664,53250],{"class":52939},[34,55666,52946],{"class":40},[34,55668,55669,55671,55673,55675,55677,55679,55682,55684],{"class":36,"line":518},[34,55670,53783],{"class":40},[34,55672,53250],{"class":52939},[34,55674,55590],{"class":3617},[34,55676,221],{"class":40},[34,55678,5401],{"class":504},[34,55680,55681],{"class":40},">5\u003C\u002F",[34,55683,53250],{"class":52939},[34,55685,52946],{"class":40},[34,55687,55688,55690,55692],{"class":36,"line":524},[34,55689,53783],{"class":40},[34,55691,53452],{"class":52939},[34,55693,52946],{"class":40},[34,55695,55696],{"class":36,"line":530},[34,55697,55698],{"class":40},"    const one = document.querySelector('div')\n",[34,55700,55701],{"class":36,"line":624},[34,55702,55703],{"class":40},"    console.log(one.dataset)\n",[34,55705,55706],{"class":36,"line":630},[34,55707,55708],{"class":40},"    console.log(one.dataset.id)\n",[34,55710,55711],{"class":36,"line":636},[34,55712,55713],{"class":40},"    console.log(one.dataset.spm)\n",[34,55715,55716,55718,55720],{"class":36,"line":1513},[34,55717,54056],{"class":40},[34,55719,53452],{"class":52939},[34,55721,52946],{"class":40},[34,55723,55724,55726,55728],{"class":36,"line":1519},[34,55725,53424],{"class":40},[34,55727,53439],{"class":52939},[34,55729,52946],{"class":40},[103,55731,55732],{},[109,55733],{"alt":29,"src":55734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[103,55736,55737],{},"document.querySelector选择的是第一个对象（元素）",[19,55739,55741],{"id":55740},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[103,55743,55744],{},[109,55745],{"alt":29,"src":55746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[103,55748,55749],{},[109,55750],{"alt":29,"src":55751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[103,55753,55754],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53452,55756,55757],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[103,55759,55760],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53452,55762,55763],{},"\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",[103,55765,55766],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[103,55768,55769],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[103,55771,55772],{},"单位为毫秒！！！",[103,55774,55775],{},"可以搭配匿名函数来用！！！",[103,55777,55778],{},"setInterval(function () {",[103,55780,55781],{},"alert('两秒执行一次')",[103,55783,55784],{},"}, 2000)",[103,55786,55787],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[103,55789,55790],{},"function fn() {",[103,55792,55793],{},"document.write(1)",[103,55795,2737],{},[103,55797,55798],{},"setInterval(fn, 1000)",[103,55800,55801],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[103,55803,55804],{},"setInterval('fn()', 1000)",[103,55806,55807],{},[109,55808],{"alt":29,"src":55809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[1353,55811,55813],{"id":55812},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[24,55815,55817],{"className":52272,"code":55816,"language":52274,"meta":29,"style":29},"\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",[31,55818,55819,55829,55843,55847,55855,55869,55889,55901,55909,55913,55921,55958,55963,55968,55973,55981,55989,56011,56019,56024,56046,56051,56056,56067,56072,56092,56100,56115,56130,56141,56146,56156,56166,56170,56179,56183,56191,56199,56203],{"__ignoreMap":29},[34,55820,55821,55823,55825,55827],{"class":36,"line":37},[34,55822,52936],{"class":40},[34,55824,52940],{"class":52939},[34,55826,52943],{"class":3617},[34,55828,52946],{"class":40},[34,55830,55831,55833,55835,55837,55839,55841],{"class":36,"line":165},[34,55832,2701],{"class":40},[34,55834,52274],{"class":52939},[34,55836,52955],{"class":3617},[34,55838,221],{"class":40},[34,55840,52960],{"class":504},[34,55842,52946],{"class":40},[34,55844,55845],{"class":36,"line":171},[34,55846,1475],{"emptyLinePlaceholder":1474},[34,55848,55849,55851,55853],{"class":36,"line":182},[34,55850,2701],{"class":40},[34,55852,52973],{"class":52939},[34,55854,52946],{"class":40},[34,55856,55857,55859,55861,55863,55865,55867],{"class":36,"line":188},[34,55858,53783],{"class":40},[34,55860,52983],{"class":52939},[34,55862,52986],{"class":3617},[34,55864,221],{"class":40},[34,55866,52991],{"class":504},[34,55868,52946],{"class":40},[34,55870,55871,55873,55875,55877,55879,55881,55883,55885,55887],{"class":36,"line":518},[34,55872,53783],{"class":40},[34,55874,52983],{"class":52939},[34,55876,16566],{"class":3617},[34,55878,221],{"class":40},[34,55880,53030],{"class":504},[34,55882,53010],{"class":3617},[34,55884,221],{"class":40},[34,55886,53037],{"class":504},[34,55888,52946],{"class":40},[34,55890,55891,55893,55895,55897,55899],{"class":36,"line":524},[34,55892,53783],{"class":40},[34,55894,53046],{"class":52939},[34,55896,53049],{"class":40},[34,55898,53046],{"class":52939},[34,55900,52946],{"class":40},[34,55902,55903,55905,55907],{"class":36,"line":530},[34,55904,53424],{"class":40},[34,55906,52973],{"class":52939},[34,55908,52946],{"class":40},[34,55910,55911],{"class":36,"line":624},[34,55912,1475],{"emptyLinePlaceholder":1474},[34,55914,55915,55917,55919],{"class":36,"line":630},[34,55916,2701],{"class":40},[34,55918,53439],{"class":52939},[34,55920,52946],{"class":40},[34,55922,55923,55925,55928,55930,55932,55934,55936,55938,55940,55943,55945,55948,55951,55953,55956],{"class":36,"line":636},[34,55924,53783],{"class":40},[34,55926,55927],{"class":52939},"textarea",[34,55929,16566],{"class":3617},[34,55931,221],{"class":40},[34,55933,9302],{"class":504},[34,55935,16605],{"class":3617},[34,55937,221],{"class":40},[34,55939,9302],{"class":504},[34,55941,55942],{"class":3617}," cols",[34,55944,221],{"class":40},[34,55946,55947],{"class":504},"\"30\"",[34,55949,55950],{"class":3617}," rows",[34,55952,221],{"class":40},[34,55954,55955],{"class":504},"\"10\"",[34,55957,52946],{"class":40},[34,55959,55960],{"class":36,"line":1513},[34,55961,55962],{"class":40},"        用户注册协议\n",[34,55964,55965],{"class":36,"line":1519},[34,55966,55967],{"class":40},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[34,55969,55970],{"class":36,"line":3283},[34,55971,55972],{"class":40},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[34,55974,55975,55977,55979],{"class":36,"line":3297},[34,55976,53415],{"class":40},[34,55978,55927],{"class":52939},[34,55980,52946],{"class":40},[34,55982,55983,55985,55987],{"class":36,"line":3302},[34,55984,53783],{"class":40},[34,55986,55355],{"class":52939},[34,55988,52946],{"class":40},[34,55990,55991,55993,55995,55997,55999,56002,56004,56007,56009],{"class":36,"line":3308},[34,55992,53783],{"class":40},[34,55994,55526],{"class":52939},[34,55996,55125],{"class":3617},[34,55998,221],{"class":40},[34,56000,56001],{"class":504},"\"btn\"",[34,56003,55529],{"class":3617},[34,56005,56006],{"class":40},">我已经阅读用户协议(5)\u003C\u002F",[34,56008,55526],{"class":52939},[34,56010,52946],{"class":40},[34,56012,56013,56015,56017],{"class":36,"line":3328},[34,56014,53783],{"class":40},[34,56016,53452],{"class":52939},[34,56018,52946],{"class":40},[34,56020,56021],{"class":36,"line":3333},[34,56022,56023],{"class":161},"    \u002F\u002F 1. 获取元素\n",[34,56025,56026,56028,56031,56033,56036,56039,56041,56044],{"class":36,"line":3347},[34,56027,12871],{"class":55},[34,56029,56030],{"class":44}," btn",[34,56032,56],{"class":55},[34,56034,56035],{"class":40}," document.",[34,56037,56038],{"class":3617},"querySelector",[34,56040,286],{"class":40},[34,56042,56043],{"class":504},"'.btn'",[34,56045,101],{"class":40},[34,56047,56048],{"class":36,"line":3352},[34,56049,56050],{"class":161},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[34,56052,56053],{"class":36,"line":3381},[34,56054,56055],{"class":161},"    \u002F\u002F 2. 倒计时\n",[34,56057,56058,56060,56062,56064],{"class":36,"line":3386},[34,56059,53858],{"class":55},[34,56061,11088],{"class":40},[34,56063,221],{"class":55},[34,56065,56066],{"class":44}," 5\n",[34,56068,56069],{"class":36,"line":3403},[34,56070,56071],{"class":161},"    \u002F\u002F 2.1 开启定时器\n",[34,56073,56074,56076,56079,56081,56084,56086,56089],{"class":36,"line":3408},[34,56075,53858],{"class":55},[34,56077,56078],{"class":40}," n ",[34,56080,221],{"class":55},[34,56082,56083],{"class":3617}," setInterval",[34,56085,286],{"class":40},[34,56087,56088],{"class":55},"function",[34,56090,56091],{"class":40}," () {\n",[34,56093,56094,56097],{"class":36,"line":3413},[34,56095,56096],{"class":40},"      i",[34,56098,56099],{"class":55},"--\n",[34,56101,56102,56105,56107,56110,56112],{"class":36,"line":3418},[34,56103,56104],{"class":40},"      btn.innerHTML ",[34,56106,221],{"class":55},[34,56108,56109],{"class":504}," `我已经阅读用户协议(${",[34,56111,2239],{"class":40},[34,56113,56114],{"class":504},"})`\n",[34,56116,56117,56120,56123,56126,56128],{"class":36,"line":3432},[34,56118,56119],{"class":55},"      if",[34,56121,56122],{"class":40}," (i ",[34,56124,56125],{"class":55},"===",[34,56127,98],{"class":44},[34,56129,14090],{"class":40},[34,56131,56132,56135,56138],{"class":36,"line":3437},[34,56133,56134],{"class":3617},"        clearInterval",[34,56136,56137],{"class":40},"(n)  ",[34,56139,56140],{"class":161},"\u002F\u002F 关闭定时器\n",[34,56142,56143],{"class":36,"line":4230},[34,56144,56145],{"class":161},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[34,56147,56148,56151,56153],{"class":36,"line":4244},[34,56149,56150],{"class":40},"        btn.disabled ",[34,56152,221],{"class":55},[34,56154,56155],{"class":44}," false\n",[34,56157,56158,56161,56163],{"class":36,"line":4252},[34,56159,56160],{"class":40},"        btn.innerHTML ",[34,56162,221],{"class":55},[34,56164,56165],{"class":504}," '同意'\n",[34,56167,56168],{"class":36,"line":4257},[34,56169,54037],{"class":40},[34,56171,56172,56175,56177],{"class":36,"line":4263},[34,56173,56174],{"class":40},"    }, ",[34,56176,8060],{"class":44},[34,56178,101],{"class":40},[34,56180,56181],{"class":36,"line":4269},[34,56182,1475],{"emptyLinePlaceholder":1474},[34,56184,56185,56187,56189],{"class":36,"line":4274},[34,56186,54056],{"class":40},[34,56188,53452],{"class":52939},[34,56190,52946],{"class":40},[34,56192,56193,56195,56197],{"class":36,"line":9598},[34,56194,53424],{"class":40},[34,56196,53439],{"class":52939},[34,56198,52946],{"class":40},[34,56200,56201],{"class":36,"line":9622},[34,56202,1475],{"emptyLinePlaceholder":1474},[34,56204,56205,56207,56209],{"class":36,"line":9627},[34,56206,53424],{"class":40},[34,56208,52274],{"class":52939},[34,56210,52946],{"class":40},[103,56212,56213],{},"不要一直想着用死循环,避免死循环",[103,56215,56216,56219],{},[31,56217,56218],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[1353,56221,56223],{"id":56222},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[1772,56225,56226],{},[1775,56227,56228],{},"法1",[24,56230,56232],{"className":52272,"code":56231,"language":52274,"meta":29,"style":29},"\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",[31,56233,56234,56244,56258,56262,56270,56284,56304,56316,56324,56330,56341,56352,56356,56360,56367,56379,56383,56387,56394,56406,56420,56433,56447,56451,56455,56462,56473,56484,56495,56507,56519,56531,56535,56539,56547,56557,56570,56582,56595,56599,56603,56610,56620,56632,56644,56655,56666,56676,56688,56700,56704,56708,56717,56729,56741,56769,56782,56786,56790,56797,56808,56812,56820,56828,56832,56840,56854,56869,56893,56901,56916,56929,56937,56958,56970,56982,56994,57006,57018,57030,57042,57051,57059,57067,57075,57087,57110,57129,57148,57167,57186,57205,57224,57244,57248,57268,57287,57307,57328,57339,57356,57366,57376,57386,57391,57396,57401,57406,57431,57444,57448,57471,57475,57483,57491,57499,57503],{"__ignoreMap":29},[34,56235,56236,56238,56240,56242],{"class":36,"line":37},[34,56237,52936],{"class":40},[34,56239,52940],{"class":52939},[34,56241,52943],{"class":3617},[34,56243,52946],{"class":40},[34,56245,56246,56248,56250,56252,56254,56256],{"class":36,"line":165},[34,56247,2701],{"class":40},[34,56249,52274],{"class":52939},[34,56251,52955],{"class":3617},[34,56253,221],{"class":40},[34,56255,52960],{"class":504},[34,56257,52946],{"class":40},[34,56259,56260],{"class":36,"line":171},[34,56261,1475],{"emptyLinePlaceholder":1474},[34,56263,56264,56266,56268],{"class":36,"line":182},[34,56265,2701],{"class":40},[34,56267,52973],{"class":52939},[34,56269,52946],{"class":40},[34,56271,56272,56274,56276,56278,56280,56282],{"class":36,"line":188},[34,56273,53783],{"class":40},[34,56275,52983],{"class":52939},[34,56277,52986],{"class":3617},[34,56279,221],{"class":40},[34,56281,52991],{"class":504},[34,56283,52946],{"class":40},[34,56285,56286,56288,56290,56292,56294,56296,56298,56300,56302],{"class":36,"line":518},[34,56287,53783],{"class":40},[34,56289,52983],{"class":52939},[34,56291,16566],{"class":3617},[34,56293,221],{"class":40},[34,56295,53030],{"class":504},[34,56297,53010],{"class":3617},[34,56299,221],{"class":40},[34,56301,53037],{"class":504},[34,56303,52946],{"class":40},[34,56305,56306,56308,56310,56312,56314],{"class":36,"line":524},[34,56307,53783],{"class":40},[34,56309,53046],{"class":52939},[34,56311,53049],{"class":40},[34,56313,53046],{"class":52939},[34,56315,52946],{"class":40},[34,56317,56318,56320,56322],{"class":36,"line":530},[34,56319,53783],{"class":40},[34,56321,1711],{"class":52939},[34,56323,52946],{"class":40},[34,56325,56326,56328],{"class":36,"line":624},[34,56327,8053],{"class":52939},[34,56329,17218],{"class":40},[34,56331,56332,56335,56337,56339],{"class":36,"line":630},[34,56333,56334],{"class":44},"      padding",[34,56336,53076],{"class":40},[34,56338,177],{"class":44},[34,56340,2952],{"class":40},[34,56342,56343,56346,56348,56350],{"class":36,"line":636},[34,56344,56345],{"class":44},"      margin",[34,56347,53076],{"class":40},[34,56349,177],{"class":44},[34,56351,2952],{"class":40},[34,56353,56354],{"class":36,"line":1513},[34,56355,3841],{"class":40},[34,56357,56358],{"class":36,"line":1519},[34,56359,1475],{"emptyLinePlaceholder":1474},[34,56361,56362,56365],{"class":36,"line":3283},[34,56363,56364],{"class":52939},"    li",[34,56366,17218],{"class":40},[34,56368,56369,56372,56374,56377],{"class":36,"line":3297},[34,56370,56371],{"class":44},"      list-style",[34,56373,53076],{"class":40},[34,56375,56376],{"class":44},"none",[34,56378,2952],{"class":40},[34,56380,56381],{"class":36,"line":3302},[34,56382,3841],{"class":40},[34,56384,56385],{"class":36,"line":3308},[34,56386,1475],{"emptyLinePlaceholder":1474},[34,56388,56389,56392],{"class":36,"line":3328},[34,56390,56391],{"class":3617},"    .box",[34,56393,17218],{"class":40},[34,56395,56396,56399,56401,56404],{"class":36,"line":3333},[34,56397,56398],{"class":44},"      position",[34,56400,53076],{"class":40},[34,56402,56403],{"class":44},"relative",[34,56405,2952],{"class":40},[34,56407,56408,56411,56413,56416,56418],{"class":36,"line":3347},[34,56409,56410],{"class":44},"      width",[34,56412,53076],{"class":40},[34,56414,56415],{"class":44},"976",[34,56417,53131],{"class":55},[34,56419,2952],{"class":40},[34,56421,56422,56425,56427,56429,56431],{"class":36,"line":3352},[34,56423,56424],{"class":44},"      height",[34,56426,53076],{"class":40},[34,56428,3197],{"class":44},[34,56430,53131],{"class":55},[34,56432,2952],{"class":40},[34,56434,56435,56437,56439,56441,56443,56445],{"class":36,"line":3381},[34,56436,56345],{"class":44},[34,56438,53076],{"class":40},[34,56440,451],{"class":44},[34,56442,53131],{"class":55},[34,56444,53195],{"class":44},[34,56446,2952],{"class":40},[34,56448,56449],{"class":36,"line":3386},[34,56450,3841],{"class":40},[34,56452,56453],{"class":36,"line":3403},[34,56454,1475],{"emptyLinePlaceholder":1474},[34,56456,56457,56460],{"class":36,"line":3408},[34,56458,56459],{"class":3617},"    .slider-footer",[34,56461,17218],{"class":40},[34,56463,56464,56466,56468,56471],{"class":36,"line":3413},[34,56465,56398],{"class":44},[34,56467,53076],{"class":40},[34,56469,56470],{"class":44},"absolute",[34,56472,2952],{"class":40},[34,56474,56475,56478,56480,56482],{"class":36,"line":3418},[34,56476,56477],{"class":44},"      left",[34,56479,53076],{"class":40},[34,56481,177],{"class":44},[34,56483,2952],{"class":40},[34,56485,56486,56489,56491,56493],{"class":36,"line":3432},[34,56487,56488],{"class":44},"      bottom",[34,56490,53076],{"class":40},[34,56492,177],{"class":44},[34,56494,2952],{"class":40},[34,56496,56497,56499,56501,56503,56505],{"class":36,"line":3437},[34,56498,56410],{"class":44},[34,56500,53076],{"class":40},[34,56502,451],{"class":44},[34,56504,2131],{"class":55},[34,56506,2952],{"class":40},[34,56508,56509,56511,56513,56515,56517],{"class":36,"line":4230},[34,56510,56424],{"class":44},[34,56512,53076],{"class":40},[34,56514,2370],{"class":44},[34,56516,2131],{"class":55},[34,56518,2952],{"class":40},[34,56520,56521,56524,56526,56529],{"class":36,"line":4244},[34,56522,56523],{"class":44},"      background-color",[34,56525,53076],{"class":40},[34,56527,56528],{"class":44},"skyblue",[34,56530,2952],{"class":40},[34,56532,56533],{"class":36,"line":4252},[34,56534,3841],{"class":40},[34,56536,56537],{"class":36,"line":4257},[34,56538,1475],{"emptyLinePlaceholder":1474},[34,56540,56541,56543,56545],{"class":36,"line":4263},[34,56542,56459],{"class":3617},[34,56544,8475],{"class":52939},[34,56546,17218],{"class":40},[34,56548,56549,56551,56553,56555],{"class":36,"line":4269},[34,56550,56398],{"class":44},[34,56552,53076],{"class":40},[34,56554,56470],{"class":44},[34,56556,2952],{"class":40},[34,56558,56559,56562,56564,56566,56568],{"class":36,"line":4274},[34,56560,56561],{"class":44},"      font-size",[34,56563,53076],{"class":40},[34,56565,2692],{"class":44},[34,56567,53131],{"class":55},[34,56569,2952],{"class":40},[34,56571,56572,56574,56576,56578,56580],{"class":36,"line":9598},[34,56573,56477],{"class":44},[34,56575,53076],{"class":40},[34,56577,1249],{"class":44},[34,56579,53131],{"class":55},[34,56581,2952],{"class":40},[34,56583,56584,56587,56589,56591,56593],{"class":36,"line":9622},[34,56585,56586],{"class":44},"      top",[34,56588,53076],{"class":40},[34,56590,224],{"class":44},[34,56592,53131],{"class":55},[34,56594,2952],{"class":40},[34,56596,56597],{"class":36,"line":9627},[34,56598,3841],{"class":40},[34,56600,56601],{"class":36,"line":9633},[34,56602,1475],{"emptyLinePlaceholder":1474},[34,56604,56605,56608],{"class":36,"line":9660},[34,56606,56607],{"class":52939},"    ul",[34,56609,17218],{"class":40},[34,56611,56612,56614,56616,56618],{"class":36,"line":9665},[34,56613,56398],{"class":44},[34,56615,53076],{"class":40},[34,56617,56470],{"class":44},[34,56619,2952],{"class":40},[34,56621,56622,56624,56626,56628,56630],{"class":36,"line":9671},[34,56623,56586],{"class":44},[34,56625,53076],{"class":40},[34,56627,2574],{"class":44},[34,56629,53131],{"class":55},[34,56631,2952],{"class":40},[34,56633,56634,56636,56638,56640,56642],{"class":36,"line":9683},[34,56635,56477],{"class":44},[34,56637,53076],{"class":40},[34,56639,1249],{"class":44},[34,56641,53131],{"class":55},[34,56643,2952],{"class":40},[34,56645,56646,56649,56651,56653],{"class":36,"line":9695},[34,56647,56648],{"class":44},"      display",[34,56650,53076],{"class":40},[34,56652,53116],{"class":44},[34,56654,2952],{"class":40},[34,56656,56657,56660,56662,56664],{"class":36,"line":9707},[34,56658,56659],{"class":44},"      justify-content",[34,56661,53076],{"class":40},[34,56663,53307],{"class":44},[34,56665,2952],{"class":40},[34,56667,56668,56670,56672,56674],{"class":36,"line":11366},[34,56669,56398],{"class":44},[34,56671,53076],{"class":40},[34,56673,56470],{"class":44},[34,56675,2952],{"class":40},[34,56677,56678,56680,56682,56684,56686],{"class":36,"line":11391},[34,56679,56410],{"class":44},[34,56681,53076],{"class":40},[34,56683,5645],{"class":44},[34,56685,53131],{"class":55},[34,56687,2952],{"class":40},[34,56689,56690,56692,56694,56696,56698],{"class":36,"line":11414},[34,56691,56424],{"class":44},[34,56693,53076],{"class":40},[34,56695,1249],{"class":44},[34,56697,53131],{"class":55},[34,56699,2952],{"class":40},[34,56701,56702],{"class":36,"line":11438},[34,56703,3841],{"class":40},[34,56705,56706],{"class":36,"line":11443},[34,56707,1475],{"emptyLinePlaceholder":1474},[34,56709,56710,56712,56715],{"class":36,"line":11448},[34,56711,56607],{"class":52939},[34,56713,56714],{"class":52939}," li",[34,56716,17218],{"class":40},[34,56718,56719,56721,56723,56725,56727],{"class":36,"line":11453},[34,56720,56410],{"class":44},[34,56722,53076],{"class":40},[34,56724,1249],{"class":44},[34,56726,53131],{"class":55},[34,56728,2952],{"class":40},[34,56730,56731,56733,56735,56737,56739],{"class":36,"line":11462},[34,56732,56424],{"class":44},[34,56734,53076],{"class":40},[34,56736,1249],{"class":44},[34,56738,53131],{"class":55},[34,56740,2952],{"class":40},[34,56742,56743,56745,56747,56750,56752,56754,56756,56758,56760,56762,56764,56767],{"class":36,"line":11467},[34,56744,56523],{"class":44},[34,56746,53076],{"class":40},[34,56748,56749],{"class":44},"rgba",[34,56751,286],{"class":40},[34,56753,177],{"class":44},[34,56755,48],{"class":40},[34,56757,177],{"class":44},[34,56759,48],{"class":40},[34,56761,177],{"class":44},[34,56763,48],{"class":40},[34,56765,56766],{"class":44},".4",[34,56768,4372],{"class":40},[34,56770,56771,56774,56776,56778,56780],{"class":36,"line":11473},[34,56772,56773],{"class":44},"      border-radius",[34,56775,53076],{"class":40},[34,56777,410],{"class":44},[34,56779,53131],{"class":55},[34,56781,2952],{"class":40},[34,56783,56784],{"class":36,"line":11494},[34,56785,3841],{"class":40},[34,56787,56788],{"class":36,"line":11500},[34,56789,1475],{"emptyLinePlaceholder":1474},[34,56791,56792,56795],{"class":36,"line":11514},[34,56793,56794],{"class":3617},"    .activate",[34,56796,17218],{"class":40},[34,56798,56799,56801,56803,56806],{"class":36,"line":11520},[34,56800,56523],{"class":44},[34,56802,53076],{"class":40},[34,56804,56805],{"class":44},"#f7f7f7",[34,56807,2952],{"class":40},[34,56809,56810],{"class":36,"line":11547},[34,56811,3841],{"class":40},[34,56813,56814,56816,56818],{"class":36,"line":11556},[34,56815,54056],{"class":40},[34,56817,1711],{"class":52939},[34,56819,52946],{"class":40},[34,56821,56822,56824,56826],{"class":36,"line":11562},[34,56823,53424],{"class":40},[34,56825,52973],{"class":52939},[34,56827,52946],{"class":40},[34,56829,56830],{"class":36,"line":11570},[34,56831,1475],{"emptyLinePlaceholder":1474},[34,56833,56834,56836,56838],{"class":36,"line":11575},[34,56835,2701],{"class":40},[34,56837,53439],{"class":52939},[34,56839,52946],{"class":40},[34,56841,56842,56844,56846,56848,56850,56852],{"class":36,"line":18250},[34,56843,53783],{"class":40},[34,56845,53250],{"class":52939},[34,56847,55125],{"class":3617},[34,56849,221],{"class":40},[34,56851,55130],{"class":504},[34,56853,52946],{"class":40},[34,56855,56856,56858,56860,56862,56864,56867],{"class":36,"line":18256},[34,56857,52980],{"class":40},[34,56859,53250],{"class":52939},[34,56861,55125],{"class":3617},[34,56863,221],{"class":40},[34,56865,56866],{"class":504},"\"slider-wrapper\"",[34,56868,52946],{"class":40},[34,56870,56871,56874,56876,56879,56881,56884,56887,56889,56891],{"class":36,"line":18279},[34,56872,56873],{"class":40},"      \u003C",[34,56875,109],{"class":52939},[34,56877,56878],{"class":3617}," src",[34,56880,221],{"class":40},[34,56882,56883],{"class":504},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[34,56885,56886],{"class":3617}," alt",[34,56888,221],{"class":40},[34,56890,9302],{"class":504},[34,56892,52946],{"class":40},[34,56894,56895,56897,56899],{"class":36,"line":18285},[34,56896,53415],{"class":40},[34,56898,53250],{"class":52939},[34,56900,52946],{"class":40},[34,56902,56903,56905,56907,56909,56911,56914],{"class":36,"line":18308},[34,56904,52980],{"class":40},[34,56906,53250],{"class":52939},[34,56908,55125],{"class":3617},[34,56910,221],{"class":40},[34,56912,56913],{"class":504},"\"slider-footer\"",[34,56915,52946],{"class":40},[34,56917,56918,56920,56922,56925,56927],{"class":36,"line":18322},[34,56919,56873],{"class":40},[34,56921,103],{"class":52939},[34,56923,56924],{"class":40},">对人类来说会不会太超前了?\u003C\u002F",[34,56926,103],{"class":52939},[34,56928,52946],{"class":40},[34,56930,56931,56933,56935],{"class":36,"line":18342},[34,56932,56873],{"class":40},[34,56934,2798],{"class":52939},[34,56936,52946],{"class":40},[34,56938,56939,56942,56944,56946,56948,56951,56954,56956],{"class":36,"line":18348},[34,56940,56941],{"class":40},"        \u003C",[34,56943,1775],{"class":52939},[34,56945,55125],{"class":3617},[34,56947,221],{"class":40},[34,56949,56950],{"class":504},"\"activate\"",[34,56952,56953],{"class":40},">\u003C\u002F",[34,56955,1775],{"class":52939},[34,56957,52946],{"class":40},[34,56959,56960,56962,56964,56966,56968],{"class":36,"line":18359},[34,56961,56941],{"class":40},[34,56963,1775],{"class":52939},[34,56965,56953],{"class":40},[34,56967,1775],{"class":52939},[34,56969,52946],{"class":40},[34,56971,56972,56974,56976,56978,56980],{"class":36,"line":18382},[34,56973,56941],{"class":40},[34,56975,1775],{"class":52939},[34,56977,56953],{"class":40},[34,56979,1775],{"class":52939},[34,56981,52946],{"class":40},[34,56983,56984,56986,56988,56990,56992],{"class":36,"line":18404},[34,56985,56941],{"class":40},[34,56987,1775],{"class":52939},[34,56989,56953],{"class":40},[34,56991,1775],{"class":52939},[34,56993,52946],{"class":40},[34,56995,56996,56998,57000,57002,57004],{"class":36,"line":18409},[34,56997,56941],{"class":40},[34,56999,1775],{"class":52939},[34,57001,56953],{"class":40},[34,57003,1775],{"class":52939},[34,57005,52946],{"class":40},[34,57007,57008,57010,57012,57014,57016],{"class":36,"line":18415},[34,57009,56941],{"class":40},[34,57011,1775],{"class":52939},[34,57013,56953],{"class":40},[34,57015,1775],{"class":52939},[34,57017,52946],{"class":40},[34,57019,57020,57022,57024,57026,57028],{"class":36,"line":18429},[34,57021,56941],{"class":40},[34,57023,1775],{"class":52939},[34,57025,56953],{"class":40},[34,57027,1775],{"class":52939},[34,57029,52946],{"class":40},[34,57031,57032,57034,57036,57038,57040],{"class":36,"line":18442},[34,57033,56941],{"class":40},[34,57035,1775],{"class":52939},[34,57037,56953],{"class":40},[34,57039,1775],{"class":52939},[34,57041,52946],{"class":40},[34,57043,57044,57047,57049],{"class":36,"line":18447},[34,57045,57046],{"class":40},"      \u003C\u002F",[34,57048,2798],{"class":52939},[34,57050,52946],{"class":40},[34,57052,57053,57055,57057],{"class":36,"line":18461},[34,57054,53415],{"class":40},[34,57056,53250],{"class":52939},[34,57058,52946],{"class":40},[34,57060,57061,57063,57065],{"class":36,"line":18466},[34,57062,54056],{"class":40},[34,57064,53250],{"class":52939},[34,57066,52946],{"class":40},[34,57068,57069,57071,57073],{"class":36,"line":18472},[34,57070,53783],{"class":40},[34,57072,53452],{"class":52939},[34,57074,52946],{"class":40},[34,57076,57077,57079,57082,57084],{"class":36,"line":18477},[34,57078,12871],{"class":55},[34,57080,57081],{"class":44}," arrImage",[34,57083,56],{"class":55},[34,57085,57086],{"class":40}," [\n",[34,57088,57089,57092,57095,57098,57101,57104,57107],{"class":36,"line":18491},[34,57090,57091],{"class":40},"      { url: ",[34,57093,57094],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[34,57096,57097],{"class":40},", title: ",[34,57099,57100],{"class":504},"'对人类来说会不会太超前了?'",[34,57102,57103],{"class":40},", color: ",[34,57105,57106],{"class":504},"'rgba(100,67,68)'",[34,57108,57109],{"class":40}," },\n",[34,57111,57112,57114,57117,57119,57122,57124,57127],{"class":36,"line":18496},[34,57113,57091],{"class":40},[34,57115,57116],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[34,57118,57097],{"class":40},[34,57120,57121],{"class":504},"'开启剑与雪的黑暗传说!'",[34,57123,57103],{"class":40},[34,57125,57126],{"class":504},"'rgba(43,35,26)'",[34,57128,57109],{"class":40},[34,57130,57131,57133,57136,57138,57141,57143,57146],{"class":36,"line":18501},[34,57132,57091],{"class":40},[34,57134,57135],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[34,57137,57097],{"class":40},[34,57139,57140],{"class":504},"'真正的jo厨出现了!'",[34,57142,57103],{"class":40},[34,57144,57145],{"class":504},"'rgba(36,31,33)'",[34,57147,57109],{"class":40},[34,57149,57150,57152,57155,57157,57160,57162,57165],{"class":36,"line":18515},[34,57151,57091],{"class":40},[34,57153,57154],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[34,57156,57097],{"class":40},[34,57158,57159],{"class":504},"'李玉刚:让世界通过b站看到东方大国文化'",[34,57161,57103],{"class":40},[34,57163,57164],{"class":504},"'rgba(139,98,66)'",[34,57166,57109],{"class":40},[34,57168,57169,57171,57174,57176,57179,57181,57184],{"class":36,"line":18527},[34,57170,57091],{"class":40},[34,57172,57173],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[34,57175,57097],{"class":40},[34,57177,57178],{"class":504},"'快来分享你的寒假日常吧'",[34,57180,57103],{"class":40},[34,57182,57183],{"class":504},"'rgba(67,90,92)'",[34,57185,57109],{"class":40},[34,57187,57188,57190,57193,57195,57198,57200,57203],{"class":36,"line":18532},[34,57189,57091],{"class":40},[34,57191,57192],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[34,57194,57097],{"class":40},[34,57196,57197],{"class":504},"'哔哩哔哩小年YEAR'",[34,57199,57103],{"class":40},[34,57201,57202],{"class":504},"'rgba(166,131,143)'",[34,57204,57109],{"class":40},[34,57206,57207,57209,57212,57214,57217,57219,57222],{"class":36,"line":18545},[34,57208,57091],{"class":40},[34,57210,57211],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[34,57213,57097],{"class":40},[34,57215,57216],{"class":504},"'一站式解决你的电脑配置问题'",[34,57218,57103],{"class":40},[34,57220,57221],{"class":504},"'rgba(53,29,25)'",[34,57223,57109],{"class":40},[34,57225,57226,57228,57231,57233,57236,57238,57241],{"class":36,"line":18550},[34,57227,57091],{"class":40},[34,57229,57230],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[34,57232,57097],{"class":40},[34,57234,57235],{"class":504},"'谁不想和小猫咪贴贴呢?'",[34,57237,57103],{"class":40},[34,57239,57240],{"class":504},"'rgba(99,72,114)'",[34,57242,57243],{"class":40}," }\n",[34,57245,57246],{"class":36,"line":18555},[34,57247,54748],{"class":40},[34,57249,57250,57252,57255,57257,57259,57261,57263,57266],{"class":36,"line":18560},[34,57251,12871],{"class":55},[34,57253,57254],{"class":44}," img",[34,57256,56],{"class":55},[34,57258,56035],{"class":40},[34,57260,56038],{"class":3617},[34,57262,286],{"class":40},[34,57264,57265],{"class":504},"'.slider-wrapper img'",[34,57267,101],{"class":40},[34,57269,57270,57272,57274,57276,57278,57280,57282,57285],{"class":36,"line":18573},[34,57271,12871],{"class":55},[34,57273,8475],{"class":44},[34,57275,56],{"class":55},[34,57277,56035],{"class":40},[34,57279,56038],{"class":3617},[34,57281,286],{"class":40},[34,57283,57284],{"class":504},"'.slider-footer p'",[34,57286,101],{"class":40},[34,57288,57289,57291,57294,57296,57298,57300,57302,57305],{"class":36,"line":18578},[34,57290,12871],{"class":55},[34,57292,57293],{"class":44}," color",[34,57295,56],{"class":55},[34,57297,56035],{"class":40},[34,57299,56038],{"class":3617},[34,57301,286],{"class":40},[34,57303,57304],{"class":504},"'.slider-footer'",[34,57306,101],{"class":40},[34,57308,57309,57311,57314,57316,57318,57321,57323,57326],{"class":36,"line":34274},[34,57310,12871],{"class":55},[34,57312,57313],{"class":44}," lis",[34,57315,56],{"class":55},[34,57317,56035],{"class":40},[34,57319,57320],{"class":3617},"querySelectorAll",[34,57322,286],{"class":40},[34,57324,57325],{"class":504},"'.slider-footer ul li'",[34,57327,101],{"class":40},[34,57329,57330,57332,57334,57336],{"class":36,"line":34280},[34,57331,53858],{"class":55},[34,57333,11088],{"class":40},[34,57335,221],{"class":55},[34,57337,57338],{"class":44}," 1\n",[34,57340,57341,57343,57346,57348,57350,57352,57354],{"class":36,"line":34286},[34,57342,53858],{"class":55},[34,57344,57345],{"class":40}," timer ",[34,57347,221],{"class":55},[34,57349,56083],{"class":3617},[34,57351,286],{"class":40},[34,57353,56088],{"class":55},[34,57355,56091],{"class":40},[34,57357,57358,57361,57363],{"class":36,"line":34292},[34,57359,57360],{"class":40},"      img.src ",[34,57362,221],{"class":55},[34,57364,57365],{"class":40}," arrImage[i].url\n",[34,57367,57368,57371,57373],{"class":36,"line":34298},[34,57369,57370],{"class":40},"      p.innerHTML ",[34,57372,221],{"class":55},[34,57374,57375],{"class":40}," arrImage[i].title\n",[34,57377,57378,57381,57383],{"class":36,"line":34309},[34,57379,57380],{"class":40},"      color.style.backgroundColor ",[34,57382,221],{"class":55},[34,57384,57385],{"class":40}," arrImage[i].color\n",[34,57387,57388],{"class":36,"line":34315},[34,57389,57390],{"class":161},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[34,57392,57393],{"class":36,"line":34335},[34,57394,57395],{"class":161},"      \u002F\u002F li.classList.add('activate')\n",[34,57397,57398],{"class":36,"line":34341},[34,57399,57400],{"class":161},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[34,57402,57403],{"class":36,"line":34352},[34,57404,57405],{"class":161},"      \u002F\u002F lis[i].classList.remove('activate')\n",[34,57407,57408,57411,57413,57415,57418,57421,57424,57426,57429],{"class":36,"line":34358},[34,57409,57410],{"class":40},"      document.",[34,57412,56038],{"class":3617},[34,57414,286],{"class":40},[34,57416,57417],{"class":504},"'.activate'",[34,57419,57420],{"class":40},")?.classList.",[34,57422,57423],{"class":3617},"toggle",[34,57425,286],{"class":40},[34,57427,57428],{"class":504},"'activate'",[34,57430,101],{"class":40},[34,57432,57433,57436,57438,57440,57442],{"class":36,"line":34364},[34,57434,57435],{"class":40},"      lis[i].classList.",[34,57437,6984],{"class":3617},[34,57439,286],{"class":40},[34,57441,57428],{"class":504},[34,57443,101],{"class":40},[34,57445,57446],{"class":36,"line":34370},[34,57447,1475],{"emptyLinePlaceholder":1474},[34,57449,57450,57453,57455,57457,57459,57461,57463,57465,57468],{"class":36,"line":34376},[34,57451,57452],{"class":40},"      i ",[34,57454,221],{"class":55},[34,57456,56122],{"class":40},[34,57458,2277],{"class":55},[34,57460,26764],{"class":44},[34,57462,372],{"class":40},[34,57464,2131],{"class":55},[34,57466,57467],{"class":40}," arrImage.",[34,57469,57470],{"class":44},"length\n",[34,57472,57473],{"class":36,"line":34382},[34,57474,1475],{"emptyLinePlaceholder":1474},[34,57476,57477,57479,57481],{"class":36,"line":34388},[34,57478,56174],{"class":40},[34,57480,8060],{"class":44},[34,57482,101],{"class":40},[34,57484,57485,57487,57489],{"class":36,"line":34394},[34,57486,54056],{"class":40},[34,57488,53452],{"class":52939},[34,57490,52946],{"class":40},[34,57492,57493,57495,57497],{"class":36,"line":34414},[34,57494,53424],{"class":40},[34,57496,53439],{"class":52939},[34,57498,52946],{"class":40},[34,57500,57501],{"class":36,"line":34420},[34,57502,1475],{"emptyLinePlaceholder":1474},[34,57504,57505,57507,57509],{"class":36,"line":34436},[34,57506,53424],{"class":40},[34,57508,52274],{"class":52939},[34,57510,52946],{"class":40},[103,57512,57513],{},[109,57514],{"alt":29,"src":57515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[103,57517,57518],{},"?.就是短路保护,确保输出正常进行",[103,57520,57521],{},"不要忘记取余%,有时候可以用",[103,57523,57524],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[1772,57526,57527],{"start":165},[1775,57528,57529],{},"法2",[24,57531,57533],{"className":52272,"code":57532,"language":52274,"meta":29,"style":29},"\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",[31,57534,57535,57545,57559,57563,57571,57585,57605,57617,57625,57631,57641,57651,57655,57659,57665,57675,57679,57683,57689,57699,57711,57723,57737,57741,57745,57751,57761,57771,57781,57793,57805,57815,57819,57823,57831,57841,57853,57865,57877,57881,57885,57891,57901,57913,57925,57935,57945,57955,57967,57979,57983,57987,57995,58007,58019,58045,58057,58061,58065,58071,58081,58085,58093,58101,58105,58113,58127,58141,58161,58169,58183,58195,58203,58221,58233,58245,58257,58269,58281,58293,58305,58313,58321,58329,58337,58348,58364,58380,58396,58412,58428,58444,58460,58476,58480,58485,58503,58521,58531,58536,58541,58552,58558,58573,58582,58586,58591,58600,58605,58614,58619,58624,58629,58652,58682,58686,58694,58698,58706,58714,58718],{"__ignoreMap":29},[34,57536,57537,57539,57541,57543],{"class":36,"line":37},[34,57538,52936],{"class":40},[34,57540,52940],{"class":52939},[34,57542,52943],{"class":3617},[34,57544,52946],{"class":40},[34,57546,57547,57549,57551,57553,57555,57557],{"class":36,"line":165},[34,57548,2701],{"class":40},[34,57550,52274],{"class":52939},[34,57552,52955],{"class":3617},[34,57554,221],{"class":40},[34,57556,52960],{"class":504},[34,57558,52946],{"class":40},[34,57560,57561],{"class":36,"line":171},[34,57562,1475],{"emptyLinePlaceholder":1474},[34,57564,57565,57567,57569],{"class":36,"line":182},[34,57566,2701],{"class":40},[34,57568,52973],{"class":52939},[34,57570,52946],{"class":40},[34,57572,57573,57575,57577,57579,57581,57583],{"class":36,"line":188},[34,57574,53783],{"class":40},[34,57576,52983],{"class":52939},[34,57578,52986],{"class":3617},[34,57580,221],{"class":40},[34,57582,52991],{"class":504},[34,57584,52946],{"class":40},[34,57586,57587,57589,57591,57593,57595,57597,57599,57601,57603],{"class":36,"line":518},[34,57588,53783],{"class":40},[34,57590,52983],{"class":52939},[34,57592,16566],{"class":3617},[34,57594,221],{"class":40},[34,57596,53030],{"class":504},[34,57598,53010],{"class":3617},[34,57600,221],{"class":40},[34,57602,53037],{"class":504},[34,57604,52946],{"class":40},[34,57606,57607,57609,57611,57613,57615],{"class":36,"line":524},[34,57608,53783],{"class":40},[34,57610,53046],{"class":52939},[34,57612,53049],{"class":40},[34,57614,53046],{"class":52939},[34,57616,52946],{"class":40},[34,57618,57619,57621,57623],{"class":36,"line":530},[34,57620,53783],{"class":40},[34,57622,1711],{"class":52939},[34,57624,52946],{"class":40},[34,57626,57627,57629],{"class":36,"line":624},[34,57628,8053],{"class":52939},[34,57630,17218],{"class":40},[34,57632,57633,57635,57637,57639],{"class":36,"line":630},[34,57634,56334],{"class":44},[34,57636,53076],{"class":40},[34,57638,177],{"class":44},[34,57640,2952],{"class":40},[34,57642,57643,57645,57647,57649],{"class":36,"line":636},[34,57644,56345],{"class":44},[34,57646,53076],{"class":40},[34,57648,177],{"class":44},[34,57650,2952],{"class":40},[34,57652,57653],{"class":36,"line":1513},[34,57654,3841],{"class":40},[34,57656,57657],{"class":36,"line":1519},[34,57658,1475],{"emptyLinePlaceholder":1474},[34,57660,57661,57663],{"class":36,"line":3283},[34,57662,56364],{"class":52939},[34,57664,17218],{"class":40},[34,57666,57667,57669,57671,57673],{"class":36,"line":3297},[34,57668,56371],{"class":44},[34,57670,53076],{"class":40},[34,57672,56376],{"class":44},[34,57674,2952],{"class":40},[34,57676,57677],{"class":36,"line":3302},[34,57678,3841],{"class":40},[34,57680,57681],{"class":36,"line":3308},[34,57682,1475],{"emptyLinePlaceholder":1474},[34,57684,57685,57687],{"class":36,"line":3328},[34,57686,56391],{"class":3617},[34,57688,17218],{"class":40},[34,57690,57691,57693,57695,57697],{"class":36,"line":3333},[34,57692,56398],{"class":44},[34,57694,53076],{"class":40},[34,57696,56403],{"class":44},[34,57698,2952],{"class":40},[34,57700,57701,57703,57705,57707,57709],{"class":36,"line":3347},[34,57702,56410],{"class":44},[34,57704,53076],{"class":40},[34,57706,56415],{"class":44},[34,57708,53131],{"class":55},[34,57710,2952],{"class":40},[34,57712,57713,57715,57717,57719,57721],{"class":36,"line":3352},[34,57714,56424],{"class":44},[34,57716,53076],{"class":40},[34,57718,3197],{"class":44},[34,57720,53131],{"class":55},[34,57722,2952],{"class":40},[34,57724,57725,57727,57729,57731,57733,57735],{"class":36,"line":3381},[34,57726,56345],{"class":44},[34,57728,53076],{"class":40},[34,57730,451],{"class":44},[34,57732,53131],{"class":55},[34,57734,53195],{"class":44},[34,57736,2952],{"class":40},[34,57738,57739],{"class":36,"line":3386},[34,57740,3841],{"class":40},[34,57742,57743],{"class":36,"line":3403},[34,57744,1475],{"emptyLinePlaceholder":1474},[34,57746,57747,57749],{"class":36,"line":3408},[34,57748,56459],{"class":3617},[34,57750,17218],{"class":40},[34,57752,57753,57755,57757,57759],{"class":36,"line":3413},[34,57754,56398],{"class":44},[34,57756,53076],{"class":40},[34,57758,56470],{"class":44},[34,57760,2952],{"class":40},[34,57762,57763,57765,57767,57769],{"class":36,"line":3418},[34,57764,56477],{"class":44},[34,57766,53076],{"class":40},[34,57768,177],{"class":44},[34,57770,2952],{"class":40},[34,57772,57773,57775,57777,57779],{"class":36,"line":3432},[34,57774,56488],{"class":44},[34,57776,53076],{"class":40},[34,57778,177],{"class":44},[34,57780,2952],{"class":40},[34,57782,57783,57785,57787,57789,57791],{"class":36,"line":3437},[34,57784,56410],{"class":44},[34,57786,53076],{"class":40},[34,57788,451],{"class":44},[34,57790,2131],{"class":55},[34,57792,2952],{"class":40},[34,57794,57795,57797,57799,57801,57803],{"class":36,"line":4230},[34,57796,56424],{"class":44},[34,57798,53076],{"class":40},[34,57800,2370],{"class":44},[34,57802,2131],{"class":55},[34,57804,2952],{"class":40},[34,57806,57807,57809,57811,57813],{"class":36,"line":4244},[34,57808,56523],{"class":44},[34,57810,53076],{"class":40},[34,57812,56528],{"class":44},[34,57814,2952],{"class":40},[34,57816,57817],{"class":36,"line":4252},[34,57818,3841],{"class":40},[34,57820,57821],{"class":36,"line":4257},[34,57822,1475],{"emptyLinePlaceholder":1474},[34,57824,57825,57827,57829],{"class":36,"line":4263},[34,57826,56459],{"class":3617},[34,57828,8475],{"class":52939},[34,57830,17218],{"class":40},[34,57832,57833,57835,57837,57839],{"class":36,"line":4269},[34,57834,56398],{"class":44},[34,57836,53076],{"class":40},[34,57838,56470],{"class":44},[34,57840,2952],{"class":40},[34,57842,57843,57845,57847,57849,57851],{"class":36,"line":4274},[34,57844,56561],{"class":44},[34,57846,53076],{"class":40},[34,57848,2692],{"class":44},[34,57850,53131],{"class":55},[34,57852,2952],{"class":40},[34,57854,57855,57857,57859,57861,57863],{"class":36,"line":9598},[34,57856,56477],{"class":44},[34,57858,53076],{"class":40},[34,57860,1249],{"class":44},[34,57862,53131],{"class":55},[34,57864,2952],{"class":40},[34,57866,57867,57869,57871,57873,57875],{"class":36,"line":9622},[34,57868,56586],{"class":44},[34,57870,53076],{"class":40},[34,57872,224],{"class":44},[34,57874,53131],{"class":55},[34,57876,2952],{"class":40},[34,57878,57879],{"class":36,"line":9627},[34,57880,3841],{"class":40},[34,57882,57883],{"class":36,"line":9633},[34,57884,1475],{"emptyLinePlaceholder":1474},[34,57886,57887,57889],{"class":36,"line":9660},[34,57888,56607],{"class":52939},[34,57890,17218],{"class":40},[34,57892,57893,57895,57897,57899],{"class":36,"line":9665},[34,57894,56398],{"class":44},[34,57896,53076],{"class":40},[34,57898,56470],{"class":44},[34,57900,2952],{"class":40},[34,57902,57903,57905,57907,57909,57911],{"class":36,"line":9671},[34,57904,56586],{"class":44},[34,57906,53076],{"class":40},[34,57908,2574],{"class":44},[34,57910,53131],{"class":55},[34,57912,2952],{"class":40},[34,57914,57915,57917,57919,57921,57923],{"class":36,"line":9683},[34,57916,56477],{"class":44},[34,57918,53076],{"class":40},[34,57920,1249],{"class":44},[34,57922,53131],{"class":55},[34,57924,2952],{"class":40},[34,57926,57927,57929,57931,57933],{"class":36,"line":9695},[34,57928,56648],{"class":44},[34,57930,53076],{"class":40},[34,57932,53116],{"class":44},[34,57934,2952],{"class":40},[34,57936,57937,57939,57941,57943],{"class":36,"line":9707},[34,57938,56659],{"class":44},[34,57940,53076],{"class":40},[34,57942,53307],{"class":44},[34,57944,2952],{"class":40},[34,57946,57947,57949,57951,57953],{"class":36,"line":11366},[34,57948,56398],{"class":44},[34,57950,53076],{"class":40},[34,57952,56470],{"class":44},[34,57954,2952],{"class":40},[34,57956,57957,57959,57961,57963,57965],{"class":36,"line":11391},[34,57958,56410],{"class":44},[34,57960,53076],{"class":40},[34,57962,5645],{"class":44},[34,57964,53131],{"class":55},[34,57966,2952],{"class":40},[34,57968,57969,57971,57973,57975,57977],{"class":36,"line":11414},[34,57970,56424],{"class":44},[34,57972,53076],{"class":40},[34,57974,1249],{"class":44},[34,57976,53131],{"class":55},[34,57978,2952],{"class":40},[34,57980,57981],{"class":36,"line":11438},[34,57982,3841],{"class":40},[34,57984,57985],{"class":36,"line":11443},[34,57986,1475],{"emptyLinePlaceholder":1474},[34,57988,57989,57991,57993],{"class":36,"line":11448},[34,57990,56607],{"class":52939},[34,57992,56714],{"class":52939},[34,57994,17218],{"class":40},[34,57996,57997,57999,58001,58003,58005],{"class":36,"line":11453},[34,57998,56410],{"class":44},[34,58000,53076],{"class":40},[34,58002,1249],{"class":44},[34,58004,53131],{"class":55},[34,58006,2952],{"class":40},[34,58008,58009,58011,58013,58015,58017],{"class":36,"line":11462},[34,58010,56424],{"class":44},[34,58012,53076],{"class":40},[34,58014,1249],{"class":44},[34,58016,53131],{"class":55},[34,58018,2952],{"class":40},[34,58020,58021,58023,58025,58027,58029,58031,58033,58035,58037,58039,58041,58043],{"class":36,"line":11467},[34,58022,56523],{"class":44},[34,58024,53076],{"class":40},[34,58026,56749],{"class":44},[34,58028,286],{"class":40},[34,58030,177],{"class":44},[34,58032,48],{"class":40},[34,58034,177],{"class":44},[34,58036,48],{"class":40},[34,58038,177],{"class":44},[34,58040,48],{"class":40},[34,58042,56766],{"class":44},[34,58044,4372],{"class":40},[34,58046,58047,58049,58051,58053,58055],{"class":36,"line":11473},[34,58048,56773],{"class":44},[34,58050,53076],{"class":40},[34,58052,410],{"class":44},[34,58054,53131],{"class":55},[34,58056,2952],{"class":40},[34,58058,58059],{"class":36,"line":11494},[34,58060,3841],{"class":40},[34,58062,58063],{"class":36,"line":11500},[34,58064,1475],{"emptyLinePlaceholder":1474},[34,58066,58067,58069],{"class":36,"line":11514},[34,58068,56794],{"class":3617},[34,58070,17218],{"class":40},[34,58072,58073,58075,58077,58079],{"class":36,"line":11520},[34,58074,56523],{"class":44},[34,58076,53076],{"class":40},[34,58078,56805],{"class":44},[34,58080,2952],{"class":40},[34,58082,58083],{"class":36,"line":11547},[34,58084,3841],{"class":40},[34,58086,58087,58089,58091],{"class":36,"line":11556},[34,58088,54056],{"class":40},[34,58090,1711],{"class":52939},[34,58092,52946],{"class":40},[34,58094,58095,58097,58099],{"class":36,"line":11562},[34,58096,53424],{"class":40},[34,58098,52973],{"class":52939},[34,58100,52946],{"class":40},[34,58102,58103],{"class":36,"line":11570},[34,58104,1475],{"emptyLinePlaceholder":1474},[34,58106,58107,58109,58111],{"class":36,"line":11575},[34,58108,2701],{"class":40},[34,58110,53439],{"class":52939},[34,58112,52946],{"class":40},[34,58114,58115,58117,58119,58121,58123,58125],{"class":36,"line":18250},[34,58116,53783],{"class":40},[34,58118,53250],{"class":52939},[34,58120,55125],{"class":3617},[34,58122,221],{"class":40},[34,58124,55130],{"class":504},[34,58126,52946],{"class":40},[34,58128,58129,58131,58133,58135,58137,58139],{"class":36,"line":18256},[34,58130,52980],{"class":40},[34,58132,53250],{"class":52939},[34,58134,55125],{"class":3617},[34,58136,221],{"class":40},[34,58138,56866],{"class":504},[34,58140,52946],{"class":40},[34,58142,58143,58145,58147,58149,58151,58153,58155,58157,58159],{"class":36,"line":18279},[34,58144,56873],{"class":40},[34,58146,109],{"class":52939},[34,58148,56878],{"class":3617},[34,58150,221],{"class":40},[34,58152,56883],{"class":504},[34,58154,56886],{"class":3617},[34,58156,221],{"class":40},[34,58158,9302],{"class":504},[34,58160,52946],{"class":40},[34,58162,58163,58165,58167],{"class":36,"line":18285},[34,58164,53415],{"class":40},[34,58166,53250],{"class":52939},[34,58168,52946],{"class":40},[34,58170,58171,58173,58175,58177,58179,58181],{"class":36,"line":18308},[34,58172,52980],{"class":40},[34,58174,53250],{"class":52939},[34,58176,55125],{"class":3617},[34,58178,221],{"class":40},[34,58180,56913],{"class":504},[34,58182,52946],{"class":40},[34,58184,58185,58187,58189,58191,58193],{"class":36,"line":18322},[34,58186,56873],{"class":40},[34,58188,103],{"class":52939},[34,58190,56924],{"class":40},[34,58192,103],{"class":52939},[34,58194,52946],{"class":40},[34,58196,58197,58199,58201],{"class":36,"line":18342},[34,58198,56873],{"class":40},[34,58200,2798],{"class":52939},[34,58202,52946],{"class":40},[34,58204,58205,58207,58209,58211,58213,58215,58217,58219],{"class":36,"line":18348},[34,58206,56941],{"class":40},[34,58208,1775],{"class":52939},[34,58210,55125],{"class":3617},[34,58212,221],{"class":40},[34,58214,56950],{"class":504},[34,58216,56953],{"class":40},[34,58218,1775],{"class":52939},[34,58220,52946],{"class":40},[34,58222,58223,58225,58227,58229,58231],{"class":36,"line":18359},[34,58224,56941],{"class":40},[34,58226,1775],{"class":52939},[34,58228,56953],{"class":40},[34,58230,1775],{"class":52939},[34,58232,52946],{"class":40},[34,58234,58235,58237,58239,58241,58243],{"class":36,"line":18382},[34,58236,56941],{"class":40},[34,58238,1775],{"class":52939},[34,58240,56953],{"class":40},[34,58242,1775],{"class":52939},[34,58244,52946],{"class":40},[34,58246,58247,58249,58251,58253,58255],{"class":36,"line":18404},[34,58248,56941],{"class":40},[34,58250,1775],{"class":52939},[34,58252,56953],{"class":40},[34,58254,1775],{"class":52939},[34,58256,52946],{"class":40},[34,58258,58259,58261,58263,58265,58267],{"class":36,"line":18409},[34,58260,56941],{"class":40},[34,58262,1775],{"class":52939},[34,58264,56953],{"class":40},[34,58266,1775],{"class":52939},[34,58268,52946],{"class":40},[34,58270,58271,58273,58275,58277,58279],{"class":36,"line":18415},[34,58272,56941],{"class":40},[34,58274,1775],{"class":52939},[34,58276,56953],{"class":40},[34,58278,1775],{"class":52939},[34,58280,52946],{"class":40},[34,58282,58283,58285,58287,58289,58291],{"class":36,"line":18429},[34,58284,56941],{"class":40},[34,58286,1775],{"class":52939},[34,58288,56953],{"class":40},[34,58290,1775],{"class":52939},[34,58292,52946],{"class":40},[34,58294,58295,58297,58299,58301,58303],{"class":36,"line":18442},[34,58296,56941],{"class":40},[34,58298,1775],{"class":52939},[34,58300,56953],{"class":40},[34,58302,1775],{"class":52939},[34,58304,52946],{"class":40},[34,58306,58307,58309,58311],{"class":36,"line":18447},[34,58308,57046],{"class":40},[34,58310,2798],{"class":52939},[34,58312,52946],{"class":40},[34,58314,58315,58317,58319],{"class":36,"line":18461},[34,58316,53415],{"class":40},[34,58318,53250],{"class":52939},[34,58320,52946],{"class":40},[34,58322,58323,58325,58327],{"class":36,"line":18466},[34,58324,54056],{"class":40},[34,58326,53250],{"class":52939},[34,58328,52946],{"class":40},[34,58330,58331,58333,58335],{"class":36,"line":18472},[34,58332,53783],{"class":40},[34,58334,53452],{"class":52939},[34,58336,52946],{"class":40},[34,58338,58339,58341,58344,58346],{"class":36,"line":18477},[34,58340,12871],{"class":55},[34,58342,58343],{"class":44}," sliderData",[34,58345,56],{"class":55},[34,58347,57086],{"class":40},[34,58349,58350,58352,58354,58356,58358,58360,58362],{"class":36,"line":18491},[34,58351,57091],{"class":40},[34,58353,57094],{"class":504},[34,58355,57097],{"class":40},[34,58357,57100],{"class":504},[34,58359,57103],{"class":40},[34,58361,57106],{"class":504},[34,58363,57109],{"class":40},[34,58365,58366,58368,58370,58372,58374,58376,58378],{"class":36,"line":18496},[34,58367,57091],{"class":40},[34,58369,57116],{"class":504},[34,58371,57097],{"class":40},[34,58373,57121],{"class":504},[34,58375,57103],{"class":40},[34,58377,57126],{"class":504},[34,58379,57109],{"class":40},[34,58381,58382,58384,58386,58388,58390,58392,58394],{"class":36,"line":18501},[34,58383,57091],{"class":40},[34,58385,57135],{"class":504},[34,58387,57097],{"class":40},[34,58389,57140],{"class":504},[34,58391,57103],{"class":40},[34,58393,57145],{"class":504},[34,58395,57109],{"class":40},[34,58397,58398,58400,58402,58404,58406,58408,58410],{"class":36,"line":18515},[34,58399,57091],{"class":40},[34,58401,57154],{"class":504},[34,58403,57097],{"class":40},[34,58405,57159],{"class":504},[34,58407,57103],{"class":40},[34,58409,57164],{"class":504},[34,58411,57109],{"class":40},[34,58413,58414,58416,58418,58420,58422,58424,58426],{"class":36,"line":18527},[34,58415,57091],{"class":40},[34,58417,57173],{"class":504},[34,58419,57097],{"class":40},[34,58421,57178],{"class":504},[34,58423,57103],{"class":40},[34,58425,57183],{"class":504},[34,58427,57109],{"class":40},[34,58429,58430,58432,58434,58436,58438,58440,58442],{"class":36,"line":18532},[34,58431,57091],{"class":40},[34,58433,57192],{"class":504},[34,58435,57097],{"class":40},[34,58437,57197],{"class":504},[34,58439,57103],{"class":40},[34,58441,57202],{"class":504},[34,58443,57109],{"class":40},[34,58445,58446,58448,58450,58452,58454,58456,58458],{"class":36,"line":18545},[34,58447,57091],{"class":40},[34,58449,57211],{"class":504},[34,58451,57097],{"class":40},[34,58453,57216],{"class":504},[34,58455,57103],{"class":40},[34,58457,57221],{"class":504},[34,58459,57109],{"class":40},[34,58461,58462,58464,58466,58468,58470,58472,58474],{"class":36,"line":18550},[34,58463,57091],{"class":40},[34,58465,57230],{"class":504},[34,58467,57097],{"class":40},[34,58469,57235],{"class":504},[34,58471,57103],{"class":40},[34,58473,57240],{"class":504},[34,58475,57243],{"class":40},[34,58477,58478],{"class":36,"line":18555},[34,58479,54748],{"class":40},[34,58481,58482],{"class":36,"line":18560},[34,58483,58484],{"class":161},"    \u002F\u002F 1.获取元素\n",[34,58486,58487,58489,58491,58493,58495,58497,58499,58501],{"class":36,"line":18573},[34,58488,12871],{"class":55},[34,58490,57254],{"class":44},[34,58492,56],{"class":55},[34,58494,56035],{"class":40},[34,58496,56038],{"class":3617},[34,58498,286],{"class":40},[34,58500,57265],{"class":504},[34,58502,101],{"class":40},[34,58504,58505,58507,58509,58511,58513,58515,58517,58519],{"class":36,"line":18578},[34,58506,12871],{"class":55},[34,58508,8475],{"class":44},[34,58510,56],{"class":55},[34,58512,56035],{"class":40},[34,58514,56038],{"class":3617},[34,58516,286],{"class":40},[34,58518,57284],{"class":504},[34,58520,101],{"class":40},[34,58522,58523,58525,58527,58529],{"class":36,"line":34274},[34,58524,53858],{"class":55},[34,58526,11088],{"class":40},[34,58528,221],{"class":55},[34,58530,48972],{"class":44},[34,58532,58533],{"class":36,"line":34280},[34,58534,58535],{"class":161},"    \u002F\u002F 2.开启定时器\n",[34,58537,58538],{"class":36,"line":34286},[34,58539,58540],{"class":161},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[34,58542,58543,58546,58548,58550],{"class":36,"line":34292},[34,58544,58545],{"class":3617},"    setInterval",[34,58547,286],{"class":40},[34,58549,56088],{"class":55},[34,58551,56091],{"class":40},[34,58553,58554,58556],{"class":36,"line":34298},[34,58555,56096],{"class":40},[34,58557,4355],{"class":55},[34,58559,58560,58562,58564,58566,58569,58571],{"class":36,"line":34309},[34,58561,56119],{"class":55},[34,58563,56122],{"class":40},[34,58565,3364],{"class":55},[34,58567,58568],{"class":40}," sliderData.",[34,58570,53607],{"class":44},[34,58572,14090],{"class":40},[34,58574,58575,58578,58580],{"class":36,"line":34315},[34,58576,58577],{"class":40},"        i ",[34,58579,221],{"class":55},[34,58581,48972],{"class":44},[34,58583,58584],{"class":36,"line":34335},[34,58585,54037],{"class":40},[34,58587,58588],{"class":36,"line":34341},[34,58589,58590],{"class":161},"      \u002F\u002F 更换图片路径\n",[34,58592,58593,58595,58597],{"class":36,"line":34352},[34,58594,57360],{"class":40},[34,58596,221],{"class":55},[34,58598,58599],{"class":40}," sliderData[i].url\n",[34,58601,58602],{"class":36,"line":34358},[34,58603,58604],{"class":161},"      \u002F\u002F 把文字写到p里面\n",[34,58606,58607,58609,58611],{"class":36,"line":34364},[34,58608,57370],{"class":40},[34,58610,221],{"class":55},[34,58612,58613],{"class":40}," sliderData[i].title\n",[34,58615,58616],{"class":36,"line":34370},[34,58617,58618],{"class":161},"      \u002F\u002F 小圆点\n",[34,58620,58621],{"class":36,"line":34376},[34,58622,58623],{"class":161},"      \u002F\u002F 先删除以前的active\n",[34,58625,58626],{"class":36,"line":34382},[34,58627,58628],{"class":161},"      \u002F\u002F 只让当前li添加active\n",[34,58630,58631,58633,58635,58637,58640,58643,58646,58648,58650],{"class":36,"line":34388},[34,58632,57410],{"class":40},[34,58634,56038],{"class":3617},[34,58636,286],{"class":40},[34,58638,58639],{"class":504},"'.slider-footer .activate'",[34,58641,58642],{"class":40},").classList.",[34,58644,58645],{"class":3617},"remove",[34,58647,286],{"class":40},[34,58649,57428],{"class":504},[34,58651,101],{"class":40},[34,58653,58654,58656,58658,58660,58663,58665,58667,58669,58672,58674,58676,58678,58680],{"class":36,"line":34394},[34,58655,57410],{"class":40},[34,58657,56038],{"class":3617},[34,58659,286],{"class":40},[34,58661,58662],{"class":504},"`.slider-footer ul li:nth-child(${",[34,58664,2239],{"class":40},[34,58666,47205],{"class":55},[34,58668,26764],{"class":44},[34,58670,58671],{"class":504},"})`",[34,58673,58642],{"class":40},[34,58675,6984],{"class":3617},[34,58677,286],{"class":40},[34,58679,57428],{"class":504},[34,58681,101],{"class":40},[34,58683,58684],{"class":36,"line":34414},[34,58685,1475],{"emptyLinePlaceholder":1474},[34,58687,58688,58690,58692],{"class":36,"line":34420},[34,58689,56174],{"class":40},[34,58691,8060],{"class":44},[34,58693,101],{"class":40},[34,58695,58696],{"class":36,"line":34436},[34,58697,1475],{"emptyLinePlaceholder":1474},[34,58699,58700,58702,58704],{"class":36,"line":34442},[34,58701,54056],{"class":40},[34,58703,53452],{"class":52939},[34,58705,52946],{"class":40},[34,58707,58708,58710,58712],{"class":36,"line":34456},[34,58709,53424],{"class":40},[34,58711,53439],{"class":52939},[34,58713,52946],{"class":40},[34,58715,58716],{"class":36,"line":34462},[34,58717,1475],{"emptyLinePlaceholder":1474},[34,58719,58720,58722,58724],{"class":36,"line":34477},[34,58721,53424],{"class":40},[34,58723,52274],{"class":52939},[34,58725,52946],{"class":40},[19,58727,58729],{"id":58728},"_317-重要知识点","3.1.7 重要知识点",[103,58731,58732,58733],{},"浏览器在渲染文本时， ",[1165,58734,58735],{},"没有空格或换行符就没有“断行点”",[103,58737,58738],{},[109,58739],{"alt":29,"src":58740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[103,58742,58743],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[103,58745,58746],{},[109,58747],{"alt":29,"src":58748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[103,58750,58751],{},[109,58752],{"alt":29,"src":58753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58755,58757],{"id":58756},"_32-dom事件基础","3.2 DOM事件基础",[19,58759,58761],{"id":58760},"_321-事件监听","3.2.1 事件监听",[103,58763,58764],{},[109,58765],{"alt":29,"src":58766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[103,58768,58769],{},"事件监听有响应的发生",[103,58771,58772],{},[109,58773],{"alt":29,"src":58774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[103,58776,58777],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[103,58779,58780],{},"对于有名函数,要执行的函数名后边不要加()",[19,58782,58784],{"id":58783},"_322-随机点名案例","3.2.2 随机点名案例",[24,58786,58788],{"className":52272,"code":58787,"language":52274,"meta":29,"style":29},"\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",[31,58789,58790,58800,58814,58818,58826,58840,58860,58872,58880,58886,58896,58906,58910,58914,58921,58932,58936,58940,58946,58958,58972,58982,58994,59007,59011,59015,59022,59026,59039,59051,59063,59067,59071,59075,59082,59092,59096,59100,59109,59121,59133,59148,59152,59160,59168,59172,59180,59193,59207,59220,59240,59248,59263,59283,59303,59311,59315,59323,59328,59364,59384,59389,59408,59413,59424,59429,59440,59445,59464,59479,59484,59510,59520,59529,59534,59550,59555,59560,59565,59580,59584,59588,59593,59612,59629,59637,59642,59657,59661,59665,59673,59681,59685],{"__ignoreMap":29},[34,58791,58792,58794,58796,58798],{"class":36,"line":37},[34,58793,52936],{"class":40},[34,58795,52940],{"class":52939},[34,58797,52943],{"class":3617},[34,58799,52946],{"class":40},[34,58801,58802,58804,58806,58808,58810,58812],{"class":36,"line":165},[34,58803,2701],{"class":40},[34,58805,52274],{"class":52939},[34,58807,52955],{"class":3617},[34,58809,221],{"class":40},[34,58811,52960],{"class":504},[34,58813,52946],{"class":40},[34,58815,58816],{"class":36,"line":171},[34,58817,1475],{"emptyLinePlaceholder":1474},[34,58819,58820,58822,58824],{"class":36,"line":182},[34,58821,2701],{"class":40},[34,58823,52973],{"class":52939},[34,58825,52946],{"class":40},[34,58827,58828,58830,58832,58834,58836,58838],{"class":36,"line":188},[34,58829,53783],{"class":40},[34,58831,52983],{"class":52939},[34,58833,52986],{"class":3617},[34,58835,221],{"class":40},[34,58837,52991],{"class":504},[34,58839,52946],{"class":40},[34,58841,58842,58844,58846,58848,58850,58852,58854,58856,58858],{"class":36,"line":518},[34,58843,53783],{"class":40},[34,58845,52983],{"class":52939},[34,58847,16566],{"class":3617},[34,58849,221],{"class":40},[34,58851,53030],{"class":504},[34,58853,53010],{"class":3617},[34,58855,221],{"class":40},[34,58857,53037],{"class":504},[34,58859,52946],{"class":40},[34,58861,58862,58864,58866,58868,58870],{"class":36,"line":524},[34,58863,53783],{"class":40},[34,58865,53046],{"class":52939},[34,58867,53049],{"class":40},[34,58869,53046],{"class":52939},[34,58871,52946],{"class":40},[34,58873,58874,58876,58878],{"class":36,"line":530},[34,58875,53783],{"class":40},[34,58877,1711],{"class":52939},[34,58879,52946],{"class":40},[34,58881,58882,58884],{"class":36,"line":624},[34,58883,8053],{"class":52939},[34,58885,17218],{"class":40},[34,58887,58888,58890,58892,58894],{"class":36,"line":630},[34,58889,56345],{"class":44},[34,58891,53076],{"class":40},[34,58893,177],{"class":44},[34,58895,2952],{"class":40},[34,58897,58898,58900,58902,58904],{"class":36,"line":636},[34,58899,56334],{"class":44},[34,58901,53076],{"class":40},[34,58903,177],{"class":44},[34,58905,2952],{"class":40},[34,58907,58908],{"class":36,"line":1513},[34,58909,3841],{"class":40},[34,58911,58912],{"class":36,"line":1519},[34,58913,1475],{"emptyLinePlaceholder":1474},[34,58915,58916,58919],{"class":36,"line":3283},[34,58917,58918],{"class":52939},"    h2",[34,58920,17218],{"class":40},[34,58922,58923,58926,58928,58930],{"class":36,"line":3297},[34,58924,58925],{"class":44},"      text-align",[34,58927,53076],{"class":40},[34,58929,53231],{"class":44},[34,58931,2952],{"class":40},[34,58933,58934],{"class":36,"line":3302},[34,58935,3841],{"class":40},[34,58937,58938],{"class":36,"line":3308},[34,58939,1475],{"emptyLinePlaceholder":1474},[34,58941,58942,58944],{"class":36,"line":3328},[34,58943,56391],{"class":3617},[34,58945,17218],{"class":40},[34,58947,58948,58950,58952,58954,58956],{"class":36,"line":3333},[34,58949,56410],{"class":44},[34,58951,53076],{"class":40},[34,58953,3197],{"class":44},[34,58955,53131],{"class":55},[34,58957,2952],{"class":40},[34,58959,58960,58962,58964,58966,58968,58970],{"class":36,"line":3347},[34,58961,56345],{"class":44},[34,58963,53076],{"class":40},[34,58965,2451],{"class":44},[34,58967,53131],{"class":55},[34,58969,53195],{"class":44},[34,58971,2952],{"class":40},[34,58973,58974,58976,58978,58980],{"class":36,"line":3352},[34,58975,56648],{"class":44},[34,58977,53076],{"class":40},[34,58979,53116],{"class":44},[34,58981,2952],{"class":40},[34,58983,58984,58986,58988,58990,58992],{"class":36,"line":3381},[34,58985,56561],{"class":44},[34,58987,53076],{"class":40},[34,58989,2617],{"class":44},[34,58991,53131],{"class":55},[34,58993,2952],{"class":40},[34,58995,58996,58999,59001,59003,59005],{"class":36,"line":3386},[34,58997,58998],{"class":44},"      line-height",[34,59000,53076],{"class":40},[34,59002,2201],{"class":44},[34,59004,53131],{"class":55},[34,59006,2952],{"class":40},[34,59008,59009],{"class":36,"line":3403},[34,59010,3841],{"class":40},[34,59012,59013],{"class":36,"line":3408},[34,59014,1475],{"emptyLinePlaceholder":1474},[34,59016,59017,59020],{"class":36,"line":3413},[34,59018,59019],{"class":3617},"    .qs",[34,59021,17218],{"class":40},[34,59023,59024],{"class":36,"line":3418},[34,59025,1475],{"emptyLinePlaceholder":1474},[34,59027,59028,59030,59032,59035,59037],{"class":36,"line":3432},[34,59029,56410],{"class":44},[34,59031,53076],{"class":40},[34,59033,59034],{"class":44},"450",[34,59036,53131],{"class":55},[34,59038,2952],{"class":40},[34,59040,59041,59043,59045,59047,59049],{"class":36,"line":3437},[34,59042,56424],{"class":44},[34,59044,53076],{"class":40},[34,59046,2201],{"class":44},[34,59048,53131],{"class":55},[34,59050,2952],{"class":40},[34,59052,59053,59056,59058,59061],{"class":36,"line":4230},[34,59054,59055],{"class":44},"      color",[34,59057,53076],{"class":40},[34,59059,59060],{"class":44},"red",[34,59062,2952],{"class":40},[34,59064,59065],{"class":36,"line":4244},[34,59066,1475],{"emptyLinePlaceholder":1474},[34,59068,59069],{"class":36,"line":4252},[34,59070,3841],{"class":40},[34,59072,59073],{"class":36,"line":4257},[34,59074,1475],{"emptyLinePlaceholder":1474},[34,59076,59077,59080],{"class":36,"line":4263},[34,59078,59079],{"class":3617},"    .btns",[34,59081,17218],{"class":40},[34,59083,59084,59086,59088,59090],{"class":36,"line":4269},[34,59085,58925],{"class":44},[34,59087,53076],{"class":40},[34,59089,53231],{"class":44},[34,59091,2952],{"class":40},[34,59093,59094],{"class":36,"line":4274},[34,59095,3841],{"class":40},[34,59097,59098],{"class":36,"line":9598},[34,59099,1475],{"emptyLinePlaceholder":1474},[34,59101,59102,59104,59107],{"class":36,"line":9622},[34,59103,59079],{"class":3617},[34,59105,59106],{"class":52939}," button",[34,59108,17218],{"class":40},[34,59110,59111,59113,59115,59117,59119],{"class":36,"line":9627},[34,59112,56410],{"class":44},[34,59114,53076],{"class":40},[34,59116,2610],{"class":44},[34,59118,53131],{"class":55},[34,59120,2952],{"class":40},[34,59122,59123,59125,59127,59129,59131],{"class":36,"line":9633},[34,59124,56424],{"class":44},[34,59126,53076],{"class":40},[34,59128,2080],{"class":44},[34,59130,53131],{"class":55},[34,59132,2952],{"class":40},[34,59134,59135,59137,59139,59141,59144,59146],{"class":36,"line":9660},[34,59136,56345],{"class":44},[34,59138,53076],{"class":40},[34,59140,177],{"class":44},[34,59142,59143],{"class":44}," 50",[34,59145,53131],{"class":55},[34,59147,2952],{"class":40},[34,59149,59150],{"class":36,"line":9665},[34,59151,3841],{"class":40},[34,59153,59154,59156,59158],{"class":36,"line":9671},[34,59155,54056],{"class":40},[34,59157,1711],{"class":52939},[34,59159,52946],{"class":40},[34,59161,59162,59164,59166],{"class":36,"line":9683},[34,59163,53424],{"class":40},[34,59165,52973],{"class":52939},[34,59167,52946],{"class":40},[34,59169,59170],{"class":36,"line":9695},[34,59171,1475],{"emptyLinePlaceholder":1474},[34,59173,59174,59176,59178],{"class":36,"line":9707},[34,59175,2701],{"class":40},[34,59177,53439],{"class":52939},[34,59179,52946],{"class":40},[34,59181,59182,59184,59186,59189,59191],{"class":36,"line":11366},[34,59183,53783],{"class":40},[34,59185,14],{"class":52939},[34,59187,59188],{"class":40},">随机点名\u003C\u002F",[34,59190,14],{"class":52939},[34,59192,52946],{"class":40},[34,59194,59195,59197,59199,59201,59203,59205],{"class":36,"line":11391},[34,59196,53783],{"class":40},[34,59198,53250],{"class":52939},[34,59200,55125],{"class":3617},[34,59202,221],{"class":40},[34,59204,55130],{"class":504},[34,59206,52946],{"class":40},[34,59208,59209,59211,59213,59216,59218],{"class":36,"line":11414},[34,59210,52980],{"class":40},[34,59212,34],{"class":52939},[34,59214,59215],{"class":40},">名字是：\u003C\u002F",[34,59217,34],{"class":52939},[34,59219,52946],{"class":40},[34,59221,59222,59224,59226,59228,59230,59233,59236,59238],{"class":36,"line":11438},[34,59223,52980],{"class":40},[34,59225,53250],{"class":52939},[34,59227,55125],{"class":3617},[34,59229,221],{"class":40},[34,59231,59232],{"class":504},"\"qs\"",[34,59234,59235],{"class":40},">这里显示姓名\u003C\u002F",[34,59237,53250],{"class":52939},[34,59239,52946],{"class":40},[34,59241,59242,59244,59246],{"class":36,"line":11443},[34,59243,54056],{"class":40},[34,59245,53250],{"class":52939},[34,59247,52946],{"class":40},[34,59249,59250,59252,59254,59256,59258,59261],{"class":36,"line":11448},[34,59251,53783],{"class":40},[34,59253,53250],{"class":52939},[34,59255,55125],{"class":3617},[34,59257,221],{"class":40},[34,59259,59260],{"class":504},"\"btns\"",[34,59262,52946],{"class":40},[34,59264,59265,59267,59269,59271,59273,59276,59279,59281],{"class":36,"line":11453},[34,59266,52980],{"class":40},[34,59268,55526],{"class":52939},[34,59270,55125],{"class":3617},[34,59272,221],{"class":40},[34,59274,59275],{"class":504},"\"start\"",[34,59277,59278],{"class":40},">开始\u003C\u002F",[34,59280,55526],{"class":52939},[34,59282,52946],{"class":40},[34,59284,59285,59287,59289,59291,59293,59296,59299,59301],{"class":36,"line":11462},[34,59286,52980],{"class":40},[34,59288,55526],{"class":52939},[34,59290,55125],{"class":3617},[34,59292,221],{"class":40},[34,59294,59295],{"class":504},"\"end\"",[34,59297,59298],{"class":40},">结束\u003C\u002F",[34,59300,55526],{"class":52939},[34,59302,52946],{"class":40},[34,59304,59305,59307,59309],{"class":36,"line":11467},[34,59306,54056],{"class":40},[34,59308,53250],{"class":52939},[34,59310,52946],{"class":40},[34,59312,59313],{"class":36,"line":11473},[34,59314,1475],{"emptyLinePlaceholder":1474},[34,59316,59317,59319,59321],{"class":36,"line":11494},[34,59318,53783],{"class":40},[34,59320,53452],{"class":52939},[34,59322,52946],{"class":40},[34,59324,59325],{"class":36,"line":11500},[34,59326,59327],{"class":161},"    \u002F\u002F 数据数组\n",[34,59329,59330,59332,59335,59337,59339,59342,59344,59347,59349,59352,59354,59357,59359,59362],{"class":36,"line":11514},[34,59331,12871],{"class":55},[34,59333,59334],{"class":44}," arr",[34,59336,56],{"class":55},[34,59338,53865],{"class":40},[34,59340,59341],{"class":504},"'马超'",[34,59343,48],{"class":40},[34,59345,59346],{"class":504},"'黄忠'",[34,59348,48],{"class":40},[34,59350,59351],{"class":504},"'赵云'",[34,59353,48],{"class":40},[34,59355,59356],{"class":504},"'关羽'",[34,59358,48],{"class":40},[34,59360,59361],{"class":504},"'张飞'",[34,59363,34887],{"class":40},[34,59365,59366,59368,59371,59373,59375,59377,59379,59382],{"class":36,"line":11520},[34,59367,12871],{"class":55},[34,59369,59370],{"class":44}," qs",[34,59372,56],{"class":55},[34,59374,56035],{"class":40},[34,59376,56038],{"class":3617},[34,59378,286],{"class":40},[34,59380,59381],{"class":504},"'.qs'",[34,59383,101],{"class":40},[34,59385,59386],{"class":36,"line":11547},[34,59387,59388],{"class":161},"    \u002F\u002F 1.业务1.开始按钮模块\n",[34,59390,59391,59393,59395,59397,59399,59401,59403,59406],{"class":36,"line":11556},[34,59392,12871],{"class":55},[34,59394,5836],{"class":44},[34,59396,56],{"class":55},[34,59398,56035],{"class":40},[34,59400,56038],{"class":3617},[34,59402,286],{"class":40},[34,59404,59405],{"class":504},"'.start'",[34,59407,101],{"class":40},[34,59409,59410],{"class":36,"line":11562},[34,59411,59412],{"class":161},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[34,59414,59415,59417,59420,59422],{"class":36,"line":11570},[34,59416,53858],{"class":55},[34,59418,59419],{"class":40}," timerId ",[34,59421,221],{"class":55},[34,59423,48972],{"class":44},[34,59425,59426],{"class":36,"line":11575},[34,59427,59428],{"class":161},"    \u002F\u002F 随机号要全局变量\n",[34,59430,59431,59433,59436,59438],{"class":36,"line":18250},[34,59432,53858],{"class":55},[34,59434,59435],{"class":40}," random ",[34,59437,221],{"class":55},[34,59439,48972],{"class":44},[34,59441,59442],{"class":36,"line":18256},[34,59443,59444],{"class":161},"    \u002F\u002F 1.1 添加点击事件\n",[34,59446,59447,59450,59453,59455,59458,59460,59462],{"class":36,"line":18279},[34,59448,59449],{"class":40},"    start.",[34,59451,59452],{"class":3617},"addEventListener",[34,59454,286],{"class":40},[34,59456,59457],{"class":504},"'click'",[34,59459,48],{"class":40},[34,59461,56088],{"class":55},[34,59463,56091],{"class":40},[34,59465,59466,59469,59471,59473,59475,59477],{"class":36,"line":18285},[34,59467,59468],{"class":40},"      timerId ",[34,59470,221],{"class":55},[34,59472,56083],{"class":3617},[34,59474,286],{"class":40},[34,59476,56088],{"class":55},[34,59478,56091],{"class":40},[34,59480,59481],{"class":36,"line":18308},[34,59482,59483],{"class":161},"        \u002F\u002F 随机数\n",[34,59485,59486,59489,59491,59494,59497,59500,59502,59504,59506,59508],{"class":36,"line":18322},[34,59487,59488],{"class":40},"        random ",[34,59490,221],{"class":55},[34,59492,59493],{"class":3617}," parseInt",[34,59495,59496],{"class":40},"(Math.",[34,59498,59499],{"class":3617},"random",[34,59501,14698],{"class":40},[34,59503,2252],{"class":55},[34,59505,53604],{"class":40},[34,59507,53607],{"class":44},[34,59509,101],{"class":40},[34,59511,59512,59515,59517],{"class":36,"line":18342},[34,59513,59514],{"class":40},"        qs.innerHTML ",[34,59516,221],{"class":55},[34,59518,59519],{"class":40}," arr[random]\n",[34,59521,59522,59525,59527],{"class":36,"line":18348},[34,59523,59524],{"class":40},"      }, ",[34,59526,2080],{"class":44},[34,59528,101],{"class":40},[34,59530,59531],{"class":36,"line":18359},[34,59532,59533],{"class":161},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[34,59535,59536,59538,59541,59543,59546,59548],{"class":36,"line":18382},[34,59537,56119],{"class":55},[34,59539,59540],{"class":40}," (arr.",[34,59542,53607],{"class":44},[34,59544,59545],{"class":55}," ===",[34,59547,26764],{"class":44},[34,59549,14090],{"class":40},[34,59551,59552],{"class":36,"line":18404},[34,59553,59554],{"class":161},"        \u002F\u002F start.disabled = true\n",[34,59556,59557],{"class":36,"line":18409},[34,59558,59559],{"class":161},"        \u002F\u002F end.disabled = true\n",[34,59561,59562],{"class":36,"line":18415},[34,59563,59564],{"class":161},"        \u002F\u002F 可以合起来写\n",[34,59566,59567,59570,59572,59575,59577],{"class":36,"line":18429},[34,59568,59569],{"class":40},"        start.disabled ",[34,59571,221],{"class":55},[34,59573,59574],{"class":40}," end.disabled ",[34,59576,221],{"class":55},[34,59578,59579],{"class":44}," true\n",[34,59581,59582],{"class":36,"line":18442},[34,59583,54037],{"class":40},[34,59585,59586],{"class":36,"line":18447},[34,59587,35102],{"class":40},[34,59589,59590],{"class":36,"line":18461},[34,59591,59592],{"class":161},"    \u002F\u002F 1.2 关闭按钮模块\n",[34,59594,59595,59597,59599,59601,59603,59605,59607,59610],{"class":36,"line":18466},[34,59596,12871],{"class":55},[34,59598,5852],{"class":44},[34,59600,56],{"class":55},[34,59602,56035],{"class":40},[34,59604,56038],{"class":3617},[34,59606,286],{"class":40},[34,59608,59609],{"class":504},"'.end'",[34,59611,101],{"class":40},[34,59613,59614,59617,59619,59621,59623,59625,59627],{"class":36,"line":18472},[34,59615,59616],{"class":40},"    end.",[34,59618,59452],{"class":3617},[34,59620,286],{"class":40},[34,59622,59457],{"class":504},[34,59624,48],{"class":40},[34,59626,56088],{"class":55},[34,59628,56091],{"class":40},[34,59630,59631,59634],{"class":36,"line":18477},[34,59632,59633],{"class":3617},"      clearInterval",[34,59635,59636],{"class":40},"(timerId)\n",[34,59638,59639],{"class":36,"line":18491},[34,59640,59641],{"class":161},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[34,59643,59644,59647,59650,59653,59655],{"class":36,"line":18496},[34,59645,59646],{"class":40},"      arr.",[34,59648,59649],{"class":3617},"splice",[34,59651,59652],{"class":40},"(random, ",[34,59654,394],{"class":44},[34,59656,101],{"class":40},[34,59658,59659],{"class":36,"line":18501},[34,59660,35102],{"class":40},[34,59662,59663],{"class":36,"line":18515},[34,59664,1475],{"emptyLinePlaceholder":1474},[34,59666,59667,59669,59671],{"class":36,"line":18527},[34,59668,54056],{"class":40},[34,59670,53452],{"class":52939},[34,59672,52946],{"class":40},[34,59674,59675,59677,59679],{"class":36,"line":18532},[34,59676,53424],{"class":40},[34,59678,53439],{"class":52939},[34,59680,52946],{"class":40},[34,59682,59683],{"class":36,"line":18545},[34,59684,1475],{"emptyLinePlaceholder":1474},[34,59686,59687,59689,59691],{"class":36,"line":18550},[34,59688,53424],{"class":40},[34,59690,52274],{"class":52939},[34,59692,52946],{"class":40},[103,59694,59695],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[19,59697,59699],{"id":59698},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[24,59701,59703],{"className":52272,"code":59702,"language":52274,"meta":29,"style":29},"\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",[31,59704,59705,59715,59729,59733,59741,59755,59775,59787,59795,59799,59807,59819,59827,59846,59863,59879,59889,59893,59901,59909,59913],{"__ignoreMap":29},[34,59706,59707,59709,59711,59713],{"class":36,"line":37},[34,59708,52936],{"class":40},[34,59710,52940],{"class":52939},[34,59712,52943],{"class":3617},[34,59714,52946],{"class":40},[34,59716,59717,59719,59721,59723,59725,59727],{"class":36,"line":165},[34,59718,2701],{"class":40},[34,59720,52274],{"class":52939},[34,59722,52955],{"class":3617},[34,59724,221],{"class":40},[34,59726,52960],{"class":504},[34,59728,52946],{"class":40},[34,59730,59731],{"class":36,"line":171},[34,59732,1475],{"emptyLinePlaceholder":1474},[34,59734,59735,59737,59739],{"class":36,"line":182},[34,59736,2701],{"class":40},[34,59738,52973],{"class":52939},[34,59740,52946],{"class":40},[34,59742,59743,59745,59747,59749,59751,59753],{"class":36,"line":188},[34,59744,53783],{"class":40},[34,59746,52983],{"class":52939},[34,59748,52986],{"class":3617},[34,59750,221],{"class":40},[34,59752,52991],{"class":504},[34,59754,52946],{"class":40},[34,59756,59757,59759,59761,59763,59765,59767,59769,59771,59773],{"class":36,"line":518},[34,59758,53783],{"class":40},[34,59760,52983],{"class":52939},[34,59762,16566],{"class":3617},[34,59764,221],{"class":40},[34,59766,53030],{"class":504},[34,59768,53010],{"class":3617},[34,59770,221],{"class":40},[34,59772,53037],{"class":504},[34,59774,52946],{"class":40},[34,59776,59777,59779,59781,59783,59785],{"class":36,"line":524},[34,59778,53783],{"class":40},[34,59780,53046],{"class":52939},[34,59782,53049],{"class":40},[34,59784,53046],{"class":52939},[34,59786,52946],{"class":40},[34,59788,59789,59791,59793],{"class":36,"line":530},[34,59790,53424],{"class":40},[34,59792,52973],{"class":52939},[34,59794,52946],{"class":40},[34,59796,59797],{"class":36,"line":624},[34,59798,1475],{"emptyLinePlaceholder":1474},[34,59800,59801,59803,59805],{"class":36,"line":630},[34,59802,2701],{"class":40},[34,59804,53439],{"class":52939},[34,59806,52946],{"class":40},[34,59808,59809,59811,59813,59815,59817],{"class":36,"line":636},[34,59810,53783],{"class":40},[34,59812,55526],{"class":52939},[34,59814,55532],{"class":40},[34,59816,55526],{"class":52939},[34,59818,52946],{"class":40},[34,59820,59821,59823,59825],{"class":36,"line":1513},[34,59822,53783],{"class":40},[34,59824,53452],{"class":52939},[34,59826,52946],{"class":40},[34,59828,59829,59831,59833,59835,59837,59839,59841,59844],{"class":36,"line":1519},[34,59830,12871],{"class":55},[34,59832,56030],{"class":44},[34,59834,56],{"class":55},[34,59836,56035],{"class":40},[34,59838,56038],{"class":3617},[34,59840,286],{"class":40},[34,59842,59843],{"class":504},"'button'",[34,59845,101],{"class":40},[34,59847,59848,59851,59853,59855,59857,59859,59861],{"class":36,"line":3283},[34,59849,59850],{"class":40},"    btn.",[34,59852,59452],{"class":3617},[34,59854,286],{"class":40},[34,59856,59457],{"class":504},[34,59858,48],{"class":40},[34,59860,56088],{"class":55},[34,59862,56091],{"class":40},[34,59864,59865,59868,59870,59872,59875,59877],{"class":36,"line":3297},[34,59866,59867],{"class":55},"      const",[34,59869,3894],{"class":44},[34,59871,56],{"class":55},[34,59873,59874],{"class":40}," Math.",[34,59876,59499],{"class":3617},[34,59878,3630],{"class":40},[34,59880,59881,59884,59887],{"class":36,"line":3302},[34,59882,59883],{"class":40},"      console.",[34,59885,59886],{"class":3617},"log",[34,59888,1831],{"class":40},[34,59890,59891],{"class":36,"line":3308},[34,59892,35102],{"class":40},[34,59894,59895,59897,59899],{"class":36,"line":3328},[34,59896,54056],{"class":40},[34,59898,53452],{"class":52939},[34,59900,52946],{"class":40},[34,59902,59903,59905,59907],{"class":36,"line":3333},[34,59904,53424],{"class":40},[34,59906,53439],{"class":52939},[34,59908,52946],{"class":40},[34,59910,59911],{"class":36,"line":3347},[34,59912,1475],{"emptyLinePlaceholder":1474},[34,59914,59915,59917,59919],{"class":36,"line":3352},[34,59916,53424],{"class":40},[34,59918,52274],{"class":52939},[34,59920,52946],{"class":40},[103,59922,59923],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[103,59925,59926],{},"常量不可以重新赋值",[103,59928,59929],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[24,59931,59933],{"className":52272,"code":59932,"language":52274,"meta":29,"style":29},"\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",[31,59934,59935,59945,59959,59963,59971,59985,60005,60017,60025,60029,60037,60049,60057,60068,60086,60102,60116,60124,60128,60136,60144,60148],{"__ignoreMap":29},[34,59936,59937,59939,59941,59943],{"class":36,"line":37},[34,59938,52936],{"class":40},[34,59940,52940],{"class":52939},[34,59942,52943],{"class":3617},[34,59944,52946],{"class":40},[34,59946,59947,59949,59951,59953,59955,59957],{"class":36,"line":165},[34,59948,2701],{"class":40},[34,59950,52274],{"class":52939},[34,59952,52955],{"class":3617},[34,59954,221],{"class":40},[34,59956,52960],{"class":504},[34,59958,52946],{"class":40},[34,59960,59961],{"class":36,"line":171},[34,59962,1475],{"emptyLinePlaceholder":1474},[34,59964,59965,59967,59969],{"class":36,"line":182},[34,59966,2701],{"class":40},[34,59968,52973],{"class":52939},[34,59970,52946],{"class":40},[34,59972,59973,59975,59977,59979,59981,59983],{"class":36,"line":188},[34,59974,53783],{"class":40},[34,59976,52983],{"class":52939},[34,59978,52986],{"class":3617},[34,59980,221],{"class":40},[34,59982,52991],{"class":504},[34,59984,52946],{"class":40},[34,59986,59987,59989,59991,59993,59995,59997,59999,60001,60003],{"class":36,"line":518},[34,59988,53783],{"class":40},[34,59990,52983],{"class":52939},[34,59992,16566],{"class":3617},[34,59994,221],{"class":40},[34,59996,53030],{"class":504},[34,59998,53010],{"class":3617},[34,60000,221],{"class":40},[34,60002,53037],{"class":504},[34,60004,52946],{"class":40},[34,60006,60007,60009,60011,60013,60015],{"class":36,"line":524},[34,60008,53783],{"class":40},[34,60010,53046],{"class":52939},[34,60012,53049],{"class":40},[34,60014,53046],{"class":52939},[34,60016,52946],{"class":40},[34,60018,60019,60021,60023],{"class":36,"line":530},[34,60020,53424],{"class":40},[34,60022,52973],{"class":52939},[34,60024,52946],{"class":40},[34,60026,60027],{"class":36,"line":624},[34,60028,1475],{"emptyLinePlaceholder":1474},[34,60030,60031,60033,60035],{"class":36,"line":630},[34,60032,2701],{"class":40},[34,60034,53439],{"class":52939},[34,60036,52946],{"class":40},[34,60038,60039,60041,60043,60045,60047],{"class":36,"line":636},[34,60040,53783],{"class":40},[34,60042,55526],{"class":52939},[34,60044,55532],{"class":40},[34,60046,55526],{"class":52939},[34,60048,52946],{"class":40},[34,60050,60051,60053,60055],{"class":36,"line":1513},[34,60052,53783],{"class":40},[34,60054,53452],{"class":52939},[34,60056,52946],{"class":40},[34,60058,60059,60061,60063,60065],{"class":36,"line":1519},[34,60060,12871],{"class":55},[34,60062,3894],{"class":44},[34,60064,56],{"class":55},[34,60066,60067],{"class":44}," 10\n",[34,60069,60070,60072,60074,60076,60078,60080,60082,60084],{"class":36,"line":3283},[34,60071,12871],{"class":55},[34,60073,56030],{"class":44},[34,60075,56],{"class":55},[34,60077,56035],{"class":40},[34,60079,56038],{"class":3617},[34,60081,286],{"class":40},[34,60083,59843],{"class":504},[34,60085,101],{"class":40},[34,60087,60088,60090,60092,60094,60096,60098,60100],{"class":36,"line":3297},[34,60089,59850],{"class":40},[34,60091,59452],{"class":3617},[34,60093,286],{"class":40},[34,60095,59457],{"class":504},[34,60097,48],{"class":40},[34,60099,56088],{"class":55},[34,60101,56091],{"class":40},[34,60103,60104,60106,60108,60110,60112,60114],{"class":36,"line":3302},[34,60105,59867],{"class":55},[34,60107,3894],{"class":44},[34,60109,56],{"class":55},[34,60111,59874],{"class":40},[34,60113,59499],{"class":3617},[34,60115,3630],{"class":40},[34,60117,60118,60120,60122],{"class":36,"line":3308},[34,60119,59883],{"class":40},[34,60121,59886],{"class":3617},[34,60123,1831],{"class":40},[34,60125,60126],{"class":36,"line":3328},[34,60127,35102],{"class":40},[34,60129,60130,60132,60134],{"class":36,"line":3333},[34,60131,54056],{"class":40},[34,60133,53452],{"class":52939},[34,60135,52946],{"class":40},[34,60137,60138,60140,60142],{"class":36,"line":3347},[34,60139,53424],{"class":40},[34,60141,53439],{"class":52939},[34,60143,52946],{"class":40},[34,60145,60146],{"class":36,"line":3352},[34,60147,1475],{"emptyLinePlaceholder":1474},[34,60149,60150,60152,60154],{"class":36,"line":3381},[34,60151,53424],{"class":40},[34,60153,52274],{"class":52939},[34,60155,52946],{"class":40},[103,60157,60158],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[24,60160,60162],{"className":52272,"code":60161,"language":52274,"meta":29,"style":29},"\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",[31,60163,60164,60174,60188,60192,60200,60214,60234,60246,60254,60258,60266,60278,60286,60296,60314,60330,60343,60351,60355,60363,60371,60375],{"__ignoreMap":29},[34,60165,60166,60168,60170,60172],{"class":36,"line":37},[34,60167,52936],{"class":40},[34,60169,52940],{"class":52939},[34,60171,52943],{"class":3617},[34,60173,52946],{"class":40},[34,60175,60176,60178,60180,60182,60184,60186],{"class":36,"line":165},[34,60177,2701],{"class":40},[34,60179,52274],{"class":52939},[34,60181,52955],{"class":3617},[34,60183,221],{"class":40},[34,60185,52960],{"class":504},[34,60187,52946],{"class":40},[34,60189,60190],{"class":36,"line":171},[34,60191,1475],{"emptyLinePlaceholder":1474},[34,60193,60194,60196,60198],{"class":36,"line":182},[34,60195,2701],{"class":40},[34,60197,52973],{"class":52939},[34,60199,52946],{"class":40},[34,60201,60202,60204,60206,60208,60210,60212],{"class":36,"line":188},[34,60203,53783],{"class":40},[34,60205,52983],{"class":52939},[34,60207,52986],{"class":3617},[34,60209,221],{"class":40},[34,60211,52991],{"class":504},[34,60213,52946],{"class":40},[34,60215,60216,60218,60220,60222,60224,60226,60228,60230,60232],{"class":36,"line":518},[34,60217,53783],{"class":40},[34,60219,52983],{"class":52939},[34,60221,16566],{"class":3617},[34,60223,221],{"class":40},[34,60225,53030],{"class":504},[34,60227,53010],{"class":3617},[34,60229,221],{"class":40},[34,60231,53037],{"class":504},[34,60233,52946],{"class":40},[34,60235,60236,60238,60240,60242,60244],{"class":36,"line":524},[34,60237,53783],{"class":40},[34,60239,53046],{"class":52939},[34,60241,53049],{"class":40},[34,60243,53046],{"class":52939},[34,60245,52946],{"class":40},[34,60247,60248,60250,60252],{"class":36,"line":530},[34,60249,53424],{"class":40},[34,60251,52973],{"class":52939},[34,60253,52946],{"class":40},[34,60255,60256],{"class":36,"line":624},[34,60257,1475],{"emptyLinePlaceholder":1474},[34,60259,60260,60262,60264],{"class":36,"line":630},[34,60261,2701],{"class":40},[34,60263,53439],{"class":52939},[34,60265,52946],{"class":40},[34,60267,60268,60270,60272,60274,60276],{"class":36,"line":636},[34,60269,53783],{"class":40},[34,60271,55526],{"class":52939},[34,60273,55532],{"class":40},[34,60275,55526],{"class":52939},[34,60277,52946],{"class":40},[34,60279,60280,60282,60284],{"class":36,"line":1513},[34,60281,53783],{"class":40},[34,60283,53452],{"class":52939},[34,60285,52946],{"class":40},[34,60287,60288,60290,60292,60294],{"class":36,"line":1519},[34,60289,12871],{"class":55},[34,60291,3894],{"class":44},[34,60293,56],{"class":55},[34,60295,60067],{"class":44},[34,60297,60298,60300,60302,60304,60306,60308,60310,60312],{"class":36,"line":3283},[34,60299,12871],{"class":55},[34,60301,56030],{"class":44},[34,60303,56],{"class":55},[34,60305,56035],{"class":40},[34,60307,56038],{"class":3617},[34,60309,286],{"class":40},[34,60311,59843],{"class":504},[34,60313,101],{"class":40},[34,60315,60316,60318,60320,60322,60324,60326,60328],{"class":36,"line":3297},[34,60317,59850],{"class":40},[34,60319,59452],{"class":3617},[34,60321,286],{"class":40},[34,60323,59457],{"class":504},[34,60325,48],{"class":40},[34,60327,56088],{"class":55},[34,60329,56091],{"class":40},[34,60331,60332,60335,60337,60339,60341],{"class":36,"line":3302},[34,60333,60334],{"class":40},"      num ",[34,60336,221],{"class":55},[34,60338,59874],{"class":40},[34,60340,59499],{"class":3617},[34,60342,3630],{"class":40},[34,60344,60345,60347,60349],{"class":36,"line":3308},[34,60346,59883],{"class":40},[34,60348,59886],{"class":3617},[34,60350,1831],{"class":40},[34,60352,60353],{"class":36,"line":3328},[34,60354,35102],{"class":40},[34,60356,60357,60359,60361],{"class":36,"line":3333},[34,60358,54056],{"class":40},[34,60360,53452],{"class":52939},[34,60362,52946],{"class":40},[34,60364,60365,60367,60369],{"class":36,"line":3347},[34,60366,53424],{"class":40},[34,60368,53439],{"class":52939},[34,60370,52946],{"class":40},[34,60372,60373],{"class":36,"line":3352},[34,60374,1475],{"emptyLinePlaceholder":1474},[34,60376,60377,60379,60381],{"class":36,"line":3381},[34,60378,53424],{"class":40},[34,60380,52274],{"class":52939},[34,60382,52946],{"class":40},[103,60384,60385],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[19,60387,60389],{"id":60388},"_324-事件监听版本","3.2.4 事件监听版本",[103,60391,60392],{},[109,60393],{"alt":29,"src":60394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[103,60396,60397],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[103,60399,60400],{},"这种方式会覆盖前边的事件监听:",[24,60402,60404],{"className":52272,"code":60403,"language":52274,"meta":29,"style":29},"\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",[31,60405,60406,60416,60430,60434,60442,60456,60476,60488,60496,60500,60508,60520,60528,60546,60560,60571,60575,60587,60597,60601,60609,60617,60621],{"__ignoreMap":29},[34,60407,60408,60410,60412,60414],{"class":36,"line":37},[34,60409,52936],{"class":40},[34,60411,52940],{"class":52939},[34,60413,52943],{"class":3617},[34,60415,52946],{"class":40},[34,60417,60418,60420,60422,60424,60426,60428],{"class":36,"line":165},[34,60419,2701],{"class":40},[34,60421,52274],{"class":52939},[34,60423,52955],{"class":3617},[34,60425,221],{"class":40},[34,60427,52960],{"class":504},[34,60429,52946],{"class":40},[34,60431,60432],{"class":36,"line":171},[34,60433,1475],{"emptyLinePlaceholder":1474},[34,60435,60436,60438,60440],{"class":36,"line":182},[34,60437,2701],{"class":40},[34,60439,52973],{"class":52939},[34,60441,52946],{"class":40},[34,60443,60444,60446,60448,60450,60452,60454],{"class":36,"line":188},[34,60445,53783],{"class":40},[34,60447,52983],{"class":52939},[34,60449,52986],{"class":3617},[34,60451,221],{"class":40},[34,60453,52991],{"class":504},[34,60455,52946],{"class":40},[34,60457,60458,60460,60462,60464,60466,60468,60470,60472,60474],{"class":36,"line":518},[34,60459,53783],{"class":40},[34,60461,52983],{"class":52939},[34,60463,16566],{"class":3617},[34,60465,221],{"class":40},[34,60467,53030],{"class":504},[34,60469,53010],{"class":3617},[34,60471,221],{"class":40},[34,60473,53037],{"class":504},[34,60475,52946],{"class":40},[34,60477,60478,60480,60482,60484,60486],{"class":36,"line":524},[34,60479,53783],{"class":40},[34,60481,53046],{"class":52939},[34,60483,53049],{"class":40},[34,60485,53046],{"class":52939},[34,60487,52946],{"class":40},[34,60489,60490,60492,60494],{"class":36,"line":530},[34,60491,53424],{"class":40},[34,60493,52973],{"class":52939},[34,60495,52946],{"class":40},[34,60497,60498],{"class":36,"line":624},[34,60499,1475],{"emptyLinePlaceholder":1474},[34,60501,60502,60504,60506],{"class":36,"line":630},[34,60503,2701],{"class":40},[34,60505,53439],{"class":52939},[34,60507,52946],{"class":40},[34,60509,60510,60512,60514,60516,60518],{"class":36,"line":636},[34,60511,53783],{"class":40},[34,60513,55526],{"class":52939},[34,60515,55532],{"class":40},[34,60517,55526],{"class":52939},[34,60519,52946],{"class":40},[34,60521,60522,60524,60526],{"class":36,"line":1513},[34,60523,53783],{"class":40},[34,60525,53452],{"class":52939},[34,60527,52946],{"class":40},[34,60529,60530,60532,60534,60536,60538,60540,60542,60544],{"class":36,"line":1519},[34,60531,12871],{"class":55},[34,60533,56030],{"class":44},[34,60535,56],{"class":55},[34,60537,56035],{"class":40},[34,60539,56038],{"class":3617},[34,60541,286],{"class":40},[34,60543,59843],{"class":504},[34,60545,101],{"class":40},[34,60547,60548,60550,60553,60555,60558],{"class":36,"line":3283},[34,60549,59850],{"class":40},[34,60551,60552],{"class":3617},"onclick",[34,60554,56],{"class":55},[34,60556,60557],{"class":55}," function",[34,60559,56091],{"class":40},[34,60561,60562,60565,60567,60569],{"class":36,"line":3297},[34,60563,60564],{"class":3617},"      alert",[34,60566,286],{"class":40},[34,60568,399],{"class":44},[34,60570,101],{"class":40},[34,60572,60573],{"class":36,"line":3302},[34,60574,3841],{"class":40},[34,60576,60577,60579,60581,60583,60585],{"class":36,"line":3308},[34,60578,59850],{"class":40},[34,60580,60552],{"class":3617},[34,60582,56],{"class":55},[34,60584,60557],{"class":55},[34,60586,56091],{"class":40},[34,60588,60589,60591,60593,60595],{"class":36,"line":3328},[34,60590,60564],{"class":3617},[34,60592,286],{"class":40},[34,60594,2543],{"class":44},[34,60596,101],{"class":40},[34,60598,60599],{"class":36,"line":3333},[34,60600,3841],{"class":40},[34,60602,60603,60605,60607],{"class":36,"line":3347},[34,60604,54056],{"class":40},[34,60606,53452],{"class":52939},[34,60608,52946],{"class":40},[34,60610,60611,60613,60615],{"class":36,"line":3352},[34,60612,53424],{"class":40},[34,60614,53439],{"class":52939},[34,60616,52946],{"class":40},[34,60618,60619],{"class":36,"line":3381},[34,60620,1475],{"emptyLinePlaceholder":1474},[34,60622,60623,60625,60627],{"class":36,"line":3386},[34,60624,53424],{"class":40},[34,60626,52274],{"class":52939},[34,60628,52946],{"class":40},[103,60630,60631],{},"只要点击就输出结果为22,前边11被覆盖了",[24,60633,60635],{"className":52272,"code":60634,"language":52274,"meta":29,"style":29},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[31,60636,60637,60642,60647,60651,60656,60661],{"__ignoreMap":29},[34,60638,60639],{"class":36,"line":37},[34,60640,60641],{"class":40},"  btn.addEventListener('click', function () {\n",[34,60643,60644],{"class":36,"line":165},[34,60645,60646],{"class":40},"      alert(11)\n",[34,60648,60649],{"class":36,"line":171},[34,60650,35102],{"class":40},[34,60652,60653],{"class":36,"line":182},[34,60654,60655],{"class":40},"    btn.addEventListener('click', function () {\n",[34,60657,60658],{"class":36,"line":188},[34,60659,60660],{"class":40},"      alert(22)\n",[34,60662,60663],{"class":36,"line":518},[34,60664,35102],{"class":40},[103,60666,60667],{},"点击第一次输出11,第二次点击为22",[19,60669,60671],{"id":60670},"_325-事件类型","3.2.5 事件类型",[103,60673,60674],{},[109,60675],{"alt":29,"src":60676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[1353,60678,60680],{"id":60679},"_3251-鼠标事件","3.2.5.1 鼠标事件",[103,60682,60683],{},"补充知识:",[103,60685,60686],{},"轮播图自动播放模块,可以使用",[103,60688,60689],{},"let timerId = setInterval(function () {",[103,60691,60692],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[103,60694,60695],{},"用js方法模拟进行点击事件,click必须加()",[103,60697,60698],{},"next.click()",[103,60700,60701],{},"}, 1000)",[103,60703,60704],{},[109,60705],{"alt":29,"src":60706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[24,60708,60710],{"className":54706,"code":60709,"language":54708,"meta":29,"style":29},"\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",[31,60711,60712,60716,60726,60740,60744,60752,60767,60787,60807,60820,60828,60833,60838,60842,60846,60851,60856,60861,60866,60870,60874,60879,60884,60889,60893,60897,60902,60906,60911,60916,60920,60924,60929,60934,60939,60944,60949,60953,60957,60962,60967,60972,60977,60982,60986,60990,60995,61000,61005,61010,61015,61020,61025,61030,61035,61040,61044,61048,61053,61058,61062,61066,61071,61076,61080,61085,61090,61094,61098,61103,61107,61112,61117,61121,61126,61130,61134,61139,61144,61149,61154,61159,61164,61169,61173,61177,61181,61186,61191,61196,61201,61205,61213,61221,61225,61233,61248,61262,61283,61291,61305,61318,61333,61352,61364,61376,61388,61400,61412,61424,61436,61444,61459,61483,61507,61515,61523,61531,61539,61544,61549,61554,61559,61564,61569,61574,61579,61584,61589,61593,61598,61603,61608,61613,61618,61623,61628,61633,61638,61642,61647,61652,61657,61662,61667,61672,61677,61682,61687,61692,61697,61702,61706,61710,61715,61720,61725,61729,61734,61739,61744,61749,61754,61758,61763,61767,61771,61775,61779,61783,61787,61792,61797,61802,61807,61812,61817,61822,61827,61832,61836,61840,61845,61850,61855,61860,61865,61869,61874,61879,61884,61889,61894,61899,61903,61907,61912,61916,61921,61925,61930,61935,61940,61945,61950,61955,61959,61967,61975,61979],{"__ignoreMap":29},[34,60713,60714],{"class":36,"line":37},[34,60715,1475],{"emptyLinePlaceholder":1474},[34,60717,60718,60720,60722,60724],{"class":36,"line":165},[34,60719,52936],{"class":40},[34,60721,52940],{"class":55},[34,60723,52943],{"class":44},[34,60725,52946],{"class":40},[34,60727,60728,60730,60732,60734,60736,60738],{"class":36,"line":171},[34,60729,2701],{"class":40},[34,60731,52274],{"class":52939},[34,60733,52955],{"class":3617},[34,60735,221],{"class":40},[34,60737,52960],{"class":504},[34,60739,52946],{"class":40},[34,60741,60742],{"class":36,"line":182},[34,60743,1475],{"emptyLinePlaceholder":1474},[34,60745,60746,60748,60750],{"class":36,"line":188},[34,60747,2701],{"class":40},[34,60749,52973],{"class":52939},[34,60751,52946],{"class":40},[34,60753,60754,60756,60758,60760,60762,60764],{"class":36,"line":518},[34,60755,53783],{"class":40},[34,60757,52983],{"class":52939},[34,60759,52986],{"class":3617},[34,60761,221],{"class":40},[34,60763,52991],{"class":504},[34,60765,60766],{"class":40}," \u002F>\n",[34,60768,60769,60771,60773,60775,60777,60779,60781,60783,60785],{"class":36,"line":524},[34,60770,53783],{"class":40},[34,60772,52983],{"class":52939},[34,60774,53002],{"class":3617},[34,60776,221],{"class":40},[34,60778,53007],{"class":504},[34,60780,53010],{"class":3617},[34,60782,221],{"class":40},[34,60784,53015],{"class":504},[34,60786,60766],{"class":40},[34,60788,60789,60791,60793,60795,60797,60799,60801,60803,60805],{"class":36,"line":530},[34,60790,53783],{"class":40},[34,60792,52983],{"class":52939},[34,60794,16566],{"class":3617},[34,60796,221],{"class":40},[34,60798,53030],{"class":504},[34,60800,53010],{"class":3617},[34,60802,221],{"class":40},[34,60804,53037],{"class":504},[34,60806,60766],{"class":40},[34,60808,60809,60811,60813,60816,60818],{"class":36,"line":624},[34,60810,53783],{"class":40},[34,60812,53046],{"class":52939},[34,60814,60815],{"class":40},">轮播图点击切换\u003C\u002F",[34,60817,53046],{"class":52939},[34,60819,52946],{"class":40},[34,60821,60822,60824,60826],{"class":36,"line":630},[34,60823,53783],{"class":40},[34,60825,1711],{"class":52939},[34,60827,52946],{"class":40},[34,60829,60830],{"class":36,"line":636},[34,60831,60832],{"class":40},"    * {\n",[34,60834,60835],{"class":36,"line":1513},[34,60836,60837],{"class":40},"      box-sizing: border-box;\n",[34,60839,60840],{"class":36,"line":1519},[34,60841,3841],{"class":40},[34,60843,60844],{"class":36,"line":3283},[34,60845,1475],{"emptyLinePlaceholder":1474},[34,60847,60848],{"class":36,"line":3297},[34,60849,60850],{"class":40},"    .slider {\n",[34,60852,60853],{"class":36,"line":3302},[34,60854,60855],{"class":40},"      width: 560px;\n",[34,60857,60858],{"class":36,"line":3308},[34,60859,60860],{"class":40},"      height: 400px;\n",[34,60862,60863],{"class":36,"line":3328},[34,60864,60865],{"class":40},"      overflow: hidden;\n",[34,60867,60868],{"class":36,"line":3333},[34,60869,3841],{"class":40},[34,60871,60872],{"class":36,"line":3347},[34,60873,1475],{"emptyLinePlaceholder":1474},[34,60875,60876],{"class":36,"line":3352},[34,60877,60878],{"class":40},"    .slider-wrapper {\n",[34,60880,60881],{"class":36,"line":3381},[34,60882,60883],{"class":40},"      width: 100%;\n",[34,60885,60886],{"class":36,"line":3386},[34,60887,60888],{"class":40},"      height: 320px;\n",[34,60890,60891],{"class":36,"line":3403},[34,60892,3841],{"class":40},[34,60894,60895],{"class":36,"line":3408},[34,60896,1475],{"emptyLinePlaceholder":1474},[34,60898,60899],{"class":36,"line":3413},[34,60900,60901],{"class":40},"    .slider-wrapper img {\n",[34,60903,60904],{"class":36,"line":3418},[34,60905,60883],{"class":40},[34,60907,60908],{"class":36,"line":3432},[34,60909,60910],{"class":40},"      height: 100%;\n",[34,60912,60913],{"class":36,"line":3437},[34,60914,60915],{"class":40},"      display: block;\n",[34,60917,60918],{"class":36,"line":4230},[34,60919,3841],{"class":40},[34,60921,60922],{"class":36,"line":4244},[34,60923,1475],{"emptyLinePlaceholder":1474},[34,60925,60926],{"class":36,"line":4252},[34,60927,60928],{"class":40},"    .slider-footer {\n",[34,60930,60931],{"class":36,"line":4257},[34,60932,60933],{"class":40},"      height: 80px;\n",[34,60935,60936],{"class":36,"line":4263},[34,60937,60938],{"class":40},"      background-color: rgb(100, 67, 68);\n",[34,60940,60941],{"class":36,"line":4269},[34,60942,60943],{"class":40},"      padding: 12px 12px 0 12px;\n",[34,60945,60946],{"class":36,"line":4274},[34,60947,60948],{"class":40},"      position: relative;\n",[34,60950,60951],{"class":36,"line":9598},[34,60952,3841],{"class":40},[34,60954,60955],{"class":36,"line":9622},[34,60956,1475],{"emptyLinePlaceholder":1474},[34,60958,60959],{"class":36,"line":9627},[34,60960,60961],{"class":40},"    .slider-footer .toggle {\n",[34,60963,60964],{"class":36,"line":9633},[34,60965,60966],{"class":40},"      position: absolute;\n",[34,60968,60969],{"class":36,"line":9660},[34,60970,60971],{"class":40},"      right: 0;\n",[34,60973,60974],{"class":36,"line":9665},[34,60975,60976],{"class":40},"      top: 12px;\n",[34,60978,60979],{"class":36,"line":9671},[34,60980,60981],{"class":40},"      display: flex;\n",[34,60983,60984],{"class":36,"line":9683},[34,60985,3841],{"class":40},[34,60987,60988],{"class":36,"line":9695},[34,60989,1475],{"emptyLinePlaceholder":1474},[34,60991,60992],{"class":36,"line":9707},[34,60993,60994],{"class":40},"    .slider-footer .toggle button {\n",[34,60996,60997],{"class":36,"line":11366},[34,60998,60999],{"class":40},"      margin-right: 12px;\n",[34,61001,61002],{"class":36,"line":11391},[34,61003,61004],{"class":40},"      width: 28px;\n",[34,61006,61007],{"class":36,"line":11414},[34,61008,61009],{"class":40},"      height: 28px;\n",[34,61011,61012],{"class":36,"line":11438},[34,61013,61014],{"class":40},"      appearance: none;\n",[34,61016,61017],{"class":36,"line":11443},[34,61018,61019],{"class":40},"      border: none;\n",[34,61021,61022],{"class":36,"line":11448},[34,61023,61024],{"class":40},"      background: rgba(255, 255, 255, 0.1);\n",[34,61026,61027],{"class":36,"line":11453},[34,61028,61029],{"class":40},"      color: #fff;\n",[34,61031,61032],{"class":36,"line":11462},[34,61033,61034],{"class":40},"      border-radius: 4px;\n",[34,61036,61037],{"class":36,"line":11467},[34,61038,61039],{"class":40},"      cursor: pointer;\n",[34,61041,61042],{"class":36,"line":11473},[34,61043,3841],{"class":40},[34,61045,61046],{"class":36,"line":11494},[34,61047,1475],{"emptyLinePlaceholder":1474},[34,61049,61050],{"class":36,"line":11500},[34,61051,61052],{"class":40},"    .slider-footer .toggle button:hover {\n",[34,61054,61055],{"class":36,"line":11514},[34,61056,61057],{"class":40},"      background: rgba(255, 255, 255, 0.2);\n",[34,61059,61060],{"class":36,"line":11520},[34,61061,3841],{"class":40},[34,61063,61064],{"class":36,"line":11547},[34,61065,1475],{"emptyLinePlaceholder":1474},[34,61067,61068],{"class":36,"line":11556},[34,61069,61070],{"class":40},"    .slider-footer p {\n",[34,61072,61073],{"class":36,"line":11562},[34,61074,61075],{"class":40},"      margin: 0;\n",[34,61077,61078],{"class":36,"line":11570},[34,61079,61029],{"class":40},[34,61081,61082],{"class":36,"line":11575},[34,61083,61084],{"class":40},"      font-size: 18px;\n",[34,61086,61087],{"class":36,"line":18250},[34,61088,61089],{"class":40},"      margin-bottom: 10px;\n",[34,61091,61092],{"class":36,"line":18256},[34,61093,3841],{"class":40},[34,61095,61096],{"class":36,"line":18279},[34,61097,1475],{"emptyLinePlaceholder":1474},[34,61099,61100],{"class":36,"line":18285},[34,61101,61102],{"class":40},"    .slider-indicator {\n",[34,61104,61105],{"class":36,"line":18308},[34,61106,61075],{"class":40},[34,61108,61109],{"class":36,"line":18322},[34,61110,61111],{"class":40},"      padding: 0;\n",[34,61113,61114],{"class":36,"line":18342},[34,61115,61116],{"class":40},"      list-style: none;\n",[34,61118,61119],{"class":36,"line":18348},[34,61120,60981],{"class":40},[34,61122,61123],{"class":36,"line":18359},[34,61124,61125],{"class":40},"      align-items: center;\n",[34,61127,61128],{"class":36,"line":18382},[34,61129,3841],{"class":40},[34,61131,61132],{"class":36,"line":18404},[34,61133,1475],{"emptyLinePlaceholder":1474},[34,61135,61136],{"class":36,"line":18409},[34,61137,61138],{"class":40},"    .slider-indicator li {\n",[34,61140,61141],{"class":36,"line":18415},[34,61142,61143],{"class":40},"      width: 8px;\n",[34,61145,61146],{"class":36,"line":18429},[34,61147,61148],{"class":40},"      height: 8px;\n",[34,61150,61151],{"class":36,"line":18442},[34,61152,61153],{"class":40},"      margin: 4px;\n",[34,61155,61156],{"class":36,"line":18447},[34,61157,61158],{"class":40},"      border-radius: 50%;\n",[34,61160,61161],{"class":36,"line":18461},[34,61162,61163],{"class":40},"      background: #fff;\n",[34,61165,61166],{"class":36,"line":18466},[34,61167,61168],{"class":40},"      opacity: 0.4;\n",[34,61170,61171],{"class":36,"line":18472},[34,61172,61039],{"class":40},[34,61174,61175],{"class":36,"line":18477},[34,61176,3841],{"class":40},[34,61178,61179],{"class":36,"line":18491},[34,61180,1475],{"emptyLinePlaceholder":1474},[34,61182,61183],{"class":36,"line":18496},[34,61184,61185],{"class":40},"    .slider-indicator li.active {\n",[34,61187,61188],{"class":36,"line":18501},[34,61189,61190],{"class":40},"      width: 12px;\n",[34,61192,61193],{"class":36,"line":18515},[34,61194,61195],{"class":40},"      height: 12px;\n",[34,61197,61198],{"class":36,"line":18527},[34,61199,61200],{"class":40},"      opacity: 1;\n",[34,61202,61203],{"class":36,"line":18532},[34,61204,3841],{"class":40},[34,61206,61207,61209,61211],{"class":36,"line":18545},[34,61208,54056],{"class":40},[34,61210,1711],{"class":52939},[34,61212,52946],{"class":40},[34,61214,61215,61217,61219],{"class":36,"line":18550},[34,61216,53424],{"class":40},[34,61218,52973],{"class":52939},[34,61220,52946],{"class":40},[34,61222,61223],{"class":36,"line":18555},[34,61224,1475],{"emptyLinePlaceholder":1474},[34,61226,61227,61229,61231],{"class":36,"line":18560},[34,61228,2701],{"class":40},[34,61230,53439],{"class":52939},[34,61232,52946],{"class":40},[34,61234,61235,61237,61239,61241,61243,61246],{"class":36,"line":18573},[34,61236,53783],{"class":40},[34,61238,53250],{"class":52939},[34,61240,55125],{"class":3617},[34,61242,221],{"class":40},[34,61244,61245],{"class":504},"\"slider\"",[34,61247,52946],{"class":40},[34,61249,61250,61252,61254,61256,61258,61260],{"class":36,"line":18578},[34,61251,52980],{"class":40},[34,61253,53250],{"class":52939},[34,61255,55125],{"class":3617},[34,61257,221],{"class":40},[34,61259,56866],{"class":504},[34,61261,52946],{"class":40},[34,61263,61264,61266,61268,61270,61272,61275,61277,61279,61281],{"class":36,"line":34274},[34,61265,56873],{"class":40},[34,61267,109],{"class":52939},[34,61269,56878],{"class":3617},[34,61271,221],{"class":40},[34,61273,61274],{"class":504},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[34,61276,56886],{"class":3617},[34,61278,221],{"class":40},[34,61280,9302],{"class":504},[34,61282,60766],{"class":40},[34,61284,61285,61287,61289],{"class":36,"line":34280},[34,61286,53415],{"class":40},[34,61288,53250],{"class":52939},[34,61290,52946],{"class":40},[34,61292,61293,61295,61297,61299,61301,61303],{"class":36,"line":34286},[34,61294,52980],{"class":40},[34,61296,53250],{"class":52939},[34,61298,55125],{"class":3617},[34,61300,221],{"class":40},[34,61302,56913],{"class":504},[34,61304,52946],{"class":40},[34,61306,61307,61309,61311,61314,61316],{"class":36,"line":34292},[34,61308,56873],{"class":40},[34,61310,103],{"class":52939},[34,61312,61313],{"class":40},">对人类来说会不会太超前了？\u003C\u002F",[34,61315,103],{"class":52939},[34,61317,52946],{"class":40},[34,61319,61320,61322,61324,61326,61328,61331],{"class":36,"line":34298},[34,61321,56873],{"class":40},[34,61323,2798],{"class":52939},[34,61325,55125],{"class":3617},[34,61327,221],{"class":40},[34,61329,61330],{"class":504},"\"slider-indicator\"",[34,61332,52946],{"class":40},[34,61334,61335,61337,61339,61341,61343,61346,61348,61350],{"class":36,"line":34309},[34,61336,56941],{"class":40},[34,61338,1775],{"class":52939},[34,61340,55125],{"class":3617},[34,61342,221],{"class":40},[34,61344,61345],{"class":504},"\"active\"",[34,61347,56953],{"class":40},[34,61349,1775],{"class":52939},[34,61351,52946],{"class":40},[34,61353,61354,61356,61358,61360,61362],{"class":36,"line":34315},[34,61355,56941],{"class":40},[34,61357,1775],{"class":52939},[34,61359,56953],{"class":40},[34,61361,1775],{"class":52939},[34,61363,52946],{"class":40},[34,61365,61366,61368,61370,61372,61374],{"class":36,"line":34335},[34,61367,56941],{"class":40},[34,61369,1775],{"class":52939},[34,61371,56953],{"class":40},[34,61373,1775],{"class":52939},[34,61375,52946],{"class":40},[34,61377,61378,61380,61382,61384,61386],{"class":36,"line":34341},[34,61379,56941],{"class":40},[34,61381,1775],{"class":52939},[34,61383,56953],{"class":40},[34,61385,1775],{"class":52939},[34,61387,52946],{"class":40},[34,61389,61390,61392,61394,61396,61398],{"class":36,"line":34352},[34,61391,56941],{"class":40},[34,61393,1775],{"class":52939},[34,61395,56953],{"class":40},[34,61397,1775],{"class":52939},[34,61399,52946],{"class":40},[34,61401,61402,61404,61406,61408,61410],{"class":36,"line":34358},[34,61403,56941],{"class":40},[34,61405,1775],{"class":52939},[34,61407,56953],{"class":40},[34,61409,1775],{"class":52939},[34,61411,52946],{"class":40},[34,61413,61414,61416,61418,61420,61422],{"class":36,"line":34364},[34,61415,56941],{"class":40},[34,61417,1775],{"class":52939},[34,61419,56953],{"class":40},[34,61421,1775],{"class":52939},[34,61423,52946],{"class":40},[34,61425,61426,61428,61430,61432,61434],{"class":36,"line":34370},[34,61427,56941],{"class":40},[34,61429,1775],{"class":52939},[34,61431,56953],{"class":40},[34,61433,1775],{"class":52939},[34,61435,52946],{"class":40},[34,61437,61438,61440,61442],{"class":36,"line":34376},[34,61439,57046],{"class":40},[34,61441,2798],{"class":52939},[34,61443,52946],{"class":40},[34,61445,61446,61448,61450,61452,61454,61457],{"class":36,"line":34382},[34,61447,56873],{"class":40},[34,61449,53250],{"class":52939},[34,61451,55125],{"class":3617},[34,61453,221],{"class":40},[34,61455,61456],{"class":504},"\"toggle\"",[34,61458,52946],{"class":40},[34,61460,61461,61463,61465,61467,61469,61472,61474,61477,61479,61481],{"class":36,"line":34388},[34,61462,56941],{"class":40},[34,61464,55526],{"class":52939},[34,61466,55125],{"class":3617},[34,61468,221],{"class":40},[34,61470,61471],{"class":504},"\"prev\"",[34,61473,2751],{"class":40},[34,61475,61476],{"class":44},"&lt;",[34,61478,53424],{"class":40},[34,61480,55526],{"class":52939},[34,61482,52946],{"class":40},[34,61484,61485,61487,61489,61491,61493,61496,61498,61501,61503,61505],{"class":36,"line":34394},[34,61486,56941],{"class":40},[34,61488,55526],{"class":52939},[34,61490,55125],{"class":3617},[34,61492,221],{"class":40},[34,61494,61495],{"class":504},"\"next\"",[34,61497,2751],{"class":40},[34,61499,61500],{"class":44},"&gt;",[34,61502,53424],{"class":40},[34,61504,55526],{"class":52939},[34,61506,52946],{"class":40},[34,61508,61509,61511,61513],{"class":36,"line":34414},[34,61510,57046],{"class":40},[34,61512,53250],{"class":52939},[34,61514,52946],{"class":40},[34,61516,61517,61519,61521],{"class":36,"line":34420},[34,61518,53415],{"class":40},[34,61520,53250],{"class":52939},[34,61522,52946],{"class":40},[34,61524,61525,61527,61529],{"class":36,"line":34436},[34,61526,54056],{"class":40},[34,61528,53250],{"class":52939},[34,61530,52946],{"class":40},[34,61532,61533,61535,61537],{"class":36,"line":34442},[34,61534,53783],{"class":40},[34,61536,53452],{"class":52939},[34,61538,52946],{"class":40},[34,61540,61541],{"class":36,"line":34456},[34,61542,61543],{"class":40},"    \u002F\u002F 1. 初始数据\n",[34,61545,61546],{"class":36,"line":34462},[34,61547,61548],{"class":40},"    const data = [\n",[34,61550,61551],{"class":36,"line":34477},[34,61552,61553],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[34,61555,61556],{"class":36,"line":34483},[34,61557,61558],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[34,61560,61561],{"class":36,"line":34492},[34,61562,61563],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[34,61565,61566],{"class":36,"line":34498},[34,61567,61568],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[34,61570,61571],{"class":36,"line":34507},[34,61572,61573],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[34,61575,61576],{"class":36,"line":34513},[34,61577,61578],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[34,61580,61581],{"class":36,"line":34519},[34,61582,61583],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[34,61585,61586],{"class":36,"line":34528},[34,61587,61588],{"class":40},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[34,61590,61591],{"class":36,"line":34534},[34,61592,54748],{"class":40},[34,61594,61595],{"class":36,"line":34545},[34,61596,61597],{"class":40},"    \u002F\u002F 获取元素\n",[34,61599,61600],{"class":36,"line":34551},[34,61601,61602],{"class":40},"    const img = document.querySelector('.slider-wrapper img')\n",[34,61604,61605],{"class":36,"line":34570},[34,61606,61607],{"class":40},"    const p = document.querySelector('.slider-footer p')\n",[34,61609,61610],{"class":36,"line":34576},[34,61611,61612],{"class":40},"    const footer = document.querySelector('.slider-footer')\n",[34,61614,61615],{"class":36,"line":34587},[34,61616,61617],{"class":40},"    \u002F\u002F 1. 右按钮业务\n",[34,61619,61620],{"class":36,"line":34593},[34,61621,61622],{"class":40},"    \u002F\u002F 1.1 获取右侧按钮 \n",[34,61624,61625],{"class":36,"line":34613},[34,61626,61627],{"class":40},"    const next = document.querySelector('.next')\n",[34,61629,61630],{"class":36,"line":34629},[34,61631,61632],{"class":40},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[34,61634,61635],{"class":36,"line":34635},[34,61636,61637],{"class":40},"    \u002F\u002F 1.2 注册点击事件\n",[34,61639,61640],{"class":36,"line":34649},[34,61641,1475],{"emptyLinePlaceholder":1474},[34,61643,61644],{"class":36,"line":34655},[34,61645,61646],{"class":40},"    next.addEventListener('click', function () {\n",[34,61648,61649],{"class":36,"line":34661},[34,61650,61651],{"class":40},"      \u002F\u002F console.log(11)\n",[34,61653,61654],{"class":36,"line":34672},[34,61655,61656],{"class":40},"      i++\n",[34,61658,61659],{"class":36,"line":34678},[34,61660,61661],{"class":40},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[34,61663,61664],{"class":36,"line":34684},[34,61665,61666],{"class":40},"      \u002F\u002F if (i >= 8) {\n",[34,61668,61669],{"class":36,"line":34694},[34,61670,61671],{"class":40},"      \u002F\u002F   i = 0\n",[34,61673,61674],{"class":36,"line":34700},[34,61675,61676],{"class":40},"      \u002F\u002F }\n",[34,61678,61679],{"class":36,"line":34711},[34,61680,61681],{"class":40},"      i = i >= data.length ? 0 : i\n",[34,61683,61684],{"class":36,"line":34717},[34,61685,61686],{"class":40},"      \u002F\u002F 1.3 得到对应的对象\n",[34,61688,61689],{"class":36,"line":34727},[34,61690,61691],{"class":40},"      \u002F\u002F console.log(data[i])\n",[34,61693,61694],{"class":36,"line":34732},[34,61695,61696],{"class":40},"      \u002F\u002F 调用函数\n",[34,61698,61699],{"class":36,"line":34738},[34,61700,61701],{"class":40},"      toggle()\n",[34,61703,61704],{"class":36,"line":34787},[34,61705,35102],{"class":40},[34,61707,61708],{"class":36,"line":34834},[34,61709,1475],{"emptyLinePlaceholder":1474},[34,61711,61712],{"class":36,"line":34839},[34,61713,61714],{"class":40},"    \u002F\u002F 2. 左侧按钮业务\n",[34,61716,61717],{"class":36,"line":34845},[34,61718,61719],{"class":40},"    \u002F\u002F 2.1 获取左侧按钮 \n",[34,61721,61722],{"class":36,"line":34864},[34,61723,61724],{"class":40},"    const prev = document.querySelector('.prev')\n",[34,61726,61727],{"class":36,"line":34870},[34,61728,61637],{"class":40},[34,61730,61731],{"class":36,"line":34890},[34,61732,61733],{"class":40},"    prev.addEventListener('click', function () {\n",[34,61735,61736],{"class":36,"line":34896},[34,61737,61738],{"class":40},"      i--\n",[34,61740,61741],{"class":36,"line":34902},[34,61742,61743],{"class":40},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[34,61745,61746],{"class":36,"line":34912},[34,61747,61748],{"class":40},"      \u002F\u002F if (i \u003C 0) {\n",[34,61750,61751],{"class":36,"line":34917},[34,61752,61753],{"class":40},"      \u002F\u002F   i = 7\n",[34,61755,61756],{"class":36,"line":34923},[34,61757,61676],{"class":40},[34,61759,61760],{"class":36,"line":34939},[34,61761,61762],{"class":40},"      i = i \u003C 0 ? data.length - 1 : i\n",[34,61764,61765],{"class":36,"line":34984},[34,61766,61686],{"class":40},[34,61768,61769],{"class":36,"line":34990},[34,61770,61691],{"class":40},[34,61772,61773],{"class":36,"line":34996},[34,61774,61696],{"class":40},[34,61776,61777],{"class":36,"line":35002},[34,61778,61701],{"class":40},[34,61780,61781],{"class":36,"line":35013},[34,61782,35102],{"class":40},[34,61784,61785],{"class":36,"line":35019},[34,61786,1475],{"emptyLinePlaceholder":1474},[34,61788,61789],{"class":36,"line":35025},[34,61790,61791],{"class":40},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[34,61793,61794],{"class":36,"line":35031},[34,61795,61796],{"class":40},"    function toggle() {\n",[34,61798,61799],{"class":36,"line":35049},[34,61800,61801],{"class":40},"      \u002F\u002F 1.4 渲染对应的数据\n",[34,61803,61804],{"class":36,"line":35063},[34,61805,61806],{"class":40},"      img.src = data[i].url\n",[34,61808,61809],{"class":36,"line":35072},[34,61810,61811],{"class":40},"      p.innerHTML = data[i].title\n",[34,61813,61814],{"class":36,"line":35081},[34,61815,61816],{"class":40},"      footer.style.backgroundColor = data[i].color\n",[34,61818,61819],{"class":36,"line":35090},[34,61820,61821],{"class":40},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[34,61823,61824],{"class":36,"line":35099},[34,61825,61826],{"class":40},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[34,61828,61829],{"class":36,"line":35105},[34,61830,61831],{"class":40},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[34,61833,61834],{"class":36,"line":35111},[34,61835,3841],{"class":40},[34,61837,61838],{"class":36,"line":35119},[34,61839,1475],{"emptyLinePlaceholder":1474},[34,61841,61842],{"class":36,"line":35124},[34,61843,61844],{"class":40},"    \u002F\u002F 3. 自动播放模块\n",[34,61846,61847],{"class":36,"line":35130},[34,61848,61849],{"class":40},"    let timerId = setInterval(function () {\n",[34,61851,61852],{"class":36,"line":35141},[34,61853,61854],{"class":40},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[34,61856,61857],{"class":36,"line":35147},[34,61858,61859],{"class":40},"      next.click()\n",[34,61861,61862],{"class":36,"line":35167},[34,61863,61864],{"class":40},"    }, 1000)\n",[34,61866,61867],{"class":36,"line":35173},[34,61868,1475],{"emptyLinePlaceholder":1474},[34,61870,61871],{"class":36,"line":35179},[34,61872,61873],{"class":40},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[34,61875,61876],{"class":36,"line":35185},[34,61877,61878],{"class":40},"    const slider = document.querySelector('.slider')\n",[34,61880,61881],{"class":36,"line":35202},[34,61882,61883],{"class":40},"    \u002F\u002F 注册事件\n",[34,61885,61886],{"class":36,"line":35208},[34,61887,61888],{"class":40},"    slider.addEventListener('mouseenter', function () {\n",[34,61890,61891],{"class":36,"line":35214},[34,61892,61893],{"class":40},"      \u002F\u002F 停止定时器\n",[34,61895,61896],{"class":36,"line":35220},[34,61897,61898],{"class":40},"      clearInterval(timerId)\n",[34,61900,61901],{"class":36,"line":35226},[34,61902,35102],{"class":40},[34,61904,61905],{"class":36,"line":35232},[34,61906,1475],{"emptyLinePlaceholder":1474},[34,61908,61909],{"class":36,"line":35259},[34,61910,61911],{"class":40},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[34,61913,61914],{"class":36,"line":35283},[34,61915,61883],{"class":40},[34,61917,61918],{"class":36,"line":35289},[34,61919,61920],{"class":40},"    slider.addEventListener('mouseleave', function () {\n",[34,61922,61923],{"class":36,"line":35295},[34,61924,61893],{"class":40},[34,61926,61927],{"class":36,"line":35301},[34,61928,61929],{"class":40},"      if (timerId) clearInterval(timerId)\n",[34,61931,61932],{"class":36,"line":35312},[34,61933,61934],{"class":40},"      \u002F\u002F 开启定时器\n",[34,61936,61937],{"class":36,"line":35323},[34,61938,61939],{"class":40},"      timerId = setInterval(function () {\n",[34,61941,61942],{"class":36,"line":35329},[34,61943,61944],{"class":40},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[34,61946,61947],{"class":36,"line":35346},[34,61948,61949],{"class":40},"        next.click()\n",[34,61951,61952],{"class":36,"line":35369},[34,61953,61954],{"class":40},"      }, 1000)\n",[34,61956,61957],{"class":36,"line":35392},[34,61958,35102],{"class":40},[34,61960,61961,61963,61965],{"class":36,"line":35398},[34,61962,54056],{"class":40},[34,61964,53452],{"class":52939},[34,61966,52946],{"class":40},[34,61968,61969,61971,61973],{"class":36,"line":35403},[34,61970,53424],{"class":40},[34,61972,53439],{"class":52939},[34,61974,52946],{"class":40},[34,61976,61977],{"class":36,"line":35412},[34,61978,1475],{"emptyLinePlaceholder":1474},[34,61980,61981,61983,61985],{"class":36,"line":35422},[34,61982,53424],{"class":40},[34,61984,52274],{"class":52939},[34,61986,52946],{"class":40},[1353,61988,61990],{"id":61989},"_3252-焦点事件","3.2.5.2 焦点事件",[103,61992,61993],{},"小米搜索框案例：",[24,61995,61997],{"className":52272,"code":61996,"language":52274,"meta":29,"style":29},"\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",[31,61998,61999,62009,62023,62027,62035,62049,62069,62089,62101,62109,62115,62125,62135,62147,62151,62155,62162,62166,62177,62181,62185,62192,62203,62216,62230,62234,62238,62247,62259,62271,62285,62298,62311,62329,62340,62344,62348,62357,62374,62378,62382,62389,62399,62409,62420,62433,62445,62461,62472,62484,62488,62492,62500,62511,62528,62540,62552,62563,62567,62571,62582,62593,62597,62605,62609,62617,62621,62629,62644,62667,62682,62713,62740,62767,62794,62821,62848,62875,62884,62892,62900,62905,62925,62945,62950,62955,62973,62978,62988,62993,63007,63012,63017,63034,63043,63055,63059,63067,63075,63079],{"__ignoreMap":29},[34,62000,62001,62003,62005,62007],{"class":36,"line":37},[34,62002,52936],{"class":40},[34,62004,52940],{"class":52939},[34,62006,52943],{"class":3617},[34,62008,52946],{"class":40},[34,62010,62011,62013,62015,62017,62019,62021],{"class":36,"line":165},[34,62012,2701],{"class":40},[34,62014,52274],{"class":52939},[34,62016,52955],{"class":3617},[34,62018,221],{"class":40},[34,62020,52960],{"class":504},[34,62022,52946],{"class":40},[34,62024,62025],{"class":36,"line":171},[34,62026,1475],{"emptyLinePlaceholder":1474},[34,62028,62029,62031,62033],{"class":36,"line":182},[34,62030,2701],{"class":40},[34,62032,52973],{"class":52939},[34,62034,52946],{"class":40},[34,62036,62037,62039,62041,62043,62045,62047],{"class":36,"line":188},[34,62038,52980],{"class":40},[34,62040,52983],{"class":52939},[34,62042,52986],{"class":3617},[34,62044,221],{"class":40},[34,62046,52991],{"class":504},[34,62048,52946],{"class":40},[34,62050,62051,62053,62055,62057,62059,62061,62063,62065,62067],{"class":36,"line":518},[34,62052,52980],{"class":40},[34,62054,52983],{"class":52939},[34,62056,53002],{"class":3617},[34,62058,221],{"class":40},[34,62060,53007],{"class":504},[34,62062,53010],{"class":3617},[34,62064,221],{"class":40},[34,62066,53015],{"class":504},[34,62068,52946],{"class":40},[34,62070,62071,62073,62075,62077,62079,62081,62083,62085,62087],{"class":36,"line":524},[34,62072,52980],{"class":40},[34,62074,52983],{"class":52939},[34,62076,16566],{"class":3617},[34,62078,221],{"class":40},[34,62080,53030],{"class":504},[34,62082,53010],{"class":3617},[34,62084,221],{"class":40},[34,62086,53037],{"class":504},[34,62088,52946],{"class":40},[34,62090,62091,62093,62095,62097,62099],{"class":36,"line":530},[34,62092,52980],{"class":40},[34,62094,53046],{"class":52939},[34,62096,53049],{"class":40},[34,62098,53046],{"class":52939},[34,62100,52946],{"class":40},[34,62102,62103,62105,62107],{"class":36,"line":624},[34,62104,52980],{"class":40},[34,62106,1711],{"class":52939},[34,62108,52946],{"class":40},[34,62110,62111,62113],{"class":36,"line":630},[34,62112,53066],{"class":52939},[34,62114,17218],{"class":40},[34,62116,62117,62119,62121,62123],{"class":36,"line":636},[34,62118,53073],{"class":44},[34,62120,53076],{"class":40},[34,62122,177],{"class":44},[34,62124,2952],{"class":40},[34,62126,62127,62129,62131,62133],{"class":36,"line":1513},[34,62128,53085],{"class":44},[34,62130,53076],{"class":40},[34,62132,177],{"class":44},[34,62134,2952],{"class":40},[34,62136,62137,62140,62142,62145],{"class":36,"line":1519},[34,62138,62139],{"class":44},"            box-sizing",[34,62141,53076],{"class":40},[34,62143,62144],{"class":44},"border-box",[34,62146,2952],{"class":40},[34,62148,62149],{"class":36,"line":3283},[34,62150,4182],{"class":40},[34,62152,62153],{"class":36,"line":3297},[34,62154,1475],{"emptyLinePlaceholder":1474},[34,62156,62157,62160],{"class":36,"line":3302},[34,62158,62159],{"class":52939},"        ul",[34,62161,17218],{"class":40},[34,62163,62164],{"class":36,"line":3308},[34,62165,1475],{"emptyLinePlaceholder":1474},[34,62167,62168,62171,62173,62175],{"class":36,"line":3328},[34,62169,62170],{"class":44},"            list-style",[34,62172,53076],{"class":40},[34,62174,56376],{"class":44},[34,62176,2952],{"class":40},[34,62178,62179],{"class":36,"line":3333},[34,62180,4182],{"class":40},[34,62182,62183],{"class":36,"line":3347},[34,62184,1475],{"emptyLinePlaceholder":1474},[34,62186,62187,62190],{"class":36,"line":3352},[34,62188,62189],{"class":3617},"        .mi",[34,62191,17218],{"class":40},[34,62193,62194,62197,62199,62201],{"class":36,"line":3381},[34,62195,62196],{"class":44},"            position",[34,62198,53076],{"class":40},[34,62200,56403],{"class":44},[34,62202,2952],{"class":40},[34,62204,62205,62207,62209,62212,62214],{"class":36,"line":3386},[34,62206,53123],{"class":44},[34,62208,53076],{"class":40},[34,62210,62211],{"class":44},"223",[34,62213,53131],{"class":55},[34,62215,2952],{"class":40},[34,62217,62218,62220,62222,62224,62226,62228],{"class":36,"line":3403},[34,62219,53073],{"class":44},[34,62221,53076],{"class":40},[34,62223,451],{"class":44},[34,62225,53131],{"class":55},[34,62227,53195],{"class":44},[34,62229,2952],{"class":40},[34,62231,62232],{"class":36,"line":3408},[34,62233,4182],{"class":40},[34,62235,62236],{"class":36,"line":3413},[34,62237,1475],{"emptyLinePlaceholder":1474},[34,62239,62240,62242,62245],{"class":36,"line":3418},[34,62241,62189],{"class":3617},[34,62243,62244],{"class":52939}," input",[34,62246,17218],{"class":40},[34,62248,62249,62251,62253,62255,62257],{"class":36,"line":3432},[34,62250,53123],{"class":44},[34,62252,53076],{"class":40},[34,62254,62211],{"class":44},[34,62256,53131],{"class":55},[34,62258,2952],{"class":40},[34,62260,62261,62263,62265,62267,62269],{"class":36,"line":3437},[34,62262,53138],{"class":44},[34,62264,53076],{"class":40},[34,62266,2402],{"class":44},[34,62268,53131],{"class":55},[34,62270,2952],{"class":40},[34,62272,62273,62275,62277,62279,62281,62283],{"class":36,"line":4230},[34,62274,53085],{"class":44},[34,62276,53076],{"class":40},[34,62278,177],{"class":44},[34,62280,3692],{"class":44},[34,62282,53131],{"class":55},[34,62284,2952],{"class":40},[34,62286,62287,62290,62292,62294,62296],{"class":36,"line":4244},[34,62288,62289],{"class":44},"            font-size",[34,62291,53076],{"class":40},[34,62293,2344],{"class":44},[34,62295,53131],{"class":55},[34,62297,2952],{"class":40},[34,62299,62300,62303,62305,62307,62309],{"class":36,"line":4252},[34,62301,62302],{"class":44},"            line-height",[34,62304,53076],{"class":40},[34,62306,2402],{"class":44},[34,62308,53131],{"class":55},[34,62310,2952],{"class":40},[34,62312,62313,62316,62318,62320,62322,62324,62327],{"class":36,"line":4257},[34,62314,62315],{"class":44},"            border",[34,62317,53076],{"class":40},[34,62319,394],{"class":44},[34,62321,53131],{"class":55},[34,62323,53160],{"class":44},[34,62325,62326],{"class":44}," #e0e0e0",[34,62328,2952],{"class":40},[34,62330,62331,62334,62336,62338],{"class":36,"line":4263},[34,62332,62333],{"class":44},"            outline",[34,62335,53076],{"class":40},[34,62337,56376],{"class":44},[34,62339,2952],{"class":40},[34,62341,62342],{"class":36,"line":4269},[34,62343,4182],{"class":40},[34,62345,62346],{"class":36,"line":4274},[34,62347,1475],{"emptyLinePlaceholder":1474},[34,62349,62350,62352,62355],{"class":36,"line":9598},[34,62351,62189],{"class":3617},[34,62353,62354],{"class":3617}," .search",[34,62356,17218],{"class":40},[34,62358,62359,62361,62363,62365,62367,62369,62372],{"class":36,"line":9622},[34,62360,62315],{"class":44},[34,62362,53076],{"class":40},[34,62364,394],{"class":44},[34,62366,53131],{"class":55},[34,62368,53160],{"class":44},[34,62370,62371],{"class":44}," #ff6700",[34,62373,2952],{"class":40},[34,62375,62376],{"class":36,"line":9627},[34,62377,4182],{"class":40},[34,62379,62380],{"class":36,"line":9633},[34,62381,1475],{"emptyLinePlaceholder":1474},[34,62383,62384,62387],{"class":36,"line":9660},[34,62385,62386],{"class":3617},"        .result-list",[34,62388,17218],{"class":40},[34,62390,62391,62393,62395,62397],{"class":36,"line":9665},[34,62392,53111],{"class":44},[34,62394,53076],{"class":40},[34,62396,56376],{"class":44},[34,62398,2952],{"class":40},[34,62400,62401,62403,62405,62407],{"class":36,"line":9671},[34,62402,62196],{"class":44},[34,62404,53076],{"class":40},[34,62406,56470],{"class":44},[34,62408,2952],{"class":40},[34,62410,62411,62414,62416,62418],{"class":36,"line":9683},[34,62412,62413],{"class":44},"            left",[34,62415,53076],{"class":40},[34,62417,177],{"class":44},[34,62419,2952],{"class":40},[34,62421,62422,62425,62427,62429,62431],{"class":36,"line":9695},[34,62423,62424],{"class":44},"            top",[34,62426,53076],{"class":40},[34,62428,2402],{"class":44},[34,62430,53131],{"class":55},[34,62432,2952],{"class":40},[34,62434,62435,62437,62439,62441,62443],{"class":36,"line":9707},[34,62436,53123],{"class":44},[34,62438,53076],{"class":40},[34,62440,62211],{"class":44},[34,62442,53131],{"class":55},[34,62444,2952],{"class":40},[34,62446,62447,62449,62451,62453,62455,62457,62459],{"class":36,"line":11366},[34,62448,62315],{"class":44},[34,62450,53076],{"class":40},[34,62452,394],{"class":44},[34,62454,53131],{"class":55},[34,62456,53160],{"class":44},[34,62458,62371],{"class":44},[34,62460,2952],{"class":40},[34,62462,62463,62466,62468,62470],{"class":36,"line":11391},[34,62464,62465],{"class":44},"            border-top",[34,62467,53076],{"class":40},[34,62469,177],{"class":44},[34,62471,2952],{"class":40},[34,62473,62474,62477,62479,62482],{"class":36,"line":11414},[34,62475,62476],{"class":44},"            background",[34,62478,53076],{"class":40},[34,62480,62481],{"class":44},"#fff",[34,62483,2952],{"class":40},[34,62485,62486],{"class":36,"line":11438},[34,62487,4182],{"class":40},[34,62489,62490],{"class":36,"line":11443},[34,62491,1475],{"emptyLinePlaceholder":1474},[34,62493,62494,62496,62498],{"class":36,"line":11448},[34,62495,62386],{"class":3617},[34,62497,3057],{"class":52939},[34,62499,17218],{"class":40},[34,62501,62502,62504,62506,62509],{"class":36,"line":11453},[34,62503,53111],{"class":44},[34,62505,53076],{"class":40},[34,62507,62508],{"class":44},"block",[34,62510,2952],{"class":40},[34,62512,62513,62515,62517,62519,62521,62524,62526],{"class":36,"line":11462},[34,62514,53085],{"class":44},[34,62516,53076],{"class":40},[34,62518,1115],{"class":44},[34,62520,53131],{"class":55},[34,62522,62523],{"class":44}," 15",[34,62525,53131],{"class":55},[34,62527,2952],{"class":40},[34,62529,62530,62532,62534,62536,62538],{"class":36,"line":11467},[34,62531,62289],{"class":44},[34,62533,53076],{"class":40},[34,62535,2293],{"class":44},[34,62537,53131],{"class":55},[34,62539,2952],{"class":40},[34,62541,62542,62545,62547,62550],{"class":36,"line":11473},[34,62543,62544],{"class":44},"            color",[34,62546,53076],{"class":40},[34,62548,62549],{"class":44},"#424242",[34,62551,2952],{"class":40},[34,62553,62554,62557,62559,62561],{"class":36,"line":11494},[34,62555,62556],{"class":44},"            text-decoration",[34,62558,53076],{"class":40},[34,62560,56376],{"class":44},[34,62562,2952],{"class":40},[34,62564,62565],{"class":36,"line":11500},[34,62566,4182],{"class":40},[34,62568,62569],{"class":36,"line":11514},[34,62570,1475],{"emptyLinePlaceholder":1474},[34,62572,62573,62575,62577,62580],{"class":36,"line":11520},[34,62574,62386],{"class":3617},[34,62576,3057],{"class":52939},[34,62578,62579],{"class":3617},":hover",[34,62581,17218],{"class":40},[34,62583,62584,62586,62588,62591],{"class":36,"line":11547},[34,62585,53279],{"class":44},[34,62587,53076],{"class":40},[34,62589,62590],{"class":44},"#eee",[34,62592,2952],{"class":40},[34,62594,62595],{"class":36,"line":11556},[34,62596,4182],{"class":40},[34,62598,62599,62601,62603],{"class":36,"line":11562},[34,62600,53415],{"class":40},[34,62602,1711],{"class":52939},[34,62604,52946],{"class":40},[34,62606,62607],{"class":36,"line":11570},[34,62608,1475],{"emptyLinePlaceholder":1474},[34,62610,62611,62613,62615],{"class":36,"line":11575},[34,62612,53424],{"class":40},[34,62614,52973],{"class":52939},[34,62616,52946],{"class":40},[34,62618,62619],{"class":36,"line":18250},[34,62620,1475],{"emptyLinePlaceholder":1474},[34,62622,62623,62625,62627],{"class":36,"line":18256},[34,62624,2701],{"class":40},[34,62626,53439],{"class":52939},[34,62628,52946],{"class":40},[34,62630,62631,62633,62635,62637,62639,62642],{"class":36,"line":18279},[34,62632,52980],{"class":40},[34,62634,53250],{"class":52939},[34,62636,55125],{"class":3617},[34,62638,221],{"class":40},[34,62640,62641],{"class":504},"\"mi\"",[34,62643,52946],{"class":40},[34,62645,62646,62648,62650,62652,62654,62657,62660,62662,62665],{"class":36,"line":18285},[34,62647,56941],{"class":40},[34,62649,55460],{"class":52939},[34,62651,55463],{"class":3617},[34,62653,221],{"class":40},[34,62655,62656],{"class":504},"\"search\"",[34,62658,62659],{"class":3617}," placeholder",[34,62661,221],{"class":40},[34,62663,62664],{"class":504},"\"小米笔记本\"",[34,62666,52946],{"class":40},[34,62668,62669,62671,62673,62675,62677,62680],{"class":36,"line":18308},[34,62670,56941],{"class":40},[34,62672,2798],{"class":52939},[34,62674,55125],{"class":3617},[34,62676,221],{"class":40},[34,62678,62679],{"class":504},"\"result-list\"",[34,62681,52946],{"class":40},[34,62683,62684,62687,62689,62692,62694,62697,62699,62702,62705,62707,62709,62711],{"class":36,"line":18322},[34,62685,62686],{"class":40},"            \u003C",[34,62688,1775],{"class":52939},[34,62690,62691],{"class":40},">\u003C",[34,62693,236],{"class":52939},[34,62695,62696],{"class":3617}," href",[34,62698,221],{"class":40},[34,62700,62701],{"class":504},"\"#\"",[34,62703,62704],{"class":40},">全部商品\u003C\u002F",[34,62706,236],{"class":52939},[34,62708,56953],{"class":40},[34,62710,1775],{"class":52939},[34,62712,52946],{"class":40},[34,62714,62715,62717,62719,62721,62723,62725,62727,62729,62732,62734,62736,62738],{"class":36,"line":18342},[34,62716,62686],{"class":40},[34,62718,1775],{"class":52939},[34,62720,62691],{"class":40},[34,62722,236],{"class":52939},[34,62724,62696],{"class":3617},[34,62726,221],{"class":40},[34,62728,62701],{"class":504},[34,62730,62731],{"class":40},">小米11\u003C\u002F",[34,62733,236],{"class":52939},[34,62735,56953],{"class":40},[34,62737,1775],{"class":52939},[34,62739,52946],{"class":40},[34,62741,62742,62744,62746,62748,62750,62752,62754,62756,62759,62761,62763,62765],{"class":36,"line":18348},[34,62743,62686],{"class":40},[34,62745,1775],{"class":52939},[34,62747,62691],{"class":40},[34,62749,236],{"class":52939},[34,62751,62696],{"class":3617},[34,62753,221],{"class":40},[34,62755,62701],{"class":504},[34,62757,62758],{"class":40},">小米10S\u003C\u002F",[34,62760,236],{"class":52939},[34,62762,56953],{"class":40},[34,62764,1775],{"class":52939},[34,62766,52946],{"class":40},[34,62768,62769,62771,62773,62775,62777,62779,62781,62783,62786,62788,62790,62792],{"class":36,"line":18359},[34,62770,62686],{"class":40},[34,62772,1775],{"class":52939},[34,62774,62691],{"class":40},[34,62776,236],{"class":52939},[34,62778,62696],{"class":3617},[34,62780,221],{"class":40},[34,62782,62701],{"class":504},[34,62784,62785],{"class":40},">小米笔记本\u003C\u002F",[34,62787,236],{"class":52939},[34,62789,56953],{"class":40},[34,62791,1775],{"class":52939},[34,62793,52946],{"class":40},[34,62795,62796,62798,62800,62802,62804,62806,62808,62810,62813,62815,62817,62819],{"class":36,"line":18382},[34,62797,62686],{"class":40},[34,62799,1775],{"class":52939},[34,62801,62691],{"class":40},[34,62803,236],{"class":52939},[34,62805,62696],{"class":3617},[34,62807,221],{"class":40},[34,62809,62701],{"class":504},[34,62811,62812],{"class":40},">小米手机\u003C\u002F",[34,62814,236],{"class":52939},[34,62816,56953],{"class":40},[34,62818,1775],{"class":52939},[34,62820,52946],{"class":40},[34,62822,62823,62825,62827,62829,62831,62833,62835,62837,62840,62842,62844,62846],{"class":36,"line":18404},[34,62824,62686],{"class":40},[34,62826,1775],{"class":52939},[34,62828,62691],{"class":40},[34,62830,236],{"class":52939},[34,62832,62696],{"class":3617},[34,62834,221],{"class":40},[34,62836,62701],{"class":504},[34,62838,62839],{"class":40},">黑鲨4\u003C\u002F",[34,62841,236],{"class":52939},[34,62843,56953],{"class":40},[34,62845,1775],{"class":52939},[34,62847,52946],{"class":40},[34,62849,62850,62852,62854,62856,62858,62860,62862,62864,62867,62869,62871,62873],{"class":36,"line":18409},[34,62851,62686],{"class":40},[34,62853,1775],{"class":52939},[34,62855,62691],{"class":40},[34,62857,236],{"class":52939},[34,62859,62696],{"class":3617},[34,62861,221],{"class":40},[34,62863,62701],{"class":504},[34,62865,62866],{"class":40},">空调\u003C\u002F",[34,62868,236],{"class":52939},[34,62870,56953],{"class":40},[34,62872,1775],{"class":52939},[34,62874,52946],{"class":40},[34,62876,62877,62880,62882],{"class":36,"line":18415},[34,62878,62879],{"class":40},"        \u003C\u002F",[34,62881,2798],{"class":52939},[34,62883,52946],{"class":40},[34,62885,62886,62888,62890],{"class":36,"line":18429},[34,62887,53415],{"class":40},[34,62889,53250],{"class":52939},[34,62891,52946],{"class":40},[34,62893,62894,62896,62898],{"class":36,"line":18442},[34,62895,52980],{"class":40},[34,62897,53452],{"class":52939},[34,62899,52946],{"class":40},[34,62901,62902],{"class":36,"line":18447},[34,62903,62904],{"class":161},"        \u002F\u002F 1. 获取元素\n",[34,62906,62907,62910,62912,62914,62916,62918,62920,62923],{"class":36,"line":18461},[34,62908,62909],{"class":55},"        const",[34,62911,62244],{"class":44},[34,62913,56],{"class":55},[34,62915,56035],{"class":40},[34,62917,56038],{"class":3617},[34,62919,286],{"class":40},[34,62921,62922],{"class":504},"'[type=search]'",[34,62924,101],{"class":40},[34,62926,62927,62929,62932,62934,62936,62938,62940,62943],{"class":36,"line":18466},[34,62928,62909],{"class":55},[34,62930,62931],{"class":44}," ul",[34,62933,56],{"class":55},[34,62935,56035],{"class":40},[34,62937,56038],{"class":3617},[34,62939,286],{"class":40},[34,62941,62942],{"class":504},"'.result-list'",[34,62944,101],{"class":40},[34,62946,62947],{"class":36,"line":18472},[34,62948,62949],{"class":161},"        \u002F\u002F console.log(input)\n",[34,62951,62952],{"class":36,"line":18477},[34,62953,62954],{"class":161},"        \u002F\u002F 2. 监听事件 获得焦点\n",[34,62956,62957,62960,62962,62964,62967,62969,62971],{"class":36,"line":18491},[34,62958,62959],{"class":40},"        input.",[34,62961,59452],{"class":3617},[34,62963,286],{"class":40},[34,62965,62966],{"class":504},"'focus'",[34,62968,48],{"class":40},[34,62970,56088],{"class":55},[34,62972,56091],{"class":40},[34,62974,62975],{"class":36,"line":18496},[34,62976,62977],{"class":161},"            \u002F\u002F ul显示\n",[34,62979,62980,62983,62985],{"class":36,"line":18501},[34,62981,62982],{"class":40},"            ul.style.display ",[34,62984,221],{"class":55},[34,62986,62987],{"class":504}," 'block'\n",[34,62989,62990],{"class":36,"line":18515},[34,62991,62992],{"class":161},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[34,62994,62995,62998,63000,63002,63005],{"class":36,"line":18527},[34,62996,62997],{"class":40},"            input.classList.",[34,62999,6984],{"class":3617},[34,63001,286],{"class":40},[34,63003,63004],{"class":504},"'search'",[34,63006,101],{"class":40},[34,63008,63009],{"class":36,"line":18532},[34,63010,63011],{"class":40},"        })\n",[34,63013,63014],{"class":36,"line":18545},[34,63015,63016],{"class":161},"        \u002F\u002F 3. 监听事件 失去焦点\n",[34,63018,63019,63021,63023,63025,63028,63030,63032],{"class":36,"line":18550},[34,63020,62959],{"class":40},[34,63022,59452],{"class":3617},[34,63024,286],{"class":40},[34,63026,63027],{"class":504},"'blur'",[34,63029,48],{"class":40},[34,63031,56088],{"class":55},[34,63033,56091],{"class":40},[34,63035,63036,63038,63040],{"class":36,"line":18555},[34,63037,62982],{"class":40},[34,63039,221],{"class":55},[34,63041,63042],{"class":504}," 'none'\n",[34,63044,63045,63047,63049,63051,63053],{"class":36,"line":18560},[34,63046,62997],{"class":40},[34,63048,58645],{"class":3617},[34,63050,286],{"class":40},[34,63052,63004],{"class":504},[34,63054,101],{"class":40},[34,63056,63057],{"class":36,"line":18573},[34,63058,63011],{"class":40},[34,63060,63061,63063,63065],{"class":36,"line":18578},[34,63062,53415],{"class":40},[34,63064,53452],{"class":52939},[34,63066,52946],{"class":40},[34,63068,63069,63071,63073],{"class":36,"line":34274},[34,63070,53424],{"class":40},[34,63072,53439],{"class":52939},[34,63074,52946],{"class":40},[34,63076,63077],{"class":36,"line":34280},[34,63078,1475],{"emptyLinePlaceholder":1474},[34,63080,63081,63083,63085],{"class":36,"line":34286},[34,63082,53424],{"class":40},[34,63084,52274],{"class":52939},[34,63086,52946],{"class":40},[1353,63088,63090],{"id":63089},"_3253-键盘事件","3.2.5.3 键盘事件",[103,63092,63093],{},"评论字数统计案例",[103,63095,63096],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[103,63098,63099],{},"牢记focus伪类选择器",[52983,63101],{"charSet":63102},"UTF-8",[52983,63104],{"name":63105,"content":63106},"viewport","width=device-width, initial-scale=1.0",[53046,63108,63109],{},"Document",[1711,63111,63112],{},"\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",[55460,63114],{"type":6838},[2798,63116,63117,63120],{},[1775,63118,63119],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[1775,63121,63122],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[24,63124,63126],{"className":52272,"code":63125,"language":52274,"meta":29,"style":29},"\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",[31,63127,63128,63138,63152,63156,63164,63178,63198,63218,63231,63239,63246,63259,63273,63283,63293,63297,63301,63308,63320,63332,63344,63356,63385,63398,63402,63406,63415,63426,63438,63449,63460,63472,63483,63495,63511,63523,63527,63531,63542,63553,63563,63575,63579,63583,63591,63602,63612,63623,63635,63648,63660,63672,63676,63680,63689,63701,63712,63725,63736,63750,63754,63758,63765,63777,63789,63799,63803,63807,63816,63828,63838,63842,63846,63857,63867,63886,63899,63903,63907,63917,63927,63931,63935,63946,63957,63969,63981,63985,63989,64000,64011,64025,64029,64033,64044,64054,64066,64070,64078,64086,64090,64098,64113,64132,64172,64185,64193,64207,64227,64235,64250,64273,64291,64306,64326,64346,64366,64374,64382,64390,64398,64418,64438,64443,64460,64469,64473,64478,64494,64502,64506,64511,64528,64533,64558,64562,64566,64571,64576,64584,64592,64596],{"__ignoreMap":29},[34,63129,63130,63132,63134,63136],{"class":36,"line":37},[34,63131,52936],{"class":40},[34,63133,52940],{"class":52939},[34,63135,52943],{"class":3617},[34,63137,52946],{"class":40},[34,63139,63140,63142,63144,63146,63148,63150],{"class":36,"line":165},[34,63141,2701],{"class":40},[34,63143,52274],{"class":52939},[34,63145,52955],{"class":3617},[34,63147,221],{"class":40},[34,63149,52960],{"class":504},[34,63151,52946],{"class":40},[34,63153,63154],{"class":36,"line":171},[34,63155,1475],{"emptyLinePlaceholder":1474},[34,63157,63158,63160,63162],{"class":36,"line":182},[34,63159,2701],{"class":40},[34,63161,52973],{"class":52939},[34,63163,52946],{"class":40},[34,63165,63166,63168,63170,63172,63174,63176],{"class":36,"line":188},[34,63167,53783],{"class":40},[34,63169,52983],{"class":52939},[34,63171,52986],{"class":3617},[34,63173,221],{"class":40},[34,63175,52991],{"class":504},[34,63177,52946],{"class":40},[34,63179,63180,63182,63184,63186,63188,63190,63192,63194,63196],{"class":36,"line":518},[34,63181,53783],{"class":40},[34,63183,52983],{"class":52939},[34,63185,53002],{"class":3617},[34,63187,221],{"class":40},[34,63189,53007],{"class":504},[34,63191,53010],{"class":3617},[34,63193,221],{"class":40},[34,63195,53015],{"class":504},[34,63197,52946],{"class":40},[34,63199,63200,63202,63204,63206,63208,63210,63212,63214,63216],{"class":36,"line":524},[34,63201,53783],{"class":40},[34,63203,52983],{"class":52939},[34,63205,16566],{"class":3617},[34,63207,221],{"class":40},[34,63209,53030],{"class":504},[34,63211,53010],{"class":3617},[34,63213,221],{"class":40},[34,63215,53037],{"class":504},[34,63217,52946],{"class":40},[34,63219,63220,63222,63224,63227,63229],{"class":36,"line":530},[34,63221,53783],{"class":40},[34,63223,53046],{"class":52939},[34,63225,63226],{"class":40},">评论回车发布\u003C\u002F",[34,63228,53046],{"class":52939},[34,63230,52946],{"class":40},[34,63232,63233,63235,63237],{"class":36,"line":624},[34,63234,53783],{"class":40},[34,63236,1711],{"class":52939},[34,63238,52946],{"class":40},[34,63240,63241,63244],{"class":36,"line":630},[34,63242,63243],{"class":3617},"    .wrapper",[34,63245,17218],{"class":40},[34,63247,63248,63251,63253,63255,63257],{"class":36,"line":636},[34,63249,63250],{"class":44},"      min-width",[34,63252,53076],{"class":40},[34,63254,5640],{"class":44},[34,63256,53131],{"class":55},[34,63258,2952],{"class":40},[34,63260,63261,63264,63266,63269,63271],{"class":36,"line":1513},[34,63262,63263],{"class":44},"      max-width",[34,63265,53076],{"class":40},[34,63267,63268],{"class":44},"800",[34,63270,53131],{"class":55},[34,63272,2952],{"class":40},[34,63274,63275,63277,63279,63281],{"class":36,"line":1519},[34,63276,56648],{"class":44},[34,63278,53076],{"class":40},[34,63280,53116],{"class":44},[34,63282,2952],{"class":40},[34,63284,63285,63287,63289,63291],{"class":36,"line":3283},[34,63286,56659],{"class":44},[34,63288,53076],{"class":40},[34,63290,53219],{"class":44},[34,63292,2952],{"class":40},[34,63294,63295],{"class":36,"line":3297},[34,63296,3841],{"class":40},[34,63298,63299],{"class":36,"line":3302},[34,63300,1475],{"emptyLinePlaceholder":1474},[34,63302,63303,63306],{"class":36,"line":3308},[34,63304,63305],{"class":3617},"    .avatar",[34,63307,17218],{"class":40},[34,63309,63310,63312,63314,63316,63318],{"class":36,"line":3328},[34,63311,56410],{"class":44},[34,63313,53076],{"class":40},[34,63315,2402],{"class":44},[34,63317,53131],{"class":55},[34,63319,2952],{"class":40},[34,63321,63322,63324,63326,63328,63330],{"class":36,"line":3333},[34,63323,56424],{"class":44},[34,63325,53076],{"class":40},[34,63327,2402],{"class":44},[34,63329,53131],{"class":55},[34,63331,2952],{"class":40},[34,63333,63334,63336,63338,63340,63342],{"class":36,"line":3347},[34,63335,56773],{"class":44},[34,63337,53076],{"class":40},[34,63339,2451],{"class":44},[34,63341,2131],{"class":55},[34,63343,2952],{"class":40},[34,63345,63346,63349,63351,63354],{"class":36,"line":3352},[34,63347,63348],{"class":44},"      overflow",[34,63350,53076],{"class":40},[34,63352,63353],{"class":44},"hidden",[34,63355,2952],{"class":40},[34,63357,63358,63361,63363,63366,63368,63371,63373,63376,63378,63380,63383],{"class":36,"line":3381},[34,63359,63360],{"class":44},"      background",[34,63362,53076],{"class":40},[34,63364,63365],{"class":44},"url",[34,63367,286],{"class":40},[34,63369,63370],{"class":51},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[34,63372,372],{"class":40},[34,63374,63375],{"class":44},"no-repeat",[34,63377,18790],{"class":44},[34,63379,26624],{"class":40},[34,63381,63382],{"class":44},"cover",[34,63384,2952],{"class":40},[34,63386,63387,63390,63392,63394,63396],{"class":36,"line":3386},[34,63388,63389],{"class":44},"      margin-right",[34,63391,53076],{"class":40},[34,63393,1249],{"class":44},[34,63395,53131],{"class":55},[34,63397,2952],{"class":40},[34,63399,63400],{"class":36,"line":3403},[34,63401,3841],{"class":40},[34,63403,63404],{"class":36,"line":3408},[34,63405,1475],{"emptyLinePlaceholder":1474},[34,63407,63408,63410,63413],{"class":36,"line":3413},[34,63409,63243],{"class":3617},[34,63411,63412],{"class":52939}," textarea",[34,63414,17218],{"class":40},[34,63416,63417,63420,63422,63424],{"class":36,"line":3418},[34,63418,63419],{"class":44},"      outline",[34,63421,53076],{"class":40},[34,63423,56376],{"class":44},[34,63425,2952],{"class":40},[34,63427,63428,63431,63433,63436],{"class":36,"line":3432},[34,63429,63430],{"class":44},"      border-color",[34,63432,53076],{"class":40},[34,63434,63435],{"class":44},"transparent",[34,63437,2952],{"class":40},[34,63439,63440,63443,63445,63447],{"class":36,"line":3437},[34,63441,63442],{"class":44},"      resize",[34,63444,53076],{"class":40},[34,63446,56376],{"class":44},[34,63448,2952],{"class":40},[34,63450,63451,63453,63455,63458],{"class":36,"line":4230},[34,63452,63360],{"class":44},[34,63454,53076],{"class":40},[34,63456,63457],{"class":44},"#f5f5f5",[34,63459,2952],{"class":40},[34,63461,63462,63464,63466,63468,63470],{"class":36,"line":4244},[34,63463,56773],{"class":44},[34,63465,53076],{"class":40},[34,63467,247],{"class":44},[34,63469,53131],{"class":55},[34,63471,2952],{"class":40},[34,63473,63474,63477,63479,63481],{"class":36,"line":4252},[34,63475,63476],{"class":44},"      flex",[34,63478,53076],{"class":40},[34,63480,394],{"class":44},[34,63482,2952],{"class":40},[34,63484,63485,63487,63489,63491,63493],{"class":36,"line":4257},[34,63486,56334],{"class":44},[34,63488,53076],{"class":40},[34,63490,410],{"class":44},[34,63492,53131],{"class":55},[34,63494,2952],{"class":40},[34,63496,63497,63500,63502,63504,63507,63509],{"class":36,"line":4263},[34,63498,63499],{"class":44},"      transition",[34,63501,53076],{"class":40},[34,63503,29767],{"class":44},[34,63505,63506],{"class":44}," 0.5",[34,63508,2490],{"class":55},[34,63510,2952],{"class":40},[34,63512,63513,63515,63517,63519,63521],{"class":36,"line":4269},[34,63514,56424],{"class":44},[34,63516,53076],{"class":40},[34,63518,2742],{"class":44},[34,63520,53131],{"class":55},[34,63522,2952],{"class":40},[34,63524,63525],{"class":36,"line":4274},[34,63526,3841],{"class":40},[34,63528,63529],{"class":36,"line":9598},[34,63530,1475],{"emptyLinePlaceholder":1474},[34,63532,63533,63535,63537,63540],{"class":36,"line":9622},[34,63534,63243],{"class":3617},[34,63536,63412],{"class":52939},[34,63538,63539],{"class":3617},":focus",[34,63541,17218],{"class":40},[34,63543,63544,63546,63548,63551],{"class":36,"line":9627},[34,63545,63430],{"class":44},[34,63547,53076],{"class":40},[34,63549,63550],{"class":44},"#e4e4e4",[34,63552,2952],{"class":40},[34,63554,63555,63557,63559,63561],{"class":36,"line":9633},[34,63556,63360],{"class":44},[34,63558,53076],{"class":40},[34,63560,62481],{"class":44},[34,63562,2952],{"class":40},[34,63564,63565,63567,63569,63571,63573],{"class":36,"line":9660},[34,63566,56424],{"class":44},[34,63568,53076],{"class":40},[34,63570,2451],{"class":44},[34,63572,53131],{"class":55},[34,63574,2952],{"class":40},[34,63576,63577],{"class":36,"line":9665},[34,63578,3841],{"class":40},[34,63580,63581],{"class":36,"line":9671},[34,63582,1475],{"emptyLinePlaceholder":1474},[34,63584,63585,63587,63589],{"class":36,"line":9683},[34,63586,63243],{"class":3617},[34,63588,59106],{"class":52939},[34,63590,17218],{"class":40},[34,63592,63593,63595,63597,63600],{"class":36,"line":9695},[34,63594,63360],{"class":44},[34,63596,53076],{"class":40},[34,63598,63599],{"class":44},"#00aeec",[34,63601,2952],{"class":40},[34,63603,63604,63606,63608,63610],{"class":36,"line":9707},[34,63605,59055],{"class":44},[34,63607,53076],{"class":40},[34,63609,62481],{"class":44},[34,63611,2952],{"class":40},[34,63613,63614,63617,63619,63621],{"class":36,"line":11366},[34,63615,63616],{"class":44},"      border",[34,63618,53076],{"class":40},[34,63620,56376],{"class":44},[34,63622,2952],{"class":40},[34,63624,63625,63627,63629,63631,63633],{"class":36,"line":11391},[34,63626,56773],{"class":44},[34,63628,53076],{"class":40},[34,63630,247],{"class":44},[34,63632,53131],{"class":55},[34,63634,2952],{"class":40},[34,63636,63637,63640,63642,63644,63646],{"class":36,"line":11414},[34,63638,63639],{"class":44},"      margin-left",[34,63641,53076],{"class":40},[34,63643,410],{"class":44},[34,63645,53131],{"class":55},[34,63647,2952],{"class":40},[34,63649,63650,63652,63654,63656,63658],{"class":36,"line":11438},[34,63651,56410],{"class":44},[34,63653,53076],{"class":40},[34,63655,2158],{"class":44},[34,63657,53131],{"class":55},[34,63659,2952],{"class":40},[34,63661,63662,63665,63667,63670],{"class":36,"line":11443},[34,63663,63664],{"class":44},"      cursor",[34,63666,53076],{"class":40},[34,63668,63669],{"class":44},"pointer",[34,63671,2952],{"class":40},[34,63673,63674],{"class":36,"line":11448},[34,63675,3841],{"class":40},[34,63677,63678],{"class":36,"line":11453},[34,63679,1475],{"emptyLinePlaceholder":1474},[34,63681,63682,63684,63687],{"class":36,"line":11462},[34,63683,63243],{"class":3617},[34,63685,63686],{"class":3617}," .total",[34,63688,17218],{"class":40},[34,63690,63691,63693,63695,63697,63699],{"class":36,"line":11467},[34,63692,63389],{"class":44},[34,63694,53076],{"class":40},[34,63696,2407],{"class":44},[34,63698,53131],{"class":55},[34,63700,2952],{"class":40},[34,63702,63703,63705,63707,63710],{"class":36,"line":11473},[34,63704,59055],{"class":44},[34,63706,53076],{"class":40},[34,63708,63709],{"class":44},"#999",[34,63711,2952],{"class":40},[34,63713,63714,63717,63719,63721,63723],{"class":36,"line":11494},[34,63715,63716],{"class":44},"      margin-top",[34,63718,53076],{"class":40},[34,63720,224],{"class":44},[34,63722,53131],{"class":55},[34,63724,2952],{"class":40},[34,63726,63727,63730,63732,63734],{"class":36,"line":11500},[34,63728,63729],{"class":44},"      opacity",[34,63731,53076],{"class":40},[34,63733,177],{"class":44},[34,63735,2952],{"class":40},[34,63737,63738,63740,63742,63744,63746,63748],{"class":36,"line":11514},[34,63739,63499],{"class":44},[34,63741,53076],{"class":40},[34,63743,29767],{"class":44},[34,63745,63506],{"class":44},[34,63747,2490],{"class":55},[34,63749,2952],{"class":40},[34,63751,63752],{"class":36,"line":11520},[34,63753,3841],{"class":40},[34,63755,63756],{"class":36,"line":11547},[34,63757,1475],{"emptyLinePlaceholder":1474},[34,63759,63760,63763],{"class":36,"line":11556},[34,63761,63762],{"class":3617},"    .list",[34,63764,17218],{"class":40},[34,63766,63767,63769,63771,63773,63775],{"class":36,"line":11562},[34,63768,63250],{"class":44},[34,63770,53076],{"class":40},[34,63772,5640],{"class":44},[34,63774,53131],{"class":55},[34,63776,2952],{"class":40},[34,63778,63779,63781,63783,63785,63787],{"class":36,"line":11570},[34,63780,63263],{"class":44},[34,63782,53076],{"class":40},[34,63784,63268],{"class":44},[34,63786,53131],{"class":55},[34,63788,2952],{"class":40},[34,63790,63791,63793,63795,63797],{"class":36,"line":11575},[34,63792,56648],{"class":44},[34,63794,53076],{"class":40},[34,63796,53116],{"class":44},[34,63798,2952],{"class":40},[34,63800,63801],{"class":36,"line":18250},[34,63802,3841],{"class":40},[34,63804,63805],{"class":36,"line":18256},[34,63806,1475],{"emptyLinePlaceholder":1474},[34,63808,63809,63811,63814],{"class":36,"line":18279},[34,63810,63762],{"class":3617},[34,63812,63813],{"class":3617}," .item",[34,63815,17218],{"class":40},[34,63817,63818,63820,63822,63824,63826],{"class":36,"line":18285},[34,63819,56410],{"class":44},[34,63821,53076],{"class":40},[34,63823,451],{"class":44},[34,63825,2131],{"class":55},[34,63827,2952],{"class":40},[34,63829,63830,63832,63834,63836],{"class":36,"line":18308},[34,63831,56648],{"class":44},[34,63833,53076],{"class":40},[34,63835,53116],{"class":44},[34,63837,2952],{"class":40},[34,63839,63840],{"class":36,"line":18322},[34,63841,3841],{"class":40},[34,63843,63844],{"class":36,"line":18342},[34,63845,1475],{"emptyLinePlaceholder":1474},[34,63847,63848,63850,63852,63855],{"class":36,"line":18348},[34,63849,63762],{"class":3617},[34,63851,63813],{"class":3617},[34,63853,63854],{"class":3617}," .info",[34,63856,17218],{"class":40},[34,63858,63859,63861,63863,63865],{"class":36,"line":18359},[34,63860,63476],{"class":44},[34,63862,53076],{"class":40},[34,63864,394],{"class":44},[34,63866,2952],{"class":40},[34,63868,63869,63872,63874,63876,63878,63881,63884],{"class":36,"line":18382},[34,63870,63871],{"class":44},"      border-bottom",[34,63873,53076],{"class":40},[34,63875,394],{"class":44},[34,63877,53131],{"class":55},[34,63879,63880],{"class":44}," dashed",[34,63882,63883],{"class":44}," #e4e4e4",[34,63885,2952],{"class":40},[34,63887,63888,63891,63893,63895,63897],{"class":36,"line":18404},[34,63889,63890],{"class":44},"      padding-bottom",[34,63892,53076],{"class":40},[34,63894,410],{"class":44},[34,63896,53131],{"class":55},[34,63898,2952],{"class":40},[34,63900,63901],{"class":36,"line":18409},[34,63902,3841],{"class":40},[34,63904,63905],{"class":36,"line":18415},[34,63906,1475],{"emptyLinePlaceholder":1474},[34,63908,63909,63911,63913,63915],{"class":36,"line":18429},[34,63910,63762],{"class":3617},[34,63912,63813],{"class":3617},[34,63914,8475],{"class":52939},[34,63916,17218],{"class":40},[34,63918,63919,63921,63923,63925],{"class":36,"line":18442},[34,63920,56345],{"class":44},[34,63922,53076],{"class":40},[34,63924,177],{"class":44},[34,63926,2952],{"class":40},[34,63928,63929],{"class":36,"line":18447},[34,63930,3841],{"class":40},[34,63932,63933],{"class":36,"line":18461},[34,63934,1475],{"emptyLinePlaceholder":1474},[34,63936,63937,63939,63941,63944],{"class":36,"line":18466},[34,63938,63762],{"class":3617},[34,63940,63813],{"class":3617},[34,63942,63943],{"class":3617}," .name",[34,63945,17218],{"class":40},[34,63947,63948,63950,63952,63955],{"class":36,"line":18472},[34,63949,59055],{"class":44},[34,63951,53076],{"class":40},[34,63953,63954],{"class":44},"#FB7299",[34,63956,2952],{"class":40},[34,63958,63959,63961,63963,63965,63967],{"class":36,"line":18477},[34,63960,56561],{"class":44},[34,63962,53076],{"class":40},[34,63964,2344],{"class":44},[34,63966,53131],{"class":55},[34,63968,2952],{"class":40},[34,63970,63971,63974,63976,63979],{"class":36,"line":18491},[34,63972,63973],{"class":44},"      font-weight",[34,63975,53076],{"class":40},[34,63977,63978],{"class":44},"bold",[34,63980,2952],{"class":40},[34,63982,63983],{"class":36,"line":18496},[34,63984,3841],{"class":40},[34,63986,63987],{"class":36,"line":18501},[34,63988,1475],{"emptyLinePlaceholder":1474},[34,63990,63991,63993,63995,63998],{"class":36,"line":18515},[34,63992,63762],{"class":3617},[34,63994,63813],{"class":3617},[34,63996,63997],{"class":3617}," .text",[34,63999,17218],{"class":40},[34,64001,64002,64004,64006,64009],{"class":36,"line":18527},[34,64003,59055],{"class":44},[34,64005,53076],{"class":40},[34,64007,64008],{"class":44},"#333",[34,64010,2952],{"class":40},[34,64012,64013,64015,64017,64019,64021,64023],{"class":36,"line":18532},[34,64014,56334],{"class":44},[34,64016,53076],{"class":40},[34,64018,410],{"class":44},[34,64020,53131],{"class":55},[34,64022,98],{"class":44},[34,64024,2952],{"class":40},[34,64026,64027],{"class":36,"line":18545},[34,64028,3841],{"class":40},[34,64030,64031],{"class":36,"line":18550},[34,64032,1475],{"emptyLinePlaceholder":1474},[34,64034,64035,64037,64039,64042],{"class":36,"line":18555},[34,64036,63762],{"class":3617},[34,64038,63813],{"class":3617},[34,64040,64041],{"class":3617}," .time",[34,64043,17218],{"class":40},[34,64045,64046,64048,64050,64052],{"class":36,"line":18560},[34,64047,59055],{"class":44},[34,64049,53076],{"class":40},[34,64051,63709],{"class":44},[34,64053,2952],{"class":40},[34,64055,64056,64058,64060,64062,64064],{"class":36,"line":18573},[34,64057,56561],{"class":44},[34,64059,53076],{"class":40},[34,64061,2293],{"class":44},[34,64063,53131],{"class":55},[34,64065,2952],{"class":40},[34,64067,64068],{"class":36,"line":18578},[34,64069,3841],{"class":40},[34,64071,64072,64074,64076],{"class":36,"line":34274},[34,64073,54056],{"class":40},[34,64075,1711],{"class":52939},[34,64077,52946],{"class":40},[34,64079,64080,64082,64084],{"class":36,"line":34280},[34,64081,53424],{"class":40},[34,64083,52973],{"class":52939},[34,64085,52946],{"class":40},[34,64087,64088],{"class":36,"line":34286},[34,64089,1475],{"emptyLinePlaceholder":1474},[34,64091,64092,64094,64096],{"class":36,"line":34292},[34,64093,2701],{"class":40},[34,64095,53439],{"class":52939},[34,64097,52946],{"class":40},[34,64099,64100,64102,64104,64106,64108,64111],{"class":36,"line":34298},[34,64101,53783],{"class":40},[34,64103,53250],{"class":52939},[34,64105,55125],{"class":3617},[34,64107,221],{"class":40},[34,64109,64110],{"class":504},"\"wrapper\"",[34,64112,52946],{"class":40},[34,64114,64115,64117,64119,64121,64123,64126,64128,64130],{"class":36,"line":34309},[34,64116,52980],{"class":40},[34,64118,2239],{"class":52939},[34,64120,55125],{"class":3617},[34,64122,221],{"class":40},[34,64124,64125],{"class":504},"\"avatar\"",[34,64127,56953],{"class":40},[34,64129,2239],{"class":52939},[34,64131,52946],{"class":40},[34,64133,64134,64136,64138,64140,64142,64145,64147,64149,64152,64154,64156,64158,64161,64163,64166,64168,64170],{"class":36,"line":34315},[34,64135,52980],{"class":40},[34,64137,55927],{"class":52939},[34,64139,16605],{"class":3617},[34,64141,221],{"class":40},[34,64143,64144],{"class":504},"\"tx\"",[34,64146,62659],{"class":3617},[34,64148,221],{"class":40},[34,64150,64151],{"class":504},"\"发一条友善的评论\"",[34,64153,55950],{"class":3617},[34,64155,221],{"class":40},[34,64157,5354],{"class":504},[34,64159,64160],{"class":3617}," maxlength",[34,64162,221],{"class":40},[34,64164,64165],{"class":504},"\"200\"",[34,64167,56953],{"class":40},[34,64169,55927],{"class":52939},[34,64171,52946],{"class":40},[34,64173,64174,64176,64178,64181,64183],{"class":36,"line":34335},[34,64175,52980],{"class":40},[34,64177,55526],{"class":52939},[34,64179,64180],{"class":40},">发布\u003C\u002F",[34,64182,55526],{"class":52939},[34,64184,52946],{"class":40},[34,64186,64187,64189,64191],{"class":36,"line":34341},[34,64188,54056],{"class":40},[34,64190,53250],{"class":52939},[34,64192,52946],{"class":40},[34,64194,64195,64197,64199,64201,64203,64205],{"class":36,"line":34352},[34,64196,53783],{"class":40},[34,64198,53250],{"class":52939},[34,64200,55125],{"class":3617},[34,64202,221],{"class":40},[34,64204,64110],{"class":504},[34,64206,52946],{"class":40},[34,64208,64209,64211,64213,64215,64217,64220,64223,64225],{"class":36,"line":34358},[34,64210,52980],{"class":40},[34,64212,34],{"class":52939},[34,64214,55125],{"class":3617},[34,64216,221],{"class":40},[34,64218,64219],{"class":504},"\"total\"",[34,64221,64222],{"class":40},">0\u002F200字\u003C\u002F",[34,64224,34],{"class":52939},[34,64226,52946],{"class":40},[34,64228,64229,64231,64233],{"class":36,"line":34364},[34,64230,54056],{"class":40},[34,64232,53250],{"class":52939},[34,64234,52946],{"class":40},[34,64236,64237,64239,64241,64243,64245,64248],{"class":36,"line":34370},[34,64238,53783],{"class":40},[34,64240,53250],{"class":52939},[34,64242,55125],{"class":3617},[34,64244,221],{"class":40},[34,64246,64247],{"class":504},"\"list\"",[34,64249,52946],{"class":40},[34,64251,64252,64254,64256,64258,64260,64263,64266,64268,64271],{"class":36,"line":34376},[34,64253,52980],{"class":40},[34,64255,53250],{"class":52939},[34,64257,55125],{"class":3617},[34,64259,221],{"class":40},[34,64261,64262],{"class":504},"\"item\"",[34,64264,64265],{"class":3617}," style",[34,64267,221],{"class":40},[34,64269,64270],{"class":504},"\"display: none;\"",[34,64272,52946],{"class":40},[34,64274,64275,64277,64279,64281,64283,64285,64287,64289],{"class":36,"line":34382},[34,64276,56873],{"class":40},[34,64278,2239],{"class":52939},[34,64280,55125],{"class":3617},[34,64282,221],{"class":40},[34,64284,64125],{"class":504},[34,64286,56953],{"class":40},[34,64288,2239],{"class":52939},[34,64290,52946],{"class":40},[34,64292,64293,64295,64297,64299,64301,64304],{"class":36,"line":34388},[34,64294,56873],{"class":40},[34,64296,53250],{"class":52939},[34,64298,55125],{"class":3617},[34,64300,221],{"class":40},[34,64302,64303],{"class":504},"\"info\"",[34,64305,52946],{"class":40},[34,64307,64308,64310,64312,64314,64316,64319,64322,64324],{"class":36,"line":34394},[34,64309,56941],{"class":40},[34,64311,103],{"class":52939},[34,64313,55125],{"class":3617},[34,64315,221],{"class":40},[34,64317,64318],{"class":504},"\"name\"",[34,64320,64321],{"class":40},">清风徐来\u003C\u002F",[34,64323,103],{"class":52939},[34,64325,52946],{"class":40},[34,64327,64328,64330,64332,64334,64336,64339,64342,64344],{"class":36,"line":34414},[34,64329,56941],{"class":40},[34,64331,103],{"class":52939},[34,64333,55125],{"class":3617},[34,64335,221],{"class":40},[34,64337,64338],{"class":504},"\"text\"",[34,64340,64341],{"class":40},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[34,64343,103],{"class":52939},[34,64345,52946],{"class":40},[34,64347,64348,64350,64352,64354,64356,64359,64362,64364],{"class":36,"line":34420},[34,64349,56941],{"class":40},[34,64351,103],{"class":52939},[34,64353,55125],{"class":3617},[34,64355,221],{"class":40},[34,64357,64358],{"class":504},"\"time\"",[34,64360,64361],{"class":40},">2022-10-10 20:29:21\u003C\u002F",[34,64363,103],{"class":52939},[34,64365,52946],{"class":40},[34,64367,64368,64370,64372],{"class":36,"line":34436},[34,64369,57046],{"class":40},[34,64371,53250],{"class":52939},[34,64373,52946],{"class":40},[34,64375,64376,64378,64380],{"class":36,"line":34442},[34,64377,53415],{"class":40},[34,64379,53250],{"class":52939},[34,64381,52946],{"class":40},[34,64383,64384,64386,64388],{"class":36,"line":34456},[34,64385,54056],{"class":40},[34,64387,53250],{"class":52939},[34,64389,52946],{"class":40},[34,64391,64392,64394,64396],{"class":36,"line":34462},[34,64393,53783],{"class":40},[34,64395,53452],{"class":52939},[34,64397,52946],{"class":40},[34,64399,64400,64402,64405,64407,64409,64411,64413,64416],{"class":36,"line":34477},[34,64401,12871],{"class":55},[34,64403,64404],{"class":44}," tx",[34,64406,56],{"class":55},[34,64408,56035],{"class":40},[34,64410,56038],{"class":3617},[34,64412,286],{"class":40},[34,64414,64415],{"class":504},"'#tx'",[34,64417,101],{"class":40},[34,64419,64420,64422,64425,64427,64429,64431,64433,64436],{"class":36,"line":34483},[34,64421,12871],{"class":55},[34,64423,64424],{"class":44}," total",[34,64426,56],{"class":55},[34,64428,56035],{"class":40},[34,64430,56038],{"class":3617},[34,64432,286],{"class":40},[34,64434,64435],{"class":504},"'.total'",[34,64437,101],{"class":40},[34,64439,64440],{"class":36,"line":34492},[34,64441,64442],{"class":161},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[34,64444,64445,64448,64450,64452,64454,64456,64458],{"class":36,"line":34498},[34,64446,64447],{"class":40},"    tx.",[34,64449,59452],{"class":3617},[34,64451,286],{"class":40},[34,64453,62966],{"class":504},[34,64455,48],{"class":40},[34,64457,56088],{"class":55},[34,64459,56091],{"class":40},[34,64461,64462,64465,64467],{"class":36,"line":34507},[34,64463,64464],{"class":40},"      total.style.opacity ",[34,64466,221],{"class":55},[34,64468,57338],{"class":44},[34,64470,64471],{"class":36,"line":34513},[34,64472,35102],{"class":40},[34,64474,64475],{"class":36,"line":34519},[34,64476,64477],{"class":161},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[34,64479,64480,64482,64484,64486,64488,64490,64492],{"class":36,"line":34528},[34,64481,64447],{"class":40},[34,64483,59452],{"class":3617},[34,64485,286],{"class":40},[34,64487,63027],{"class":504},[34,64489,48],{"class":40},[34,64491,56088],{"class":55},[34,64493,56091],{"class":40},[34,64495,64496,64498,64500],{"class":36,"line":34534},[34,64497,64464],{"class":40},[34,64499,221],{"class":55},[34,64501,48972],{"class":44},[34,64503,64504],{"class":36,"line":34545},[34,64505,35102],{"class":40},[34,64507,64508],{"class":36,"line":34551},[34,64509,64510],{"class":161},"    \u002F\u002F 3. 检测用户输入\n",[34,64512,64513,64515,64517,64519,64522,64524,64526],{"class":36,"line":34570},[34,64514,64447],{"class":40},[34,64516,59452],{"class":3617},[34,64518,286],{"class":40},[34,64520,64521],{"class":504},"'input'",[34,64523,48],{"class":40},[34,64525,56088],{"class":55},[34,64527,56091],{"class":40},[34,64529,64530],{"class":36,"line":34576},[34,64531,64532],{"class":161},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[34,64534,64535,64538,64540,64543,64546,64548,64551,64553,64555],{"class":36,"line":34587},[34,64536,64537],{"class":40},"      total.innerHTML ",[34,64539,221],{"class":55},[34,64541,64542],{"class":504}," `${",[34,64544,64545],{"class":40},"tx",[34,64547,2353],{"class":504},[34,64549,64550],{"class":40},"value",[34,64552,2353],{"class":504},[34,64554,53607],{"class":44},[34,64556,64557],{"class":504},"}\u002F200字`\n",[34,64559,64560],{"class":36,"line":34593},[34,64561,35102],{"class":40},[34,64563,64564],{"class":36,"line":34613},[34,64565,1475],{"emptyLinePlaceholder":1474},[34,64567,64568],{"class":36,"line":34629},[34,64569,64570],{"class":161},"    \u002F\u002F const str = 'andy'\n",[34,64572,64573],{"class":36,"line":34635},[34,64574,64575],{"class":161},"    \u002F\u002F console.log(str.length)\n",[34,64577,64578,64580,64582],{"class":36,"line":34649},[34,64579,54056],{"class":40},[34,64581,53452],{"class":52939},[34,64583,52946],{"class":40},[34,64585,64586,64588,64590],{"class":36,"line":34655},[34,64587,53424],{"class":40},[34,64589,53439],{"class":52939},[34,64591,52946],{"class":40},[34,64593,64594],{"class":36,"line":34661},[34,64595,1475],{"emptyLinePlaceholder":1474},[34,64597,64598,64600,64602],{"class":36,"line":34672},[34,64599,53424],{"class":40},[34,64601,52274],{"class":52939},[34,64603,52946],{"class":40},[1353,64605,64607],{"id":64606},"_3254-change事件","3.2.5.4 change事件",[103,64609,64610],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[103,64612,64613],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[103,64615,64616],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[24,64618,64620],{"className":52272,"code":64619,"language":52274,"meta":29,"style":29},"\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",[31,64621,64622,64632,64646,64650,64658,64672,64692,64704,64712,64716,64724,64738,64746,64764,64782,64794,64798,64806,64814,64818],{"__ignoreMap":29},[34,64623,64624,64626,64628,64630],{"class":36,"line":37},[34,64625,52936],{"class":40},[34,64627,52940],{"class":52939},[34,64629,52943],{"class":3617},[34,64631,52946],{"class":40},[34,64633,64634,64636,64638,64640,64642,64644],{"class":36,"line":165},[34,64635,2701],{"class":40},[34,64637,52274],{"class":52939},[34,64639,52955],{"class":3617},[34,64641,221],{"class":40},[34,64643,52960],{"class":504},[34,64645,52946],{"class":40},[34,64647,64648],{"class":36,"line":171},[34,64649,1475],{"emptyLinePlaceholder":1474},[34,64651,64652,64654,64656],{"class":36,"line":182},[34,64653,2701],{"class":40},[34,64655,52973],{"class":52939},[34,64657,52946],{"class":40},[34,64659,64660,64662,64664,64666,64668,64670],{"class":36,"line":188},[34,64661,53783],{"class":40},[34,64663,52983],{"class":52939},[34,64665,52986],{"class":3617},[34,64667,221],{"class":40},[34,64669,52991],{"class":504},[34,64671,52946],{"class":40},[34,64673,64674,64676,64678,64680,64682,64684,64686,64688,64690],{"class":36,"line":518},[34,64675,53783],{"class":40},[34,64677,52983],{"class":52939},[34,64679,16566],{"class":3617},[34,64681,221],{"class":40},[34,64683,53030],{"class":504},[34,64685,53010],{"class":3617},[34,64687,221],{"class":40},[34,64689,53037],{"class":504},[34,64691,52946],{"class":40},[34,64693,64694,64696,64698,64700,64702],{"class":36,"line":524},[34,64695,53783],{"class":40},[34,64697,53046],{"class":52939},[34,64699,53049],{"class":40},[34,64701,53046],{"class":52939},[34,64703,52946],{"class":40},[34,64705,64706,64708,64710],{"class":36,"line":530},[34,64707,53424],{"class":40},[34,64709,52973],{"class":52939},[34,64711,52946],{"class":40},[34,64713,64714],{"class":36,"line":624},[34,64715,1475],{"emptyLinePlaceholder":1474},[34,64717,64718,64720,64722],{"class":36,"line":630},[34,64719,2701],{"class":40},[34,64721,53439],{"class":52939},[34,64723,52946],{"class":40},[34,64725,64726,64728,64730,64732,64734,64736],{"class":36,"line":636},[34,64727,53783],{"class":40},[34,64729,55460],{"class":52939},[34,64731,55463],{"class":3617},[34,64733,221],{"class":40},[34,64735,64338],{"class":504},[34,64737,52946],{"class":40},[34,64739,64740,64742,64744],{"class":36,"line":1513},[34,64741,53783],{"class":40},[34,64743,53452],{"class":52939},[34,64745,52946],{"class":40},[34,64747,64748,64750,64752,64754,64756,64758,64760,64762],{"class":36,"line":1519},[34,64749,12871],{"class":55},[34,64751,62244],{"class":44},[34,64753,56],{"class":55},[34,64755,56035],{"class":40},[34,64757,56038],{"class":3617},[34,64759,286],{"class":40},[34,64761,64521],{"class":504},[34,64763,101],{"class":40},[34,64765,64766,64769,64771,64773,64776,64778,64780],{"class":36,"line":3283},[34,64767,64768],{"class":40},"    input.",[34,64770,59452],{"class":3617},[34,64772,286],{"class":40},[34,64774,64775],{"class":504},"'change'",[34,64777,48],{"class":40},[34,64779,56088],{"class":55},[34,64781,56091],{"class":40},[34,64783,64784,64786,64788,64790,64792],{"class":36,"line":3297},[34,64785,59883],{"class":40},[34,64787,59886],{"class":3617},[34,64789,286],{"class":40},[34,64791,2388],{"class":44},[34,64793,101],{"class":40},[34,64795,64796],{"class":36,"line":3302},[34,64797,35102],{"class":40},[34,64799,64800,64802,64804],{"class":36,"line":3308},[34,64801,54056],{"class":40},[34,64803,53452],{"class":52939},[34,64805,52946],{"class":40},[34,64807,64808,64810,64812],{"class":36,"line":3328},[34,64809,53424],{"class":40},[34,64811,53439],{"class":52939},[34,64813,52946],{"class":40},[34,64815,64816],{"class":36,"line":3333},[34,64817,1475],{"emptyLinePlaceholder":1474},[34,64819,64820,64822,64824],{"class":36,"line":3347},[34,64821,53424],{"class":40},[34,64823,52274],{"class":52939},[34,64825,52946],{"class":40},[103,64827,64828],{},"总结：内容发生改变才回去触发",[19,64830,64832],{"id":64831},"_326-事件对象","3.2.6 事件对象",[1353,64834,64836],{"id":64835},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[103,64838,64839],{},[109,64840],{"alt":29,"src":64841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[103,64843,64844],{},[109,64845],{"alt":29,"src":64846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[103,64848,64849],{},"点击一次，就输出了事件对象，它是个对象",[103,64851,64852],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[103,64854,64855],{},[109,64856],{"alt":29,"src":64857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[1353,64859,64861],{"id":64860},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[103,64863,64864],{},[109,64865],{"alt":29,"src":64866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[103,64868,64869],{},"实现按特殊字符才是实现打印输出效果：",[24,64871,64873],{"className":54706,"code":64872,"language":54708,"meta":29,"style":29},"\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",[31,64874,64875,64883,64888,64902,64910,64915,64920,64925,64930,64935,64940,64945,64950,64955,64959,64963,64971],{"__ignoreMap":29},[34,64876,64877,64879,64881],{"class":36,"line":37},[34,64878,2701],{"class":40},[34,64880,53439],{"class":52939},[34,64882,52946],{"class":40},[34,64884,64885],{"class":36,"line":165},[34,64886,64887],{"class":161},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[34,64889,64890,64892,64894,64896,64898,64900],{"class":36,"line":171},[34,64891,53783],{"class":40},[34,64893,55460],{"class":52939},[34,64895,55463],{"class":3617},[34,64897,221],{"class":40},[34,64899,64338],{"class":504},[34,64901,52946],{"class":40},[34,64903,64904,64906,64908],{"class":36,"line":182},[34,64905,53783],{"class":40},[34,64907,53452],{"class":52939},[34,64909,52946],{"class":40},[34,64911,64912],{"class":36,"line":188},[34,64913,64914],{"class":40},"    \u002F\u002F const btn = document.querySelector('button')\n",[34,64916,64917],{"class":36,"line":518},[34,64918,64919],{"class":40},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[34,64921,64922],{"class":36,"line":524},[34,64923,64924],{"class":40},"    \u002F\u002F   console.log(e);\n",[34,64926,64927],{"class":36,"line":530},[34,64928,64929],{"class":40},"    \u002F\u002F })\n",[34,64931,64932],{"class":36,"line":624},[34,64933,64934],{"class":40},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[34,64936,64937],{"class":36,"line":630},[34,64938,64939],{"class":40},"    const input = document.querySelector('input')\n",[34,64941,64942],{"class":36,"line":636},[34,64943,64944],{"class":40},"    input.addEventListener('keyup', function (e) {\n",[34,64946,64947],{"class":36,"line":1513},[34,64948,64949],{"class":40},"      if (e.key === 'Enter') {\n",[34,64951,64952],{"class":36,"line":1519},[34,64953,64954],{"class":40},"        console.log('我按下了回车键')\n",[34,64956,64957],{"class":36,"line":3283},[34,64958,54037],{"class":40},[34,64960,64961],{"class":36,"line":3297},[34,64962,35102],{"class":40},[34,64964,64965,64967,64969],{"class":36,"line":3302},[34,64966,54056],{"class":40},[34,64968,53452],{"class":52939},[34,64970,52946],{"class":40},[34,64972,64973,64975,64977],{"class":36,"line":3308},[34,64974,53424],{"class":40},[34,64976,53439],{"class":52939},[34,64978,52946],{"class":40},[1353,64980,64982],{"id":64981},"_3263-trim方法","3.2.6.3 trim方法",[103,64984,64985],{},[109,64986],{"alt":29,"src":64987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[103,64989,64990],{},[109,64991],{"alt":29,"src":64992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[103,64994,64995],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[103,64997,64998],{},"str.trim()",[19,65000,65002],{"id":65001},"_327-环境对象","3.2.7 环境对象",[103,65004,65005],{},[109,65006],{"alt":29,"src":65007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[103,65009,65010],{},[109,65011],{"alt":29,"src":65012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[103,65014,65015],{},[109,65016],{"alt":29,"src":65017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[103,65019,65020],{},"实际函数调用是window.fn()",[103,65022,65023],{},"普通函数里面this指向的是window",[2798,65025,65026,65029,65032],{},[1775,65027,65028],{},"在普通函数下，this指向的是window",[1775,65030,65031],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[1775,65033,65034],{},"箭头函数没有this",[103,65036,65037],{},"粗略记法就是：谁调用，this就指向谁",[103,65039,65040],{},[109,65041],{"alt":29,"src":65042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[103,65044,65045],{},[109,65046],{"alt":29,"src":65047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[103,65049,65050],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[103,65052,65053],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[24,65055,65057],{"className":54706,"code":65056,"language":54708,"meta":29,"style":29},"\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",[31,65058,65059,65067,65079,65087,65092,65097,65102,65107,65111,65119],{"__ignoreMap":29},[34,65060,65061,65063,65065],{"class":36,"line":37},[34,65062,2701],{"class":40},[34,65064,53439],{"class":52939},[34,65066,52946],{"class":40},[34,65068,65069,65071,65073,65075,65077],{"class":36,"line":165},[34,65070,53783],{"class":40},[34,65072,55526],{"class":52939},[34,65074,55532],{"class":40},[34,65076,55526],{"class":52939},[34,65078,52946],{"class":40},[34,65080,65081,65083,65085],{"class":36,"line":171},[34,65082,53783],{"class":40},[34,65084,53452],{"class":52939},[34,65086,52946],{"class":40},[34,65088,65089],{"class":36,"line":182},[34,65090,65091],{"class":40},"    const button = document.querySelector('button')\n",[34,65093,65094],{"class":36,"line":188},[34,65095,65096],{"class":40},"    button.addEventListener('click', function () {\n",[34,65098,65099],{"class":36,"line":518},[34,65100,65101],{"class":40},"      \u002F\u002F console.log(this);\n",[34,65103,65104],{"class":36,"line":524},[34,65105,65106],{"class":40},"      this.style.color = 'pink'\n",[34,65108,65109],{"class":36,"line":530},[34,65110,35102],{"class":40},[34,65112,65113,65115,65117],{"class":36,"line":624},[34,65114,54056],{"class":40},[34,65116,53452],{"class":52939},[34,65118,52946],{"class":40},[34,65120,65121,65123,65125],{"class":36,"line":630},[34,65122,53424],{"class":40},[34,65124,53439],{"class":52939},[34,65126,52946],{"class":40},[19,65128,65130],{"id":65129},"_328-回调函数","3.2.8 回调函数",[103,65132,65133],{},[109,65134],{"alt":29,"src":65135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[103,65137,65138],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[103,65140,12982],{},[2798,65142,65143,65146,65149],{},[1775,65144,65145],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[1775,65147,65148],{},"回调函数本质还是函数，只不过把它当成参数使用",[1775,65150,65151],{},"使用匿名函数做为回调函数比较常见",[19,65153,65155],{"id":65154},"_329-tab栏切换","3.2.9 tab栏切换",[103,65157,65158],{},[109,65159],{"alt":29,"src":65160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[24,65162,65164],{"className":52272,"code":65163,"language":52274,"meta":29,"style":29},"\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",[31,65165,65166,65176,65190,65194,65202,65216,65236,65256,65269,65277,65283,65293,65303,65307,65311,65318,65331,65344,65356,65372,65376,65380,65387,65399,65411,65423,65433,65443,65447,65451,65460,65472,65483,65495,65499,65503,65511,65521,65531,65541,65545,65549,65559,65573,65585,65589,65593,65605,65616,65633,65643,65647,65651,65666,65677,65687,65691,65695,65702,65717,65721,65725,65733,65743,65747,65751,65760,65770,65774,65782,65790,65794,65802,65817,65832,65845,65853,65887,65914,65941,65968,65995,66003,66011,66026,66063,66098,66133,66168,66203,66211,66219,66227,66232,66237,66257,66262,66291,66296,66301,66319,66324,66329,66334,66356,66361,66377,66381,66386,66391,66412,66417,66446,66450,66455,66459,66467,66475,66479],{"__ignoreMap":29},[34,65167,65168,65170,65172,65174],{"class":36,"line":37},[34,65169,52936],{"class":40},[34,65171,52940],{"class":52939},[34,65173,52943],{"class":3617},[34,65175,52946],{"class":40},[34,65177,65178,65180,65182,65184,65186,65188],{"class":36,"line":165},[34,65179,2701],{"class":40},[34,65181,52274],{"class":52939},[34,65183,52955],{"class":3617},[34,65185,221],{"class":40},[34,65187,52960],{"class":504},[34,65189,52946],{"class":40},[34,65191,65192],{"class":36,"line":171},[34,65193,1475],{"emptyLinePlaceholder":1474},[34,65195,65196,65198,65200],{"class":36,"line":182},[34,65197,2701],{"class":40},[34,65199,52973],{"class":52939},[34,65201,52946],{"class":40},[34,65203,65204,65206,65208,65210,65212,65214],{"class":36,"line":188},[34,65205,53783],{"class":40},[34,65207,52983],{"class":52939},[34,65209,52986],{"class":3617},[34,65211,221],{"class":40},[34,65213,52991],{"class":504},[34,65215,60766],{"class":40},[34,65217,65218,65220,65222,65224,65226,65228,65230,65232,65234],{"class":36,"line":518},[34,65219,53783],{"class":40},[34,65221,52983],{"class":52939},[34,65223,53002],{"class":3617},[34,65225,221],{"class":40},[34,65227,53007],{"class":504},[34,65229,53010],{"class":3617},[34,65231,221],{"class":40},[34,65233,53015],{"class":504},[34,65235,60766],{"class":40},[34,65237,65238,65240,65242,65244,65246,65248,65250,65252,65254],{"class":36,"line":524},[34,65239,53783],{"class":40},[34,65241,52983],{"class":52939},[34,65243,16566],{"class":3617},[34,65245,221],{"class":40},[34,65247,53030],{"class":504},[34,65249,53010],{"class":3617},[34,65251,221],{"class":40},[34,65253,53037],{"class":504},[34,65255,60766],{"class":40},[34,65257,65258,65260,65262,65265,65267],{"class":36,"line":530},[34,65259,53783],{"class":40},[34,65261,53046],{"class":52939},[34,65263,65264],{"class":40},">tab栏切换\u003C\u002F",[34,65266,53046],{"class":52939},[34,65268,52946],{"class":40},[34,65270,65271,65273,65275],{"class":36,"line":624},[34,65272,53783],{"class":40},[34,65274,1711],{"class":52939},[34,65276,52946],{"class":40},[34,65278,65279,65281],{"class":36,"line":630},[34,65280,8053],{"class":52939},[34,65282,17218],{"class":40},[34,65284,65285,65287,65289,65291],{"class":36,"line":636},[34,65286,56345],{"class":44},[34,65288,53076],{"class":40},[34,65290,177],{"class":44},[34,65292,2952],{"class":40},[34,65294,65295,65297,65299,65301],{"class":36,"line":1513},[34,65296,56334],{"class":44},[34,65298,53076],{"class":40},[34,65300,177],{"class":44},[34,65302,2952],{"class":40},[34,65304,65305],{"class":36,"line":1519},[34,65306,3841],{"class":40},[34,65308,65309],{"class":36,"line":3283},[34,65310,1475],{"emptyLinePlaceholder":1474},[34,65312,65313,65316],{"class":36,"line":3297},[34,65314,65315],{"class":3617},"    .tab",[34,65317,17218],{"class":40},[34,65319,65320,65322,65324,65327,65329],{"class":36,"line":3302},[34,65321,56410],{"class":44},[34,65323,53076],{"class":40},[34,65325,65326],{"class":44},"590",[34,65328,53131],{"class":55},[34,65330,2952],{"class":40},[34,65332,65333,65335,65337,65340,65342],{"class":36,"line":3308},[34,65334,56424],{"class":44},[34,65336,53076],{"class":40},[34,65338,65339],{"class":44},"340",[34,65341,53131],{"class":55},[34,65343,2952],{"class":40},[34,65345,65346,65348,65350,65352,65354],{"class":36,"line":3328},[34,65347,56345],{"class":44},[34,65349,53076],{"class":40},[34,65351,1249],{"class":44},[34,65353,53131],{"class":55},[34,65355,2952],{"class":40},[34,65357,65358,65360,65362,65364,65366,65368,65370],{"class":36,"line":3333},[34,65359,63616],{"class":44},[34,65361,53076],{"class":40},[34,65363,394],{"class":44},[34,65365,53131],{"class":55},[34,65367,53160],{"class":44},[34,65369,63883],{"class":44},[34,65371,2952],{"class":40},[34,65373,65374],{"class":36,"line":3347},[34,65375,3841],{"class":40},[34,65377,65378],{"class":36,"line":3352},[34,65379,1475],{"emptyLinePlaceholder":1474},[34,65381,65382,65385],{"class":36,"line":3381},[34,65383,65384],{"class":3617},"    .tab-nav",[34,65386,17218],{"class":40},[34,65388,65389,65391,65393,65395,65397],{"class":36,"line":3386},[34,65390,56410],{"class":44},[34,65392,53076],{"class":40},[34,65394,451],{"class":44},[34,65396,2131],{"class":55},[34,65398,2952],{"class":40},[34,65400,65401,65403,65405,65407,65409],{"class":36,"line":3403},[34,65402,56424],{"class":44},[34,65404,53076],{"class":40},[34,65406,2698],{"class":44},[34,65408,53131],{"class":55},[34,65410,2952],{"class":40},[34,65412,65413,65415,65417,65419,65421],{"class":36,"line":3408},[34,65414,58998],{"class":44},[34,65416,53076],{"class":40},[34,65418,2698],{"class":44},[34,65420,53131],{"class":55},[34,65422,2952],{"class":40},[34,65424,65425,65427,65429,65431],{"class":36,"line":3413},[34,65426,56648],{"class":44},[34,65428,53076],{"class":40},[34,65430,53116],{"class":44},[34,65432,2952],{"class":40},[34,65434,65435,65437,65439,65441],{"class":36,"line":3418},[34,65436,56659],{"class":44},[34,65438,53076],{"class":40},[34,65440,53307],{"class":44},[34,65442,2952],{"class":40},[34,65444,65445],{"class":36,"line":3432},[34,65446,3841],{"class":40},[34,65448,65449],{"class":36,"line":3437},[34,65450,1475],{"emptyLinePlaceholder":1474},[34,65452,65453,65455,65458],{"class":36,"line":4230},[34,65454,65384],{"class":3617},[34,65456,65457],{"class":52939}," h3",[34,65459,17218],{"class":40},[34,65461,65462,65464,65466,65468,65470],{"class":36,"line":4244},[34,65463,56561],{"class":44},[34,65465,53076],{"class":40},[34,65467,2593],{"class":44},[34,65469,53131],{"class":55},[34,65471,2952],{"class":40},[34,65473,65474,65476,65478,65481],{"class":36,"line":4252},[34,65475,63973],{"class":44},[34,65477,53076],{"class":40},[34,65479,65480],{"class":44},"normal",[34,65482,2952],{"class":40},[34,65484,65485,65487,65489,65491,65493],{"class":36,"line":4257},[34,65486,63639],{"class":44},[34,65488,53076],{"class":40},[34,65490,1249],{"class":44},[34,65492,53131],{"class":55},[34,65494,2952],{"class":40},[34,65496,65497],{"class":36,"line":4263},[34,65498,3841],{"class":40},[34,65500,65501],{"class":36,"line":4269},[34,65502,1475],{"emptyLinePlaceholder":1474},[34,65504,65505,65507,65509],{"class":36,"line":4274},[34,65506,65384],{"class":3617},[34,65508,62931],{"class":52939},[34,65510,17218],{"class":40},[34,65512,65513,65515,65517,65519],{"class":36,"line":9598},[34,65514,56371],{"class":44},[34,65516,53076],{"class":40},[34,65518,56376],{"class":44},[34,65520,2952],{"class":40},[34,65522,65523,65525,65527,65529],{"class":36,"line":9622},[34,65524,56648],{"class":44},[34,65526,53076],{"class":40},[34,65528,53116],{"class":44},[34,65530,2952],{"class":40},[34,65532,65533,65535,65537,65539],{"class":36,"line":9627},[34,65534,56659],{"class":44},[34,65536,53076],{"class":40},[34,65538,53219],{"class":44},[34,65540,2952],{"class":40},[34,65542,65543],{"class":36,"line":9633},[34,65544,3841],{"class":40},[34,65546,65547],{"class":36,"line":9660},[34,65548,1475],{"emptyLinePlaceholder":1474},[34,65550,65551,65553,65555,65557],{"class":36,"line":9665},[34,65552,65384],{"class":3617},[34,65554,62931],{"class":52939},[34,65556,56714],{"class":52939},[34,65558,17218],{"class":40},[34,65560,65561,65563,65565,65567,65569,65571],{"class":36,"line":9671},[34,65562,56345],{"class":44},[34,65564,53076],{"class":40},[34,65566,177],{"class":44},[34,65568,10600],{"class":44},[34,65570,53131],{"class":55},[34,65572,2952],{"class":40},[34,65574,65575,65577,65579,65581,65583],{"class":36,"line":9683},[34,65576,56561],{"class":44},[34,65578,53076],{"class":40},[34,65580,2344],{"class":44},[34,65582,53131],{"class":55},[34,65584,2952],{"class":40},[34,65586,65587],{"class":36,"line":9695},[34,65588,3841],{"class":40},[34,65590,65591],{"class":36,"line":9707},[34,65592,1475],{"emptyLinePlaceholder":1474},[34,65594,65595,65597,65599,65601,65603],{"class":36,"line":11366},[34,65596,65384],{"class":3617},[34,65598,62931],{"class":52939},[34,65600,56714],{"class":52939},[34,65602,3057],{"class":52939},[34,65604,17218],{"class":40},[34,65606,65607,65610,65612,65614],{"class":36,"line":11391},[34,65608,65609],{"class":44},"      text-decoration",[34,65611,53076],{"class":40},[34,65613,56376],{"class":44},[34,65615,2952],{"class":40},[34,65617,65618,65620,65622,65624,65626,65628,65631],{"class":36,"line":11414},[34,65619,63871],{"class":44},[34,65621,53076],{"class":40},[34,65623,332],{"class":44},[34,65625,53131],{"class":55},[34,65627,53160],{"class":44},[34,65629,65630],{"class":44}," transparent",[34,65632,2952],{"class":40},[34,65634,65635,65637,65639,65641],{"class":36,"line":11438},[34,65636,59055],{"class":44},[34,65638,53076],{"class":40},[34,65640,64008],{"class":44},[34,65642,2952],{"class":40},[34,65644,65645],{"class":36,"line":11443},[34,65646,3841],{"class":40},[34,65648,65649],{"class":36,"line":11448},[34,65650,1475],{"emptyLinePlaceholder":1474},[34,65652,65653,65655,65657,65659,65661,65664],{"class":36,"line":11453},[34,65654,65384],{"class":3617},[34,65656,62931],{"class":52939},[34,65658,56714],{"class":52939},[34,65660,3057],{"class":52939},[34,65662,65663],{"class":3617},".active",[34,65665,17218],{"class":40},[34,65667,65668,65670,65672,65675],{"class":36,"line":11462},[34,65669,63430],{"class":44},[34,65671,53076],{"class":40},[34,65673,65674],{"class":44},"#e1251b",[34,65676,2952],{"class":40},[34,65678,65679,65681,65683,65685],{"class":36,"line":11467},[34,65680,59055],{"class":44},[34,65682,53076],{"class":40},[34,65684,65674],{"class":44},[34,65686,2952],{"class":40},[34,65688,65689],{"class":36,"line":11473},[34,65690,3841],{"class":40},[34,65692,65693],{"class":36,"line":11494},[34,65694,1475],{"emptyLinePlaceholder":1474},[34,65696,65697,65700],{"class":36,"line":11500},[34,65698,65699],{"class":3617},"    .tab-content",[34,65701,17218],{"class":40},[34,65703,65704,65706,65708,65710,65713,65715],{"class":36,"line":11514},[34,65705,56334],{"class":44},[34,65707,53076],{"class":40},[34,65709,177],{"class":44},[34,65711,65712],{"class":44}," 16",[34,65714,53131],{"class":55},[34,65716,2952],{"class":40},[34,65718,65719],{"class":36,"line":11520},[34,65720,3841],{"class":40},[34,65722,65723],{"class":36,"line":11547},[34,65724,1475],{"emptyLinePlaceholder":1474},[34,65726,65727,65729,65731],{"class":36,"line":11556},[34,65728,65699],{"class":3617},[34,65730,63813],{"class":3617},[34,65732,17218],{"class":40},[34,65734,65735,65737,65739,65741],{"class":36,"line":11562},[34,65736,56648],{"class":44},[34,65738,53076],{"class":40},[34,65740,56376],{"class":44},[34,65742,2952],{"class":40},[34,65744,65745],{"class":36,"line":11570},[34,65746,3841],{"class":40},[34,65748,65749],{"class":36,"line":11575},[34,65750,1475],{"emptyLinePlaceholder":1474},[34,65752,65753,65755,65758],{"class":36,"line":18250},[34,65754,65699],{"class":3617},[34,65756,65757],{"class":3617}," .item.active",[34,65759,17218],{"class":40},[34,65761,65762,65764,65766,65768],{"class":36,"line":18256},[34,65763,56648],{"class":44},[34,65765,53076],{"class":40},[34,65767,62508],{"class":44},[34,65769,2952],{"class":40},[34,65771,65772],{"class":36,"line":18279},[34,65773,3841],{"class":40},[34,65775,65776,65778,65780],{"class":36,"line":18285},[34,65777,54056],{"class":40},[34,65779,1711],{"class":52939},[34,65781,52946],{"class":40},[34,65783,65784,65786,65788],{"class":36,"line":18308},[34,65785,53424],{"class":40},[34,65787,52973],{"class":52939},[34,65789,52946],{"class":40},[34,65791,65792],{"class":36,"line":18322},[34,65793,1475],{"emptyLinePlaceholder":1474},[34,65795,65796,65798,65800],{"class":36,"line":18342},[34,65797,2701],{"class":40},[34,65799,53439],{"class":52939},[34,65801,52946],{"class":40},[34,65803,65804,65806,65808,65810,65812,65815],{"class":36,"line":18348},[34,65805,53783],{"class":40},[34,65807,53250],{"class":52939},[34,65809,55125],{"class":3617},[34,65811,221],{"class":40},[34,65813,65814],{"class":504},"\"tab\"",[34,65816,52946],{"class":40},[34,65818,65819,65821,65823,65825,65827,65830],{"class":36,"line":18359},[34,65820,52980],{"class":40},[34,65822,53250],{"class":52939},[34,65824,55125],{"class":3617},[34,65826,221],{"class":40},[34,65828,65829],{"class":504},"\"tab-nav\"",[34,65831,52946],{"class":40},[34,65833,65834,65836,65838,65841,65843],{"class":36,"line":18382},[34,65835,56873],{"class":40},[34,65837,19],{"class":52939},[34,65839,65840],{"class":40},">每日特价\u003C\u002F",[34,65842,19],{"class":52939},[34,65844,52946],{"class":40},[34,65846,65847,65849,65851],{"class":36,"line":18404},[34,65848,56873],{"class":40},[34,65850,2798],{"class":52939},[34,65852,52946],{"class":40},[34,65854,65855,65857,65859,65861,65863,65865,65867,65869,65871,65873,65876,65879,65881,65883,65885],{"class":36,"line":18409},[34,65856,56941],{"class":40},[34,65858,1775],{"class":52939},[34,65860,62691],{"class":40},[34,65862,236],{"class":52939},[34,65864,55125],{"class":3617},[34,65866,221],{"class":40},[34,65868,61345],{"class":504},[34,65870,62696],{"class":3617},[34,65872,221],{"class":40},[34,65874,65875],{"class":504},"\"javascript:;\"",[34,65877,65878],{"class":40},">精选\u003C\u002F",[34,65880,236],{"class":52939},[34,65882,56953],{"class":40},[34,65884,1775],{"class":52939},[34,65886,52946],{"class":40},[34,65888,65889,65891,65893,65895,65897,65899,65901,65903,65906,65908,65910,65912],{"class":36,"line":18415},[34,65890,56941],{"class":40},[34,65892,1775],{"class":52939},[34,65894,62691],{"class":40},[34,65896,236],{"class":52939},[34,65898,62696],{"class":3617},[34,65900,221],{"class":40},[34,65902,65875],{"class":504},[34,65904,65905],{"class":40},">美食\u003C\u002F",[34,65907,236],{"class":52939},[34,65909,56953],{"class":40},[34,65911,1775],{"class":52939},[34,65913,52946],{"class":40},[34,65915,65916,65918,65920,65922,65924,65926,65928,65930,65933,65935,65937,65939],{"class":36,"line":18429},[34,65917,56941],{"class":40},[34,65919,1775],{"class":52939},[34,65921,62691],{"class":40},[34,65923,236],{"class":52939},[34,65925,62696],{"class":3617},[34,65927,221],{"class":40},[34,65929,65875],{"class":504},[34,65931,65932],{"class":40},">百货\u003C\u002F",[34,65934,236],{"class":52939},[34,65936,56953],{"class":40},[34,65938,1775],{"class":52939},[34,65940,52946],{"class":40},[34,65942,65943,65945,65947,65949,65951,65953,65955,65957,65960,65962,65964,65966],{"class":36,"line":18442},[34,65944,56941],{"class":40},[34,65946,1775],{"class":52939},[34,65948,62691],{"class":40},[34,65950,236],{"class":52939},[34,65952,62696],{"class":3617},[34,65954,221],{"class":40},[34,65956,65875],{"class":504},[34,65958,65959],{"class":40},">个护\u003C\u002F",[34,65961,236],{"class":52939},[34,65963,56953],{"class":40},[34,65965,1775],{"class":52939},[34,65967,52946],{"class":40},[34,65969,65970,65972,65974,65976,65978,65980,65982,65984,65987,65989,65991,65993],{"class":36,"line":18447},[34,65971,56941],{"class":40},[34,65973,1775],{"class":52939},[34,65975,62691],{"class":40},[34,65977,236],{"class":52939},[34,65979,62696],{"class":3617},[34,65981,221],{"class":40},[34,65983,65875],{"class":504},[34,65985,65986],{"class":40},">预告\u003C\u002F",[34,65988,236],{"class":52939},[34,65990,56953],{"class":40},[34,65992,1775],{"class":52939},[34,65994,52946],{"class":40},[34,65996,65997,65999,66001],{"class":36,"line":18461},[34,65998,57046],{"class":40},[34,66000,2798],{"class":52939},[34,66002,52946],{"class":40},[34,66004,66005,66007,66009],{"class":36,"line":18466},[34,66006,53415],{"class":40},[34,66008,53250],{"class":52939},[34,66010,52946],{"class":40},[34,66012,66013,66015,66017,66019,66021,66024],{"class":36,"line":18472},[34,66014,52980],{"class":40},[34,66016,53250],{"class":52939},[34,66018,55125],{"class":3617},[34,66020,221],{"class":40},[34,66022,66023],{"class":504},"\"tab-content\"",[34,66025,52946],{"class":40},[34,66027,66028,66030,66032,66034,66036,66039,66041,66043,66045,66047,66050,66052,66054,66056,66059,66061],{"class":36,"line":18477},[34,66029,56873],{"class":40},[34,66031,53250],{"class":52939},[34,66033,55125],{"class":3617},[34,66035,221],{"class":40},[34,66037,66038],{"class":504},"\"item active\"",[34,66040,62691],{"class":40},[34,66042,109],{"class":52939},[34,66044,56878],{"class":3617},[34,66046,221],{"class":40},[34,66048,66049],{"class":504},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[34,66051,56886],{"class":3617},[34,66053,221],{"class":40},[34,66055,9302],{"class":504},[34,66057,66058],{"class":40}," \u002F>\u003C\u002F",[34,66060,53250],{"class":52939},[34,66062,52946],{"class":40},[34,66064,66065,66067,66069,66071,66073,66075,66077,66079,66081,66083,66086,66088,66090,66092,66094,66096],{"class":36,"line":18491},[34,66066,56873],{"class":40},[34,66068,53250],{"class":52939},[34,66070,55125],{"class":3617},[34,66072,221],{"class":40},[34,66074,64262],{"class":504},[34,66076,62691],{"class":40},[34,66078,109],{"class":52939},[34,66080,56878],{"class":3617},[34,66082,221],{"class":40},[34,66084,66085],{"class":504},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[34,66087,56886],{"class":3617},[34,66089,221],{"class":40},[34,66091,9302],{"class":504},[34,66093,66058],{"class":40},[34,66095,53250],{"class":52939},[34,66097,52946],{"class":40},[34,66099,66100,66102,66104,66106,66108,66110,66112,66114,66116,66118,66121,66123,66125,66127,66129,66131],{"class":36,"line":18496},[34,66101,56873],{"class":40},[34,66103,53250],{"class":52939},[34,66105,55125],{"class":3617},[34,66107,221],{"class":40},[34,66109,64262],{"class":504},[34,66111,62691],{"class":40},[34,66113,109],{"class":52939},[34,66115,56878],{"class":3617},[34,66117,221],{"class":40},[34,66119,66120],{"class":504},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[34,66122,56886],{"class":3617},[34,66124,221],{"class":40},[34,66126,9302],{"class":504},[34,66128,66058],{"class":40},[34,66130,53250],{"class":52939},[34,66132,52946],{"class":40},[34,66134,66135,66137,66139,66141,66143,66145,66147,66149,66151,66153,66156,66158,66160,66162,66164,66166],{"class":36,"line":18501},[34,66136,56873],{"class":40},[34,66138,53250],{"class":52939},[34,66140,55125],{"class":3617},[34,66142,221],{"class":40},[34,66144,64262],{"class":504},[34,66146,62691],{"class":40},[34,66148,109],{"class":52939},[34,66150,56878],{"class":3617},[34,66152,221],{"class":40},[34,66154,66155],{"class":504},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[34,66157,56886],{"class":3617},[34,66159,221],{"class":40},[34,66161,9302],{"class":504},[34,66163,66058],{"class":40},[34,66165,53250],{"class":52939},[34,66167,52946],{"class":40},[34,66169,66170,66172,66174,66176,66178,66180,66182,66184,66186,66188,66191,66193,66195,66197,66199,66201],{"class":36,"line":18515},[34,66171,56873],{"class":40},[34,66173,53250],{"class":52939},[34,66175,55125],{"class":3617},[34,66177,221],{"class":40},[34,66179,64262],{"class":504},[34,66181,62691],{"class":40},[34,66183,109],{"class":52939},[34,66185,56878],{"class":3617},[34,66187,221],{"class":40},[34,66189,66190],{"class":504},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[34,66192,56886],{"class":3617},[34,66194,221],{"class":40},[34,66196,9302],{"class":504},[34,66198,66058],{"class":40},[34,66200,53250],{"class":52939},[34,66202,52946],{"class":40},[34,66204,66205,66207,66209],{"class":36,"line":18527},[34,66206,53415],{"class":40},[34,66208,53250],{"class":52939},[34,66210,52946],{"class":40},[34,66212,66213,66215,66217],{"class":36,"line":18532},[34,66214,54056],{"class":40},[34,66216,53250],{"class":52939},[34,66218,52946],{"class":40},[34,66220,66221,66223,66225],{"class":36,"line":18545},[34,66222,53783],{"class":40},[34,66224,53452],{"class":52939},[34,66226,52946],{"class":40},[34,66228,66229],{"class":36,"line":18550},[34,66230,66231],{"class":161},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[34,66233,66234],{"class":36,"line":18555},[34,66235,66236],{"class":161},"    \u002F\u002F 1.1 获取 a 元素 \n",[34,66238,66239,66241,66244,66246,66248,66250,66252,66255],{"class":36,"line":18560},[34,66240,12871],{"class":55},[34,66242,66243],{"class":44}," as",[34,66245,56],{"class":55},[34,66247,56035],{"class":40},[34,66249,57320],{"class":3617},[34,66251,286],{"class":40},[34,66253,66254],{"class":504},"'.tab-nav a'",[34,66256,101],{"class":40},[34,66258,66259],{"class":36,"line":18573},[34,66260,66261],{"class":161},"    \u002F\u002F console.log(as) \n",[34,66263,66264,66266,66268,66270,66272,66274,66276,66278,66280,66283,66285,66287,66289],{"class":36,"line":18578},[34,66265,4854],{"class":55},[34,66267,3313],{"class":40},[34,66269,53486],{"class":55},[34,66271,11088],{"class":40},[34,66273,221],{"class":55},[34,66275,98],{"class":44},[34,66277,11095],{"class":40},[34,66279,2701],{"class":55},[34,66281,66282],{"class":40}," as.",[34,66284,53607],{"class":44},[34,66286,4867],{"class":40},[34,66288,3946],{"class":55},[34,66290,14090],{"class":40},[34,66292,66293],{"class":36,"line":34274},[34,66294,66295],{"class":161},"      \u002F\u002F console.log(as[i])\n",[34,66297,66298],{"class":36,"line":34280},[34,66299,66300],{"class":161},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[34,66302,66303,66306,66308,66310,66313,66315,66317],{"class":36,"line":34286},[34,66304,66305],{"class":40},"      as[i].",[34,66307,59452],{"class":3617},[34,66309,286],{"class":40},[34,66311,66312],{"class":504},"'mouseenter'",[34,66314,48],{"class":40},[34,66316,56088],{"class":55},[34,66318,56091],{"class":40},[34,66320,66321],{"class":36,"line":34292},[34,66322,66323],{"class":161},"        \u002F\u002F console.log('鼠标经过')\n",[34,66325,66326],{"class":36,"line":34298},[34,66327,66328],{"class":161},"        \u002F\u002F 排他思想  \n",[34,66330,66331],{"class":36,"line":34309},[34,66332,66333],{"class":161},"        \u002F\u002F 干掉别人 移除类active\n",[34,66335,66336,66338,66340,66342,66345,66347,66349,66351,66354],{"class":36,"line":34315},[34,66337,53564],{"class":40},[34,66339,56038],{"class":3617},[34,66341,286],{"class":40},[34,66343,66344],{"class":504},"'.tab-nav .active'",[34,66346,58642],{"class":40},[34,66348,58645],{"class":3617},[34,66350,286],{"class":40},[34,66352,66353],{"class":504},"'active'",[34,66355,101],{"class":40},[34,66357,66358],{"class":36,"line":34335},[34,66359,66360],{"class":161},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[34,66362,66363,66366,66369,66371,66373,66375],{"class":36,"line":34341},[34,66364,66365],{"class":44},"        this",[34,66367,66368],{"class":40},".classList.",[34,66370,6984],{"class":3617},[34,66372,286],{"class":40},[34,66374,66353],{"class":504},[34,66376,101],{"class":40},[34,66378,66379],{"class":36,"line":34352},[34,66380,1475],{"emptyLinePlaceholder":1474},[34,66382,66383],{"class":36,"line":34358},[34,66384,66385],{"class":161},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[34,66387,66388],{"class":36,"line":34364},[34,66389,66390],{"class":161},"        \u002F\u002F 干掉别人\n",[34,66392,66393,66395,66397,66399,66402,66404,66406,66408,66410],{"class":36,"line":34370},[34,66394,53564],{"class":40},[34,66396,56038],{"class":3617},[34,66398,286],{"class":40},[34,66400,66401],{"class":504},"'.tab-content .active'",[34,66403,58642],{"class":40},[34,66405,58645],{"class":3617},[34,66407,286],{"class":40},[34,66409,66353],{"class":504},[34,66411,101],{"class":40},[34,66413,66414],{"class":36,"line":34376},[34,66415,66416],{"class":161},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[34,66418,66419,66421,66423,66425,66428,66430,66432,66434,66436,66438,66440,66442,66444],{"class":36,"line":34382},[34,66420,53564],{"class":40},[34,66422,56038],{"class":3617},[34,66424,286],{"class":40},[34,66426,66427],{"class":504},"`.tab-content .item:nth-child(${",[34,66429,2239],{"class":40},[34,66431,47205],{"class":55},[34,66433,26764],{"class":44},[34,66435,58671],{"class":504},[34,66437,58642],{"class":40},[34,66439,6984],{"class":3617},[34,66441,286],{"class":40},[34,66443,66353],{"class":504},[34,66445,101],{"class":40},[34,66447,66448],{"class":36,"line":34388},[34,66449,1475],{"emptyLinePlaceholder":1474},[34,66451,66452],{"class":36,"line":34394},[34,66453,66454],{"class":40},"      })\n",[34,66456,66457],{"class":36,"line":34414},[34,66458,3841],{"class":40},[34,66460,66461,66463,66465],{"class":36,"line":34420},[34,66462,54056],{"class":40},[34,66464,53452],{"class":52939},[34,66466,52946],{"class":40},[34,66468,66469,66471,66473],{"class":36,"line":34436},[34,66470,53424],{"class":40},[34,66472,53439],{"class":52939},[34,66474,52946],{"class":40},[34,66476,66477],{"class":36,"line":34442},[34,66478,1475],{"emptyLinePlaceholder":1474},[34,66480,66481,66483,66485],{"class":36,"line":34456},[34,66482,53424],{"class":40},[34,66484,52274],{"class":52939},[34,66486,52946],{"class":40},[103,66488,66489],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[103,66491,66492],{},"在监听事件中，this指向的就是他的调用者",[103,66494,66495],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[103,66497,55359],{},[103,66499,66500],{},"(function () {",[103,66502,66503],{},"const list = document.querySelector('.xtx-elevator-list')",[103,66505,66506],{},"list.addEventListener('click', function (e) {",[103,66508,66509],{},"if (e.target.tagName === 'A') {",[103,66511,66512],{},"\u002F\u002F 排他思想",[103,66514,66515],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[103,66517,66518],{},"const old = document.querySelector('.xtx-elevator-list .active')",[103,66520,66521],{},"\u002F\u002F console.log(old);",[103,66523,66524],{},"\u002F\u002F 判断",[103,66526,66527],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[103,66529,66530],{},"if (old) old.classList.remove('active')",[103,66532,66533],{},"e.target.classList.add('active')",[103,66535,2737],{},[103,66537,54103],{},[103,66539,66540],{},"})();",[19,66542,66544],{"id":66543},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[24,66546,66548],{"className":52272,"code":66547,"language":52274,"meta":29,"style":29},"\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",[31,66549,66550,66560,66564,66572,66576,66590,66604,66616,66624,66630,66640,66650,66654,66658,66665,66677,66688,66705,66718,66732,66742,66746,66750,66757,66768,66786,66796,66808,66812,66816,66823,66840,66851,66863,66867,66871,66878,66890,66894,66902,66910,66914,66922,66930,66938,66953,66997,67005,67018,67031,67044,67052,67060,67068,67096,67104,67116,67129,67142,67150,67158,67166,67192,67200,67213,67225,67238,67246,67254,67262,67288,67296,67309,67321,67334,67342,67350,67358,67363,67383,67388,67408,67413,67430,67435,67443,67448,67477,67490,67494,67498,67503,67507,67535,67540,67557,67562,67567,67572,67577,67603,67607,67611,67619,67627,67631],{"__ignoreMap":29},[34,66551,66552,66554,66556,66558],{"class":36,"line":37},[34,66553,52936],{"class":40},[34,66555,52940],{"class":52939},[34,66557,52943],{"class":3617},[34,66559,52946],{"class":40},[34,66561,66562],{"class":36,"line":165},[34,66563,1475],{"emptyLinePlaceholder":1474},[34,66565,66566,66568,66570],{"class":36,"line":171},[34,66567,2701],{"class":40},[34,66569,52274],{"class":52939},[34,66571,52946],{"class":40},[34,66573,66574],{"class":36,"line":182},[34,66575,1475],{"emptyLinePlaceholder":1474},[34,66577,66578,66580,66582,66584,66586,66588],{"class":36,"line":188},[34,66579,2701],{"class":40},[34,66581,52973],{"class":52939},[34,66583,52955],{"class":3617},[34,66585,221],{"class":40},[34,66587,52960],{"class":504},[34,66589,52946],{"class":40},[34,66591,66592,66594,66596,66598,66600,66602],{"class":36,"line":518},[34,66593,53783],{"class":40},[34,66595,52983],{"class":52939},[34,66597,52986],{"class":3617},[34,66599,221],{"class":40},[34,66601,52991],{"class":504},[34,66603,52946],{"class":40},[34,66605,66606,66608,66610,66612,66614],{"class":36,"line":524},[34,66607,53783],{"class":40},[34,66609,53046],{"class":52939},[34,66611,56953],{"class":40},[34,66613,53046],{"class":52939},[34,66615,52946],{"class":40},[34,66617,66618,66620,66622],{"class":36,"line":530},[34,66619,53783],{"class":40},[34,66621,1711],{"class":52939},[34,66623,52946],{"class":40},[34,66625,66626,66628],{"class":36,"line":624},[34,66627,8053],{"class":52939},[34,66629,17218],{"class":40},[34,66631,66632,66634,66636,66638],{"class":36,"line":630},[34,66633,56345],{"class":44},[34,66635,53076],{"class":40},[34,66637,177],{"class":44},[34,66639,2952],{"class":40},[34,66641,66642,66644,66646,66648],{"class":36,"line":636},[34,66643,56334],{"class":44},[34,66645,53076],{"class":40},[34,66647,177],{"class":44},[34,66649,2952],{"class":40},[34,66651,66652],{"class":36,"line":1513},[34,66653,3841],{"class":40},[34,66655,66656],{"class":36,"line":1519},[34,66657,1475],{"emptyLinePlaceholder":1474},[34,66659,66660,66663],{"class":36,"line":3283},[34,66661,66662],{"class":52939},"    table",[34,66664,17218],{"class":40},[34,66666,66667,66670,66672,66675],{"class":36,"line":3297},[34,66668,66669],{"class":44},"      border-collapse",[34,66671,53076],{"class":40},[34,66673,66674],{"class":44},"collapse",[34,66676,2952],{"class":40},[34,66678,66679,66682,66684,66686],{"class":36,"line":3302},[34,66680,66681],{"class":44},"      border-spacing",[34,66683,53076],{"class":40},[34,66685,177],{"class":44},[34,66687,2952],{"class":40},[34,66689,66690,66692,66694,66696,66698,66700,66703],{"class":36,"line":3308},[34,66691,63616],{"class":44},[34,66693,53076],{"class":40},[34,66695,394],{"class":44},[34,66697,53131],{"class":55},[34,66699,53160],{"class":44},[34,66701,66702],{"class":44}," #c0c0c0",[34,66704,2952],{"class":40},[34,66706,66707,66709,66711,66714,66716],{"class":36,"line":3328},[34,66708,56410],{"class":44},[34,66710,53076],{"class":40},[34,66712,66713],{"class":44},"500",[34,66715,53131],{"class":55},[34,66717,2952],{"class":40},[34,66719,66720,66722,66724,66726,66728,66730],{"class":36,"line":3333},[34,66721,56345],{"class":44},[34,66723,53076],{"class":40},[34,66725,451],{"class":44},[34,66727,53131],{"class":55},[34,66729,53195],{"class":44},[34,66731,2952],{"class":40},[34,66733,66734,66736,66738,66740],{"class":36,"line":3347},[34,66735,58925],{"class":44},[34,66737,53076],{"class":40},[34,66739,53231],{"class":44},[34,66741,2952],{"class":40},[34,66743,66744],{"class":36,"line":3352},[34,66745,3841],{"class":40},[34,66747,66748],{"class":36,"line":3381},[34,66749,1475],{"emptyLinePlaceholder":1474},[34,66751,66752,66755],{"class":36,"line":3386},[34,66753,66754],{"class":52939},"    th",[34,66756,17218],{"class":40},[34,66758,66759,66761,66763,66766],{"class":36,"line":3403},[34,66760,56523],{"class":44},[34,66762,53076],{"class":40},[34,66764,66765],{"class":44},"#09c",[34,66767,2952],{"class":40},[34,66769,66770,66773,66775,66777,66779,66781,66784],{"class":36,"line":3408},[34,66771,66772],{"class":44},"      font",[34,66774,53076],{"class":40},[34,66776,63978],{"class":44},[34,66778,65712],{"class":44},[34,66780,53131],{"class":55},[34,66782,66783],{"class":504}," \"微软雅黑\"",[34,66785,2952],{"class":40},[34,66787,66788,66790,66792,66794],{"class":36,"line":3413},[34,66789,59055],{"class":44},[34,66791,53076],{"class":40},[34,66793,62481],{"class":44},[34,66795,2952],{"class":40},[34,66797,66798,66800,66802,66804,66806],{"class":36,"line":3418},[34,66799,56424],{"class":44},[34,66801,53076],{"class":40},[34,66803,2593],{"class":44},[34,66805,53131],{"class":55},[34,66807,2952],{"class":40},[34,66809,66810],{"class":36,"line":3432},[34,66811,3841],{"class":40},[34,66813,66814],{"class":36,"line":3437},[34,66815,1475],{"emptyLinePlaceholder":1474},[34,66817,66818,66821],{"class":36,"line":4230},[34,66819,66820],{"class":52939},"    td",[34,66822,17218],{"class":40},[34,66824,66825,66827,66829,66831,66833,66835,66838],{"class":36,"line":4244},[34,66826,63616],{"class":44},[34,66828,53076],{"class":40},[34,66830,394],{"class":44},[34,66832,53131],{"class":55},[34,66834,53160],{"class":44},[34,66836,66837],{"class":44}," #d0d0d0",[34,66839,2952],{"class":40},[34,66841,66842,66844,66846,66849],{"class":36,"line":4252},[34,66843,59055],{"class":44},[34,66845,53076],{"class":40},[34,66847,66848],{"class":44},"#404060",[34,66850,2952],{"class":40},[34,66852,66853,66855,66857,66859,66861],{"class":36,"line":4257},[34,66854,56334],{"class":44},[34,66856,53076],{"class":40},[34,66858,410],{"class":44},[34,66860,53131],{"class":55},[34,66862,2952],{"class":40},[34,66864,66865],{"class":36,"line":4263},[34,66866,3841],{"class":40},[34,66868,66869],{"class":36,"line":4269},[34,66870,1475],{"emptyLinePlaceholder":1474},[34,66872,66873,66876],{"class":36,"line":4274},[34,66874,66875],{"class":3617},"    .allCheck",[34,66877,17218],{"class":40},[34,66879,66880,66882,66884,66886,66888],{"class":36,"line":9598},[34,66881,56410],{"class":44},[34,66883,53076],{"class":40},[34,66885,2407],{"class":44},[34,66887,53131],{"class":55},[34,66889,2952],{"class":40},[34,66891,66892],{"class":36,"line":9622},[34,66893,3841],{"class":40},[34,66895,66896,66898,66900],{"class":36,"line":9627},[34,66897,54056],{"class":40},[34,66899,1711],{"class":52939},[34,66901,52946],{"class":40},[34,66903,66904,66906,66908],{"class":36,"line":9633},[34,66905,53424],{"class":40},[34,66907,52973],{"class":52939},[34,66909,52946],{"class":40},[34,66911,66912],{"class":36,"line":9660},[34,66913,1475],{"emptyLinePlaceholder":1474},[34,66915,66916,66918,66920],{"class":36,"line":9665},[34,66917,2701],{"class":40},[34,66919,53439],{"class":52939},[34,66921,52946],{"class":40},[34,66923,66924,66926,66928],{"class":36,"line":9671},[34,66925,53783],{"class":40},[34,66927,1948],{"class":52939},[34,66929,52946],{"class":40},[34,66931,66932,66934,66936],{"class":36,"line":9683},[34,66933,52980],{"class":40},[34,66935,1954],{"class":52939},[34,66937,52946],{"class":40},[34,66939,66940,66942,66944,66946,66948,66951],{"class":36,"line":9695},[34,66941,56873],{"class":40},[34,66943,1957],{"class":52939},[34,66945,55125],{"class":3617},[34,66947,221],{"class":40},[34,66949,66950],{"class":504},"\"allCheck\"",[34,66952,52946],{"class":40},[34,66954,66955,66957,66959,66961,66963,66965,66967,66969,66971,66973,66975,66978,66981,66983,66985,66987,66990,66993,66995],{"class":36,"line":9707},[34,66956,56941],{"class":40},[34,66958,55460],{"class":52939},[34,66960,55463],{"class":3617},[34,66962,221],{"class":40},[34,66964,55468],{"class":504},[34,66966,16566],{"class":3617},[34,66968,221],{"class":40},[34,66970,9302],{"class":504},[34,66972,16605],{"class":3617},[34,66974,221],{"class":40},[34,66976,66977],{"class":504},"\"checkAll\"",[34,66979,66980],{"class":40},"> \u003C",[34,66982,34],{"class":52939},[34,66984,55125],{"class":3617},[34,66986,221],{"class":40},[34,66988,66989],{"class":504},"\"all\"",[34,66991,66992],{"class":40},">全选\u003C\u002F",[34,66994,34],{"class":52939},[34,66996,52946],{"class":40},[34,66998,66999,67001,67003],{"class":36,"line":11366},[34,67000,57046],{"class":40},[34,67002,1957],{"class":52939},[34,67004,52946],{"class":40},[34,67006,67007,67009,67011,67014,67016],{"class":36,"line":11391},[34,67008,56873],{"class":40},[34,67010,1957],{"class":52939},[34,67012,67013],{"class":40},">商品\u003C\u002F",[34,67015,1957],{"class":52939},[34,67017,52946],{"class":40},[34,67019,67020,67022,67024,67027,67029],{"class":36,"line":11414},[34,67021,56873],{"class":40},[34,67023,1957],{"class":52939},[34,67025,67026],{"class":40},">商家\u003C\u002F",[34,67028,1957],{"class":52939},[34,67030,52946],{"class":40},[34,67032,67033,67035,67037,67040,67042],{"class":36,"line":11438},[34,67034,56873],{"class":40},[34,67036,1957],{"class":52939},[34,67038,67039],{"class":40},">价格\u003C\u002F",[34,67041,1957],{"class":52939},[34,67043,52946],{"class":40},[34,67045,67046,67048,67050],{"class":36,"line":11443},[34,67047,53415],{"class":40},[34,67049,1954],{"class":52939},[34,67051,52946],{"class":40},[34,67053,67054,67056,67058],{"class":36,"line":11448},[34,67055,52980],{"class":40},[34,67057,1954],{"class":52939},[34,67059,52946],{"class":40},[34,67061,67062,67064,67066],{"class":36,"line":11453},[34,67063,56873],{"class":40},[34,67065,1999],{"class":52939},[34,67067,52946],{"class":40},[34,67069,67070,67072,67074,67076,67078,67080,67082,67084,67087,67089,67091,67094],{"class":36,"line":11462},[34,67071,56941],{"class":40},[34,67073,55460],{"class":52939},[34,67075,55463],{"class":3617},[34,67077,221],{"class":40},[34,67079,55468],{"class":504},[34,67081,16566],{"class":3617},[34,67083,221],{"class":40},[34,67085,67086],{"class":504},"\"check\"",[34,67088,55125],{"class":3617},[34,67090,221],{"class":40},[34,67092,67093],{"class":504},"\"ck\"",[34,67095,52946],{"class":40},[34,67097,67098,67100,67102],{"class":36,"line":11467},[34,67099,57046],{"class":40},[34,67101,1999],{"class":52939},[34,67103,52946],{"class":40},[34,67105,67106,67108,67110,67112,67114],{"class":36,"line":11473},[34,67107,56873],{"class":40},[34,67109,1999],{"class":52939},[34,67111,62812],{"class":40},[34,67113,1999],{"class":52939},[34,67115,52946],{"class":40},[34,67117,67118,67120,67122,67125,67127],{"class":36,"line":11494},[34,67119,56873],{"class":40},[34,67121,1999],{"class":52939},[34,67123,67124],{"class":40},">小米\u003C\u002F",[34,67126,1999],{"class":52939},[34,67128,52946],{"class":40},[34,67130,67131,67133,67135,67138,67140],{"class":36,"line":11500},[34,67132,56873],{"class":40},[34,67134,1999],{"class":52939},[34,67136,67137],{"class":40},">￥1999\u003C\u002F",[34,67139,1999],{"class":52939},[34,67141,52946],{"class":40},[34,67143,67144,67146,67148],{"class":36,"line":11514},[34,67145,53415],{"class":40},[34,67147,1954],{"class":52939},[34,67149,52946],{"class":40},[34,67151,67152,67154,67156],{"class":36,"line":11520},[34,67153,52980],{"class":40},[34,67155,1954],{"class":52939},[34,67157,52946],{"class":40},[34,67159,67160,67162,67164],{"class":36,"line":11547},[34,67161,56873],{"class":40},[34,67163,1999],{"class":52939},[34,67165,52946],{"class":40},[34,67167,67168,67170,67172,67174,67176,67178,67180,67182,67184,67186,67188,67190],{"class":36,"line":11556},[34,67169,56941],{"class":40},[34,67171,55460],{"class":52939},[34,67173,55463],{"class":3617},[34,67175,221],{"class":40},[34,67177,55468],{"class":504},[34,67179,16566],{"class":3617},[34,67181,221],{"class":40},[34,67183,67086],{"class":504},[34,67185,55125],{"class":3617},[34,67187,221],{"class":40},[34,67189,67093],{"class":504},[34,67191,52946],{"class":40},[34,67193,67194,67196,67198],{"class":36,"line":11562},[34,67195,57046],{"class":40},[34,67197,1999],{"class":52939},[34,67199,52946],{"class":40},[34,67201,67202,67204,67206,67209,67211],{"class":36,"line":11570},[34,67203,56873],{"class":40},[34,67205,1999],{"class":52939},[34,67207,67208],{"class":40},">小米净水器\u003C\u002F",[34,67210,1999],{"class":52939},[34,67212,52946],{"class":40},[34,67214,67215,67217,67219,67221,67223],{"class":36,"line":11575},[34,67216,56873],{"class":40},[34,67218,1999],{"class":52939},[34,67220,67124],{"class":40},[34,67222,1999],{"class":52939},[34,67224,52946],{"class":40},[34,67226,67227,67229,67231,67234,67236],{"class":36,"line":18250},[34,67228,56873],{"class":40},[34,67230,1999],{"class":52939},[34,67232,67233],{"class":40},">￥4999\u003C\u002F",[34,67235,1999],{"class":52939},[34,67237,52946],{"class":40},[34,67239,67240,67242,67244],{"class":36,"line":18256},[34,67241,53415],{"class":40},[34,67243,1954],{"class":52939},[34,67245,52946],{"class":40},[34,67247,67248,67250,67252],{"class":36,"line":18279},[34,67249,52980],{"class":40},[34,67251,1954],{"class":52939},[34,67253,52946],{"class":40},[34,67255,67256,67258,67260],{"class":36,"line":18285},[34,67257,56873],{"class":40},[34,67259,1999],{"class":52939},[34,67261,52946],{"class":40},[34,67263,67264,67266,67268,67270,67272,67274,67276,67278,67280,67282,67284,67286],{"class":36,"line":18308},[34,67265,56941],{"class":40},[34,67267,55460],{"class":52939},[34,67269,55463],{"class":3617},[34,67271,221],{"class":40},[34,67273,55468],{"class":504},[34,67275,16566],{"class":3617},[34,67277,221],{"class":40},[34,67279,67086],{"class":504},[34,67281,55125],{"class":3617},[34,67283,221],{"class":40},[34,67285,67093],{"class":504},[34,67287,52946],{"class":40},[34,67289,67290,67292,67294],{"class":36,"line":18322},[34,67291,57046],{"class":40},[34,67293,1999],{"class":52939},[34,67295,52946],{"class":40},[34,67297,67298,67300,67302,67305,67307],{"class":36,"line":18342},[34,67299,56873],{"class":40},[34,67301,1999],{"class":52939},[34,67303,67304],{"class":40},">小米电视\u003C\u002F",[34,67306,1999],{"class":52939},[34,67308,52946],{"class":40},[34,67310,67311,67313,67315,67317,67319],{"class":36,"line":18348},[34,67312,56873],{"class":40},[34,67314,1999],{"class":52939},[34,67316,67124],{"class":40},[34,67318,1999],{"class":52939},[34,67320,52946],{"class":40},[34,67322,67323,67325,67327,67330,67332],{"class":36,"line":18359},[34,67324,56873],{"class":40},[34,67326,1999],{"class":52939},[34,67328,67329],{"class":40},">￥5999\u003C\u002F",[34,67331,1999],{"class":52939},[34,67333,52946],{"class":40},[34,67335,67336,67338,67340],{"class":36,"line":18382},[34,67337,53415],{"class":40},[34,67339,1954],{"class":52939},[34,67341,52946],{"class":40},[34,67343,67344,67346,67348],{"class":36,"line":18404},[34,67345,54056],{"class":40},[34,67347,1948],{"class":52939},[34,67349,52946],{"class":40},[34,67351,67352,67354,67356],{"class":36,"line":18409},[34,67353,53783],{"class":40},[34,67355,53452],{"class":52939},[34,67357,52946],{"class":40},[34,67359,67360],{"class":36,"line":18415},[34,67361,67362],{"class":161},"    \u002F\u002F 1. 获取大复选框\n",[34,67364,67365,67367,67370,67372,67374,67376,67378,67381],{"class":36,"line":18429},[34,67366,12871],{"class":55},[34,67368,67369],{"class":44}," checkAll",[34,67371,56],{"class":55},[34,67373,56035],{"class":40},[34,67375,56038],{"class":3617},[34,67377,286],{"class":40},[34,67379,67380],{"class":504},"'#checkAll'",[34,67382,101],{"class":40},[34,67384,67385],{"class":36,"line":18442},[34,67386,67387],{"class":161},"    \u002F\u002F 2. 获取所有的小复选框\n",[34,67389,67390,67392,67395,67397,67399,67401,67403,67406],{"class":36,"line":18447},[34,67391,12871],{"class":55},[34,67393,67394],{"class":44}," cks",[34,67396,56],{"class":55},[34,67398,56035],{"class":40},[34,67400,57320],{"class":3617},[34,67402,286],{"class":40},[34,67404,67405],{"class":504},"'.ck'",[34,67407,101],{"class":40},[34,67409,67410],{"class":36,"line":18461},[34,67411,67412],{"class":161},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[34,67414,67415,67418,67420,67422,67424,67426,67428],{"class":36,"line":18466},[34,67416,67417],{"class":40},"    checkAll.",[34,67419,59452],{"class":3617},[34,67421,286],{"class":40},[34,67423,59457],{"class":504},[34,67425,48],{"class":40},[34,67427,56088],{"class":55},[34,67429,56091],{"class":40},[34,67431,67432],{"class":36,"line":18472},[34,67433,67434],{"class":161},"      \u002F\u002F 得到当前大复选框的选中状态\n",[34,67436,67437,67440],{"class":36,"line":18477},[34,67438,67439],{"class":161},"      \u002F\u002F console.log(checkAll.checked)",[34,67441,67442],{"class":161},"  \u002F\u002F 得到 是 true 或者是 false\n",[34,67444,67445],{"class":36,"line":18491},[34,67446,67447],{"class":161},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[34,67449,67450,67452,67454,67456,67458,67460,67462,67464,67466,67469,67471,67473,67475],{"class":36,"line":18496},[34,67451,53923],{"class":55},[34,67453,3313],{"class":40},[34,67455,53486],{"class":55},[34,67457,11088],{"class":40},[34,67459,221],{"class":55},[34,67461,98],{"class":44},[34,67463,11095],{"class":40},[34,67465,2701],{"class":55},[34,67467,67468],{"class":40}," cks.",[34,67470,53607],{"class":44},[34,67472,4867],{"class":40},[34,67474,3946],{"class":55},[34,67476,14090],{"class":40},[34,67478,67479,67482,67484,67487],{"class":36,"line":18501},[34,67480,67481],{"class":40},"        cks[i].checked ",[34,67483,221],{"class":55},[34,67485,67486],{"class":44}," this",[34,67488,67489],{"class":40},".checked\n",[34,67491,67492],{"class":36,"line":18515},[34,67493,54037],{"class":40},[34,67495,67496],{"class":36,"line":18527},[34,67497,35102],{"class":40},[34,67499,67500],{"class":36,"line":18532},[34,67501,67502],{"class":161},"    \u002F\u002F 5. 小复选框控制大复选框\n",[34,67504,67505],{"class":36,"line":18545},[34,67506,1475],{"emptyLinePlaceholder":1474},[34,67508,67509,67511,67513,67515,67517,67519,67521,67523,67525,67527,67529,67531,67533],{"class":36,"line":18550},[34,67510,4854],{"class":55},[34,67512,3313],{"class":40},[34,67514,53486],{"class":55},[34,67516,11088],{"class":40},[34,67518,221],{"class":55},[34,67520,98],{"class":44},[34,67522,11095],{"class":40},[34,67524,2701],{"class":55},[34,67526,67468],{"class":40},[34,67528,53607],{"class":44},[34,67530,4867],{"class":40},[34,67532,3946],{"class":55},[34,67534,14090],{"class":40},[34,67536,67537],{"class":36,"line":18555},[34,67538,67539],{"class":161},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[34,67541,67542,67545,67547,67549,67551,67553,67555],{"class":36,"line":18560},[34,67543,67544],{"class":40},"      cks[i].",[34,67546,59452],{"class":3617},[34,67548,286],{"class":40},[34,67550,59457],{"class":504},[34,67552,48],{"class":40},[34,67554,56088],{"class":55},[34,67556,56091],{"class":40},[34,67558,67559],{"class":36,"line":18573},[34,67560,67561],{"class":161},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[34,67563,67564],{"class":36,"line":18578},[34,67565,67566],{"class":161},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[34,67568,67569],{"class":36,"line":34274},[34,67570,67571],{"class":161},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[34,67573,67574],{"class":36,"line":34280},[34,67575,67576],{"class":161},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[34,67578,67579,67582,67584,67586,67588,67590,67593,67595,67597,67599,67601],{"class":36,"line":34286},[34,67580,67581],{"class":40},"        checkAll.checked ",[34,67583,221],{"class":55},[34,67585,56035],{"class":40},[34,67587,57320],{"class":3617},[34,67589,286],{"class":40},[34,67591,67592],{"class":504},"'.ck:checked'",[34,67594,32468],{"class":40},[34,67596,53607],{"class":44},[34,67598,59545],{"class":55},[34,67600,67468],{"class":40},[34,67602,57470],{"class":44},[34,67604,67605],{"class":36,"line":34292},[34,67606,66454],{"class":40},[34,67608,67609],{"class":36,"line":34298},[34,67610,3841],{"class":40},[34,67612,67613,67615,67617],{"class":36,"line":34309},[34,67614,54056],{"class":40},[34,67616,53452],{"class":52939},[34,67618,52946],{"class":40},[34,67620,67621,67623,67625],{"class":36,"line":34315},[34,67622,53424],{"class":40},[34,67624,53439],{"class":52939},[34,67626,52946],{"class":40},[34,67628,67629],{"class":36,"line":34335},[34,67630,1475],{"emptyLinePlaceholder":1474},[34,67632,67633,67635,67637],{"class":36,"line":34341},[34,67634,53424],{"class":40},[34,67636,52274],{"class":52939},[34,67638,52946],{"class":40},[103,67640,67641],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[103,67643,67644],{},"用好之间比较得到的布尔值！！！",[103,67646,67647,67648,67651,67652,3313,67655,2379,67657,67660],{},"在 JS 里访问的时候，",[31,67649,67650],{},"checkbox.checked"," 是一个 ",[1165,67653,67654],{},"布尔值",[31,67656,3021],{},[31,67658,67659],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[103,67662,67663,67664,67667,67668],{},"HTML 的 ",[31,67665,67666],{},"checked=\"checked\""," 只是 ",[1165,67669,67670,67671,67674],{},"初始值；JS 的 ",[31,67672,67673],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[103,67676,67677],{},"：checked是一个伪类选择器",[103,67679,67680],{},[109,67681],{"alt":29,"src":67682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[103,67684,67685,67688],{},[67686,67687],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[103,67690,67691],{},[109,67692],{"alt":29,"src":67693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67695,67697],{"id":67696},"_33-dom事件进阶","3.3 DOM事件进阶",[19,67699,67701],{"id":67700},"_331-事件流","3.3.1 事件流",[103,67703,67704],{},[109,67705],{"alt":29,"src":67706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[1353,67708,67710],{"id":67709},"_3311-事件捕获","3.3.1.1 事件捕获",[103,67712,67713],{},[109,67714],{"alt":29,"src":67715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[24,67717,67719],{"className":52272,"code":67718,"language":52274,"meta":29,"style":29},"\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",[31,67720,67721,67731,67745,67749,67757,67771,67791,67803,67811,67818,67830,67842,67852,67856,67860,67867,67879,67891,67901,67905,67913,67921,67925,67933,67948,67967,67975,67983,68003,68023,68039,68050,68058,68075,68086,68094,68111,68122,68130,68138,68146,68150],{"__ignoreMap":29},[34,67722,67723,67725,67727,67729],{"class":36,"line":37},[34,67724,52936],{"class":40},[34,67726,52940],{"class":52939},[34,67728,52943],{"class":3617},[34,67730,52946],{"class":40},[34,67732,67733,67735,67737,67739,67741,67743],{"class":36,"line":165},[34,67734,2701],{"class":40},[34,67736,52274],{"class":52939},[34,67738,52955],{"class":3617},[34,67740,221],{"class":40},[34,67742,52960],{"class":504},[34,67744,52946],{"class":40},[34,67746,67747],{"class":36,"line":171},[34,67748,1475],{"emptyLinePlaceholder":1474},[34,67750,67751,67753,67755],{"class":36,"line":182},[34,67752,2701],{"class":40},[34,67754,52973],{"class":52939},[34,67756,52946],{"class":40},[34,67758,67759,67761,67763,67765,67767,67769],{"class":36,"line":188},[34,67760,53783],{"class":40},[34,67762,52983],{"class":52939},[34,67764,52986],{"class":3617},[34,67766,221],{"class":40},[34,67768,52991],{"class":504},[34,67770,52946],{"class":40},[34,67772,67773,67775,67777,67779,67781,67783,67785,67787,67789],{"class":36,"line":518},[34,67774,53783],{"class":40},[34,67776,52983],{"class":52939},[34,67778,16566],{"class":3617},[34,67780,221],{"class":40},[34,67782,53030],{"class":504},[34,67784,53010],{"class":3617},[34,67786,221],{"class":40},[34,67788,53037],{"class":504},[34,67790,52946],{"class":40},[34,67792,67793,67795,67797,67799,67801],{"class":36,"line":524},[34,67794,53783],{"class":40},[34,67796,53046],{"class":52939},[34,67798,53049],{"class":40},[34,67800,53046],{"class":52939},[34,67802,52946],{"class":40},[34,67804,67805,67807,67809],{"class":36,"line":530},[34,67806,53783],{"class":40},[34,67808,1711],{"class":52939},[34,67810,52946],{"class":40},[34,67812,67813,67816],{"class":36,"line":624},[34,67814,67815],{"class":3617},"    .father",[34,67817,17218],{"class":40},[34,67819,67820,67822,67824,67826,67828],{"class":36,"line":630},[34,67821,56410],{"class":44},[34,67823,53076],{"class":40},[34,67825,66713],{"class":44},[34,67827,53131],{"class":55},[34,67829,2952],{"class":40},[34,67831,67832,67834,67836,67838,67840],{"class":36,"line":636},[34,67833,56424],{"class":44},[34,67835,53076],{"class":40},[34,67837,66713],{"class":44},[34,67839,53131],{"class":55},[34,67841,2952],{"class":40},[34,67843,67844,67846,67848,67850],{"class":36,"line":1513},[34,67845,56523],{"class":44},[34,67847,53076],{"class":40},[34,67849,53284],{"class":44},[34,67851,2952],{"class":40},[34,67853,67854],{"class":36,"line":1519},[34,67855,3841],{"class":40},[34,67857,67858],{"class":36,"line":3283},[34,67859,1475],{"emptyLinePlaceholder":1474},[34,67861,67862,67865],{"class":36,"line":3297},[34,67863,67864],{"class":3617},"    .son",[34,67866,17218],{"class":40},[34,67868,67869,67871,67873,67875,67877],{"class":36,"line":3302},[34,67870,56410],{"class":44},[34,67872,53076],{"class":40},[34,67874,3376],{"class":44},[34,67876,53131],{"class":55},[34,67878,2952],{"class":40},[34,67880,67881,67883,67885,67887,67889],{"class":36,"line":3308},[34,67882,56424],{"class":44},[34,67884,53076],{"class":40},[34,67886,3376],{"class":44},[34,67888,53131],{"class":55},[34,67890,2952],{"class":40},[34,67892,67893,67895,67897,67899],{"class":36,"line":3328},[34,67894,56523],{"class":44},[34,67896,53076],{"class":40},[34,67898,56528],{"class":44},[34,67900,2952],{"class":40},[34,67902,67903],{"class":36,"line":3333},[34,67904,3841],{"class":40},[34,67906,67907,67909,67911],{"class":36,"line":3347},[34,67908,54056],{"class":40},[34,67910,1711],{"class":52939},[34,67912,52946],{"class":40},[34,67914,67915,67917,67919],{"class":36,"line":3352},[34,67916,53424],{"class":40},[34,67918,52973],{"class":52939},[34,67920,52946],{"class":40},[34,67922,67923],{"class":36,"line":3381},[34,67924,1475],{"emptyLinePlaceholder":1474},[34,67926,67927,67929,67931],{"class":36,"line":3386},[34,67928,2701],{"class":40},[34,67930,53439],{"class":52939},[34,67932,52946],{"class":40},[34,67934,67935,67937,67939,67941,67943,67946],{"class":36,"line":3403},[34,67936,53783],{"class":40},[34,67938,53250],{"class":52939},[34,67940,55125],{"class":3617},[34,67942,221],{"class":40},[34,67944,67945],{"class":504},"\"father\"",[34,67947,52946],{"class":40},[34,67949,67950,67952,67954,67956,67958,67961,67963,67965],{"class":36,"line":3408},[34,67951,52980],{"class":40},[34,67953,53250],{"class":52939},[34,67955,55125],{"class":3617},[34,67957,221],{"class":40},[34,67959,67960],{"class":504},"\"son\"",[34,67962,56953],{"class":40},[34,67964,53250],{"class":52939},[34,67966,52946],{"class":40},[34,67968,67969,67971,67973],{"class":36,"line":3413},[34,67970,54056],{"class":40},[34,67972,53250],{"class":52939},[34,67974,52946],{"class":40},[34,67976,67977,67979,67981],{"class":36,"line":3418},[34,67978,53783],{"class":40},[34,67980,53452],{"class":52939},[34,67982,52946],{"class":40},[34,67984,67985,67987,67990,67992,67994,67996,67998,68001],{"class":36,"line":3432},[34,67986,12871],{"class":55},[34,67988,67989],{"class":44}," fa",[34,67991,56],{"class":55},[34,67993,56035],{"class":40},[34,67995,56038],{"class":3617},[34,67997,286],{"class":40},[34,67999,68000],{"class":504},"'.father'",[34,68002,101],{"class":40},[34,68004,68005,68007,68010,68012,68014,68016,68018,68021],{"class":36,"line":3437},[34,68006,12871],{"class":55},[34,68008,68009],{"class":44}," son",[34,68011,56],{"class":55},[34,68013,56035],{"class":40},[34,68015,56038],{"class":3617},[34,68017,286],{"class":40},[34,68019,68020],{"class":504},"'.son'",[34,68022,101],{"class":40},[34,68024,68025,68027,68029,68031,68033,68035,68037],{"class":36,"line":4230},[34,68026,54046],{"class":40},[34,68028,59452],{"class":3617},[34,68030,286],{"class":40},[34,68032,59457],{"class":504},[34,68034,48],{"class":40},[34,68036,56088],{"class":55},[34,68038,56091],{"class":40},[34,68040,68041,68043,68045,68048],{"class":36,"line":4244},[34,68042,60564],{"class":3617},[34,68044,286],{"class":40},[34,68046,68047],{"class":504},"'woshiu1'",[34,68049,101],{"class":40},[34,68051,68052,68054,68056],{"class":36,"line":4252},[34,68053,56174],{"class":40},[34,68055,3021],{"class":44},[34,68057,101],{"class":40},[34,68059,68060,68063,68065,68067,68069,68071,68073],{"class":36,"line":4257},[34,68061,68062],{"class":40},"    fa.",[34,68064,59452],{"class":3617},[34,68066,286],{"class":40},[34,68068,59457],{"class":504},[34,68070,48],{"class":40},[34,68072,56088],{"class":55},[34,68074,56091],{"class":40},[34,68076,68077,68079,68081,68084],{"class":36,"line":4263},[34,68078,60564],{"class":3617},[34,68080,286],{"class":40},[34,68082,68083],{"class":504},"'1'",[34,68085,101],{"class":40},[34,68087,68088,68090,68092],{"class":36,"line":4269},[34,68089,56174],{"class":40},[34,68091,3021],{"class":44},[34,68093,101],{"class":40},[34,68095,68096,68099,68101,68103,68105,68107,68109],{"class":36,"line":4274},[34,68097,68098],{"class":40},"    son.",[34,68100,59452],{"class":3617},[34,68102,286],{"class":40},[34,68104,59457],{"class":504},[34,68106,48],{"class":40},[34,68108,56088],{"class":55},[34,68110,56091],{"class":40},[34,68112,68113,68115,68117,68120],{"class":36,"line":9598},[34,68114,60564],{"class":3617},[34,68116,286],{"class":40},[34,68118,68119],{"class":504},"'2'",[34,68121,101],{"class":40},[34,68123,68124,68126,68128],{"class":36,"line":9622},[34,68125,56174],{"class":40},[34,68127,3021],{"class":44},[34,68129,101],{"class":40},[34,68131,68132,68134,68136],{"class":36,"line":9627},[34,68133,54056],{"class":40},[34,68135,53452],{"class":52939},[34,68137,52946],{"class":40},[34,68139,68140,68142,68144],{"class":36,"line":9633},[34,68141,53424],{"class":40},[34,68143,53439],{"class":52939},[34,68145,52946],{"class":40},[34,68147,68148],{"class":36,"line":9660},[34,68149,1475],{"emptyLinePlaceholder":1474},[34,68151,68152,68154,68156],{"class":36,"line":9665},[34,68153,53424],{"class":40},[34,68155,52274],{"class":52939},[34,68157,52946],{"class":40},[103,68159,68160],{},[109,68161],{"alt":29,"src":68162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[103,68164,68165],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[1353,68167,68169],{"id":68168},"_3312-事件冒泡","3.3.1.2 事件冒泡",[103,68171,68172],{},[109,68173],{"alt":29,"src":68174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[103,68176,68177],{},"反着来",[103,68179,68180],{},"注意是同名事件，比如都是‘click’",[1353,68182,68184],{"id":68183},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[103,68186,68187],{},[109,68188],{"alt":29,"src":68189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[1353,68191,68193],{"id":68192},"_3314-解绑事件","3.3.1.4 解绑事件",[103,68195,68196],{},[109,68197],{"alt":29,"src":68198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[103,68200,68201],{},[109,68202],{"alt":29,"src":68203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[1353,68205,68207],{"id":68206},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[1772,68209,68210],{},[1775,68211,68212],{},"事件类型的区别",[103,68214,68215],{},[109,68216],{"alt":29,"src":68217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[103,68219,68220],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[1772,68222,68223],{"start":165},[1775,68224,68225],{},"注册事件的区别",[103,68227,68228],{},[109,68229],{"alt":29,"src":68230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[1353,68232,68234],{"id":68233},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[103,68236,68237],{},[109,68238],{"alt":29,"src":68239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[103,68241,68242],{},[109,68243],{"alt":29,"src":68244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[24,68246,68248],{"className":54706,"code":68247,"language":54708,"meta":29,"style":29},"\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",[31,68249,68250,68258,68275,68298,68306,68311,68316,68321,68325,68333,68341],{"__ignoreMap":29},[34,68251,68252,68254,68256],{"class":36,"line":37},[34,68253,2701],{"class":40},[34,68255,53439],{"class":52939},[34,68257,52946],{"class":40},[34,68259,68260,68262,68265,68268,68270,68273],{"class":36,"line":165},[34,68261,53783],{"class":40},[34,68263,68264],{"class":52939},"form",[34,68266,68267],{"class":3617}," action",[34,68269,221],{"class":40},[34,68271,68272],{"class":504},"\"http:\u002F\u002Fwww.itcast.cn\"",[34,68274,52946],{"class":40},[34,68276,68277,68279,68281,68283,68285,68288,68291,68293,68296],{"class":36,"line":171},[34,68278,52980],{"class":40},[34,68280,55460],{"class":52939},[34,68282,55463],{"class":3617},[34,68284,221],{"class":40},[34,68286,68287],{"class":504},"\"submit\"",[34,68289,68290],{"class":3617}," value",[34,68292,221],{"class":40},[34,68294,68295],{"class":504},"\"免费注册\"",[34,68297,52946],{"class":40},[34,68299,68300,68302,68304],{"class":36,"line":182},[34,68301,52980],{"class":40},[34,68303,53452],{"class":52939},[34,68305,52946],{"class":40},[34,68307,68308],{"class":36,"line":188},[34,68309,68310],{"class":40},"      const form = document.querySelector('form')\n",[34,68312,68313],{"class":36,"line":518},[34,68314,68315],{"class":40},"      form.addEventListener('submit', function (e) {\n",[34,68317,68318],{"class":36,"line":524},[34,68319,68320],{"class":40},"        e.preventDefault()\n",[34,68322,68323],{"class":36,"line":530},[34,68324,66454],{"class":40},[34,68326,68327,68329,68331],{"class":36,"line":624},[34,68328,53415],{"class":40},[34,68330,53452],{"class":52939},[34,68332,52946],{"class":40},[34,68334,68335,68337,68339],{"class":36,"line":630},[34,68336,54056],{"class":40},[34,68338,68264],{"class":52939},[34,68340,52946],{"class":40},[34,68342,68343,68345,68347],{"class":36,"line":636},[34,68344,53424],{"class":40},[34,68346,53439],{"class":52939},[34,68348,52946],{"class":40},[103,68350,68351],{},"点击不在跳转！！！",[19,68353,68355],{"id":68354},"_332-事件委托","3.3.2 事件委托",[103,68357,68358],{},[109,68359],{"alt":29,"src":68360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[24,68362,68364],{"className":52272,"code":68363,"language":52274,"meta":29,"style":29},"\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",[31,68365,68366,68376,68390,68394,68402,68416,68436,68448,68456,68460,68468,68476,68488,68500,68512,68524,68536,68549,68557,68565,68570,68589,68610,68615,68620,68625,68630,68639,68643,68653,68657,68662,68667,68681,68691,68695,68699,68707,68715,68719],{"__ignoreMap":29},[34,68367,68368,68370,68372,68374],{"class":36,"line":37},[34,68369,52936],{"class":40},[34,68371,52940],{"class":52939},[34,68373,52943],{"class":3617},[34,68375,52946],{"class":40},[34,68377,68378,68380,68382,68384,68386,68388],{"class":36,"line":165},[34,68379,2701],{"class":40},[34,68381,52274],{"class":52939},[34,68383,52955],{"class":3617},[34,68385,221],{"class":40},[34,68387,52960],{"class":504},[34,68389,52946],{"class":40},[34,68391,68392],{"class":36,"line":171},[34,68393,1475],{"emptyLinePlaceholder":1474},[34,68395,68396,68398,68400],{"class":36,"line":182},[34,68397,2701],{"class":40},[34,68399,52973],{"class":52939},[34,68401,52946],{"class":40},[34,68403,68404,68406,68408,68410,68412,68414],{"class":36,"line":188},[34,68405,53783],{"class":40},[34,68407,52983],{"class":52939},[34,68409,52986],{"class":3617},[34,68411,221],{"class":40},[34,68413,52991],{"class":504},[34,68415,52946],{"class":40},[34,68417,68418,68420,68422,68424,68426,68428,68430,68432,68434],{"class":36,"line":518},[34,68419,53783],{"class":40},[34,68421,52983],{"class":52939},[34,68423,16566],{"class":3617},[34,68425,221],{"class":40},[34,68427,53030],{"class":504},[34,68429,53010],{"class":3617},[34,68431,221],{"class":40},[34,68433,53037],{"class":504},[34,68435,52946],{"class":40},[34,68437,68438,68440,68442,68444,68446],{"class":36,"line":524},[34,68439,53783],{"class":40},[34,68441,53046],{"class":52939},[34,68443,53049],{"class":40},[34,68445,53046],{"class":52939},[34,68447,52946],{"class":40},[34,68449,68450,68452,68454],{"class":36,"line":530},[34,68451,53424],{"class":40},[34,68453,52973],{"class":52939},[34,68455,52946],{"class":40},[34,68457,68458],{"class":36,"line":624},[34,68459,1475],{"emptyLinePlaceholder":1474},[34,68461,68462,68464,68466],{"class":36,"line":630},[34,68463,2701],{"class":40},[34,68465,53439],{"class":52939},[34,68467,52946],{"class":40},[34,68469,68470,68472,68474],{"class":36,"line":636},[34,68471,53783],{"class":40},[34,68473,2798],{"class":52939},[34,68475,52946],{"class":40},[34,68477,68478,68480,68482,68484,68486],{"class":36,"line":1513},[34,68479,52980],{"class":40},[34,68481,1775],{"class":52939},[34,68483,55605],{"class":40},[34,68485,1775],{"class":52939},[34,68487,52946],{"class":40},[34,68489,68490,68492,68494,68496,68498],{"class":36,"line":1519},[34,68491,52980],{"class":40},[34,68493,1775],{"class":52939},[34,68495,55624],{"class":40},[34,68497,1775],{"class":52939},[34,68499,52946],{"class":40},[34,68501,68502,68504,68506,68508,68510],{"class":36,"line":3283},[34,68503,52980],{"class":40},[34,68505,1775],{"class":52939},[34,68507,55643],{"class":40},[34,68509,1775],{"class":52939},[34,68511,52946],{"class":40},[34,68513,68514,68516,68518,68520,68522],{"class":36,"line":3297},[34,68515,52980],{"class":40},[34,68517,1775],{"class":52939},[34,68519,55662],{"class":40},[34,68521,1775],{"class":52939},[34,68523,52946],{"class":40},[34,68525,68526,68528,68530,68532,68534],{"class":36,"line":3302},[34,68527,52980],{"class":40},[34,68529,1775],{"class":52939},[34,68531,55681],{"class":40},[34,68533,1775],{"class":52939},[34,68535,52946],{"class":40},[34,68537,68538,68540,68542,68545,68547],{"class":36,"line":3308},[34,68539,52980],{"class":40},[34,68541,103],{"class":52939},[34,68543,68544],{"class":40},">我不需要变色\u003C\u002F",[34,68546,103],{"class":52939},[34,68548,52946],{"class":40},[34,68550,68551,68553,68555],{"class":36,"line":3328},[34,68552,54056],{"class":40},[34,68554,2798],{"class":52939},[34,68556,52946],{"class":40},[34,68558,68559,68561,68563],{"class":36,"line":3333},[34,68560,53783],{"class":40},[34,68562,53452],{"class":52939},[34,68564,52946],{"class":40},[34,68566,68567],{"class":36,"line":3347},[34,68568,68569],{"class":161},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[34,68571,68572,68574,68576,68578,68580,68582,68584,68587],{"class":36,"line":3352},[34,68573,12871],{"class":55},[34,68575,62931],{"class":44},[34,68577,56],{"class":55},[34,68579,56035],{"class":40},[34,68581,56038],{"class":3617},[34,68583,286],{"class":40},[34,68585,68586],{"class":504},"'ul'",[34,68588,101],{"class":40},[34,68590,68591,68594,68596,68598,68600,68602,68604,68606,68608],{"class":36,"line":3381},[34,68592,68593],{"class":40},"    ul.",[34,68595,59452],{"class":3617},[34,68597,286],{"class":40},[34,68599,59457],{"class":504},[34,68601,48],{"class":40},[34,68603,56088],{"class":55},[34,68605,3313],{"class":40},[34,68607,1887],{"class":51},[34,68609,14090],{"class":40},[34,68611,68612],{"class":36,"line":3386},[34,68613,68614],{"class":161},"      \u002F\u002F alert(1)\n",[34,68616,68617],{"class":36,"line":3403},[34,68618,68619],{"class":161},"      \u002F\u002F e.target就是我们点击的对象\n",[34,68621,68622],{"class":36,"line":3408},[34,68623,68624],{"class":161},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[34,68626,68627],{"class":36,"line":3413},[34,68628,68629],{"class":161},"      \u002F\u002F e.target.style.color = 'red'\n",[34,68631,68632,68634,68636],{"class":36,"line":3418},[34,68633,59883],{"class":40},[34,68635,59886],{"class":3617},[34,68637,68638],{"class":40},"(e)\n",[34,68640,68641],{"class":36,"line":3432},[34,68642,1475],{"emptyLinePlaceholder":1474},[34,68644,68645,68647,68650],{"class":36,"line":3437},[34,68646,59883],{"class":40},[34,68648,68649],{"class":3617},"dir",[34,68651,68652],{"class":40},"(e.target)\n",[34,68654,68655],{"class":36,"line":4230},[34,68656,1475],{"emptyLinePlaceholder":1474},[34,68658,68659],{"class":36,"line":4244},[34,68660,68661],{"class":161},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[34,68663,68664],{"class":36,"line":4252},[34,68665,68666],{"class":161},"      \u002F\u002F 通过tagName来进行判断\n",[34,68668,68669,68671,68674,68676,68679],{"class":36,"line":4257},[34,68670,56119],{"class":55},[34,68672,68673],{"class":40}," (e.target.tagName ",[34,68675,56125],{"class":55},[34,68677,68678],{"class":504}," 'LI'",[34,68680,14090],{"class":40},[34,68682,68683,68686,68688],{"class":36,"line":4263},[34,68684,68685],{"class":40},"        e.target.style.color ",[34,68687,221],{"class":55},[34,68689,68690],{"class":504}," 'red'\n",[34,68692,68693],{"class":36,"line":4269},[34,68694,54037],{"class":40},[34,68696,68697],{"class":36,"line":4274},[34,68698,35102],{"class":40},[34,68700,68701,68703,68705],{"class":36,"line":9598},[34,68702,54056],{"class":40},[34,68704,53452],{"class":52939},[34,68706,52946],{"class":40},[34,68708,68709,68711,68713],{"class":36,"line":9622},[34,68710,53424],{"class":40},[34,68712,53439],{"class":52939},[34,68714,52946],{"class":40},[34,68716,68717],{"class":36,"line":9627},[34,68718,1475],{"emptyLinePlaceholder":1474},[34,68720,68721,68723,68725],{"class":36,"line":9633},[34,68722,53424],{"class":40},[34,68724,52274],{"class":52939},[34,68726,52946],{"class":40},[103,68728,68729],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[103,68731,68732],{},"if(e.target.ragName==='P') {}",[103,68734,68735],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[103,68737,68738],{},"通过事件委托的方式实现tab栏切换改造：",[103,68740,68741],{},"一定要记住自定义属性！！！！！！",[103,68743,68744],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[103,68746,68747],{},"id是自定义的属性名",[103,68749,68750],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[24,68752,68754],{"className":52272,"code":68753,"language":52274,"meta":29,"style":29},"\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",[31,68755,68756,68766,68780,68784,68792,68806,68826,68846,68858,68866,68872,68882,68892,68896,68900,68906,68918,68930,68942,68958,68962,68966,68972,68984,68996,69008,69018,69028,69032,69036,69044,69056,69066,69078,69082,69086,69094,69104,69114,69124,69128,69132,69142,69156,69168,69172,69176,69188,69198,69214,69224,69228,69232,69246,69256,69266,69270,69274,69280,69294,69298,69302,69310,69320,69324,69328,69337,69347,69351,69359,69367,69371,69379,69393,69407,69419,69427,69466,69498,69530,69562,69594,69602,69610,69624,69658,69692,69726,69760,69794,69802,69810,69818,69823,69828,69847,69852,69872,69880,69885,69898,69919,69932,69936,69941,69946,69959,69979,70007,70011,70015,70019,70027,70035,70039],{"__ignoreMap":29},[34,68757,68758,68760,68762,68764],{"class":36,"line":37},[34,68759,52936],{"class":40},[34,68761,52940],{"class":52939},[34,68763,52943],{"class":3617},[34,68765,52946],{"class":40},[34,68767,68768,68770,68772,68774,68776,68778],{"class":36,"line":165},[34,68769,2701],{"class":40},[34,68771,52274],{"class":52939},[34,68773,52955],{"class":3617},[34,68775,221],{"class":40},[34,68777,52960],{"class":504},[34,68779,52946],{"class":40},[34,68781,68782],{"class":36,"line":171},[34,68783,1475],{"emptyLinePlaceholder":1474},[34,68785,68786,68788,68790],{"class":36,"line":182},[34,68787,2701],{"class":40},[34,68789,52973],{"class":52939},[34,68791,52946],{"class":40},[34,68793,68794,68796,68798,68800,68802,68804],{"class":36,"line":188},[34,68795,53783],{"class":40},[34,68797,52983],{"class":52939},[34,68799,52986],{"class":3617},[34,68801,221],{"class":40},[34,68803,52991],{"class":504},[34,68805,60766],{"class":40},[34,68807,68808,68810,68812,68814,68816,68818,68820,68822,68824],{"class":36,"line":518},[34,68809,53783],{"class":40},[34,68811,52983],{"class":52939},[34,68813,53002],{"class":3617},[34,68815,221],{"class":40},[34,68817,53007],{"class":504},[34,68819,53010],{"class":3617},[34,68821,221],{"class":40},[34,68823,53015],{"class":504},[34,68825,60766],{"class":40},[34,68827,68828,68830,68832,68834,68836,68838,68840,68842,68844],{"class":36,"line":524},[34,68829,53783],{"class":40},[34,68831,52983],{"class":52939},[34,68833,16566],{"class":3617},[34,68835,221],{"class":40},[34,68837,53030],{"class":504},[34,68839,53010],{"class":3617},[34,68841,221],{"class":40},[34,68843,53037],{"class":504},[34,68845,60766],{"class":40},[34,68847,68848,68850,68852,68854,68856],{"class":36,"line":530},[34,68849,53783],{"class":40},[34,68851,53046],{"class":52939},[34,68853,65264],{"class":40},[34,68855,53046],{"class":52939},[34,68857,52946],{"class":40},[34,68859,68860,68862,68864],{"class":36,"line":624},[34,68861,53783],{"class":40},[34,68863,1711],{"class":52939},[34,68865,52946],{"class":40},[34,68867,68868,68870],{"class":36,"line":630},[34,68869,8053],{"class":52939},[34,68871,17218],{"class":40},[34,68873,68874,68876,68878,68880],{"class":36,"line":636},[34,68875,56345],{"class":44},[34,68877,53076],{"class":40},[34,68879,177],{"class":44},[34,68881,2952],{"class":40},[34,68883,68884,68886,68888,68890],{"class":36,"line":1513},[34,68885,56334],{"class":44},[34,68887,53076],{"class":40},[34,68889,177],{"class":44},[34,68891,2952],{"class":40},[34,68893,68894],{"class":36,"line":1519},[34,68895,3841],{"class":40},[34,68897,68898],{"class":36,"line":3283},[34,68899,1475],{"emptyLinePlaceholder":1474},[34,68901,68902,68904],{"class":36,"line":3297},[34,68903,65315],{"class":3617},[34,68905,17218],{"class":40},[34,68907,68908,68910,68912,68914,68916],{"class":36,"line":3302},[34,68909,56410],{"class":44},[34,68911,53076],{"class":40},[34,68913,65326],{"class":44},[34,68915,53131],{"class":55},[34,68917,2952],{"class":40},[34,68919,68920,68922,68924,68926,68928],{"class":36,"line":3308},[34,68921,56424],{"class":44},[34,68923,53076],{"class":40},[34,68925,65339],{"class":44},[34,68927,53131],{"class":55},[34,68929,2952],{"class":40},[34,68931,68932,68934,68936,68938,68940],{"class":36,"line":3328},[34,68933,56345],{"class":44},[34,68935,53076],{"class":40},[34,68937,1249],{"class":44},[34,68939,53131],{"class":55},[34,68941,2952],{"class":40},[34,68943,68944,68946,68948,68950,68952,68954,68956],{"class":36,"line":3333},[34,68945,63616],{"class":44},[34,68947,53076],{"class":40},[34,68949,394],{"class":44},[34,68951,53131],{"class":55},[34,68953,53160],{"class":44},[34,68955,63883],{"class":44},[34,68957,2952],{"class":40},[34,68959,68960],{"class":36,"line":3347},[34,68961,3841],{"class":40},[34,68963,68964],{"class":36,"line":3352},[34,68965,1475],{"emptyLinePlaceholder":1474},[34,68967,68968,68970],{"class":36,"line":3381},[34,68969,65384],{"class":3617},[34,68971,17218],{"class":40},[34,68973,68974,68976,68978,68980,68982],{"class":36,"line":3386},[34,68975,56410],{"class":44},[34,68977,53076],{"class":40},[34,68979,451],{"class":44},[34,68981,2131],{"class":55},[34,68983,2952],{"class":40},[34,68985,68986,68988,68990,68992,68994],{"class":36,"line":3403},[34,68987,56424],{"class":44},[34,68989,53076],{"class":40},[34,68991,2698],{"class":44},[34,68993,53131],{"class":55},[34,68995,2952],{"class":40},[34,68997,68998,69000,69002,69004,69006],{"class":36,"line":3408},[34,68999,58998],{"class":44},[34,69001,53076],{"class":40},[34,69003,2698],{"class":44},[34,69005,53131],{"class":55},[34,69007,2952],{"class":40},[34,69009,69010,69012,69014,69016],{"class":36,"line":3413},[34,69011,56648],{"class":44},[34,69013,53076],{"class":40},[34,69015,53116],{"class":44},[34,69017,2952],{"class":40},[34,69019,69020,69022,69024,69026],{"class":36,"line":3418},[34,69021,56659],{"class":44},[34,69023,53076],{"class":40},[34,69025,53307],{"class":44},[34,69027,2952],{"class":40},[34,69029,69030],{"class":36,"line":3432},[34,69031,3841],{"class":40},[34,69033,69034],{"class":36,"line":3437},[34,69035,1475],{"emptyLinePlaceholder":1474},[34,69037,69038,69040,69042],{"class":36,"line":4230},[34,69039,65384],{"class":3617},[34,69041,65457],{"class":52939},[34,69043,17218],{"class":40},[34,69045,69046,69048,69050,69052,69054],{"class":36,"line":4244},[34,69047,56561],{"class":44},[34,69049,53076],{"class":40},[34,69051,2593],{"class":44},[34,69053,53131],{"class":55},[34,69055,2952],{"class":40},[34,69057,69058,69060,69062,69064],{"class":36,"line":4252},[34,69059,63973],{"class":44},[34,69061,53076],{"class":40},[34,69063,65480],{"class":44},[34,69065,2952],{"class":40},[34,69067,69068,69070,69072,69074,69076],{"class":36,"line":4257},[34,69069,63639],{"class":44},[34,69071,53076],{"class":40},[34,69073,1249],{"class":44},[34,69075,53131],{"class":55},[34,69077,2952],{"class":40},[34,69079,69080],{"class":36,"line":4263},[34,69081,3841],{"class":40},[34,69083,69084],{"class":36,"line":4269},[34,69085,1475],{"emptyLinePlaceholder":1474},[34,69087,69088,69090,69092],{"class":36,"line":4274},[34,69089,65384],{"class":3617},[34,69091,62931],{"class":52939},[34,69093,17218],{"class":40},[34,69095,69096,69098,69100,69102],{"class":36,"line":9598},[34,69097,56371],{"class":44},[34,69099,53076],{"class":40},[34,69101,56376],{"class":44},[34,69103,2952],{"class":40},[34,69105,69106,69108,69110,69112],{"class":36,"line":9622},[34,69107,56648],{"class":44},[34,69109,53076],{"class":40},[34,69111,53116],{"class":44},[34,69113,2952],{"class":40},[34,69115,69116,69118,69120,69122],{"class":36,"line":9627},[34,69117,56659],{"class":44},[34,69119,53076],{"class":40},[34,69121,53219],{"class":44},[34,69123,2952],{"class":40},[34,69125,69126],{"class":36,"line":9633},[34,69127,3841],{"class":40},[34,69129,69130],{"class":36,"line":9660},[34,69131,1475],{"emptyLinePlaceholder":1474},[34,69133,69134,69136,69138,69140],{"class":36,"line":9665},[34,69135,65384],{"class":3617},[34,69137,62931],{"class":52939},[34,69139,56714],{"class":52939},[34,69141,17218],{"class":40},[34,69143,69144,69146,69148,69150,69152,69154],{"class":36,"line":9671},[34,69145,56345],{"class":44},[34,69147,53076],{"class":40},[34,69149,177],{"class":44},[34,69151,10600],{"class":44},[34,69153,53131],{"class":55},[34,69155,2952],{"class":40},[34,69157,69158,69160,69162,69164,69166],{"class":36,"line":9683},[34,69159,56561],{"class":44},[34,69161,53076],{"class":40},[34,69163,2344],{"class":44},[34,69165,53131],{"class":55},[34,69167,2952],{"class":40},[34,69169,69170],{"class":36,"line":9695},[34,69171,3841],{"class":40},[34,69173,69174],{"class":36,"line":9707},[34,69175,1475],{"emptyLinePlaceholder":1474},[34,69177,69178,69180,69182,69184,69186],{"class":36,"line":11366},[34,69179,65384],{"class":3617},[34,69181,62931],{"class":52939},[34,69183,56714],{"class":52939},[34,69185,3057],{"class":52939},[34,69187,17218],{"class":40},[34,69189,69190,69192,69194,69196],{"class":36,"line":11391},[34,69191,65609],{"class":44},[34,69193,53076],{"class":40},[34,69195,56376],{"class":44},[34,69197,2952],{"class":40},[34,69199,69200,69202,69204,69206,69208,69210,69212],{"class":36,"line":11414},[34,69201,63871],{"class":44},[34,69203,53076],{"class":40},[34,69205,332],{"class":44},[34,69207,53131],{"class":55},[34,69209,53160],{"class":44},[34,69211,65630],{"class":44},[34,69213,2952],{"class":40},[34,69215,69216,69218,69220,69222],{"class":36,"line":11438},[34,69217,59055],{"class":44},[34,69219,53076],{"class":40},[34,69221,64008],{"class":44},[34,69223,2952],{"class":40},[34,69225,69226],{"class":36,"line":11443},[34,69227,3841],{"class":40},[34,69229,69230],{"class":36,"line":11448},[34,69231,1475],{"emptyLinePlaceholder":1474},[34,69233,69234,69236,69238,69240,69242,69244],{"class":36,"line":11453},[34,69235,65384],{"class":3617},[34,69237,62931],{"class":52939},[34,69239,56714],{"class":52939},[34,69241,3057],{"class":52939},[34,69243,65663],{"class":3617},[34,69245,17218],{"class":40},[34,69247,69248,69250,69252,69254],{"class":36,"line":11462},[34,69249,63430],{"class":44},[34,69251,53076],{"class":40},[34,69253,65674],{"class":44},[34,69255,2952],{"class":40},[34,69257,69258,69260,69262,69264],{"class":36,"line":11467},[34,69259,59055],{"class":44},[34,69261,53076],{"class":40},[34,69263,65674],{"class":44},[34,69265,2952],{"class":40},[34,69267,69268],{"class":36,"line":11473},[34,69269,3841],{"class":40},[34,69271,69272],{"class":36,"line":11494},[34,69273,1475],{"emptyLinePlaceholder":1474},[34,69275,69276,69278],{"class":36,"line":11500},[34,69277,65699],{"class":3617},[34,69279,17218],{"class":40},[34,69281,69282,69284,69286,69288,69290,69292],{"class":36,"line":11514},[34,69283,56334],{"class":44},[34,69285,53076],{"class":40},[34,69287,177],{"class":44},[34,69289,65712],{"class":44},[34,69291,53131],{"class":55},[34,69293,2952],{"class":40},[34,69295,69296],{"class":36,"line":11520},[34,69297,3841],{"class":40},[34,69299,69300],{"class":36,"line":11547},[34,69301,1475],{"emptyLinePlaceholder":1474},[34,69303,69304,69306,69308],{"class":36,"line":11556},[34,69305,65699],{"class":3617},[34,69307,63813],{"class":3617},[34,69309,17218],{"class":40},[34,69311,69312,69314,69316,69318],{"class":36,"line":11562},[34,69313,56648],{"class":44},[34,69315,53076],{"class":40},[34,69317,56376],{"class":44},[34,69319,2952],{"class":40},[34,69321,69322],{"class":36,"line":11570},[34,69323,3841],{"class":40},[34,69325,69326],{"class":36,"line":11575},[34,69327,1475],{"emptyLinePlaceholder":1474},[34,69329,69330,69332,69335],{"class":36,"line":18250},[34,69331,65699],{"class":3617},[34,69333,69334],{"class":3617}," .active",[34,69336,17218],{"class":40},[34,69338,69339,69341,69343,69345],{"class":36,"line":18256},[34,69340,56648],{"class":44},[34,69342,53076],{"class":40},[34,69344,62508],{"class":44},[34,69346,2952],{"class":40},[34,69348,69349],{"class":36,"line":18279},[34,69350,3841],{"class":40},[34,69352,69353,69355,69357],{"class":36,"line":18285},[34,69354,54056],{"class":40},[34,69356,1711],{"class":52939},[34,69358,52946],{"class":40},[34,69360,69361,69363,69365],{"class":36,"line":18308},[34,69362,53424],{"class":40},[34,69364,52973],{"class":52939},[34,69366,52946],{"class":40},[34,69368,69369],{"class":36,"line":18322},[34,69370,1475],{"emptyLinePlaceholder":1474},[34,69372,69373,69375,69377],{"class":36,"line":18342},[34,69374,2701],{"class":40},[34,69376,53439],{"class":52939},[34,69378,52946],{"class":40},[34,69380,69381,69383,69385,69387,69389,69391],{"class":36,"line":18348},[34,69382,53783],{"class":40},[34,69384,53250],{"class":52939},[34,69386,55125],{"class":3617},[34,69388,221],{"class":40},[34,69390,65814],{"class":504},[34,69392,52946],{"class":40},[34,69394,69395,69397,69399,69401,69403,69405],{"class":36,"line":18359},[34,69396,52980],{"class":40},[34,69398,53250],{"class":52939},[34,69400,55125],{"class":3617},[34,69402,221],{"class":40},[34,69404,65829],{"class":504},[34,69406,52946],{"class":40},[34,69408,69409,69411,69413,69415,69417],{"class":36,"line":18382},[34,69410,56873],{"class":40},[34,69412,19],{"class":52939},[34,69414,65840],{"class":40},[34,69416,19],{"class":52939},[34,69418,52946],{"class":40},[34,69420,69421,69423,69425],{"class":36,"line":18404},[34,69422,56873],{"class":40},[34,69424,2798],{"class":52939},[34,69426,52946],{"class":40},[34,69428,69429,69431,69433,69435,69437,69439,69441,69443,69445,69447,69449,69451,69453,69456,69458,69460,69462,69464],{"class":36,"line":18409},[34,69430,56941],{"class":40},[34,69432,1775],{"class":52939},[34,69434,62691],{"class":40},[34,69436,236],{"class":52939},[34,69438,55125],{"class":3617},[34,69440,221],{"class":40},[34,69442,61345],{"class":504},[34,69444,62696],{"class":3617},[34,69446,221],{"class":40},[34,69448,65875],{"class":504},[34,69450,55590],{"class":3617},[34,69452,221],{"class":40},[34,69454,69455],{"class":504},"\"0\"",[34,69457,65878],{"class":40},[34,69459,236],{"class":52939},[34,69461,56953],{"class":40},[34,69463,1775],{"class":52939},[34,69465,52946],{"class":40},[34,69467,69468,69470,69472,69474,69476,69478,69480,69482,69484,69486,69488,69490,69492,69494,69496],{"class":36,"line":18415},[34,69469,56941],{"class":40},[34,69471,1775],{"class":52939},[34,69473,62691],{"class":40},[34,69475,236],{"class":52939},[34,69477,62696],{"class":3617},[34,69479,221],{"class":40},[34,69481,65875],{"class":504},[34,69483,55590],{"class":3617},[34,69485,221],{"class":40},[34,69487,5331],{"class":504},[34,69489,65905],{"class":40},[34,69491,236],{"class":52939},[34,69493,56953],{"class":40},[34,69495,1775],{"class":52939},[34,69497,52946],{"class":40},[34,69499,69500,69502,69504,69506,69508,69510,69512,69514,69516,69518,69520,69522,69524,69526,69528],{"class":36,"line":18429},[34,69501,56941],{"class":40},[34,69503,1775],{"class":52939},[34,69505,62691],{"class":40},[34,69507,236],{"class":52939},[34,69509,62696],{"class":3617},[34,69511,221],{"class":40},[34,69513,65875],{"class":504},[34,69515,55590],{"class":3617},[34,69517,221],{"class":40},[34,69519,5354],{"class":504},[34,69521,65932],{"class":40},[34,69523,236],{"class":52939},[34,69525,56953],{"class":40},[34,69527,1775],{"class":52939},[34,69529,52946],{"class":40},[34,69531,69532,69534,69536,69538,69540,69542,69544,69546,69548,69550,69552,69554,69556,69558,69560],{"class":36,"line":18442},[34,69533,56941],{"class":40},[34,69535,1775],{"class":52939},[34,69537,62691],{"class":40},[34,69539,236],{"class":52939},[34,69541,62696],{"class":3617},[34,69543,221],{"class":40},[34,69545,65875],{"class":504},[34,69547,55590],{"class":3617},[34,69549,221],{"class":40},[34,69551,5367],{"class":504},[34,69553,65959],{"class":40},[34,69555,236],{"class":52939},[34,69557,56953],{"class":40},[34,69559,1775],{"class":52939},[34,69561,52946],{"class":40},[34,69563,69564,69566,69568,69570,69572,69574,69576,69578,69580,69582,69584,69586,69588,69590,69592],{"class":36,"line":18447},[34,69565,56941],{"class":40},[34,69567,1775],{"class":52939},[34,69569,62691],{"class":40},[34,69571,236],{"class":52939},[34,69573,62696],{"class":3617},[34,69575,221],{"class":40},[34,69577,65875],{"class":504},[34,69579,55590],{"class":3617},[34,69581,221],{"class":40},[34,69583,5380],{"class":504},[34,69585,65986],{"class":40},[34,69587,236],{"class":52939},[34,69589,56953],{"class":40},[34,69591,1775],{"class":52939},[34,69593,52946],{"class":40},[34,69595,69596,69598,69600],{"class":36,"line":18461},[34,69597,57046],{"class":40},[34,69599,2798],{"class":52939},[34,69601,52946],{"class":40},[34,69603,69604,69606,69608],{"class":36,"line":18466},[34,69605,53415],{"class":40},[34,69607,53250],{"class":52939},[34,69609,52946],{"class":40},[34,69611,69612,69614,69616,69618,69620,69622],{"class":36,"line":18472},[34,69613,52980],{"class":40},[34,69615,53250],{"class":52939},[34,69617,55125],{"class":3617},[34,69619,221],{"class":40},[34,69621,66023],{"class":504},[34,69623,52946],{"class":40},[34,69625,69626,69628,69630,69632,69634,69636,69638,69640,69642,69644,69646,69648,69650,69652,69654,69656],{"class":36,"line":18477},[34,69627,56873],{"class":40},[34,69629,53250],{"class":52939},[34,69631,55125],{"class":3617},[34,69633,221],{"class":40},[34,69635,66038],{"class":504},[34,69637,62691],{"class":40},[34,69639,109],{"class":52939},[34,69641,56878],{"class":3617},[34,69643,221],{"class":40},[34,69645,66049],{"class":504},[34,69647,56886],{"class":3617},[34,69649,221],{"class":40},[34,69651,9302],{"class":504},[34,69653,66058],{"class":40},[34,69655,53250],{"class":52939},[34,69657,52946],{"class":40},[34,69659,69660,69662,69664,69666,69668,69670,69672,69674,69676,69678,69680,69682,69684,69686,69688,69690],{"class":36,"line":18491},[34,69661,56873],{"class":40},[34,69663,53250],{"class":52939},[34,69665,55125],{"class":3617},[34,69667,221],{"class":40},[34,69669,64262],{"class":504},[34,69671,62691],{"class":40},[34,69673,109],{"class":52939},[34,69675,56878],{"class":3617},[34,69677,221],{"class":40},[34,69679,66085],{"class":504},[34,69681,56886],{"class":3617},[34,69683,221],{"class":40},[34,69685,9302],{"class":504},[34,69687,66058],{"class":40},[34,69689,53250],{"class":52939},[34,69691,52946],{"class":40},[34,69693,69694,69696,69698,69700,69702,69704,69706,69708,69710,69712,69714,69716,69718,69720,69722,69724],{"class":36,"line":18496},[34,69695,56873],{"class":40},[34,69697,53250],{"class":52939},[34,69699,55125],{"class":3617},[34,69701,221],{"class":40},[34,69703,64262],{"class":504},[34,69705,62691],{"class":40},[34,69707,109],{"class":52939},[34,69709,56878],{"class":3617},[34,69711,221],{"class":40},[34,69713,66120],{"class":504},[34,69715,56886],{"class":3617},[34,69717,221],{"class":40},[34,69719,9302],{"class":504},[34,69721,66058],{"class":40},[34,69723,53250],{"class":52939},[34,69725,52946],{"class":40},[34,69727,69728,69730,69732,69734,69736,69738,69740,69742,69744,69746,69748,69750,69752,69754,69756,69758],{"class":36,"line":18501},[34,69729,56873],{"class":40},[34,69731,53250],{"class":52939},[34,69733,55125],{"class":3617},[34,69735,221],{"class":40},[34,69737,64262],{"class":504},[34,69739,62691],{"class":40},[34,69741,109],{"class":52939},[34,69743,56878],{"class":3617},[34,69745,221],{"class":40},[34,69747,66155],{"class":504},[34,69749,56886],{"class":3617},[34,69751,221],{"class":40},[34,69753,9302],{"class":504},[34,69755,66058],{"class":40},[34,69757,53250],{"class":52939},[34,69759,52946],{"class":40},[34,69761,69762,69764,69766,69768,69770,69772,69774,69776,69778,69780,69782,69784,69786,69788,69790,69792],{"class":36,"line":18515},[34,69763,56873],{"class":40},[34,69765,53250],{"class":52939},[34,69767,55125],{"class":3617},[34,69769,221],{"class":40},[34,69771,64262],{"class":504},[34,69773,62691],{"class":40},[34,69775,109],{"class":52939},[34,69777,56878],{"class":3617},[34,69779,221],{"class":40},[34,69781,66190],{"class":504},[34,69783,56886],{"class":3617},[34,69785,221],{"class":40},[34,69787,9302],{"class":504},[34,69789,66058],{"class":40},[34,69791,53250],{"class":52939},[34,69793,52946],{"class":40},[34,69795,69796,69798,69800],{"class":36,"line":18527},[34,69797,53415],{"class":40},[34,69799,53250],{"class":52939},[34,69801,52946],{"class":40},[34,69803,69804,69806,69808],{"class":36,"line":18532},[34,69805,54056],{"class":40},[34,69807,53250],{"class":52939},[34,69809,52946],{"class":40},[34,69811,69812,69814,69816],{"class":36,"line":18545},[34,69813,53783],{"class":40},[34,69815,53452],{"class":52939},[34,69817,52946],{"class":40},[34,69819,69820],{"class":36,"line":18550},[34,69821,69822],{"class":161},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[34,69824,69825],{"class":36,"line":18555},[34,69826,69827],{"class":161},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[34,69829,69830,69832,69834,69836,69838,69840,69842,69845],{"class":36,"line":18560},[34,69831,12871],{"class":55},[34,69833,62931],{"class":44},[34,69835,56],{"class":55},[34,69837,56035],{"class":40},[34,69839,56038],{"class":3617},[34,69841,286],{"class":40},[34,69843,69844],{"class":504},"'.tab-nav ul'",[34,69846,101],{"class":40},[34,69848,69849],{"class":36,"line":18573},[34,69850,69851],{"class":161},"    \u002F\u002F 2.添加事件\n",[34,69853,69854,69856,69858,69860,69862,69864,69866,69868,69870],{"class":36,"line":18578},[34,69855,68593],{"class":40},[34,69857,59452],{"class":3617},[34,69859,286],{"class":40},[34,69861,59457],{"class":504},[34,69863,48],{"class":40},[34,69865,56088],{"class":55},[34,69867,3313],{"class":40},[34,69869,1887],{"class":51},[34,69871,14090],{"class":40},[34,69873,69874,69876,69878],{"class":36,"line":34274},[34,69875,59883],{"class":40},[34,69877,68649],{"class":3617},[34,69879,68652],{"class":40},[34,69881,69882],{"class":36,"line":34280},[34,69883,69884],{"class":161},"      \u002F\u002Fe.targer是我们点击的对象\n",[34,69886,69887,69889,69891,69893,69896],{"class":36,"line":34286},[34,69888,56119],{"class":55},[34,69890,68673],{"class":40},[34,69892,56125],{"class":55},[34,69894,69895],{"class":504}," 'A'",[34,69897,14090],{"class":40},[34,69899,69900,69902,69904,69906,69909,69911,69913,69915,69917],{"class":36,"line":34292},[34,69901,53564],{"class":40},[34,69903,56038],{"class":3617},[34,69905,286],{"class":40},[34,69907,69908],{"class":504},"'.active'",[34,69910,58642],{"class":40},[34,69912,58645],{"class":3617},[34,69914,286],{"class":40},[34,69916,66353],{"class":504},[34,69918,101],{"class":40},[34,69920,69921,69924,69926,69928,69930],{"class":36,"line":34298},[34,69922,69923],{"class":40},"        e.target.classList.",[34,69925,6984],{"class":3617},[34,69927,286],{"class":40},[34,69929,66353],{"class":504},[34,69931,101],{"class":40},[34,69933,69934],{"class":36,"line":34309},[34,69935,1475],{"emptyLinePlaceholder":1474},[34,69937,69938],{"class":36,"line":34315},[34,69939,69940],{"class":161},"        \u002F\u002F 下面大盒子模块\n",[34,69942,69943],{"class":36,"line":34335},[34,69944,69945],{"class":161},"        \u002F\u002F console.log(e.target.dataset.id)\n",[34,69947,69948,69950,69952,69954,69956],{"class":36,"line":34341},[34,69949,62909],{"class":55},[34,69951,4685],{"class":44},[34,69953,56],{"class":55},[34,69955,47205],{"class":55},[34,69957,69958],{"class":40},"e.target.dataset.id\n",[34,69960,69961,69963,69965,69967,69969,69971,69973,69975,69977],{"class":36,"line":34352},[34,69962,53564],{"class":40},[34,69964,56038],{"class":3617},[34,69966,286],{"class":40},[34,69968,66401],{"class":504},[34,69970,58642],{"class":40},[34,69972,58645],{"class":3617},[34,69974,286],{"class":40},[34,69976,66353],{"class":504},[34,69978,101],{"class":40},[34,69980,69981,69983,69985,69987,69989,69991,69993,69995,69997,69999,70001,70003,70005],{"class":36,"line":34358},[34,69982,53564],{"class":40},[34,69984,56038],{"class":3617},[34,69986,286],{"class":40},[34,69988,66427],{"class":504},[34,69990,2239],{"class":40},[34,69992,47205],{"class":55},[34,69994,26764],{"class":44},[34,69996,58671],{"class":504},[34,69998,58642],{"class":40},[34,70000,6984],{"class":3617},[34,70002,286],{"class":40},[34,70004,66353],{"class":504},[34,70006,101],{"class":40},[34,70008,70009],{"class":36,"line":34364},[34,70010,1475],{"emptyLinePlaceholder":1474},[34,70012,70013],{"class":36,"line":34370},[34,70014,54037],{"class":40},[34,70016,70017],{"class":36,"line":34376},[34,70018,35102],{"class":40},[34,70020,70021,70023,70025],{"class":36,"line":34382},[34,70022,54056],{"class":40},[34,70024,53452],{"class":52939},[34,70026,52946],{"class":40},[34,70028,70029,70031,70033],{"class":36,"line":34388},[34,70030,53424],{"class":40},[34,70032,53439],{"class":52939},[34,70034,52946],{"class":40},[34,70036,70037],{"class":36,"line":34394},[34,70038,1475],{"emptyLinePlaceholder":1474},[34,70040,70041,70043,70045],{"class":36,"line":34414},[34,70042,53424],{"class":40},[34,70044,52274],{"class":52939},[34,70046,52946],{"class":40},[19,70048,70050],{"id":70049},"_333-页面加载事件","3.3.3 页面加载事件",[1772,70052,70053],{},[1775,70054,70055],{},"load",[103,70057,70058],{},[109,70059],{"alt":29,"src":70060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[103,70062,70063],{},"window代表整个窗口，比document还要大",[103,70065,70066],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[103,70068,70069],{},"img.addEventListener('load', function () {",[103,70071,70072],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[103,70074,54103],{},[1772,70076,70077],{"start":165},[1775,70078,70079],{},"DOMContentLoaded",[103,70081,70082],{},[109,70083],{"alt":29,"src":70084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[103,70086,70087],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[19,70089,70091],{"id":70090},"_334-元素滚动事件","3.3.4 元素滚动事件",[103,70093,70094],{},[109,70095],{"alt":29,"src":70096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[103,70098,70099],{},[109,70100],{"alt":29,"src":70101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[103,70103,70104],{},[109,70105],{"alt":29,"src":70106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[103,70108,70109],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[103,70111,70112],{},"获得的是数字型数据，不带单位",[103,70114,70115],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[103,70117,70118],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[103,70120,70121],{},"它是通过document.documentElement来获取",[103,70123,70124],{},[109,70125],{"alt":29,"src":70126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[103,70128,70129],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[19,70131,70133],{"id":70132},"_335-页面缩放事件","3.3.5 页面缩放事件",[103,70135,70136],{},[109,70137],{"alt":29,"src":70138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[103,70140,70141],{},[109,70142],{"alt":29,"src":70143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[19,70145,70147],{"id":70146},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[103,70149,70150],{},[109,70151],{"alt":29,"src":70152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[103,70154,70155],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[103,70157,70158],{},[109,70159],{"alt":29,"src":70160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[103,70162,70163],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[103,70165,70166],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[103,70168,70169],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[103,70171,70172],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[103,70174,70175],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[103,70177,70178],{},[109,70179],{"alt":29,"src":70180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[103,70182,70183],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[103,70185,70186],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[103,70188,70189],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[103,70191,70192],{},"e.pageX-box.getBoundingClientRect()",[19,70194,70196],{"id":70195},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[103,70198,70199],{},[109,70200],{"alt":29,"src":70201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[103,70203,70204],{},"这个是相对于视口来说的，它是个方法，不是属性值",[19,70206,70208],{"id":70207},"_338-总结","3.3.8 总结",[103,70210,70211],{},[109,70212],{"alt":29,"src":70213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[103,70215,70216],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[103,70218,70219],{},"修改盒子的宽高只能通过width和height来实现",[19,70221,70223],{"id":70222},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[24,70225,70227],{"className":52272,"code":70226,"language":52274,"meta":29,"style":29},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[31,70228,70229,70234,70239,70244,70249],{"__ignoreMap":29},[34,70230,70231],{"class":36,"line":37},[34,70232,70233],{"class":40},"\u002F* 页面滑动 *\u002F\n",[34,70235,70236],{"class":36,"line":165},[34,70237,70238],{"class":40},"html {\n",[34,70240,70241],{"class":36,"line":171},[34,70242,70243],{"class":40},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[34,70245,70246],{"class":36,"line":182},[34,70247,70248],{"class":40},"  scroll-behavior: smooth;\n",[34,70250,70251],{"class":36,"line":188},[34,70252,3223],{"class":40},[103,70254,70255],{},"默认是auto",[19,70257,70259],{"id":70258},"_3310-日期对象","3.3.10 日期对象",[1353,70261,70263],{"id":70262},"_33101-实例化","3.3.10.1 实例化",[103,70265,70266],{},[109,70267],{"alt":29,"src":70268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[1353,70270,70272],{"id":70271},"_33102-时期对象方法","3.3.10.2 时期对象方法",[103,70274,70275],{},[109,70276],{"alt":29,"src":70277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[103,70279,70280],{},"月份+1",[103,70282,70283],{},"老外认为第一天为0，星期天",[103,70285,70286],{},"方法使用的时候必须要跟括号",[103,70288,70289],{},"快速获得日期",[103,70291,70292],{},"\u002F\u002F 得到年月日",[103,70294,70295],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[103,70297,70298],{},"\u002F\u002F 得到当地日期",[103,70300,70301],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[103,70303,70304],{},"\u002F\u002F 得到当地时间",[103,70306,70307],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[103,70309,70310],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[103,70312,70313],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53452,70315,70316],{},"\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",[103,70318,70319],{},"学会去封装函数！",[1353,70321,70323],{"id":70322},"_33103-时间戳","3.3.10.3 时间戳",[103,70325,70326],{},[109,70327],{"alt":29,"src":70328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[103,70330,70331],{},[109,70332],{"alt":29,"src":70333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[103,70335,70336],{},"三种方法记住一个就可以",[19,70338,70340],{"id":70339},"_3311-节点操作","3.3.11 节点操作",[1353,70342,70344],{"id":70343},"_33111-dom节点","3.3.11.1 DOM节点",[103,70346,70347],{},[109,70348],{"alt":29,"src":70349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[103,70351,70352],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[1353,70354,70356],{"id":70355},"_33112-查找节点","3.3.11.2 查找节点",[103,70358,70359],{},"前边的document.querySelector()是获取的元素",[103,70361,70362],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[103,70364,70365],{},[109,70366],{"alt":29,"src":70367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[1772,70369,70370],{},[1775,70371,70372],{},"父节点",[103,70374,70375],{},[109,70376],{"alt":29,"src":70377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[1772,70379,70380],{"start":165},[1775,70381,70382],{},"子节点",[103,70384,70385],{},[109,70386],{"alt":29,"src":70387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[103,70389,70390],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[103,70392,70393],{},"children获得的是伪数组，是亲儿子",[1772,70395,70396],{"start":171},[1775,70397,70398],{},"兄弟节点",[103,70400,70401],{},[109,70402],{"alt":29,"src":70403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[1353,70405,70407],{"id":70406},"_33113-增加节点","3.3.11.3 增加节点",[103,70409,70410],{},[109,70411],{"alt":29,"src":70412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[103,70414,70415],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[103,70417,70418],{},[109,70419],{"alt":29,"src":70420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[103,70422,70423],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[103,70425,70426],{},"下面是写法的部分展示，就按照下边的格式来写",[103,70428,70429],{},"例：",[53452,70431,70432],{},"\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",[103,70434,70435],{},[109,70436],{"alt":29,"src":70437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[103,70439,70440],{},"false只克隆标签，里边的内容不会克隆过来",[24,70442,70444],{"className":52272,"code":70443,"language":52274,"meta":29,"style":29},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[31,70445,70446],{"__ignoreMap":29},[34,70447,70448],{"class":36,"line":37},[34,70449,70443],{"class":40},[1353,70451,70453],{"id":70452},"_33114-删除节点","3.3.11.4 删除节点",[103,70455,70456],{},[109,70457],{"alt":29,"src":70458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[103,70460,70461],{},"父亲删儿子",[103,70463,70464],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[19,70466,70468],{"id":70467},"_3312-m端事件","3.3.12 M端事件",[103,70470,70471],{},"M端就是移动端",[103,70473,70474],{},[109,70475],{"alt":29,"src":70476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[19,70478,70480],{"id":70479},"_3313-插件","3.3.13 插件",[103,70482,70483],{},"要熟悉官网！！！",[103,70485,70486],{},[236,70487,70488],{"href":70488,"rel":70489},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25510],[103,70491,70492],{},[236,70493,70494],{"href":70494,"rel":70495},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25510],[19,70497,70499],{"id":70498},"_3314-学生信息表","3.3.14 学生信息表",[1772,70501,70502,70505,70508,70511,70514,70517,70520,70523],{},[1775,70503,70504],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[1775,70506,70507],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[1775,70509,70510],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[1775,70512,70513],{},"用好表单元素自带的属性，value,name等",[1775,70515,70516],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[1775,70518,70519],{},"不要忘记事件对象",[1775,70521,70522],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[1775,70524,70525],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[103,70527,70528],{},"结构：",[24,70530,70532],{"className":52272,"code":70531,"language":52274,"meta":29,"style":29},"\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",[31,70533,70534,70544,70558,70562,70570,70584,70604,70625,70638,70662,70670,70674,70682,70695,70716,70744,70772,70777,70799,70819,70838,70846,70874,70896,70916,70936,70956,70976,70996,71004,71024,71032,71036,71049,71057,71065,71073,71086,71099,71112,71125,71138,71151,71164,71172,71180,71188,71193,71198,71203,71208,71213,71218,71223,71228,71233,71238,71243,71248,71253,71261,71269,71277,71281,71301,71320,71340,71360,71380,71400,71404,71409,71429,71434,71444,71449,71454,71474,71496,71501,71511,71515,71519,71524,71529,71558,71572,71587,71591,71595,71599,71604,71615,71628,71633,71638,71643,71648,71653,71657,71662,71667,71676,71681,71686,71698,71703,71710,71714,71719,71729,71734,71744,71749,71777,71798,71808,71828,71846,71863,71880,71897,71914,71918,71928,71933,71938,71943,71954,71958,71962,71966,71971,71976,71997,72009,72014,72019,72024,72038,72043,72050,72054,72058,72066,72070,72078,72082],{"__ignoreMap":29},[34,70535,70536,70538,70540,70542],{"class":36,"line":37},[34,70537,52936],{"class":40},[34,70539,52940],{"class":52939},[34,70541,52943],{"class":3617},[34,70543,52946],{"class":40},[34,70545,70546,70548,70550,70552,70554,70556],{"class":36,"line":165},[34,70547,2701],{"class":40},[34,70549,52274],{"class":52939},[34,70551,52955],{"class":3617},[34,70553,221],{"class":40},[34,70555,52960],{"class":504},[34,70557,52946],{"class":40},[34,70559,70560],{"class":36,"line":171},[34,70561,1475],{"emptyLinePlaceholder":1474},[34,70563,70564,70566,70568],{"class":36,"line":182},[34,70565,2701],{"class":40},[34,70567,52973],{"class":52939},[34,70569,52946],{"class":40},[34,70571,70572,70574,70576,70578,70580,70582],{"class":36,"line":188},[34,70573,53783],{"class":40},[34,70575,52983],{"class":52939},[34,70577,52986],{"class":3617},[34,70579,221],{"class":40},[34,70581,52991],{"class":504},[34,70583,60766],{"class":40},[34,70585,70586,70588,70590,70592,70594,70596,70598,70600,70602],{"class":36,"line":518},[34,70587,53783],{"class":40},[34,70589,52983],{"class":52939},[34,70591,16566],{"class":3617},[34,70593,221],{"class":40},[34,70595,53030],{"class":504},[34,70597,53010],{"class":3617},[34,70599,221],{"class":40},[34,70601,53037],{"class":504},[34,70603,60766],{"class":40},[34,70605,70606,70608,70610,70612,70614,70616,70618,70620,70623],{"class":36,"line":524},[34,70607,53783],{"class":40},[34,70609,52983],{"class":52939},[34,70611,53002],{"class":3617},[34,70613,221],{"class":40},[34,70615,53007],{"class":504},[34,70617,53010],{"class":3617},[34,70619,221],{"class":40},[34,70621,70622],{"class":504},"\"ie=edge\"",[34,70624,60766],{"class":40},[34,70626,70627,70629,70631,70634,70636],{"class":36,"line":530},[34,70628,53783],{"class":40},[34,70630,53046],{"class":52939},[34,70632,70633],{"class":40},">学生信息管理\u003C\u002F",[34,70635,53046],{"class":52939},[34,70637,52946],{"class":40},[34,70639,70640,70642,70645,70648,70650,70653,70655,70657,70660],{"class":36,"line":624},[34,70641,53783],{"class":40},[34,70643,70644],{"class":52939},"link",[34,70646,70647],{"class":3617}," rel",[34,70649,221],{"class":40},[34,70651,70652],{"class":504},"\"stylesheet\"",[34,70654,62696],{"class":3617},[34,70656,221],{"class":40},[34,70658,70659],{"class":504},"\"css\u002Findex.css\"",[34,70661,60766],{"class":40},[34,70663,70664,70666,70668],{"class":36,"line":630},[34,70665,53424],{"class":40},[34,70667,52973],{"class":52939},[34,70669,52946],{"class":40},[34,70671,70672],{"class":36,"line":636},[34,70673,1475],{"emptyLinePlaceholder":1474},[34,70675,70676,70678,70680],{"class":36,"line":1513},[34,70677,2701],{"class":40},[34,70679,53439],{"class":52939},[34,70681,52946],{"class":40},[34,70683,70684,70686,70688,70691,70693],{"class":36,"line":1519},[34,70685,53783],{"class":40},[34,70687,10],{"class":52939},[34,70689,70690],{"class":40},">新增学员\u003C\u002F",[34,70692,10],{"class":52939},[34,70694,52946],{"class":40},[34,70696,70697,70699,70701,70703,70705,70707,70710,70712,70714],{"class":36,"line":3283},[34,70698,53783],{"class":40},[34,70700,68264],{"class":52939},[34,70702,55125],{"class":3617},[34,70704,221],{"class":40},[34,70706,64303],{"class":504},[34,70708,70709],{"class":3617}," autocomplete",[34,70711,221],{"class":40},[34,70713,33417],{"class":504},[34,70715,52946],{"class":40},[34,70717,70718,70721,70723,70725,70727,70729,70731,70733,70736,70738,70740,70742],{"class":36,"line":3297},[34,70719,70720],{"class":40},"    姓名：\u003C",[34,70722,55460],{"class":52939},[34,70724,55463],{"class":3617},[34,70726,221],{"class":40},[34,70728,64338],{"class":504},[34,70730,55125],{"class":3617},[34,70732,221],{"class":40},[34,70734,70735],{"class":504},"\"uname\"",[34,70737,16566],{"class":3617},[34,70739,221],{"class":40},[34,70741,70735],{"class":504},[34,70743,60766],{"class":40},[34,70745,70746,70749,70751,70753,70755,70757,70759,70761,70764,70766,70768,70770],{"class":36,"line":3302},[34,70747,70748],{"class":40},"    年龄：\u003C",[34,70750,55460],{"class":52939},[34,70752,55463],{"class":3617},[34,70754,221],{"class":40},[34,70756,64338],{"class":504},[34,70758,55125],{"class":3617},[34,70760,221],{"class":40},[34,70762,70763],{"class":504},"\"age\"",[34,70765,16566],{"class":3617},[34,70767,221],{"class":40},[34,70769,70763],{"class":504},[34,70771,60766],{"class":40},[34,70773,70774],{"class":36,"line":3308},[34,70775,70776],{"class":40},"    性别:\n",[34,70778,70779,70781,70784,70786,70788,70791,70793,70795,70797],{"class":36,"line":3328},[34,70780,52980],{"class":40},[34,70782,70783],{"class":52939},"select",[34,70785,16566],{"class":3617},[34,70787,221],{"class":40},[34,70789,70790],{"class":504},"\"gender\"",[34,70792,55125],{"class":3617},[34,70794,221],{"class":40},[34,70796,70790],{"class":504},[34,70798,52946],{"class":40},[34,70800,70801,70803,70806,70808,70810,70812,70815,70817],{"class":36,"line":3333},[34,70802,56873],{"class":40},[34,70804,70805],{"class":52939},"option",[34,70807,68290],{"class":3617},[34,70809,221],{"class":40},[34,70811,11611],{"class":504},[34,70813,70814],{"class":40},">男\u003C\u002F",[34,70816,70805],{"class":52939},[34,70818,52946],{"class":40},[34,70820,70821,70823,70825,70827,70829,70831,70834,70836],{"class":36,"line":3347},[34,70822,56873],{"class":40},[34,70824,70805],{"class":52939},[34,70826,68290],{"class":3617},[34,70828,221],{"class":40},[34,70830,11680],{"class":504},[34,70832,70833],{"class":40},">女\u003C\u002F",[34,70835,70805],{"class":52939},[34,70837,52946],{"class":40},[34,70839,70840,70842,70844],{"class":36,"line":3352},[34,70841,53415],{"class":40},[34,70843,70783],{"class":52939},[34,70845,52946],{"class":40},[34,70847,70848,70851,70853,70855,70857,70859,70861,70863,70866,70868,70870,70872],{"class":36,"line":3381},[34,70849,70850],{"class":40},"    薪资：\u003C",[34,70852,55460],{"class":52939},[34,70854,55463],{"class":3617},[34,70856,221],{"class":40},[34,70858,64338],{"class":504},[34,70860,55125],{"class":3617},[34,70862,221],{"class":40},[34,70864,70865],{"class":504},"\"salary\"",[34,70867,16566],{"class":3617},[34,70869,221],{"class":40},[34,70871,70865],{"class":504},[34,70873,60766],{"class":40},[34,70875,70876,70879,70881,70883,70885,70888,70890,70892,70894],{"class":36,"line":3386},[34,70877,70878],{"class":40},"    就业城市：\u003C",[34,70880,70783],{"class":52939},[34,70882,16566],{"class":3617},[34,70884,221],{"class":40},[34,70886,70887],{"class":504},"\"city\"",[34,70889,55125],{"class":3617},[34,70891,221],{"class":40},[34,70893,70887],{"class":504},[34,70895,52946],{"class":40},[34,70897,70898,70900,70902,70904,70906,70909,70912,70914],{"class":36,"line":3403},[34,70899,56873],{"class":40},[34,70901,70805],{"class":52939},[34,70903,68290],{"class":3617},[34,70905,221],{"class":40},[34,70907,70908],{"class":504},"\"北京\"",[34,70910,70911],{"class":40},">北京\u003C\u002F",[34,70913,70805],{"class":52939},[34,70915,52946],{"class":40},[34,70917,70918,70920,70922,70924,70926,70929,70932,70934],{"class":36,"line":3408},[34,70919,56873],{"class":40},[34,70921,70805],{"class":52939},[34,70923,68290],{"class":3617},[34,70925,221],{"class":40},[34,70927,70928],{"class":504},"\"上海\"",[34,70930,70931],{"class":40},">上海\u003C\u002F",[34,70933,70805],{"class":52939},[34,70935,52946],{"class":40},[34,70937,70938,70940,70942,70944,70946,70949,70952,70954],{"class":36,"line":3413},[34,70939,56873],{"class":40},[34,70941,70805],{"class":52939},[34,70943,68290],{"class":3617},[34,70945,221],{"class":40},[34,70947,70948],{"class":504},"\"广州\"",[34,70950,70951],{"class":40},">广州\u003C\u002F",[34,70953,70805],{"class":52939},[34,70955,52946],{"class":40},[34,70957,70958,70960,70962,70964,70966,70969,70972,70974],{"class":36,"line":3418},[34,70959,56873],{"class":40},[34,70961,70805],{"class":52939},[34,70963,68290],{"class":3617},[34,70965,221],{"class":40},[34,70967,70968],{"class":504},"\"深圳\"",[34,70970,70971],{"class":40},">深圳\u003C\u002F",[34,70973,70805],{"class":52939},[34,70975,52946],{"class":40},[34,70977,70978,70980,70982,70984,70986,70989,70992,70994],{"class":36,"line":3432},[34,70979,56873],{"class":40},[34,70981,70805],{"class":52939},[34,70983,68290],{"class":3617},[34,70985,221],{"class":40},[34,70987,70988],{"class":504},"\"曹县\"",[34,70990,70991],{"class":40},">曹县\u003C\u002F",[34,70993,70805],{"class":52939},[34,70995,52946],{"class":40},[34,70997,70998,71000,71002],{"class":36,"line":3437},[34,70999,53415],{"class":40},[34,71001,70783],{"class":52939},[34,71003,52946],{"class":40},[34,71005,71006,71008,71010,71012,71014,71017,71020,71022],{"class":36,"line":4230},[34,71007,52980],{"class":40},[34,71009,55526],{"class":52939},[34,71011,55125],{"class":3617},[34,71013,221],{"class":40},[34,71015,71016],{"class":504},"\"add\"",[34,71018,71019],{"class":40},">录入\u003C\u002F",[34,71021,55526],{"class":52939},[34,71023,52946],{"class":40},[34,71025,71026,71028,71030],{"class":36,"line":4244},[34,71027,54056],{"class":40},[34,71029,68264],{"class":52939},[34,71031,52946],{"class":40},[34,71033,71034],{"class":36,"line":4252},[34,71035,1475],{"emptyLinePlaceholder":1474},[34,71037,71038,71040,71042,71045,71047],{"class":36,"line":4257},[34,71039,53783],{"class":40},[34,71041,10],{"class":52939},[34,71043,71044],{"class":40},">就业榜\u003C\u002F",[34,71046,10],{"class":52939},[34,71048,52946],{"class":40},[34,71050,71051,71053,71055],{"class":36,"line":4263},[34,71052,53783],{"class":40},[34,71054,1948],{"class":52939},[34,71056,52946],{"class":40},[34,71058,71059,71061,71063],{"class":36,"line":4269},[34,71060,52980],{"class":40},[34,71062,1951],{"class":52939},[34,71064,52946],{"class":40},[34,71066,71067,71069,71071],{"class":36,"line":4274},[34,71068,56873],{"class":40},[34,71070,1954],{"class":52939},[34,71072,52946],{"class":40},[34,71074,71075,71077,71079,71082,71084],{"class":36,"line":9598},[34,71076,56941],{"class":40},[34,71078,1957],{"class":52939},[34,71080,71081],{"class":40},">序号\u003C\u002F",[34,71083,1957],{"class":52939},[34,71085,52946],{"class":40},[34,71087,71088,71090,71092,71095,71097],{"class":36,"line":9622},[34,71089,56941],{"class":40},[34,71091,1957],{"class":52939},[34,71093,71094],{"class":40},">姓名\u003C\u002F",[34,71096,1957],{"class":52939},[34,71098,52946],{"class":40},[34,71100,71101,71103,71105,71108,71110],{"class":36,"line":9627},[34,71102,56941],{"class":40},[34,71104,1957],{"class":52939},[34,71106,71107],{"class":40},">年龄\u003C\u002F",[34,71109,1957],{"class":52939},[34,71111,52946],{"class":40},[34,71113,71114,71116,71118,71121,71123],{"class":36,"line":9633},[34,71115,56941],{"class":40},[34,71117,1957],{"class":52939},[34,71119,71120],{"class":40},">性别\u003C\u002F",[34,71122,1957],{"class":52939},[34,71124,52946],{"class":40},[34,71126,71127,71129,71131,71134,71136],{"class":36,"line":9660},[34,71128,56941],{"class":40},[34,71130,1957],{"class":52939},[34,71132,71133],{"class":40},">薪资\u003C\u002F",[34,71135,1957],{"class":52939},[34,71137,52946],{"class":40},[34,71139,71140,71142,71144,71147,71149],{"class":36,"line":9665},[34,71141,56941],{"class":40},[34,71143,1957],{"class":52939},[34,71145,71146],{"class":40},">就业城市\u003C\u002F",[34,71148,1957],{"class":52939},[34,71150,52946],{"class":40},[34,71152,71153,71155,71157,71160,71162],{"class":36,"line":9671},[34,71154,56941],{"class":40},[34,71156,1957],{"class":52939},[34,71158,71159],{"class":40},">操作\u003C\u002F",[34,71161,1957],{"class":52939},[34,71163,52946],{"class":40},[34,71165,71166,71168,71170],{"class":36,"line":9683},[34,71167,57046],{"class":40},[34,71169,1954],{"class":52939},[34,71171,52946],{"class":40},[34,71173,71174,71176,71178],{"class":36,"line":9695},[34,71175,53415],{"class":40},[34,71177,1951],{"class":52939},[34,71179,52946],{"class":40},[34,71181,71182,71184,71186],{"class":36,"line":9707},[34,71183,52980],{"class":40},[34,71185,1994],{"class":52939},[34,71187,52946],{"class":40},[34,71189,71190],{"class":36,"line":11366},[34,71191,71192],{"class":161},"      \u003C!-- \n",[34,71194,71195],{"class":36,"line":11391},[34,71196,71197],{"class":161},"        \u003Ctr>\n",[34,71199,71200],{"class":36,"line":11414},[34,71201,71202],{"class":161},"          \u003Ctd>1001\u003C\u002Ftd>\n",[34,71204,71205],{"class":36,"line":11438},[34,71206,71207],{"class":161},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[34,71209,71210],{"class":36,"line":11443},[34,71211,71212],{"class":161},"          \u003Ctd>19\u003C\u002Ftd>\n",[34,71214,71215],{"class":36,"line":11448},[34,71216,71217],{"class":161},"          \u003Ctd>男\u003C\u002Ftd>\n",[34,71219,71220],{"class":36,"line":11453},[34,71221,71222],{"class":161},"          \u003Ctd>15000\u003C\u002Ftd>\n",[34,71224,71225],{"class":36,"line":11462},[34,71226,71227],{"class":161},"          \u003Ctd>上海\u003C\u002Ftd>\n",[34,71229,71230],{"class":36,"line":11467},[34,71231,71232],{"class":161},"          \u003Ctd>\n",[34,71234,71235],{"class":36,"line":11473},[34,71236,71237],{"class":161},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[34,71239,71240],{"class":36,"line":11494},[34,71241,71242],{"class":161},"          \u003C\u002Ftd>\n",[34,71244,71245],{"class":36,"line":11500},[34,71246,71247],{"class":161},"        \u003C\u002Ftr> \n",[34,71249,71250],{"class":36,"line":11514},[34,71251,71252],{"class":161},"        -->\n",[34,71254,71255,71257,71259],{"class":36,"line":11520},[34,71256,53415],{"class":40},[34,71258,1994],{"class":52939},[34,71260,52946],{"class":40},[34,71262,71263,71265,71267],{"class":36,"line":11547},[34,71264,54056],{"class":40},[34,71266,1948],{"class":52939},[34,71268,52946],{"class":40},[34,71270,71271,71273,71275],{"class":36,"line":11556},[34,71272,53783],{"class":40},[34,71274,53452],{"class":52939},[34,71276,52946],{"class":40},[34,71278,71279],{"class":36,"line":11562},[34,71280,61597],{"class":161},[34,71282,71283,71285,71288,71290,71292,71294,71296,71299],{"class":36,"line":11570},[34,71284,12871],{"class":55},[34,71286,71287],{"class":44}," uname",[34,71289,56],{"class":55},[34,71291,56035],{"class":40},[34,71293,56038],{"class":3617},[34,71295,286],{"class":40},[34,71297,71298],{"class":504},"'.uname'",[34,71300,101],{"class":40},[34,71302,71303,71305,71307,71309,71311,71313,71315,71318],{"class":36,"line":11575},[34,71304,12871],{"class":55},[34,71306,17335],{"class":44},[34,71308,56],{"class":55},[34,71310,56035],{"class":40},[34,71312,56038],{"class":3617},[34,71314,286],{"class":40},[34,71316,71317],{"class":504},"'.age'",[34,71319,101],{"class":40},[34,71321,71322,71324,71327,71329,71331,71333,71335,71338],{"class":36,"line":18250},[34,71323,12871],{"class":55},[34,71325,71326],{"class":44}," gender",[34,71328,56],{"class":55},[34,71330,56035],{"class":40},[34,71332,56038],{"class":3617},[34,71334,286],{"class":40},[34,71336,71337],{"class":504},"'.gender'",[34,71339,101],{"class":40},[34,71341,71342,71344,71347,71349,71351,71353,71355,71358],{"class":36,"line":18256},[34,71343,12871],{"class":55},[34,71345,71346],{"class":44}," salary",[34,71348,56],{"class":55},[34,71350,56035],{"class":40},[34,71352,56038],{"class":3617},[34,71354,286],{"class":40},[34,71356,71357],{"class":504},"'.salary'",[34,71359,101],{"class":40},[34,71361,71362,71364,71367,71369,71371,71373,71375,71378],{"class":36,"line":18279},[34,71363,12871],{"class":55},[34,71365,71366],{"class":44}," city",[34,71368,56],{"class":55},[34,71370,56035],{"class":40},[34,71372,56038],{"class":3617},[34,71374,286],{"class":40},[34,71376,71377],{"class":504},"'.city'",[34,71379,101],{"class":40},[34,71381,71382,71384,71387,71389,71391,71393,71395,71398],{"class":36,"line":18285},[34,71383,12871],{"class":55},[34,71385,71386],{"class":44}," tbody",[34,71388,56],{"class":55},[34,71390,56035],{"class":40},[34,71392,56038],{"class":3617},[34,71394,286],{"class":40},[34,71396,71397],{"class":504},"'tbody'",[34,71399,101],{"class":40},[34,71401,71402],{"class":36,"line":18308},[34,71403,1475],{"emptyLinePlaceholder":1474},[34,71405,71406],{"class":36,"line":18322},[34,71407,71408],{"class":161},"    \u002F\u002F 获取所有带有name属性的元素\n",[34,71410,71411,71413,71416,71418,71420,71422,71424,71427],{"class":36,"line":18342},[34,71412,12871],{"class":55},[34,71414,71415],{"class":44}," items",[34,71417,56],{"class":55},[34,71419,56035],{"class":40},[34,71421,57320],{"class":3617},[34,71423,286],{"class":40},[34,71425,71426],{"class":504},"'[name]'",[34,71428,101],{"class":40},[34,71430,71431],{"class":36,"line":18348},[34,71432,71433],{"class":161},"    \u002F\u002F 声明一个空的数组\n",[34,71435,71436,71438,71440,71442],{"class":36,"line":18359},[34,71437,12871],{"class":55},[34,71439,59334],{"class":44},[34,71441,56],{"class":55},[34,71443,53477],{"class":40},[34,71445,71446],{"class":36,"line":18382},[34,71447,71448],{"class":161},"    \u002F\u002F 1.录入模块\n",[34,71450,71451],{"class":36,"line":18404},[34,71452,71453],{"class":161},"    \u002F\u002F 1.1这是一个表单提交事件\n",[34,71455,71456,71458,71461,71463,71465,71467,71469,71472],{"class":36,"line":18409},[34,71457,12871],{"class":55},[34,71459,71460],{"class":44}," info",[34,71462,56],{"class":55},[34,71464,56035],{"class":40},[34,71466,56038],{"class":3617},[34,71468,286],{"class":40},[34,71470,71471],{"class":504},"'.info'",[34,71473,101],{"class":40},[34,71475,71476,71479,71481,71483,71486,71488,71490,71492,71494],{"class":36,"line":18415},[34,71477,71478],{"class":40},"    info.",[34,71480,59452],{"class":3617},[34,71482,286],{"class":40},[34,71484,71485],{"class":504},"'submit'",[34,71487,48],{"class":40},[34,71489,56088],{"class":55},[34,71491,3313],{"class":40},[34,71493,1887],{"class":51},[34,71495,14090],{"class":40},[34,71497,71498],{"class":36,"line":18429},[34,71499,71500],{"class":161},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[34,71502,71503,71506,71509],{"class":36,"line":18442},[34,71504,71505],{"class":40},"      e.",[34,71507,71508],{"class":3617},"preventDefault",[34,71510,3630],{"class":40},[34,71512,71513],{"class":36,"line":18447},[34,71514,61651],{"class":161},[34,71516,71517],{"class":36,"line":18461},[34,71518,1475],{"emptyLinePlaceholder":1474},[34,71520,71521],{"class":36,"line":18466},[34,71522,71523],{"class":161},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[34,71525,71526],{"class":36,"line":18472},[34,71527,71528],{"class":161},"      \u002F\u002F 先遍历循环\n",[34,71530,71531,71533,71535,71537,71539,71541,71543,71545,71547,71550,71552,71554,71556],{"class":36,"line":18477},[34,71532,53923],{"class":55},[34,71534,3313],{"class":40},[34,71536,53486],{"class":55},[34,71538,11088],{"class":40},[34,71540,221],{"class":55},[34,71542,98],{"class":44},[34,71544,11095],{"class":40},[34,71546,2701],{"class":55},[34,71548,71549],{"class":40}," items.",[34,71551,53607],{"class":44},[34,71553,4867],{"class":40},[34,71555,3946],{"class":55},[34,71557,14090],{"class":40},[34,71559,71560,71562,71565,71567,71570],{"class":36,"line":18491},[34,71561,4150],{"class":55},[34,71563,71564],{"class":40}," (items[i].value ",[34,71566,56125],{"class":55},[34,71568,71569],{"class":504}," ''",[34,71571,14090],{"class":40},[34,71573,71574,71577,71580,71582,71585],{"class":36,"line":18496},[34,71575,71576],{"class":55},"          return",[34,71578,71579],{"class":3617}," alert",[34,71581,286],{"class":40},[34,71583,71584],{"class":504},"'输入内容不能为空'",[34,71586,101],{"class":40},[34,71588,71589],{"class":36,"line":18501},[34,71590,4182],{"class":40},[34,71592,71593],{"class":36,"line":18515},[34,71594,54037],{"class":40},[34,71596,71597],{"class":36,"line":18527},[34,71598,1475],{"emptyLinePlaceholder":1474},[34,71600,71601],{"class":36,"line":18532},[34,71602,71603],{"class":161},"      \u002F\u002F 创建新的对象\n",[34,71605,71606,71608,71611,71613],{"class":36,"line":18545},[34,71607,59867],{"class":55},[34,71609,71610],{"class":44}," obj",[34,71612,56],{"class":55},[34,71614,17218],{"class":40},[34,71616,71617,71620,71622,71624,71626],{"class":36,"line":18550},[34,71618,71619],{"class":40},"        stuID: arr.",[34,71621,53607],{"class":44},[34,71623,47205],{"class":55},[34,71625,26764],{"class":44},[34,71627,33108],{"class":40},[34,71629,71630],{"class":36,"line":18555},[34,71631,71632],{"class":40},"        uname: uname.value,\n",[34,71634,71635],{"class":36,"line":18560},[34,71636,71637],{"class":40},"        age: age.value,\n",[34,71639,71640],{"class":36,"line":18573},[34,71641,71642],{"class":40},"        gender: gender.value,\n",[34,71644,71645],{"class":36,"line":18578},[34,71646,71647],{"class":40},"        salary: salary.value,\n",[34,71649,71650],{"class":36,"line":34274},[34,71651,71652],{"class":40},"        city: city.value\n",[34,71654,71655],{"class":36,"line":34280},[34,71656,54037],{"class":40},[34,71658,71659],{"class":36,"line":34286},[34,71660,71661],{"class":161},"      \u002F\u002F console.log(obj);\n",[34,71663,71664],{"class":36,"line":34292},[34,71665,71666],{"class":161},"      \u002F\u002F 追加到数组里面\n",[34,71668,71669,71671,71673],{"class":36,"line":34298},[34,71670,59646],{"class":40},[34,71672,53523],{"class":3617},[34,71674,71675],{"class":40},"(obj)\n",[34,71677,71678],{"class":36,"line":34309},[34,71679,71680],{"class":161},"      \u002F\u002F console.log(arr);\n",[34,71682,71683],{"class":36,"line":34315},[34,71684,71685],{"class":161},"      \u002F\u002F 清空表单  reset重置表单\n",[34,71687,71688,71691,71693,71696],{"class":36,"line":34335},[34,71689,71690],{"class":44},"      this",[34,71692,2353],{"class":40},[34,71694,71695],{"class":3617},"reset",[34,71697,3630],{"class":40},[34,71699,71700],{"class":36,"line":34341},[34,71701,71702],{"class":161},"      \u002F\u002F 调用渲染函数\n",[34,71704,71705,71708],{"class":36,"line":34352},[34,71706,71707],{"class":3617},"      render",[34,71709,3630],{"class":40},[34,71711,71712],{"class":36,"line":34358},[34,71713,35102],{"class":40},[34,71715,71716],{"class":36,"line":34364},[34,71717,71718],{"class":161},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[34,71720,71721,71724,71727],{"class":36,"line":34370},[34,71722,71723],{"class":55},"    function",[34,71725,71726],{"class":3617}," render",[34,71728,12503],{"class":40},[34,71730,71731],{"class":36,"line":34376},[34,71732,71733],{"class":161},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[34,71735,71736,71739,71741],{"class":36,"line":34382},[34,71737,71738],{"class":40},"      tbody.innerHTML ",[34,71740,221],{"class":55},[34,71742,71743],{"class":504}," ''\n",[34,71745,71746],{"class":36,"line":34388},[34,71747,71748],{"class":161},"      \u002F\u002F 遍历数组\n",[34,71750,71751,71753,71755,71757,71759,71761,71763,71765,71767,71769,71771,71773,71775],{"class":36,"line":34394},[34,71752,53923],{"class":55},[34,71754,3313],{"class":40},[34,71756,53486],{"class":55},[34,71758,11088],{"class":40},[34,71760,221],{"class":55},[34,71762,98],{"class":44},[34,71764,11095],{"class":40},[34,71766,2701],{"class":55},[34,71768,53604],{"class":40},[34,71770,53607],{"class":44},[34,71772,4867],{"class":40},[34,71774,3946],{"class":55},[34,71776,14090],{"class":40},[34,71778,71779,71781,71784,71786,71788,71791,71793,71796],{"class":36,"line":34414},[34,71780,62909],{"class":55},[34,71782,71783],{"class":44}," tr",[34,71785,56],{"class":55},[34,71787,56035],{"class":40},[34,71789,71790],{"class":3617},"createElement",[34,71792,286],{"class":40},[34,71794,71795],{"class":504},"'tr'",[34,71797,101],{"class":40},[34,71799,71800,71803,71805],{"class":36,"line":34420},[34,71801,71802],{"class":40},"        tr.innerHTML ",[34,71804,221],{"class":55},[34,71806,71807],{"class":504}," `\n",[34,71809,71810,71813,71815,71817,71819,71822,71825],{"class":36,"line":34436},[34,71811,71812],{"class":504},"        \u003Ctd>${",[34,71814,5533],{"class":40},[34,71816,2681],{"class":504},[34,71818,2239],{"class":40},[34,71820,71821],{"class":504},"].",[34,71823,71824],{"class":40},"stuID",[34,71826,71827],{"class":504},"}\u003C\u002Ftd>\n",[34,71829,71830,71833,71835,71837,71839,71841,71844],{"class":36,"line":34442},[34,71831,71832],{"class":504},"          \u003Ctd>${",[34,71834,5533],{"class":40},[34,71836,2681],{"class":504},[34,71838,2239],{"class":40},[34,71840,71821],{"class":504},[34,71842,71843],{"class":40},"uname",[34,71845,71827],{"class":504},[34,71847,71848,71850,71852,71854,71856,71858,71861],{"class":36,"line":34456},[34,71849,71832],{"class":504},[34,71851,5533],{"class":40},[34,71853,2681],{"class":504},[34,71855,2239],{"class":40},[34,71857,71821],{"class":504},[34,71859,71860],{"class":40},"age",[34,71862,71827],{"class":504},[34,71864,71865,71867,71869,71871,71873,71875,71878],{"class":36,"line":34462},[34,71866,71832],{"class":504},[34,71868,5533],{"class":40},[34,71870,2681],{"class":504},[34,71872,2239],{"class":40},[34,71874,71821],{"class":504},[34,71876,71877],{"class":40},"gender",[34,71879,71827],{"class":504},[34,71881,71882,71884,71886,71888,71890,71892,71895],{"class":36,"line":34477},[34,71883,71832],{"class":504},[34,71885,5533],{"class":40},[34,71887,2681],{"class":504},[34,71889,2239],{"class":40},[34,71891,71821],{"class":504},[34,71893,71894],{"class":40},"salary",[34,71896,71827],{"class":504},[34,71898,71899,71901,71903,71905,71907,71909,71912],{"class":36,"line":34483},[34,71900,71832],{"class":504},[34,71902,5533],{"class":40},[34,71904,2681],{"class":504},[34,71906,2239],{"class":40},[34,71908,71821],{"class":504},[34,71910,71911],{"class":40},"city",[34,71913,71827],{"class":504},[34,71915,71916],{"class":36,"line":34492},[34,71917,71232],{"class":504},[34,71919,71920,71923,71925],{"class":36,"line":34498},[34,71921,71922],{"class":504},"            \u003Ca href=\"javascript:\" data-id=${",[34,71924,2239],{"class":40},[34,71926,71927],{"class":504},"}>删除\u003C\u002Fa>\n",[34,71929,71930],{"class":36,"line":34507},[34,71931,71932],{"class":504},"          \u003C\u002Ftd> \n",[34,71934,71935],{"class":36,"line":34513},[34,71936,71937],{"class":504},"          `\n",[34,71939,71940],{"class":36,"line":34519},[34,71941,71942],{"class":161},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[34,71944,71945,71948,71951],{"class":36,"line":34528},[34,71946,71947],{"class":40},"        tbody.",[34,71949,71950],{"class":3617},"appendChild",[34,71952,71953],{"class":40},"(tr)\n",[34,71955,71956],{"class":36,"line":34534},[34,71957,54037],{"class":40},[34,71959,71960],{"class":36,"line":34545},[34,71961,3841],{"class":40},[34,71963,71964],{"class":36,"line":34551},[34,71965,1475],{"emptyLinePlaceholder":1474},[34,71967,71968],{"class":36,"line":34570},[34,71969,71970],{"class":161},"    \u002F\u002F 3.删除委托\n",[34,71972,71973],{"class":36,"line":34576},[34,71974,71975],{"class":161},"    \u002F\u002F 3.1 事件委托 tbody\n",[34,71977,71978,71981,71983,71985,71987,71989,71991,71993,71995],{"class":36,"line":34587},[34,71979,71980],{"class":40},"    tbody.",[34,71982,59452],{"class":3617},[34,71984,286],{"class":40},[34,71986,59457],{"class":504},[34,71988,48],{"class":40},[34,71990,56088],{"class":55},[34,71992,3313],{"class":40},[34,71994,1887],{"class":51},[34,71996,14090],{"class":40},[34,71998,71999,72001,72003,72005,72007],{"class":36,"line":34593},[34,72000,56119],{"class":55},[34,72002,68673],{"class":40},[34,72004,56125],{"class":55},[34,72006,69895],{"class":504},[34,72008,14090],{"class":40},[34,72010,72011],{"class":36,"line":34613},[34,72012,72013],{"class":161},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[34,72015,72016],{"class":36,"line":34629},[34,72017,72018],{"class":161},"        \u002F\u002F console.log(e.target.dataset.id);\n",[34,72020,72021],{"class":36,"line":34635},[34,72022,72023],{"class":161},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[34,72025,72026,72029,72031,72034,72036],{"class":36,"line":34649},[34,72027,72028],{"class":40},"        arr.",[34,72030,59649],{"class":3617},[34,72032,72033],{"class":40},"(e.target.dataset.id, ",[34,72035,394],{"class":44},[34,72037,101],{"class":40},[34,72039,72040],{"class":36,"line":34655},[34,72041,72042],{"class":161},"        \u002F\u002F 重新渲染一次\n",[34,72044,72045,72048],{"class":36,"line":34661},[34,72046,72047],{"class":3617},"        render",[34,72049,3630],{"class":40},[34,72051,72052],{"class":36,"line":34672},[34,72053,54037],{"class":40},[34,72055,72056],{"class":36,"line":34678},[34,72057,35102],{"class":40},[34,72059,72060,72062,72064],{"class":36,"line":34684},[34,72061,54056],{"class":40},[34,72063,53452],{"class":52939},[34,72065,52946],{"class":40},[34,72067,72068],{"class":36,"line":34694},[34,72069,1475],{"emptyLinePlaceholder":1474},[34,72071,72072,72074,72076],{"class":36,"line":34700},[34,72073,53424],{"class":40},[34,72075,53439],{"class":52939},[34,72077,52946],{"class":40},[34,72079,72080],{"class":36,"line":34711},[34,72081,1475],{"emptyLinePlaceholder":1474},[34,72083,72084,72086,72088],{"class":36,"line":34717},[34,72085,53424],{"class":40},[34,72087,52274],{"class":52939},[34,72089,52946],{"class":40},[103,72091,72092],{},"样式：",[24,72094,72098],{"className":72095,"code":72096,"language":72097,"meta":29,"style":29},"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",[31,72099,72100,72105,72115,72124,72128,72132,72137,72147,72152,72156,72161,72171,72176,72185,72189,72193,72198,72203,72213,72223,72228,72232,72237,72246,72256,72261,72271,72281,72285,72290,72298,72302,72307,72312,72317,72325,72334,72338,72343,72352,72356,72361,72370,72374,72379,72388,72397,72405,72409,72414,72423,72433,72442,72452,72458,72467,72477,72487,72491,72496,72505,72513,72523,72531,72540,72549,72559,72567,72571,72576,72585],{"__ignoreMap":29},[34,72101,72102],{"class":36,"line":37},[34,72103,72104],{"class":40},"* {\n",[34,72106,72107,72110,72112],{"class":36,"line":165},[34,72108,72109],{"class":52939},"  margin",[34,72111,53076],{"class":40},[34,72113,72114],{"class":504},"0;\n",[34,72116,72117,72120,72122],{"class":36,"line":171},[34,72118,72119],{"class":504},"  padding",[34,72121,53076],{"class":40},[34,72123,72114],{"class":504},[34,72125,72126],{"class":36,"line":182},[34,72127,3223],{"class":40},[34,72129,72130],{"class":36,"line":188},[34,72131,1475],{"emptyLinePlaceholder":1474},[34,72133,72134],{"class":36,"line":518},[34,72135,72136],{"class":504},"a {\n",[34,72138,72139,72142,72144],{"class":36,"line":524},[34,72140,72141],{"class":52939},"  text-decoration",[34,72143,53076],{"class":40},[34,72145,72146],{"class":504},"none;\n",[34,72148,72149],{"class":36,"line":530},[34,72150,72151],{"class":504},"  color:#721c24;\n",[34,72153,72154],{"class":36,"line":624},[34,72155,3223],{"class":40},[34,72157,72158],{"class":36,"line":630},[34,72159,72160],{"class":504},"h1 {\n",[34,72162,72163,72166,72168],{"class":36,"line":636},[34,72164,72165],{"class":52939},"  text-align",[34,72167,53076],{"class":40},[34,72169,72170],{"class":504},"center;\n",[34,72172,72173],{"class":36,"line":1513},[34,72174,72175],{"class":504},"  color:#333;\n",[34,72177,72178,72180,72182],{"class":36,"line":1519},[34,72179,72109],{"class":52939},[34,72181,53076],{"class":40},[34,72183,72184],{"class":504},"20px 0;\n",[34,72186,72187],{"class":36,"line":3283},[34,72188,4327],{"class":40},[34,72190,72191],{"class":36,"line":3297},[34,72192,3223],{"class":40},[34,72194,72195],{"class":36,"line":3302},[34,72196,72197],{"class":504},"table {\n",[34,72199,72200],{"class":36,"line":3308},[34,72201,72202],{"class":504},"  margin:0 auto;\n",[34,72204,72205,72208,72210],{"class":36,"line":3328},[34,72206,72207],{"class":52939},"  width",[34,72209,53076],{"class":40},[34,72211,72212],{"class":504},"800px;\n",[34,72214,72215,72218,72220],{"class":36,"line":3333},[34,72216,72217],{"class":52939},"  border-collapse",[34,72219,53076],{"class":40},[34,72221,72222],{"class":504},"collapse;\n",[34,72224,72225],{"class":36,"line":3347},[34,72226,72227],{"class":504},"  color:#004085;\n",[34,72229,72230],{"class":36,"line":3352},[34,72231,3223],{"class":40},[34,72233,72234],{"class":36,"line":3381},[34,72235,72236],{"class":504},"th {\n",[34,72238,72239,72241,72243],{"class":36,"line":3386},[34,72240,72119],{"class":52939},[34,72242,53076],{"class":40},[34,72244,72245],{"class":504},"10px;\n",[34,72247,72248,72251,72253],{"class":36,"line":3403},[34,72249,72250],{"class":52939},"  background",[34,72252,53076],{"class":40},[34,72254,72255],{"class":161},"#cfe5ff;\n",[34,72257,72258],{"class":36,"line":3408},[34,72259,72260],{"class":40},"  \n",[34,72262,72263,72266,72268],{"class":36,"line":3413},[34,72264,72265],{"class":52939},"  font-size",[34,72267,53076],{"class":40},[34,72269,72270],{"class":504},"20px;\n",[34,72272,72273,72276,72278],{"class":36,"line":3418},[34,72274,72275],{"class":52939},"  font-weight",[34,72277,53076],{"class":40},[34,72279,72280],{"class":504},"400;\n",[34,72282,72283],{"class":36,"line":3432},[34,72284,3223],{"class":40},[34,72286,72287],{"class":36,"line":3437},[34,72288,72289],{"class":504},"td,th {\n",[34,72291,72292,72295],{"class":36,"line":4230},[34,72293,72294],{"class":504},"  border:1px solid",[34,72296,72297],{"class":161}," #b8daff;\n",[34,72299,72300],{"class":36,"line":4244},[34,72301,3223],{"class":40},[34,72303,72304],{"class":36,"line":4252},[34,72305,72306],{"class":504},"td {\n",[34,72308,72309],{"class":36,"line":4257},[34,72310,72311],{"class":504},"  padding:10px;\n",[34,72313,72314],{"class":36,"line":4263},[34,72315,72316],{"class":504},"  color:#666;\n",[34,72318,72319,72321,72323],{"class":36,"line":4269},[34,72320,72165],{"class":52939},[34,72322,53076],{"class":40},[34,72324,72170],{"class":504},[34,72326,72327,72329,72331],{"class":36,"line":4274},[34,72328,72265],{"class":52939},[34,72330,53076],{"class":40},[34,72332,72333],{"class":504},"16px;\n",[34,72335,72336],{"class":36,"line":9598},[34,72337,3223],{"class":40},[34,72339,72340],{"class":36,"line":9622},[34,72341,72342],{"class":504},"tbody tr {\n",[34,72344,72345,72347,72349],{"class":36,"line":9627},[34,72346,72250],{"class":52939},[34,72348,53076],{"class":40},[34,72350,72351],{"class":161},"#fff;\n",[34,72353,72354],{"class":36,"line":9633},[34,72355,3223],{"class":40},[34,72357,72358],{"class":36,"line":9660},[34,72359,72360],{"class":504},"tbody tr:hover {\n",[34,72362,72363,72365,72367],{"class":36,"line":9665},[34,72364,72250],{"class":52939},[34,72366,53076],{"class":40},[34,72368,72369],{"class":161},"#e1ecf8;\n",[34,72371,72372],{"class":36,"line":9671},[34,72373,3223],{"class":40},[34,72375,72376],{"class":36,"line":9683},[34,72377,72378],{"class":504},".info {\n",[34,72380,72381,72383,72385],{"class":36,"line":9695},[34,72382,72207],{"class":52939},[34,72384,53076],{"class":40},[34,72386,72387],{"class":504},"900px;\n",[34,72389,72390,72392,72394],{"class":36,"line":9707},[34,72391,72109],{"class":52939},[34,72393,53076],{"class":40},[34,72395,72396],{"class":504},"50px auto;\n",[34,72398,72399,72401,72403],{"class":36,"line":11366},[34,72400,72165],{"class":52939},[34,72402,53076],{"class":40},[34,72404,72170],{"class":504},[34,72406,72407],{"class":36,"line":11391},[34,72408,3223],{"class":40},[34,72410,72411],{"class":36,"line":11414},[34,72412,72413],{"class":504},".info  input, .info select {\n",[34,72415,72416,72418,72420],{"class":36,"line":11438},[34,72417,72207],{"class":52939},[34,72419,53076],{"class":40},[34,72421,72422],{"class":504},"80px;\n",[34,72424,72425,72428,72430],{"class":36,"line":11443},[34,72426,72427],{"class":52939},"  height",[34,72429,53076],{"class":40},[34,72431,72432],{"class":504},"27px;\n",[34,72434,72435,72438,72440],{"class":36,"line":11448},[34,72436,72437],{"class":52939},"  outline",[34,72439,53076],{"class":40},[34,72441,72146],{"class":504},[34,72443,72444,72447,72449],{"class":36,"line":11453},[34,72445,72446],{"class":52939},"  border-radius",[34,72448,53076],{"class":40},[34,72450,72451],{"class":504},"5px;\n",[34,72453,72454,72456],{"class":36,"line":11462},[34,72455,72294],{"class":504},[34,72457,72297],{"class":161},[34,72459,72460,72463,72465],{"class":36,"line":11467},[34,72461,72462],{"class":52939},"  padding-left",[34,72464,53076],{"class":40},[34,72466,72451],{"class":504},[34,72468,72469,72472,72474],{"class":36,"line":11473},[34,72470,72471],{"class":52939},"  box-sizing",[34,72473,53076],{"class":40},[34,72475,72476],{"class":504},"border-box;\n",[34,72478,72479,72482,72484],{"class":36,"line":11494},[34,72480,72481],{"class":52939},"  margin-right",[34,72483,53076],{"class":40},[34,72485,72486],{"class":504},"15px;\n",[34,72488,72489],{"class":36,"line":11500},[34,72490,3223],{"class":40},[34,72492,72493],{"class":36,"line":11514},[34,72494,72495],{"class":504},".info button {\n",[34,72497,72498,72500,72502],{"class":36,"line":11520},[34,72499,72207],{"class":52939},[34,72501,53076],{"class":40},[34,72503,72504],{"class":504},"60px;\n",[34,72506,72507,72509,72511],{"class":36,"line":11547},[34,72508,72427],{"class":52939},[34,72510,53076],{"class":40},[34,72512,72432],{"class":504},[34,72514,72515,72518,72520],{"class":36,"line":11556},[34,72516,72517],{"class":52939},"  background-color",[34,72519,53076],{"class":40},[34,72521,72522],{"class":161},"#004085;\n",[34,72524,72525,72527,72529],{"class":36,"line":11562},[34,72526,72437],{"class":52939},[34,72528,53076],{"class":40},[34,72530,72146],{"class":504},[34,72532,72533,72536,72538],{"class":36,"line":11570},[34,72534,72535],{"class":52939},"  border",[34,72537,53076],{"class":40},[34,72539,72114],{"class":504},[34,72541,72542,72545,72547],{"class":36,"line":11575},[34,72543,72544],{"class":52939},"  color",[34,72546,53076],{"class":40},[34,72548,72351],{"class":161},[34,72550,72551,72554,72556],{"class":36,"line":18250},[34,72552,72553],{"class":52939},"  cursor",[34,72555,53076],{"class":40},[34,72557,72558],{"class":504},"pointer;\n",[34,72560,72561,72563,72565],{"class":36,"line":18256},[34,72562,72446],{"class":52939},[34,72564,53076],{"class":40},[34,72566,72451],{"class":504},[34,72568,72569],{"class":36,"line":18279},[34,72570,3223],{"class":40},[34,72572,72573],{"class":36,"line":18285},[34,72574,72575],{"class":504},".info .age {\n",[34,72577,72578,72580,72582],{"class":36,"line":18308},[34,72579,72207],{"class":52939},[34,72581,53076],{"class":40},[34,72583,72584],{"class":504},"50px;\n",[34,72586,72587],{"class":36,"line":18322},[34,72588,3223],{"class":40},[103,72590,72591],{},"思路：",[103,72593,72594],{},[109,72595],{"alt":29,"src":72596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[103,72598,72599],{},[109,72600],{"alt":29,"src":72601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[103,72603,72604],{},[109,72605],{"alt":29,"src":72606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[19,72608,72610],{"id":72609},"_3315-重绘回流","3.3.15 重绘回流",[103,72612,72613],{},[109,72614],{"alt":29,"src":72615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[103,72617,72618],{},[109,72619],{"alt":29,"src":72620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[103,72622,72623],{},[109,72624],{"alt":29,"src":72625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72627,72629],{"id":72628},"_34-bom","3.4 BOM",[103,72631,72632],{},[109,72633],{"alt":29,"src":72634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[103,72636,72637],{},"平时写的document省略了window而已，实际上是window.document",[103,72639,72640],{},"函数也是这样，调用的时候实际为window.fn()",[103,72642,72643],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[103,72645,72646],{},"window大部分情况下可以省略",[19,72648,72650],{"id":72649},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[103,72652,72653],{},"只执行一次",[103,72655,72656],{},[109,72657],{"alt":29,"src":72658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[103,72660,72661],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[103,72663,72664],{},[109,72665],{"alt":29,"src":72666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[19,72668,72670],{"id":72669},"_342-js执行机制","3.4.2 JS执行机制",[103,72672,72673],{},[109,72674],{"alt":29,"src":72675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[103,72677,72678],{},"两个的结果都是1111 3333 2222",[103,72680,72681],{},[109,72682],{"alt":29,"src":72683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[103,72685,72686],{},[109,72687],{"alt":29,"src":72688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[103,72690,72691],{},[109,72692],{"alt":29,"src":72693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[103,72695,72696],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[103,72698,72699],{},"工作流程：",[103,72701,72702],{},[109,72703],{"alt":29,"src":72704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[103,72706,72707],{},[109,72708],{"alt":29,"src":72709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[103,72711,72712],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[103,72714,72715],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[19,72717,72719],{"id":72718},"_343-location对象","3.4.3 location对象",[103,72721,72722],{},"location对象属于window这个全局对象下的，可以 省略window",[103,72724,72725],{},[109,72726],{"alt":29,"src":72727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[103,72729,72730],{},"href可以跳转页面",[1772,72732,72733],{},[1775,72734,72735],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[103,72737,72738],{},"search得到提交信息之后网站后边的地址",[103,72740,72741],{},[109,72742],{"alt":29,"src":72743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[103,72745,72746],{},[109,72747],{"alt":29,"src":72748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[1772,72750,72751],{"start":165},[1775,72752,72753],{},"hash:这个获取单页面应用#后边的地址",[103,72755,72756],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[103,72758,72759],{},[109,72760],{"alt":29,"src":72761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[24,72763,72765],{"className":54706,"code":72764,"language":54708,"meta":29,"style":29},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[31,72766,72767,72787,72807],{"__ignoreMap":29},[34,72768,72769,72771,72773,72775,72777,72780,72783,72785],{"class":36,"line":37},[34,72770,53783],{"class":40},[34,72772,236],{"class":52939},[34,72774,62696],{"class":3617},[34,72776,221],{"class":40},[34,72778,72779],{"class":504},"\"#\u002Fmy\"",[34,72781,72782],{"class":40},">我的\u003C\u002F",[34,72784,236],{"class":52939},[34,72786,52946],{"class":40},[34,72788,72789,72791,72793,72795,72797,72800,72803,72805],{"class":36,"line":165},[34,72790,53783],{"class":40},[34,72792,236],{"class":52939},[34,72794,62696],{"class":3617},[34,72796,221],{"class":40},[34,72798,72799],{"class":504},"\"#\u002Ffriend\"",[34,72801,72802],{"class":40},">关注\u003C\u002F",[34,72804,236],{"class":52939},[34,72806,52946],{"class":40},[34,72808,72809,72811,72813,72815,72817,72820,72823,72825],{"class":36,"line":171},[34,72810,53783],{"class":40},[34,72812,236],{"class":52939},[34,72814,62696],{"class":3617},[34,72816,221],{"class":40},[34,72818,72819],{"class":504},"\"#\u002Fdownload\"",[34,72821,72822],{"class":40},">下载\u003C\u002F",[34,72824,236],{"class":52939},[34,72826,52946],{"class":40},[103,72828,72829],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[1772,72831,72832],{"start":171},[1775,72833,72834,72835,72837,72838,72840],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55355,72836],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55355,72839],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[19,72842,72844],{"id":72843},"_345-navigator对象","3.4.5 navigator对象",[103,72846,72847],{},[109,72848],{"alt":29,"src":72849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[24,72851,72855],{"className":72852,"code":72853,"language":72854,"meta":29,"style":29},"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",[31,72856,72857,72862,72873,72885,72890,72941,72982,72987,73000,73012,73017],{"__ignoreMap":29},[34,72858,72859],{"class":36,"line":37},[34,72860,72861],{"class":161},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[34,72863,72864,72866,72868,72870],{"class":36,"line":165},[34,72865,2034],{"class":55},[34,72867,286],{"class":40},[34,72869,56088],{"class":55},[34,72871,72872],{"class":40}," () { \n",[34,72874,72875,72877,72880,72882],{"class":36,"line":171},[34,72876,8442],{"class":55},[34,72878,72879],{"class":44}," userAgent",[34,72881,56],{"class":55},[34,72883,72884],{"class":40}," navigator.userAgent \n",[34,72886,72887],{"class":36,"line":182},[34,72888,72889],{"class":161},"\u002F\u002F 验证是否为Android或iPhone \n",[34,72891,72892,72894,72897,72899,72902,72905,72907,72909,72912,72914,72917,72921,72923,72925,72927,72930,72932,72934,72936,72938],{"class":36,"line":188},[34,72893,8442],{"class":55},[34,72895,72896],{"class":44}," android",[34,72898,56],{"class":55},[34,72900,72901],{"class":40}," userAgent.",[34,72903,72904],{"class":3617},"match",[34,72906,286],{"class":40},[34,72908,2379],{"class":504},[34,72910,72911],{"class":49616},"(Android);",[34,72913,2777],{"class":55},[34,72915,72916],{"class":44},"[\\s",[34,72918,72920],{"class":72919},"snhLl","\\\u002F",[34,72922,2731],{"class":44},[34,72924,2277],{"class":55},[34,72926,286],{"class":49616},[34,72928,72929],{"class":44},"[\\d.]",[34,72931,2277],{"class":55},[34,72933,918],{"class":49616},[34,72935,2777],{"class":55},[34,72937,2379],{"class":504},[34,72939,72940],{"class":40},") \n",[34,72942,72943,72945,72948,72950,72952,72954,72956,72958,72961,72964,72967,72969,72971,72974,72976,72978,72980],{"class":36,"line":518},[34,72944,8442],{"class":55},[34,72946,72947],{"class":44}," iphone",[34,72949,56],{"class":55},[34,72951,72901],{"class":40},[34,72953,72904],{"class":3617},[34,72955,286],{"class":40},[34,72957,2379],{"class":504},[34,72959,72960],{"class":49616},"(iPhone",[34,72962,72963],{"class":44},"\\s",[34,72965,72966],{"class":49616},"OS)",[34,72968,72963],{"class":44},[34,72970,286],{"class":49616},[34,72972,72973],{"class":44},"[\\d_]",[34,72975,2277],{"class":55},[34,72977,918],{"class":49616},[34,72979,2379],{"class":504},[34,72981,72940],{"class":40},[34,72983,72984],{"class":36,"line":524},[34,72985,72986],{"class":161},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[34,72988,72989,72991,72994,72997],{"class":36,"line":530},[34,72990,3189],{"class":55},[34,72992,72993],{"class":40}," (android ",[34,72995,72996],{"class":55},"||",[34,72998,72999],{"class":40}," iphone) { \n",[34,73001,73002,73005,73007,73010],{"class":36,"line":624},[34,73003,73004],{"class":40},"location.href ",[34,73006,221],{"class":55},[34,73008,73009],{"class":504}," 'http:\u002F\u002Fm.itcast.cn'",[34,73011,4327],{"class":40},[34,73013,73014],{"class":36,"line":630},[34,73015,73016],{"class":40},"} \n",[34,73018,73019],{"class":36,"line":636},[34,73020,73021],{"class":40},"})()\n",[19,73023,73025],{"id":73024},"_346-histroy对象","3.4.6 histroy对象",[103,73027,73028],{},[109,73029],{"alt":29,"src":73030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[103,73032,73033],{},"浏览器地址的前进与后退!!!",[103,73035,73036],{},"history.back() 等效于 history.go(-1)",[103,73038,73039],{},"history.forward() 等效于 history.go(1)",[14,73041,73043],{"id":73042},"_35-本地存储","3.5 本地存储",[1772,73045,73046,73049,73052],{},[1775,73047,73048],{},"数据存储在用户浏览器中",[1775,73050,73051],{},"设置、读取方便、甚至页面刷新不丢失数据",[1775,73053,73054],{},"容量较大，sessionStorage和localStorage约 5M 左右",[19,73056,73058],{"id":73057},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[103,73060,73061],{},"只能存储字符串",[103,73063,73064],{},[109,73065],{"alt":29,"src":73066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[103,73068,73069],{},[109,73070],{"alt":29,"src":73071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[103,73073,73074],{},"键值对要加引号,不然就会当变量来看了",[103,73076,73077],{},"localStorage.setItem('uname', 'pink')",[103,73079,73080],{},"刷新之后信息不再丢失",[103,73082,73083],{},"操作key,value会跟着变",[103,73085,73086],{},"删除只删除键就可以,即名字",[103,73088,73077],{},[103,73090,73091],{},"改:",[103,73093,73094],{},"localStorage.setItem('uname','red')",[103,73096,73097],{},"有这个键就是改,没有这个键就是改",[103,73099,73100],{},[109,73101],{"alt":29,"src":73102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[103,73104,73105],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[103,73107,73108],{},[109,73109],{"alt":29,"src":73110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[103,73112,73113],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[19,73115,73117],{"id":73116},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[103,73119,73120],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[103,73122,73123],{},"特性:",[1772,73125,73126,73129,73132,73135],{},[1775,73127,73128],{},"生命周期为关闭浏览器窗口",[1775,73130,73131],{},"在同一个窗口(页面)下数据可以共享",[1775,73133,73134],{},"以键值对的形式存储使用",[1775,73136,73137],{},"用法跟localStorage 基本相同",[19,73139,73141],{"id":73140},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[103,73143,73144],{},"本地只能存储字符串,无法直接存储复杂数据类型",[24,73146,73148],{"className":54706,"code":73147,"language":54708,"meta":29,"style":29},"\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",[31,73149,73150,73158,73163,73168,73173,73178,73182,73187,73192],{"__ignoreMap":29},[34,73151,73152,73154,73156],{"class":36,"line":37},[34,73153,2701],{"class":40},[34,73155,53452],{"class":52939},[34,73157,52946],{"class":40},[34,73159,73160],{"class":36,"line":165},[34,73161,73162],{"class":40},"    const obj = {\n",[34,73164,73165],{"class":36,"line":171},[34,73166,73167],{"class":40},"      uname: 'pink老师',\n",[34,73169,73170],{"class":36,"line":182},[34,73171,73172],{"class":40},"      age: 18,\n",[34,73174,73175],{"class":36,"line":188},[34,73176,73177],{"class":40},"      gender: '女'\n",[34,73179,73180],{"class":36,"line":518},[34,73181,3841],{"class":40},[34,73183,73184],{"class":36,"line":524},[34,73185,73186],{"class":40},"    \u002F\u002F 存储复杂数据类型\n",[34,73188,73189],{"class":36,"line":530},[34,73190,73191],{"class":40},"    localStorage.setItem('obj', obj)\n",[34,73193,73194,73196,73198],{"class":36,"line":624},[34,73195,54056],{"class":40},[34,73197,53452],{"class":52939},[34,73199,52946],{"class":40},[103,73201,73202],{},[109,73203],{"alt":29,"src":73204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[103,73206,73207],{},"如果获取一下数据:",[103,73209,73210],{},"log(localStorage.getItem('obj'))",[103,73212,73213],{},[109,73214],{"alt":29,"src":73215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[103,73217,73218],{},"发现直接存对象是使用不了的!!!",[1353,73220,73222],{"id":73221},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[103,73224,73225],{},[109,73226],{"alt":29,"src":73227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[24,73229,73231],{"className":52272,"code":73230,"language":52274,"meta":29,"style":29},"\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",[31,73232,73233,73241,73251,73261,73270,73278,73282,73286,73312,73331,73339,73343,73348,73353],{"__ignoreMap":29},[34,73234,73235,73237,73239],{"class":36,"line":37},[34,73236,2701],{"class":40},[34,73238,53452],{"class":52939},[34,73240,52946],{"class":40},[34,73242,73243,73245,73247,73249],{"class":36,"line":165},[34,73244,12871],{"class":55},[34,73246,71610],{"class":44},[34,73248,56],{"class":55},[34,73250,17218],{"class":40},[34,73252,73253,73256,73259],{"class":36,"line":171},[34,73254,73255],{"class":40},"      uname: ",[34,73257,73258],{"class":504},"'pink老师'",[34,73260,33108],{"class":40},[34,73262,73263,73266,73268],{"class":36,"line":182},[34,73264,73265],{"class":40},"      age: ",[34,73267,2445],{"class":44},[34,73269,33108],{"class":40},[34,73271,73272,73275],{"class":36,"line":188},[34,73273,73274],{"class":40},"      gender: ",[34,73276,73277],{"class":504},"'女'\n",[34,73279,73280],{"class":36,"line":518},[34,73281,3841],{"class":40},[34,73283,73284],{"class":36,"line":524},[34,73285,73186],{"class":161},[34,73287,73288,73291,73294,73296,73299,73301,73304,73306,73309],{"class":36,"line":530},[34,73289,73290],{"class":40},"  localStorage.",[34,73292,73293],{"class":3617},"setItem",[34,73295,286],{"class":40},[34,73297,73298],{"class":504},"'obj'",[34,73300,48],{"class":40},[34,73302,73303],{"class":44},"JSON",[34,73305,2353],{"class":40},[34,73307,73308],{"class":3617},"stringify",[34,73310,73311],{"class":40},"(obj))\n",[34,73313,73314,73317,73319,73322,73325,73327,73329],{"class":36,"line":624},[34,73315,73316],{"class":40},"  console.",[34,73318,59886],{"class":3617},[34,73320,73321],{"class":40},"(localStorage.",[34,73323,73324],{"class":3617},"getItem",[34,73326,286],{"class":40},[34,73328,73298],{"class":504},[34,73330,296],{"class":40},[34,73332,73333,73335,73337],{"class":36,"line":630},[34,73334,54056],{"class":40},[34,73336,53452],{"class":52939},[34,73338,52946],{"class":40},[34,73340,73341],{"class":36,"line":636},[34,73342,72260],{"class":40},[34,73344,73345],{"class":36,"line":1513},[34,73346,73347],{"class":40},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[34,73349,73350],{"class":36,"line":1519},[34,73351,73352],{"class":40},"  类型是字符串的\n",[34,73354,73355],{"class":36,"line":3283},[34,73356,73357],{"class":40},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[1353,73359,73361],{"id":73360},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[103,73363,73364],{},[109,73365],{"alt":29,"src":73366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[103,73368,73369],{},[109,73370],{"alt":29,"src":73371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[24,73373,73375],{"className":54706,"code":73374,"language":54708,"meta":29,"style":29},"  \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",[31,73376,73377,73385,73389,73393,73397,73401,73405,73410,73415,73420,73425,73430,73435,73440,73445],{"__ignoreMap":29},[34,73378,73379,73381,73383],{"class":36,"line":37},[34,73380,53783],{"class":40},[34,73382,53452],{"class":52939},[34,73384,52946],{"class":40},[34,73386,73387],{"class":36,"line":165},[34,73388,73162],{"class":40},[34,73390,73391],{"class":36,"line":171},[34,73392,73167],{"class":40},[34,73394,73395],{"class":36,"line":182},[34,73396,73172],{"class":40},[34,73398,73399],{"class":36,"line":188},[34,73400,73177],{"class":40},[34,73402,73403],{"class":36,"line":518},[34,73404,3841],{"class":40},[34,73406,73407],{"class":36,"line":524},[34,73408,73409],{"class":40},"    \u002F\u002F 1.存储复杂数据类型\n",[34,73411,73412],{"class":36,"line":530},[34,73413,73414],{"class":40},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[34,73416,73417],{"class":36,"line":624},[34,73418,73419],{"class":40},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[34,73421,73422],{"class":36,"line":630},[34,73423,73424],{"class":40},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[34,73426,73427],{"class":36,"line":636},[34,73428,73429],{"class":40},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[34,73431,73432],{"class":36,"line":1513},[34,73433,73434],{"class":40},"    \u002F\u002F 取\n",[34,73436,73437],{"class":36,"line":1519},[34,73438,73439],{"class":40},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[34,73441,73442],{"class":36,"line":3283},[34,73443,73444],{"class":40},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[34,73446,73447,73449,73451],{"class":36,"line":3297},[34,73448,54056],{"class":40},[34,73450,53452],{"class":52939},[34,73452,52946],{"class":40},[103,73454,73455],{},[109,73456],{"alt":29,"src":73457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[19,73459,73461],{"id":73460},"_356-数组map方法","3.5.6 数组map方法",[103,73463,73464],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[103,73466,73467],{},[109,73468],{"alt":29,"src":73469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[103,73471,73472],{},[109,73473],{"alt":29,"src":73474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[103,73476,73477,73480],{},[1165,73478,73479],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[103,73482,73483],{},"map有返回值，但是forEach没有返回值",[103,73485,73486],{},"map是个方法。用的时候要加 ()",[103,73488,73489],{},"map返回的是一个数组",[19,73491,73493],{"id":73492},"_357-数组中join方法","3.5.7 数组中join方法",[103,73495,73496],{},[109,73497],{"alt":29,"src":73498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[103,73500,73501],{},"类似于python中拼接字符串一样！",[1772,73503,73504,73507,73510],{},[1775,73505,73506],{},"小括号为空则逗号分开",[1775,73508,73509],{},"小括号为空字符串 ''，则元素之间没有分隔符",[1775,73511,73512],{},"小括号用啥符号就用进行分割",[19,73514,73516],{"id":73515},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[1772,73518,73519,73522,73525,73528,73531],{},[1775,73520,73521],{},"记住本地时间获取快速方式：new Date().toDateString()",[1775,73523,73524],{},"尽量减少DOM操作，用好map+join的渲染方式",[1775,73526,73527],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[1775,73529,73530],{},"return可以实现函数的结束",[1775,73532,73533],{},"禁止跳转是 preventDefault() 不要忘记",[24,73535,73537],{"className":52272,"code":73536,"language":52274,"meta":29,"style":29},"\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",[31,73538,73539,73549,73563,73567,73575,73589,73609,73621,73629,73635,73645,73655,73659,73663,73669,73679,73691,73695,73699,73706,73718,73732,73742,73746,73750,73757,73764,73771,73783,73795,73805,73817,73821,73825,73832,73839,73851,73863,73873,73885,73915,73919,73923,73930,73942,73954,73978,73988,73998,74002,74006,74014,74025,74037,74049,74061,74078,74090,74102,74106,74110,74117,74129,74141,74153,74164,74182,74195,74207,74231,74242,74246,74250,74258,74268,74272,74276,74282,74294,74305,74315,74319,74323,74329,74351,74355,74359,74365,74371,74383,74393,74405,74435,74448,74465,74469,74473,74484,74506,74516,74520,74524,74537,74547,74559,74571,74583,74595,74605,74615,74625,74636,74649,74653,74661,74669,74673,74681,74694,74714,74747,74780,74813,74839,74857,74875,74883,74909,74927,74945,74963,74981,74999,75007,75015,75033,75041,75070,75078,75086,75094,75107,75119,75131,75143,75155,75167,75180,75192,75200,75208,75216,75221,75226,75230,75234,75238,75242,75246,75250,75255,75260,75265,75270,75278,75286,75294,75299,75304,75309,75314,75319,75324,75329,75334,75339,75344,75349,75354,75359,75364,75368,75373,75378,75388,75397,75401,75406,75415,75431,75473,75513,75552,75617,75625,75629,75634,75652,75660,75665,75670,75700,75706,75711,75724,75736,75748,75760,75772,75784,75796,75800,75810,75814,75819,75824,75828,75837,75841,75846,75851,75870,75875,75895,75899,75904,75908,75913,75931,75949,75967,75986,76005,76024,76029,76035,76056,76062,76071,76077,76083,76089,76116,76129,76134,76144,76150,76156,76162,76168,76173,76179,76185,76191,76197,76230,76235,76240,76245,76250,76256,76262,76268,76279,76284,76290,76297,76311,76317,76341,76346,76351,76357,76363,76384,76390,76403,76409,76415,76421,76427,76432,76438,76444,76450,76468,76482,76488,76496,76502,76524,76529,76534,76539,76544,76549,76558,76567,76572],{"__ignoreMap":29},[34,73540,73541,73543,73545,73547],{"class":36,"line":37},[34,73542,52936],{"class":40},[34,73544,52940],{"class":52939},[34,73546,52943],{"class":3617},[34,73548,52946],{"class":40},[34,73550,73551,73553,73555,73557,73559,73561],{"class":36,"line":165},[34,73552,2701],{"class":40},[34,73554,52274],{"class":52939},[34,73556,52955],{"class":3617},[34,73558,221],{"class":40},[34,73560,52960],{"class":504},[34,73562,52946],{"class":40},[34,73564,73565],{"class":36,"line":171},[34,73566,1475],{"emptyLinePlaceholder":1474},[34,73568,73569,73571,73573],{"class":36,"line":182},[34,73570,2701],{"class":40},[34,73572,52973],{"class":52939},[34,73574,52946],{"class":40},[34,73576,73577,73579,73581,73583,73585,73587],{"class":36,"line":188},[34,73578,53783],{"class":40},[34,73580,52983],{"class":52939},[34,73582,52986],{"class":3617},[34,73584,221],{"class":40},[34,73586,52991],{"class":504},[34,73588,52946],{"class":40},[34,73590,73591,73593,73595,73597,73599,73601,73603,73605,73607],{"class":36,"line":518},[34,73592,53783],{"class":40},[34,73594,52983],{"class":52939},[34,73596,16566],{"class":3617},[34,73598,221],{"class":40},[34,73600,53030],{"class":504},[34,73602,53010],{"class":3617},[34,73604,221],{"class":40},[34,73606,53037],{"class":504},[34,73608,52946],{"class":40},[34,73610,73611,73613,73615,73617,73619],{"class":36,"line":524},[34,73612,53783],{"class":40},[34,73614,53046],{"class":52939},[34,73616,53049],{"class":40},[34,73618,53046],{"class":52939},[34,73620,52946],{"class":40},[34,73622,73623,73625,73627],{"class":36,"line":530},[34,73624,53783],{"class":40},[34,73626,1711],{"class":52939},[34,73628,52946],{"class":40},[34,73630,73631,73633],{"class":36,"line":624},[34,73632,8053],{"class":52939},[34,73634,17218],{"class":40},[34,73636,73637,73639,73641,73643],{"class":36,"line":630},[34,73638,56334],{"class":44},[34,73640,53076],{"class":40},[34,73642,177],{"class":44},[34,73644,2952],{"class":40},[34,73646,73647,73649,73651,73653],{"class":36,"line":636},[34,73648,56345],{"class":44},[34,73650,53076],{"class":40},[34,73652,177],{"class":44},[34,73654,2952],{"class":40},[34,73656,73657],{"class":36,"line":1513},[34,73658,3841],{"class":40},[34,73660,73661],{"class":36,"line":1519},[34,73662,1475],{"emptyLinePlaceholder":1474},[34,73664,73665,73667],{"class":36,"line":3283},[34,73666,58918],{"class":52939},[34,73668,17218],{"class":40},[34,73670,73671,73673,73675,73677],{"class":36,"line":3297},[34,73672,58925],{"class":44},[34,73674,53076],{"class":40},[34,73676,53231],{"class":44},[34,73678,2952],{"class":40},[34,73680,73681,73683,73685,73687,73689],{"class":36,"line":3302},[34,73682,63716],{"class":44},[34,73684,53076],{"class":40},[34,73686,1249],{"class":44},[34,73688,53131],{"class":55},[34,73690,2952],{"class":40},[34,73692,73693],{"class":36,"line":3308},[34,73694,3841],{"class":40},[34,73696,73697],{"class":36,"line":3328},[34,73698,1475],{"emptyLinePlaceholder":1474},[34,73700,73701,73704],{"class":36,"line":3333},[34,73702,73703],{"class":3617},"    .info",[34,73705,17218],{"class":40},[34,73707,73708,73710,73712,73714,73716],{"class":36,"line":3347},[34,73709,56410],{"class":44},[34,73711,53076],{"class":40},[34,73713,53128],{"class":44},[34,73715,53131],{"class":55},[34,73717,2952],{"class":40},[34,73719,73720,73722,73724,73726,73728,73730],{"class":36,"line":3352},[34,73721,56345],{"class":44},[34,73723,53076],{"class":40},[34,73725,410],{"class":44},[34,73727,53131],{"class":55},[34,73729,53195],{"class":44},[34,73731,2952],{"class":40},[34,73733,73734,73736,73738,73740],{"class":36,"line":3381},[34,73735,58925],{"class":44},[34,73737,53076],{"class":40},[34,73739,53231],{"class":44},[34,73741,2952],{"class":40},[34,73743,73744],{"class":36,"line":3386},[34,73745,3841],{"class":40},[34,73747,73748],{"class":36,"line":3403},[34,73749,1475],{"emptyLinePlaceholder":1474},[34,73751,73752,73755],{"class":36,"line":3408},[34,73753,73754],{"class":3617},"    .uname",[34,73756,33108],{"class":40},[34,73758,73759,73762],{"class":36,"line":3413},[34,73760,73761],{"class":3617},"    .age",[34,73763,33108],{"class":40},[34,73765,73766,73769],{"class":36,"line":3418},[34,73767,73768],{"class":3617},"    .salary",[34,73770,17218],{"class":40},[34,73772,73773,73775,73777,73779,73781],{"class":36,"line":3432},[34,73774,56410],{"class":44},[34,73776,53076],{"class":40},[34,73778,451],{"class":44},[34,73780,53131],{"class":55},[34,73782,2952],{"class":40},[34,73784,73785,73787,73789,73791,73793],{"class":36,"line":3437},[34,73786,56424],{"class":44},[34,73788,53076],{"class":40},[34,73790,1249],{"class":44},[34,73792,53131],{"class":55},[34,73794,2952],{"class":40},[34,73796,73797,73799,73801,73803],{"class":36,"line":4230},[34,73798,63419],{"class":44},[34,73800,53076],{"class":40},[34,73802,56376],{"class":44},[34,73804,2952],{"class":40},[34,73806,73807,73809,73811,73813,73815],{"class":36,"line":4244},[34,73808,63389],{"class":44},[34,73810,53076],{"class":40},[34,73812,2370],{"class":44},[34,73814,53131],{"class":55},[34,73816,2952],{"class":40},[34,73818,73819],{"class":36,"line":4252},[34,73820,3841],{"class":40},[34,73822,73823],{"class":36,"line":4257},[34,73824,1475],{"emptyLinePlaceholder":1474},[34,73826,73827,73830],{"class":36,"line":4263},[34,73828,73829],{"class":3617},"    .gender",[34,73831,33108],{"class":40},[34,73833,73834,73837],{"class":36,"line":4269},[34,73835,73836],{"class":3617},"    .city",[34,73838,17218],{"class":40},[34,73840,73841,73843,73845,73847,73849],{"class":36,"line":4274},[34,73842,56410],{"class":44},[34,73844,53076],{"class":40},[34,73846,451],{"class":44},[34,73848,53131],{"class":55},[34,73850,2952],{"class":40},[34,73852,73853,73855,73857,73859,73861],{"class":36,"line":9598},[34,73854,56424],{"class":44},[34,73856,53076],{"class":40},[34,73858,2617],{"class":44},[34,73860,53131],{"class":55},[34,73862,2952],{"class":40},[34,73864,73865,73867,73869,73871],{"class":36,"line":9622},[34,73866,63419],{"class":44},[34,73868,53076],{"class":40},[34,73870,56376],{"class":44},[34,73872,2952],{"class":40},[34,73874,73875,73877,73879,73881,73883],{"class":36,"line":9627},[34,73876,63389],{"class":44},[34,73878,53076],{"class":40},[34,73880,2370],{"class":44},[34,73882,53131],{"class":55},[34,73884,2952],{"class":40},[34,73886,73887,73889,73891,73893,73895,73897,73900,73902,73904,73906,73909,73911,73913],{"class":36,"line":9633},[34,73888,63616],{"class":44},[34,73890,53076],{"class":40},[34,73892,394],{"class":44},[34,73894,53131],{"class":55},[34,73896,53160],{"class":44},[34,73898,73899],{"class":44}," rgb",[34,73901,286],{"class":40},[34,73903,3376],{"class":44},[34,73905,48],{"class":40},[34,73907,73908],{"class":44},"197",[34,73910,48],{"class":40},[34,73912,73908],{"class":44},[34,73914,4372],{"class":40},[34,73916,73917],{"class":36,"line":9660},[34,73918,3841],{"class":40},[34,73920,73921],{"class":36,"line":9665},[34,73922,1475],{"emptyLinePlaceholder":1474},[34,73924,73925,73928],{"class":36,"line":9671},[34,73926,73927],{"class":52939},"    button",[34,73929,17218],{"class":40},[34,73931,73932,73934,73936,73938,73940],{"class":36,"line":9683},[34,73933,56424],{"class":44},[34,73935,53076],{"class":40},[34,73937,2617],{"class":44},[34,73939,53131],{"class":55},[34,73941,2952],{"class":40},[34,73943,73944,73946,73948,73950,73952],{"class":36,"line":9695},[34,73945,56410],{"class":44},[34,73947,53076],{"class":40},[34,73949,2280],{"class":44},[34,73951,53131],{"class":55},[34,73953,2952],{"class":40},[34,73955,73956,73958,73960,73963,73965,73967,73969,73972,73974,73976],{"class":36,"line":9707},[34,73957,56523],{"class":44},[34,73959,53076],{"class":40},[34,73961,73962],{"class":44},"rgb",[34,73964,286],{"class":40},[34,73966,2760],{"class":44},[34,73968,48],{"class":40},[34,73970,73971],{"class":44},"187",[34,73973,48],{"class":40},[34,73975,2105],{"class":44},[34,73977,4372],{"class":40},[34,73979,73980,73982,73984,73986],{"class":36,"line":11366},[34,73981,59055],{"class":44},[34,73983,53076],{"class":40},[34,73985,62481],{"class":44},[34,73987,2952],{"class":40},[34,73989,73990,73992,73994,73996],{"class":36,"line":11391},[34,73991,63616],{"class":44},[34,73993,53076],{"class":40},[34,73995,177],{"class":44},[34,73997,2952],{"class":40},[34,73999,74000],{"class":36,"line":11414},[34,74001,3841],{"class":40},[34,74003,74004],{"class":36,"line":11438},[34,74005,1475],{"emptyLinePlaceholder":1474},[34,74007,74008,74010,74012],{"class":36,"line":11443},[34,74009,73927],{"class":52939},[34,74011,53327],{"class":52939},[34,74013,17218],{"class":40},[34,74015,74016,74018,74020,74023],{"class":36,"line":11448},[34,74017,56648],{"class":44},[34,74019,53076],{"class":40},[34,74021,74022],{"class":44},"inline-block",[34,74024,2952],{"class":40},[34,74026,74027,74029,74031,74033,74035],{"class":36,"line":11453},[34,74028,56410],{"class":44},[34,74030,53076],{"class":40},[34,74032,410],{"class":44},[34,74034,53131],{"class":55},[34,74036,2952],{"class":40},[34,74038,74039,74041,74043,74045,74047],{"class":36,"line":11462},[34,74040,56424],{"class":44},[34,74042,53076],{"class":40},[34,74044,410],{"class":44},[34,74046,53131],{"class":55},[34,74048,2952],{"class":40},[34,74050,74051,74053,74055,74057,74059],{"class":36,"line":11467},[34,74052,58998],{"class":44},[34,74054,53076],{"class":40},[34,74056,399],{"class":44},[34,74058,53131],{"class":55},[34,74060,2952],{"class":40},[34,74062,74063,74065,74067,74069,74071,74073,74076],{"class":36,"line":11473},[34,74064,63616],{"class":44},[34,74066,53076],{"class":40},[34,74068,394],{"class":44},[34,74070,53131],{"class":55},[34,74072,53160],{"class":44},[34,74074,74075],{"class":44}," #fff",[34,74077,2952],{"class":40},[34,74079,74080,74082,74084,74086,74088],{"class":36,"line":11494},[34,74081,56773],{"class":44},[34,74083,53076],{"class":40},[34,74085,224],{"class":44},[34,74087,53131],{"class":55},[34,74089,2952],{"class":40},[34,74091,74092,74094,74096,74098,74100],{"class":36,"line":11500},[34,74093,63389],{"class":44},[34,74095,53076],{"class":40},[34,74097,394],{"class":44},[34,74099,53131],{"class":55},[34,74101,2952],{"class":40},[34,74103,74104],{"class":36,"line":11514},[34,74105,3841],{"class":40},[34,74107,74108],{"class":36,"line":11520},[34,74109,1475],{"emptyLinePlaceholder":1474},[34,74111,74112,74115],{"class":36,"line":11547},[34,74113,74114],{"class":3617},"    .total",[34,74116,17218],{"class":40},[34,74118,74119,74121,74123,74125,74127],{"class":36,"line":11556},[34,74120,56410],{"class":44},[34,74122,53076],{"class":40},[34,74124,63268],{"class":44},[34,74126,53131],{"class":55},[34,74128,2952],{"class":40},[34,74130,74131,74133,74135,74137,74139],{"class":36,"line":11562},[34,74132,56424],{"class":44},[34,74134,53076],{"class":40},[34,74136,2201],{"class":44},[34,74138,53131],{"class":55},[34,74140,2952],{"class":40},[34,74142,74143,74145,74147,74149,74151],{"class":36,"line":11570},[34,74144,58998],{"class":44},[34,74146,53076],{"class":40},[34,74148,2201],{"class":44},[34,74150,53131],{"class":55},[34,74152,2952],{"class":40},[34,74154,74155,74157,74159,74162],{"class":36,"line":11575},[34,74156,58925],{"class":44},[34,74158,53076],{"class":40},[34,74160,74161],{"class":44},"right",[34,74163,2952],{"class":40},[34,74165,74166,74168,74170,74172,74174,74176,74178,74180],{"class":36,"line":18250},[34,74167,56345],{"class":44},[34,74169,53076],{"class":40},[34,74171,2201],{"class":44},[34,74173,53131],{"class":55},[34,74175,53195],{"class":44},[34,74177,3692],{"class":44},[34,74179,53131],{"class":55},[34,74181,2952],{"class":40},[34,74183,74184,74187,74189,74191,74193],{"class":36,"line":18256},[34,74185,74186],{"class":44},"      padding-right",[34,74188,53076],{"class":40},[34,74190,410],{"class":44},[34,74192,53131],{"class":55},[34,74194,2952],{"class":40},[34,74196,74197,74199,74201,74203,74205],{"class":36,"line":18279},[34,74198,56561],{"class":44},[34,74200,53076],{"class":40},[34,74202,2318],{"class":44},[34,74204,53131],{"class":55},[34,74206,2952],{"class":40},[34,74208,74209,74211,74213,74215,74217,74220,74222,74225,74227,74229],{"class":36,"line":18285},[34,74210,56523],{"class":44},[34,74212,53076],{"class":40},[34,74214,73962],{"class":44},[34,74216,286],{"class":40},[34,74218,74219],{"class":44},"237",[34,74221,48],{"class":40},[34,74223,74224],{"class":44},"235",[34,74226,48],{"class":40},[34,74228,74224],{"class":44},[34,74230,4372],{"class":40},[34,74232,74233,74236,74238,74240],{"class":36,"line":18308},[34,74234,74235],{"class":44},"      box-sizing",[34,74237,53076],{"class":40},[34,74239,62144],{"class":44},[34,74241,2952],{"class":40},[34,74243,74244],{"class":36,"line":18322},[34,74245,3841],{"class":40},[34,74247,74248],{"class":36,"line":18342},[34,74249,1475],{"emptyLinePlaceholder":1474},[34,74251,74252,74254,74256],{"class":36,"line":18348},[34,74253,74114],{"class":3617},[34,74255,53327],{"class":52939},[34,74257,17218],{"class":40},[34,74259,74260,74262,74264,74266],{"class":36,"line":18359},[34,74261,59055],{"class":44},[34,74263,53076],{"class":40},[34,74265,59060],{"class":44},[34,74267,2952],{"class":40},[34,74269,74270],{"class":36,"line":18382},[34,74271,3841],{"class":40},[34,74273,74274],{"class":36,"line":18404},[34,74275,1475],{"emptyLinePlaceholder":1474},[34,74277,74278,74280],{"class":36,"line":18409},[34,74279,66662],{"class":52939},[34,74281,17218],{"class":40},[34,74283,74284,74286,74288,74290,74292],{"class":36,"line":18415},[34,74285,56410],{"class":44},[34,74287,53076],{"class":40},[34,74289,63268],{"class":44},[34,74291,53131],{"class":55},[34,74293,2952],{"class":40},[34,74295,74296,74298,74300,74303],{"class":36,"line":18429},[34,74297,56345],{"class":44},[34,74299,53076],{"class":40},[34,74301,74302],{"class":44},"auto",[34,74304,2952],{"class":40},[34,74306,74307,74309,74311,74313],{"class":36,"line":18442},[34,74308,66669],{"class":44},[34,74310,53076],{"class":40},[34,74312,66674],{"class":44},[34,74314,2952],{"class":40},[34,74316,74317],{"class":36,"line":18447},[34,74318,3841],{"class":40},[34,74320,74321],{"class":36,"line":18461},[34,74322,1475],{"emptyLinePlaceholder":1474},[34,74324,74325,74327],{"class":36,"line":18466},[34,74326,66754],{"class":52939},[34,74328,17218],{"class":40},[34,74330,74331,74333,74335,74337,74339,74341,74343,74345,74347,74349],{"class":36,"line":18472},[34,74332,56523],{"class":44},[34,74334,53076],{"class":40},[34,74336,73962],{"class":44},[34,74338,286],{"class":40},[34,74340,74219],{"class":44},[34,74342,48],{"class":40},[34,74344,74224],{"class":44},[34,74346,48],{"class":40},[34,74348,74224],{"class":44},[34,74350,4372],{"class":40},[34,74352,74353],{"class":36,"line":18477},[34,74354,3841],{"class":40},[34,74356,74357],{"class":36,"line":18491},[34,74358,1475],{"emptyLinePlaceholder":1474},[34,74360,74361,74363],{"class":36,"line":18496},[34,74362,66754],{"class":52939},[34,74364,33108],{"class":40},[34,74366,74367,74369],{"class":36,"line":18501},[34,74368,66820],{"class":52939},[34,74370,17218],{"class":40},[34,74372,74373,74375,74377,74379,74381],{"class":36,"line":18515},[34,74374,56424],{"class":44},[34,74376,53076],{"class":40},[34,74378,2080],{"class":44},[34,74380,53131],{"class":55},[34,74382,2952],{"class":40},[34,74384,74385,74387,74389,74391],{"class":36,"line":18527},[34,74386,58925],{"class":44},[34,74388,53076],{"class":40},[34,74390,25381],{"class":44},[34,74392,2952],{"class":40},[34,74394,74395,74397,74399,74401,74403],{"class":36,"line":18532},[34,74396,56561],{"class":44},[34,74398,53076],{"class":40},[34,74400,2344],{"class":44},[34,74402,53131],{"class":55},[34,74404,2952],{"class":40},[34,74406,74407,74409,74411,74413,74415,74417,74419,74421,74424,74426,74429,74431,74433],{"class":36,"line":18545},[34,74408,63616],{"class":44},[34,74410,53076],{"class":40},[34,74412,394],{"class":44},[34,74414,53131],{"class":55},[34,74416,53160],{"class":44},[34,74418,73899],{"class":44},[34,74420,286],{"class":40},[34,74422,74423],{"class":44},"228",[34,74425,48],{"class":40},[34,74427,74428],{"class":44},"225",[34,74430,48],{"class":40},[34,74432,74428],{"class":44},[34,74434,4372],{"class":40},[34,74436,74437,74440,74442,74444,74446],{"class":36,"line":18550},[34,74438,74439],{"class":44},"      padding-left",[34,74441,53076],{"class":40},[34,74443,224],{"class":44},[34,74445,53131],{"class":55},[34,74447,2952],{"class":40},[34,74449,74450,74452,74454,74456,74459,74461,74463],{"class":36,"line":18555},[34,74451,63499],{"class":44},[34,74453,53076],{"class":40},[34,74455,29767],{"class":44},[34,74457,74458],{"class":44}," linear",[34,74460,63506],{"class":44},[34,74462,2490],{"class":55},[34,74464,2952],{"class":40},[34,74466,74467],{"class":36,"line":18560},[34,74468,3841],{"class":40},[34,74470,74471],{"class":36,"line":18573},[34,74472,1475],{"emptyLinePlaceholder":1474},[34,74474,74475,74478,74480,74482],{"class":36,"line":18578},[34,74476,74477],{"class":52939},"    tbody",[34,74479,71783],{"class":52939},[34,74481,62579],{"class":3617},[34,74483,17218],{"class":40},[34,74485,74486,74488,74490,74492,74494,74496,74498,74500,74502,74504],{"class":36,"line":34274},[34,74487,56523],{"class":44},[34,74489,53076],{"class":40},[34,74491,73962],{"class":44},[34,74493,286],{"class":40},[34,74495,74219],{"class":44},[34,74497,48],{"class":40},[34,74499,74224],{"class":44},[34,74501,48],{"class":40},[34,74503,74224],{"class":44},[34,74505,4372],{"class":40},[34,74507,74508,74510,74512,74514],{"class":36,"line":34280},[34,74509,63664],{"class":44},[34,74511,53076],{"class":40},[34,74513,63669],{"class":44},[34,74515,2952],{"class":40},[34,74517,74518],{"class":36,"line":34286},[34,74519,3841],{"class":40},[34,74521,74522],{"class":36,"line":34292},[34,74523,1475],{"emptyLinePlaceholder":1474},[34,74525,74526,74528,74530,74533,74535],{"class":36,"line":34298},[34,74527,74477],{"class":52939},[34,74529,71783],{"class":52939},[34,74531,74532],{"class":52939}," td",[34,74534,3057],{"class":52939},[34,74536,17218],{"class":40},[34,74538,74539,74541,74543,74545],{"class":36,"line":34309},[34,74540,56648],{"class":44},[34,74542,53076],{"class":40},[34,74544,62508],{"class":44},[34,74546,2952],{"class":40},[34,74548,74549,74551,74553,74555,74557],{"class":36,"line":34315},[34,74550,56410],{"class":44},[34,74552,53076],{"class":40},[34,74554,2698],{"class":44},[34,74556,53131],{"class":55},[34,74558,2952],{"class":40},[34,74560,74561,74563,74565,74567,74569],{"class":36,"line":34335},[34,74562,56424],{"class":44},[34,74564,53076],{"class":40},[34,74566,2617],{"class":44},[34,74568,53131],{"class":55},[34,74570,2952],{"class":40},[34,74572,74573,74575,74577,74579,74581],{"class":36,"line":34341},[34,74574,58998],{"class":44},[34,74576,53076],{"class":40},[34,74578,2617],{"class":44},[34,74580,53131],{"class":55},[34,74582,2952],{"class":40},[34,74584,74585,74587,74589,74591,74593],{"class":36,"line":34352},[34,74586,63716],{"class":44},[34,74588,53076],{"class":40},[34,74590,332],{"class":44},[34,74592,53131],{"class":55},[34,74594,2952],{"class":40},[34,74596,74597,74599,74601,74603],{"class":36,"line":34358},[34,74598,59055],{"class":44},[34,74600,53076],{"class":40},[34,74602,62481],{"class":44},[34,74604,2952],{"class":40},[34,74606,74607,74609,74611,74613],{"class":36,"line":34364},[34,74608,58925],{"class":44},[34,74610,53076],{"class":40},[34,74612,53231],{"class":44},[34,74614,2952],{"class":40},[34,74616,74617,74619,74621,74623],{"class":36,"line":34370},[34,74618,65609],{"class":44},[34,74620,53076],{"class":40},[34,74622,56376],{"class":44},[34,74624,2952],{"class":40},[34,74626,74627,74629,74631,74634],{"class":36,"line":34376},[34,74628,56523],{"class":44},[34,74630,53076],{"class":40},[34,74632,74633],{"class":44},"orange",[34,74635,2952],{"class":40},[34,74637,74638,74640,74642,74645,74647],{"class":36,"line":34382},[34,74639,56773],{"class":44},[34,74641,53076],{"class":40},[34,74643,74644],{"class":44},"12.5",[34,74646,53131],{"class":55},[34,74648,2952],{"class":40},[34,74650,74651],{"class":36,"line":34388},[34,74652,3841],{"class":40},[34,74654,74655,74657,74659],{"class":36,"line":34394},[34,74656,54056],{"class":40},[34,74658,1711],{"class":52939},[34,74660,52946],{"class":40},[34,74662,74663,74665,74667],{"class":36,"line":34414},[34,74664,53424],{"class":40},[34,74666,52973],{"class":52939},[34,74668,52946],{"class":40},[34,74670,74671],{"class":36,"line":34420},[34,74672,1475],{"emptyLinePlaceholder":1474},[34,74674,74675,74677,74679],{"class":36,"line":34436},[34,74676,2701],{"class":40},[34,74678,53439],{"class":52939},[34,74680,52946],{"class":40},[34,74682,74683,74685,74687,74690,74692],{"class":36,"line":34442},[34,74684,53783],{"class":40},[34,74686,14],{"class":52939},[34,74688,74689],{"class":40},">学生就业统计表\u003C\u002F",[34,74691,14],{"class":52939},[34,74693,52946],{"class":40},[34,74695,74696,74698,74700,74702,74704,74706,74708,74710,74712],{"class":36,"line":34456},[34,74697,53783],{"class":40},[34,74699,68264],{"class":52939},[34,74701,55125],{"class":3617},[34,74703,221],{"class":40},[34,74705,64303],{"class":504},[34,74707,70709],{"class":3617},[34,74709,221],{"class":40},[34,74711,33417],{"class":504},[34,74713,52946],{"class":40},[34,74715,74716,74718,74720,74722,74724,74726,74728,74730,74732,74734,74736,74739,74741,74743,74745],{"class":36,"line":34462},[34,74717,52980],{"class":40},[34,74719,55460],{"class":52939},[34,74721,55463],{"class":3617},[34,74723,221],{"class":40},[34,74725,64338],{"class":504},[34,74727,16566],{"class":3617},[34,74729,221],{"class":40},[34,74731,70735],{"class":504},[34,74733,62659],{"class":3617},[34,74735,221],{"class":40},[34,74737,74738],{"class":504},"\"姓名\"",[34,74740,55125],{"class":3617},[34,74742,221],{"class":40},[34,74744,70735],{"class":504},[34,74746,52946],{"class":40},[34,74748,74749,74751,74753,74755,74757,74759,74761,74763,74765,74767,74769,74772,74774,74776,74778],{"class":36,"line":34477},[34,74750,52980],{"class":40},[34,74752,55460],{"class":52939},[34,74754,55463],{"class":3617},[34,74756,221],{"class":40},[34,74758,64338],{"class":504},[34,74760,16566],{"class":3617},[34,74762,221],{"class":40},[34,74764,70763],{"class":504},[34,74766,62659],{"class":3617},[34,74768,221],{"class":40},[34,74770,74771],{"class":504},"\"年龄\"",[34,74773,55125],{"class":3617},[34,74775,221],{"class":40},[34,74777,70763],{"class":504},[34,74779,52946],{"class":40},[34,74781,74782,74784,74786,74788,74790,74792,74794,74796,74798,74800,74802,74805,74807,74809,74811],{"class":36,"line":34483},[34,74783,52980],{"class":40},[34,74785,55460],{"class":52939},[34,74787,55463],{"class":3617},[34,74789,221],{"class":40},[34,74791,64338],{"class":504},[34,74793,16566],{"class":3617},[34,74795,221],{"class":40},[34,74797,70865],{"class":504},[34,74799,62659],{"class":3617},[34,74801,221],{"class":40},[34,74803,74804],{"class":504},"\"薪资\"",[34,74806,55125],{"class":3617},[34,74808,221],{"class":40},[34,74810,70865],{"class":504},[34,74812,52946],{"class":40},[34,74814,74815,74817,74819,74821,74823,74825,74827,74829,74831,74833,74835,74837],{"class":36,"line":34492},[34,74816,52980],{"class":40},[34,74818,70783],{"class":52939},[34,74820,16566],{"class":3617},[34,74822,221],{"class":40},[34,74824,70790],{"class":504},[34,74826,16605],{"class":3617},[34,74828,221],{"class":40},[34,74830,9302],{"class":504},[34,74832,55125],{"class":3617},[34,74834,221],{"class":40},[34,74836,70790],{"class":504},[34,74838,52946],{"class":40},[34,74840,74841,74843,74845,74847,74849,74851,74853,74855],{"class":36,"line":34498},[34,74842,56873],{"class":40},[34,74844,70805],{"class":52939},[34,74846,68290],{"class":3617},[34,74848,221],{"class":40},[34,74850,11611],{"class":504},[34,74852,70814],{"class":40},[34,74854,70805],{"class":52939},[34,74856,52946],{"class":40},[34,74858,74859,74861,74863,74865,74867,74869,74871,74873],{"class":36,"line":34507},[34,74860,56873],{"class":40},[34,74862,70805],{"class":52939},[34,74864,68290],{"class":3617},[34,74866,221],{"class":40},[34,74868,11680],{"class":504},[34,74870,70833],{"class":40},[34,74872,70805],{"class":52939},[34,74874,52946],{"class":40},[34,74876,74877,74879,74881],{"class":36,"line":34513},[34,74878,53415],{"class":40},[34,74880,70783],{"class":52939},[34,74882,52946],{"class":40},[34,74884,74885,74887,74889,74891,74893,74895,74897,74899,74901,74903,74905,74907],{"class":36,"line":34519},[34,74886,52980],{"class":40},[34,74888,70783],{"class":52939},[34,74890,16566],{"class":3617},[34,74892,221],{"class":40},[34,74894,70887],{"class":504},[34,74896,16605],{"class":3617},[34,74898,221],{"class":40},[34,74900,9302],{"class":504},[34,74902,55125],{"class":3617},[34,74904,221],{"class":40},[34,74906,70887],{"class":504},[34,74908,52946],{"class":40},[34,74910,74911,74913,74915,74917,74919,74921,74923,74925],{"class":36,"line":34528},[34,74912,56873],{"class":40},[34,74914,70805],{"class":52939},[34,74916,68290],{"class":3617},[34,74918,221],{"class":40},[34,74920,70908],{"class":504},[34,74922,70911],{"class":40},[34,74924,70805],{"class":52939},[34,74926,52946],{"class":40},[34,74928,74929,74931,74933,74935,74937,74939,74941,74943],{"class":36,"line":34534},[34,74930,56873],{"class":40},[34,74932,70805],{"class":52939},[34,74934,68290],{"class":3617},[34,74936,221],{"class":40},[34,74938,70928],{"class":504},[34,74940,70931],{"class":40},[34,74942,70805],{"class":52939},[34,74944,52946],{"class":40},[34,74946,74947,74949,74951,74953,74955,74957,74959,74961],{"class":36,"line":34545},[34,74948,56873],{"class":40},[34,74950,70805],{"class":52939},[34,74952,68290],{"class":3617},[34,74954,221],{"class":40},[34,74956,70948],{"class":504},[34,74958,70951],{"class":40},[34,74960,70805],{"class":52939},[34,74962,52946],{"class":40},[34,74964,74965,74967,74969,74971,74973,74975,74977,74979],{"class":36,"line":34551},[34,74966,56873],{"class":40},[34,74968,70805],{"class":52939},[34,74970,68290],{"class":3617},[34,74972,221],{"class":40},[34,74974,70968],{"class":504},[34,74976,70971],{"class":40},[34,74978,70805],{"class":52939},[34,74980,52946],{"class":40},[34,74982,74983,74985,74987,74989,74991,74993,74995,74997],{"class":36,"line":34570},[34,74984,56873],{"class":40},[34,74986,70805],{"class":52939},[34,74988,68290],{"class":3617},[34,74990,221],{"class":40},[34,74992,70988],{"class":504},[34,74994,70991],{"class":40},[34,74996,70805],{"class":52939},[34,74998,52946],{"class":40},[34,75000,75001,75003,75005],{"class":36,"line":34576},[34,75002,53415],{"class":40},[34,75004,70783],{"class":52939},[34,75006,52946],{"class":40},[34,75008,75009,75011,75013],{"class":36,"line":34587},[34,75010,52980],{"class":40},[34,75012,55526],{"class":52939},[34,75014,52946],{"class":40},[34,75016,75017,75019,75021,75024,75026,75029,75031],{"class":36,"line":34593},[34,75018,56873],{"class":40},[34,75020,34],{"class":52939},[34,75022,75023],{"class":40},">+\u003C\u002F",[34,75025,34],{"class":52939},[34,75027,75028],{"class":40},">添加\u003C\u002F",[34,75030,55526],{"class":52939},[34,75032,52946],{"class":40},[34,75034,75035,75037,75039],{"class":36,"line":34613},[34,75036,54056],{"class":40},[34,75038,68264],{"class":52939},[34,75040,52946],{"class":40},[34,75042,75043,75045,75047,75049,75051,75053,75056,75058,75061,75063,75066,75068],{"class":36,"line":34629},[34,75044,53783],{"class":40},[34,75046,53250],{"class":52939},[34,75048,55125],{"class":3617},[34,75050,221],{"class":40},[34,75052,64219],{"class":504},[34,75054,75055],{"class":40},">共有数据 \u003C",[34,75057,34],{"class":52939},[34,75059,75060],{"class":40},">0\u003C\u002F",[34,75062,34],{"class":52939},[34,75064,75065],{"class":40},"> 条\u003C\u002F",[34,75067,53250],{"class":52939},[34,75069,52946],{"class":40},[34,75071,75072,75074,75076],{"class":36,"line":34635},[34,75073,53783],{"class":40},[34,75075,1948],{"class":52939},[34,75077,52946],{"class":40},[34,75079,75080,75082,75084],{"class":36,"line":34649},[34,75081,52980],{"class":40},[34,75083,1951],{"class":52939},[34,75085,52946],{"class":40},[34,75087,75088,75090,75092],{"class":36,"line":34655},[34,75089,56873],{"class":40},[34,75091,1954],{"class":52939},[34,75093,52946],{"class":40},[34,75095,75096,75098,75100,75103,75105],{"class":36,"line":34661},[34,75097,56941],{"class":40},[34,75099,1957],{"class":52939},[34,75101,75102],{"class":40},">ID\u003C\u002F",[34,75104,1957],{"class":52939},[34,75106,52946],{"class":40},[34,75108,75109,75111,75113,75115,75117],{"class":36,"line":34672},[34,75110,56941],{"class":40},[34,75112,1957],{"class":52939},[34,75114,71094],{"class":40},[34,75116,1957],{"class":52939},[34,75118,52946],{"class":40},[34,75120,75121,75123,75125,75127,75129],{"class":36,"line":34678},[34,75122,56941],{"class":40},[34,75124,1957],{"class":52939},[34,75126,71107],{"class":40},[34,75128,1957],{"class":52939},[34,75130,52946],{"class":40},[34,75132,75133,75135,75137,75139,75141],{"class":36,"line":34684},[34,75134,56941],{"class":40},[34,75136,1957],{"class":52939},[34,75138,71120],{"class":40},[34,75140,1957],{"class":52939},[34,75142,52946],{"class":40},[34,75144,75145,75147,75149,75151,75153],{"class":36,"line":34694},[34,75146,56941],{"class":40},[34,75148,1957],{"class":52939},[34,75150,71133],{"class":40},[34,75152,1957],{"class":52939},[34,75154,52946],{"class":40},[34,75156,75157,75159,75161,75163,75165],{"class":36,"line":34700},[34,75158,56941],{"class":40},[34,75160,1957],{"class":52939},[34,75162,71146],{"class":40},[34,75164,1957],{"class":52939},[34,75166,52946],{"class":40},[34,75168,75169,75171,75173,75176,75178],{"class":36,"line":34711},[34,75170,56941],{"class":40},[34,75172,1957],{"class":52939},[34,75174,75175],{"class":40},">录入时间\u003C\u002F",[34,75177,1957],{"class":52939},[34,75179,52946],{"class":40},[34,75181,75182,75184,75186,75188,75190],{"class":36,"line":34717},[34,75183,56941],{"class":40},[34,75185,1957],{"class":52939},[34,75187,71159],{"class":40},[34,75189,1957],{"class":52939},[34,75191,52946],{"class":40},[34,75193,75194,75196,75198],{"class":36,"line":34727},[34,75195,57046],{"class":40},[34,75197,1954],{"class":52939},[34,75199,52946],{"class":40},[34,75201,75202,75204,75206],{"class":36,"line":34732},[34,75203,53415],{"class":40},[34,75205,1951],{"class":52939},[34,75207,52946],{"class":40},[34,75209,75210,75212,75214],{"class":36,"line":34738},[34,75211,52980],{"class":40},[34,75213,1994],{"class":52939},[34,75215,52946],{"class":40},[34,75217,75218],{"class":36,"line":34787},[34,75219,75220],{"class":161},"      \u003C!-- \u003Ctr>\n",[34,75222,75223],{"class":36,"line":34834},[34,75224,75225],{"class":161},"        \u003Ctd>1\u003C\u002Ftd>\n",[34,75227,75228],{"class":36,"line":34839},[34,75229,75225],{"class":161},[34,75231,75232],{"class":36,"line":34845},[34,75233,75225],{"class":161},[34,75235,75236],{"class":36,"line":34864},[34,75237,75225],{"class":161},[34,75239,75240],{"class":36,"line":34870},[34,75241,75225],{"class":161},[34,75243,75244],{"class":36,"line":34890},[34,75245,75225],{"class":161},[34,75247,75248],{"class":36,"line":34896},[34,75249,75225],{"class":161},[34,75251,75252],{"class":36,"line":34902},[34,75253,75254],{"class":161},"        \u003Ctd>\n",[34,75256,75257],{"class":36,"line":34912},[34,75258,75259],{"class":161},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[34,75261,75262],{"class":36,"line":34917},[34,75263,75264],{"class":161},"        \u003C\u002Ftd>\n",[34,75266,75267],{"class":36,"line":34923},[34,75268,75269],{"class":161},"      \u003C\u002Ftr> -->\n",[34,75271,75272,75274,75276],{"class":36,"line":34939},[34,75273,53415],{"class":40},[34,75275,1994],{"class":52939},[34,75277,52946],{"class":40},[34,75279,75280,75282,75284],{"class":36,"line":34984},[34,75281,54056],{"class":40},[34,75283,1948],{"class":52939},[34,75285,52946],{"class":40},[34,75287,75288,75290,75292],{"class":36,"line":34990},[34,75289,53783],{"class":40},[34,75291,53452],{"class":52939},[34,75293,52946],{"class":40},[34,75295,75296],{"class":36,"line":34996},[34,75297,75298],{"class":161},"    \u002F\u002F const initData = [{\n",[34,75300,75301],{"class":36,"line":35002},[34,75302,75303],{"class":161},"    \u002F\u002F   unameId: 1,\n",[34,75305,75306],{"class":36,"line":35013},[34,75307,75308],{"class":161},"    \u002F\u002F   uname: '华晨宇',\n",[34,75310,75311],{"class":36,"line":35019},[34,75312,75313],{"class":161},"    \u002F\u002F   age: 22,\n",[34,75315,75316],{"class":36,"line":35025},[34,75317,75318],{"class":161},"    \u002F\u002F   salary: 12000,\n",[34,75320,75321],{"class":36,"line":35031},[34,75322,75323],{"class":161},"    \u002F\u002F   gender: '男',\n",[34,75325,75326],{"class":36,"line":35049},[34,75327,75328],{"class":161},"    \u002F\u002F   city: '北京',\n",[34,75330,75331],{"class":36,"line":35063},[34,75332,75333],{"class":161},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[34,75335,75336],{"class":36,"line":35072},[34,75337,75338],{"class":161},"    \u002F\u002F }]\n",[34,75340,75341],{"class":36,"line":35081},[34,75342,75343],{"class":161},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[34,75345,75346],{"class":36,"line":35090},[34,75347,75348],{"class":161},"    \u002F\u002F 1.渲染业务\n",[34,75350,75351],{"class":36,"line":35099},[34,75352,75353],{"class":161},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[34,75355,75356],{"class":36,"line":35105},[34,75357,75358],{"class":161},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[34,75360,75361],{"class":36,"line":35111},[34,75362,75363],{"class":161},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[34,75365,75366],{"class":36,"line":35119},[34,75367,1475],{"emptyLinePlaceholder":1474},[34,75369,75370],{"class":36,"line":35124},[34,75371,75372],{"class":161},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[34,75374,75375],{"class":36,"line":35130},[34,75376,75377],{"class":161},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[34,75379,75380,75382,75384,75386],{"class":36,"line":35141},[34,75381,12871],{"class":55},[34,75383,59334],{"class":44},[34,75385,56],{"class":55},[34,75387,53477],{"class":40},[34,75389,75390,75393,75395],{"class":36,"line":35147},[34,75391,75392],{"class":40},"    console.",[34,75394,59886],{"class":3617},[34,75396,54051],{"class":40},[34,75398,75399],{"class":36,"line":35167},[34,75400,1475],{"emptyLinePlaceholder":1474},[34,75402,75403],{"class":36,"line":35173},[34,75404,75405],{"class":161},"    \u002F\u002F 时间函数\n",[34,75407,75408,75410,75413],{"class":36,"line":35179},[34,75409,71723],{"class":55},[34,75411,75412],{"class":3617}," getTime",[34,75414,12503],{"class":40},[34,75416,75417,75419,75422,75424,75426,75429],{"class":36,"line":35185},[34,75418,59867],{"class":55},[34,75420,75421],{"class":44}," date",[34,75423,56],{"class":55},[34,75425,13227],{"class":55},[34,75427,75428],{"class":3617}," Date",[34,75430,3630],{"class":40},[34,75432,75433,75435,75437,75439,75442,75445,75447,75449,75451,75454,75457,75459,75461,75463,75465,75467,75469,75471],{"class":36,"line":35202},[34,75434,59867],{"class":55},[34,75436,17737],{"class":44},[34,75438,56],{"class":55},[34,75440,75441],{"class":40}," date.",[34,75443,75444],{"class":3617},"getHours",[34,75446,14698],{"class":40},[34,75448,2701],{"class":55},[34,75450,3692],{"class":44},[34,75452,75453],{"class":55}," ?",[34,75455,75456],{"class":504}," '0'",[34,75458,47205],{"class":55},[34,75460,75441],{"class":40},[34,75462,75444],{"class":3617},[34,75464,14698],{"class":40},[34,75466,2650],{"class":55},[34,75468,75441],{"class":40},[34,75470,75444],{"class":3617},[34,75472,3630],{"class":40},[34,75474,75475,75477,75480,75482,75484,75487,75489,75491,75493,75495,75497,75499,75501,75503,75505,75507,75509,75511],{"class":36,"line":35208},[34,75476,59867],{"class":55},[34,75478,75479],{"class":44}," m",[34,75481,56],{"class":55},[34,75483,75441],{"class":40},[34,75485,75486],{"class":3617},"getMinutes",[34,75488,14698],{"class":40},[34,75490,2701],{"class":55},[34,75492,3692],{"class":44},[34,75494,75453],{"class":55},[34,75496,75456],{"class":504},[34,75498,47205],{"class":55},[34,75500,75441],{"class":40},[34,75502,75486],{"class":3617},[34,75504,14698],{"class":40},[34,75506,2650],{"class":55},[34,75508,75441],{"class":40},[34,75510,75486],{"class":3617},[34,75512,3630],{"class":40},[34,75514,75515,75517,75519,75521,75523,75526,75528,75530,75532,75534,75536,75538,75540,75542,75544,75546,75548,75550],{"class":36,"line":35214},[34,75516,59867],{"class":55},[34,75518,10078],{"class":44},[34,75520,56],{"class":55},[34,75522,75441],{"class":40},[34,75524,75525],{"class":3617},"getSeconds",[34,75527,14698],{"class":40},[34,75529,2701],{"class":55},[34,75531,3692],{"class":44},[34,75533,75453],{"class":55},[34,75535,75456],{"class":504},[34,75537,47205],{"class":55},[34,75539,75441],{"class":40},[34,75541,75525],{"class":3617},[34,75543,14698],{"class":40},[34,75545,2650],{"class":55},[34,75547,75441],{"class":40},[34,75549,75525],{"class":3617},[34,75551,3630],{"class":40},[34,75553,75554,75556,75559,75561,75563,75566,75568,75571,75573,75576,75578,75580,75583,75585,75587,75589,75591,75593,75595,75598,75600,75603,75605,75608,75610,75612,75614],{"class":36,"line":35220},[34,75555,59867],{"class":55},[34,75557,75558],{"class":44}," str",[34,75560,56],{"class":55},[34,75562,64542],{"class":504},[34,75564,75565],{"class":40},"date",[34,75567,2353],{"class":504},[34,75569,75570],{"class":3617},"getFullYear",[34,75572,4080],{"class":504},[34,75574,75575],{"class":504},"}\u002F${",[34,75577,75565],{"class":40},[34,75579,2353],{"class":504},[34,75581,75582],{"class":3617},"getMonth",[34,75584,14698],{"class":504},[34,75586,2277],{"class":55},[34,75588,26764],{"class":44},[34,75590,75575],{"class":504},[34,75592,75565],{"class":40},[34,75594,2353],{"class":504},[34,75596,75597],{"class":3617},"getDate",[34,75599,4080],{"class":504},[34,75601,75602],{"class":504},"} ${",[34,75604,2215],{"class":40},[34,75606,75607],{"class":504},"}:${",[34,75609,2339],{"class":40},[34,75611,75607],{"class":504},[34,75613,2490],{"class":40},[34,75615,75616],{"class":504},"}`\n",[34,75618,75619,75622],{"class":36,"line":35226},[34,75620,75621],{"class":55},"      return",[34,75623,75624],{"class":40}," str\n",[34,75626,75627],{"class":36,"line":35232},[34,75628,3841],{"class":40},[34,75630,75631],{"class":36,"line":35259},[34,75632,75633],{"class":161},"    \u002F\u002F 渲染函数\n",[34,75635,75636,75638,75640,75642,75644,75646,75648,75650],{"class":36,"line":35283},[34,75637,12871],{"class":55},[34,75639,71386],{"class":44},[34,75641,56],{"class":55},[34,75643,56035],{"class":40},[34,75645,56038],{"class":3617},[34,75647,286],{"class":40},[34,75649,71397],{"class":504},[34,75651,101],{"class":40},[34,75653,75654,75656,75658],{"class":36,"line":35289},[34,75655,71723],{"class":55},[34,75657,71726],{"class":3617},[34,75659,12503],{"class":40},[34,75661,75662],{"class":36,"line":35295},[34,75663,75664],{"class":161},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[34,75666,75667],{"class":36,"line":35301},[34,75668,75669],{"class":161},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[34,75671,75672,75674,75677,75679,75681,75684,75686,75688,75690,75693,75695,75698],{"class":36,"line":35312},[34,75673,59867],{"class":55},[34,75675,75676],{"class":44}," trArr",[34,75678,56],{"class":55},[34,75680,53604],{"class":40},[34,75682,75683],{"class":3617},"map",[34,75685,286],{"class":40},[34,75687,56088],{"class":55},[34,75689,3313],{"class":40},[34,75691,75692],{"class":51},"ele",[34,75694,48],{"class":40},[34,75696,75697],{"class":51},"index",[34,75699,14090],{"class":40},[34,75701,75702,75704],{"class":36,"line":35323},[34,75703,16398],{"class":55},[34,75705,71807],{"class":504},[34,75707,75708],{"class":36,"line":35329},[34,75709,75710],{"class":504},"      \u003Ctr>\n",[34,75712,75713,75715,75717,75719,75722],{"class":36,"line":35346},[34,75714,71812],{"class":504},[34,75716,75692],{"class":40},[34,75718,2353],{"class":504},[34,75720,75721],{"class":40},"unameId",[34,75723,71827],{"class":504},[34,75725,75726,75728,75730,75732,75734],{"class":36,"line":35369},[34,75727,71812],{"class":504},[34,75729,75692],{"class":40},[34,75731,2353],{"class":504},[34,75733,71843],{"class":40},[34,75735,71827],{"class":504},[34,75737,75738,75740,75742,75744,75746],{"class":36,"line":35392},[34,75739,71812],{"class":504},[34,75741,75692],{"class":40},[34,75743,2353],{"class":504},[34,75745,71860],{"class":40},[34,75747,71827],{"class":504},[34,75749,75750,75752,75754,75756,75758],{"class":36,"line":35398},[34,75751,71812],{"class":504},[34,75753,75692],{"class":40},[34,75755,2353],{"class":504},[34,75757,71877],{"class":40},[34,75759,71827],{"class":504},[34,75761,75762,75764,75766,75768,75770],{"class":36,"line":35403},[34,75763,71812],{"class":504},[34,75765,75692],{"class":40},[34,75767,2353],{"class":504},[34,75769,71894],{"class":40},[34,75771,71827],{"class":504},[34,75773,75774,75776,75778,75780,75782],{"class":36,"line":35412},[34,75775,71812],{"class":504},[34,75777,75692],{"class":40},[34,75779,2353],{"class":504},[34,75781,71911],{"class":40},[34,75783,71827],{"class":504},[34,75785,75786,75788,75790,75792,75794],{"class":36,"line":35422},[34,75787,71812],{"class":504},[34,75789,75692],{"class":40},[34,75791,2353],{"class":504},[34,75793,4041],{"class":40},[34,75795,71827],{"class":504},[34,75797,75798],{"class":36,"line":35428},[34,75799,75254],{"class":504},[34,75801,75802,75805,75807],{"class":36,"line":35433},[34,75803,75804],{"class":504},"          \u003Ca href=\"#\" data-id=\"${",[34,75806,75697],{"class":40},[34,75808,75809],{"class":504},"}\">删除\u003C\u002Fa>\n",[34,75811,75812],{"class":36,"line":35439},[34,75813,75264],{"class":504},[34,75815,75816],{"class":36,"line":35452},[34,75817,75818],{"class":504},"      \u003C\u002Ftr>\n",[34,75820,75821],{"class":36,"line":35458},[34,75822,75823],{"class":504},"  `\n",[34,75825,75826],{"class":36,"line":35469},[34,75827,66454],{"class":40},[34,75829,75830,75832,75834],{"class":36,"line":35480},[34,75831,59883],{"class":40},[34,75833,59886],{"class":3617},[34,75835,75836],{"class":40},"(trArr)\n",[34,75838,75839],{"class":36,"line":35499},[34,75840,1475],{"emptyLinePlaceholder":1474},[34,75842,75843],{"class":36,"line":51157},[34,75844,75845],{"class":161},"      \u002F\u002F (2) 把数组转换为字符串join\n",[34,75847,75848],{"class":36,"line":51162},[34,75849,75850],{"class":161},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[34,75852,75853,75855,75857,75860,75863,75865,75868],{"class":36,"line":51171},[34,75854,71738],{"class":40},[34,75856,221],{"class":55},[34,75858,75859],{"class":40}," trArr.",[34,75861,75862],{"class":3617},"join",[34,75864,286],{"class":40},[34,75866,75867],{"class":504},"''",[34,75869,101],{"class":40},[34,75871,75872],{"class":36,"line":51180},[34,75873,75874],{"class":161},"      \u002F\u002F 显示共有几条\n",[34,75876,75877,75879,75881,75883,75886,75889,75891,75893],{"class":36,"line":51185},[34,75878,57410],{"class":40},[34,75880,56038],{"class":3617},[34,75882,286],{"class":40},[34,75884,75885],{"class":504},"'.total span'",[34,75887,75888],{"class":40},").innerHTML ",[34,75890,221],{"class":55},[34,75892,53604],{"class":40},[34,75894,57470],{"class":44},[34,75896,75897],{"class":36,"line":51190},[34,75898,3841],{"class":40},[34,75900,75901],{"class":36,"line":51195},[34,75902,75903],{"class":161},"    \u002F\u002F render()\n",[34,75905,75906],{"class":36,"line":51208},[34,75907,1475],{"emptyLinePlaceholder":1474},[34,75909,75910],{"class":36,"line":51213},[34,75911,75912],{"class":161},"    \u002F\u002F 获取DOM对象\n",[34,75914,75915,75917,75919,75921,75923,75925,75927,75929],{"class":36,"line":51222},[34,75916,12871],{"class":55},[34,75918,71460],{"class":44},[34,75920,56],{"class":55},[34,75922,56035],{"class":40},[34,75924,56038],{"class":3617},[34,75926,286],{"class":40},[34,75928,71471],{"class":504},[34,75930,101],{"class":40},[34,75932,75933,75935,75937,75939,75941,75943,75945,75947],{"class":36,"line":51231},[34,75934,12871],{"class":55},[34,75936,71287],{"class":44},[34,75938,56],{"class":55},[34,75940,56035],{"class":40},[34,75942,56038],{"class":3617},[34,75944,286],{"class":40},[34,75946,71298],{"class":504},[34,75948,101],{"class":40},[34,75950,75951,75953,75955,75957,75959,75961,75963,75965],{"class":36,"line":51248},[34,75952,12871],{"class":55},[34,75954,17335],{"class":44},[34,75956,56],{"class":55},[34,75958,56035],{"class":40},[34,75960,56038],{"class":3617},[34,75962,286],{"class":40},[34,75964,71317],{"class":504},[34,75966,101],{"class":40},[34,75968,75970,75972,75974,75976,75978,75980,75982,75984],{"class":36,"line":75969},231,[34,75971,12871],{"class":55},[34,75973,71346],{"class":44},[34,75975,56],{"class":55},[34,75977,56035],{"class":40},[34,75979,56038],{"class":3617},[34,75981,286],{"class":40},[34,75983,71357],{"class":504},[34,75985,101],{"class":40},[34,75987,75989,75991,75993,75995,75997,75999,76001,76003],{"class":36,"line":75988},232,[34,75990,12871],{"class":55},[34,75992,71326],{"class":44},[34,75994,56],{"class":55},[34,75996,56035],{"class":40},[34,75998,56038],{"class":3617},[34,76000,286],{"class":40},[34,76002,71337],{"class":504},[34,76004,101],{"class":40},[34,76006,76008,76010,76012,76014,76016,76018,76020,76022],{"class":36,"line":76007},233,[34,76009,12871],{"class":55},[34,76011,71366],{"class":44},[34,76013,56],{"class":55},[34,76015,56035],{"class":40},[34,76017,56038],{"class":3617},[34,76019,286],{"class":40},[34,76021,71377],{"class":504},[34,76023,101],{"class":40},[34,76025,76027],{"class":36,"line":76026},234,[34,76028,1475],{"emptyLinePlaceholder":1474},[34,76030,76032],{"class":36,"line":76031},235,[34,76033,76034],{"class":161},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[34,76036,76038,76040,76042,76044,76046,76048,76050,76052,76054],{"class":36,"line":76037},236,[34,76039,71478],{"class":40},[34,76041,59452],{"class":3617},[34,76043,286],{"class":40},[34,76045,71485],{"class":504},[34,76047,48],{"class":40},[34,76049,56088],{"class":55},[34,76051,3313],{"class":40},[34,76053,1887],{"class":51},[34,76055,14090],{"class":40},[34,76057,76059],{"class":36,"line":76058},237,[34,76060,76061],{"class":161},"      \u002F\u002F 禁止浏览器跳转\n",[34,76063,76065,76067,76069],{"class":36,"line":76064},238,[34,76066,71505],{"class":40},[34,76068,71508],{"class":3617},[34,76070,3630],{"class":40},[34,76072,76074],{"class":36,"line":76073},239,[34,76075,76076],{"class":161},"      \u002F\u002F 非空判断\n",[34,76078,76080],{"class":36,"line":76079},240,[34,76081,76082],{"class":161},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[34,76084,76086],{"class":36,"line":76085},241,[34,76087,76088],{"class":161},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[34,76090,76092,76094,76096,76098,76101,76103,76106,76109,76111,76113],{"class":36,"line":76091},242,[34,76093,56119],{"class":55},[34,76095,3313],{"class":40},[34,76097,2034],{"class":55},[34,76099,76100],{"class":40},"uname.value ",[34,76102,72996],{"class":55},[34,76104,76105],{"class":55}," !",[34,76107,76108],{"class":40},"age.value ",[34,76110,72996],{"class":55},[34,76112,76105],{"class":55},[34,76114,76115],{"class":40},"salary.value) {\n",[34,76117,76119,76121,76123,76125,76127],{"class":36,"line":76118},243,[34,76120,16398],{"class":55},[34,76122,71579],{"class":3617},[34,76124,286],{"class":40},[34,76126,71584],{"class":504},[34,76128,101],{"class":40},[34,76130,76132],{"class":36,"line":76131},244,[34,76133,54037],{"class":40},[34,76135,76137,76139,76141],{"class":36,"line":76136},245,[34,76138,59646],{"class":40},[34,76140,53523],{"class":3617},[34,76142,76143],{"class":40},"({\n",[34,76145,76147],{"class":36,"line":76146},246,[34,76148,76149],{"class":161},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[34,76151,76153],{"class":36,"line":76152},247,[34,76154,76155],{"class":161},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[34,76157,76159],{"class":36,"line":76158},248,[34,76160,76161],{"class":161},"        \u002F\u002F 对象的序号应为数组长度+1\n",[34,76163,76165],{"class":36,"line":76164},249,[34,76166,76167],{"class":161},"        \u002F\u002F unameId: arr.length + 1,\n",[34,76169,76171],{"class":36,"line":76170},250,[34,76172,1475],{"emptyLinePlaceholder":1474},[34,76174,76176],{"class":36,"line":76175},251,[34,76177,76178],{"class":161},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[34,76180,76182],{"class":36,"line":76181},252,[34,76183,76184],{"class":161},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[34,76186,76188],{"class":36,"line":76187},253,[34,76189,76190],{"class":161},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[34,76192,76194],{"class":36,"line":76193},254,[34,76195,76196],{"class":161},"        \u002F\u002F 0当假看\n",[34,76198,76200,76203,76205,76207,76210,76212,76214,76216,76219,76221,76223,76226,76228],{"class":36,"line":76199},255,[34,76201,76202],{"class":40},"        unameId: arr.",[34,76204,53607],{"class":44},[34,76206,75453],{"class":55},[34,76208,76209],{"class":40}," arr[arr.",[34,76211,53607],{"class":44},[34,76213,53910],{"class":55},[34,76215,26764],{"class":44},[34,76217,76218],{"class":40},"].unameId ",[34,76220,2277],{"class":55},[34,76222,26764],{"class":44},[34,76224,76225],{"class":55}," :",[34,76227,26764],{"class":44},[34,76229,33108],{"class":40},[34,76231,76233],{"class":36,"line":76232},256,[34,76234,71632],{"class":40},[34,76236,76238],{"class":36,"line":76237},257,[34,76239,71637],{"class":40},[34,76241,76243],{"class":36,"line":76242},258,[34,76244,71647],{"class":40},[34,76246,76248],{"class":36,"line":76247},259,[34,76249,71642],{"class":40},[34,76251,76253],{"class":36,"line":76252},260,[34,76254,76255],{"class":40},"        city: city.value,\n",[34,76257,76259],{"class":36,"line":76258},261,[34,76260,76261],{"class":161},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[34,76263,76265],{"class":36,"line":76264},262,[34,76266,76267],{"class":161},"        \u002F\u002F time: new Date().toDateString()\n",[34,76269,76271,76274,76277],{"class":36,"line":76270},263,[34,76272,76273],{"class":40},"        time: ",[34,76275,76276],{"class":3617},"getTime",[34,76278,3630],{"class":40},[34,76280,76282],{"class":36,"line":76281},264,[34,76283,66454],{"class":40},[34,76285,76287],{"class":36,"line":76286},265,[34,76288,76289],{"class":161},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[34,76291,76293,76295],{"class":36,"line":76292},266,[34,76294,71707],{"class":3617},[34,76296,3630],{"class":40},[34,76298,76300,76302,76304,76306,76308],{"class":36,"line":76299},267,[34,76301,71690],{"class":44},[34,76303,2353],{"class":40},[34,76305,71695],{"class":3617},[34,76307,14698],{"class":40},[34,76309,76310],{"class":161},"\u002F\u002F重置表单\n",[34,76312,76314],{"class":36,"line":76313},268,[34,76315,76316],{"class":161},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[34,76318,76320,76323,76325,76327,76330,76332,76334,76336,76338],{"class":36,"line":76319},269,[34,76321,76322],{"class":40},"      localStorage.",[34,76324,73293],{"class":3617},[34,76326,286],{"class":40},[34,76328,76329],{"class":504},"'data'",[34,76331,48],{"class":40},[34,76333,73303],{"class":44},[34,76335,2353],{"class":40},[34,76337,73308],{"class":3617},[34,76339,76340],{"class":40},"(arr))\n",[34,76342,76344],{"class":36,"line":76343},270,[34,76345,35102],{"class":40},[34,76347,76349],{"class":36,"line":76348},271,[34,76350,1475],{"emptyLinePlaceholder":1474},[34,76352,76354],{"class":36,"line":76353},272,[34,76355,76356],{"class":161},"    \u002F\u002F 3.删除业务\n",[34,76358,76360],{"class":36,"line":76359},273,[34,76361,76362],{"class":161},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[34,76364,76366,76368,76370,76372,76374,76376,76378,76380,76382],{"class":36,"line":76365},274,[34,76367,71980],{"class":40},[34,76369,59452],{"class":3617},[34,76371,286],{"class":40},[34,76373,59457],{"class":504},[34,76375,48],{"class":40},[34,76377,56088],{"class":55},[34,76379,3313],{"class":40},[34,76381,1887],{"class":51},[34,76383,14090],{"class":40},[34,76385,76387],{"class":36,"line":76386},275,[34,76388,76389],{"class":161},"      \u002F\u002F 判断是否点击的是删除按钮\n",[34,76391,76393,76395,76397,76399,76401],{"class":36,"line":76392},276,[34,76394,56119],{"class":55},[34,76396,68673],{"class":40},[34,76398,56125],{"class":55},[34,76400,69895],{"class":504},[34,76402,14090],{"class":40},[34,76404,76406],{"class":36,"line":76405},277,[34,76407,76408],{"class":161},"        \u002F\u002F alert(1)\n",[34,76410,76412],{"class":36,"line":76411},278,[34,76413,76414],{"class":161},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[34,76416,76418],{"class":36,"line":76417},279,[34,76419,76420],{"class":161},"        \u002F\u002F console.log(e.target)\n",[34,76422,76424],{"class":36,"line":76423},280,[34,76425,76426],{"class":161},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[34,76428,76430],{"class":36,"line":76429},281,[34,76431,1475],{"emptyLinePlaceholder":1474},[34,76433,76435],{"class":36,"line":76434},282,[34,76436,76437],{"class":161},"        \u002F\u002F 确认框，确然是否真的要删除\n",[34,76439,76441],{"class":36,"line":76440},283,[34,76442,76443],{"class":161},"        \u002F\u002F confirm()为确认框\n",[34,76445,76447],{"class":36,"line":76446},284,[34,76448,76449],{"class":161},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[34,76451,76453,76455,76457,76460,76462,76465],{"class":36,"line":76452},285,[34,76454,4150],{"class":55},[34,76456,3313],{"class":40},[34,76458,76459],{"class":3617},"confirm",[34,76461,286],{"class":40},[34,76463,76464],{"class":504},"'您确定要删除这条数据吗？'",[34,76466,76467],{"class":40},")) {\n",[34,76469,76471,76474,76476,76478,76480],{"class":36,"line":76470},286,[34,76472,76473],{"class":40},"          arr.",[34,76475,59649],{"class":3617},[34,76477,72033],{"class":40},[34,76479,394],{"class":44},[34,76481,101],{"class":40},[34,76483,76485],{"class":36,"line":76484},287,[34,76486,76487],{"class":161},"          \u002F\u002F 3.4 重新渲染页面\n",[34,76489,76491,76494],{"class":36,"line":76490},288,[34,76492,76493],{"class":3617},"          render",[34,76495,3630],{"class":40},[34,76497,76499],{"class":36,"line":76498},289,[34,76500,76501],{"class":161},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[34,76503,76505,76508,76510,76512,76514,76516,76518,76520,76522],{"class":36,"line":76504},290,[34,76506,76507],{"class":40},"          localStorage.",[34,76509,73293],{"class":3617},[34,76511,286],{"class":40},[34,76513,76329],{"class":504},[34,76515,48],{"class":40},[34,76517,73303],{"class":44},[34,76519,2353],{"class":40},[34,76521,73308],{"class":3617},[34,76523,76340],{"class":40},[34,76525,76527],{"class":36,"line":76526},291,[34,76528,4182],{"class":40},[34,76530,76532],{"class":36,"line":76531},292,[34,76533,54037],{"class":40},[34,76535,76537],{"class":36,"line":76536},293,[34,76538,1475],{"emptyLinePlaceholder":1474},[34,76540,76542],{"class":36,"line":76541},294,[34,76543,35102],{"class":40},[34,76545,76547],{"class":36,"line":76546},295,[34,76548,1475],{"emptyLinePlaceholder":1474},[34,76550,76552,76554,76556],{"class":36,"line":76551},296,[34,76553,54056],{"class":40},[34,76555,53452],{"class":52939},[34,76557,52946],{"class":40},[34,76559,76561,76563,76565],{"class":36,"line":76560},297,[34,76562,53424],{"class":40},[34,76564,53439],{"class":52939},[34,76566,52946],{"class":40},[34,76568,76570],{"class":36,"line":76569},298,[34,76571,1475],{"emptyLinePlaceholder":1474},[34,76573,76575,76577,76579],{"class":36,"line":76574},299,[34,76576,53424],{"class":40},[34,76578,52274],{"class":52939},[34,76580,52946],{"class":40},[14,76582,76584],{"id":76583},"_36-正则表达式","3.6 正则表达式",[103,76586,76587],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[103,76589,76590],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[103,76592,76593],{},"正则表达式的作用：",[2798,76595,76596,76603,76609],{},[1775,76597,76598,76599,76602],{},"表单验证（ ",[1165,76600,76601],{},"匹配"," ）",[1775,76604,76605,76606,76602],{},"过滤敏感词（ ",[1165,76607,76608],{},"替换",[1775,76610,76611,76612,76602],{},"字符串中提取我们想要的部分（ ",[1165,76613,76614],{},"提取",[19,76616,76618],{"id":76617},"_361-语法","3.6.1 语法",[103,76620,76621],{},"正则表达式使用步骤：",[1772,76623,76624,76627],{},[1775,76625,76626],{},"定义规则",[1775,76628,76629],{},"查找是否匹配",[103,76631,76632],{},"正则表达式里边不需要写引号",[103,76634,76635],{},[109,76636],{"alt":29,"src":76637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[103,76639,76640],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[103,76642,76643],{},"reg.test(str)",[103,76645,76646],{},[109,76647],{"alt":29,"src":76648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[103,76650,76651],{},[109,76652],{"alt":29,"src":76653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[19,76655,76657],{"id":76656},"_362-元字符","3.6.2 元字符",[1772,76659,76660,76663,76666,76669,76676],{},[1775,76661,76662],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[1775,76664,76665],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[1775,76667,76668],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[1775,76670,76671,76672],{},"正则验证工具：",[236,76673,76674],{"href":76674,"rel":76675},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25510],[1775,76677,76678],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[1353,76680,76682],{"id":76681},"_3621-边界符","3.6.2.1 边界符",[103,76684,76685],{},[109,76686],{"alt":29,"src":76687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[103,76689,76690],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[103,76692,76693],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[103,76695,76696],{},"只匹配一次",[103,76698,76699],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[1353,76701,76703],{"id":76702},"_3622-量词","3.6.2.2 量词",[103,76705,76706],{},[109,76707],{"alt":29,"src":76708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[103,76710,76711],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[1353,76713,76715],{"id":76714},"_3623-元字符","3.6.2.3 元字符",[103,76717,76718],{},[109,76719],{"alt":29,"src":76720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[103,76722,76723],{},"匹配的是a或b或c []只选一个",[103,76725,76726],{},[109,76727],{"alt":29,"src":76728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[103,76730,76731],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[103,76733,76734],{},[109,76735],{"alt":29,"src":76736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[103,76738,76739],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[103,76741,76742],{},[109,76743],{"alt":29,"src":76744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[24,76746,76748],{"className":52272,"code":76747,"language":52274,"meta":29,"style":29},"\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",[31,76749,76750,76760,76774,76778,76786,76800,76820,76832,76840,76844,76852,76860,76865,76896,76923,76951,76955,76960,76988,77019,77024,77029,77060,77092,77124,77128,77133,77164,77194,77224,77228,77233,77264,77295,77325,77355,77359,77364,77397,77401,77406,77437,77468,77472,77477,77508,77538,77569,77573,77578,77610,77641,77671,77698,77729,77761,77794,77825,77856,77888,77919,77927,77935,77939],{"__ignoreMap":29},[34,76751,76752,76754,76756,76758],{"class":36,"line":37},[34,76753,52936],{"class":40},[34,76755,52940],{"class":52939},[34,76757,52943],{"class":3617},[34,76759,52946],{"class":40},[34,76761,76762,76764,76766,76768,76770,76772],{"class":36,"line":165},[34,76763,2701],{"class":40},[34,76765,52274],{"class":52939},[34,76767,52955],{"class":3617},[34,76769,221],{"class":40},[34,76771,52960],{"class":504},[34,76773,52946],{"class":40},[34,76775,76776],{"class":36,"line":171},[34,76777,1475],{"emptyLinePlaceholder":1474},[34,76779,76780,76782,76784],{"class":36,"line":182},[34,76781,2701],{"class":40},[34,76783,52973],{"class":52939},[34,76785,52946],{"class":40},[34,76787,76788,76790,76792,76794,76796,76798],{"class":36,"line":188},[34,76789,53783],{"class":40},[34,76791,52983],{"class":52939},[34,76793,52986],{"class":3617},[34,76795,221],{"class":40},[34,76797,52991],{"class":504},[34,76799,52946],{"class":40},[34,76801,76802,76804,76806,76808,76810,76812,76814,76816,76818],{"class":36,"line":518},[34,76803,53783],{"class":40},[34,76805,52983],{"class":52939},[34,76807,16566],{"class":3617},[34,76809,221],{"class":40},[34,76811,53030],{"class":504},[34,76813,53010],{"class":3617},[34,76815,221],{"class":40},[34,76817,53037],{"class":504},[34,76819,52946],{"class":40},[34,76821,76822,76824,76826,76828,76830],{"class":36,"line":524},[34,76823,53783],{"class":40},[34,76825,53046],{"class":52939},[34,76827,53049],{"class":40},[34,76829,53046],{"class":52939},[34,76831,52946],{"class":40},[34,76833,76834,76836,76838],{"class":36,"line":530},[34,76835,53424],{"class":40},[34,76837,52973],{"class":52939},[34,76839,52946],{"class":40},[34,76841,76842],{"class":36,"line":624},[34,76843,1475],{"emptyLinePlaceholder":1474},[34,76845,76846,76848,76850],{"class":36,"line":630},[34,76847,2701],{"class":40},[34,76849,53439],{"class":52939},[34,76851,52946],{"class":40},[34,76853,76854,76856,76858],{"class":36,"line":636},[34,76855,53783],{"class":40},[34,76857,53452],{"class":52939},[34,76859,52946],{"class":40},[34,76861,76862],{"class":36,"line":1513},[34,76863,76864],{"class":161},"    \u002F\u002F 元字符中\n",[34,76866,76867,76869,76871,76873,76875,76878,76880,76882,76885,76887,76890,76893],{"class":36,"line":1519},[34,76868,75392],{"class":40},[34,76870,59886],{"class":3617},[34,76872,286],{"class":40},[34,76874,2379],{"class":504},[34,76876,76877],{"class":49616},"哈",[34,76879,2379],{"class":504},[34,76881,2353],{"class":40},[34,76883,76884],{"class":3617},"test",[34,76886,286],{"class":40},[34,76888,76889],{"class":504},"'哈'",[34,76891,76892],{"class":40},"))  ",[34,76894,76895],{"class":161},"\u002F\u002Ftrue\n",[34,76897,76898,76900,76902,76904,76906,76908,76910,76912,76914,76916,76919,76921],{"class":36,"line":3283},[34,76899,75392],{"class":40},[34,76901,59886],{"class":3617},[34,76903,286],{"class":40},[34,76905,2379],{"class":504},[34,76907,76877],{"class":49616},[34,76909,2379],{"class":504},[34,76911,2353],{"class":40},[34,76913,76884],{"class":3617},[34,76915,286],{"class":40},[34,76917,76918],{"class":504},"'哈哈'",[34,76920,76892],{"class":40},[34,76922,76895],{"class":161},[34,76924,76925,76927,76929,76931,76933,76935,76937,76939,76941,76943,76946,76949],{"class":36,"line":3297},[34,76926,75392],{"class":40},[34,76928,59886],{"class":3617},[34,76930,286],{"class":40},[34,76932,2379],{"class":504},[34,76934,76877],{"class":49616},[34,76936,2379],{"class":504},[34,76938,2353],{"class":40},[34,76940,76884],{"class":3617},[34,76942,286],{"class":40},[34,76944,76945],{"class":504},"'二哈'",[34,76947,76948],{"class":40},"))   ",[34,76950,76895],{"class":161},[34,76952,76953],{"class":36,"line":3302},[34,76954,1475],{"emptyLinePlaceholder":1474},[34,76956,76957],{"class":36,"line":3308},[34,76958,76959],{"class":161},"    \u002F\u002F 1.边界符\n",[34,76961,76962,76964,76966,76968,76970,76972,76974,76976,76978,76980,76982,76984,76986],{"class":36,"line":3328},[34,76963,75392],{"class":40},[34,76965,59886],{"class":3617},[34,76967,286],{"class":40},[34,76969,2379],{"class":504},[34,76971,2757],{"class":55},[34,76973,76877],{"class":49616},[34,76975,2379],{"class":504},[34,76977,2353],{"class":40},[34,76979,76884],{"class":3617},[34,76981,286],{"class":40},[34,76983,76889],{"class":504},[34,76985,76892],{"class":40},[34,76987,76895],{"class":161},[34,76989,76990,76992,76994,76996,76998,77000,77002,77004,77006,77008,77010,77012,77014,77016],{"class":36,"line":3333},[34,76991,75392],{"class":40},[34,76993,59886],{"class":3617},[34,76995,286],{"class":40},[34,76997,2379],{"class":504},[34,76999,2757],{"class":55},[34,77001,76877],{"class":49616},[34,77003,2108],{"class":55},[34,77005,2379],{"class":504},[34,77007,2353],{"class":40},[34,77009,76884],{"class":3617},[34,77011,286],{"class":40},[34,77013,76918],{"class":504},[34,77015,76892],{"class":40},[34,77017,77018],{"class":161},"\u002F\u002Ffalse\n",[34,77020,77021],{"class":36,"line":3347},[34,77022,77023],{"class":161},"    \u002F\u002F 2.量词\n",[34,77025,77026],{"class":36,"line":3352},[34,77027,77028],{"class":161},"    \u002F\u002F 量词 * 类似于 >= 0\n",[34,77030,77031,77033,77035,77037,77039,77041,77043,77046,77048,77050,77052,77054,77056,77058],{"class":36,"line":3381},[34,77032,75392],{"class":40},[34,77034,59886],{"class":3617},[34,77036,286],{"class":40},[34,77038,2379],{"class":504},[34,77040,2757],{"class":55},[34,77042,76877],{"class":49616},[34,77044,77045],{"class":55},"*$",[34,77047,2379],{"class":504},[34,77049,2353],{"class":40},[34,77051,76884],{"class":3617},[34,77053,286],{"class":40},[34,77055,76918],{"class":504},[34,77057,76892],{"class":40},[34,77059,76895],{"class":161},[34,77061,77062,77064,77066,77068,77070,77072,77074,77076,77078,77080,77082,77084,77087,77089],{"class":36,"line":3386},[34,77063,75392],{"class":40},[34,77065,59886],{"class":3617},[34,77067,286],{"class":40},[34,77069,2379],{"class":504},[34,77071,2757],{"class":55},[34,77073,76877],{"class":49616},[34,77075,77045],{"class":55},[34,77077,2379],{"class":504},[34,77079,2353],{"class":40},[34,77081,76884],{"class":3617},[34,77083,286],{"class":40},[34,77085,77086],{"class":504},"'二哈好傻'",[34,77088,76892],{"class":40},[34,77090,77091],{"class":161},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[34,77093,77094,77096,77098,77100,77102,77104,77106,77108,77110,77112,77114,77116,77119,77121],{"class":36,"line":3403},[34,77095,75392],{"class":40},[34,77097,59886],{"class":3617},[34,77099,286],{"class":40},[34,77101,2379],{"class":504},[34,77103,2757],{"class":55},[34,77105,76877],{"class":49616},[34,77107,77045],{"class":55},[34,77109,2379],{"class":504},[34,77111,2353],{"class":40},[34,77113,76884],{"class":3617},[34,77115,286],{"class":40},[34,77117,77118],{"class":504},"'哈好哈'",[34,77120,76948],{"class":40},[34,77122,77123],{"class":161},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[34,77125,77126],{"class":36,"line":3408},[34,77127,1475],{"emptyLinePlaceholder":1474},[34,77129,77130],{"class":36,"line":3413},[34,77131,77132],{"class":161},"    \u002F\u002F +类似于>=1\n",[34,77134,77135,77137,77139,77141,77143,77145,77147,77150,77152,77154,77156,77158,77160,77162],{"class":36,"line":3418},[34,77136,75392],{"class":40},[34,77138,59886],{"class":3617},[34,77140,286],{"class":40},[34,77142,2379],{"class":504},[34,77144,2757],{"class":55},[34,77146,76877],{"class":49616},[34,77148,77149],{"class":55},"+$",[34,77151,2379],{"class":504},[34,77153,2353],{"class":40},[34,77155,76884],{"class":3617},[34,77157,286],{"class":40},[34,77159,76918],{"class":504},[34,77161,76892],{"class":40},[34,77163,76895],{"class":161},[34,77165,77166,77168,77170,77172,77174,77176,77178,77180,77182,77184,77186,77188,77190,77192],{"class":36,"line":3432},[34,77167,75392],{"class":40},[34,77169,59886],{"class":3617},[34,77171,286],{"class":40},[34,77173,2379],{"class":504},[34,77175,2757],{"class":55},[34,77177,76877],{"class":49616},[34,77179,77149],{"class":55},[34,77181,2379],{"class":504},[34,77183,2353],{"class":40},[34,77185,76884],{"class":3617},[34,77187,286],{"class":40},[34,77189,77086],{"class":504},[34,77191,76892],{"class":40},[34,77193,77091],{"class":161},[34,77195,77196,77198,77200,77202,77204,77206,77208,77210,77212,77214,77216,77218,77220,77222],{"class":36,"line":3437},[34,77197,75392],{"class":40},[34,77199,59886],{"class":3617},[34,77201,286],{"class":40},[34,77203,2379],{"class":504},[34,77205,2757],{"class":55},[34,77207,76877],{"class":49616},[34,77209,77149],{"class":55},[34,77211,2379],{"class":504},[34,77213,2353],{"class":40},[34,77215,76884],{"class":3617},[34,77217,286],{"class":40},[34,77219,77118],{"class":504},[34,77221,76948],{"class":40},[34,77223,77018],{"class":161},[34,77225,77226],{"class":36,"line":4230},[34,77227,1475],{"emptyLinePlaceholder":1474},[34,77229,77230],{"class":36,"line":4244},[34,77231,77232],{"class":161},"    \u002F\u002F ?类似于0次或一次\n",[34,77234,77235,77237,77239,77241,77243,77245,77248,77250,77252,77254,77256,77258,77260,77262],{"class":36,"line":4252},[34,77236,75392],{"class":40},[34,77238,59886],{"class":3617},[34,77240,286],{"class":40},[34,77242,2379],{"class":504},[34,77244,2757],{"class":55},[34,77246,77247],{"class":49616},"哈？",[34,77249,2108],{"class":55},[34,77251,2379],{"class":504},[34,77253,2353],{"class":40},[34,77255,76884],{"class":3617},[34,77257,286],{"class":40},[34,77259,75867],{"class":504},[34,77261,76948],{"class":40},[34,77263,76895],{"class":161},[34,77265,77266,77268,77270,77272,77274,77276,77278,77281,77283,77285,77287,77289,77291,77293],{"class":36,"line":4257},[34,77267,75392],{"class":40},[34,77269,59886],{"class":3617},[34,77271,286],{"class":40},[34,77273,2379],{"class":504},[34,77275,2757],{"class":55},[34,77277,76877],{"class":49616},[34,77279,77280],{"class":55},"?$",[34,77282,2379],{"class":504},[34,77284,2353],{"class":40},[34,77286,76884],{"class":3617},[34,77288,286],{"class":40},[34,77290,76918],{"class":504},[34,77292,76892],{"class":40},[34,77294,77018],{"class":161},[34,77296,77297,77299,77301,77303,77305,77307,77309,77311,77313,77315,77317,77319,77321,77323],{"class":36,"line":4263},[34,77298,75392],{"class":40},[34,77300,59886],{"class":3617},[34,77302,286],{"class":40},[34,77304,2379],{"class":504},[34,77306,2757],{"class":55},[34,77308,76877],{"class":49616},[34,77310,77280],{"class":55},[34,77312,2379],{"class":504},[34,77314,2353],{"class":40},[34,77316,76884],{"class":3617},[34,77318,286],{"class":40},[34,77320,77086],{"class":504},[34,77322,76892],{"class":40},[34,77324,77091],{"class":161},[34,77326,77327,77329,77331,77333,77335,77337,77339,77341,77343,77345,77347,77349,77351,77353],{"class":36,"line":4269},[34,77328,75392],{"class":40},[34,77330,59886],{"class":3617},[34,77332,286],{"class":40},[34,77334,2379],{"class":504},[34,77336,2757],{"class":55},[34,77338,76877],{"class":49616},[34,77340,77280],{"class":55},[34,77342,2379],{"class":504},[34,77344,2353],{"class":40},[34,77346,76884],{"class":3617},[34,77348,286],{"class":40},[34,77350,77118],{"class":504},[34,77352,76892],{"class":40},[34,77354,77018],{"class":161},[34,77356,77357],{"class":36,"line":4274},[34,77358,1475],{"emptyLinePlaceholder":1474},[34,77360,77361],{"class":36,"line":9598},[34,77362,77363],{"class":161},"    \u002F\u002F {n}写几，就必须出现几次\n",[34,77365,77366,77368,77370,77372,77374,77376,77378,77381,77383,77385,77387,77389,77392,77395],{"class":36,"line":9622},[34,77367,75392],{"class":40},[34,77369,59886],{"class":3617},[34,77371,286],{"class":40},[34,77373,2379],{"class":504},[34,77375,2757],{"class":55},[34,77377,76877],{"class":49616},[34,77379,77380],{"class":55},"{4}$",[34,77382,2379],{"class":504},[34,77384,2353],{"class":40},[34,77386,76884],{"class":3617},[34,77388,286],{"class":40},[34,77390,77391],{"class":504},"'哈哈哈哈'",[34,77393,77394],{"class":40},")) ",[34,77396,76895],{"class":161},[34,77398,77399],{"class":36,"line":9627},[34,77400,1475],{"emptyLinePlaceholder":1474},[34,77402,77403],{"class":36,"line":9633},[34,77404,77405],{"class":161},"    \u002F\u002F {n,}大于等于n次\n",[34,77407,77408,77410,77412,77414,77416,77418,77420,77423,77425,77427,77429,77431,77433,77435],{"class":36,"line":9660},[34,77409,75392],{"class":40},[34,77411,59886],{"class":3617},[34,77413,286],{"class":40},[34,77415,2379],{"class":504},[34,77417,2757],{"class":55},[34,77419,76877],{"class":49616},[34,77421,77422],{"class":55},"{4,}$",[34,77424,2379],{"class":504},[34,77426,2353],{"class":40},[34,77428,76884],{"class":3617},[34,77430,286],{"class":40},[34,77432,77391],{"class":504},[34,77434,77394],{"class":40},[34,77436,76895],{"class":161},[34,77438,77439,77441,77443,77445,77447,77449,77451,77453,77455,77457,77459,77461,77464,77466],{"class":36,"line":9665},[34,77440,75392],{"class":40},[34,77442,59886],{"class":3617},[34,77444,286],{"class":40},[34,77446,2379],{"class":504},[34,77448,2757],{"class":55},[34,77450,76877],{"class":49616},[34,77452,77422],{"class":55},[34,77454,2379],{"class":504},[34,77456,2353],{"class":40},[34,77458,76884],{"class":3617},[34,77460,286],{"class":40},[34,77462,77463],{"class":504},"'哈哈哈哈哈'",[34,77465,77394],{"class":40},[34,77467,76895],{"class":161},[34,77469,77470],{"class":36,"line":9671},[34,77471,1475],{"emptyLinePlaceholder":1474},[34,77473,77474],{"class":36,"line":9683},[34,77475,77476],{"class":161},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[34,77478,77479,77481,77483,77485,77487,77489,77491,77494,77496,77498,77500,77502,77504,77506],{"class":36,"line":9695},[34,77480,75392],{"class":40},[34,77482,59886],{"class":3617},[34,77484,286],{"class":40},[34,77486,2379],{"class":504},[34,77488,2757],{"class":55},[34,77490,76877],{"class":49616},[34,77492,77493],{"class":55},"{4,6}$",[34,77495,2379],{"class":504},[34,77497,2353],{"class":40},[34,77499,76884],{"class":3617},[34,77501,286],{"class":40},[34,77503,77391],{"class":504},[34,77505,77394],{"class":40},[34,77507,76895],{"class":161},[34,77509,77510,77512,77514,77516,77518,77520,77522,77524,77526,77528,77530,77532,77534,77536],{"class":36,"line":9707},[34,77511,75392],{"class":40},[34,77513,59886],{"class":3617},[34,77515,286],{"class":40},[34,77517,2379],{"class":504},[34,77519,2757],{"class":55},[34,77521,76877],{"class":49616},[34,77523,77493],{"class":55},[34,77525,2379],{"class":504},[34,77527,2353],{"class":40},[34,77529,76884],{"class":3617},[34,77531,286],{"class":40},[34,77533,77463],{"class":504},[34,77535,77394],{"class":40},[34,77537,76895],{"class":161},[34,77539,77540,77542,77544,77546,77548,77550,77552,77554,77556,77558,77560,77562,77565,77567],{"class":36,"line":11366},[34,77541,75392],{"class":40},[34,77543,59886],{"class":3617},[34,77545,286],{"class":40},[34,77547,2379],{"class":504},[34,77549,2757],{"class":55},[34,77551,76877],{"class":49616},[34,77553,77493],{"class":55},[34,77555,2379],{"class":504},[34,77557,2353],{"class":40},[34,77559,76884],{"class":3617},[34,77561,286],{"class":40},[34,77563,77564],{"class":504},"'哈哈哈哈哈哈哈'",[34,77566,77394],{"class":40},[34,77568,77018],{"class":161},[34,77570,77571],{"class":36,"line":11391},[34,77572,1475],{"emptyLinePlaceholder":1474},[34,77574,77575],{"class":36,"line":11414},[34,77576,77577],{"class":161},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[34,77579,77580,77582,77584,77586,77588,77590,77593,77595,77597,77599,77601,77603,77606,77608],{"class":36,"line":11438},[34,77581,75392],{"class":40},[34,77583,59886],{"class":3617},[34,77585,286],{"class":40},[34,77587,2379],{"class":504},[34,77589,2757],{"class":55},[34,77591,77592],{"class":44},"[abc]",[34,77594,2108],{"class":55},[34,77596,2379],{"class":504},[34,77598,2353],{"class":40},[34,77600,76884],{"class":3617},[34,77602,286],{"class":40},[34,77604,77605],{"class":504},"'a'",[34,77607,76892],{"class":40},[34,77609,76895],{"class":161},[34,77611,77612,77614,77616,77618,77620,77622,77624,77626,77628,77630,77632,77634,77637,77639],{"class":36,"line":11443},[34,77613,75392],{"class":40},[34,77615,59886],{"class":3617},[34,77617,286],{"class":40},[34,77619,2379],{"class":504},[34,77621,2757],{"class":55},[34,77623,77592],{"class":44},[34,77625,2108],{"class":55},[34,77627,2379],{"class":504},[34,77629,2353],{"class":40},[34,77631,76884],{"class":3617},[34,77633,286],{"class":40},[34,77635,77636],{"class":504},"'b'",[34,77638,76892],{"class":40},[34,77640,76895],{"class":161},[34,77642,77643,77645,77647,77649,77651,77653,77655,77657,77659,77661,77663,77665,77667,77669],{"class":36,"line":11448},[34,77644,75392],{"class":40},[34,77646,59886],{"class":3617},[34,77648,286],{"class":40},[34,77650,2379],{"class":504},[34,77652,2757],{"class":55},[34,77654,77592],{"class":44},[34,77656,2108],{"class":55},[34,77658,2379],{"class":504},[34,77660,2353],{"class":40},[34,77662,76884],{"class":3617},[34,77664,286],{"class":40},[34,77666,998],{"class":504},[34,77668,76892],{"class":40},[34,77670,76895],{"class":161},[34,77672,77673,77675,77677,77679,77681,77683,77685,77687,77689,77691,77694,77696],{"class":36,"line":11453},[34,77674,75392],{"class":40},[34,77676,59886],{"class":3617},[34,77678,286],{"class":40},[34,77680,2379],{"class":504},[34,77682,77592],{"class":44},[34,77684,2379],{"class":504},[34,77686,2353],{"class":40},[34,77688,76884],{"class":3617},[34,77690,286],{"class":40},[34,77692,77693],{"class":504},"'ab'",[34,77695,76892],{"class":40},[34,77697,76895],{"class":161},[34,77699,77700,77702,77704,77706,77708,77710,77712,77714,77716,77718,77720,77722,77724,77726],{"class":36,"line":11462},[34,77701,75392],{"class":40},[34,77703,59886],{"class":3617},[34,77705,286],{"class":40},[34,77707,2379],{"class":504},[34,77709,2757],{"class":55},[34,77711,77592],{"class":44},[34,77713,2108],{"class":55},[34,77715,2379],{"class":504},[34,77717,2353],{"class":40},[34,77719,76884],{"class":3617},[34,77721,286],{"class":40},[34,77723,77693],{"class":504},[34,77725,76892],{"class":40},[34,77727,77728],{"class":161},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[34,77730,77731,77733,77735,77737,77739,77741,77743,77746,77748,77750,77752,77754,77756,77758],{"class":36,"line":11467},[34,77732,75392],{"class":40},[34,77734,59886],{"class":3617},[34,77736,286],{"class":40},[34,77738,2379],{"class":504},[34,77740,2757],{"class":55},[34,77742,77592],{"class":44},[34,77744,77745],{"class":55},"{2}$",[34,77747,2379],{"class":504},[34,77749,2353],{"class":40},[34,77751,76884],{"class":3617},[34,77753,286],{"class":40},[34,77755,77693],{"class":504},[34,77757,76892],{"class":40},[34,77759,77760],{"class":161},"\u002F\u002Ftrue   可以选两个\n",[34,77762,77763,77765,77767,77769,77771,77773,77776,77778,77780,77782,77784,77786,77789,77791],{"class":36,"line":11473},[34,77764,75392],{"class":40},[34,77766,59886],{"class":3617},[34,77768,286],{"class":40},[34,77770,2379],{"class":504},[34,77772,2757],{"class":55},[34,77774,77775],{"class":44},"[a-z]",[34,77777,2108],{"class":55},[34,77779,2379],{"class":504},[34,77781,2353],{"class":40},[34,77783,76884],{"class":3617},[34,77785,286],{"class":40},[34,77787,77788],{"class":504},"'p'",[34,77790,76948],{"class":40},[34,77792,77793],{"class":161},"\u002F\u002Ftrue   依然只能选一个\n",[34,77795,77796,77798,77800,77802,77804,77806,77809,77811,77813,77815,77817,77819,77821,77823],{"class":36,"line":11494},[34,77797,75392],{"class":40},[34,77799,59886],{"class":3617},[34,77801,286],{"class":40},[34,77803,2379],{"class":504},[34,77805,2757],{"class":55},[34,77807,77808],{"class":44},"[A-Z]",[34,77810,2108],{"class":55},[34,77812,2379],{"class":504},[34,77814,2353],{"class":40},[34,77816,76884],{"class":3617},[34,77818,286],{"class":40},[34,77820,77788],{"class":504},[34,77822,76948],{"class":40},[34,77824,77018],{"class":161},[34,77826,77827,77829,77831,77833,77835,77837,77839,77841,77843,77845,77847,77849,77852,77854],{"class":36,"line":11500},[34,77828,75392],{"class":40},[34,77830,59886],{"class":3617},[34,77832,286],{"class":40},[34,77834,2379],{"class":504},[34,77836,2757],{"class":55},[34,77838,77808],{"class":44},[34,77840,2108],{"class":55},[34,77842,2379],{"class":504},[34,77844,2353],{"class":40},[34,77846,76884],{"class":3617},[34,77848,286],{"class":40},[34,77850,77851],{"class":504},"'P'",[34,77853,76948],{"class":40},[34,77855,76895],{"class":161},[34,77857,77858,77860,77862,77864,77866,77868,77871,77873,77875,77877,77879,77881,77884,77886],{"class":36,"line":11514},[34,77859,75392],{"class":40},[34,77861,59886],{"class":3617},[34,77863,286],{"class":40},[34,77865,2379],{"class":504},[34,77867,2757],{"class":55},[34,77869,77870],{"class":44},"[0-9]",[34,77872,2108],{"class":55},[34,77874,2379],{"class":504},[34,77876,2353],{"class":40},[34,77878,76884],{"class":3617},[34,77880,286],{"class":40},[34,77882,77883],{"class":504},"'0'",[34,77885,76948],{"class":40},[34,77887,76895],{"class":161},[34,77889,77890,77892,77894,77896,77898,77900,77903,77905,77907,77909,77911,77913,77915,77917],{"class":36,"line":11520},[34,77891,75392],{"class":40},[34,77893,59886],{"class":3617},[34,77895,286],{"class":40},[34,77897,2379],{"class":504},[34,77899,2757],{"class":55},[34,77901,77902],{"class":44},"[a-zA-Z0-9]",[34,77904,2108],{"class":55},[34,77906,2379],{"class":504},[34,77908,2353],{"class":40},[34,77910,76884],{"class":3617},[34,77912,286],{"class":40},[34,77914,77788],{"class":504},[34,77916,76892],{"class":40},[34,77918,76895],{"class":161},[34,77920,77921,77923,77925],{"class":36,"line":11547},[34,77922,54056],{"class":40},[34,77924,53452],{"class":52939},[34,77926,52946],{"class":40},[34,77928,77929,77931,77933],{"class":36,"line":11556},[34,77930,53424],{"class":40},[34,77932,53439],{"class":52939},[34,77934,52946],{"class":40},[34,77936,77937],{"class":36,"line":11562},[34,77938,1475],{"emptyLinePlaceholder":1474},[34,77940,77941,77943,77945],{"class":36,"line":11570},[34,77942,53424],{"class":40},[34,77944,52274],{"class":52939},[34,77946,52946],{"class":40},[1353,77948,77950],{"id":77949},"_3624-修饰符","3.6.2.4 修饰符",[103,77952,77953],{},[109,77954],{"alt":29,"src":77955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[103,77957,77958],{},"replace是个方法，使用的时候一定不要忘记括号()",[103,77960,77961],{},[109,77962],{"alt":29,"src":77963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[24,77965,77967],{"className":52272,"code":77966,"language":52274,"meta":29,"style":29},"\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",[31,77968,77969,77979,77993,78001,78015,78035,78047,78055,78063,78071,78103,78134,78139,78171,78182,78215,78224,78232,78240],{"__ignoreMap":29},[34,77970,77971,77973,77975,77977],{"class":36,"line":37},[34,77972,52936],{"class":40},[34,77974,52940],{"class":52939},[34,77976,52943],{"class":3617},[34,77978,52946],{"class":40},[34,77980,77981,77983,77985,77987,77989,77991],{"class":36,"line":165},[34,77982,2701],{"class":40},[34,77984,52274],{"class":52939},[34,77986,52955],{"class":3617},[34,77988,221],{"class":40},[34,77990,52960],{"class":504},[34,77992,52946],{"class":40},[34,77994,77995,77997,77999],{"class":36,"line":171},[34,77996,2701],{"class":40},[34,77998,52973],{"class":52939},[34,78000,52946],{"class":40},[34,78002,78003,78005,78007,78009,78011,78013],{"class":36,"line":182},[34,78004,53783],{"class":40},[34,78006,52983],{"class":52939},[34,78008,52986],{"class":3617},[34,78010,221],{"class":40},[34,78012,52991],{"class":504},[34,78014,52946],{"class":40},[34,78016,78017,78019,78021,78023,78025,78027,78029,78031,78033],{"class":36,"line":188},[34,78018,53783],{"class":40},[34,78020,52983],{"class":52939},[34,78022,16566],{"class":3617},[34,78024,221],{"class":40},[34,78026,53030],{"class":504},[34,78028,53010],{"class":3617},[34,78030,221],{"class":40},[34,78032,53037],{"class":504},[34,78034,52946],{"class":40},[34,78036,78037,78039,78041,78043,78045],{"class":36,"line":518},[34,78038,53783],{"class":40},[34,78040,53046],{"class":52939},[34,78042,53049],{"class":40},[34,78044,53046],{"class":52939},[34,78046,52946],{"class":40},[34,78048,78049,78051,78053],{"class":36,"line":524},[34,78050,53424],{"class":40},[34,78052,52973],{"class":52939},[34,78054,52946],{"class":40},[34,78056,78057,78059,78061],{"class":36,"line":530},[34,78058,2701],{"class":40},[34,78060,53439],{"class":52939},[34,78062,52946],{"class":40},[34,78064,78065,78067,78069],{"class":36,"line":624},[34,78066,53783],{"class":40},[34,78068,53452],{"class":52939},[34,78070,52946],{"class":40},[34,78072,78073,78075,78077,78079,78081,78083,78086,78088,78090,78092,78094,78096,78099,78101],{"class":36,"line":630},[34,78074,75392],{"class":40},[34,78076,59886],{"class":3617},[34,78078,286],{"class":40},[34,78080,2379],{"class":504},[34,78082,2757],{"class":55},[34,78084,78085],{"class":49616},"java",[34,78087,2108],{"class":55},[34,78089,2379],{"class":504},[34,78091,2353],{"class":40},[34,78093,76884],{"class":3617},[34,78095,286],{"class":40},[34,78097,78098],{"class":504},"'java'",[34,78100,77394],{"class":40},[34,78102,76895],{"class":161},[34,78104,78105,78107,78109,78111,78113,78115,78117,78119,78121,78123,78125,78127,78130,78132],{"class":36,"line":636},[34,78106,75392],{"class":40},[34,78108,59886],{"class":3617},[34,78110,286],{"class":40},[34,78112,2379],{"class":504},[34,78114,2757],{"class":55},[34,78116,78085],{"class":49616},[34,78118,2108],{"class":55},[34,78120,2379],{"class":504},[34,78122,2353],{"class":40},[34,78124,76884],{"class":3617},[34,78126,286],{"class":40},[34,78128,78129],{"class":504},"'Java'",[34,78131,77394],{"class":40},[34,78133,77018],{"class":161},[34,78135,78136],{"class":36,"line":1513},[34,78137,78138],{"class":161},"    \u002F\u002F 不区分大小写、\n",[34,78140,78141,78143,78145,78147,78149,78151,78153,78155,78157,78159,78161,78163,78165,78167,78169],{"class":36,"line":1519},[34,78142,75392],{"class":40},[34,78144,59886],{"class":3617},[34,78146,286],{"class":40},[34,78148,2379],{"class":504},[34,78150,2757],{"class":55},[34,78152,78085],{"class":49616},[34,78154,2108],{"class":55},[34,78156,2379],{"class":504},[34,78158,2239],{"class":55},[34,78160,2353],{"class":40},[34,78162,76884],{"class":3617},[34,78164,286],{"class":40},[34,78166,78129],{"class":504},[34,78168,77394],{"class":40},[34,78170,76895],{"class":161},[34,78172,78173,78175,78177,78179],{"class":36,"line":3283},[34,78174,12871],{"class":55},[34,78176,75558],{"class":44},[34,78178,56],{"class":55},[34,78180,78181],{"class":504}," 'java是一门编程语言，学完java工资很高'\n",[34,78183,78184,78186,78189,78191,78194,78197,78199,78201,78203,78205,78208,78210,78213],{"class":36,"line":3297},[34,78185,12871],{"class":55},[34,78187,78188],{"class":44}," result",[34,78190,56],{"class":55},[34,78192,78193],{"class":40}," str.",[34,78195,78196],{"class":3617},"replace",[34,78198,286],{"class":40},[34,78200,2379],{"class":504},[34,78202,78085],{"class":49616},[34,78204,2379],{"class":504},[34,78206,78207],{"class":55},"ig",[34,78209,48],{"class":40},[34,78211,78212],{"class":504},"'前端'",[34,78214,101],{"class":40},[34,78216,78217,78219,78221],{"class":36,"line":3302},[34,78218,75392],{"class":40},[34,78220,59886],{"class":3617},[34,78222,78223],{"class":40},"(result)\n",[34,78225,78226,78228,78230],{"class":36,"line":3308},[34,78227,54056],{"class":40},[34,78229,53452],{"class":52939},[34,78231,52946],{"class":40},[34,78233,78234,78236,78238],{"class":36,"line":3328},[34,78235,53424],{"class":40},[34,78237,53439],{"class":52939},[34,78239,52946],{"class":40},[34,78241,78242,78244,78246],{"class":36,"line":3333},[34,78243,53424],{"class":40},[34,78245,52274],{"class":52939},[34,78247,52946],{"class":40},[1711,78249,78250],{},"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":29,"searchDepth":165,"depth":165,"links":78252},[78253,78263,78275,78292,78299,78307],{"id":54999,"depth":165,"text":55000,"children":78254},[78255,78256,78257,78258,78259,78260,78261,78262],{"id":55003,"depth":171,"text":55004},{"id":55036,"depth":171,"text":55037},{"id":55075,"depth":171,"text":55076},{"id":55233,"depth":171,"text":55234},{"id":55281,"depth":171,"text":55282},{"id":55418,"depth":171,"text":55419},{"id":55740,"depth":171,"text":55741},{"id":58728,"depth":171,"text":58729},{"id":58756,"depth":165,"text":58757,"children":78264},[78265,78266,78267,78268,78269,78270,78271,78272,78273,78274],{"id":58760,"depth":171,"text":58761},{"id":58783,"depth":171,"text":58784},{"id":59698,"depth":171,"text":59699},{"id":60388,"depth":171,"text":60389},{"id":60670,"depth":171,"text":60671},{"id":64831,"depth":171,"text":64832},{"id":65001,"depth":171,"text":65002},{"id":65129,"depth":171,"text":65130},{"id":65154,"depth":171,"text":65155},{"id":66543,"depth":171,"text":66544},{"id":67696,"depth":165,"text":67697,"children":78276},[78277,78278,78279,78280,78281,78282,78283,78284,78285,78286,78287,78288,78289,78290,78291],{"id":67700,"depth":171,"text":67701},{"id":68354,"depth":171,"text":68355},{"id":70049,"depth":171,"text":70050},{"id":70090,"depth":171,"text":70091},{"id":70132,"depth":171,"text":70133},{"id":70146,"depth":171,"text":70147},{"id":70195,"depth":171,"text":70196},{"id":70207,"depth":171,"text":70208},{"id":70222,"depth":171,"text":70223},{"id":70258,"depth":171,"text":70259},{"id":70339,"depth":171,"text":70340},{"id":70467,"depth":171,"text":70468},{"id":70479,"depth":171,"text":70480},{"id":70498,"depth":171,"text":70499},{"id":72609,"depth":171,"text":72610},{"id":72628,"depth":165,"text":72629,"children":78293},[78294,78295,78296,78297,78298],{"id":72649,"depth":171,"text":72650},{"id":72669,"depth":171,"text":72670},{"id":72718,"depth":171,"text":72719},{"id":72843,"depth":171,"text":72844},{"id":73024,"depth":171,"text":73025},{"id":73042,"depth":165,"text":73043,"children":78300},[78301,78302,78303,78304,78305,78306],{"id":73057,"depth":171,"text":73058},{"id":73116,"depth":171,"text":73117},{"id":73140,"depth":171,"text":73141},{"id":73460,"depth":171,"text":73461},{"id":73492,"depth":171,"text":73493},{"id":73515,"depth":171,"text":73516},{"id":76583,"depth":165,"text":76584,"children":78308},[78309,78310],{"id":76617,"depth":171,"text":76618},{"id":76656,"depth":171,"text":76657},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54971,"description":1744},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78317,"title":78318,"body":78319,"description":1744,"extension":1745,"meta":94454,"navigation":1474,"path":94455,"seo":94456,"stem":94457,"__hash__":94458},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78320,"toc":94390},[78321,78324,78327,78331,78335,78340,78345,78356,78360,78365,78368,78372,78375,78380,78384,78388,78391,78396,78399,78403,78406,78414,78417,78421,78426,78431,78434,78438,78443,78448,78451,78455,78460,78463,78468,78471,78476,78479,78484,78489,78492,78495,78499,78504,78509,78512,78516,78520,78523,78526,78529,78533,78537,78542,78547,78550,78554,78559,78564,78567,78570,78573,78576,78579,78582,78585,78588,78591,78596,78600,78605,78610,78613,78616,78619,78622,78625,78628,78631,78634,78638,78642,78645,78648,78651,78656,78658,78661,78664,78667,78670,78673,78676,78679,78682,78685,78688,78691,78694,78697,78702,78707,78712,78715,78719,78722,78727,78731,78733,78744,78749,78850,78853,78856,78859,78862,78865,78868,78871,78874,78876,78879,78882,78885,78888,78891,78893,78896,78899,78902,78905,78908,78911,78913,78916,78918,78920,78923,78927,78931,78934,78937,78940,78943,78946,78949,78952,78955,78958,78963,79082,79085,79088,79093,79096,79099,79102,79105,79110,79113,79116,79119,79122,79127,79130,79230,79295,79369,79373,79376,79379,79383,79386,79400,79429,79432,79435,79438,79441,79444,79447,79450,79452,79455,79458,79461,79464,79468,79473,79477,79482,79557,79560,79743,79746,79749,79752,79755,79758,79760,79763,79766,79769,79772,79775,79778,79780,79784,79787,79792,79795,79798,79801,79804,79806,79811,79814,79817,79820,79823,79825,79830,79833,79836,79838,79840,79843,79847,79850,79853,79858,79861,79864,79867,79917,79922,79926,79931,79934,80003,80006,80015,80019,80024,80027,80030,80038,80041,80058,81860,81864,81868,81873,81876,81880,81886,81892,82044,82049,82054,82057,82060,82063,82066,82069,82072,82075,82078,82081,82084,82087,82090,82095,82099,82102,82113,82117,82122,82125,82128,82131,82134,82137,82139,82142,82145,82148,82151,82153,82170,82173,82177,82180,82185,82190,82193,82196,82200,82203,82206,82215,82218,82222,82225,82230,82235,82302,82306,82309,82312,82317,82322,82408,82413,82417,82420,82423,82438,82441,82446,82450,82455,82564,82567,82578,82728,82732,82737,82846,82850,82855,82860,82865,82868,82875,82895,82931,83095,83100,83103,83108,83115,83118,83121,83124,83183,83239,83295,83299,83304,83619,83622,83626,83629,83634,83743,83748,83752,83757,83761,83832,83836,83838,83841,83844,83882,84158,84162,84179,84245,84279,84283,84286,84291,84320,84327,84336,84341,84356,84361,84370,84373,84509,84513,84575,84579,84584,84829,84833,84838,84841,84844,84847,84850,84854,84859,86440,86444,86448,86454,86457,86462,86466,86469,86474,86477,86488,86492,86497,86501,86506,86511,86514,86519,86523,86527,86530,86535,86540,86543,86546,86549,86671,86676,86778,86781,86784,86788,86793,86965,86970,86974,86977,86982,87048,87053,87056,87187,87190,87195,87198,87201,87292,87297,87300,87303,87306,87309,87314,87319,87322,87327,87332,87337,87341,87344,87347,87352,87357,87362,87367,87421,87424,87427,87432,87435,87438,87443,87448,87453,87457,87462,87476,87481,87484,87489,87493,87498,87503,87508,87513,87518,87523,87528,87533,87536,87540,87545,87548,87551,87554,87559,87564,87567,87570,87574,87577,87580,87585,87590,87595,87600,87603,87608,87613,87674,87679,87682,87687,88928,88933,88937,88941,88946,88949,88954,88959,88962,88967,88969,88974,88978,88981,88984,88995,88999,89004,89009,89064,89069,89074,89079,89290,89295,89299,89304,89307,89309,89312,89315,89762,89767,89774,89780,89783,89786,90050,90055,90059,90324,90329,90333,90338,90343,90348,90353,90684,90687,90692,90697,90700,90704,90708,90713,90718,90723,90728,90733,90738,90742,90745,90750,90755,90758,90832,90837,90842,90847,90849,90852,91222,91227,91232,91237,91240,91243,91345,91350,91355,91458,91462,91467,91471,91475,91480,91485,91488,91493,91496,91499,91892,91897,91900,91903,91906,91909,92429,92433,92438,92443,92448,92451,92456,92459,92462,92844,92849,92851,92853,92856,92859,93371,93375,93436,93439,93442,93445,93449,93452,93457,93462,94387],[10,78322,78318],{"id":78323},"_4js进阶",[103,78325,78326],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78328,78330],{"id":78329},"_41-作用域","4.1 作用域",[19,78332,78334],{"id":78333},"_411-局部作用域","4.1.1 局部作用域",[103,78336,78337],{},[109,78338],{"alt":29,"src":78339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[103,78341,78342],{},[109,78343],{"alt":29,"src":78344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[2798,78346,78347,78350,78353],{},[1775,78348,78349],{},"函数作用域在函数内部",[1775,78351,78352],{},"块级作用域在{}",[1775,78354,78355],{},"对象的那个{}不是作用域，不是块作用域",[19,78357,78359],{"id":78358},"_412-全局作用域","4.1.2 全局作用域",[103,78361,78362],{},[109,78363],{"alt":29,"src":78364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[103,78366,78367],{},"window.a=10不要这样写",[19,78369,78371],{"id":78370},"_413-作用域链","4.1.3 作用域链",[103,78373,78374],{},"变量查找机制",[103,78376,78377],{},[109,78378],{"alt":29,"src":78379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78381,78383],{"id":78382},"_42-垃圾回收机制","4.2 垃圾回收机制",[19,78385,78387],{"id":78386},"_421-大体介绍","4.2.1 大体介绍",[103,78389,78390],{},"垃圾回收机制(Garbage Collection) 简称 GC",[103,78392,78393],{},[109,78394],{"alt":29,"src":78395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[103,78397,78398],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[19,78400,78402],{"id":78401},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[103,78404,78405],{},"堆栈空间分配区别：",[1772,78407,78408,78411],{},[1775,78409,78410],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[1775,78412,78413],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[103,78415,78416],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[1353,78418,78420],{"id":78419},"_4221-引用计数","4.2.2.1 引用计数",[103,78422,78423],{},[109,78424],{"alt":29,"src":78425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[103,78427,78428],{},[109,78429],{"alt":29,"src":78430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[103,78432,78433],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[1353,78435,78437],{"id":78436},"_4222-标记清除法","4.2.2.2 标记清除法",[103,78439,78440],{},[109,78441],{"alt":29,"src":78442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[103,78444,78445],{},[109,78446],{"alt":29,"src":78447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[103,78449,78450],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78452,78454],{"id":78453},"_43-闭包","4.3 闭包",[103,78456,78457],{},[109,78458],{"alt":29,"src":78459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[103,78461,78462],{},"闭包：内层函数+外层函数的变量",[103,78464,78465],{},[109,78466],{"alt":29,"src":78467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[103,78469,78470],{},"closure就是闭包",[103,78472,78473],{},[109,78474],{"alt":29,"src":78475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[103,78477,78478],{},"内层函数必须包含外层函数的变量才是闭包",[103,78480,78481],{},[109,78482],{"alt":29,"src":78483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[103,78485,78486],{},[109,78487],{"alt":29,"src":78488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[103,78490,78491],{},"闭包可能会引起内存泄漏",[103,78493,78494],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78496,78498],{"id":78497},"_44-变量提升","4.4 变量提升",[103,78500,78501],{},[109,78502],{"alt":29,"src":78503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[103,78505,78506],{},[109,78507],{"alt":29,"src":78508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[103,78510,78511],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78513,78515],{"id":78514},"_45-函数进阶","4.5 函数进阶",[19,78517,78519],{"id":78518},"_451-函数提升","4.5.1 函数提升",[103,78521,78522],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[103,78524,78525],{},"只提升函数声明，不提升函数调用",[53452,78527,78528],{},"\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",[19,78530,78532],{"id":78531},"_452-函数参数","4.5.2 函数参数",[1353,78534,78536],{"id":78535},"_4521-动态参数","4.5.2.1 动态参数",[103,78538,78539],{},[109,78540],{"alt":29,"src":78541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[103,78543,78544],{},[109,78545],{"alt":29,"src":78546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[103,78548,78549],{},"箭头函数里边没有arguments",[1353,78551,78553],{"id":78552},"_4522-剩余参数","4.5.2.2 剩余参数",[103,78555,78556],{},[109,78557],{"alt":29,"src":78558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[103,78560,78561],{},[109,78562],{"alt":29,"src":78563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[103,78565,78566],{},"剩余参数使用的时候不需要写...",[103,78568,78569],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[103,78571,78572],{},"  function getSum(a,b,...arr) {",[103,78574,78575],{},"  console.log(11)",[103,78577,78578],{},"  }",[103,78580,78581],{},"  getSum(1,2,3,4)",[103,78583,78584],{},"  将1传给a，2传给b，剩下的传给剩余参数",[103,78586,78587],{},"  getSum(1,2)",[103,78589,78590],{},"  将1传给a，2传给b，剩余参数为一个空数组",[103,78592,78593],{},[109,78594],{"alt":29,"src":78595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[1353,78597,78599],{"id":78598},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[103,78601,78602],{},[109,78603],{"alt":29,"src":78604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[103,78606,78607],{},[109,78608],{"alt":29,"src":78609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[103,78611,78612],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[103,78614,78615],{},"展开运算符可以用于数组之间的合并：",[103,78617,78618],{},"const arr1 = [1, 2, 3]",[103,78620,78621],{},"const arr2 = [3, 4, 5]",[103,78623,78624],{},"const arr = [...arr1, ...arr2]",[103,78626,78627],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[103,78629,78630],{},"剩余参数：函数参数使用，得到真数组",[103,78632,78633],{},"展开运算符：数组中使用，数组展开",[19,78635,78637],{"id":78636},"_453-箭头函数","4.5.3 箭头函数",[1353,78639,78641],{"id":78640},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[103,78643,78644],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[103,78646,78647],{},"它不是万能的！！！",[103,78649,78650],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[103,78652,78653],{},[109,78654],{"alt":29,"src":78655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[103,78657,1847],{},[103,78659,78660],{},"① 只有一个形参的时候，可以省略小括号：",[103,78662,78663],{},"const fn=x=>{console.log(x)}",[103,78665,78666],{},"② 只有一行代码时可以省略大括号：",[103,78668,78669],{},"const fn=x=>console.log(11)",[103,78671,78672],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[103,78674,78675],{},"const fn=x=>x+x",[103,78677,78678],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[103,78680,78681],{},"⑤ 阻止表单默认提交：",[103,78683,78684],{},"const form = document.querySelector('form')",[103,78686,78687],{},"form.addEventListener('click', ev => ev.preventDefault())",[103,78689,78690],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[103,78692,78693],{},"const fn=uname=>({uname:uname})",[103,78695,78696],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[103,78698,78699],{},[109,78700],{"alt":29,"src":78701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[103,78703,78704],{},[109,78705],{"alt":29,"src":78706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[103,78708,78709],{},[109,78710],{"alt":29,"src":78711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[103,78713,78714],{},"一定不要忘记用()，有()就理解为自带return",[1353,78716,78718],{"id":78717},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[103,78720,78721],{},"箭头函数是没有动态参数的arguments",[103,78723,78724],{},[109,78725],{"alt":29,"src":78726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[1353,78728,78730],{"id":78729},"_4533-箭头函数this","4.5.3.3 箭头函数this",[103,78732,12982],{},[1772,78734,78735,78738,78741],{},[1775,78736,78737],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[1775,78739,78740],{},"事件回调函数使用箭头函数时，this 为全局的 window",[1775,78742,78743],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[103,78745,78746],{},[109,78747],{"alt":29,"src":78748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[24,78750,78752],{"className":54706,"code":78751,"language":54708,"meta":29,"style":29},"  \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",[31,78753,78754,78762,78767,78772,78777,78782,78787,78791,78796,78800,78804,78809,78814,78819,78823,78827,78832,78837,78842],{"__ignoreMap":29},[34,78755,78756,78758,78760],{"class":36,"line":37},[34,78757,53783],{"class":40},[34,78759,53452],{"class":52939},[34,78761,52946],{"class":40},[34,78763,78764],{"class":36,"line":165},[34,78765,78766],{"class":40},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[34,78768,78769],{"class":36,"line":171},[34,78770,78771],{"class":40},"    console.log(this) \u002F\u002F指向window\n",[34,78773,78774],{"class":36,"line":182},[34,78775,78776],{"class":40},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[34,78778,78779],{"class":36,"line":188},[34,78780,78781],{"class":40},"    function fn() {\n",[34,78783,78784],{"class":36,"line":518},[34,78785,78786],{"class":40},"      console.log(this)  \u002F\u002F指向window\n",[34,78788,78789],{"class":36,"line":524},[34,78790,3841],{"class":40},[34,78792,78793],{"class":36,"line":530},[34,78794,78795],{"class":40},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[34,78797,78798],{"class":36,"line":624},[34,78799,1475],{"emptyLinePlaceholder":1474},[34,78801,78802],{"class":36,"line":630},[34,78803,73162],{"class":40},[34,78805,78806],{"class":36,"line":636},[34,78807,78808],{"class":40},"      name: 'andy',\n",[34,78810,78811],{"class":36,"line":1513},[34,78812,78813],{"class":40},"      sayHai: function () {\n",[34,78815,78816],{"class":36,"line":1519},[34,78817,78818],{"class":40},"        console.log(this)\n",[34,78820,78821],{"class":36,"line":3283},[34,78822,54037],{"class":40},[34,78824,78825],{"class":36,"line":3297},[34,78826,3841],{"class":40},[34,78828,78829],{"class":36,"line":3302},[34,78830,78831],{"class":40},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[34,78833,78834],{"class":36,"line":3308},[34,78835,78836],{"class":40},"    \u002F\u002F 2.箭头函数的this\n",[34,78838,78839],{"class":36,"line":3328},[34,78840,78841],{"class":40},"    const fn = () => console.log(this)\n",[34,78843,78844,78846,78848],{"class":36,"line":3333},[34,78845,54056],{"class":40},[34,78847,53452],{"class":52939},[34,78849,52946],{"class":40},[103,78851,78852],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[103,78854,78855],{},"const fn = () => console.log(this)",[103,78857,78858],{},"fn() \u002F\u002F指向window",[103,78860,78861],{},"\u002F\u002F 3.对象方法箭头函数 this",[103,78863,78864],{},"①",[103,78866,78867],{},"const obj = {",[103,78869,78870],{},"uname: 'pink老师',",[103,78872,78873],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[103,78875,2737],{},[103,78877,78878],{},"调用对象里边的函数",[103,78880,78881],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[103,78883,78884],{},"obj.sayHai()",[103,78886,78887],{},"②",[103,78889,78890],{},"const obj1 = {",[103,78892,78870],{},[103,78894,78895],{},"sayHai: function () {",[103,78897,78898],{},"let i = 10",[103,78900,78901],{},"const count = () => {",[103,78903,78904],{},"console.log(this)",[103,78906,78907],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[103,78909,78910],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[103,78912,2737],{},[103,78914,78915],{},"count()",[103,78917,2737],{},[103,78919,2737],{},[103,78921,78922],{},"obj1.sayHai()",[14,78924,78926],{"id":78925},"_46-解构赋值","4.6 解构赋值",[19,78928,78930],{"id":78929},"_461-数组解构","4.6.1 数组解构",[103,78932,78933],{},"以前要是使用数组中的值的话：",[103,78935,78936],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[103,78938,78939],{},"const arr=[100,60,80]",[103,78941,78942],{},"const max=arr[0]",[103,78944,78945],{},"const min=arr[1]",[103,78947,78948],{},"const avg=arr[2]",[103,78950,78951],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[103,78953,78954],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[103,78956,78957],{},"这个写法就类似于上边的那种用很多const的方法",[103,78959,78960],{},[109,78961],{"alt":29,"src":78962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[24,78964,78966],{"className":52272,"code":78965,"language":52274,"meta":29,"style":29},"①变量之间交换值:\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",[31,78967,78968,78973,78978,78983,78988,78993,78997,79001,79006,79010,79015,79020,79024,79029,79034,79044,79054,79059,79064,79069,79073,79077],{"__ignoreMap":29},[34,78969,78970],{"class":36,"line":37},[34,78971,78972],{"class":40},"①变量之间交换值:\n",[34,78974,78975],{"class":36,"line":165},[34,78976,78977],{"class":40},"let a=1\n",[34,78979,78980],{"class":36,"line":171},[34,78981,78982],{"class":40},"let b=2;\n",[34,78984,78985],{"class":36,"line":182},[34,78986,78987],{"class":40},"必须加这行代码，不然就会报错\n",[34,78989,78990],{"class":36,"line":188},[34,78991,78992],{"class":40},"[b,a]=[a,b]\n",[34,78994,78995],{"class":36,"line":518},[34,78996,1475],{"emptyLinePlaceholder":1474},[34,78998,78999],{"class":36,"line":524},[34,79000,1475],{"emptyLinePlaceholder":1474},[34,79002,79003],{"class":36,"line":530},[34,79004,79005],{"class":40},"可以写成下面的方式：\n",[34,79007,79008],{"class":36,"line":624},[34,79009,78977],{"class":40},[34,79011,79012],{"class":36,"line":630},[34,79013,79014],{"class":40},"let b=2\n",[34,79016,79017],{"class":36,"line":636},[34,79018,79019],{"class":40},";[b,a]=[a,b]\n",[34,79021,79022],{"class":36,"line":1513},[34,79023,1475],{"emptyLinePlaceholder":1474},[34,79025,79026],{"class":36,"line":1519},[34,79027,79028],{"class":40},"②排序\n",[34,79030,79031],{"class":36,"line":3283},[34,79032,79033],{"class":40},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[34,79035,79036,79039,79041],{"class":36,"line":3297},[34,79037,79038],{"class":40},"for (let i = 0; i ",[34,79040,2701],{"class":1204},[34,79042,79043],{"class":40}," arr1.length; i++) {\n",[34,79045,79046,79049,79051],{"class":36,"line":3302},[34,79047,79048],{"class":40},"   for (let j = 0; j ",[34,79050,2701],{"class":1204},[34,79052,79053],{"class":40}," arr1.length - 1; j++) {\n",[34,79055,79056],{"class":36,"line":3308},[34,79057,79058],{"class":40},"      if (arr1[j] > arr1[j + 1]) {\n",[34,79060,79061],{"class":36,"line":3328},[34,79062,79063],{"class":40},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[34,79065,79066],{"class":36,"line":3333},[34,79067,79068],{"class":40},"       }\n",[34,79070,79071],{"class":36,"line":3347},[34,79072,5961],{"class":40},[34,79074,79075],{"class":36,"line":3352},[34,79076,3223],{"class":40},[34,79078,79079],{"class":36,"line":3381},[34,79080,79081],{"class":40},"console.log(arr1)\n",[103,79083,79084],{},"数组解构的细节：",[103,79086,79087],{},"①变量多，单元值少",[103,79089,79090],{},[109,79091],{"alt":29,"src":79092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[103,79094,79095],{},"防止出现undefined的方法：",[103,79097,79098],{},"const [a=0,b=0] =[1]",[103,79100,79101],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[103,79103,79104],{},"②变量少，单元值多",[103,79106,79107],{},[109,79108],{"alt":29,"src":79109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[103,79111,79112],{},"此时可以使用剩余参数来接收多余的值",[103,79114,79115],{},"const [a,b,...c]=[1,2,3,4]",[103,79117,79118],{},"console.log(c) 输出[3,4]",[103,79120,79121],{},"③可以按需导入，忽略某些返回值",[103,79123,79124],{},[109,79125],{"alt":29,"src":79126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[103,79128,79129],{},"④支持多维数组的结构",[24,79131,79135],{"className":79132,"code":79133,"language":79134,"meta":29,"style":29},"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",[31,79136,79137,79165,79181,79196,79211],{"__ignoreMap":29},[34,79138,79139,79141,79143,79145,79147,79149,79151,79153,79156,79158,79160,79162],{"class":36,"line":37},[34,79140,8442],{"class":55},[34,79142,53472],{"class":40},[34,79144,221],{"class":55},[34,79146,53865],{"class":40},[34,79148,394],{"class":44},[34,79150,48],{"class":40},[34,79152,332],{"class":44},[34,79154,79155],{"class":40},", [",[34,79157,337],{"class":44},[34,79159,48],{"class":40},[34,79161,247],{"class":44},[34,79163,79164],{"class":40},"]]\n",[34,79166,79167,79170,79172,79174,79176,79178],{"class":36,"line":165},[34,79168,79169],{"class":40},"console.",[34,79171,59886],{"class":3617},[34,79173,5504],{"class":40},[34,79175,177],{"class":44},[34,79177,5868],{"class":40},[34,79179,79180],{"class":161},"  \u002F\u002F1\n",[34,79182,79183,79185,79187,79189,79191,79193],{"class":36,"line":171},[34,79184,79169],{"class":40},[34,79186,59886],{"class":3617},[34,79188,5504],{"class":40},[34,79190,394],{"class":44},[34,79192,5868],{"class":40},[34,79194,79195],{"class":161},"  \u002F\u002F2\n",[34,79197,79198,79200,79202,79204,79206,79208],{"class":36,"line":182},[34,79199,79169],{"class":40},[34,79201,59886],{"class":3617},[34,79203,5504],{"class":40},[34,79205,332],{"class":44},[34,79207,5868],{"class":40},[34,79209,79210],{"class":161},"  \u002F\u002F[3,4]\n",[34,79212,79213,79215,79217,79219,79221,79223,79225,79227],{"class":36,"line":188},[34,79214,79169],{"class":40},[34,79216,59886],{"class":3617},[34,79218,5504],{"class":40},[34,79220,332],{"class":44},[34,79222,6552],{"class":40},[34,79224,177],{"class":44},[34,79226,5868],{"class":40},[34,79228,79229],{"class":161},"  \u002F\u002F3\n",[24,79231,79233],{"className":79132,"code":79232,"language":79134,"meta":29,"style":29},"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",[31,79234,79235,79262,79273,79284],{"__ignoreMap":29},[34,79236,79237,79239,79242,79244,79246,79248,79250,79252,79254,79256,79258,79260],{"class":36,"line":37},[34,79238,8442],{"class":55},[34,79240,79241],{"class":40}," [a, b, c] ",[34,79243,221],{"class":55},[34,79245,53865],{"class":40},[34,79247,394],{"class":44},[34,79249,48],{"class":40},[34,79251,332],{"class":44},[34,79253,79155],{"class":40},[34,79255,337],{"class":44},[34,79257,48],{"class":40},[34,79259,247],{"class":44},[34,79261,79164],{"class":40},[34,79263,79264,79266,79268,79271],{"class":36,"line":165},[34,79265,79169],{"class":40},[34,79267,59886],{"class":3617},[34,79269,79270],{"class":40},"(a)",[34,79272,79180],{"class":161},[34,79274,79275,79277,79279,79282],{"class":36,"line":171},[34,79276,79169],{"class":40},[34,79278,59886],{"class":3617},[34,79280,79281],{"class":40},"(b)",[34,79283,79195],{"class":161},[34,79285,79286,79288,79290,79293],{"class":36,"line":182},[34,79287,79169],{"class":40},[34,79289,59886],{"class":3617},[34,79291,79292],{"class":40},"(c)",[34,79294,79210],{"class":161},[24,79296,79298],{"className":79132,"code":79297,"language":79134,"meta":29,"style":29},"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",[31,79299,79300,79327,79337,79347,79357],{"__ignoreMap":29},[34,79301,79302,79304,79307,79309,79311,79313,79315,79317,79319,79321,79323,79325],{"class":36,"line":37},[34,79303,8442],{"class":55},[34,79305,79306],{"class":40}," [a, b, [c, d]] ",[34,79308,221],{"class":55},[34,79310,53865],{"class":40},[34,79312,394],{"class":44},[34,79314,48],{"class":40},[34,79316,332],{"class":44},[34,79318,79155],{"class":40},[34,79320,337],{"class":44},[34,79322,48],{"class":40},[34,79324,247],{"class":44},[34,79326,79164],{"class":40},[34,79328,79329,79331,79333,79335],{"class":36,"line":165},[34,79330,79169],{"class":40},[34,79332,59886],{"class":3617},[34,79334,79270],{"class":40},[34,79336,79180],{"class":161},[34,79338,79339,79341,79343,79345],{"class":36,"line":171},[34,79340,79169],{"class":40},[34,79342,59886],{"class":3617},[34,79344,79281],{"class":40},[34,79346,79195],{"class":161},[34,79348,79349,79351,79353,79355],{"class":36,"line":182},[34,79350,79169],{"class":40},[34,79352,59886],{"class":3617},[34,79354,79292],{"class":40},[34,79356,79229],{"class":161},[34,79358,79359,79361,79363,79366],{"class":36,"line":188},[34,79360,79169],{"class":40},[34,79362,59886],{"class":3617},[34,79364,79365],{"class":40},"(d)",[34,79367,79368],{"class":161},"  \u002F\u002F4\n",[19,79370,79372],{"id":79371},"_462-对象解构","4.6.2 对象解构",[103,79374,79375],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[103,79377,79378],{},"用的非常非常多！！！！！！",[1353,79380,79382],{"id":79381},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[103,79384,79385],{},"基本语法：",[1772,79387,79388,79391,79394,79397],{},[1775,79389,79390],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[1775,79392,79393],{},"对象属性的值将被赋值给与属性名相同的变量",[1775,79395,79396],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[1775,79398,79399],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[24,79401,79403],{"className":52272,"code":79402,"language":52274,"meta":29,"style":29},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[31,79404,79405,79410,79415,79420,79424],{"__ignoreMap":29},[34,79406,79407],{"class":36,"line":37},[34,79408,79409],{"class":40},"const obj = {\n",[34,79411,79412],{"class":36,"line":165},[34,79413,79414],{"class":40},"   uname: 'pink老师',\n",[34,79416,79417],{"class":36,"line":171},[34,79418,79419],{"class":40},"   age: 18,\n",[34,79421,79422],{"class":36,"line":182},[34,79423,3223],{"class":40},[34,79425,79426],{"class":36,"line":188},[34,79427,79428],{"class":40},"const { uname, age } = obj\n",[103,79430,79431],{},"上方代码这样写等价于：",[103,79433,79434],{},"const uname等价于obj.uname",[103,79436,79437],{},"变量名可以重新改名：",[103,79439,79440],{},"const uname='red老师'",[103,79442,79443],{},"const user={",[103,79445,79446],{},"  uname:'pink老师',",[103,79448,79449],{},"  age:18",[103,79451,2737],{},[103,79453,79454],{},"const {uname,age}=user",[103,79456,79457],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[103,79459,79460],{},"const {旧变量名：新变量名}=对象",[103,79462,79463],{},"const {uname:username,age}=user",[1353,79465,79467],{"id":79466},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[103,79469,79470],{},[109,79471],{"alt":29,"src":79472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[1353,79474,79476],{"id":79475},"_4623-多级对象解构","4.6.2.3 多级对象解构",[103,79478,79479],{},[109,79480],{"alt":29,"src":79481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[24,79483,79485],{"className":54706,"code":79484,"language":54708,"meta":29,"style":29},"  \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",[31,79486,79487,79495,79500,79505,79510,79515,79520,79525,79530,79535,79539,79544,79549],{"__ignoreMap":29},[34,79488,79489,79491,79493],{"class":36,"line":37},[34,79490,53783],{"class":40},[34,79492,53452],{"class":52939},[34,79494,52946],{"class":40},[34,79496,79497],{"class":36,"line":165},[34,79498,79499],{"class":40},"    const pig = {\n",[34,79501,79502],{"class":36,"line":171},[34,79503,79504],{"class":40},"      name: '佩奇',\n",[34,79506,79507],{"class":36,"line":182},[34,79508,79509],{"class":40},"      family: {\n",[34,79511,79512],{"class":36,"line":188},[34,79513,79514],{"class":40},"        mother: '猪妈妈',\n",[34,79516,79517],{"class":36,"line":518},[34,79518,79519],{"class":40},"        father: '猪爸爸',\n",[34,79521,79522],{"class":36,"line":524},[34,79523,79524],{"class":40},"        sister: '乔治'\n",[34,79526,79527],{"class":36,"line":530},[34,79528,79529],{"class":40},"      },\n",[34,79531,79532],{"class":36,"line":624},[34,79533,79534],{"class":40},"      age: 6\n",[34,79536,79537],{"class":36,"line":630},[34,79538,3841],{"class":40},[34,79540,79541],{"class":36,"line":636},[34,79542,79543],{"class":40},"    \u002F\u002F 多级对象解构\n",[34,79545,79546],{"class":36,"line":1513},[34,79547,79548],{"class":40},"    const { name, family: { mother, father, sister }, age } = pig\n",[34,79550,79551,79553,79555],{"class":36,"line":1519},[34,79552,54056],{"class":40},[34,79554,53452],{"class":52939},[34,79556,52946],{"class":40},[103,79558,79559],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[24,79561,79564],{"className":79562,"code":79563,"language":78085,"meta":29,"style":29},"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",[31,79565,79566,79571,79582,79594,79606,79615,79619,79630,79642,79652,79657,79661,79671,79682,79691,79695,79699,79710,79721,79730,79734,79739],{"__ignoreMap":29},[34,79567,79568],{"class":36,"line":37},[34,79569,79570],{"class":161},"    \u002F\u002F 这是后台传递过来的数据\n",[34,79572,79573,79575,79578,79580],{"class":36,"line":165},[34,79574,12871],{"class":55},[34,79576,79577],{"class":40}," msg ",[34,79579,221],{"class":55},[34,79581,17218],{"class":40},[34,79583,79584,79587,79589,79592],{"class":36,"line":171},[34,79585,79586],{"class":504},"      \"code\"",[34,79588,2650],{"class":55},[34,79590,79591],{"class":44}," 200",[34,79593,33108],{"class":40},[34,79595,79596,79599,79601,79604],{"class":36,"line":182},[34,79597,79598],{"class":504},"      \"msg\"",[34,79600,2650],{"class":55},[34,79602,79603],{"class":504}," \"获取新闻列表成功\"",[34,79605,33108],{"class":40},[34,79607,79608,79611,79613],{"class":36,"line":188},[34,79609,79610],{"class":504},"      \"data\"",[34,79612,2650],{"class":55},[34,79614,57086],{"class":40},[34,79616,79617],{"class":36,"line":518},[34,79618,4163],{"class":40},[34,79620,79621,79624,79626,79628],{"class":36,"line":524},[34,79622,79623],{"class":504},"          \"id\"",[34,79625,2650],{"class":55},[34,79627,26764],{"class":44},[34,79629,33108],{"class":40},[34,79631,79632,79635,79637,79640],{"class":36,"line":530},[34,79633,79634],{"class":504},"          \"title\"",[34,79636,2650],{"class":55},[34,79638,79639],{"class":504}," \"5G商用自己，三大运用商收入下降\"",[34,79641,33108],{"class":40},[34,79643,79644,79647,79649],{"class":36,"line":624},[34,79645,79646],{"class":504},"          \"count\"",[34,79648,2650],{"class":55},[34,79650,79651],{"class":44}," 58\n",[34,79653,79654],{"class":36,"line":630},[34,79655,79656],{"class":40},"        },\n",[34,79658,79659],{"class":36,"line":636},[34,79660,4163],{"class":40},[34,79662,79663,79665,79667,79669],{"class":36,"line":1513},[34,79664,79623],{"class":504},[34,79666,2650],{"class":55},[34,79668,16401],{"class":44},[34,79670,33108],{"class":40},[34,79672,79673,79675,79677,79680],{"class":36,"line":1519},[34,79674,79634],{"class":504},[34,79676,2650],{"class":55},[34,79678,79679],{"class":504}," \"国际媒体头条速览\"",[34,79681,33108],{"class":40},[34,79683,79684,79686,79688],{"class":36,"line":3283},[34,79685,79646],{"class":504},[34,79687,2650],{"class":55},[34,79689,79690],{"class":44}," 56\n",[34,79692,79693],{"class":36,"line":3297},[34,79694,79656],{"class":40},[34,79696,79697],{"class":36,"line":3302},[34,79698,4163],{"class":40},[34,79700,79701,79703,79705,79708],{"class":36,"line":3308},[34,79702,79623],{"class":504},[34,79704,2650],{"class":55},[34,79706,79707],{"class":44}," 3",[34,79709,33108],{"class":40},[34,79711,79712,79714,79716,79719],{"class":36,"line":3328},[34,79713,79634],{"class":504},[34,79715,2650],{"class":55},[34,79717,79718],{"class":504}," \"乌克兰和俄罗斯持续冲突\"",[34,79720,33108],{"class":40},[34,79722,79723,79725,79727],{"class":36,"line":3333},[34,79724,79646],{"class":504},[34,79726,2650],{"class":55},[34,79728,79729],{"class":44}," 1669\n",[34,79731,79732],{"class":36,"line":3347},[34,79733,79656],{"class":40},[34,79735,79736],{"class":36,"line":3352},[34,79737,79738],{"class":40},"      ]\n",[34,79740,79741],{"class":36,"line":3381},[34,79742,3841],{"class":40},[103,79744,79745],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[103,79747,79748],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[103,79750,79751],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[103,79753,79754],{},"function({data}) {",[103,79756,79757],{},"console.log(data)",[103,79759,2737],{},[103,79761,79762],{},"render(msg)",[103,79764,79765],{},"实参传递给形参的时候解构了",[103,79767,79768],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[103,79770,79771],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[103,79773,79774],{},"function render({data:mydata}) {",[103,79776,79777],{},"  console.log(data)",[103,79779,2737],{},[19,79781,79783],{"id":79782},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[103,79785,79786],{},"有两种情况：一个是数组结构，一个是立即执行函数",[1772,79788,79789],{},[1775,79790,79791],{},"如果对一个数组进行遍历，有两种方式：",[103,79793,79794],{},"①法1",[103,79796,79797],{},"const arr=[1,2,3]",[103,79799,79800],{},"arr.map(function(item,index) {",[103,79802,79803],{},"  console.log(item)",[103,79805,54103],{},[103,79807,79808],{},[109,79809],{"alt":29,"src":79810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[103,79812,79813],{},"②法2",[103,79815,79816],{},"const str='pink'",[103,79818,79819],{},"[1,2,3].map(function(item,index) {",[103,79821,79822],{},"console.log(item)",[103,79824,54103],{},[103,79826,79827],{},[109,79828],{"alt":29,"src":79829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[103,79831,79832],{},"此时会报错",[103,79834,79835],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[103,79837,79822],{},[103,79839,54103],{},[103,79841,79842],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79844,79846],{"id":79845},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[103,79848,79849],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[103,79851,79852],{},"可以理解为加强版的for循环",[103,79854,79855],{},[109,79856],{"alt":29,"src":79857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[103,79859,79860],{},"里边不写return，不返回数组，只遍历不返回",[103,79862,79863],{},"map是返回数组",[103,79865,79866],{},"forEach主要用于遍历数组对象",[24,79868,79870],{"className":54706,"code":79869,"language":54708,"meta":29,"style":29},"  \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",[31,79871,79872,79880,79885,79890,79895,79900,79904,79909],{"__ignoreMap":29},[34,79873,79874,79876,79878],{"class":36,"line":37},[34,79875,53783],{"class":40},[34,79877,53452],{"class":52939},[34,79879,52946],{"class":40},[34,79881,79882],{"class":36,"line":165},[34,79883,79884],{"class":40},"    const arr = ['red', 'green', 'pink']\n",[34,79886,79887],{"class":36,"line":171},[34,79888,79889],{"class":40},"    const result = arr.forEach(function (item, index) {\n",[34,79891,79892],{"class":36,"line":182},[34,79893,79894],{"class":40},"      console.log(item)\n",[34,79896,79897],{"class":36,"line":188},[34,79898,79899],{"class":40},"      console.log(index)\n",[34,79901,79902],{"class":36,"line":518},[34,79903,35102],{"class":40},[34,79905,79906],{"class":36,"line":524},[34,79907,79908],{"class":40},"    console.log(result)\n",[34,79910,79911,79913,79915],{"class":36,"line":530},[34,79912,54056],{"class":40},[34,79914,53452],{"class":52939},[34,79916,52946],{"class":40},[103,79918,79919],{},[109,79920],{"alt":29,"src":79921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79923,79925],{"id":79924},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[103,79927,79928],{},[109,79929],{"alt":29,"src":79930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[103,79932,79933],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[24,79935,79937],{"className":54706,"code":79936,"language":54708,"meta":29,"style":29},"\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",[31,79938,79939,79947,79955,79960,79965,79969,79973,79978,79982,79987,79995],{"__ignoreMap":29},[34,79940,79941,79943,79945],{"class":36,"line":37},[34,79942,2701],{"class":40},[34,79944,53439],{"class":52939},[34,79946,52946],{"class":40},[34,79948,79949,79951,79953],{"class":36,"line":165},[34,79950,53783],{"class":40},[34,79952,53452],{"class":52939},[34,79954,52946],{"class":40},[34,79956,79957],{"class":36,"line":171},[34,79958,79959],{"class":40},"    const arr = [10, 20, 30]\n",[34,79961,79962],{"class":36,"line":182},[34,79963,79964],{"class":40},"    const newArr = arr.filter(function (item, index) {\n",[34,79966,79967],{"class":36,"line":188},[34,79968,79894],{"class":40},[34,79970,79971],{"class":36,"line":518},[34,79972,79899],{"class":40},[34,79974,79975],{"class":36,"line":524},[34,79976,79977],{"class":40},"      return item >= 20\n",[34,79979,79980],{"class":36,"line":530},[34,79981,35102],{"class":40},[34,79983,79984],{"class":36,"line":624},[34,79985,79986],{"class":40},"    console.log(newArr)\n",[34,79988,79989,79991,79993],{"class":36,"line":630},[34,79990,54056],{"class":40},[34,79992,53452],{"class":52939},[34,79994,52946],{"class":40},[34,79996,79997,79999,80001],{"class":36,"line":636},[34,79998,53424],{"class":40},[34,80000,53439],{"class":52939},[34,80002,52946],{"class":40},[103,80004,80005],{},"这个也可以写成箭头函数：",[24,80007,80009],{"className":52272,"code":80008,"language":52274,"meta":29,"style":29},"const newArr = arr.filter(item => item >= 20)\n",[31,80010,80011],{"__ignoreMap":29},[34,80012,80013],{"class":36,"line":37},[34,80014,80008],{"class":40},[14,80016,80018],{"id":80017},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[103,80020,80021],{},[109,80022],{"alt":29,"src":80023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[103,80025,80026],{},"步骤：",[103,80028,80029],{},"①：渲染页面模块",[2798,80031,80032,80035],{},[1775,80033,80034],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[1775,80036,80037],{},"用forEach+字符串的形式",[103,80039,80040],{},"②：点击不同需求，显示不同页面内容",[2798,80042,80043,80046,80049,80052,80055],{},[1775,80044,80045],{},"点击采取事件委托方式 .filter",[1775,80047,80048],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[1775,80050,80051],{},"筛选条件是根据点击的 data-index 来判断",[1775,80053,80054],{},"可以使用对象解构，把事件对象解构",[1775,80056,80057],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[24,80059,80061],{"className":52272,"code":80060,"language":52274,"meta":29,"style":29},"\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",[31,80062,80063,80073,80087,80091,80099,80113,80133,80145,80153,80159,80169,80179,80189,80193,80197,80203,80216,80228,80238,80250,80254,80258,80265,80278,80290,80307,80325,80338,80342,80346,80358,80368,80372,80376,80383,80424,80451,80461,80465,80469,80477,80489,80493,80497,80505,80517,80529,80540,80544,80548,80557,80569,80580,80584,80588,80597,80609,80621,80625,80629,80636,80646,80658,80670,80685,80689,80693,80701,80717,80727,80737,80747,80759,80763,80767,80777,80788,80798,80802,80810,80818,80822,80830,80845,80871,80896,80921,80940,80948,80962,80967,80972,80977,80982,80987,80995,81003,81008,81019,81024,81034,81044,81054,81064,81068,81072,81081,81090,81099,81108,81112,81116,81125,81134,81143,81152,81156,81160,81169,81178,81187,81196,81200,81204,81213,81222,81231,81240,81244,81248,81257,81266,81275,81284,81288,81292,81301,81310,81319,81328,81332,81336,81345,81354,81362,81371,81375,81379,81383,81388,81400,81405,81417,81421,81438,81466,81475,81480,81490,81500,81509,81514,81519,81523,81528,81545,81549,81554,81562,81567,81594,81599,81619,81624,81636,81641,81646,81651,81662,81676,81713,81731,81764,81781,81805,81809,81814,81820,81824,81828,81832,81840,81848,81852],{"__ignoreMap":29},[34,80064,80065,80067,80069,80071],{"class":36,"line":37},[34,80066,52936],{"class":40},[34,80068,52940],{"class":52939},[34,80070,52943],{"class":3617},[34,80072,52946],{"class":40},[34,80074,80075,80077,80079,80081,80083,80085],{"class":36,"line":165},[34,80076,2701],{"class":40},[34,80078,52274],{"class":52939},[34,80080,52955],{"class":3617},[34,80082,221],{"class":40},[34,80084,52960],{"class":504},[34,80086,52946],{"class":40},[34,80088,80089],{"class":36,"line":171},[34,80090,1475],{"emptyLinePlaceholder":1474},[34,80092,80093,80095,80097],{"class":36,"line":182},[34,80094,2701],{"class":40},[34,80096,52973],{"class":52939},[34,80098,52946],{"class":40},[34,80100,80101,80103,80105,80107,80109,80111],{"class":36,"line":188},[34,80102,53783],{"class":40},[34,80104,52983],{"class":52939},[34,80106,52986],{"class":3617},[34,80108,221],{"class":40},[34,80110,52991],{"class":504},[34,80112,52946],{"class":40},[34,80114,80115,80117,80119,80121,80123,80125,80127,80129,80131],{"class":36,"line":518},[34,80116,53783],{"class":40},[34,80118,52983],{"class":52939},[34,80120,16566],{"class":3617},[34,80122,221],{"class":40},[34,80124,53030],{"class":504},[34,80126,53010],{"class":3617},[34,80128,221],{"class":40},[34,80130,53037],{"class":504},[34,80132,52946],{"class":40},[34,80134,80135,80137,80139,80141,80143],{"class":36,"line":524},[34,80136,53783],{"class":40},[34,80138,53046],{"class":52939},[34,80140,53049],{"class":40},[34,80142,53046],{"class":52939},[34,80144,52946],{"class":40},[34,80146,80147,80149,80151],{"class":36,"line":530},[34,80148,53783],{"class":40},[34,80150,1711],{"class":52939},[34,80152,52946],{"class":40},[34,80154,80155,80157],{"class":36,"line":624},[34,80156,8053],{"class":52939},[34,80158,17218],{"class":40},[34,80160,80161,80163,80165,80167],{"class":36,"line":630},[34,80162,56334],{"class":44},[34,80164,53076],{"class":40},[34,80166,177],{"class":44},[34,80168,2952],{"class":40},[34,80170,80171,80173,80175,80177],{"class":36,"line":636},[34,80172,56345],{"class":44},[34,80174,53076],{"class":40},[34,80176,177],{"class":44},[34,80178,2952],{"class":40},[34,80180,80181,80183,80185,80187],{"class":36,"line":1513},[34,80182,74235],{"class":44},[34,80184,53076],{"class":40},[34,80186,62144],{"class":44},[34,80188,2952],{"class":40},[34,80190,80191],{"class":36,"line":1519},[34,80192,3841],{"class":40},[34,80194,80195],{"class":36,"line":3283},[34,80196,1475],{"emptyLinePlaceholder":1474},[34,80198,80199,80201],{"class":36,"line":3297},[34,80200,63762],{"class":3617},[34,80202,17218],{"class":40},[34,80204,80205,80207,80209,80212,80214],{"class":36,"line":3302},[34,80206,56410],{"class":44},[34,80208,53076],{"class":40},[34,80210,80211],{"class":44},"990",[34,80213,53131],{"class":55},[34,80215,2952],{"class":40},[34,80217,80218,80220,80222,80224,80226],{"class":36,"line":3308},[34,80219,56345],{"class":44},[34,80221,53076],{"class":40},[34,80223,177],{"class":44},[34,80225,53195],{"class":44},[34,80227,2952],{"class":40},[34,80229,80230,80232,80234,80236],{"class":36,"line":3328},[34,80231,56648],{"class":44},[34,80233,53076],{"class":40},[34,80235,53116],{"class":44},[34,80237,2952],{"class":40},[34,80239,80240,80243,80245,80248],{"class":36,"line":3333},[34,80241,80242],{"class":44},"      flex-wrap",[34,80244,53076],{"class":40},[34,80246,80247],{"class":44},"wrap",[34,80249,2952],{"class":40},[34,80251,80252],{"class":36,"line":3347},[34,80253,3841],{"class":40},[34,80255,80256],{"class":36,"line":3352},[34,80257,1475],{"emptyLinePlaceholder":1474},[34,80259,80260,80263],{"class":36,"line":3381},[34,80261,80262],{"class":3617},"    .item",[34,80264,17218],{"class":40},[34,80266,80267,80269,80271,80274,80276],{"class":36,"line":3386},[34,80268,56410],{"class":44},[34,80270,53076],{"class":40},[34,80272,80273],{"class":44},"240",[34,80275,53131],{"class":55},[34,80277,2952],{"class":40},[34,80279,80280,80282,80284,80286,80288],{"class":36,"line":3403},[34,80281,63639],{"class":44},[34,80283,53076],{"class":40},[34,80285,410],{"class":44},[34,80287,53131],{"class":55},[34,80289,2952],{"class":40},[34,80291,80292,80294,80296,80298,80300,80303,80305],{"class":36,"line":3408},[34,80293,56334],{"class":44},[34,80295,53076],{"class":40},[34,80297,1249],{"class":44},[34,80299,53131],{"class":55},[34,80301,80302],{"class":44}," 30",[34,80304,53131],{"class":55},[34,80306,2952],{"class":40},[34,80308,80309,80311,80313,80315,80318,80321,80323],{"class":36,"line":3413},[34,80310,63499],{"class":44},[34,80312,53076],{"class":40},[34,80314,29767],{"class":44},[34,80316,80317],{"class":44}," ease",[34,80319,80320],{"class":44}," .5",[34,80322,2490],{"class":55},[34,80324,2952],{"class":40},[34,80326,80327,80330,80332,80334,80336],{"class":36,"line":3418},[34,80328,80329],{"class":44},"      margin-bottom",[34,80331,53076],{"class":40},[34,80333,1249],{"class":44},[34,80335,53131],{"class":55},[34,80337,2952],{"class":40},[34,80339,80340],{"class":36,"line":3432},[34,80341,3841],{"class":40},[34,80343,80344],{"class":36,"line":3437},[34,80345,1475],{"emptyLinePlaceholder":1474},[34,80347,80348,80351,80353,80356],{"class":36,"line":4230},[34,80349,80350],{"class":3617},"    .item:nth-child",[34,80352,286],{"class":40},[34,80354,80355],{"class":44},"4n",[34,80357,14090],{"class":40},[34,80359,80360,80362,80364,80366],{"class":36,"line":4244},[34,80361,63639],{"class":44},[34,80363,53076],{"class":40},[34,80365,177],{"class":44},[34,80367,2952],{"class":40},[34,80369,80370],{"class":36,"line":4252},[34,80371,3841],{"class":40},[34,80373,80374],{"class":36,"line":4257},[34,80375,1475],{"emptyLinePlaceholder":1474},[34,80377,80378,80381],{"class":36,"line":4263},[34,80379,80380],{"class":3617},"    .item:hover",[34,80382,17218],{"class":40},[34,80384,80385,80388,80390,80392,80394,80396,80398,80400,80402,80405,80407,80409,80411,80413,80415,80417,80419,80422],{"class":36,"line":4269},[34,80386,80387],{"class":44},"      box-shadow",[34,80389,53076],{"class":40},[34,80391,177],{"class":44},[34,80393,53131],{"class":55},[34,80395,98],{"class":44},[34,80397,53131],{"class":55},[34,80399,3802],{"class":44},[34,80401,53131],{"class":55},[34,80403,80404],{"class":44}," rgba",[34,80406,286],{"class":40},[34,80408,177],{"class":44},[34,80410,48],{"class":40},[34,80412,177],{"class":44},[34,80414,48],{"class":40},[34,80416,177],{"class":44},[34,80418,48],{"class":40},[34,80420,80421],{"class":44},".2",[34,80423,4372],{"class":40},[34,80425,80426,80429,80431,80434,80436,80438,80440,80443,80445,80447,80449],{"class":36,"line":4274},[34,80427,80428],{"class":44},"      transform",[34,80430,53076],{"class":40},[34,80432,80433],{"class":44},"translate3d",[34,80435,286],{"class":40},[34,80437,177],{"class":44},[34,80439,48],{"class":40},[34,80441,80442],{"class":44},"-4",[34,80444,53131],{"class":55},[34,80446,48],{"class":40},[34,80448,177],{"class":44},[34,80450,4372],{"class":40},[34,80452,80453,80455,80457,80459],{"class":36,"line":9598},[34,80454,63664],{"class":44},[34,80456,53076],{"class":40},[34,80458,63669],{"class":44},[34,80460,2952],{"class":40},[34,80462,80463],{"class":36,"line":9622},[34,80464,3841],{"class":40},[34,80466,80467],{"class":36,"line":9627},[34,80468,1475],{"emptyLinePlaceholder":1474},[34,80470,80471,80473,80475],{"class":36,"line":9633},[34,80472,80262],{"class":3617},[34,80474,57254],{"class":52939},[34,80476,17218],{"class":40},[34,80478,80479,80481,80483,80485,80487],{"class":36,"line":9660},[34,80480,56410],{"class":44},[34,80482,53076],{"class":40},[34,80484,451],{"class":44},[34,80486,2131],{"class":55},[34,80488,2952],{"class":40},[34,80490,80491],{"class":36,"line":9665},[34,80492,3841],{"class":40},[34,80494,80495],{"class":36,"line":9671},[34,80496,1475],{"emptyLinePlaceholder":1474},[34,80498,80499,80501,80503],{"class":36,"line":9683},[34,80500,80262],{"class":3617},[34,80502,63943],{"class":3617},[34,80504,17218],{"class":40},[34,80506,80507,80509,80511,80513,80515],{"class":36,"line":9695},[34,80508,56561],{"class":44},[34,80510,53076],{"class":40},[34,80512,2445],{"class":44},[34,80514,53131],{"class":55},[34,80516,2952],{"class":40},[34,80518,80519,80521,80523,80525,80527],{"class":36,"line":9707},[34,80520,80329],{"class":44},[34,80522,53076],{"class":40},[34,80524,410],{"class":44},[34,80526,53131],{"class":55},[34,80528,2952],{"class":40},[34,80530,80531,80533,80535,80538],{"class":36,"line":11366},[34,80532,59055],{"class":44},[34,80534,53076],{"class":40},[34,80536,80537],{"class":44},"#666",[34,80539,2952],{"class":40},[34,80541,80542],{"class":36,"line":11391},[34,80543,3841],{"class":40},[34,80545,80546],{"class":36,"line":11414},[34,80547,1475],{"emptyLinePlaceholder":1474},[34,80549,80550,80552,80555],{"class":36,"line":11438},[34,80551,80262],{"class":3617},[34,80553,80554],{"class":3617}," .price",[34,80556,17218],{"class":40},[34,80558,80559,80561,80563,80565,80567],{"class":36,"line":11443},[34,80560,56561],{"class":44},[34,80562,53076],{"class":40},[34,80564,2543],{"class":44},[34,80566,53131],{"class":55},[34,80568,2952],{"class":40},[34,80570,80571,80573,80575,80578],{"class":36,"line":11448},[34,80572,59055],{"class":44},[34,80574,53076],{"class":40},[34,80576,80577],{"class":44},"firebrick",[34,80579,2952],{"class":40},[34,80581,80582],{"class":36,"line":11453},[34,80583,3841],{"class":40},[34,80585,80586],{"class":36,"line":11462},[34,80587,1475],{"emptyLinePlaceholder":1474},[34,80589,80590,80592,80595],{"class":36,"line":11467},[34,80591,80262],{"class":3617},[34,80593,80594],{"class":3617}," .price::before",[34,80596,17218],{"class":40},[34,80598,80599,80602,80604,80607],{"class":36,"line":11473},[34,80600,80601],{"class":44},"      content",[34,80603,53076],{"class":40},[34,80605,80606],{"class":504},"'￥'",[34,80608,2952],{"class":40},[34,80610,80611,80613,80615,80617,80619],{"class":36,"line":11494},[34,80612,56561],{"class":44},[34,80614,53076],{"class":40},[34,80616,2344],{"class":44},[34,80618,53131],{"class":55},[34,80620,2952],{"class":40},[34,80622,80623],{"class":36,"line":11500},[34,80624,3841],{"class":40},[34,80626,80627],{"class":36,"line":11514},[34,80628,1475],{"emptyLinePlaceholder":1474},[34,80630,80631,80634],{"class":36,"line":11520},[34,80632,80633],{"class":3617},"    .filter",[34,80635,17218],{"class":40},[34,80637,80638,80640,80642,80644],{"class":36,"line":11547},[34,80639,56648],{"class":44},[34,80641,53076],{"class":40},[34,80643,53116],{"class":44},[34,80645,2952],{"class":40},[34,80647,80648,80650,80652,80654,80656],{"class":36,"line":11556},[34,80649,56410],{"class":44},[34,80651,53076],{"class":40},[34,80653,80211],{"class":44},[34,80655,53131],{"class":55},[34,80657,2952],{"class":40},[34,80659,80660,80662,80664,80666,80668],{"class":36,"line":11562},[34,80661,56345],{"class":44},[34,80663,53076],{"class":40},[34,80665,177],{"class":44},[34,80667,53195],{"class":44},[34,80669,2952],{"class":40},[34,80671,80672,80674,80676,80678,80680,80682],{"class":36,"line":11570},[34,80673,56334],{"class":44},[34,80675,53076],{"class":40},[34,80677,2451],{"class":44},[34,80679,53131],{"class":55},[34,80681,80302],{"class":44},[34,80683,80684],{"class":55},"px\n",[34,80686,80687],{"class":36,"line":11575},[34,80688,3841],{"class":40},[34,80690,80691],{"class":36,"line":18250},[34,80692,1475],{"emptyLinePlaceholder":1474},[34,80694,80695,80697,80699],{"class":36,"line":18256},[34,80696,80633],{"class":3617},[34,80698,3057],{"class":52939},[34,80700,17218],{"class":40},[34,80702,80703,80705,80707,80709,80711,80713,80715],{"class":36,"line":18279},[34,80704,56334],{"class":44},[34,80706,53076],{"class":40},[34,80708,410],{"class":44},[34,80710,53131],{"class":55},[34,80712,10600],{"class":44},[34,80714,53131],{"class":55},[34,80716,2952],{"class":40},[34,80718,80719,80721,80723,80725],{"class":36,"line":18285},[34,80720,63360],{"class":44},[34,80722,53076],{"class":40},[34,80724,63457],{"class":44},[34,80726,2952],{"class":40},[34,80728,80729,80731,80733,80735],{"class":36,"line":18308},[34,80730,59055],{"class":44},[34,80732,53076],{"class":40},[34,80734,80537],{"class":44},[34,80736,2952],{"class":40},[34,80738,80739,80741,80743,80745],{"class":36,"line":18322},[34,80740,65609],{"class":44},[34,80742,53076],{"class":40},[34,80744,56376],{"class":44},[34,80746,2952],{"class":40},[34,80748,80749,80751,80753,80755,80757],{"class":36,"line":18342},[34,80750,63389],{"class":44},[34,80752,53076],{"class":40},[34,80754,1249],{"class":44},[34,80756,53131],{"class":55},[34,80758,2952],{"class":40},[34,80760,80761],{"class":36,"line":18348},[34,80762,3841],{"class":40},[34,80764,80765],{"class":36,"line":18359},[34,80766,1475],{"emptyLinePlaceholder":1474},[34,80768,80769,80771,80773,80775],{"class":36,"line":18382},[34,80770,80633],{"class":3617},[34,80772,3057],{"class":52939},[34,80774,63539],{"class":3617},[34,80776,17218],{"class":40},[34,80778,80779,80781,80783,80786],{"class":36,"line":18404},[34,80780,56523],{"class":44},[34,80782,53076],{"class":40},[34,80784,80785],{"class":44},"#05943c",[34,80787,2952],{"class":40},[34,80789,80790,80792,80794,80796],{"class":36,"line":18409},[34,80791,59055],{"class":44},[34,80793,53076],{"class":40},[34,80795,62481],{"class":44},[34,80797,2952],{"class":40},[34,80799,80800],{"class":36,"line":18415},[34,80801,3841],{"class":40},[34,80803,80804,80806,80808],{"class":36,"line":18429},[34,80805,54056],{"class":40},[34,80807,1711],{"class":52939},[34,80809,52946],{"class":40},[34,80811,80812,80814,80816],{"class":36,"line":18442},[34,80813,53424],{"class":40},[34,80815,52973],{"class":52939},[34,80817,52946],{"class":40},[34,80819,80820],{"class":36,"line":18447},[34,80821,1475],{"emptyLinePlaceholder":1474},[34,80823,80824,80826,80828],{"class":36,"line":18461},[34,80825,2701],{"class":40},[34,80827,53439],{"class":52939},[34,80829,52946],{"class":40},[34,80831,80832,80834,80836,80838,80840,80843],{"class":36,"line":18466},[34,80833,53783],{"class":40},[34,80835,53250],{"class":52939},[34,80837,55125],{"class":3617},[34,80839,221],{"class":40},[34,80841,80842],{"class":504},"\"filter\"",[34,80844,52946],{"class":40},[34,80846,80847,80849,80851,80853,80855,80857,80860,80862,80864,80867,80869],{"class":36,"line":18472},[34,80848,52980],{"class":40},[34,80850,236],{"class":52939},[34,80852,62696],{"class":3617},[34,80854,221],{"class":40},[34,80856,62701],{"class":504},[34,80858,80859],{"class":3617}," data-index",[34,80861,221],{"class":40},[34,80863,5331],{"class":504},[34,80865,80866],{"class":40},">0-100元\u003C\u002F",[34,80868,236],{"class":52939},[34,80870,52946],{"class":40},[34,80872,80873,80875,80877,80879,80881,80883,80885,80887,80889,80892,80894],{"class":36,"line":18477},[34,80874,52980],{"class":40},[34,80876,236],{"class":52939},[34,80878,62696],{"class":3617},[34,80880,221],{"class":40},[34,80882,62701],{"class":504},[34,80884,80859],{"class":3617},[34,80886,221],{"class":40},[34,80888,5354],{"class":504},[34,80890,80891],{"class":40},">100-300元\u003C\u002F",[34,80893,236],{"class":52939},[34,80895,52946],{"class":40},[34,80897,80898,80900,80902,80904,80906,80908,80910,80912,80914,80917,80919],{"class":36,"line":18491},[34,80899,52980],{"class":40},[34,80901,236],{"class":52939},[34,80903,62696],{"class":3617},[34,80905,221],{"class":40},[34,80907,62701],{"class":504},[34,80909,80859],{"class":3617},[34,80911,221],{"class":40},[34,80913,5367],{"class":504},[34,80915,80916],{"class":40},">300元以上\u003C\u002F",[34,80918,236],{"class":52939},[34,80920,52946],{"class":40},[34,80922,80923,80925,80927,80929,80931,80933,80936,80938],{"class":36,"line":18496},[34,80924,52980],{"class":40},[34,80926,236],{"class":52939},[34,80928,62696],{"class":3617},[34,80930,221],{"class":40},[34,80932,62701],{"class":504},[34,80934,80935],{"class":40},">全部区间\u003C\u002F",[34,80937,236],{"class":52939},[34,80939,52946],{"class":40},[34,80941,80942,80944,80946],{"class":36,"line":18501},[34,80943,54056],{"class":40},[34,80945,53250],{"class":52939},[34,80947,52946],{"class":40},[34,80949,80950,80952,80954,80956,80958,80960],{"class":36,"line":18515},[34,80951,53783],{"class":40},[34,80953,53250],{"class":52939},[34,80955,55125],{"class":3617},[34,80957,221],{"class":40},[34,80959,64247],{"class":504},[34,80961,52946],{"class":40},[34,80963,80964],{"class":36,"line":18527},[34,80965,80966],{"class":161},"    \u003C!-- \u003Cdiv class=\"item\">\n",[34,80968,80969],{"class":36,"line":18532},[34,80970,80971],{"class":161},"      \u003Cimg src=\"\" alt=\"\">\n",[34,80973,80974],{"class":36,"line":18545},[34,80975,80976],{"class":161},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[34,80978,80979],{"class":36,"line":18550},[34,80980,80981],{"class":161},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[34,80983,80984],{"class":36,"line":18555},[34,80985,80986],{"class":161},"    \u003C\u002Fdiv> -->\n",[34,80988,80989,80991,80993],{"class":36,"line":18560},[34,80990,54056],{"class":40},[34,80992,53250],{"class":52939},[34,80994,52946],{"class":40},[34,80996,80997,80999,81001],{"class":36,"line":18573},[34,80998,53783],{"class":40},[34,81000,53452],{"class":52939},[34,81002,52946],{"class":40},[34,81004,81005],{"class":36,"line":18578},[34,81006,81007],{"class":161},"    \u002F\u002F 2. 初始化数据\n",[34,81009,81010,81012,81015,81017],{"class":36,"line":34274},[34,81011,12871],{"class":55},[34,81013,81014],{"class":44}," goodsList",[34,81016,56],{"class":55},[34,81018,57086],{"class":40},[34,81020,81021],{"class":36,"line":34280},[34,81022,81023],{"class":40},"      {\n",[34,81025,81026,81029,81032],{"class":36,"line":34286},[34,81027,81028],{"class":40},"        id: ",[34,81030,81031],{"class":504},"'4001172'",[34,81033,33108],{"class":40},[34,81035,81036,81039,81042],{"class":36,"line":34292},[34,81037,81038],{"class":40},"        name: ",[34,81040,81041],{"class":504},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[34,81043,33108],{"class":40},[34,81045,81046,81049,81052],{"class":36,"line":34298},[34,81047,81048],{"class":40},"        price: ",[34,81050,81051],{"class":504},"'289.00'",[34,81053,33108],{"class":40},[34,81055,81056,81059,81062],{"class":36,"line":34309},[34,81057,81058],{"class":40},"        picture: ",[34,81060,81061],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[34,81063,33108],{"class":40},[34,81065,81066],{"class":36,"line":34315},[34,81067,79529],{"class":40},[34,81069,81070],{"class":36,"line":34335},[34,81071,81023],{"class":40},[34,81073,81074,81076,81079],{"class":36,"line":34341},[34,81075,81028],{"class":40},[34,81077,81078],{"class":504},"'4001594'",[34,81080,33108],{"class":40},[34,81082,81083,81085,81088],{"class":36,"line":34352},[34,81084,81038],{"class":40},[34,81086,81087],{"class":504},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[34,81089,33108],{"class":40},[34,81091,81092,81094,81097],{"class":36,"line":34358},[34,81093,81048],{"class":40},[34,81095,81096],{"class":504},"'288.00'",[34,81098,33108],{"class":40},[34,81100,81101,81103,81106],{"class":36,"line":34364},[34,81102,81058],{"class":40},[34,81104,81105],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[34,81107,33108],{"class":40},[34,81109,81110],{"class":36,"line":34370},[34,81111,79529],{"class":40},[34,81113,81114],{"class":36,"line":34376},[34,81115,81023],{"class":40},[34,81117,81118,81120,81123],{"class":36,"line":34382},[34,81119,81028],{"class":40},[34,81121,81122],{"class":504},"'4001009'",[34,81124,33108],{"class":40},[34,81126,81127,81129,81132],{"class":36,"line":34388},[34,81128,81038],{"class":40},[34,81130,81131],{"class":504},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[34,81133,33108],{"class":40},[34,81135,81136,81138,81141],{"class":36,"line":34394},[34,81137,81048],{"class":40},[34,81139,81140],{"class":504},"'109.00'",[34,81142,33108],{"class":40},[34,81144,81145,81147,81150],{"class":36,"line":34414},[34,81146,81058],{"class":40},[34,81148,81149],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[34,81151,33108],{"class":40},[34,81153,81154],{"class":36,"line":34420},[34,81155,79529],{"class":40},[34,81157,81158],{"class":36,"line":34436},[34,81159,81023],{"class":40},[34,81161,81162,81164,81167],{"class":36,"line":34442},[34,81163,81028],{"class":40},[34,81165,81166],{"class":504},"'4001874'",[34,81168,33108],{"class":40},[34,81170,81171,81173,81176],{"class":36,"line":34456},[34,81172,81038],{"class":40},[34,81174,81175],{"class":504},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[34,81177,33108],{"class":40},[34,81179,81180,81182,81185],{"class":36,"line":34462},[34,81181,81048],{"class":40},[34,81183,81184],{"class":504},"'488.00'",[34,81186,33108],{"class":40},[34,81188,81189,81191,81194],{"class":36,"line":34477},[34,81190,81058],{"class":40},[34,81192,81193],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[34,81195,33108],{"class":40},[34,81197,81198],{"class":36,"line":34483},[34,81199,79529],{"class":40},[34,81201,81202],{"class":36,"line":34492},[34,81203,81023],{"class":40},[34,81205,81206,81208,81211],{"class":36,"line":34498},[34,81207,81028],{"class":40},[34,81209,81210],{"class":504},"'4001649'",[34,81212,33108],{"class":40},[34,81214,81215,81217,81220],{"class":36,"line":34507},[34,81216,81038],{"class":40},[34,81218,81219],{"class":504},"'大师监制龙泉青瓷茶叶罐'",[34,81221,33108],{"class":40},[34,81223,81224,81226,81229],{"class":36,"line":34513},[34,81225,81048],{"class":40},[34,81227,81228],{"class":504},"'139.00'",[34,81230,33108],{"class":40},[34,81232,81233,81235,81238],{"class":36,"line":34519},[34,81234,81058],{"class":40},[34,81236,81237],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[34,81239,33108],{"class":40},[34,81241,81242],{"class":36,"line":34528},[34,81243,79529],{"class":40},[34,81245,81246],{"class":36,"line":34534},[34,81247,81023],{"class":40},[34,81249,81250,81252,81255],{"class":36,"line":34545},[34,81251,81028],{"class":40},[34,81253,81254],{"class":504},"'3997185'",[34,81256,33108],{"class":40},[34,81258,81259,81261,81264],{"class":36,"line":34551},[34,81260,81038],{"class":40},[34,81262,81263],{"class":504},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[34,81265,33108],{"class":40},[34,81267,81268,81270,81273],{"class":36,"line":34570},[34,81269,81048],{"class":40},[34,81271,81272],{"class":504},"'108.00'",[34,81274,33108],{"class":40},[34,81276,81277,81279,81282],{"class":36,"line":34576},[34,81278,81058],{"class":40},[34,81280,81281],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[34,81283,33108],{"class":40},[34,81285,81286],{"class":36,"line":34587},[34,81287,79529],{"class":40},[34,81289,81290],{"class":36,"line":34593},[34,81291,81023],{"class":40},[34,81293,81294,81296,81299],{"class":36,"line":34613},[34,81295,81028],{"class":40},[34,81297,81298],{"class":504},"'3997403'",[34,81300,33108],{"class":40},[34,81302,81303,81305,81308],{"class":36,"line":34629},[34,81304,81038],{"class":40},[34,81306,81307],{"class":504},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[34,81309,33108],{"class":40},[34,81311,81312,81314,81317],{"class":36,"line":34635},[34,81313,81048],{"class":40},[34,81315,81316],{"class":504},"'100.00'",[34,81318,33108],{"class":40},[34,81320,81321,81323,81326],{"class":36,"line":34649},[34,81322,81058],{"class":40},[34,81324,81325],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[34,81327,33108],{"class":40},[34,81329,81330],{"class":36,"line":34655},[34,81331,79529],{"class":40},[34,81333,81334],{"class":36,"line":34661},[34,81335,81023],{"class":40},[34,81337,81338,81340,81343],{"class":36,"line":34672},[34,81339,81028],{"class":40},[34,81341,81342],{"class":504},"'3998274'",[34,81344,33108],{"class":40},[34,81346,81347,81349,81352],{"class":36,"line":34678},[34,81348,81038],{"class":40},[34,81350,81351],{"class":504},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[34,81353,33108],{"class":40},[34,81355,81356,81358,81360],{"class":36,"line":34684},[34,81357,81048],{"class":40},[34,81359,81228],{"class":504},[34,81361,33108],{"class":40},[34,81363,81364,81366,81369],{"class":36,"line":34694},[34,81365,81058],{"class":40},[34,81367,81368],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[34,81370,33108],{"class":40},[34,81372,81373],{"class":36,"line":34700},[34,81374,79529],{"class":40},[34,81376,81377],{"class":36,"line":34711},[34,81378,54748],{"class":40},[34,81380,81381],{"class":36,"line":34717},[34,81382,1475],{"emptyLinePlaceholder":1474},[34,81384,81385],{"class":36,"line":34727},[34,81386,81387],{"class":161},"    \u002F\u002F 1.渲染函数\n",[34,81389,81390,81392,81394,81396,81398],{"class":36,"line":34732},[34,81391,71723],{"class":55},[34,81393,71726],{"class":3617},[34,81395,286],{"class":40},[34,81397,5533],{"class":51},[34,81399,14090],{"class":40},[34,81401,81402],{"class":36,"line":34738},[34,81403,81404],{"class":161},"      \u002F\u002F 声明空字符串\n",[34,81406,81407,81410,81413,81415],{"class":36,"line":34787},[34,81408,81409],{"class":55},"      let",[34,81411,81412],{"class":40}," str ",[34,81414,221],{"class":55},[34,81416,71743],{"class":504},[34,81418,81419],{"class":36,"line":34834},[34,81420,71748],{"class":161},[34,81422,81423,81425,81428,81430,81433,81436],{"class":36,"line":34839},[34,81424,59646],{"class":40},[34,81426,81427],{"class":3617},"forEach",[34,81429,286],{"class":40},[34,81431,81432],{"class":51},"item",[34,81434,81435],{"class":55}," =>",[34,81437,17218],{"class":40},[34,81439,81440,81442,81445,81448,81450,81453,81455,81458,81461,81463],{"class":36,"line":34845},[34,81441,62909],{"class":55},[34,81443,81444],{"class":40}," { ",[34,81446,81447],{"class":44},"name",[34,81449,48],{"class":40},[34,81451,81452],{"class":44},"price",[34,81454,48],{"class":40},[34,81456,81457],{"class":44},"picture",[34,81459,81460],{"class":40}," } ",[34,81462,221],{"class":55},[34,81464,81465],{"class":40}," item\n",[34,81467,81468,81471,81473],{"class":36,"line":34864},[34,81469,81470],{"class":40},"        str ",[34,81472,11127],{"class":55},[34,81474,71807],{"class":504},[34,81476,81477],{"class":36,"line":34870},[34,81478,81479],{"class":504},"          \u003Cdiv class=\"item\">\n",[34,81481,81482,81485,81487],{"class":36,"line":34890},[34,81483,81484],{"class":504},"            \u003Cimg src=\"${",[34,81486,81457],{"class":40},[34,81488,81489],{"class":504},"}\" alt=\"\">\n",[34,81491,81492,81495,81497],{"class":36,"line":34896},[34,81493,81494],{"class":504},"            \u003Cp class=\"name\">${",[34,81496,81447],{"class":40},[34,81498,81499],{"class":504},"}\u003C\u002Fp>\n",[34,81501,81502,81505,81507],{"class":36,"line":34902},[34,81503,81504],{"class":504},"            \u003Cp class=\"price\">${",[34,81506,81452],{"class":40},[34,81508,81499],{"class":504},[34,81510,81511],{"class":36,"line":34912},[34,81512,81513],{"class":504},"          \u003C\u002Fdiv>\n",[34,81515,81516],{"class":36,"line":34917},[34,81517,81518],{"class":504},"        `\n",[34,81520,81521],{"class":36,"line":34923},[34,81522,66454],{"class":40},[34,81524,81525],{"class":36,"line":34939},[34,81526,81527],{"class":161},"      \u002F\u002F 追加给List\n",[34,81529,81530,81532,81534,81536,81539,81541,81543],{"class":36,"line":34984},[34,81531,57410],{"class":40},[34,81533,56038],{"class":3617},[34,81535,286],{"class":40},[34,81537,81538],{"class":504},"'.list'",[34,81540,75888],{"class":40},[34,81542,221],{"class":55},[34,81544,75624],{"class":40},[34,81546,81547],{"class":36,"line":34990},[34,81548,3841],{"class":40},[34,81550,81551],{"class":36,"line":34996},[34,81552,81553],{"class":161},"    \u002F\u002F 页面一打开就需要渲染\n",[34,81555,81556,81559],{"class":36,"line":35002},[34,81557,81558],{"class":3617},"    render",[34,81560,81561],{"class":40},"(goodsList)\n",[34,81563,81564],{"class":36,"line":35013},[34,81565,81566],{"class":161},"    \u002F\u002F 2.过滤筛选\n",[34,81568,81569,81571,81573,81575,81578,81580,81582,81584,81586,81588,81590,81592],{"class":36,"line":35019},[34,81570,54046],{"class":40},[34,81572,56038],{"class":3617},[34,81574,286],{"class":40},[34,81576,81577],{"class":504},"'.filter'",[34,81579,32468],{"class":40},[34,81581,59452],{"class":3617},[34,81583,286],{"class":40},[34,81585,59457],{"class":504},[34,81587,48],{"class":40},[34,81589,1887],{"class":51},[34,81591,81435],{"class":55},[34,81593,17218],{"class":40},[34,81595,81596],{"class":36,"line":35025},[34,81597,81598],{"class":161},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[34,81600,81601,81603,81605,81608,81610,81612,81614,81616],{"class":36,"line":35031},[34,81602,59867],{"class":55},[34,81604,81444],{"class":40},[34,81606,81607],{"class":44},"tagName",[34,81609,48],{"class":40},[34,81611,33178],{"class":44},[34,81613,81460],{"class":40},[34,81615,221],{"class":55},[34,81617,81618],{"class":40}," e.target\n",[34,81620,81621],{"class":36,"line":35049},[34,81622,81623],{"class":161},"      \u002F\u002F 判断\n",[34,81625,81626,81628,81630,81632,81634],{"class":36,"line":35063},[34,81627,56119],{"class":55},[34,81629,68673],{"class":40},[34,81631,56125],{"class":55},[34,81633,69895],{"class":504},[34,81635,14090],{"class":40},[34,81637,81638],{"class":36,"line":35072},[34,81639,81640],{"class":161},"        \u002F\u002F console.log(11)\n",[34,81642,81643],{"class":36,"line":35081},[34,81644,81645],{"class":161},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[34,81647,81648],{"class":36,"line":35090},[34,81649,81650],{"class":161},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[34,81652,81653,81655,81657,81659],{"class":36,"line":35099},[34,81654,53469],{"class":55},[34,81656,53472],{"class":40},[34,81658,221],{"class":55},[34,81660,81661],{"class":40}," goodsList\n",[34,81663,81664,81666,81669,81671,81674],{"class":36,"line":35105},[34,81665,4150],{"class":55},[34,81667,81668],{"class":40}," (dataset.index ",[34,81670,56125],{"class":55},[34,81672,81673],{"class":504}," '1'",[34,81675,14090],{"class":40},[34,81677,81678,81681,81683,81686,81689,81691,81693,81695,81698,81700,81702,81705,81707,81709,81711],{"class":36,"line":35111},[34,81679,81680],{"class":40},"          arr ",[34,81682,221],{"class":55},[34,81684,81685],{"class":40}," goodsList.",[34,81687,81688],{"class":3617},"filter",[34,81690,286],{"class":40},[34,81692,81432],{"class":51},[34,81694,81435],{"class":55},[34,81696,81697],{"class":40}," item.price ",[34,81699,3364],{"class":55},[34,81701,98],{"class":44},[34,81703,81704],{"class":55}," &&",[34,81706,81697],{"class":40},[34,81708,3246],{"class":55},[34,81710,7404],{"class":44},[34,81712,101],{"class":40},[34,81714,81715,81718,81720,81722,81724,81726,81729],{"class":36,"line":35119},[34,81716,81717],{"class":40},"        } ",[34,81719,3355],{"class":55},[34,81721,3358],{"class":55},[34,81723,81668],{"class":40},[34,81725,56125],{"class":55},[34,81727,81728],{"class":504}," '2'",[34,81730,14090],{"class":40},[34,81732,81733,81735,81737,81739,81741,81743,81745,81747,81749,81751,81753,81755,81757,81759,81762],{"class":36,"line":35124},[34,81734,81680],{"class":40},[34,81736,221],{"class":55},[34,81738,81685],{"class":40},[34,81740,81688],{"class":3617},[34,81742,286],{"class":40},[34,81744,81432],{"class":51},[34,81746,81435],{"class":55},[34,81748,81697],{"class":40},[34,81750,3364],{"class":55},[34,81752,7404],{"class":44},[34,81754,81704],{"class":55},[34,81756,81697],{"class":40},[34,81758,3246],{"class":55},[34,81760,81761],{"class":44}," 300",[34,81763,101],{"class":40},[34,81765,81766,81768,81770,81772,81774,81776,81779],{"class":36,"line":35130},[34,81767,81717],{"class":40},[34,81769,3355],{"class":55},[34,81771,3358],{"class":55},[34,81773,81668],{"class":40},[34,81775,56125],{"class":55},[34,81777,81778],{"class":504}," '3'",[34,81780,14090],{"class":40},[34,81782,81783,81785,81787,81789,81791,81793,81795,81797,81799,81801,81803],{"class":36,"line":35141},[34,81784,81680],{"class":40},[34,81786,221],{"class":55},[34,81788,81685],{"class":40},[34,81790,81688],{"class":3617},[34,81792,286],{"class":40},[34,81794,81432],{"class":51},[34,81796,81435],{"class":55},[34,81798,81697],{"class":40},[34,81800,3364],{"class":55},[34,81802,81761],{"class":44},[34,81804,101],{"class":40},[34,81806,81807],{"class":36,"line":35147},[34,81808,4182],{"class":40},[34,81810,81811],{"class":36,"line":35167},[34,81812,81813],{"class":161},"        \u002F\u002F 渲染函数\n",[34,81815,81816,81818],{"class":36,"line":35173},[34,81817,72047],{"class":3617},[34,81819,54051],{"class":40},[34,81821,81822],{"class":36,"line":35179},[34,81823,54037],{"class":40},[34,81825,81826],{"class":36,"line":35185},[34,81827,1475],{"emptyLinePlaceholder":1474},[34,81829,81830],{"class":36,"line":35202},[34,81831,35102],{"class":40},[34,81833,81834,81836,81838],{"class":36,"line":35208},[34,81835,54056],{"class":40},[34,81837,53452],{"class":52939},[34,81839,52946],{"class":40},[34,81841,81842,81844,81846],{"class":36,"line":35214},[34,81843,53424],{"class":40},[34,81845,53439],{"class":52939},[34,81847,52946],{"class":40},[34,81849,81850],{"class":36,"line":35220},[34,81851,1475],{"emptyLinePlaceholder":1474},[34,81853,81854,81856,81858],{"class":36,"line":35226},[34,81855,53424],{"class":40},[34,81857,52274],{"class":52939},[34,81859,52946],{"class":40},[14,81861,81863],{"id":81862},"_410-深入了解对象","4.10 深入了解对象",[19,81865,81867],{"id":81866},"_4101-创建对象","4.10.1 创建对象",[103,81869,81870],{},[109,81871],{"alt":29,"src":81872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[103,81874,81875],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[19,81877,81879],{"id":81878},"_4102-构造函数","4.10.2 构造函数",[103,81881,81882,81885],{},[1165,81883,81884],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[103,81887,81888,81891],{},[1165,81889,81890],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[24,81893,81895],{"className":52272,"code":81894,"language":52274,"meta":29,"style":29},"\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",[31,81896,81897,81905,81910,81931,81944,81956,81968,81972,81977,82004,82009,82036],{"__ignoreMap":29},[34,81898,81899,81901,81903],{"class":36,"line":37},[34,81900,2701],{"class":40},[34,81902,53452],{"class":52939},[34,81904,52946],{"class":40},[34,81906,81907],{"class":36,"line":165},[34,81908,81909],{"class":161},"\u002F\u002F例：\n",[34,81911,81912,81914,81917,81919,81921,81923,81925,81927,81929],{"class":36,"line":171},[34,81913,56088],{"class":55},[34,81915,81916],{"class":3617}," Pig",[34,81918,286],{"class":40},[34,81920,81447],{"class":51},[34,81922,291],{"class":40},[34,81924,71860],{"class":51},[34,81926,291],{"class":40},[34,81928,71877],{"class":51},[34,81930,14090],{"class":40},[34,81932,81933,81936,81939,81941],{"class":36,"line":182},[34,81934,81935],{"class":44},"    this",[34,81937,81938],{"class":40},".name",[34,81940,221],{"class":55},[34,81942,81943],{"class":40},"name\n",[34,81945,81946,81948,81951,81953],{"class":36,"line":188},[34,81947,81935],{"class":44},[34,81949,81950],{"class":40},".age",[34,81952,221],{"class":55},[34,81954,81955],{"class":40},"age\n",[34,81957,81958,81960,81963,81965],{"class":36,"line":518},[34,81959,81935],{"class":44},[34,81961,81962],{"class":40},".gender",[34,81964,221],{"class":55},[34,81966,81967],{"class":40},"gender    \n",[34,81969,81970],{"class":36,"line":524},[34,81971,3223],{"class":40},[34,81973,81974],{"class":36,"line":530},[34,81975,81976],{"class":161},"\u002F\u002F创建佩奇对象\n",[34,81978,81979,81981,81984,81986,81988,81990,81993,81995,81997,81999,82002],{"class":36,"line":624},[34,81980,8442],{"class":55},[34,81982,81983],{"class":44}," Peppa",[34,81985,13366],{"class":55},[34,81987,81916],{"class":3617},[34,81989,286],{"class":40},[34,81991,81992],{"class":504},"'佩奇'",[34,81994,291],{"class":40},[34,81996,1115],{"class":44},[34,81998,291],{"class":40},[34,82000,82001],{"class":504},"'女'",[34,82003,101],{"class":40},[34,82005,82006],{"class":36,"line":630},[34,82007,82008],{"class":161},"\u002F\u002F创建乔治对象\n",[34,82010,82011,82013,82016,82018,82020,82022,82025,82027,82029,82031,82034],{"class":36,"line":636},[34,82012,8442],{"class":55},[34,82014,82015],{"class":44}," George",[34,82017,13366],{"class":55},[34,82019,81916],{"class":3617},[34,82021,286],{"class":40},[34,82023,82024],{"class":504},"'乔治'",[34,82026,291],{"class":40},[34,82028,337],{"class":44},[34,82030,291],{"class":40},[34,82032,82033],{"class":504},"'男'",[34,82035,101],{"class":40},[34,82037,82038,82040,82042],{"class":36,"line":1513},[34,82039,53424],{"class":40},[34,82041,53452],{"class":52939},[34,82043,52946],{"class":40},[103,82045,82046],{},[109,82047],{"alt":29,"src":82048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[103,82050,82051],{},[109,82052],{"alt":29,"src":82053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[103,82055,82056],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[103,82058,82059],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[103,82061,82062],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[103,82064,82065],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[103,82067,82068],{},"这里用等号是因为：对象.属性=值",[103,82070,82071],{},"①利用对象字面量创建对象",[103,82073,82074],{},"const o={",[103,82076,82077],{},"name:'pink'",[103,82079,82080],{},"} ②利用new Object创建对象",[103,82082,82083],{},"const o=new Object({name:'pink'})",[103,82085,82086],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[103,82088,82089],{},"构造函数创建对象的执行过程：",[103,82091,82092],{},[109,82093],{"alt":29,"src":82094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[19,82096,82098],{"id":82097},"_4103-实例成员","4.10.3 实例成员",[103,82100,82101],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[1772,82103,82104,82107,82110],{},[1775,82105,82106],{},"实例对象的属性和方法即为实例成员",[1775,82108,82109],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[1775,82111,82112],{},"构造函数创建的实例对象彼此独立互不影响",[19,82114,82116],{"id":82115},"_4104-静态成员","4.10.4 静态成员",[103,82118,82119],{},[109,82120],{"alt":29,"src":82121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[103,82123,82124],{},"静态成员有Date.now() Math.PI Math.random()",[103,82126,82127],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[103,82129,82130],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[103,82132,82133],{},"function Pig(name) n {",[103,82135,82136],{},"this.name=name",[103,82138,2737],{},[103,82140,82141],{},"Pig.eyes=2",[103,82143,82144],{},"Pig.sayHai=function () { console.log(this) }",[103,82146,82147],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[103,82149,82150],{},"console.log(Pig.eyes) \u002F\u002F2",[103,82152,12982],{},[1772,82154,82155,82158,82161,82164,82167],{},[1775,82156,82157],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[1775,82159,82160],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[1775,82162,82163],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[1775,82165,82166],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[1775,82168,82169],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[103,82171,82172],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[19,82174,82176],{"id":82175},"_4105-内置构造函数","4.10.5 内置构造函数",[103,82178,82179],{},"内置构造函数包含：",[103,82181,82182],{},[109,82183],{"alt":29,"src":82184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[103,82186,82187],{},[109,82188],{"alt":29,"src":82189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[103,82191,82192],{},"这些基本数据类型，js对他们进行了包装",[53452,82194,82195],{},"\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",[1353,82197,82199],{"id":82198},"_41051-object","4.10.5.1 Object",[103,82201,82202],{},"Object 是内置的构造函数，用于创建普通对象",[103,82204,82205],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[24,82207,82209],{"className":52272,"code":82208,"language":52274,"meta":29,"style":29},"const user=new Object({name:'小明',age:15})\n",[31,82210,82211],{"__ignoreMap":29},[34,82212,82213],{"class":36,"line":37},[34,82214,82208],{"class":40},[103,82216,82217],{},"三个常用的静态方法：",[24555,82219,82221],{"id":82220},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[103,82223,82224],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[103,82226,82227],{},[109,82228],{"alt":29,"src":82229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[103,82231,82232],{},[109,82233],{"alt":29,"src":82234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[24,82236,82238],{"className":54706,"code":82237,"language":54708,"meta":29,"style":29},"\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",[31,82239,82240,82248,82256,82261,82266,82271,82276,82281,82286,82294],{"__ignoreMap":29},[34,82241,82242,82244,82246],{"class":36,"line":37},[34,82243,2701],{"class":40},[34,82245,53439],{"class":52939},[34,82247,52946],{"class":40},[34,82249,82250,82252,82254],{"class":36,"line":165},[34,82251,53783],{"class":40},[34,82253,53452],{"class":52939},[34,82255,52946],{"class":40},[34,82257,82258],{"class":36,"line":171},[34,82259,82260],{"class":40},"    const o = { name: 'pink', age: 6 }\n",[34,82262,82263],{"class":36,"line":182},[34,82264,82265],{"class":40},"    \u002F\u002F 获得所有属性名\n",[34,82267,82268],{"class":36,"line":188},[34,82269,82270],{"class":40},"    const arr = Object.keys(o)\n",[34,82272,82273],{"class":36,"line":518},[34,82274,82275],{"class":40},"    console.log(arr)\n",[34,82277,82278],{"class":36,"line":524},[34,82279,82280],{"class":40},"    \u002F\u002F 获得所有属性值\n",[34,82282,82283],{"class":36,"line":530},[34,82284,82285],{"class":40},"    console.log(Object.values(o))\n",[34,82287,82288,82290,82292],{"class":36,"line":624},[34,82289,54056],{"class":40},[34,82291,53452],{"class":52939},[34,82293,52946],{"class":40},[34,82295,82296,82298,82300],{"class":36,"line":630},[34,82297,53424],{"class":40},[34,82299,53439],{"class":52939},[34,82301,52946],{"class":40},[24555,82303,82305],{"id":82304},"_410512-object-assign","4.10.5.1.2 Object. assign",[103,82307,82308],{},"Object.assign(oo,o)",[103,82310,82311],{},"后的东西添加给前 是追加",[103,82313,82314],{},[109,82315],{"alt":29,"src":82316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[103,82318,82319],{},[109,82320],{"alt":29,"src":82321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[24,82323,82325],{"className":54706,"code":82324,"language":54708,"meta":29,"style":29},"\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",[31,82326,82327,82335,82343,82347,82351,82355,82359,82363,82367,82372,82377,82382,82387,82392,82400],{"__ignoreMap":29},[34,82328,82329,82331,82333],{"class":36,"line":37},[34,82330,2701],{"class":40},[34,82332,53439],{"class":52939},[34,82334,52946],{"class":40},[34,82336,82337,82339,82341],{"class":36,"line":165},[34,82338,53783],{"class":40},[34,82340,53452],{"class":52939},[34,82342,52946],{"class":40},[34,82344,82345],{"class":36,"line":171},[34,82346,82260],{"class":40},[34,82348,82349],{"class":36,"line":182},[34,82350,82265],{"class":40},[34,82352,82353],{"class":36,"line":188},[34,82354,82270],{"class":40},[34,82356,82357],{"class":36,"line":518},[34,82358,82275],{"class":40},[34,82360,82361],{"class":36,"line":524},[34,82362,82280],{"class":40},[34,82364,82365],{"class":36,"line":530},[34,82366,82285],{"class":40},[34,82368,82369],{"class":36,"line":624},[34,82370,82371],{"class":40},"    const oo = {}\n",[34,82373,82374],{"class":36,"line":630},[34,82375,82376],{"class":40},"    Object.assign(oo, o)\n",[34,82378,82379],{"class":36,"line":636},[34,82380,82381],{"class":40},"    console.log(oo)\n",[34,82383,82384],{"class":36,"line":1513},[34,82385,82386],{"class":40},"    Object.assign(o, { gender: '女' })\n",[34,82388,82389],{"class":36,"line":1519},[34,82390,82391],{"class":40},"    console.log(o)\n",[34,82393,82394,82396,82398],{"class":36,"line":3283},[34,82395,54056],{"class":40},[34,82397,53452],{"class":52939},[34,82399,52946],{"class":40},[34,82401,82402,82404,82406],{"class":36,"line":3297},[34,82403,53424],{"class":40},[34,82405,53439],{"class":52939},[34,82407,52946],{"class":40},[103,82409,82410],{},[109,82411],{"alt":29,"src":82412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[1353,82414,82416],{"id":82415},"_41052-array","4.10.5.2 Array",[103,82418,82419],{},"Array 是内置的构造函数，用于创建数组",[103,82421,82422],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[24,82424,82426],{"className":52272,"code":82425,"language":52274,"meta":29,"style":29},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[31,82427,82428,82433],{"__ignoreMap":29},[34,82429,82430],{"class":36,"line":37},[34,82431,82432],{"class":40},"const arr=new Array(3,5)\n",[34,82434,82435],{"class":36,"line":165},[34,82436,82437],{"class":40},"console.log(arr)  \u002F\u002F[3,5]\n",[103,82439,82440],{},"Array的实例方法，这个方法是实例成员",[103,82442,82443],{},[109,82444],{"alt":29,"src":82445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24555,82447,82449],{"id":82448},"_410521-reduce","4.10.5.2.1 reduce",[103,82451,82452],{},[109,82453],{"alt":29,"src":82454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[24,82456,82458],{"className":54706,"code":82457,"language":54708,"meta":29,"style":29},"\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",[31,82459,82460,82468,82476,82481,82486,82491,82496,82500,82505,82510,82515,82519,82524,82529,82533,82538,82543,82548,82556],{"__ignoreMap":29},[34,82461,82462,82464,82466],{"class":36,"line":37},[34,82463,2701],{"class":40},[34,82465,53439],{"class":52939},[34,82467,52946],{"class":40},[34,82469,82470,82472,82474],{"class":36,"line":165},[34,82471,53783],{"class":40},[34,82473,53452],{"class":52939},[34,82475,52946],{"class":40},[34,82477,82478],{"class":36,"line":171},[34,82479,82480],{"class":40},"    const arr = [1, 5, 8]\n",[34,82482,82483],{"class":36,"line":182},[34,82484,82485],{"class":40},"    \u002F\u002F 1.没有初始值\n",[34,82487,82488],{"class":36,"line":188},[34,82489,82490],{"class":40},"    const total = arr.reduce(function (prev, current) {\n",[34,82492,82493],{"class":36,"line":518},[34,82494,82495],{"class":40},"      return prev + current\n",[34,82497,82498],{"class":36,"line":524},[34,82499,35102],{"class":40},[34,82501,82502],{"class":36,"line":530},[34,82503,82504],{"class":40},"    console.log(total)   \u002F\u002F14\n",[34,82506,82507],{"class":36,"line":624},[34,82508,82509],{"class":40},"    \u002F\u002F 2.有初始值\n",[34,82511,82512],{"class":36,"line":630},[34,82513,82514],{"class":40},"    const total1 = arr.reduce(function (prev, current) {\n",[34,82516,82517],{"class":36,"line":636},[34,82518,82495],{"class":40},[34,82520,82521],{"class":36,"line":1513},[34,82522,82523],{"class":40},"    }, 10)\n",[34,82525,82526],{"class":36,"line":1519},[34,82527,82528],{"class":40},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[34,82530,82531],{"class":36,"line":3283},[34,82532,1475],{"emptyLinePlaceholder":1474},[34,82534,82535],{"class":36,"line":3297},[34,82536,82537],{"class":40},"    \u002F\u002F 3.箭头函数写法\n",[34,82539,82540],{"class":36,"line":3302},[34,82541,82542],{"class":40},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[34,82544,82545],{"class":36,"line":3308},[34,82546,82547],{"class":40},"    console.log(total2)   \u002F\u002F24\n",[34,82549,82550,82552,82554],{"class":36,"line":3328},[34,82551,54056],{"class":40},[34,82553,53452],{"class":52939},[34,82555,52946],{"class":40},[34,82557,82558,82560,82562],{"class":36,"line":3333},[34,82559,53424],{"class":40},[34,82561,53439],{"class":52939},[34,82563,52946],{"class":40},[103,82565,82566],{},"执行过程：",[1772,82568,82569,82572,82575],{},[1775,82570,82571],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[1775,82573,82574],{},"每一次循环，把返回值给作为下一次循环的上一次值",[1775,82576,82577],{},"如果有起始值，则起始值作为上一次值",[24,82579,82581],{"className":54706,"code":82580,"language":54708,"meta":29,"style":29},"\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",[31,82582,82583,82591,82599,82603,82607,82611,82615,82619,82623,82628,82633,82638,82643,82648,82652,82656,82660,82664,82668,82672,82677,82681,82686,82690,82695,82700,82704,82708,82712,82720],{"__ignoreMap":29},[34,82584,82585,82587,82589],{"class":36,"line":37},[34,82586,2701],{"class":40},[34,82588,53439],{"class":52939},[34,82590,52946],{"class":40},[34,82592,82593,82595,82597],{"class":36,"line":165},[34,82594,53783],{"class":40},[34,82596,53452],{"class":52939},[34,82598,52946],{"class":40},[34,82600,82601],{"class":36,"line":171},[34,82602,82480],{"class":40},[34,82604,82605],{"class":36,"line":182},[34,82606,82485],{"class":40},[34,82608,82609],{"class":36,"line":188},[34,82610,82490],{"class":40},[34,82612,82613],{"class":36,"line":518},[34,82614,82495],{"class":40},[34,82616,82617],{"class":36,"line":524},[34,82618,35102],{"class":40},[34,82620,82621],{"class":36,"line":530},[34,82622,82504],{"class":40},[34,82624,82625],{"class":36,"line":624},[34,82626,82627],{"class":40},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[34,82629,82630],{"class":36,"line":630},[34,82631,82632],{"class":40},"    \u002F\u002F     1              5                    6\n",[34,82634,82635],{"class":36,"line":636},[34,82636,82637],{"class":40},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[34,82639,82640],{"class":36,"line":1513},[34,82641,82642],{"class":40},"    \u002F\u002F     6              8                    14\n",[34,82644,82645],{"class":36,"line":1519},[34,82646,82647],{"class":40},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[34,82649,82650],{"class":36,"line":3283},[34,82651,82509],{"class":40},[34,82653,82654],{"class":36,"line":3297},[34,82655,82514],{"class":40},[34,82657,82658],{"class":36,"line":3302},[34,82659,82495],{"class":40},[34,82661,82662],{"class":36,"line":3308},[34,82663,82523],{"class":40},[34,82665,82666],{"class":36,"line":3328},[34,82667,82528],{"class":40},[34,82669,82670],{"class":36,"line":3333},[34,82671,82627],{"class":40},[34,82673,82674],{"class":36,"line":3347},[34,82675,82676],{"class":40},"    \u002F\u002F     10             1                     11\n",[34,82678,82679],{"class":36,"line":3352},[34,82680,82637],{"class":40},[34,82682,82683],{"class":36,"line":3381},[34,82684,82685],{"class":40},"    \u002F\u002F     11             5                    16\n",[34,82687,82688],{"class":36,"line":3386},[34,82689,82637],{"class":40},[34,82691,82692],{"class":36,"line":3403},[34,82693,82694],{"class":40},"    \u002F\u002F     16             8                    24\n",[34,82696,82697],{"class":36,"line":3408},[34,82698,82699],{"class":40},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[34,82701,82702],{"class":36,"line":3413},[34,82703,82537],{"class":40},[34,82705,82706],{"class":36,"line":3418},[34,82707,82542],{"class":40},[34,82709,82710],{"class":36,"line":3432},[34,82711,82547],{"class":40},[34,82713,82714,82716,82718],{"class":36,"line":3437},[34,82715,54056],{"class":40},[34,82717,53452],{"class":52939},[34,82719,52946],{"class":40},[34,82721,82722,82724,82726],{"class":36,"line":4230},[34,82723,53424],{"class":40},[34,82725,53439],{"class":52939},[34,82727,52946],{"class":40},[24555,82729,82731],{"id":82730},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[103,82733,82734],{},[109,82735],{"alt":29,"src":82736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[24,82738,82740],{"className":54706,"code":82739,"language":54708,"meta":29,"style":29},"\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",[31,82741,82742,82750,82758,82763,82768,82773,82778,82782,82787,82792,82797,82802,82807,82812,82816,82821,82825,82830,82838],{"__ignoreMap":29},[34,82743,82744,82746,82748],{"class":36,"line":37},[34,82745,2701],{"class":40},[34,82747,53439],{"class":52939},[34,82749,52946],{"class":40},[34,82751,82752,82754,82756],{"class":36,"line":165},[34,82753,53783],{"class":40},[34,82755,53452],{"class":52939},[34,82757,52946],{"class":40},[34,82759,82760],{"class":36,"line":171},[34,82761,82762],{"class":40},"    const arr = [\n",[34,82764,82765],{"class":36,"line":182},[34,82766,82767],{"class":40},"      { name: '张三', salary: 10000 },\n",[34,82769,82770],{"class":36,"line":188},[34,82771,82772],{"class":40},"      { name: '李四', salary: 10000 },\n",[34,82774,82775],{"class":36,"line":518},[34,82776,82777],{"class":40},"      { name: '王五', salary: 10000 }\n",[34,82779,82780],{"class":36,"line":524},[34,82781,54748],{"class":40},[34,82783,82784],{"class":36,"line":530},[34,82785,82786],{"class":40},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[34,82788,82789],{"class":36,"line":624},[34,82790,82791],{"class":40},"    \u002F\u002F prev是累计值\n",[34,82793,82794],{"class":36,"line":630},[34,82795,82796],{"class":40},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[34,82798,82799],{"class":36,"line":636},[34,82800,82801],{"class":40},"    console.log(total)\n",[34,82803,82804],{"class":36,"line":1513},[34,82805,82806],{"class":40},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[34,82808,82809],{"class":36,"line":1519},[34,82810,82811],{"class":40},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[34,82813,82814],{"class":36,"line":3283},[34,82815,82806],{"class":40},[34,82817,82818],{"class":36,"line":3297},[34,82819,82820],{"class":40},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[34,82822,82823],{"class":36,"line":3302},[34,82824,82806],{"class":40},[34,82826,82827],{"class":36,"line":3308},[34,82828,82829],{"class":40},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[34,82831,82832,82834,82836],{"class":36,"line":3328},[34,82833,54056],{"class":40},[34,82835,53452],{"class":52939},[34,82837,52946],{"class":40},[34,82839,82840,82842,82844],{"class":36,"line":3333},[34,82841,53424],{"class":40},[34,82843,53439],{"class":52939},[34,82845,52946],{"class":40},[24555,82847,82849],{"id":82848},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[103,82851,82852],{},[109,82853],{"alt":29,"src":82854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[103,82856,82857],{},[109,82858],{"alt":29,"src":82859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[1772,82861,82862],{},[1775,82863,82864],{},"find()",[103,82866,82867],{},"循环查找，找到第一个就ok",[103,82869,82870],{},[236,82871,82874],{"href":82872,"rel":82873},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25510],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[24,82876,82878],{"className":52272,"code":82877,"language":52274,"meta":29,"style":29},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[31,82879,82880,82885,82890],{"__ignoreMap":29},[34,82881,82882],{"class":36,"line":37},[34,82883,82884],{"class":40},"const array1 = [5, 12, 8, 130, 44]\n",[34,82886,82887],{"class":36,"line":165},[34,82888,82889],{"class":40},"const found = array1.find((element) => element > 10)\n",[34,82891,82892],{"class":36,"line":171},[34,82893,82894],{"class":40},"console.log(found)  \u002F\u002F12\n",[103,82896,82897,82899,82900,82905,82906,82909,82910,82912,82913,82918,82919,82921,82922,82924,82925,82927,82928],{},[31,82898,82864],{}," 方法是一个",[236,82901,82904],{"href":82902,"rel":82903},"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",[25510],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[31,82907,82908],{},"callbackFn"," 函数，直到 ",[31,82911,82908],{}," 返回一个",[236,82914,82917],{"href":82915,"rel":82916},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25510],"真值","。然后 ",[31,82920,82864],{}," 返回该元素并停止迭代数组。如果 ",[31,82923,82908],{}," 从未返回真值，则 ",[31,82926,82864],{}," 返回 ",[31,82929,82930],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[24,82932,82934],{"className":54706,"code":82933,"language":54708,"meta":29,"style":29},"\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",[31,82935,82936,82944,82952,82957,82962,82967,82971,82976,82981,82985,82990,82995,82999,83003,83008,83013,83017,83021,83026,83031,83036,83041,83046,83050,83055,83060,83065,83070,83074,83079,83087],{"__ignoreMap":29},[34,82937,82938,82940,82942],{"class":36,"line":37},[34,82939,2701],{"class":40},[34,82941,53439],{"class":52939},[34,82943,52946],{"class":40},[34,82945,82946,82948,82950],{"class":36,"line":165},[34,82947,53783],{"class":40},[34,82949,53452],{"class":52939},[34,82951,52946],{"class":40},[34,82953,82954],{"class":36,"line":171},[34,82955,82956],{"class":40},"    const arr = ['red', 'blue', 'green']\n",[34,82958,82959],{"class":36,"line":182},[34,82960,82961],{"class":40},"    const found = arr.find(item => item === 'pink')\n",[34,82963,82964],{"class":36,"line":188},[34,82965,82966],{"class":40},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[34,82968,82969],{"class":36,"line":518},[34,82970,1475],{"emptyLinePlaceholder":1474},[34,82972,82973],{"class":36,"line":524},[34,82974,82975],{"class":40},"    \u002F\u002F 使用场景，用于查找数据\n",[34,82977,82978],{"class":36,"line":530},[34,82979,82980],{"class":40},"    const arr1 = [\n",[34,82982,82983],{"class":36,"line":624},[34,82984,81023],{"class":40},[34,82986,82987],{"class":36,"line":630},[34,82988,82989],{"class":40},"        name: '小米',\n",[34,82991,82992],{"class":36,"line":636},[34,82993,82994],{"class":40},"        price: 1999\n",[34,82996,82997],{"class":36,"line":1513},[34,82998,79529],{"class":40},[34,83000,83001],{"class":36,"line":1519},[34,83002,81023],{"class":40},[34,83004,83005],{"class":36,"line":3283},[34,83006,83007],{"class":40},"        name: '华为',\n",[34,83009,83010],{"class":36,"line":3297},[34,83011,83012],{"class":40},"        price: 3999\n",[34,83014,83015],{"class":36,"line":3302},[34,83016,54037],{"class":40},[34,83018,83019],{"class":36,"line":3308},[34,83020,54748],{"class":40},[34,83022,83023],{"class":36,"line":3328},[34,83024,83025],{"class":40},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[34,83027,83028],{"class":36,"line":3333},[34,83029,83030],{"class":40},"    \u002F\u002F const found1 = arr1.find(item => {\n",[34,83032,83033],{"class":36,"line":3347},[34,83034,83035],{"class":40},"    \u002F\u002F   if (item.name === '小米') {\n",[34,83037,83038],{"class":36,"line":3352},[34,83039,83040],{"class":40},"    \u002F\u002F     return item\n",[34,83042,83043],{"class":36,"line":3381},[34,83044,83045],{"class":40},"    \u002F\u002F   }\n",[34,83047,83048],{"class":36,"line":3386},[34,83049,64929],{"class":40},[34,83051,83052],{"class":36,"line":3403},[34,83053,83054],{"class":40},"    \u002F\u002F 另一种写法\n",[34,83056,83057],{"class":36,"line":3408},[34,83058,83059],{"class":40},"    const found1 = arr1.find(item => {\n",[34,83061,83062],{"class":36,"line":3413},[34,83063,83064],{"class":40},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[34,83066,83067],{"class":36,"line":3418},[34,83068,83069],{"class":40},"      return item.name = '小米'\n",[34,83071,83072],{"class":36,"line":3432},[34,83073,35102],{"class":40},[34,83075,83076],{"class":36,"line":3437},[34,83077,83078],{"class":40},"    console.log(found1)\n",[34,83080,83081,83083,83085],{"class":36,"line":4230},[34,83082,54056],{"class":40},[34,83084,53452],{"class":52939},[34,83086,52946],{"class":40},[34,83088,83089,83091,83093],{"class":36,"line":4244},[34,83090,53424],{"class":40},[34,83092,53439],{"class":52939},[34,83094,52946],{"class":40},[103,83096,83097],{},[109,83098],{"alt":29,"src":83099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[103,83101,83102],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[1772,83104,83105],{"start":165},[1775,83106,83107],{},"every()返回的是布尔值",[103,83109,83110],{},[236,83111,83114],{"href":83112,"rel":83113},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25510],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[103,83116,83117],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[103,83119,83120],{},"some是只有有一个就没问题",[103,83122,83123],{},"every是必须全是才行",[24,83125,83129],{"className":83126,"code":83127,"language":83128,"meta":29,"style":29},"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",[31,83130,83131,83147,83161,83165,83174],{"__ignoreMap":29},[34,83132,83133,83135,83138,83140,83142,83145],{"class":36,"line":37},[34,83134,56088],{"class":55},[34,83136,83137],{"class":40}," isBigEnough(element, ",[34,83139,75697],{"class":55},[34,83141,48],{"class":40},[34,83143,83144],{"class":55},"array",[34,83146,14090],{"class":40},[34,83148,83149,83152,83155,83157,83159],{"class":36,"line":165},[34,83150,83151],{"class":55},"  return",[34,83153,83154],{"class":40}," element ",[34,83156,3364],{"class":55},[34,83158,3692],{"class":44},[34,83160,2952],{"class":40},[34,83162,83163],{"class":36,"line":171},[34,83164,3223],{"class":40},[34,83166,83167,83170,83172],{"class":36,"line":182},[34,83168,83169],{"class":40},"[12, 5, 8, 130, 44].every(isBigEnough); ",[34,83171,34970],{"class":55},[34,83173,56155],{"class":40},[34,83175,83176,83179,83181],{"class":36,"line":188},[34,83177,83178],{"class":40},"[12, 54, 18, 130, 44].every(isBigEnough); ",[34,83180,34970],{"class":55},[34,83182,59579],{"class":40},[24,83184,83186],{"className":54706,"code":83185,"language":54708,"meta":29,"style":29},"\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",[31,83187,83188,83196,83204,83209,83213,83218,83223,83231],{"__ignoreMap":29},[34,83189,83190,83192,83194],{"class":36,"line":37},[34,83191,2701],{"class":40},[34,83193,53439],{"class":52939},[34,83195,52946],{"class":40},[34,83197,83198,83200,83202],{"class":36,"line":165},[34,83199,53783],{"class":40},[34,83201,53452],{"class":52939},[34,83203,52946],{"class":40},[34,83205,83206],{"class":36,"line":171},[34,83207,83208],{"class":40},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[34,83210,83211],{"class":36,"line":182},[34,83212,79959],{"class":40},[34,83214,83215],{"class":36,"line":188},[34,83216,83217],{"class":40},"    const flag = arr.every(item => item >= 10)\n",[34,83219,83220],{"class":36,"line":518},[34,83221,83222],{"class":40},"    console.log(flag)    \u002F\u002Ftrue\n",[34,83224,83225,83227,83229],{"class":36,"line":524},[34,83226,54056],{"class":40},[34,83228,53452],{"class":52939},[34,83230,52946],{"class":40},[34,83232,83233,83235,83237],{"class":36,"line":530},[34,83234,53424],{"class":40},[34,83236,53439],{"class":52939},[34,83238,52946],{"class":40},[24,83240,83242],{"className":54706,"code":83241,"language":54708,"meta":29,"style":29},"\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",[31,83243,83244,83252,83260,83264,83269,83274,83279,83287],{"__ignoreMap":29},[34,83245,83246,83248,83250],{"class":36,"line":37},[34,83247,2701],{"class":40},[34,83249,53439],{"class":52939},[34,83251,52946],{"class":40},[34,83253,83254,83256,83258],{"class":36,"line":165},[34,83255,53783],{"class":40},[34,83257,53452],{"class":52939},[34,83259,52946],{"class":40},[34,83261,83262],{"class":36,"line":171},[34,83263,83208],{"class":40},[34,83265,83266],{"class":36,"line":182},[34,83267,83268],{"class":40},"    const arr = [10, 0, 5]\n",[34,83270,83271],{"class":36,"line":188},[34,83272,83273],{"class":40},"    const flag = arr.some(item => item >= 10)\n",[34,83275,83276],{"class":36,"line":518},[34,83277,83278],{"class":40},"    console.log(flag)   \u002F\u002Ftrue\n",[34,83280,83281,83283,83285],{"class":36,"line":524},[34,83282,54056],{"class":40},[34,83284,53452],{"class":52939},[34,83286,52946],{"class":40},[34,83288,83289,83291,83293],{"class":36,"line":530},[34,83290,53424],{"class":40},[34,83292,53439],{"class":52939},[34,83294,52946],{"class":40},[24555,83296,83298],{"id":83297},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[103,83300,83301],{},[109,83302],{"alt":29,"src":83303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[24,83305,83307],{"className":52272,"code":83306,"language":52274,"meta":29,"style":29},"\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",[31,83308,83309,83319,83333,83337,83345,83359,83379,83391,83399,83406,83418,83430,83442,83454,83464,83474,83478,83486,83494,83498,83506,83518,83526,83548,83553,83558,83591,83599,83607,83611],{"__ignoreMap":29},[34,83310,83311,83313,83315,83317],{"class":36,"line":37},[34,83312,52936],{"class":40},[34,83314,52940],{"class":52939},[34,83316,52943],{"class":3617},[34,83318,52946],{"class":40},[34,83320,83321,83323,83325,83327,83329,83331],{"class":36,"line":165},[34,83322,2701],{"class":40},[34,83324,52274],{"class":52939},[34,83326,52955],{"class":3617},[34,83328,221],{"class":40},[34,83330,52960],{"class":504},[34,83332,52946],{"class":40},[34,83334,83335],{"class":36,"line":171},[34,83336,1475],{"emptyLinePlaceholder":1474},[34,83338,83339,83341,83343],{"class":36,"line":182},[34,83340,2701],{"class":40},[34,83342,52973],{"class":52939},[34,83344,52946],{"class":40},[34,83346,83347,83349,83351,83353,83355,83357],{"class":36,"line":188},[34,83348,53783],{"class":40},[34,83350,52983],{"class":52939},[34,83352,52986],{"class":3617},[34,83354,221],{"class":40},[34,83356,52991],{"class":504},[34,83358,52946],{"class":40},[34,83360,83361,83363,83365,83367,83369,83371,83373,83375,83377],{"class":36,"line":518},[34,83362,53783],{"class":40},[34,83364,52983],{"class":52939},[34,83366,16566],{"class":3617},[34,83368,221],{"class":40},[34,83370,53030],{"class":504},[34,83372,53010],{"class":3617},[34,83374,221],{"class":40},[34,83376,53037],{"class":504},[34,83378,52946],{"class":40},[34,83380,83381,83383,83385,83387,83389],{"class":36,"line":524},[34,83382,53783],{"class":40},[34,83384,53046],{"class":52939},[34,83386,53049],{"class":40},[34,83388,53046],{"class":52939},[34,83390,52946],{"class":40},[34,83392,83393,83395,83397],{"class":36,"line":530},[34,83394,53783],{"class":40},[34,83396,1711],{"class":52939},[34,83398,52946],{"class":40},[34,83400,83401,83404],{"class":36,"line":624},[34,83402,83403],{"class":52939},"    div",[34,83405,17218],{"class":40},[34,83407,83408,83410,83412,83414,83416],{"class":36,"line":630},[34,83409,56410],{"class":44},[34,83411,53076],{"class":40},[34,83413,3376],{"class":44},[34,83415,53131],{"class":55},[34,83417,2952],{"class":40},[34,83419,83420,83422,83424,83426,83428],{"class":36,"line":636},[34,83421,56424],{"class":44},[34,83423,53076],{"class":40},[34,83425,2201],{"class":44},[34,83427,53131],{"class":55},[34,83429,2952],{"class":40},[34,83431,83432,83434,83436,83438,83440],{"class":36,"line":1513},[34,83433,58998],{"class":44},[34,83435,53076],{"class":40},[34,83437,2201],{"class":44},[34,83439,53131],{"class":55},[34,83441,2952],{"class":40},[34,83443,83444,83446,83448,83450,83452],{"class":36,"line":1519},[34,83445,66772],{"class":44},[34,83447,53076],{"class":40},[34,83449,2293],{"class":44},[34,83451,53131],{"class":55},[34,83453,2952],{"class":40},[34,83455,83456,83458,83460,83462],{"class":36,"line":3283},[34,83457,58925],{"class":44},[34,83459,53076],{"class":40},[34,83461,53231],{"class":44},[34,83463,2952],{"class":40},[34,83465,83466,83468,83470,83472],{"class":36,"line":3297},[34,83467,56523],{"class":44},[34,83469,53076],{"class":40},[34,83471,53284],{"class":44},[34,83473,2952],{"class":40},[34,83475,83476],{"class":36,"line":3302},[34,83477,3841],{"class":40},[34,83479,83480,83482,83484],{"class":36,"line":3308},[34,83481,54056],{"class":40},[34,83483,1711],{"class":52939},[34,83485,52946],{"class":40},[34,83487,83488,83490,83492],{"class":36,"line":3328},[34,83489,53424],{"class":40},[34,83491,52973],{"class":52939},[34,83493,52946],{"class":40},[34,83495,83496],{"class":36,"line":3333},[34,83497,1475],{"emptyLinePlaceholder":1474},[34,83499,83500,83502,83504],{"class":36,"line":3347},[34,83501,2701],{"class":40},[34,83503,53439],{"class":52939},[34,83505,52946],{"class":40},[34,83507,83508,83510,83512,83514,83516],{"class":36,"line":3352},[34,83509,53783],{"class":40},[34,83511,53250],{"class":52939},[34,83513,56953],{"class":40},[34,83515,53250],{"class":52939},[34,83517,52946],{"class":40},[34,83519,83520,83522,83524],{"class":36,"line":3381},[34,83521,53783],{"class":40},[34,83523,53452],{"class":52939},[34,83525,52946],{"class":40},[34,83527,83528,83530,83533,83535,83538,83541,83543,83546],{"class":36,"line":3386},[34,83529,12871],{"class":55},[34,83531,83532],{"class":44}," spec",[34,83534,56],{"class":55},[34,83536,83537],{"class":40}," { size: ",[34,83539,83540],{"class":504},"'40cm*40cm'",[34,83542,57103],{"class":40},[34,83544,83545],{"class":504},"'黑色'",[34,83547,57243],{"class":40},[34,83549,83550],{"class":36,"line":3403},[34,83551,83552],{"class":161},"    \u002F\u002F const arr = Object.values(spec)\n",[34,83554,83555],{"class":36,"line":3408},[34,83556,83557],{"class":161},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[34,83559,83560,83562,83564,83566,83569,83571,83573,83576,83579,83582,83584,83586,83589],{"class":36,"line":3413},[34,83561,54046],{"class":40},[34,83563,56038],{"class":3617},[34,83565,286],{"class":40},[34,83567,83568],{"class":504},"'div'",[34,83570,75888],{"class":40},[34,83572,221],{"class":55},[34,83574,83575],{"class":40}," Object.",[34,83577,83578],{"class":3617},"values",[34,83580,83581],{"class":40},"(spec).",[34,83583,75862],{"class":3617},[34,83585,286],{"class":40},[34,83587,83588],{"class":504},"'\u002F'",[34,83590,101],{"class":40},[34,83592,83593,83595,83597],{"class":36,"line":3418},[34,83594,54056],{"class":40},[34,83596,53452],{"class":52939},[34,83598,52946],{"class":40},[34,83600,83601,83603,83605],{"class":36,"line":3432},[34,83602,53424],{"class":40},[34,83604,53439],{"class":52939},[34,83606,52946],{"class":40},[34,83608,83609],{"class":36,"line":3437},[34,83610,1475],{"emptyLinePlaceholder":1474},[34,83612,83613,83615,83617],{"class":36,"line":4230},[34,83614,53424],{"class":40},[34,83616,52274],{"class":52939},[34,83618,52946],{"class":40},[103,83620,83621],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24555,83623,83625],{"id":83624},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[103,83627,83628],{},"静态方法，将伪数组转换为真数组",[103,83630,83631],{},[109,83632],{"alt":29,"src":83633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[24,83635,83637],{"className":54706,"code":83636,"language":54708,"meta":29,"style":29},"\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",[31,83638,83639,83647,83655,83667,83679,83691,83699,83707,83712,83717,83722,83727,83735],{"__ignoreMap":29},[34,83640,83641,83643,83645],{"class":36,"line":37},[34,83642,2701],{"class":40},[34,83644,53439],{"class":52939},[34,83646,52946],{"class":40},[34,83648,83649,83651,83653],{"class":36,"line":165},[34,83650,53783],{"class":40},[34,83652,2798],{"class":52939},[34,83654,52946],{"class":40},[34,83656,83657,83659,83661,83663,83665],{"class":36,"line":171},[34,83658,52980],{"class":40},[34,83660,1775],{"class":52939},[34,83662,56953],{"class":40},[34,83664,1775],{"class":52939},[34,83666,52946],{"class":40},[34,83668,83669,83671,83673,83675,83677],{"class":36,"line":182},[34,83670,52980],{"class":40},[34,83672,1775],{"class":52939},[34,83674,56953],{"class":40},[34,83676,1775],{"class":52939},[34,83678,52946],{"class":40},[34,83680,83681,83683,83685,83687,83689],{"class":36,"line":188},[34,83682,52980],{"class":40},[34,83684,1775],{"class":52939},[34,83686,56953],{"class":40},[34,83688,1775],{"class":52939},[34,83690,52946],{"class":40},[34,83692,83693,83695,83697],{"class":36,"line":518},[34,83694,54056],{"class":40},[34,83696,2798],{"class":52939},[34,83698,52946],{"class":40},[34,83700,83701,83703,83705],{"class":36,"line":524},[34,83702,53783],{"class":40},[34,83704,53452],{"class":52939},[34,83706,52946],{"class":40},[34,83708,83709],{"class":36,"line":530},[34,83710,83711],{"class":40},"    const lis = document.querySelectorAll('li')\n",[34,83713,83714],{"class":36,"line":624},[34,83715,83716],{"class":40},"    const liss = Array.from(lis)\n",[34,83718,83719],{"class":36,"line":630},[34,83720,83721],{"class":40},"    liss.pop()\n",[34,83723,83724],{"class":36,"line":636},[34,83725,83726],{"class":40},"    console.log(liss)\n",[34,83728,83729,83731,83733],{"class":36,"line":1513},[34,83730,54056],{"class":40},[34,83732,53452],{"class":52939},[34,83734,52946],{"class":40},[34,83736,83737,83739,83741],{"class":36,"line":1519},[34,83738,53424],{"class":40},[34,83740,53439],{"class":52939},[34,83742,52946],{"class":40},[103,83744,83745],{},[109,83746],{"alt":29,"src":83747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[1353,83749,83751],{"id":83750},"_41053-string","4.10.5.3 String",[103,83753,83754],{},[109,83755],{"alt":29,"src":83756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24555,83758,83760],{"id":83759},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[24,83762,83764],{"className":54706,"code":83763,"language":54708,"meta":29,"style":29},"\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",[31,83765,83766,83774,83782,83787,83792,83797,83801,83806,83811,83816,83824],{"__ignoreMap":29},[34,83767,83768,83770,83772],{"class":36,"line":37},[34,83769,2701],{"class":40},[34,83771,53439],{"class":52939},[34,83773,52946],{"class":40},[34,83775,83776,83778,83780],{"class":36,"line":165},[34,83777,53783],{"class":40},[34,83779,53452],{"class":52939},[34,83781,52946],{"class":40},[34,83783,83784],{"class":36,"line":171},[34,83785,83786],{"class":40},"    \u002F\u002F 把字符串转化为数组\n",[34,83788,83789],{"class":36,"line":182},[34,83790,83791],{"class":40},"    const str = 'pink,red'\n",[34,83793,83794],{"class":36,"line":188},[34,83795,83796],{"class":40},"    const arr = str.split(',')\n",[34,83798,83799],{"class":36,"line":518},[34,83800,82275],{"class":40},[34,83802,83803],{"class":36,"line":524},[34,83804,83805],{"class":40},"    const str1 = '2025-8-25'\n",[34,83807,83808],{"class":36,"line":530},[34,83809,83810],{"class":40},"    const arr1 = str1.split('-')\n",[34,83812,83813],{"class":36,"line":624},[34,83814,83815],{"class":40},"    console.log(arr1)\n",[34,83817,83818,83820,83822],{"class":36,"line":630},[34,83819,54056],{"class":40},[34,83821,53452],{"class":52939},[34,83823,52946],{"class":40},[34,83825,83826,83828,83830],{"class":36,"line":636},[34,83827,53424],{"class":40},[34,83829,53439],{"class":52939},[34,83831,52946],{"class":40},[24555,83833,83835],{"id":83834},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[103,83837,6832],{},[103,83839,83840],{},"substring(indexStart)",[103,83842,83843],{},"substring(indexStart, indexEnd)",[2798,83845,83846,83857,83869,83879],{},[1775,83847,83848,83849,83852,83853,83856],{},"如果省略了 ",[31,83850,83851],{},"indexEnd","，则 ",[31,83854,83855],{},"substring()"," 提取字符直到字符串的末尾",[1775,83858,83859,83860,83863,83864,83852,83866,83868],{},"如果 ",[31,83861,83862],{},"indexStart"," 等于 ",[31,83865,83851],{},[31,83867,83855],{}," 返回一个空字符串",[1775,83870,83859,83871,83873,83874,83852,83876,83878],{},[31,83872,83862],{}," 大于 ",[31,83875,83851],{},[31,83877,83855],{}," 的效果就像交换了这两个参数一样",[1775,83880,83881],{},"结束的索引号不包含想要截取的部分",[24,83883,83885],{"className":83126,"code":83884,"language":83128,"meta":29,"style":29},"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",[31,83886,83887,83899,83903,83937,83967,83971,84002,84006,84033,84063,84093,84097,84128],{"__ignoreMap":29},[34,83888,83889,83892,83894,83897],{"class":36,"line":37},[34,83890,83891],{"class":40},"const anyString ",[34,83893,221],{"class":55},[34,83895,83896],{"class":504}," \"Mozilla\"",[34,83898,2952],{"class":40},[34,83900,83901],{"class":36,"line":165},[34,83902,1475],{"emptyLinePlaceholder":1474},[34,83904,83905,83908,83910,83912,83914,83917,83919,83922,83924,83926,83928,83930,83932,83934],{"class":36,"line":171},[34,83906,83907],{"class":44},"console",[34,83909,2353],{"class":40},[34,83911,59886],{"class":44},[34,83913,286],{"class":40},[34,83915,83916],{"class":44},"anyString",[34,83918,2353],{"class":40},[34,83920,83921],{"class":44},"substring",[34,83923,286],{"class":40},[34,83925,177],{"class":44},[34,83927,48],{"class":40},[34,83929,394],{"class":44},[34,83931,76892],{"class":40},[34,83933,34970],{"class":55},[34,83935,83936],{"class":504}," 'M'\n",[34,83938,83939,83941,83943,83945,83947,83949,83951,83953,83955,83957,83959,83961,83963,83965],{"class":36,"line":182},[34,83940,83907],{"class":44},[34,83942,2353],{"class":40},[34,83944,59886],{"class":44},[34,83946,286],{"class":40},[34,83948,83916],{"class":44},[34,83950,2353],{"class":40},[34,83952,83921],{"class":44},[34,83954,286],{"class":40},[34,83956,394],{"class":44},[34,83958,48],{"class":40},[34,83960,177],{"class":44},[34,83962,76892],{"class":40},[34,83964,34970],{"class":55},[34,83966,83936],{"class":504},[34,83968,83969],{"class":36,"line":188},[34,83970,1475],{"emptyLinePlaceholder":1474},[34,83972,83973,83975,83977,83979,83981,83983,83985,83987,83989,83991,83993,83995,83997,83999],{"class":36,"line":518},[34,83974,83907],{"class":44},[34,83976,2353],{"class":40},[34,83978,59886],{"class":44},[34,83980,286],{"class":40},[34,83982,83916],{"class":44},[34,83984,2353],{"class":40},[34,83986,83921],{"class":44},[34,83988,286],{"class":40},[34,83990,177],{"class":44},[34,83992,48],{"class":40},[34,83994,1115],{"class":44},[34,83996,76892],{"class":40},[34,83998,34970],{"class":55},[34,84000,84001],{"class":504}," 'Mozill'\n",[34,84003,84004],{"class":36,"line":524},[34,84005,1475],{"emptyLinePlaceholder":1474},[34,84007,84008,84010,84012,84014,84016,84018,84020,84022,84024,84026,84028,84030],{"class":36,"line":530},[34,84009,83907],{"class":44},[34,84011,2353],{"class":40},[34,84013,59886],{"class":44},[34,84015,286],{"class":40},[34,84017,83916],{"class":44},[34,84019,2353],{"class":40},[34,84021,83921],{"class":44},[34,84023,286],{"class":40},[34,84025,247],{"class":44},[34,84027,76892],{"class":40},[34,84029,34970],{"class":55},[34,84031,84032],{"class":504}," 'lla'\n",[34,84034,84035,84037,84039,84041,84043,84045,84047,84049,84051,84053,84055,84057,84059,84061],{"class":36,"line":624},[34,84036,83907],{"class":44},[34,84038,2353],{"class":40},[34,84040,59886],{"class":44},[34,84042,286],{"class":40},[34,84044,83916],{"class":44},[34,84046,2353],{"class":40},[34,84048,83921],{"class":44},[34,84050,286],{"class":40},[34,84052,247],{"class":44},[34,84054,48],{"class":40},[34,84056,609],{"class":44},[34,84058,76948],{"class":40},[34,84060,34970],{"class":55},[34,84062,84032],{"class":504},[34,84064,84065,84067,84069,84071,84073,84075,84077,84079,84081,84083,84085,84087,84089,84091],{"class":36,"line":630},[34,84066,83907],{"class":44},[34,84068,2353],{"class":40},[34,84070,59886],{"class":44},[34,84072,286],{"class":40},[34,84074,83916],{"class":44},[34,84076,2353],{"class":40},[34,84078,83921],{"class":44},[34,84080,286],{"class":40},[34,84082,609],{"class":44},[34,84084,48],{"class":40},[34,84086,247],{"class":44},[34,84088,76892],{"class":40},[34,84090,34970],{"class":55},[34,84092,84032],{"class":504},[34,84094,84095],{"class":36,"line":636},[34,84096,1475],{"emptyLinePlaceholder":1474},[34,84098,84099,84101,84103,84105,84107,84109,84111,84113,84115,84117,84119,84121,84123,84125],{"class":36,"line":1513},[34,84100,83907],{"class":44},[34,84102,2353],{"class":40},[34,84104,59886],{"class":44},[34,84106,286],{"class":40},[34,84108,83916],{"class":44},[34,84110,2353],{"class":40},[34,84112,83921],{"class":44},[34,84114,286],{"class":40},[34,84116,177],{"class":44},[34,84118,48],{"class":40},[34,84120,609],{"class":44},[34,84122,76892],{"class":40},[34,84124,34970],{"class":55},[34,84126,84127],{"class":504}," 'Mozilla'\n",[34,84129,84130,84132,84134,84136,84138,84140,84142,84144,84146,84148,84150,84152,84154,84156],{"class":36,"line":1519},[34,84131,83907],{"class":44},[34,84133,2353],{"class":40},[34,84135,59886],{"class":44},[34,84137,286],{"class":40},[34,84139,83916],{"class":44},[34,84141,2353],{"class":40},[34,84143,83921],{"class":44},[34,84145,286],{"class":40},[34,84147,177],{"class":44},[34,84149,48],{"class":40},[34,84151,410],{"class":44},[34,84153,76892],{"class":40},[34,84155,34970],{"class":55},[34,84157,84127],{"class":504},[24555,84159,84161],{"id":84160},"_410533-startswith","4.10.5.3.3 startsWith",[103,84163,84164,84167,84168,84173,84174,84176,84177],{},[31,84165,84166],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[1165,84169,84170],{},[31,84171,84172],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[31,84175,3021],{}," 或 ",[31,84178,67659],{},[24,84180,84182],{"className":79132,"code":84181,"language":79134,"meta":29,"style":29},"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",[31,84183,84184,84196,84215,84220,84240],{"__ignoreMap":29},[34,84185,84186,84188,84191,84193],{"class":36,"line":37},[34,84187,8442],{"class":55},[34,84189,84190],{"class":40}," str1 ",[34,84192,221],{"class":55},[34,84194,84195],{"class":504}," \"Saturday night plans\"\n",[34,84197,84198,84200,84202,84205,84208,84210,84213],{"class":36,"line":165},[34,84199,79169],{"class":40},[34,84201,59886],{"class":3617},[34,84203,84204],{"class":40},"(str1.",[34,84206,84207],{"class":3617},"startsWith",[34,84209,286],{"class":40},[34,84211,84212],{"class":504},"\"Sat\"",[34,84214,296],{"class":40},[34,84216,84217],{"class":36,"line":171},[34,84218,84219],{"class":161},"\u002F\u002F Expected output: true\n",[34,84221,84222,84224,84226,84228,84230,84232,84234,84236,84238],{"class":36,"line":182},[34,84223,79169],{"class":40},[34,84225,59886],{"class":3617},[34,84227,84204],{"class":40},[34,84229,84207],{"class":3617},[34,84231,286],{"class":40},[34,84233,84212],{"class":504},[34,84235,48],{"class":40},[34,84237,337],{"class":44},[34,84239,296],{"class":40},[34,84241,84242],{"class":36,"line":188},[34,84243,84244],{"class":161},"\u002F\u002F Expected output: false\n",[24,84246,84248],{"className":52272,"code":84247,"language":52274,"meta":29,"style":29},"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",[31,84249,84250,84255,84260,84264,84269,84274],{"__ignoreMap":29},[34,84251,84252],{"class":36,"line":37},[34,84253,84254],{"class":40},"startsWith(searchString)\n",[34,84256,84257],{"class":36,"line":165},[34,84258,84259],{"class":40},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[34,84261,84262],{"class":36,"line":171},[34,84263,1475],{"emptyLinePlaceholder":1474},[34,84265,84266],{"class":36,"line":182},[34,84267,84268],{"class":40},"const str3 = 'pink老师上课中'\n",[34,84270,84271],{"class":36,"line":188},[34,84272,84273],{"class":40},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[34,84275,84276],{"class":36,"line":518},[34,84277,84278],{"class":40},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24555,84280,84282],{"id":84281},"_410534-includes","4.10.5.3.4 includes",[103,84284,84285],{},"includes(searchString) includes(searchString, position)",[1772,84287,84288],{},[1775,84289,84290],{},"searchString:",[103,84292,84293,84294,84296,84297,84302,84303,84308,84309,23146,84312,84315,84316,84319],{},"一个要在 ",[31,84295,2961],{}," 中查找的字符串。",[236,84298,84301],{"href":84299,"rel":84300},"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",[25510],"不能是正则表达式","。所有非正则表达式的值都会被",[236,84304,84307],{"href":84305,"rel":84306},"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",[25510],"强制转换为字符串","，因此如果该参数被省略或传入 ",[31,84310,84311],{},"undefined",[31,84313,84314],{},"includes()"," 方法会在字符串中搜索 ",[31,84317,84318],{},"\"undefined\"","，这通常不是你想要的",[1772,84321,84322],{"start":165},[1775,84323,84324,2650],{},[31,84325,84326],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[103,84328,84329,84330,84333,84334],{},"在字符串中开始搜索 ",[31,84331,84332],{},"searchString"," 的位置。默认值为 ",[31,84335,177],{},[1772,84337,84338],{"start":171},[1775,84339,84340],{},"返回值：",[103,84342,84343,84344,84346,84347,84351,84352],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[31,84345,84332],{}," 为空字符串的情况），则返回 ",[1165,84348,84349],{},[31,84350,3021],{}," ，否则返回 ",[1165,84353,84354],{},[31,84355,67659],{},[1772,84357,84358],{"start":182},[1775,84359,84360],{},"异常：",[103,84362,83859,84363,15441,84365,84369],{},[31,84364,84332],{},[236,84366,84368],{"href":84299,"rel":84367},[25510],"是一个正则表达式","，则会抛出",[103,84371,84372],{},"只要是有就是true，不需要非得以谁开头结尾",[24,84374,84376],{"className":79132,"code":84375,"language":79134,"meta":29,"style":29},"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",[31,84377,84378,84389,84411,84430,84450,84472,84491],{"__ignoreMap":29},[34,84379,84380,84382,84384,84386],{"class":36,"line":37},[34,84381,8442],{"class":55},[34,84383,81412],{"class":40},[34,84385,221],{"class":55},[34,84387,84388],{"class":504}," \"To be, or not to be, that is the question.\"\n",[34,84390,84391,84393,84395,84398,84401,84403,84406,84408],{"class":36,"line":165},[34,84392,79169],{"class":40},[34,84394,59886],{"class":3617},[34,84396,84397],{"class":40},"(str.",[34,84399,84400],{"class":3617},"includes",[34,84402,286],{"class":40},[34,84404,84405],{"class":504},"\"To be\"",[34,84407,793],{"class":40},[34,84409,84410],{"class":161},"  \u002F\u002F true\n",[34,84412,84413,84415,84417,84419,84421,84423,84426,84428],{"class":36,"line":171},[34,84414,79169],{"class":40},[34,84416,59886],{"class":3617},[34,84418,84397],{"class":40},[34,84420,84400],{"class":3617},[34,84422,286],{"class":40},[34,84424,84425],{"class":504},"\"question\"",[34,84427,793],{"class":40},[34,84429,84410],{"class":161},[34,84431,84432,84434,84436,84438,84440,84442,84445,84447],{"class":36,"line":182},[34,84433,79169],{"class":40},[34,84435,59886],{"class":3617},[34,84437,84397],{"class":40},[34,84439,84400],{"class":3617},[34,84441,286],{"class":40},[34,84443,84444],{"class":504},"\"nonexistent\"",[34,84446,793],{"class":40},[34,84448,84449],{"class":161},"  \u002F\u002F false\n",[34,84451,84452,84454,84456,84458,84460,84462,84464,84466,84468,84470],{"class":36,"line":188},[34,84453,79169],{"class":40},[34,84455,59886],{"class":3617},[34,84457,84397],{"class":40},[34,84459,84400],{"class":3617},[34,84461,286],{"class":40},[34,84463,84405],{"class":504},[34,84465,48],{"class":40},[34,84467,394],{"class":44},[34,84469,793],{"class":40},[34,84471,84449],{"class":161},[34,84473,84474,84476,84478,84480,84482,84484,84487,84489],{"class":36,"line":518},[34,84475,79169],{"class":40},[34,84477,59886],{"class":3617},[34,84479,84397],{"class":40},[34,84481,84400],{"class":3617},[34,84483,286],{"class":40},[34,84485,84486],{"class":504},"\"TO BE\"",[34,84488,793],{"class":40},[34,84490,84449],{"class":161},[34,84492,84493,84495,84497,84499,84501,84503,84505,84507],{"class":36,"line":524},[34,84494,79169],{"class":40},[34,84496,59886],{"class":3617},[34,84498,84397],{"class":40},[34,84500,84400],{"class":3617},[34,84502,286],{"class":40},[34,84504,9302],{"class":504},[34,84506,793],{"class":40},[34,84508,84410],{"class":161},[24555,84510,84512],{"id":84511},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[24,84514,84516],{"className":54706,"code":84515,"language":54708,"meta":29,"style":29},"\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",[31,84517,84518,84526,84534,84539,84544,84549,84554,84559,84567],{"__ignoreMap":29},[34,84519,84520,84522,84524],{"class":36,"line":37},[34,84521,2701],{"class":40},[34,84523,53439],{"class":52939},[34,84525,52946],{"class":40},[34,84527,84528,84530,84532],{"class":36,"line":165},[34,84529,53783],{"class":40},[34,84531,53452],{"class":52939},[34,84533,52946],{"class":40},[34,84535,84536],{"class":36,"line":171},[34,84537,84538],{"class":40},"    const num = 10\n",[34,84540,84541],{"class":36,"line":182},[34,84542,84543],{"class":40},"    \u002F\u002F 强制转换\n",[34,84545,84546],{"class":36,"line":188},[34,84547,84548],{"class":40},"    console.log(String(num))\n",[34,84550,84551],{"class":36,"line":518},[34,84552,84553],{"class":40},"    \u002F\u002F toString()方法转换\n",[34,84555,84556],{"class":36,"line":524},[34,84557,84558],{"class":40},"    console.log(num.toString())\n",[34,84560,84561,84563,84565],{"class":36,"line":530},[34,84562,54056],{"class":40},[34,84564,53452],{"class":52939},[34,84566,52946],{"class":40},[34,84568,84569,84571,84573],{"class":36,"line":624},[34,84570,53424],{"class":40},[34,84572,53439],{"class":52939},[34,84574,52946],{"class":40},[24555,84576,84578],{"id":84577},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[103,84580,84581],{},[109,84582],{"alt":29,"src":84583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[24,84585,84587],{"className":52272,"code":84586,"language":52274,"meta":29,"style":29},"\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",[31,84588,84589,84599,84613,84617,84625,84639,84659,84671,84679,84683,84691,84703,84711,84723,84728,84733,84738,84785,84801,84809,84817,84821],{"__ignoreMap":29},[34,84590,84591,84593,84595,84597],{"class":36,"line":37},[34,84592,52936],{"class":40},[34,84594,52940],{"class":52939},[34,84596,52943],{"class":3617},[34,84598,52946],{"class":40},[34,84600,84601,84603,84605,84607,84609,84611],{"class":36,"line":165},[34,84602,2701],{"class":40},[34,84604,52274],{"class":52939},[34,84606,52955],{"class":3617},[34,84608,221],{"class":40},[34,84610,52960],{"class":504},[34,84612,52946],{"class":40},[34,84614,84615],{"class":36,"line":171},[34,84616,1475],{"emptyLinePlaceholder":1474},[34,84618,84619,84621,84623],{"class":36,"line":182},[34,84620,2701],{"class":40},[34,84622,52973],{"class":52939},[34,84624,52946],{"class":40},[34,84626,84627,84629,84631,84633,84635,84637],{"class":36,"line":188},[34,84628,53783],{"class":40},[34,84630,52983],{"class":52939},[34,84632,52986],{"class":3617},[34,84634,221],{"class":40},[34,84636,52991],{"class":504},[34,84638,52946],{"class":40},[34,84640,84641,84643,84645,84647,84649,84651,84653,84655,84657],{"class":36,"line":518},[34,84642,53783],{"class":40},[34,84644,52983],{"class":52939},[34,84646,16566],{"class":3617},[34,84648,221],{"class":40},[34,84650,53030],{"class":504},[34,84652,53010],{"class":3617},[34,84654,221],{"class":40},[34,84656,53037],{"class":504},[34,84658,52946],{"class":40},[34,84660,84661,84663,84665,84667,84669],{"class":36,"line":524},[34,84662,53783],{"class":40},[34,84664,53046],{"class":52939},[34,84666,53049],{"class":40},[34,84668,53046],{"class":52939},[34,84670,52946],{"class":40},[34,84672,84673,84675,84677],{"class":36,"line":530},[34,84674,53424],{"class":40},[34,84676,52973],{"class":52939},[34,84678,52946],{"class":40},[34,84680,84681],{"class":36,"line":624},[34,84682,1475],{"emptyLinePlaceholder":1474},[34,84684,84685,84687,84689],{"class":36,"line":630},[34,84686,2701],{"class":40},[34,84688,53439],{"class":52939},[34,84690,52946],{"class":40},[34,84692,84693,84695,84697,84699,84701],{"class":36,"line":636},[34,84694,53783],{"class":40},[34,84696,53250],{"class":52939},[34,84698,56953],{"class":40},[34,84700,53250],{"class":52939},[34,84702,52946],{"class":40},[34,84704,84705,84707,84709],{"class":36,"line":1513},[34,84706,53783],{"class":40},[34,84708,53452],{"class":52939},[34,84710,52946],{"class":40},[34,84712,84713,84715,84718,84720],{"class":36,"line":1519},[34,84714,12871],{"class":55},[34,84716,84717],{"class":44}," gift",[34,84719,56],{"class":55},[34,84721,84722],{"class":504}," '50g的茶叶，清洗球'\n",[34,84724,84725],{"class":36,"line":3283},[34,84726,84727],{"class":161},"    \u002F\u002F 1.把字符串拆分为数组\n",[34,84729,84730],{"class":36,"line":3297},[34,84731,84732],{"class":161},"    \u002F\u002F console.log(gift.split(','))\n",[34,84734,84735],{"class":36,"line":3302},[34,84736,84737],{"class":161},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[34,84739,84740,84742,84744,84746,84749,84752,84754,84757,84759,84761,84763,84765,84767,84770,84772,84775,84777,84779,84781,84783],{"class":36,"line":3308},[34,84741,12871],{"class":55},[34,84743,75558],{"class":44},[34,84745,56],{"class":55},[34,84747,84748],{"class":40}," gift.",[34,84750,84751],{"class":3617},"split",[34,84753,286],{"class":40},[34,84755,84756],{"class":504},"'，'",[34,84758,32468],{"class":40},[34,84760,75683],{"class":3617},[34,84762,286],{"class":40},[34,84764,81432],{"class":51},[34,84766,81435],{"class":55},[34,84768,84769],{"class":504}," `\u003Cspan>【赠品】${",[34,84771,81432],{"class":40},[34,84773,84774],{"class":504},"}\u003C\u002Fspan>\u003Cbr>`",[34,84776,32468],{"class":40},[34,84778,75862],{"class":3617},[34,84780,286],{"class":40},[34,84782,75867],{"class":504},[34,84784,101],{"class":40},[34,84786,84787,84789,84791,84793,84795,84797,84799],{"class":36,"line":3328},[34,84788,54046],{"class":40},[34,84790,56038],{"class":3617},[34,84792,286],{"class":40},[34,84794,83568],{"class":504},[34,84796,75888],{"class":40},[34,84798,221],{"class":55},[34,84800,75624],{"class":40},[34,84802,84803,84805,84807],{"class":36,"line":3333},[34,84804,54056],{"class":40},[34,84806,53452],{"class":52939},[34,84808,52946],{"class":40},[34,84810,84811,84813,84815],{"class":36,"line":3347},[34,84812,53424],{"class":40},[34,84814,53439],{"class":52939},[34,84816,52946],{"class":40},[34,84818,84819],{"class":36,"line":3352},[34,84820,1475],{"emptyLinePlaceholder":1474},[34,84822,84823,84825,84827],{"class":36,"line":3381},[34,84824,53424],{"class":40},[34,84826,52274],{"class":52939},[34,84828,52946],{"class":40},[1353,84830,84832],{"id":84831},"_41054-number","4.10.5.4 Number",[103,84834,84835],{},[109,84836],{"alt":29,"src":84837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[103,84839,84840],{},"整数也可以进行toFixed来保留小数",[103,84842,84843],{},"比如：",[103,84845,84846],{},"const price=10",[103,84848,84849],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[1353,84851,84853],{"id":84852},"_41055-购物车展示","4.10.5.5 购物车展示",[103,84855,84856],{},[109,84857],{"alt":29,"src":84858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[24,84860,84862],{"className":52272,"code":84861,"language":52274,"meta":29,"style":29},"\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",[31,84863,84864,84874,84888,84892,84900,84914,84934,84946,84954,84960,84970,84980,84990,84994,84998,85004,85016,85030,85034,85038,85044,85056,85072,85082,85098,85102,85106,85112,85122,85132,85136,85140,85148,85160,85172,85184,85188,85192,85200,85212,85216,85220,85231,85241,85253,85265,85275,85279,85283,85291,85300,85312,85322,85332,85336,85340,85348,85357,85364,85374,85386,85390,85394,85403,85413,85424,85436,85448,85452,85456,85465,85475,85486,85490,85494,85500,85512,85524,85534,85544,85562,85574,85578,85582,85591,85603,85613,85623,85635,85639,85647,85655,85659,85667,85681,85689,85703,85731,85739,85747,85757,85761,85769,85777,85786,85794,85803,85813,85817,85821,85829,85837,85846,85854,85862,85875,85879,85883,85891,85899,85908,85916,85924,85939,85943,85947,85955,85963,85972,85980,85988,86002,86010,86014,86018,86023,86049,86054,86091,86096,86119,86124,86178,86183,86219,86223,86229,86234,86243,86257,86266,86285,86294,86304,86309,86314,86327,86332,86386,86412,86420,86428,86432],{"__ignoreMap":29},[34,84865,84866,84868,84870,84872],{"class":36,"line":37},[34,84867,52936],{"class":40},[34,84869,52940],{"class":52939},[34,84871,52943],{"class":3617},[34,84873,52946],{"class":40},[34,84875,84876,84878,84880,84882,84884,84886],{"class":36,"line":165},[34,84877,2701],{"class":40},[34,84879,52274],{"class":52939},[34,84881,52955],{"class":3617},[34,84883,221],{"class":40},[34,84885,52960],{"class":504},[34,84887,52946],{"class":40},[34,84889,84890],{"class":36,"line":171},[34,84891,1475],{"emptyLinePlaceholder":1474},[34,84893,84894,84896,84898],{"class":36,"line":182},[34,84895,2701],{"class":40},[34,84897,52973],{"class":52939},[34,84899,52946],{"class":40},[34,84901,84902,84904,84906,84908,84910,84912],{"class":36,"line":188},[34,84903,53783],{"class":40},[34,84905,52983],{"class":52939},[34,84907,52986],{"class":3617},[34,84909,221],{"class":40},[34,84911,52991],{"class":504},[34,84913,52946],{"class":40},[34,84915,84916,84918,84920,84922,84924,84926,84928,84930,84932],{"class":36,"line":518},[34,84917,53783],{"class":40},[34,84919,52983],{"class":52939},[34,84921,16566],{"class":3617},[34,84923,221],{"class":40},[34,84925,53030],{"class":504},[34,84927,53010],{"class":3617},[34,84929,221],{"class":40},[34,84931,53037],{"class":504},[34,84933,52946],{"class":40},[34,84935,84936,84938,84940,84942,84944],{"class":36,"line":524},[34,84937,53783],{"class":40},[34,84939,53046],{"class":52939},[34,84941,53049],{"class":40},[34,84943,53046],{"class":52939},[34,84945,52946],{"class":40},[34,84947,84948,84950,84952],{"class":36,"line":530},[34,84949,53783],{"class":40},[34,84951,1711],{"class":52939},[34,84953,52946],{"class":40},[34,84955,84956,84958],{"class":36,"line":624},[34,84957,8053],{"class":52939},[34,84959,17218],{"class":40},[34,84961,84962,84964,84966,84968],{"class":36,"line":630},[34,84963,56334],{"class":44},[34,84965,53076],{"class":40},[34,84967,177],{"class":44},[34,84969,2952],{"class":40},[34,84971,84972,84974,84976,84978],{"class":36,"line":636},[34,84973,56345],{"class":44},[34,84975,53076],{"class":40},[34,84977,177],{"class":44},[34,84979,2952],{"class":40},[34,84981,84982,84984,84986,84988],{"class":36,"line":1513},[34,84983,74235],{"class":44},[34,84985,53076],{"class":40},[34,84987,62144],{"class":44},[34,84989,2952],{"class":40},[34,84991,84992],{"class":36,"line":1519},[34,84993,3841],{"class":40},[34,84995,84996],{"class":36,"line":3283},[34,84997,1475],{"emptyLinePlaceholder":1474},[34,84999,85000,85002],{"class":36,"line":3297},[34,85001,63762],{"class":3617},[34,85003,17218],{"class":40},[34,85005,85006,85008,85010,85012,85014],{"class":36,"line":3302},[34,85007,56410],{"class":44},[34,85009,53076],{"class":40},[34,85011,80211],{"class":44},[34,85013,53131],{"class":55},[34,85015,2952],{"class":40},[34,85017,85018,85020,85022,85024,85026,85028],{"class":36,"line":3308},[34,85019,56345],{"class":44},[34,85021,53076],{"class":40},[34,85023,451],{"class":44},[34,85025,53131],{"class":55},[34,85027,53195],{"class":44},[34,85029,2952],{"class":40},[34,85031,85032],{"class":36,"line":3328},[34,85033,3841],{"class":40},[34,85035,85036],{"class":36,"line":3333},[34,85037,1475],{"emptyLinePlaceholder":1474},[34,85039,85040,85042],{"class":36,"line":3347},[34,85041,80262],{"class":3617},[34,85043,17218],{"class":40},[34,85045,85046,85048,85050,85052,85054],{"class":36,"line":3352},[34,85047,56334],{"class":44},[34,85049,53076],{"class":40},[34,85051,2370],{"class":44},[34,85053,53131],{"class":55},[34,85055,2952],{"class":40},[34,85057,85058,85060,85062,85064,85066,85068,85070],{"class":36,"line":3381},[34,85059,63499],{"class":44},[34,85061,53076],{"class":40},[34,85063,29767],{"class":44},[34,85065,80317],{"class":44},[34,85067,80320],{"class":44},[34,85069,2490],{"class":55},[34,85071,2952],{"class":40},[34,85073,85074,85076,85078,85080],{"class":36,"line":3386},[34,85075,56648],{"class":44},[34,85077,53076],{"class":40},[34,85079,53116],{"class":44},[34,85081,2952],{"class":40},[34,85083,85084,85086,85088,85090,85092,85094,85096],{"class":36,"line":3403},[34,85085,63616],{"class":44},[34,85087,53076],{"class":40},[34,85089,394],{"class":44},[34,85091,53131],{"class":55},[34,85093,53160],{"class":44},[34,85095,63883],{"class":44},[34,85097,2952],{"class":40},[34,85099,85100],{"class":36,"line":3408},[34,85101,3841],{"class":40},[34,85103,85104],{"class":36,"line":3413},[34,85105,1475],{"emptyLinePlaceholder":1474},[34,85107,85108,85110],{"class":36,"line":3418},[34,85109,80380],{"class":3617},[34,85111,17218],{"class":40},[34,85113,85114,85116,85118,85120],{"class":36,"line":3432},[34,85115,63664],{"class":44},[34,85117,53076],{"class":40},[34,85119,63669],{"class":44},[34,85121,2952],{"class":40},[34,85123,85124,85126,85128,85130],{"class":36,"line":3437},[34,85125,56523],{"class":44},[34,85127,53076],{"class":40},[34,85129,63457],{"class":44},[34,85131,2952],{"class":40},[34,85133,85134],{"class":36,"line":4230},[34,85135,3841],{"class":40},[34,85137,85138],{"class":36,"line":4244},[34,85139,1475],{"emptyLinePlaceholder":1474},[34,85141,85142,85144,85146],{"class":36,"line":4252},[34,85143,80262],{"class":3617},[34,85145,57254],{"class":52939},[34,85147,17218],{"class":40},[34,85149,85150,85152,85154,85156,85158],{"class":36,"line":4257},[34,85151,56410],{"class":44},[34,85153,53076],{"class":40},[34,85155,2407],{"class":44},[34,85157,53131],{"class":55},[34,85159,2952],{"class":40},[34,85161,85162,85164,85166,85168,85170],{"class":36,"line":4263},[34,85163,56424],{"class":44},[34,85165,53076],{"class":40},[34,85167,2407],{"class":44},[34,85169,53131],{"class":55},[34,85171,2952],{"class":40},[34,85173,85174,85176,85178,85180,85182],{"class":36,"line":4269},[34,85175,63389],{"class":44},[34,85177,53076],{"class":40},[34,85179,224],{"class":44},[34,85181,53131],{"class":55},[34,85183,2952],{"class":40},[34,85185,85186],{"class":36,"line":4274},[34,85187,3841],{"class":40},[34,85189,85190],{"class":36,"line":9598},[34,85191,1475],{"emptyLinePlaceholder":1474},[34,85193,85194,85196,85198],{"class":36,"line":9622},[34,85195,80262],{"class":3617},[34,85197,63943],{"class":3617},[34,85199,17218],{"class":40},[34,85201,85202,85204,85206,85208,85210],{"class":36,"line":9627},[34,85203,56410],{"class":44},[34,85205,53076],{"class":40},[34,85207,3376],{"class":44},[34,85209,53131],{"class":55},[34,85211,2952],{"class":40},[34,85213,85214],{"class":36,"line":9633},[34,85215,3841],{"class":40},[34,85217,85218],{"class":36,"line":9660},[34,85219,1475],{"emptyLinePlaceholder":1474},[34,85221,85222,85224,85226,85229],{"class":36,"line":9665},[34,85223,80262],{"class":3617},[34,85225,63943],{"class":3617},[34,85227,85228],{"class":3617}," .tag",[34,85230,17218],{"class":40},[34,85232,85233,85235,85237,85239],{"class":36,"line":9671},[34,85234,56648],{"class":44},[34,85236,53076],{"class":40},[34,85238,62508],{"class":44},[34,85240,2952],{"class":40},[34,85242,85243,85245,85247,85249,85251],{"class":36,"line":9683},[34,85244,56334],{"class":44},[34,85246,53076],{"class":40},[34,85248,332],{"class":44},[34,85250,53131],{"class":55},[34,85252,2952],{"class":40},[34,85254,85255,85257,85259,85261,85263],{"class":36,"line":9695},[34,85256,56561],{"class":44},[34,85258,53076],{"class":40},[34,85260,2293],{"class":44},[34,85262,53131],{"class":55},[34,85264,2952],{"class":40},[34,85266,85267,85269,85271,85273],{"class":36,"line":9707},[34,85268,59055],{"class":44},[34,85270,53076],{"class":40},[34,85272,63709],{"class":44},[34,85274,2952],{"class":40},[34,85276,85277],{"class":36,"line":11366},[34,85278,3841],{"class":40},[34,85280,85281],{"class":36,"line":11391},[34,85282,1475],{"emptyLinePlaceholder":1474},[34,85284,85285,85287,85289],{"class":36,"line":11414},[34,85286,80262],{"class":3617},[34,85288,80554],{"class":3617},[34,85290,33108],{"class":40},[34,85292,85293,85295,85298],{"class":36,"line":11438},[34,85294,80262],{"class":3617},[34,85296,85297],{"class":3617}," .sub-total",[34,85299,17218],{"class":40},[34,85301,85302,85304,85306,85308,85310],{"class":36,"line":11443},[34,85303,56561],{"class":44},[34,85305,53076],{"class":40},[34,85307,2445],{"class":44},[34,85309,53131],{"class":55},[34,85311,2952],{"class":40},[34,85313,85314,85316,85318,85320],{"class":36,"line":11448},[34,85315,59055],{"class":44},[34,85317,53076],{"class":40},[34,85319,80577],{"class":44},[34,85321,2952],{"class":40},[34,85323,85324,85326,85328,85330],{"class":36,"line":11453},[34,85325,63476],{"class":44},[34,85327,53076],{"class":40},[34,85329,394],{"class":44},[34,85331,2952],{"class":40},[34,85333,85334],{"class":36,"line":11462},[34,85335,3841],{"class":40},[34,85337,85338],{"class":36,"line":11467},[34,85339,1475],{"emptyLinePlaceholder":1474},[34,85341,85342,85344,85346],{"class":36,"line":11473},[34,85343,80262],{"class":3617},[34,85345,80594],{"class":3617},[34,85347,33108],{"class":40},[34,85349,85350,85352,85355],{"class":36,"line":11494},[34,85351,80262],{"class":3617},[34,85353,85354],{"class":3617}," .sub-total::before",[34,85356,33108],{"class":40},[34,85358,85359,85362],{"class":36,"line":11500},[34,85360,85361],{"class":3617},"    .amount::before",[34,85363,17218],{"class":40},[34,85365,85366,85368,85370,85372],{"class":36,"line":11514},[34,85367,80601],{"class":44},[34,85369,53076],{"class":40},[34,85371,80606],{"class":504},[34,85373,2952],{"class":40},[34,85375,85376,85378,85380,85382,85384],{"class":36,"line":11520},[34,85377,56561],{"class":44},[34,85379,53076],{"class":40},[34,85381,2293],{"class":44},[34,85383,53131],{"class":55},[34,85385,2952],{"class":40},[34,85387,85388],{"class":36,"line":11547},[34,85389,3841],{"class":40},[34,85391,85392],{"class":36,"line":11556},[34,85393,1475],{"emptyLinePlaceholder":1474},[34,85395,85396,85398,85401],{"class":36,"line":11562},[34,85397,80262],{"class":3617},[34,85399,85400],{"class":3617}," .spec",[34,85402,17218],{"class":40},[34,85404,85405,85407,85409,85411],{"class":36,"line":11570},[34,85406,63476],{"class":44},[34,85408,53076],{"class":40},[34,85410,332],{"class":44},[34,85412,2952],{"class":40},[34,85414,85415,85417,85419,85422],{"class":36,"line":11575},[34,85416,59055],{"class":44},[34,85418,53076],{"class":40},[34,85420,85421],{"class":44},"#888",[34,85423,2952],{"class":40},[34,85425,85426,85428,85430,85432,85434],{"class":36,"line":18250},[34,85427,56561],{"class":44},[34,85429,53076],{"class":40},[34,85431,2344],{"class":44},[34,85433,53131],{"class":55},[34,85435,2952],{"class":40},[34,85437,85438,85440,85442,85444,85446],{"class":36,"line":18256},[34,85439,63639],{"class":44},[34,85441,53076],{"class":40},[34,85443,1249],{"class":44},[34,85445,53131],{"class":55},[34,85447,2952],{"class":40},[34,85449,85450],{"class":36,"line":18279},[34,85451,3841],{"class":40},[34,85453,85454],{"class":36,"line":18285},[34,85455,1475],{"emptyLinePlaceholder":1474},[34,85457,85458,85460,85463],{"class":36,"line":18308},[34,85459,80262],{"class":3617},[34,85461,85462],{"class":3617}," .count",[34,85464,17218],{"class":40},[34,85466,85467,85469,85471,85473],{"class":36,"line":18322},[34,85468,63476],{"class":44},[34,85470,53076],{"class":40},[34,85472,394],{"class":44},[34,85474,2952],{"class":40},[34,85476,85477,85479,85481,85484],{"class":36,"line":18342},[34,85478,59055],{"class":44},[34,85480,53076],{"class":40},[34,85482,85483],{"class":44},"#aaa",[34,85485,2952],{"class":40},[34,85487,85488],{"class":36,"line":18348},[34,85489,3841],{"class":40},[34,85491,85492],{"class":36,"line":18359},[34,85493,1475],{"emptyLinePlaceholder":1474},[34,85495,85496,85498],{"class":36,"line":18382},[34,85497,74114],{"class":3617},[34,85499,17218],{"class":40},[34,85501,85502,85504,85506,85508,85510],{"class":36,"line":18404},[34,85503,56410],{"class":44},[34,85505,53076],{"class":40},[34,85507,80211],{"class":44},[34,85509,53131],{"class":55},[34,85511,2952],{"class":40},[34,85513,85514,85516,85518,85520,85522],{"class":36,"line":18409},[34,85515,56345],{"class":44},[34,85517,53076],{"class":40},[34,85519,177],{"class":44},[34,85521,53195],{"class":44},[34,85523,2952],{"class":40},[34,85525,85526,85528,85530,85532],{"class":36,"line":18415},[34,85527,56648],{"class":44},[34,85529,53076],{"class":40},[34,85531,53116],{"class":44},[34,85533,2952],{"class":40},[34,85535,85536,85538,85540,85542],{"class":36,"line":18429},[34,85537,56659],{"class":44},[34,85539,53076],{"class":40},[34,85541,53219],{"class":44},[34,85543,2952],{"class":40},[34,85545,85546,85549,85551,85553,85555,85557,85560],{"class":36,"line":18442},[34,85547,85548],{"class":44},"      border-top",[34,85550,53076],{"class":40},[34,85552,394],{"class":44},[34,85554,53131],{"class":55},[34,85556,53160],{"class":44},[34,85558,85559],{"class":44}," #4e4e4e",[34,85561,2952],{"class":40},[34,85563,85564,85566,85568,85570,85572],{"class":36,"line":18447},[34,85565,56334],{"class":44},[34,85567,53076],{"class":40},[34,85569,1249],{"class":44},[34,85571,53131],{"class":55},[34,85573,2952],{"class":40},[34,85575,85576],{"class":36,"line":18461},[34,85577,3841],{"class":40},[34,85579,85580],{"class":36,"line":18466},[34,85581,1475],{"emptyLinePlaceholder":1474},[34,85583,85584,85586,85589],{"class":36,"line":18472},[34,85585,74114],{"class":3617},[34,85587,85588],{"class":3617}," .amount",[34,85590,17218],{"class":40},[34,85592,85593,85595,85597,85599,85601],{"class":36,"line":18477},[34,85594,56561],{"class":44},[34,85596,53076],{"class":40},[34,85598,2445],{"class":44},[34,85600,53131],{"class":55},[34,85602,2952],{"class":40},[34,85604,85605,85607,85609,85611],{"class":36,"line":18491},[34,85606,59055],{"class":44},[34,85608,53076],{"class":40},[34,85610,80577],{"class":44},[34,85612,2952],{"class":40},[34,85614,85615,85617,85619,85621],{"class":36,"line":18496},[34,85616,63973],{"class":44},[34,85618,53076],{"class":40},[34,85620,53128],{"class":44},[34,85622,2952],{"class":40},[34,85624,85625,85627,85629,85631,85633],{"class":36,"line":18501},[34,85626,63389],{"class":44},[34,85628,53076],{"class":40},[34,85630,2451],{"class":44},[34,85632,53131],{"class":55},[34,85634,2952],{"class":40},[34,85636,85637],{"class":36,"line":18515},[34,85638,3841],{"class":40},[34,85640,85641,85643,85645],{"class":36,"line":18527},[34,85642,54056],{"class":40},[34,85644,1711],{"class":52939},[34,85646,52946],{"class":40},[34,85648,85649,85651,85653],{"class":36,"line":18532},[34,85650,53424],{"class":40},[34,85652,52973],{"class":52939},[34,85654,52946],{"class":40},[34,85656,85657],{"class":36,"line":18545},[34,85658,1475],{"emptyLinePlaceholder":1474},[34,85660,85661,85663,85665],{"class":36,"line":18550},[34,85662,2701],{"class":40},[34,85664,53439],{"class":52939},[34,85666,52946],{"class":40},[34,85668,85669,85671,85673,85675,85677,85679],{"class":36,"line":18555},[34,85670,53783],{"class":40},[34,85672,53250],{"class":52939},[34,85674,55125],{"class":3617},[34,85676,221],{"class":40},[34,85678,64247],{"class":504},[34,85680,52946],{"class":40},[34,85682,85683,85685,85687],{"class":36,"line":18560},[34,85684,54056],{"class":40},[34,85686,53250],{"class":52939},[34,85688,52946],{"class":40},[34,85690,85691,85693,85695,85697,85699,85701],{"class":36,"line":18573},[34,85692,53783],{"class":40},[34,85694,53250],{"class":52939},[34,85696,55125],{"class":3617},[34,85698,221],{"class":40},[34,85700,64219],{"class":504},[34,85702,52946],{"class":40},[34,85704,85705,85707,85709,85712,85714,85716,85718,85721,85723,85725,85727,85729],{"class":36,"line":18578},[34,85706,52980],{"class":40},[34,85708,53250],{"class":52939},[34,85710,85711],{"class":40},">合计：\u003C",[34,85713,34],{"class":52939},[34,85715,55125],{"class":3617},[34,85717,221],{"class":40},[34,85719,85720],{"class":504},"\"amount\"",[34,85722,56953],{"class":40},[34,85724,34],{"class":52939},[34,85726,56953],{"class":40},[34,85728,53250],{"class":52939},[34,85730,52946],{"class":40},[34,85732,85733,85735,85737],{"class":36,"line":34274},[34,85734,54056],{"class":40},[34,85736,53250],{"class":52939},[34,85738,52946],{"class":40},[34,85740,85741,85743,85745],{"class":36,"line":34280},[34,85742,53783],{"class":40},[34,85744,53452],{"class":52939},[34,85746,52946],{"class":40},[34,85748,85749,85751,85753,85755],{"class":36,"line":34286},[34,85750,12871],{"class":55},[34,85752,81014],{"class":44},[34,85754,56],{"class":55},[34,85756,57086],{"class":40},[34,85758,85759],{"class":36,"line":34292},[34,85760,81023],{"class":40},[34,85762,85763,85765,85767],{"class":36,"line":34298},[34,85764,81028],{"class":40},[34,85766,81031],{"class":504},[34,85768,33108],{"class":40},[34,85770,85771,85773,85775],{"class":36,"line":34309},[34,85772,81038],{"class":40},[34,85774,81041],{"class":504},[34,85776,33108],{"class":40},[34,85778,85779,85781,85784],{"class":36,"line":34315},[34,85780,81048],{"class":40},[34,85782,85783],{"class":44},"289.9",[34,85785,33108],{"class":40},[34,85787,85788,85790,85792],{"class":36,"line":34335},[34,85789,81058],{"class":40},[34,85791,81061],{"class":504},[34,85793,33108],{"class":40},[34,85795,85796,85799,85801],{"class":36,"line":34341},[34,85797,85798],{"class":40},"        count: ",[34,85800,332],{"class":44},[34,85802,33108],{"class":40},[34,85804,85805,85808,85811],{"class":36,"line":34352},[34,85806,85807],{"class":40},"        spec: { color: ",[34,85809,85810],{"class":504},"'白色'",[34,85812,57243],{"class":40},[34,85814,85815],{"class":36,"line":34358},[34,85816,79529],{"class":40},[34,85818,85819],{"class":36,"line":34364},[34,85820,81023],{"class":40},[34,85822,85823,85825,85827],{"class":36,"line":34370},[34,85824,81028],{"class":40},[34,85826,81122],{"class":504},[34,85828,33108],{"class":40},[34,85830,85831,85833,85835],{"class":36,"line":34376},[34,85832,81038],{"class":40},[34,85834,81131],{"class":504},[34,85836,33108],{"class":40},[34,85838,85839,85841,85844],{"class":36,"line":34382},[34,85840,81048],{"class":40},[34,85842,85843],{"class":44},"109.8",[34,85845,33108],{"class":40},[34,85847,85848,85850,85852],{"class":36,"line":34388},[34,85849,81058],{"class":40},[34,85851,81149],{"class":504},[34,85853,33108],{"class":40},[34,85855,85856,85858,85860],{"class":36,"line":34394},[34,85857,85798],{"class":40},[34,85859,337],{"class":44},[34,85861,33108],{"class":40},[34,85863,85864,85867,85869,85871,85873],{"class":36,"line":34414},[34,85865,85866],{"class":40},"        spec: { size: ",[34,85868,83540],{"class":504},[34,85870,57103],{"class":40},[34,85872,83545],{"class":504},[34,85874,57243],{"class":40},[34,85876,85877],{"class":36,"line":34420},[34,85878,79529],{"class":40},[34,85880,85881],{"class":36,"line":34436},[34,85882,81023],{"class":40},[34,85884,85885,85887,85889],{"class":36,"line":34442},[34,85886,81028],{"class":40},[34,85888,81166],{"class":504},[34,85890,33108],{"class":40},[34,85892,85893,85895,85897],{"class":36,"line":34456},[34,85894,81038],{"class":40},[34,85896,81175],{"class":504},[34,85898,33108],{"class":40},[34,85900,85901,85903,85906],{"class":36,"line":34462},[34,85902,81048],{"class":40},[34,85904,85905],{"class":44},"488",[34,85907,33108],{"class":40},[34,85909,85910,85912,85914],{"class":36,"line":34477},[34,85911,81058],{"class":40},[34,85913,81193],{"class":504},[34,85915,33108],{"class":40},[34,85917,85918,85920,85922],{"class":36,"line":34483},[34,85919,85798],{"class":40},[34,85921,394],{"class":44},[34,85923,33108],{"class":40},[34,85925,85926,85928,85931,85934,85937],{"class":36,"line":34492},[34,85927,85807],{"class":40},[34,85929,85930],{"class":504},"'青色'",[34,85932,85933],{"class":40},", sum: ",[34,85935,85936],{"class":504},"'一大四小'",[34,85938,57243],{"class":40},[34,85940,85941],{"class":36,"line":34498},[34,85942,79529],{"class":40},[34,85944,85945],{"class":36,"line":34507},[34,85946,81023],{"class":40},[34,85948,85949,85951,85953],{"class":36,"line":34513},[34,85950,81028],{"class":40},[34,85952,81210],{"class":504},[34,85954,33108],{"class":40},[34,85956,85957,85959,85961],{"class":36,"line":34519},[34,85958,81038],{"class":40},[34,85960,81219],{"class":504},[34,85962,33108],{"class":40},[34,85964,85965,85967,85970],{"class":36,"line":34528},[34,85966,81048],{"class":40},[34,85968,85969],{"class":44},"139",[34,85971,33108],{"class":40},[34,85973,85974,85976,85978],{"class":36,"line":34534},[34,85975,81058],{"class":40},[34,85977,81237],{"class":504},[34,85979,33108],{"class":40},[34,85981,85982,85984,85986],{"class":36,"line":34545},[34,85983,85798],{"class":40},[34,85985,394],{"class":44},[34,85987,33108],{"class":40},[34,85989,85990,85992,85995,85997,86000],{"class":36,"line":34551},[34,85991,85866],{"class":40},[34,85993,85994],{"class":504},"'小号'",[34,85996,57103],{"class":40},[34,85998,85999],{"class":504},"'紫色'",[34,86001,57109],{"class":40},[34,86003,86004,86007],{"class":36,"line":34570},[34,86005,86006],{"class":40},"        gift: ",[34,86008,86009],{"class":504},"'50g茶叶,清洗球'\n",[34,86011,86012],{"class":36,"line":34576},[34,86013,54037],{"class":40},[34,86015,86016],{"class":36,"line":34587},[34,86017,54748],{"class":40},[34,86019,86020],{"class":36,"line":34593},[34,86021,86022],{"class":161},"    \u002F\u002F  1.根据数据渲染页面\n",[34,86024,86025,86027,86029,86031,86033,86035,86037,86039,86041,86043,86045,86047],{"class":36,"line":34613},[34,86026,54046],{"class":40},[34,86028,56038],{"class":3617},[34,86030,286],{"class":40},[34,86032,81538],{"class":504},[34,86034,75888],{"class":40},[34,86036,221],{"class":55},[34,86038,81685],{"class":40},[34,86040,75683],{"class":3617},[34,86042,286],{"class":40},[34,86044,81432],{"class":51},[34,86046,81435],{"class":55},[34,86048,17218],{"class":40},[34,86050,86051],{"class":36,"line":34629},[34,86052,86053],{"class":161},"      \u002F\u002F 对象解构\n",[34,86055,86056,86058,86060,86062,86064,86066,86068,86071,86073,86075,86077,86080,86082,86085,86087,86089],{"class":36,"line":34635},[34,86057,59867],{"class":55},[34,86059,81444],{"class":40},[34,86061,81457],{"class":44},[34,86063,48],{"class":40},[34,86065,81447],{"class":44},[34,86067,48],{"class":40},[34,86069,86070],{"class":44},"count",[34,86072,48],{"class":40},[34,86074,81452],{"class":44},[34,86076,48],{"class":40},[34,86078,86079],{"class":44},"spec",[34,86081,48],{"class":40},[34,86083,86084],{"class":44},"gift",[34,86086,81460],{"class":40},[34,86088,221],{"class":55},[34,86090,81465],{"class":40},[34,86092,86093],{"class":36,"line":34649},[34,86094,86095],{"class":161},"      \u002F\u002F 规格文字模块处理\n",[34,86097,86098,86100,86103,86105,86107,86109,86111,86113,86115,86117],{"class":36,"line":34655},[34,86099,59867],{"class":55},[34,86101,86102],{"class":44}," text",[34,86104,56],{"class":55},[34,86106,83575],{"class":40},[34,86108,83578],{"class":3617},[34,86110,83581],{"class":40},[34,86112,75862],{"class":3617},[34,86114,286],{"class":40},[34,86116,83588],{"class":504},[34,86118,101],{"class":40},[34,86120,86121],{"class":36,"line":34661},[34,86122,86123],{"class":161},"      \u002F\u002F 处理赠品模块\n",[34,86125,86126,86128,86130,86132,86135,86137,86139,86141,86143,86146,86148,86150,86152,86154,86156,86159,86161,86164,86166,86168,86170,86172,86174,86176],{"class":36,"line":34672},[34,86127,59867],{"class":55},[34,86129,75558],{"class":44},[34,86131,56],{"class":55},[34,86133,86134],{"class":40}," gift ",[34,86136,2777],{"class":55},[34,86138,84748],{"class":40},[34,86140,84751],{"class":3617},[34,86142,286],{"class":40},[34,86144,86145],{"class":504},"','",[34,86147,32468],{"class":40},[34,86149,75683],{"class":3617},[34,86151,286],{"class":40},[34,86153,81432],{"class":51},[34,86155,81435],{"class":55},[34,86157,86158],{"class":504}," `\u003Cspan class=\"tag\">【赠品】${",[34,86160,81432],{"class":40},[34,86162,86163],{"class":504},"}\u003C\u002Fspan>`",[34,86165,32468],{"class":40},[34,86167,75862],{"class":3617},[34,86169,286],{"class":40},[34,86171,75867],{"class":504},[34,86173,372],{"class":40},[34,86175,2650],{"class":55},[34,86177,71743],{"class":504},[34,86179,86180],{"class":36,"line":34678},[34,86181,86182],{"class":161},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[34,86184,86185,86187,86190,86192,86195,86197,86199,86201,86204,86206,86208,86210,86213,86215,86217],{"class":36,"line":34684},[34,86186,59867],{"class":55},[34,86188,86189],{"class":44}," subtotal",[34,86191,56],{"class":55},[34,86193,86194],{"class":40}," ((price ",[34,86196,2252],{"class":55},[34,86198,7404],{"class":44},[34,86200,8168],{"class":55},[34,86202,86203],{"class":40}," count) ",[34,86205,2379],{"class":55},[34,86207,7404],{"class":44},[34,86209,32468],{"class":40},[34,86211,86212],{"class":3617},"toFixed",[34,86214,286],{"class":40},[34,86216,332],{"class":44},[34,86218,101],{"class":40},[34,86220,86221],{"class":36,"line":34694},[34,86222,1475],{"emptyLinePlaceholder":1474},[34,86224,86225,86227],{"class":36,"line":34700},[34,86226,75621],{"class":55},[34,86228,71807],{"class":504},[34,86230,86231],{"class":36,"line":34711},[34,86232,86233],{"class":504},"        \u003Cdiv class=\"item\">\n",[34,86235,86236,86239,86241],{"class":36,"line":34717},[34,86237,86238],{"class":504},"          \u003Cimg src=\"${",[34,86240,81457],{"class":40},[34,86242,81489],{"class":504},[34,86244,86245,86248,86250,86253,86255],{"class":36,"line":34727},[34,86246,86247],{"class":504},"          \u003Cp class=\"name\">${",[34,86249,81447],{"class":40},[34,86251,86252],{"class":504},"}${",[34,86254,2961],{"class":40},[34,86256,81499],{"class":504},[34,86258,86259,86262,86264],{"class":36,"line":34732},[34,86260,86261],{"class":504},"          \u003Cp class=\"spec\">${",[34,86263,6838],{"class":40},[34,86265,81499],{"class":504},[34,86267,86268,86271,86273,86275,86277,86279,86281,86283],{"class":36,"line":34738},[34,86269,86270],{"class":504},"          \u003Cp class=\"price\">${",[34,86272,81452],{"class":40},[34,86274,2353],{"class":504},[34,86276,86212],{"class":3617},[34,86278,286],{"class":504},[34,86280,332],{"class":44},[34,86282,918],{"class":504},[34,86284,81499],{"class":504},[34,86286,86287,86290,86292],{"class":36,"line":34787},[34,86288,86289],{"class":504},"          \u003Cp class=\"count\">x${",[34,86291,86070],{"class":40},[34,86293,81499],{"class":504},[34,86295,86296,86299,86302],{"class":36,"line":34834},[34,86297,86298],{"class":504},"          \u003Cp class=\"sub-total\">${",[34,86300,86301],{"class":40},"subtotal",[34,86303,81499],{"class":504},[34,86305,86306],{"class":36,"line":34839},[34,86307,86308],{"class":504},"        \u003C\u002Fdiv> \n",[34,86310,86311],{"class":36,"line":34845},[34,86312,86313],{"class":504},"             `\n",[34,86315,86316,86319,86321,86323,86325],{"class":36,"line":34864},[34,86317,86318],{"class":40},"    }).",[34,86320,75862],{"class":3617},[34,86322,286],{"class":40},[34,86324,75867],{"class":504},[34,86326,101],{"class":40},[34,86328,86329],{"class":36,"line":34870},[34,86330,86331],{"class":161},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[34,86333,86334,86336,86338,86340,86342,86345,86347,86350,86352,86354,86356,86359,86362,86364,86367,86369,86371,86373,86376,86378,86380,86382,86384],{"class":36,"line":34890},[34,86335,12871],{"class":55},[34,86337,64424],{"class":44},[34,86339,56],{"class":55},[34,86341,81685],{"class":40},[34,86343,86344],{"class":3617},"reduce",[34,86346,4030],{"class":40},[34,86348,86349],{"class":51},"prev",[34,86351,48],{"class":40},[34,86353,81432],{"class":51},[34,86355,372],{"class":40},[34,86357,86358],{"class":55},"=>",[34,86360,86361],{"class":40}," prev ",[34,86363,2277],{"class":55},[34,86365,86366],{"class":40}," (item.price ",[34,86368,2252],{"class":55},[34,86370,7404],{"class":44},[34,86372,8168],{"class":55},[34,86374,86375],{"class":40}," item.count) ",[34,86377,2379],{"class":55},[34,86379,7404],{"class":44},[34,86381,48],{"class":40},[34,86383,177],{"class":44},[34,86385,101],{"class":40},[34,86387,86388,86390,86392,86394,86397,86399,86401,86404,86406,86408,86410],{"class":36,"line":34896},[34,86389,54046],{"class":40},[34,86391,56038],{"class":3617},[34,86393,286],{"class":40},[34,86395,86396],{"class":504},"'.amount'",[34,86398,75888],{"class":40},[34,86400,221],{"class":55},[34,86402,86403],{"class":40}," total.",[34,86405,86212],{"class":3617},[34,86407,286],{"class":40},[34,86409,332],{"class":44},[34,86411,101],{"class":40},[34,86413,86414,86416,86418],{"class":36,"line":34902},[34,86415,54056],{"class":40},[34,86417,53452],{"class":52939},[34,86419,52946],{"class":40},[34,86421,86422,86424,86426],{"class":36,"line":34912},[34,86423,53424],{"class":40},[34,86425,53439],{"class":52939},[34,86427,52946],{"class":40},[34,86429,86430],{"class":36,"line":34917},[34,86431,1475],{"emptyLinePlaceholder":1474},[34,86433,86434,86436,86438],{"class":36,"line":34923},[34,86435,53424],{"class":40},[34,86437,52274],{"class":52939},[34,86439,52946],{"class":40},[14,86441,86443],{"id":86442},"_411-编程思想","4.11 编程思想",[19,86445,86447],{"id":86446},"_4111-面向过程介绍","4.11.1 面向过程介绍",[103,86449,86450,86453],{},[1165,86451,86452],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[103,86455,86456],{},"调用就可以了",[103,86458,86459],{},[109,86460],{"alt":29,"src":86461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[19,86463,86465],{"id":86464},"_4112-面向对象","4.11.2 面向对象",[103,86467,86468],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[103,86470,86471],{},[109,86472],{"alt":29,"src":86473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[103,86475,86476],{},"面向对象的特性：",[2798,86478,86479,86482,86485],{},[1775,86480,86481],{},"封装性",[1775,86483,86484],{},"继承性",[1775,86486,86487],{},"多态性",[19,86489,86491],{"id":86490},"_4113-两者比较","4.11.3 两者比较",[103,86493,86494],{},[109,86495],{"alt":29,"src":86496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86498,86500],{"id":86499},"_412-构造函数回顾","4.12 构造函数回顾",[103,86502,86503],{},[109,86504],{"alt":29,"src":86505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[103,86507,86508],{},[109,86509],{"alt":29,"src":86510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[103,86512,86513],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[103,86515,86516],{},[109,86517],{"alt":29,"src":86518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86520,86522],{"id":86521},"_413-原型","4.13 原型",[19,86524,86526],{"id":86525},"_4131-原型对象的认识","4.13.1 原型对象的认识",[103,86528,86529],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[103,86531,86532],{},[109,86533],{"alt":29,"src":86534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[103,86536,86537],{},[109,86538],{"alt":29,"src":86539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[103,86541,86542],{},"原型是构造函数的属性，它也是一个对象",[103,86544,86545],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[103,86547,86548],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[24,86550,86552],{"className":54706,"code":86551,"language":54708,"meta":29,"style":29},"\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",[31,86553,86554,86562,86567,86575,86580,86585,86590,86595,86600,86604,86608,86612,86617,86622,86626,86631,86636,86641,86646,86651,86655,86663],{"__ignoreMap":29},[34,86555,86556,86558,86560],{"class":36,"line":37},[34,86557,2701],{"class":40},[34,86559,53439],{"class":52939},[34,86561,52946],{"class":40},[34,86563,86564],{"class":36,"line":165},[34,86565,86566],{"class":161},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[34,86568,86569,86571,86573],{"class":36,"line":171},[34,86570,53783],{"class":40},[34,86572,53452],{"class":52939},[34,86574,52946],{"class":40},[34,86576,86577],{"class":36,"line":182},[34,86578,86579],{"class":40},"    function Star(uname, age) {\n",[34,86581,86582],{"class":36,"line":188},[34,86583,86584],{"class":40},"      this.uname = uname,\n",[34,86586,86587],{"class":36,"line":518},[34,86588,86589],{"class":40},"        this.age = age\n",[34,86591,86592],{"class":36,"line":524},[34,86593,86594],{"class":40},"      \u002F\u002F this.sing = function () {\n",[34,86596,86597],{"class":36,"line":530},[34,86598,86599],{"class":40},"      \u002F\u002F   console.log('唱歌')\n",[34,86601,86602],{"class":36,"line":624},[34,86603,1475],{"emptyLinePlaceholder":1474},[34,86605,86606],{"class":36,"line":630},[34,86607,61676],{"class":40},[34,86609,86610],{"class":36,"line":636},[34,86611,3841],{"class":40},[34,86613,86614],{"class":36,"line":1513},[34,86615,86616],{"class":40},"    Star.prototype.sing = function () {\n",[34,86618,86619],{"class":36,"line":1519},[34,86620,86621],{"class":40},"      console.log('唱歌')\n",[34,86623,86624],{"class":36,"line":3283},[34,86625,3841],{"class":40},[34,86627,86628],{"class":36,"line":3297},[34,86629,86630],{"class":40},"    \u002F\u002F console.dir(Star.prototype)\n",[34,86632,86633],{"class":36,"line":3302},[34,86634,86635],{"class":40},"    const pink = new Star('pink', 18)\n",[34,86637,86638],{"class":36,"line":3308},[34,86639,86640],{"class":40},"    const red = new Star('red', 20)\n",[34,86642,86643],{"class":36,"line":3328},[34,86644,86645],{"class":40},"    pink.sing()\n",[34,86647,86648],{"class":36,"line":3333},[34,86649,86650],{"class":40},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[34,86652,86653],{"class":36,"line":3347},[34,86654,1475],{"emptyLinePlaceholder":1474},[34,86656,86657,86659,86661],{"class":36,"line":3352},[34,86658,54056],{"class":40},[34,86660,53452],{"class":52939},[34,86662,52946],{"class":40},[34,86664,86665,86667,86669],{"class":36,"line":3381},[34,86666,53424],{"class":40},[34,86668,53439],{"class":52939},[34,86670,52946],{"class":40},[103,86672,86673],{},[109,86674],{"alt":29,"src":86675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[24,86677,86679],{"className":54706,"code":86678,"language":54708,"meta":29,"style":29},"\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",[31,86680,86681,86689,86697,86702,86707,86712,86717,86721,86726,86731,86736,86740,86745,86749,86753,86758,86762,86770],{"__ignoreMap":29},[34,86682,86683,86685,86687],{"class":36,"line":37},[34,86684,2701],{"class":40},[34,86686,53439],{"class":52939},[34,86688,52946],{"class":40},[34,86690,86691,86693,86695],{"class":36,"line":165},[34,86692,53783],{"class":40},[34,86694,53452],{"class":52939},[34,86696,52946],{"class":40},[34,86698,86699],{"class":36,"line":171},[34,86700,86701],{"class":40},"    let that\n",[34,86703,86704],{"class":36,"line":182},[34,86705,86706],{"class":40},"    function Star(uname) {\n",[34,86708,86709],{"class":36,"line":188},[34,86710,86711],{"class":40},"      this.uname = uname\n",[34,86713,86714],{"class":36,"line":518},[34,86715,86716],{"class":40},"      that = this\n",[34,86718,86719],{"class":36,"line":524},[34,86720,3841],{"class":40},[34,86722,86723],{"class":36,"line":530},[34,86724,86725],{"class":40},"    \u002F\u002F 实例对象是 ldh\n",[34,86727,86728],{"class":36,"line":624},[34,86729,86730],{"class":40},"    const ldh = new Star('刘德华')\n",[34,86732,86733],{"class":36,"line":630},[34,86734,86735],{"class":40},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[34,86737,86738],{"class":36,"line":636},[34,86739,1475],{"emptyLinePlaceholder":1474},[34,86741,86742],{"class":36,"line":1513},[34,86743,86744],{"class":40},"    Star.sing = function () {\n",[34,86746,86747],{"class":36,"line":1519},[34,86748,86621],{"class":40},[34,86750,86751],{"class":36,"line":3283},[34,86752,3841],{"class":40},[34,86754,86755],{"class":36,"line":3297},[34,86756,86757],{"class":40},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[34,86759,86760],{"class":36,"line":3302},[34,86761,1475],{"emptyLinePlaceholder":1474},[34,86763,86764,86766,86768],{"class":36,"line":3308},[34,86765,54056],{"class":40},[34,86767,53452],{"class":52939},[34,86769,52946],{"class":40},[34,86771,86772,86774,86776],{"class":36,"line":3328},[34,86773,53424],{"class":40},[34,86775,53439],{"class":52939},[34,86777,52946],{"class":40},[103,86779,86780],{},"构造函数的this指向的是实例对象；",[103,86782,86783],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[19,86785,86787],{"id":86786},"_4132-数组扩展方法","4.13.2 数组扩展方法",[103,86789,86790],{},[109,86791],{"alt":29,"src":86792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[24,86794,86796],{"className":54706,"code":86795,"language":54708,"meta":29,"style":29},"\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",[31,86797,86798,86806,86814,86819,86824,86829,86834,86839,86844,86849,86854,86859,86864,86868,86873,86878,86883,86888,86892,86897,86902,86907,86912,86916,86921,86926,86931,86936,86940,86945,86949,86957],{"__ignoreMap":29},[34,86799,86800,86802,86804],{"class":36,"line":37},[34,86801,2701],{"class":40},[34,86803,53439],{"class":52939},[34,86805,52946],{"class":40},[34,86807,86808,86810,86812],{"class":36,"line":165},[34,86809,53783],{"class":40},[34,86811,53452],{"class":52939},[34,86813,52946],{"class":40},[34,86815,86816],{"class":36,"line":171},[34,86817,86818],{"class":40},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[34,86820,86821],{"class":36,"line":182},[34,86822,86823],{"class":40},"    const arr = [1, 2, 3]\n",[34,86825,86826],{"class":36,"line":188},[34,86827,86828],{"class":40},"    \u002F\u002F 自己定义数组的扩展方法\n",[34,86830,86831],{"class":36,"line":518},[34,86832,86833],{"class":40},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[34,86835,86836],{"class":36,"line":524},[34,86837,86838],{"class":40},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[34,86840,86841],{"class":36,"line":530},[34,86842,86843],{"class":40},"    \u002F\u002F ①.最大值\n",[34,86845,86846],{"class":36,"line":624},[34,86847,86848],{"class":40},"    Array.prototype.max = function () {\n",[34,86850,86851],{"class":36,"line":630},[34,86852,86853],{"class":40},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[34,86855,86856],{"class":36,"line":636},[34,86857,86858],{"class":40},"      return Math.max(...this)\n",[34,86860,86861],{"class":36,"line":1513},[34,86862,86863],{"class":40},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[34,86865,86866],{"class":36,"line":1519},[34,86867,3841],{"class":40},[34,86869,86870],{"class":36,"line":3283},[34,86871,86872],{"class":40},"    console.log(arr.max())\n",[34,86874,86875],{"class":36,"line":3297},[34,86876,86877],{"class":40},"    \u002F\u002F ②最小值\n",[34,86879,86880],{"class":36,"line":3302},[34,86881,86882],{"class":40},"    Array.prototype.min = function () {\n",[34,86884,86885],{"class":36,"line":3308},[34,86886,86887],{"class":40},"      return Math.min(...this)\n",[34,86889,86890],{"class":36,"line":3328},[34,86891,3841],{"class":40},[34,86893,86894],{"class":36,"line":3333},[34,86895,86896],{"class":40},"    console.log(arr.min())\n",[34,86898,86899],{"class":36,"line":3347},[34,86900,86901],{"class":40},"    \u002F\u002F③求和\n",[34,86903,86904],{"class":36,"line":3352},[34,86905,86906],{"class":40},"    Array.prototype.sum = function () {\n",[34,86908,86909],{"class":36,"line":3381},[34,86910,86911],{"class":40},"      return this.reduce((prev, current) => prev + current, 0)\n",[34,86913,86914],{"class":36,"line":3386},[34,86915,3841],{"class":40},[34,86917,86918],{"class":36,"line":3403},[34,86919,86920],{"class":40},"    console.log(arr.sum())\n",[34,86922,86923],{"class":36,"line":3408},[34,86924,86925],{"class":40},"    \u002F\u002F ③排序\n",[34,86927,86928],{"class":36,"line":3413},[34,86929,86930],{"class":40},"    Array.prototype.rever = function () {\n",[34,86932,86933],{"class":36,"line":3418},[34,86934,86935],{"class":40},"      return this.reverse()\n",[34,86937,86938],{"class":36,"line":3432},[34,86939,3841],{"class":40},[34,86941,86942],{"class":36,"line":3437},[34,86943,86944],{"class":40},"    console.log(arr.rever())\n",[34,86946,86947],{"class":36,"line":4230},[34,86948,1475],{"emptyLinePlaceholder":1474},[34,86950,86951,86953,86955],{"class":36,"line":4244},[34,86952,54056],{"class":40},[34,86954,53452],{"class":52939},[34,86956,52946],{"class":40},[34,86958,86959,86961,86963],{"class":36,"line":4252},[34,86960,53424],{"class":40},[34,86962,53439],{"class":52939},[34,86964,52946],{"class":40},[103,86966,86967],{},[109,86968],{"alt":29,"src":86969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[19,86971,86973],{"id":86972},"_4133-constructor-属性","4.13.3 constructor 属性",[103,86975,86976],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[103,86978,86979],{},[109,86980],{"alt":29,"src":86981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[24,86983,86985],{"className":54706,"code":86984,"language":54708,"meta":29,"style":29},"\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",[31,86986,86987,86995,87003,87008,87013,87017,87022,87027,87032,87040],{"__ignoreMap":29},[34,86988,86989,86991,86993],{"class":36,"line":37},[34,86990,2701],{"class":40},[34,86992,53439],{"class":52939},[34,86994,52946],{"class":40},[34,86996,86997,86999,87001],{"class":36,"line":165},[34,86998,53783],{"class":40},[34,87000,53452],{"class":52939},[34,87002,52946],{"class":40},[34,87004,87005],{"class":36,"line":171},[34,87006,87007],{"class":40},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[34,87009,87010],{"class":36,"line":182},[34,87011,87012],{"class":40},"    function Star() {\n",[34,87014,87015],{"class":36,"line":188},[34,87016,3841],{"class":40},[34,87018,87019],{"class":36,"line":518},[34,87020,87021],{"class":40},"    const ldh = new Star()\n",[34,87023,87024],{"class":36,"line":524},[34,87025,87026],{"class":40},"    console.log(Star.prototype)\n",[34,87028,87029],{"class":36,"line":530},[34,87030,87031],{"class":40},"    console.log(Star.prototype.constructor === Star)\n",[34,87033,87034,87036,87038],{"class":36,"line":624},[34,87035,54056],{"class":40},[34,87037,53452],{"class":52939},[34,87039,52946],{"class":40},[34,87041,87042,87044,87046],{"class":36,"line":630},[34,87043,53424],{"class":40},[34,87045,53439],{"class":52939},[34,87047,52946],{"class":40},[103,87049,87050],{},[109,87051],{"alt":29,"src":87052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[103,87054,87055],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[24,87057,87059],{"className":54706,"code":87058,"language":54708,"meta":29,"style":29},"  \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",[31,87060,87061,87069,87073,87077,87081,87086,87091,87096,87100,87105,87110,87115,87120,87125,87130,87134,87138,87143,87148,87153,87157,87162,87167,87171,87175,87179],{"__ignoreMap":29},[34,87062,87063,87065,87067],{"class":36,"line":37},[34,87064,53783],{"class":40},[34,87066,53452],{"class":52939},[34,87068,52946],{"class":40},[34,87070,87071],{"class":36,"line":165},[34,87072,87007],{"class":40},[34,87074,87075],{"class":36,"line":171},[34,87076,87012],{"class":40},[34,87078,87079],{"class":36,"line":182},[34,87080,3841],{"class":40},[34,87082,87083],{"class":36,"line":188},[34,87084,87085],{"class":40},"    \u002F\u002F const ldh = new Star()\n",[34,87087,87088],{"class":36,"line":518},[34,87089,87090],{"class":40},"    \u002F\u002F console.log(Star.prototype)\n",[34,87092,87093],{"class":36,"line":524},[34,87094,87095],{"class":40},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[34,87097,87098],{"class":36,"line":530},[34,87099,1475],{"emptyLinePlaceholder":1474},[34,87101,87102],{"class":36,"line":624},[34,87103,87104],{"class":40},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[34,87106,87107],{"class":36,"line":630},[34,87108,87109],{"class":40},"    \u002F\u002F Star.prototype.sing = function () {\n",[34,87111,87112],{"class":36,"line":636},[34,87113,87114],{"class":40},"    \u002F\u002F   console.log('唱歌')\n",[34,87116,87117],{"class":36,"line":1513},[34,87118,87119],{"class":40},"    \u002F\u002F }\n",[34,87121,87122],{"class":36,"line":1519},[34,87123,87124],{"class":40},"    \u002F\u002F Star.prototype.dance = function () {\n",[34,87126,87127],{"class":36,"line":3283},[34,87128,87129],{"class":40},"    \u002F\u002F   console.log('跳舞')\n",[34,87131,87132],{"class":36,"line":3297},[34,87133,87119],{"class":40},[34,87135,87136],{"class":36,"line":3302},[34,87137,87026],{"class":40},[34,87139,87140],{"class":36,"line":3308},[34,87141,87142],{"class":40},"    Star.prototype = {\n",[34,87144,87145],{"class":36,"line":3328},[34,87146,87147],{"class":40},"      sing: function () {\n",[34,87149,87150],{"class":36,"line":3333},[34,87151,87152],{"class":40},"        console.log('唱歌')\n",[34,87154,87155],{"class":36,"line":3347},[34,87156,79529],{"class":40},[34,87158,87159],{"class":36,"line":3352},[34,87160,87161],{"class":40},"      dance: function () {\n",[34,87163,87164],{"class":36,"line":3381},[34,87165,87166],{"class":40},"        console.log('跳舞')\n",[34,87168,87169],{"class":36,"line":3386},[34,87170,54037],{"class":40},[34,87172,87173],{"class":36,"line":3403},[34,87174,3841],{"class":40},[34,87176,87177],{"class":36,"line":3408},[34,87178,87026],{"class":40},[34,87180,87181,87183,87185],{"class":36,"line":3413},[34,87182,54056],{"class":40},[34,87184,53452],{"class":52939},[34,87186,52946],{"class":40},[103,87188,87189],{},"进行输出结果后会发现：",[103,87191,87192],{},[109,87193],{"alt":29,"src":87194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[103,87196,87197],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[103,87199,87200],{},"所以，要重新指回创造这个原型对象的构造函数",[24,87202,87204],{"className":72852,"code":87203,"language":72854,"meta":29,"style":29},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[31,87205,87206,87220,87225,87230,87241,87254,87259,87270,87284,87288],{"__ignoreMap":29},[34,87207,87208,87211,87213,87216,87218],{"class":36,"line":37},[34,87209,87210],{"class":44},"Star",[34,87212,2353],{"class":40},[34,87214,87215],{"class":44},"prototype",[34,87217,56],{"class":55},[34,87219,17218],{"class":40},[34,87221,87222],{"class":36,"line":165},[34,87223,87224],{"class":161},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[34,87226,87227],{"class":36,"line":171},[34,87228,87229],{"class":40},"  constructor: Star,\n",[34,87231,87232,87235,87237,87239],{"class":36,"line":182},[34,87233,87234],{"class":3617},"  sing",[34,87236,53076],{"class":40},[34,87238,56088],{"class":55},[34,87240,56091],{"class":40},[34,87242,87243,87245,87247,87249,87252],{"class":36,"line":188},[34,87244,75392],{"class":40},[34,87246,59886],{"class":3617},[34,87248,286],{"class":40},[34,87250,87251],{"class":504},"'唱歌'",[34,87253,101],{"class":40},[34,87255,87256],{"class":36,"line":518},[34,87257,87258],{"class":40},"   },\n",[34,87260,87261,87264,87266,87268],{"class":36,"line":524},[34,87262,87263],{"class":3617},"   dance",[34,87265,53076],{"class":40},[34,87267,56088],{"class":55},[34,87269,56091],{"class":40},[34,87271,87272,87275,87277,87279,87282],{"class":36,"line":530},[34,87273,87274],{"class":40},"     console.",[34,87276,59886],{"class":3617},[34,87278,286],{"class":40},[34,87280,87281],{"class":504},"'跳舞'",[34,87283,101],{"class":40},[34,87285,87286],{"class":36,"line":624},[34,87287,5961],{"class":40},[34,87289,87290],{"class":36,"line":630},[34,87291,3223],{"class":40},[103,87293,87294],{},[109,87295],{"alt":29,"src":87296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[103,87298,87299],{},"总结1：",[103,87301,87302],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[103,87304,87305],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[103,87307,87308],{},"constructor指的是他的来源",[103,87310,87311],{},[109,87312],{"alt":29,"src":87313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[103,87315,87316],{},[109,87317],{"alt":29,"src":87318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[103,87320,87321],{},"总结2：",[103,87323,87324],{},[109,87325],{"alt":29,"src":87326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[103,87328,87329],{},[109,87330],{"alt":29,"src":87331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[103,87333,87334],{},[109,87335],{"alt":29,"src":87336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[19,87338,87340],{"id":87339},"_4134-对象原型","4.13.4 对象原型",[103,87342,87343],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[103,87345,87346],{},"对象原型就是__proto__这个属性",[103,87348,87349],{},[109,87350],{"alt":29,"src":87351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[103,87353,87354],{},[109,87355],{"alt":29,"src":87356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[103,87358,87359],{},[109,87360],{"alt":29,"src":87361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[103,87363,87364],{},[109,87365],{"alt":29,"src":87366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[24,87368,87370],{"className":54706,"code":87369,"language":54708,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,87371,87372,87380,87388,87392,87396,87400,87405,87413],{"__ignoreMap":29},[34,87373,87374,87376,87378],{"class":36,"line":37},[34,87375,2701],{"class":40},[34,87377,53439],{"class":52939},[34,87379,52946],{"class":40},[34,87381,87382,87384,87386],{"class":36,"line":165},[34,87383,53783],{"class":40},[34,87385,53452],{"class":52939},[34,87387,52946],{"class":40},[34,87389,87390],{"class":36,"line":171},[34,87391,87012],{"class":40},[34,87393,87394],{"class":36,"line":182},[34,87395,3841],{"class":40},[34,87397,87398],{"class":36,"line":188},[34,87399,87021],{"class":40},[34,87401,87402],{"class":36,"line":518},[34,87403,87404],{"class":40},"    console.log(ldh)\n",[34,87406,87407,87409,87411],{"class":36,"line":524},[34,87408,54056],{"class":40},[34,87410,53452],{"class":52939},[34,87412,52946],{"class":40},[34,87414,87415,87417,87419],{"class":36,"line":530},[34,87416,53424],{"class":40},[34,87418,53439],{"class":52939},[34,87420,52946],{"class":40},[103,87422,87423],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[103,87425,87426],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[103,87428,87429],{},[109,87430],{"alt":29,"src":87431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[103,87433,87434],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[103,87436,87437],{},"对象原型指向原型对象",[103,87439,87440],{},[109,87441],{"alt":29,"src":87442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[103,87444,87445],{},[109,87446],{"alt":29,"src":87447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[103,87449,87450],{},[109,87451],{"alt":29,"src":87452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[19,87454,87456],{"id":87455},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[103,87458,87459],{},[109,87460],{"alt":29,"src":87461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[1772,87463,87464,87467,87470,87473],{},[1775,87465,87466],{},"构造函数通过new的形式实例化得到实例对象",[1775,87468,87469],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[1775,87471,87472],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[1775,87474,87475],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[103,87477,87478],{},[109,87479],{"alt":29,"src":87480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[103,87482,87483],{},"题目梳理：",[103,87485,87486],{},[109,87487],{"alt":29,"src":87488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[19,87490,87492],{"id":87491},"_4136-原型继承","4.13.6 原型继承",[103,87494,87495],{},[109,87496],{"alt":29,"src":87497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[103,87499,87500],{},[109,87501],{"alt":29,"src":87502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[103,87504,87505],{},[109,87506],{"alt":29,"src":87507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[103,87509,87510],{},[109,87511],{"alt":29,"src":87512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[103,87514,87515],{},[109,87516],{"alt":29,"src":87517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[103,87519,87520],{},[109,87521],{"alt":29,"src":87522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[103,87524,87525],{},[109,87526],{"alt":29,"src":87527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[103,87529,87530],{},[109,87531],{"alt":29,"src":87532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[103,87534,87535],{},"回顾：构造函数每次new得到对象都是不同的",[19,87537,87539],{"id":87538},"_4137-原型链","4.13.7 原型链",[103,87541,87542],{},[109,87543],{"alt":29,"src":87544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[103,87546,87547],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[103,87549,87550],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[103,87552,87553],{},"大哥是Object",[103,87555,87556],{},[109,87557],{"alt":29,"src":87558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[103,87560,87561],{},[109,87562],{"alt":29,"src":87563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[103,87565,87566],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[103,87568,87569],{},"万物皆对象",[19,87571,87573],{"id":87572},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[103,87575,87576],{},"模态框",[103,87578,87579],{},"以后遇见这个效果直接使用这个就行",[103,87581,87582],{},[109,87583],{"alt":29,"src":87584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[103,87586,87587],{},[109,87588],{"alt":29,"src":87589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[103,87591,87592],{},[109,87593],{"alt":29,"src":87594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[103,87596,87597],{},[109,87598],{"alt":29,"src":87599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[103,87601,87602],{},"补充知识点：",[1772,87604,87605],{},[1775,87606,87607],{},"append()",[103,87609,87610],{},[109,87611],{"alt":29,"src":87612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[24,87614,87616],{"className":52272,"code":87615,"language":52274,"meta":29,"style":29},"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",[31,87617,87618,87623,87628,87633,87637,87641,87645,87650,87655,87660,87664],{"__ignoreMap":29},[34,87619,87620],{"class":36,"line":37},[34,87621,87622],{"class":40},"append(param1)\n",[34,87624,87625],{"class":36,"line":165},[34,87626,87627],{"class":40},"append(param1, param2)\n",[34,87629,87630],{"class":36,"line":171},[34,87631,87632],{"class":40},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[34,87634,87635],{"class":36,"line":182},[34,87636,1475],{"emptyLinePlaceholder":1474},[34,87638,87639],{"class":36,"line":188},[34,87640,1475],{"emptyLinePlaceholder":1474},[34,87642,87643],{"class":36,"line":518},[34,87644,1475],{"emptyLinePlaceholder":1474},[34,87646,87647],{"class":36,"line":524},[34,87648,87649],{"class":40},"let div = document.createElement(\"div\");\n",[34,87651,87652],{"class":36,"line":530},[34,87653,87654],{"class":40},"let p = document.createElement(\"p\");\n",[34,87656,87657],{"class":36,"line":624},[34,87658,87659],{"class":40},"div.append(p);\n",[34,87661,87662],{"class":36,"line":630},[34,87663,1475],{"emptyLinePlaceholder":1474},[34,87665,87666,87669,87671],{"class":36,"line":636},[34,87667,87668],{"class":40},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[34,87670,103],{"class":52939},[34,87672,87673],{"class":40},"> ]\n",[1772,87675,87676],{"start":165},[1775,87677,87678],{},"remove()",[103,87680,87681],{},"自己删自己",[103,87683,87684],{},[109,87685],{"alt":29,"src":87686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[24,87688,87690],{"className":52272,"code":87689,"language":52274,"meta":29,"style":29},"\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",[31,87691,87692,87702,87716,87720,87728,87742,87762,87774,87782,87789,87801,87814,87849,87861,87872,87884,87896,87908,87935,87945,87949,87953,87962,87974,87988,87998,88010,88014,88018,88028,88039,88049,88059,88072,88085,88095,88099,88103,88112,88122,88134,88138,88142,88151,88161,88171,88183,88187,88191,88201,88217,88228,88238,88248,88260,88272,88284,88288,88292,88305,88316,88320,88328,88336,88340,88348,88368,88388,88396,88401,88427,88432,88437,88456,88461,88473,88478,88489,88499,88509,88514,88519,88523,88528,88533,88538,88558,88563,88583,88588,88602,88607,88612,88617,88633,88637,88642,88671,88676,88681,88686,88697,88701,88705,88709,88714,88739,88744,88769,88774,88783,88787,88792,88817,88821,88846,88850,88859,88863,88868,88886,88896,88900,88908,88916,88920],{"__ignoreMap":29},[34,87693,87694,87696,87698,87700],{"class":36,"line":37},[34,87695,52936],{"class":40},[34,87697,52940],{"class":52939},[34,87699,52943],{"class":3617},[34,87701,52946],{"class":40},[34,87703,87704,87706,87708,87710,87712,87714],{"class":36,"line":165},[34,87705,2701],{"class":40},[34,87707,52274],{"class":52939},[34,87709,52955],{"class":3617},[34,87711,221],{"class":40},[34,87713,52960],{"class":504},[34,87715,52946],{"class":40},[34,87717,87718],{"class":36,"line":171},[34,87719,1475],{"emptyLinePlaceholder":1474},[34,87721,87722,87724,87726],{"class":36,"line":182},[34,87723,2701],{"class":40},[34,87725,52973],{"class":52939},[34,87727,52946],{"class":40},[34,87729,87730,87732,87734,87736,87738,87740],{"class":36,"line":188},[34,87731,53783],{"class":40},[34,87733,52983],{"class":52939},[34,87735,52986],{"class":3617},[34,87737,221],{"class":40},[34,87739,52991],{"class":504},[34,87741,52946],{"class":40},[34,87743,87744,87746,87748,87750,87752,87754,87756,87758,87760],{"class":36,"line":518},[34,87745,53783],{"class":40},[34,87747,52983],{"class":52939},[34,87749,16566],{"class":3617},[34,87751,221],{"class":40},[34,87753,53030],{"class":504},[34,87755,53010],{"class":3617},[34,87757,221],{"class":40},[34,87759,53037],{"class":504},[34,87761,52946],{"class":40},[34,87763,87764,87766,87768,87770,87772],{"class":36,"line":524},[34,87765,53783],{"class":40},[34,87767,53046],{"class":52939},[34,87769,53049],{"class":40},[34,87771,53046],{"class":52939},[34,87773,52946],{"class":40},[34,87775,87776,87778,87780],{"class":36,"line":530},[34,87777,53783],{"class":40},[34,87779,1711],{"class":52939},[34,87781,52946],{"class":40},[34,87783,87784,87787],{"class":36,"line":624},[34,87785,87786],{"class":3617},"    .modal",[34,87788,17218],{"class":40},[34,87790,87791,87793,87795,87797,87799],{"class":36,"line":630},[34,87792,56410],{"class":44},[34,87794,53076],{"class":40},[34,87796,5626],{"class":44},[34,87798,53131],{"class":55},[34,87800,2952],{"class":40},[34,87802,87803,87806,87808,87810,87812],{"class":36,"line":636},[34,87804,87805],{"class":44},"      min-height",[34,87807,53076],{"class":40},[34,87809,451],{"class":44},[34,87811,53131],{"class":55},[34,87813,2952],{"class":40},[34,87815,87816,87818,87820,87822,87824,87826,87828,87830,87832,87834,87836,87838,87840,87842,87844,87847],{"class":36,"line":1513},[34,87817,80387],{"class":44},[34,87819,53076],{"class":40},[34,87821,177],{"class":44},[34,87823,98],{"class":44},[34,87825,3692],{"class":44},[34,87827,53131],{"class":55},[34,87829,80404],{"class":44},[34,87831,286],{"class":40},[34,87833,177],{"class":44},[34,87835,48],{"class":40},[34,87837,177],{"class":44},[34,87839,48],{"class":40},[34,87841,177],{"class":44},[34,87843,48],{"class":40},[34,87845,87846],{"class":44},"0.1",[34,87848,4372],{"class":40},[34,87850,87851,87853,87855,87857,87859],{"class":36,"line":1519},[34,87852,56773],{"class":44},[34,87854,53076],{"class":40},[34,87856,247],{"class":44},[34,87858,53131],{"class":55},[34,87860,2952],{"class":40},[34,87862,87863,87865,87867,87870],{"class":36,"line":3283},[34,87864,56398],{"class":44},[34,87866,53076],{"class":40},[34,87868,87869],{"class":44},"fixed",[34,87871,2952],{"class":40},[34,87873,87874,87877,87879,87882],{"class":36,"line":3297},[34,87875,87876],{"class":44},"      z-index",[34,87878,53076],{"class":40},[34,87880,87881],{"class":44},"999",[34,87883,2952],{"class":40},[34,87885,87886,87888,87890,87892,87894],{"class":36,"line":3302},[34,87887,56477],{"class":44},[34,87889,53076],{"class":40},[34,87891,2451],{"class":44},[34,87893,2131],{"class":55},[34,87895,2952],{"class":40},[34,87897,87898,87900,87902,87904,87906],{"class":36,"line":3308},[34,87899,56586],{"class":44},[34,87901,53076],{"class":40},[34,87903,2451],{"class":44},[34,87905,2131],{"class":55},[34,87907,2952],{"class":40},[34,87909,87910,87912,87914,87916,87918,87921,87923,87925,87927,87929,87931,87933],{"class":36,"line":3328},[34,87911,80428],{"class":44},[34,87913,53076],{"class":40},[34,87915,80433],{"class":44},[34,87917,286],{"class":40},[34,87919,87920],{"class":44},"-50",[34,87922,2131],{"class":55},[34,87924,48],{"class":40},[34,87926,87920],{"class":44},[34,87928,2131],{"class":55},[34,87930,48],{"class":40},[34,87932,177],{"class":44},[34,87934,4372],{"class":40},[34,87936,87937,87939,87941,87943],{"class":36,"line":3333},[34,87938,56523],{"class":44},[34,87940,53076],{"class":40},[34,87942,62481],{"class":44},[34,87944,2952],{"class":40},[34,87946,87947],{"class":36,"line":3347},[34,87948,3841],{"class":40},[34,87950,87951],{"class":36,"line":3352},[34,87952,1475],{"emptyLinePlaceholder":1474},[34,87954,87955,87957,87960],{"class":36,"line":3381},[34,87956,87786],{"class":3617},[34,87958,87959],{"class":3617}," .header",[34,87961,17218],{"class":40},[34,87963,87964,87966,87968,87970,87972],{"class":36,"line":3386},[34,87965,58998],{"class":44},[34,87967,53076],{"class":40},[34,87969,2201],{"class":44},[34,87971,53131],{"class":55},[34,87973,2952],{"class":40},[34,87975,87976,87978,87980,87982,87984,87986],{"class":36,"line":3403},[34,87977,56334],{"class":44},[34,87979,53076],{"class":40},[34,87981,177],{"class":44},[34,87983,3692],{"class":44},[34,87985,53131],{"class":55},[34,87987,2952],{"class":40},[34,87989,87990,87992,87994,87996],{"class":36,"line":3408},[34,87991,56398],{"class":44},[34,87993,53076],{"class":40},[34,87995,56403],{"class":44},[34,87997,2952],{"class":40},[34,87999,88000,88002,88004,88006,88008],{"class":36,"line":3413},[34,88001,56561],{"class":44},[34,88003,53076],{"class":40},[34,88005,1249],{"class":44},[34,88007,53131],{"class":55},[34,88009,2952],{"class":40},[34,88011,88012],{"class":36,"line":3418},[34,88013,3841],{"class":40},[34,88015,88016],{"class":36,"line":3432},[34,88017,1475],{"emptyLinePlaceholder":1474},[34,88019,88020,88022,88024,88026],{"class":36,"line":3437},[34,88021,87786],{"class":3617},[34,88023,87959],{"class":3617},[34,88025,4685],{"class":52939},[34,88027,17218],{"class":40},[34,88029,88030,88033,88035,88037],{"class":36,"line":4230},[34,88031,88032],{"class":44},"      font-style",[34,88034,53076],{"class":40},[34,88036,65480],{"class":44},[34,88038,2952],{"class":40},[34,88040,88041,88043,88045,88047],{"class":36,"line":4244},[34,88042,59055],{"class":44},[34,88044,53076],{"class":40},[34,88046,63709],{"class":44},[34,88048,2952],{"class":40},[34,88050,88051,88053,88055,88057],{"class":36,"line":4252},[34,88052,56398],{"class":44},[34,88054,53076],{"class":40},[34,88056,56470],{"class":44},[34,88058,2952],{"class":40},[34,88060,88061,88064,88066,88068,88070],{"class":36,"line":4257},[34,88062,88063],{"class":44},"      right",[34,88065,53076],{"class":40},[34,88067,2370],{"class":44},[34,88069,53131],{"class":55},[34,88071,2952],{"class":40},[34,88073,88074,88076,88078,88081,88083],{"class":36,"line":4263},[34,88075,56586],{"class":44},[34,88077,53076],{"class":40},[34,88079,88080],{"class":44},"-2",[34,88082,53131],{"class":55},[34,88084,2952],{"class":40},[34,88086,88087,88089,88091,88093],{"class":36,"line":4269},[34,88088,63664],{"class":44},[34,88090,53076],{"class":40},[34,88092,63669],{"class":44},[34,88094,2952],{"class":40},[34,88096,88097],{"class":36,"line":4274},[34,88098,3841],{"class":40},[34,88100,88101],{"class":36,"line":9598},[34,88102,1475],{"emptyLinePlaceholder":1474},[34,88104,88105,88107,88110],{"class":36,"line":9622},[34,88106,87786],{"class":3617},[34,88108,88109],{"class":3617}," .body",[34,88111,17218],{"class":40},[34,88113,88114,88116,88118,88120],{"class":36,"line":9627},[34,88115,58925],{"class":44},[34,88117,53076],{"class":40},[34,88119,53231],{"class":44},[34,88121,2952],{"class":40},[34,88123,88124,88126,88128,88130,88132],{"class":36,"line":9633},[34,88125,56334],{"class":44},[34,88127,53076],{"class":40},[34,88129,410],{"class":44},[34,88131,53131],{"class":55},[34,88133,2952],{"class":40},[34,88135,88136],{"class":36,"line":9660},[34,88137,3841],{"class":40},[34,88139,88140],{"class":36,"line":9665},[34,88141,1475],{"emptyLinePlaceholder":1474},[34,88143,88144,88146,88149],{"class":36,"line":9671},[34,88145,87786],{"class":3617},[34,88147,88148],{"class":3617}," .footer",[34,88150,17218],{"class":40},[34,88152,88153,88155,88157,88159],{"class":36,"line":9683},[34,88154,56648],{"class":44},[34,88156,53076],{"class":40},[34,88158,53116],{"class":44},[34,88160,2952],{"class":40},[34,88162,88163,88165,88167,88169],{"class":36,"line":9695},[34,88164,56659],{"class":44},[34,88166,53076],{"class":40},[34,88168,53219],{"class":44},[34,88170,2952],{"class":40},[34,88172,88173,88175,88177,88179,88181],{"class":36,"line":9707},[34,88174,56334],{"class":44},[34,88176,53076],{"class":40},[34,88178,410],{"class":44},[34,88180,53131],{"class":55},[34,88182,2952],{"class":40},[34,88184,88185],{"class":36,"line":11366},[34,88186,3841],{"class":40},[34,88188,88189],{"class":36,"line":11391},[34,88190,1475],{"emptyLinePlaceholder":1474},[34,88192,88193,88195,88197,88199],{"class":36,"line":11414},[34,88194,87786],{"class":3617},[34,88196,88148],{"class":3617},[34,88198,3057],{"class":52939},[34,88200,17218],{"class":40},[34,88202,88203,88205,88207,88209,88211,88213,88215],{"class":36,"line":11438},[34,88204,56334],{"class":44},[34,88206,53076],{"class":40},[34,88208,337],{"class":44},[34,88210,53131],{"class":55},[34,88212,3737],{"class":44},[34,88214,53131],{"class":55},[34,88216,2952],{"class":40},[34,88218,88219,88221,88223,88226],{"class":36,"line":11443},[34,88220,63360],{"class":44},[34,88222,53076],{"class":40},[34,88224,88225],{"class":44},"#ccc",[34,88227,2952],{"class":40},[34,88229,88230,88232,88234,88236],{"class":36,"line":11448},[34,88231,65609],{"class":44},[34,88233,53076],{"class":40},[34,88235,56376],{"class":44},[34,88237,2952],{"class":40},[34,88239,88240,88242,88244,88246],{"class":36,"line":11453},[34,88241,59055],{"class":44},[34,88243,53076],{"class":40},[34,88245,62481],{"class":44},[34,88247,2952],{"class":40},[34,88249,88250,88252,88254,88256,88258],{"class":36,"line":11462},[34,88251,56773],{"class":44},[34,88253,53076],{"class":40},[34,88255,332],{"class":44},[34,88257,53131],{"class":55},[34,88259,2952],{"class":40},[34,88261,88262,88264,88266,88268,88270],{"class":36,"line":11467},[34,88263,63389],{"class":44},[34,88265,53076],{"class":40},[34,88267,410],{"class":44},[34,88269,53131],{"class":55},[34,88271,2952],{"class":40},[34,88273,88274,88276,88278,88280,88282],{"class":36,"line":11473},[34,88275,56561],{"class":44},[34,88277,53076],{"class":40},[34,88279,2344],{"class":44},[34,88281,53131],{"class":55},[34,88283,2952],{"class":40},[34,88285,88286],{"class":36,"line":11494},[34,88287,3841],{"class":40},[34,88289,88290],{"class":36,"line":11500},[34,88291,1475],{"emptyLinePlaceholder":1474},[34,88293,88294,88296,88298,88300,88303],{"class":36,"line":11514},[34,88295,87786],{"class":3617},[34,88297,88148],{"class":3617},[34,88299,3057],{"class":52939},[34,88301,88302],{"class":3617},".submit",[34,88304,17218],{"class":40},[34,88306,88307,88309,88311,88314],{"class":36,"line":11520},[34,88308,56523],{"class":44},[34,88310,53076],{"class":40},[34,88312,88313],{"class":44},"#369",[34,88315,2952],{"class":40},[34,88317,88318],{"class":36,"line":11547},[34,88319,3841],{"class":40},[34,88321,88322,88324,88326],{"class":36,"line":11556},[34,88323,54056],{"class":40},[34,88325,1711],{"class":52939},[34,88327,52946],{"class":40},[34,88329,88330,88332,88334],{"class":36,"line":11562},[34,88331,53424],{"class":40},[34,88333,52973],{"class":52939},[34,88335,52946],{"class":40},[34,88337,88338],{"class":36,"line":11570},[34,88339,1475],{"emptyLinePlaceholder":1474},[34,88341,88342,88344,88346],{"class":36,"line":11575},[34,88343,2701],{"class":40},[34,88345,53439],{"class":52939},[34,88347,52946],{"class":40},[34,88349,88350,88352,88354,88356,88358,88361,88364,88366],{"class":36,"line":18250},[34,88351,53783],{"class":40},[34,88353,55526],{"class":52939},[34,88355,16605],{"class":3617},[34,88357,221],{"class":40},[34,88359,88360],{"class":504},"\"delete\"",[34,88362,88363],{"class":40},">删除\u003C\u002F",[34,88365,55526],{"class":52939},[34,88367,52946],{"class":40},[34,88369,88370,88372,88374,88376,88378,88381,88384,88386],{"class":36,"line":18256},[34,88371,53783],{"class":40},[34,88373,55526],{"class":52939},[34,88375,16605],{"class":3617},[34,88377,221],{"class":40},[34,88379,88380],{"class":504},"\"login\"",[34,88382,88383],{"class":40},">登录\u003C\u002F",[34,88385,55526],{"class":52939},[34,88387,52946],{"class":40},[34,88389,88390,88392,88394],{"class":36,"line":18279},[34,88391,53783],{"class":40},[34,88393,53452],{"class":52939},[34,88395,52946],{"class":40},[34,88397,88398],{"class":36,"line":18285},[34,88399,88400],{"class":161},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[34,88402,88403,88405,88408,88410,88412,88414,88416,88418,88421,88423,88425],{"class":36,"line":18308},[34,88404,71723],{"class":55},[34,88406,88407],{"class":3617}," Modal",[34,88409,286],{"class":40},[34,88411,53046],{"class":51},[34,88413,56],{"class":55},[34,88415,71569],{"class":504},[34,88417,48],{"class":40},[34,88419,88420],{"class":51},"message",[34,88422,56],{"class":55},[34,88424,71569],{"class":504},[34,88426,14090],{"class":40},[34,88428,88429],{"class":36,"line":18322},[34,88430,88431],{"class":161},"      \u002F\u002F 创建Model 模态框盒子\n",[34,88433,88434],{"class":36,"line":18342},[34,88435,88436],{"class":161},"      \u002F\u002F 1.1 创建div标签\n",[34,88438,88439,88441,88444,88446,88448,88450,88452,88454],{"class":36,"line":18348},[34,88440,71690],{"class":44},[34,88442,88443],{"class":40},".modalBox ",[34,88445,221],{"class":55},[34,88447,56035],{"class":40},[34,88449,71790],{"class":3617},[34,88451,286],{"class":40},[34,88453,83568],{"class":504},[34,88455,101],{"class":40},[34,88457,88458],{"class":36,"line":18359},[34,88459,88460],{"class":161},"      \u002F\u002F 1.2 给div 添加类名为model\n",[34,88462,88463,88465,88468,88470],{"class":36,"line":18382},[34,88464,71690],{"class":44},[34,88466,88467],{"class":40},".modalBox.className ",[34,88469,221],{"class":55},[34,88471,88472],{"class":504}," 'modal'\n",[34,88474,88475],{"class":36,"line":18404},[34,88476,88477],{"class":161},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[34,88479,88480,88482,88485,88487],{"class":36,"line":18409},[34,88481,71690],{"class":44},[34,88483,88484],{"class":40},".modalBox.innerHTML ",[34,88486,221],{"class":55},[34,88488,71807],{"class":504},[34,88490,88491,88494,88496],{"class":36,"line":18415},[34,88492,88493],{"class":504},"        \u003Cdiv class=\"header\">${",[34,88495,53046],{"class":40},[34,88497,88498],{"class":504},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[34,88500,88501,88504,88506],{"class":36,"line":18429},[34,88502,88503],{"class":504},"        \u003Cdiv class=\"body\">${",[34,88505,88420],{"class":40},[34,88507,88508],{"class":504},"}\u003C\u002Fdiv>\n",[34,88510,88511],{"class":36,"line":18442},[34,88512,88513],{"class":504},"      `\n",[34,88515,88516],{"class":36,"line":18447},[34,88517,88518],{"class":161},"      \u002F\u002F console.log(this.modalBox)\n",[34,88520,88521],{"class":36,"line":18461},[34,88522,3841],{"class":40},[34,88524,88525],{"class":36,"line":18466},[34,88526,88527],{"class":161},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[34,88529,88530],{"class":36,"line":18472},[34,88531,88532],{"class":161},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[34,88534,88535],{"class":36,"line":18477},[34,88536,88537],{"class":161},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[34,88539,88540,88543,88545,88547,88549,88552,88554,88556],{"class":36,"line":18491},[34,88541,88542],{"class":44},"    Modal",[34,88544,2353],{"class":40},[34,88546,87215],{"class":44},[34,88548,2353],{"class":40},[34,88550,88551],{"class":3617},"open",[34,88553,56],{"class":55},[34,88555,60557],{"class":55},[34,88557,56091],{"class":40},[34,88559,88560],{"class":36,"line":18496},[34,88561,88562],{"class":161},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[34,88564,88565,88567,88570,88572,88574,88576,88578,88581],{"class":36,"line":18501},[34,88566,59867],{"class":55},[34,88568,88569],{"class":44}," box",[34,88571,56],{"class":55},[34,88573,56035],{"class":40},[34,88575,56038],{"class":3617},[34,88577,286],{"class":40},[34,88579,88580],{"class":504},"'.modal'",[34,88582,101],{"class":40},[34,88584,88585],{"class":36,"line":18515},[34,88586,88587],{"class":161},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[34,88589,88590,88593,88595,88598,88600],{"class":36,"line":18527},[34,88591,88592],{"class":40},"      box ",[34,88594,3369],{"class":55},[34,88596,88597],{"class":40}," box.",[34,88599,58645],{"class":3617},[34,88601,3630],{"class":40},[34,88603,88604],{"class":36,"line":18532},[34,88605,88606],{"class":161},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[34,88608,88609],{"class":36,"line":18545},[34,88610,88611],{"class":161},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[34,88613,88614],{"class":36,"line":18550},[34,88615,88616],{"class":161},"      \u002F\u002F append可以增加对象\n",[34,88618,88619,88622,88625,88627,88630],{"class":36,"line":18555},[34,88620,88621],{"class":40},"      document.body.",[34,88623,88624],{"class":3617},"append",[34,88626,286],{"class":40},[34,88628,88629],{"class":44},"this",[34,88631,88632],{"class":40},".modalBox)\n",[34,88634,88635],{"class":36,"line":18560},[34,88636,1475],{"emptyLinePlaceholder":1474},[34,88638,88639],{"class":36,"line":18573},[34,88640,88641],{"class":161},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[34,88643,88644,88646,88649,88651,88653,88656,88658,88660,88662,88664,88667,88669],{"class":36,"line":18578},[34,88645,71690],{"class":44},[34,88647,88648],{"class":40},".modalBox.",[34,88650,56038],{"class":3617},[34,88652,286],{"class":40},[34,88654,88655],{"class":504},"'i'",[34,88657,32468],{"class":40},[34,88659,59452],{"class":3617},[34,88661,286],{"class":40},[34,88663,59457],{"class":504},[34,88665,88666],{"class":40},", () ",[34,88668,86358],{"class":55},[34,88670,17218],{"class":40},[34,88672,88673],{"class":36,"line":34274},[34,88674,88675],{"class":161},"        \u002F\u002F 这个地方需要用到箭头函数\n",[34,88677,88678],{"class":36,"line":34280},[34,88679,88680],{"class":161},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[34,88682,88683],{"class":36,"line":34286},[34,88684,88685],{"class":161},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[34,88687,88688,88690,88692,88695],{"class":36,"line":34292},[34,88689,66365],{"class":44},[34,88691,2353],{"class":40},[34,88693,88694],{"class":3617},"close",[34,88696,3630],{"class":40},[34,88698,88699],{"class":36,"line":34298},[34,88700,66454],{"class":40},[34,88702,88703],{"class":36,"line":34309},[34,88704,3841],{"class":40},[34,88706,88707],{"class":36,"line":34315},[34,88708,1475],{"emptyLinePlaceholder":1474},[34,88710,88711],{"class":36,"line":34335},[34,88712,88713],{"class":161},"    \u002F\u002F 测试一下 点击 删除按钮\n",[34,88715,88716,88718,88720,88722,88725,88727,88729,88731,88733,88735,88737],{"class":36,"line":34341},[34,88717,54046],{"class":40},[34,88719,56038],{"class":3617},[34,88721,286],{"class":40},[34,88723,88724],{"class":504},"'#delete'",[34,88726,32468],{"class":40},[34,88728,59452],{"class":3617},[34,88730,286],{"class":40},[34,88732,59457],{"class":504},[34,88734,88666],{"class":40},[34,88736,86358],{"class":55},[34,88738,17218],{"class":40},[34,88740,88741],{"class":36,"line":34352},[34,88742,88743],{"class":161},"      \u002F\u002F 先调用Model构造函数\n",[34,88745,88746,88748,88751,88753,88755,88757,88759,88762,88764,88767],{"class":36,"line":34358},[34,88747,59867],{"class":55},[34,88749,88750],{"class":44}," del",[34,88752,56],{"class":55},[34,88754,13227],{"class":55},[34,88756,88407],{"class":3617},[34,88758,286],{"class":40},[34,88760,88761],{"class":504},"'温馨的提示'",[34,88763,48],{"class":40},[34,88765,88766],{"class":504},"'您没有删除权限操作'",[34,88768,101],{"class":40},[34,88770,88771],{"class":36,"line":34364},[34,88772,88773],{"class":161},"      \u002F\u002F 实例对象调用open方法\n",[34,88775,88776,88779,88781],{"class":36,"line":34370},[34,88777,88778],{"class":40},"      del.",[34,88780,88551],{"class":3617},[34,88782,3630],{"class":40},[34,88784,88785],{"class":36,"line":34376},[34,88786,35102],{"class":40},[34,88788,88789],{"class":36,"line":34382},[34,88790,88791],{"class":161},"    \u002F\u002F 测试一下 点击 登录按钮\n",[34,88793,88794,88796,88798,88800,88803,88805,88807,88809,88811,88813,88815],{"class":36,"line":34388},[34,88795,54046],{"class":40},[34,88797,56038],{"class":3617},[34,88799,286],{"class":40},[34,88801,88802],{"class":504},"'#login'",[34,88804,32468],{"class":40},[34,88806,59452],{"class":3617},[34,88808,286],{"class":40},[34,88810,59457],{"class":504},[34,88812,88666],{"class":40},[34,88814,86358],{"class":55},[34,88816,17218],{"class":40},[34,88818,88819],{"class":36,"line":34394},[34,88820,88743],{"class":161},[34,88822,88823,88825,88828,88830,88832,88834,88836,88839,88841,88844],{"class":36,"line":34414},[34,88824,59867],{"class":55},[34,88826,88827],{"class":44}," log",[34,88829,56],{"class":55},[34,88831,13227],{"class":55},[34,88833,88407],{"class":3617},[34,88835,286],{"class":40},[34,88837,88838],{"class":504},"'友情提示'",[34,88840,48],{"class":40},[34,88842,88843],{"class":504},"'您还没有登录呢'",[34,88845,101],{"class":40},[34,88847,88848],{"class":36,"line":34420},[34,88849,88773],{"class":161},[34,88851,88852,88855,88857],{"class":36,"line":34436},[34,88853,88854],{"class":40},"      log.",[34,88856,88551],{"class":3617},[34,88858,3630],{"class":40},[34,88860,88861],{"class":36,"line":34442},[34,88862,35102],{"class":40},[34,88864,88865],{"class":36,"line":34456},[34,88866,88867],{"class":161},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[34,88869,88870,88872,88874,88876,88878,88880,88882,88884],{"class":36,"line":34462},[34,88871,88542],{"class":44},[34,88873,2353],{"class":40},[34,88875,87215],{"class":44},[34,88877,2353],{"class":40},[34,88879,88694],{"class":3617},[34,88881,56],{"class":55},[34,88883,60557],{"class":55},[34,88885,56091],{"class":40},[34,88887,88888,88890,88892,88894],{"class":36,"line":34477},[34,88889,71690],{"class":44},[34,88891,88648],{"class":40},[34,88893,58645],{"class":3617},[34,88895,3630],{"class":40},[34,88897,88898],{"class":36,"line":34483},[34,88899,3841],{"class":40},[34,88901,88902,88904,88906],{"class":36,"line":34492},[34,88903,54056],{"class":40},[34,88905,53452],{"class":52939},[34,88907,52946],{"class":40},[34,88909,88910,88912,88914],{"class":36,"line":34498},[34,88911,53424],{"class":40},[34,88913,53439],{"class":52939},[34,88915,52946],{"class":40},[34,88917,88918],{"class":36,"line":34507},[34,88919,1475],{"emptyLinePlaceholder":1474},[34,88921,88922,88924,88926],{"class":36,"line":34513},[34,88923,53424],{"class":40},[34,88925,52274],{"class":52939},[34,88927,52946],{"class":40},[103,88929,88930],{},[109,88931],{"alt":29,"src":88932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88934,88936],{"id":88935},"_414-深浅拷贝","4.14 深浅拷贝",[19,88938,88940],{"id":88939},"_4141-浅拷贝","4.14.1 浅拷贝",[103,88942,88943],{},[109,88944],{"alt":29,"src":88945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[103,88947,88948],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[103,88950,88951],{},[109,88952],{"alt":29,"src":88953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[103,88955,88956],{},[109,88957],{"alt":29,"src":88958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[103,88960,88961],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[103,88963,88964],{},[109,88965],{"alt":29,"src":88966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[103,88968,12982],{},[103,88970,88971],{},[109,88972],{"alt":29,"src":88973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[19,88975,88977],{"id":88976},"_4142-深拷贝","4.14.2 深拷贝",[103,88979,88980],{},"深拷贝：拷贝的是对象，不是地址",[103,88982,88983],{},"常用的三种方法：",[1772,88985,88986,88989,88992],{},[1775,88987,88988],{},"通过递归实现深拷贝",[1775,88990,88991],{},"lodash\u002FcloneDeep",[1775,88993,88994],{},"通过JSON.stringify()实现",[1353,88996,88998],{"id":88997},"_41421-递归函数","4.14.2.1 递归函数",[103,89000,89001],{},[109,89002],{"alt":29,"src":89003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[1772,89005,89006],{},[1775,89007,89008],{},"死递归占溢出：",[24,89010,89012],{"className":54706,"code":89011,"language":54708,"meta":29,"style":29},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[31,89013,89014,89022,89030,89034,89039,89043,89048,89056],{"__ignoreMap":29},[34,89015,89016,89018,89020],{"class":36,"line":37},[34,89017,2701],{"class":40},[34,89019,53439],{"class":52939},[34,89021,52946],{"class":40},[34,89023,89024,89026,89028],{"class":36,"line":165},[34,89025,53783],{"class":40},[34,89027,53452],{"class":52939},[34,89029,52946],{"class":40},[34,89031,89032],{"class":36,"line":171},[34,89033,78781],{"class":40},[34,89035,89036],{"class":36,"line":182},[34,89037,89038],{"class":40},"      fn()\n",[34,89040,89041],{"class":36,"line":188},[34,89042,3841],{"class":40},[34,89044,89045],{"class":36,"line":518},[34,89046,89047],{"class":40},"    fn()\n",[34,89049,89050,89052,89054],{"class":36,"line":524},[34,89051,54056],{"class":40},[34,89053,53452],{"class":52939},[34,89055,52946],{"class":40},[34,89057,89058,89060,89062],{"class":36,"line":530},[34,89059,53424],{"class":40},[34,89061,53439],{"class":52939},[34,89063,52946],{"class":40},[1772,89065,89066],{"start":165},[1775,89067,89068],{},"递归函数要加判断条件：",[103,89070,89071],{},[109,89072],{"alt":29,"src":89073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[1772,89075,89076],{"start":171},[1775,89077,89078],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[24,89080,89082],{"className":52272,"code":89081,"language":52274,"meta":29,"style":29},"\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",[31,89083,89084,89094,89108,89112,89120,89134,89154,89166,89174,89178,89186,89198,89206,89214,89239,89251,89255,89262,89270,89278,89282],{"__ignoreMap":29},[34,89085,89086,89088,89090,89092],{"class":36,"line":37},[34,89087,52936],{"class":40},[34,89089,52940],{"class":52939},[34,89091,52943],{"class":3617},[34,89093,52946],{"class":40},[34,89095,89096,89098,89100,89102,89104,89106],{"class":36,"line":165},[34,89097,2701],{"class":40},[34,89099,52274],{"class":52939},[34,89101,52955],{"class":3617},[34,89103,221],{"class":40},[34,89105,52960],{"class":504},[34,89107,52946],{"class":40},[34,89109,89110],{"class":36,"line":171},[34,89111,1475],{"emptyLinePlaceholder":1474},[34,89113,89114,89116,89118],{"class":36,"line":182},[34,89115,2701],{"class":40},[34,89117,52973],{"class":52939},[34,89119,52946],{"class":40},[34,89121,89122,89124,89126,89128,89130,89132],{"class":36,"line":188},[34,89123,53783],{"class":40},[34,89125,52983],{"class":52939},[34,89127,52986],{"class":3617},[34,89129,221],{"class":40},[34,89131,52991],{"class":504},[34,89133,52946],{"class":40},[34,89135,89136,89138,89140,89142,89144,89146,89148,89150,89152],{"class":36,"line":518},[34,89137,53783],{"class":40},[34,89139,52983],{"class":52939},[34,89141,16566],{"class":3617},[34,89143,221],{"class":40},[34,89145,53030],{"class":504},[34,89147,53010],{"class":3617},[34,89149,221],{"class":40},[34,89151,53037],{"class":504},[34,89153,52946],{"class":40},[34,89155,89156,89158,89160,89162,89164],{"class":36,"line":524},[34,89157,53783],{"class":40},[34,89159,53046],{"class":52939},[34,89161,53049],{"class":40},[34,89163,53046],{"class":52939},[34,89165,52946],{"class":40},[34,89167,89168,89170,89172],{"class":36,"line":530},[34,89169,53424],{"class":40},[34,89171,52973],{"class":52939},[34,89173,52946],{"class":40},[34,89175,89176],{"class":36,"line":624},[34,89177,1475],{"emptyLinePlaceholder":1474},[34,89179,89180,89182,89184],{"class":36,"line":630},[34,89181,2701],{"class":40},[34,89183,53439],{"class":52939},[34,89185,52946],{"class":40},[34,89187,89188,89190,89192,89194,89196],{"class":36,"line":636},[34,89189,53783],{"class":40},[34,89191,53250],{"class":52939},[34,89193,56953],{"class":40},[34,89195,53250],{"class":52939},[34,89197,52946],{"class":40},[34,89199,89200,89202,89204],{"class":36,"line":1513},[34,89201,53783],{"class":40},[34,89203,53452],{"class":52939},[34,89205,52946],{"class":40},[34,89207,89208,89210,89212],{"class":36,"line":1519},[34,89209,71723],{"class":55},[34,89211,75412],{"class":3617},[34,89213,12503],{"class":40},[34,89215,89216,89218,89220,89222,89224,89226,89228,89230,89232,89234,89237],{"class":36,"line":3283},[34,89217,57410],{"class":40},[34,89219,56038],{"class":3617},[34,89221,286],{"class":40},[34,89223,83568],{"class":504},[34,89225,75888],{"class":40},[34,89227,221],{"class":55},[34,89229,13227],{"class":55},[34,89231,75428],{"class":3617},[34,89233,18907],{"class":40},[34,89235,89236],{"class":3617},"toLocaleString",[34,89238,3630],{"class":40},[34,89240,89241,89244,89247,89249],{"class":36,"line":3297},[34,89242,89243],{"class":3617},"      setTimeout",[34,89245,89246],{"class":40},"(getTime, ",[34,89248,8060],{"class":44},[34,89250,101],{"class":40},[34,89252,89253],{"class":36,"line":3302},[34,89254,3841],{"class":40},[34,89256,89257,89260],{"class":36,"line":3308},[34,89258,89259],{"class":3617},"    getTime",[34,89261,3630],{"class":40},[34,89263,89264,89266,89268],{"class":36,"line":3328},[34,89265,54056],{"class":40},[34,89267,53452],{"class":52939},[34,89269,52946],{"class":40},[34,89271,89272,89274,89276],{"class":36,"line":3333},[34,89273,53424],{"class":40},[34,89275,53439],{"class":52939},[34,89277,52946],{"class":40},[34,89279,89280],{"class":36,"line":3347},[34,89281,1475],{"emptyLinePlaceholder":1474},[34,89283,89284,89286,89288],{"class":36,"line":3352},[34,89285,53424],{"class":40},[34,89287,52274],{"class":52939},[34,89289,52946],{"class":40},[103,89291,89292],{},[109,89293],{"alt":29,"src":89294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[1772,89296,89297],{"start":182},[1775,89298,88988],{},[103,89300,89301],{},[109,89302],{"alt":29,"src":89303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[103,89305,89306],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[103,89308,40829],{},[103,89310,89311],{},"这个是简易版的递归函数深拷贝",[103,89313,89314],{},"一定要注意先数组再对象，因为万物皆可对象",[24,89316,89318],{"className":52272,"code":89317,"language":52274,"meta":29,"style":29},"\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",[31,89319,89320,89330,89344,89348,89356,89370,89390,89402,89410,89414,89422,89430,89440,89449,89457,89473,89477,89485,89489,89493,89505,89510,89529,89545,89550,89555,89560,89575,89580,89585,89594,89602,89619,89627,89633,89641,89646,89651,89660,89664,89668,89672,89683,89692,89702,89716,89726,89734,89742,89750,89754],{"__ignoreMap":29},[34,89321,89322,89324,89326,89328],{"class":36,"line":37},[34,89323,52936],{"class":40},[34,89325,52940],{"class":52939},[34,89327,52943],{"class":3617},[34,89329,52946],{"class":40},[34,89331,89332,89334,89336,89338,89340,89342],{"class":36,"line":165},[34,89333,2701],{"class":40},[34,89335,52274],{"class":52939},[34,89337,52955],{"class":3617},[34,89339,221],{"class":40},[34,89341,52960],{"class":504},[34,89343,52946],{"class":40},[34,89345,89346],{"class":36,"line":171},[34,89347,1475],{"emptyLinePlaceholder":1474},[34,89349,89350,89352,89354],{"class":36,"line":182},[34,89351,2701],{"class":40},[34,89353,52973],{"class":52939},[34,89355,52946],{"class":40},[34,89357,89358,89360,89362,89364,89366,89368],{"class":36,"line":188},[34,89359,53783],{"class":40},[34,89361,52983],{"class":52939},[34,89363,52986],{"class":3617},[34,89365,221],{"class":40},[34,89367,52991],{"class":504},[34,89369,52946],{"class":40},[34,89371,89372,89374,89376,89378,89380,89382,89384,89386,89388],{"class":36,"line":518},[34,89373,53783],{"class":40},[34,89375,52983],{"class":52939},[34,89377,16566],{"class":3617},[34,89379,221],{"class":40},[34,89381,53030],{"class":504},[34,89383,53010],{"class":3617},[34,89385,221],{"class":40},[34,89387,53037],{"class":504},[34,89389,52946],{"class":40},[34,89391,89392,89394,89396,89398,89400],{"class":36,"line":524},[34,89393,53783],{"class":40},[34,89395,53046],{"class":52939},[34,89397,53049],{"class":40},[34,89399,53046],{"class":52939},[34,89401,52946],{"class":40},[34,89403,89404,89406,89408],{"class":36,"line":530},[34,89405,53424],{"class":40},[34,89407,52973],{"class":52939},[34,89409,52946],{"class":40},[34,89411,89412],{"class":36,"line":624},[34,89413,1475],{"emptyLinePlaceholder":1474},[34,89415,89416,89418,89420],{"class":36,"line":630},[34,89417,2701],{"class":40},[34,89419,53439],{"class":52939},[34,89421,52946],{"class":40},[34,89423,89424,89426,89428],{"class":36,"line":636},[34,89425,53783],{"class":40},[34,89427,53452],{"class":52939},[34,89429,52946],{"class":40},[34,89431,89432,89434,89436,89438],{"class":36,"line":1513},[34,89433,12871],{"class":55},[34,89435,71610],{"class":44},[34,89437,56],{"class":55},[34,89439,17218],{"class":40},[34,89441,89442,89444,89447],{"class":36,"line":1519},[34,89443,73255],{"class":40},[34,89445,89446],{"class":504},"'pink'",[34,89448,33108],{"class":40},[34,89450,89451,89453,89455],{"class":36,"line":3283},[34,89452,73265],{"class":40},[34,89454,2445],{"class":44},[34,89456,33108],{"class":40},[34,89458,89459,89462,89465,89467,89470],{"class":36,"line":3297},[34,89460,89461],{"class":40},"      hobby: [",[34,89463,89464],{"class":504},"'乒乓球'",[34,89466,48],{"class":40},[34,89468,89469],{"class":504},"'足球'",[34,89471,89472],{"class":40},"],\n",[34,89474,89475],{"class":36,"line":3302},[34,89476,79509],{"class":40},[34,89478,89479,89482],{"class":36,"line":3308},[34,89480,89481],{"class":40},"        baby: ",[34,89483,89484],{"class":504},"'小pink'\n",[34,89486,89487],{"class":36,"line":3328},[34,89488,54037],{"class":40},[34,89490,89491],{"class":36,"line":3333},[34,89492,3841],{"class":40},[34,89494,89495,89497,89500,89502],{"class":36,"line":3347},[34,89496,12871],{"class":55},[34,89498,89499],{"class":44}," o",[34,89501,56],{"class":55},[34,89503,89504],{"class":40}," {}\n",[34,89506,89507],{"class":36,"line":3352},[34,89508,89509],{"class":161},"    \u002F\u002F 拷贝函数\n",[34,89511,89512,89514,89517,89519,89522,89524,89527],{"class":36,"line":3381},[34,89513,71723],{"class":55},[34,89515,89516],{"class":3617}," deepCopy",[34,89518,286],{"class":40},[34,89520,89521],{"class":51},"newObj",[34,89523,48],{"class":40},[34,89525,89526],{"class":51},"oldObj",[34,89528,14090],{"class":40},[34,89530,89531,89533,89535,89537,89540,89542],{"class":36,"line":3386},[34,89532,53923],{"class":55},[34,89534,3313],{"class":40},[34,89536,53486],{"class":55},[34,89538,89539],{"class":40}," k ",[34,89541,27689],{"class":55},[34,89543,89544],{"class":40}," oldObj) {\n",[34,89546,89547],{"class":36,"line":3403},[34,89548,89549],{"class":161},"        \u002F\u002F 处理数组的问题\n",[34,89551,89552],{"class":36,"line":3408},[34,89553,89554],{"class":161},"        \u002F\u002F 判断是否属于数组\n",[34,89556,89557],{"class":36,"line":3413},[34,89558,89559],{"class":161},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[34,89561,89562,89564,89567,89570,89573],{"class":36,"line":3418},[34,89563,4150],{"class":55},[34,89565,89566],{"class":40}," (oldObj[k] ",[34,89568,89569],{"class":55},"instanceof",[34,89571,89572],{"class":3617}," Array",[34,89574,14090],{"class":40},[34,89576,89577],{"class":36,"line":3432},[34,89578,89579],{"class":161},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[34,89581,89582],{"class":36,"line":3437},[34,89583,89584],{"class":161},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[34,89586,89587,89590,89592],{"class":36,"line":4230},[34,89588,89589],{"class":40},"          newObj[k] ",[34,89591,221],{"class":55},[34,89593,53477],{"class":40},[34,89595,89596,89599],{"class":36,"line":4244},[34,89597,89598],{"class":3617},"          deepCopy",[34,89600,89601],{"class":40},"(newObj[k], oldObj[k])\n",[34,89603,89604,89606,89608,89610,89612,89614,89617],{"class":36,"line":4252},[34,89605,81717],{"class":40},[34,89607,3355],{"class":55},[34,89609,3358],{"class":55},[34,89611,89566],{"class":40},[34,89613,89569],{"class":55},[34,89615,89616],{"class":3617}," Object",[34,89618,14090],{"class":40},[34,89620,89621,89623,89625],{"class":36,"line":4257},[34,89622,89589],{"class":40},[34,89624,221],{"class":55},[34,89626,89504],{"class":40},[34,89628,89629,89631],{"class":36,"line":4263},[34,89630,89598],{"class":3617},[34,89632,89601],{"class":40},[34,89634,89635,89637,89639],{"class":36,"line":4269},[34,89636,81717],{"class":40},[34,89638,3355],{"class":55},[34,89640,17218],{"class":40},[34,89642,89643],{"class":36,"line":4274},[34,89644,89645],{"class":161},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[34,89647,89648],{"class":36,"line":9598},[34,89649,89650],{"class":161},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[34,89652,89653,89655,89657],{"class":36,"line":9622},[34,89654,89589],{"class":40},[34,89656,221],{"class":55},[34,89658,89659],{"class":40}," oldObj[k]\n",[34,89661,89662],{"class":36,"line":9627},[34,89663,4182],{"class":40},[34,89665,89666],{"class":36,"line":9633},[34,89667,54037],{"class":40},[34,89669,89670],{"class":36,"line":9660},[34,89671,3841],{"class":40},[34,89673,89674,89677,89680],{"class":36,"line":9665},[34,89675,89676],{"class":3617},"    deepCopy",[34,89678,89679],{"class":40},"(o, obj) ",[34,89681,89682],{"class":161},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[34,89684,89685,89687,89689],{"class":36,"line":9671},[34,89686,75392],{"class":40},[34,89688,59886],{"class":3617},[34,89690,89691],{"class":40},"(o)\n",[34,89693,89694,89697,89699],{"class":36,"line":9683},[34,89695,89696],{"class":40},"    o.age ",[34,89698,221],{"class":55},[34,89700,89701],{"class":44}," 20\n",[34,89703,89704,89707,89709,89711,89713],{"class":36,"line":9695},[34,89705,89706],{"class":40},"    o.hobby[",[34,89708,177],{"class":44},[34,89710,6095],{"class":40},[34,89712,221],{"class":55},[34,89714,89715],{"class":504}," '篮球'\n",[34,89717,89718,89721,89723],{"class":36,"line":9707},[34,89719,89720],{"class":40},"    o.family ",[34,89722,221],{"class":55},[34,89724,89725],{"class":504}," '老pink'\n",[34,89727,89728,89730,89732],{"class":36,"line":11366},[34,89729,75392],{"class":40},[34,89731,59886],{"class":3617},[34,89733,71675],{"class":40},[34,89735,89736,89738,89740],{"class":36,"line":11391},[34,89737,54056],{"class":40},[34,89739,53452],{"class":52939},[34,89741,52946],{"class":40},[34,89743,89744,89746,89748],{"class":36,"line":11414},[34,89745,53424],{"class":40},[34,89747,53439],{"class":52939},[34,89749,52946],{"class":40},[34,89751,89752],{"class":36,"line":11438},[34,89753,1475],{"emptyLinePlaceholder":1474},[34,89755,89756,89758,89760],{"class":36,"line":11443},[34,89757,53424],{"class":40},[34,89759,52274],{"class":52939},[34,89761,52946],{"class":40},[103,89763,89764],{},[109,89765],{"alt":29,"src":89766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[1353,89768,89770,89771],{"id":89769},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[1165,89772,89773],{},"js库lodash里面cloneDeep内部实现了深拷贝",[103,89775,89776],{},[236,89777,89778],{"href":89778,"rel":89779},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25510],[103,89781,89782],{},"lodash里边的方法都要加上一个下划线_",[103,89784,89785],{},"_.cloneDeep()",[24,89787,89789],{"className":52272,"code":89788,"language":52274,"meta":29,"style":29},"\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",[31,89790,89791,89801,89815,89819,89827,89841,89861,89873,89881,89885,89893,89898,89917,89925,89935,89943,89951,89963,89967,89973,89977,89981,89997,90005,90014,90022,90030,90038,90042],{"__ignoreMap":29},[34,89792,89793,89795,89797,89799],{"class":36,"line":37},[34,89794,52936],{"class":40},[34,89796,52940],{"class":52939},[34,89798,52943],{"class":3617},[34,89800,52946],{"class":40},[34,89802,89803,89805,89807,89809,89811,89813],{"class":36,"line":165},[34,89804,2701],{"class":40},[34,89806,52274],{"class":52939},[34,89808,52955],{"class":3617},[34,89810,221],{"class":40},[34,89812,52960],{"class":504},[34,89814,52946],{"class":40},[34,89816,89817],{"class":36,"line":171},[34,89818,1475],{"emptyLinePlaceholder":1474},[34,89820,89821,89823,89825],{"class":36,"line":182},[34,89822,2701],{"class":40},[34,89824,52973],{"class":52939},[34,89826,52946],{"class":40},[34,89828,89829,89831,89833,89835,89837,89839],{"class":36,"line":188},[34,89830,53783],{"class":40},[34,89832,52983],{"class":52939},[34,89834,52986],{"class":3617},[34,89836,221],{"class":40},[34,89838,52991],{"class":504},[34,89840,52946],{"class":40},[34,89842,89843,89845,89847,89849,89851,89853,89855,89857,89859],{"class":36,"line":518},[34,89844,53783],{"class":40},[34,89846,52983],{"class":52939},[34,89848,16566],{"class":3617},[34,89850,221],{"class":40},[34,89852,53030],{"class":504},[34,89854,53010],{"class":3617},[34,89856,221],{"class":40},[34,89858,53037],{"class":504},[34,89860,52946],{"class":40},[34,89862,89863,89865,89867,89869,89871],{"class":36,"line":524},[34,89864,53783],{"class":40},[34,89866,53046],{"class":52939},[34,89868,53049],{"class":40},[34,89870,53046],{"class":52939},[34,89872,52946],{"class":40},[34,89874,89875,89877,89879],{"class":36,"line":530},[34,89876,53424],{"class":40},[34,89878,52973],{"class":52939},[34,89880,52946],{"class":40},[34,89882,89883],{"class":36,"line":624},[34,89884,1475],{"emptyLinePlaceholder":1474},[34,89886,89887,89889,89891],{"class":36,"line":630},[34,89888,2701],{"class":40},[34,89890,53439],{"class":52939},[34,89892,52946],{"class":40},[34,89894,89895],{"class":36,"line":636},[34,89896,89897],{"class":161},"  \u003C!-- 先引用这个库 -->\n",[34,89899,89900,89902,89904,89906,89908,89911,89913,89915],{"class":36,"line":1513},[34,89901,53783],{"class":40},[34,89903,53452],{"class":52939},[34,89905,56878],{"class":3617},[34,89907,221],{"class":40},[34,89909,89910],{"class":504},"\"lodash.min.js\"",[34,89912,56953],{"class":40},[34,89914,53452],{"class":52939},[34,89916,52946],{"class":40},[34,89918,89919,89921,89923],{"class":36,"line":1519},[34,89920,53783],{"class":40},[34,89922,53452],{"class":52939},[34,89924,52946],{"class":40},[34,89926,89927,89929,89931,89933],{"class":36,"line":3283},[34,89928,12871],{"class":55},[34,89930,71610],{"class":44},[34,89932,56],{"class":55},[34,89934,17218],{"class":40},[34,89936,89937,89939,89941],{"class":36,"line":3297},[34,89938,73255],{"class":40},[34,89940,89446],{"class":504},[34,89942,33108],{"class":40},[34,89944,89945,89947,89949],{"class":36,"line":3302},[34,89946,73265],{"class":40},[34,89948,2445],{"class":44},[34,89950,33108],{"class":40},[34,89952,89953,89955,89957,89959,89961],{"class":36,"line":3308},[34,89954,89461],{"class":40},[34,89956,89464],{"class":504},[34,89958,48],{"class":40},[34,89960,89469],{"class":504},[34,89962,89472],{"class":40},[34,89964,89965],{"class":36,"line":3328},[34,89966,79509],{"class":40},[34,89968,89969,89971],{"class":36,"line":3333},[34,89970,89481],{"class":40},[34,89972,89484],{"class":504},[34,89974,89975],{"class":36,"line":3347},[34,89976,54037],{"class":40},[34,89978,89979],{"class":36,"line":3352},[34,89980,3841],{"class":40},[34,89982,89983,89985,89987,89989,89992,89995],{"class":36,"line":3381},[34,89984,12871],{"class":55},[34,89986,89499],{"class":44},[34,89988,56],{"class":55},[34,89990,89991],{"class":40}," _.",[34,89993,89994],{"class":3617},"cloneDeep",[34,89996,71675],{"class":40},[34,89998,89999,90001,90003],{"class":36,"line":3386},[34,90000,75392],{"class":40},[34,90002,59886],{"class":3617},[34,90004,89691],{"class":40},[34,90006,90007,90010,90012],{"class":36,"line":3403},[34,90008,90009],{"class":40},"    o.family.baby ",[34,90011,221],{"class":55},[34,90013,89725],{"class":504},[34,90015,90016,90018,90020],{"class":36,"line":3408},[34,90017,75392],{"class":40},[34,90019,59886],{"class":3617},[34,90021,71675],{"class":40},[34,90023,90024,90026,90028],{"class":36,"line":3413},[34,90025,54056],{"class":40},[34,90027,53452],{"class":52939},[34,90029,52946],{"class":40},[34,90031,90032,90034,90036],{"class":36,"line":3418},[34,90033,53424],{"class":40},[34,90035,53439],{"class":52939},[34,90037,52946],{"class":40},[34,90039,90040],{"class":36,"line":3432},[34,90041,1475],{"emptyLinePlaceholder":1474},[34,90043,90044,90046,90048],{"class":36,"line":3437},[34,90045,53424],{"class":40},[34,90047,52274],{"class":52939},[34,90049,52946],{"class":40},[103,90051,90052],{},[109,90053],{"alt":29,"src":90054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[1353,90056,90058],{"id":90057},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[24,90060,90062],{"className":52272,"code":90061,"language":52274,"meta":29,"style":29},"\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",[31,90063,90064,90074,90088,90092,90100,90114,90134,90146,90154,90158,90166,90174,90184,90192,90200,90212,90216,90222,90226,90230,90235,90240,90245,90271,90279,90288,90296,90304,90312,90316],{"__ignoreMap":29},[34,90065,90066,90068,90070,90072],{"class":36,"line":37},[34,90067,52936],{"class":40},[34,90069,52940],{"class":52939},[34,90071,52943],{"class":3617},[34,90073,52946],{"class":40},[34,90075,90076,90078,90080,90082,90084,90086],{"class":36,"line":165},[34,90077,2701],{"class":40},[34,90079,52274],{"class":52939},[34,90081,52955],{"class":3617},[34,90083,221],{"class":40},[34,90085,52960],{"class":504},[34,90087,52946],{"class":40},[34,90089,90090],{"class":36,"line":171},[34,90091,1475],{"emptyLinePlaceholder":1474},[34,90093,90094,90096,90098],{"class":36,"line":182},[34,90095,2701],{"class":40},[34,90097,52973],{"class":52939},[34,90099,52946],{"class":40},[34,90101,90102,90104,90106,90108,90110,90112],{"class":36,"line":188},[34,90103,53783],{"class":40},[34,90105,52983],{"class":52939},[34,90107,52986],{"class":3617},[34,90109,221],{"class":40},[34,90111,52991],{"class":504},[34,90113,52946],{"class":40},[34,90115,90116,90118,90120,90122,90124,90126,90128,90130,90132],{"class":36,"line":518},[34,90117,53783],{"class":40},[34,90119,52983],{"class":52939},[34,90121,16566],{"class":3617},[34,90123,221],{"class":40},[34,90125,53030],{"class":504},[34,90127,53010],{"class":3617},[34,90129,221],{"class":40},[34,90131,53037],{"class":504},[34,90133,52946],{"class":40},[34,90135,90136,90138,90140,90142,90144],{"class":36,"line":524},[34,90137,53783],{"class":40},[34,90139,53046],{"class":52939},[34,90141,53049],{"class":40},[34,90143,53046],{"class":52939},[34,90145,52946],{"class":40},[34,90147,90148,90150,90152],{"class":36,"line":530},[34,90149,53424],{"class":40},[34,90151,52973],{"class":52939},[34,90153,52946],{"class":40},[34,90155,90156],{"class":36,"line":624},[34,90157,1475],{"emptyLinePlaceholder":1474},[34,90159,90160,90162,90164],{"class":36,"line":630},[34,90161,2701],{"class":40},[34,90163,53439],{"class":52939},[34,90165,52946],{"class":40},[34,90167,90168,90170,90172],{"class":36,"line":636},[34,90169,53783],{"class":40},[34,90171,53452],{"class":52939},[34,90173,52946],{"class":40},[34,90175,90176,90178,90180,90182],{"class":36,"line":1513},[34,90177,12871],{"class":55},[34,90179,71610],{"class":44},[34,90181,56],{"class":55},[34,90183,17218],{"class":40},[34,90185,90186,90188,90190],{"class":36,"line":1519},[34,90187,73255],{"class":40},[34,90189,89446],{"class":504},[34,90191,33108],{"class":40},[34,90193,90194,90196,90198],{"class":36,"line":3283},[34,90195,73265],{"class":40},[34,90197,2445],{"class":44},[34,90199,33108],{"class":40},[34,90201,90202,90204,90206,90208,90210],{"class":36,"line":3297},[34,90203,89461],{"class":40},[34,90205,89464],{"class":504},[34,90207,48],{"class":40},[34,90209,89469],{"class":504},[34,90211,89472],{"class":40},[34,90213,90214],{"class":36,"line":3302},[34,90215,79509],{"class":40},[34,90217,90218,90220],{"class":36,"line":3308},[34,90219,89481],{"class":40},[34,90221,89484],{"class":504},[34,90223,90224],{"class":36,"line":3328},[34,90225,54037],{"class":40},[34,90227,90228],{"class":36,"line":3333},[34,90229,3841],{"class":40},[34,90231,90232],{"class":36,"line":3347},[34,90233,90234],{"class":161},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[34,90236,90237],{"class":36,"line":3352},[34,90238,90239],{"class":161},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[34,90241,90242],{"class":36,"line":3381},[34,90243,90244],{"class":161},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[34,90246,90247,90249,90251,90253,90256,90258,90261,90263,90265,90267,90269],{"class":36,"line":3386},[34,90248,12871],{"class":55},[34,90250,89499],{"class":44},[34,90252,56],{"class":55},[34,90254,90255],{"class":44}," JSON",[34,90257,2353],{"class":40},[34,90259,90260],{"class":3617},"parse",[34,90262,286],{"class":40},[34,90264,73303],{"class":44},[34,90266,2353],{"class":40},[34,90268,73308],{"class":3617},[34,90270,73311],{"class":40},[34,90272,90273,90275,90277],{"class":36,"line":3403},[34,90274,75392],{"class":40},[34,90276,59886],{"class":3617},[34,90278,89691],{"class":40},[34,90280,90281,90283,90285],{"class":36,"line":3408},[34,90282,90009],{"class":40},[34,90284,221],{"class":55},[34,90286,90287],{"class":504}," '123'\n",[34,90289,90290,90292,90294],{"class":36,"line":3413},[34,90291,75392],{"class":40},[34,90293,59886],{"class":3617},[34,90295,71675],{"class":40},[34,90297,90298,90300,90302],{"class":36,"line":3418},[34,90299,54056],{"class":40},[34,90301,53452],{"class":52939},[34,90303,52946],{"class":40},[34,90305,90306,90308,90310],{"class":36,"line":3432},[34,90307,53424],{"class":40},[34,90309,53439],{"class":52939},[34,90311,52946],{"class":40},[34,90313,90314],{"class":36,"line":3437},[34,90315,1475],{"emptyLinePlaceholder":1474},[34,90317,90318,90320,90322],{"class":36,"line":4230},[34,90319,53424],{"class":40},[34,90321,52274],{"class":52939},[34,90323,52946],{"class":40},[103,90325,90326],{},[109,90327],{"alt":29,"src":90328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90330,90332],{"id":90331},"_415-异常处理","4.15 异常处理",[1772,90334,90335],{},[1775,90336,90337],{},"throw抛异常",[103,90339,90340],{},[109,90341],{"alt":29,"src":90342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[1772,90344,90345],{"start":165},[1775,90346,90347],{},"try\u002Fcatch 捕获错误信息",[103,90349,90350],{},[109,90351],{"alt":29,"src":90352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[24,90354,90356],{"className":52272,"code":90355,"language":52274,"meta":29,"style":29},"\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",[31,90357,90358,90368,90382,90386,90394,90408,90428,90440,90448,90452,90460,90472,90480,90489,90496,90501,90520,90529,90540,90545,90555,90560,90565,90570,90587,90591,90596,90603,90615,90619,90631,90635,90639,90644,90649,90656,90664,90672,90676],{"__ignoreMap":29},[34,90359,90360,90362,90364,90366],{"class":36,"line":37},[34,90361,52936],{"class":40},[34,90363,52940],{"class":52939},[34,90365,52943],{"class":3617},[34,90367,52946],{"class":40},[34,90369,90370,90372,90374,90376,90378,90380],{"class":36,"line":165},[34,90371,2701],{"class":40},[34,90373,52274],{"class":52939},[34,90375,52955],{"class":3617},[34,90377,221],{"class":40},[34,90379,52960],{"class":504},[34,90381,52946],{"class":40},[34,90383,90384],{"class":36,"line":171},[34,90385,1475],{"emptyLinePlaceholder":1474},[34,90387,90388,90390,90392],{"class":36,"line":182},[34,90389,2701],{"class":40},[34,90391,52973],{"class":52939},[34,90393,52946],{"class":40},[34,90395,90396,90398,90400,90402,90404,90406],{"class":36,"line":188},[34,90397,53783],{"class":40},[34,90399,52983],{"class":52939},[34,90401,52986],{"class":3617},[34,90403,221],{"class":40},[34,90405,52991],{"class":504},[34,90407,52946],{"class":40},[34,90409,90410,90412,90414,90416,90418,90420,90422,90424,90426],{"class":36,"line":518},[34,90411,53783],{"class":40},[34,90413,52983],{"class":52939},[34,90415,16566],{"class":3617},[34,90417,221],{"class":40},[34,90419,53030],{"class":504},[34,90421,53010],{"class":3617},[34,90423,221],{"class":40},[34,90425,53037],{"class":504},[34,90427,52946],{"class":40},[34,90429,90430,90432,90434,90436,90438],{"class":36,"line":524},[34,90431,53783],{"class":40},[34,90433,53046],{"class":52939},[34,90435,53049],{"class":40},[34,90437,53046],{"class":52939},[34,90439,52946],{"class":40},[34,90441,90442,90444,90446],{"class":36,"line":530},[34,90443,53424],{"class":40},[34,90445,52973],{"class":52939},[34,90447,52946],{"class":40},[34,90449,90450],{"class":36,"line":624},[34,90451,1475],{"emptyLinePlaceholder":1474},[34,90453,90454,90456,90458],{"class":36,"line":630},[34,90455,2701],{"class":40},[34,90457,53439],{"class":52939},[34,90459,52946],{"class":40},[34,90461,90462,90464,90466,90468,90470],{"class":36,"line":636},[34,90463,53783],{"class":40},[34,90465,103],{"class":52939},[34,90467,55133],{"class":40},[34,90469,103],{"class":52939},[34,90471,52946],{"class":40},[34,90473,90474,90476,90478],{"class":36,"line":1513},[34,90475,53783],{"class":40},[34,90477,53452],{"class":52939},[34,90479,52946],{"class":40},[34,90481,90482,90484,90487],{"class":36,"line":1519},[34,90483,71723],{"class":55},[34,90485,90486],{"class":3617}," fn",[34,90488,12503],{"class":40},[34,90490,90491,90494],{"class":36,"line":3283},[34,90492,90493],{"class":55},"      try",[34,90495,17218],{"class":40},[34,90497,90498],{"class":36,"line":3297},[34,90499,90500],{"class":161},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[34,90502,90503,90505,90507,90509,90511,90513,90515,90518],{"class":36,"line":3302},[34,90504,62909],{"class":55},[34,90506,8475],{"class":44},[34,90508,56],{"class":55},[34,90510,56035],{"class":40},[34,90512,56038],{"class":3617},[34,90514,286],{"class":40},[34,90516,90517],{"class":504},"'.p'",[34,90519,101],{"class":40},[34,90521,90522,90525,90527],{"class":36,"line":3308},[34,90523,90524],{"class":40},"        p.style.color ",[34,90526,221],{"class":55},[34,90528,68690],{"class":504},[34,90530,90531,90534,90537],{"class":36,"line":3328},[34,90532,90533],{"class":40},"      } ",[34,90535,90536],{"class":55},"catch",[34,90538,90539],{"class":40}," (err) {\n",[34,90541,90542],{"class":36,"line":3333},[34,90543,90544],{"class":161},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[34,90546,90547,90550,90552],{"class":36,"line":3347},[34,90548,90549],{"class":40},"        console.",[34,90551,59886],{"class":3617},[34,90553,90554],{"class":40},"(err.message)\n",[34,90556,90557],{"class":36,"line":3352},[34,90558,90559],{"class":161},"        \u002F\u002F 想要中断程序，需要加return\n",[34,90561,90562],{"class":36,"line":3381},[34,90563,90564],{"class":161},"        \u002F\u002F return\n",[34,90566,90567],{"class":36,"line":3386},[34,90568,90569],{"class":161},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[34,90571,90572,90575,90577,90580,90582,90585],{"class":36,"line":3403},[34,90573,90574],{"class":55},"        throw",[34,90576,13227],{"class":55},[34,90578,90579],{"class":3617}," Error",[34,90581,286],{"class":40},[34,90583,90584],{"class":504},"'你看看，选择器错误了吧'",[34,90586,101],{"class":40},[34,90588,90589],{"class":36,"line":3408},[34,90590,54037],{"class":40},[34,90592,90593],{"class":36,"line":3413},[34,90594,90595],{"class":161},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[34,90597,90598,90601],{"class":36,"line":3418},[34,90599,90600],{"class":55},"      finally",[34,90602,17218],{"class":40},[34,90604,90605,90608,90610,90613],{"class":36,"line":3432},[34,90606,90607],{"class":3617},"        alert",[34,90609,286],{"class":40},[34,90611,90612],{"class":504},"'弹出对话框'",[34,90614,101],{"class":40},[34,90616,90617],{"class":36,"line":3437},[34,90618,54037],{"class":40},[34,90620,90621,90623,90625,90627,90629],{"class":36,"line":4230},[34,90622,59883],{"class":40},[34,90624,59886],{"class":3617},[34,90626,286],{"class":40},[34,90628,399],{"class":44},[34,90630,101],{"class":40},[34,90632,90633],{"class":36,"line":4244},[34,90634,1475],{"emptyLinePlaceholder":1474},[34,90636,90637],{"class":36,"line":4252},[34,90638,3841],{"class":40},[34,90640,90641],{"class":36,"line":4257},[34,90642,90643],{"class":161},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[34,90645,90646],{"class":36,"line":4263},[34,90647,90648],{"class":161},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[34,90650,90651,90654],{"class":36,"line":4269},[34,90652,90653],{"class":3617},"    fn",[34,90655,3630],{"class":40},[34,90657,90658,90660,90662],{"class":36,"line":4274},[34,90659,54056],{"class":40},[34,90661,53452],{"class":52939},[34,90663,52946],{"class":40},[34,90665,90666,90668,90670],{"class":36,"line":9598},[34,90667,53424],{"class":40},[34,90669,53439],{"class":52939},[34,90671,52946],{"class":40},[34,90673,90674],{"class":36,"line":9622},[34,90675,1475],{"emptyLinePlaceholder":1474},[34,90677,90678,90680,90682],{"class":36,"line":9627},[34,90679,53424],{"class":40},[34,90681,52274],{"class":52939},[34,90683,52946],{"class":40},[103,90685,90686],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[1772,90688,90689],{"start":171},[1775,90690,90691],{},"debugger",[103,90693,90694],{},[109,90695],{"alt":29,"src":90696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[103,90698,90699],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90701,90703],{"id":90702},"_416-处理this","4.16 处理this",[19,90705,90707],{"id":90706},"_4161-this的指向","4.16.1 this的指向",[1772,90709,90710],{},[1775,90711,90712],{},"普通函数的this",[103,90714,90715],{},[109,90716],{"alt":29,"src":90717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[1772,90719,90720],{"start":165},[1775,90721,90722],{},"箭头函数的this",[103,90724,90725],{},[109,90726],{"alt":29,"src":90727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[103,90729,90730],{},[109,90731],{"alt":29,"src":90732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[103,90734,90735],{},[109,90736],{"alt":29,"src":90737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[19,90739,90741],{"id":90740},"_4162-this的改变","4.16.2 this的改变",[103,90743,90744],{},"call() apply() bind()",[1772,90746,90747],{},[1775,90748,90749],{},"call()",[103,90751,90752],{},[109,90753],{"alt":29,"src":90754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[103,90756,90757],{},"两个作用：①调用函数；②改变this指向",[24,90759,90761],{"className":54706,"code":90760,"language":54708,"meta":29,"style":29},"\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",[31,90762,90763,90771,90779,90783,90788,90792,90797,90802,90807,90811,90816,90824],{"__ignoreMap":29},[34,90764,90765,90767,90769],{"class":36,"line":37},[34,90766,2701],{"class":40},[34,90768,53439],{"class":52939},[34,90770,52946],{"class":40},[34,90772,90773,90775,90777],{"class":36,"line":165},[34,90774,53783],{"class":40},[34,90776,53452],{"class":52939},[34,90778,52946],{"class":40},[34,90780,90781],{"class":36,"line":171},[34,90782,73162],{"class":40},[34,90784,90785],{"class":36,"line":182},[34,90786,90787],{"class":40},"      uname: 'pink'\n",[34,90789,90790],{"class":36,"line":188},[34,90791,3841],{"class":40},[34,90793,90794],{"class":36,"line":518},[34,90795,90796],{"class":40},"    function fn(x, y) {\n",[34,90798,90799],{"class":36,"line":524},[34,90800,90801],{"class":40},"      console.log(this)  \u002F\u002Fwindow\n",[34,90803,90804],{"class":36,"line":530},[34,90805,90806],{"class":40},"      console.log(x + y)\n",[34,90808,90809],{"class":36,"line":624},[34,90810,3841],{"class":40},[34,90812,90813],{"class":36,"line":630},[34,90814,90815],{"class":40},"    fn.call(obj, 1, 2)\n",[34,90817,90818,90820,90822],{"class":36,"line":636},[34,90819,54056],{"class":40},[34,90821,53452],{"class":52939},[34,90823,52946],{"class":40},[34,90825,90826,90828,90830],{"class":36,"line":1513},[34,90827,53424],{"class":40},[34,90829,53439],{"class":52939},[34,90831,52946],{"class":40},[103,90833,90834],{},[109,90835],{"alt":29,"src":90836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[1772,90838,90839],{"start":165},[1775,90840,90841],{},"apply()",[103,90843,90844],{},[109,90845],{"alt":29,"src":90846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[103,90848,90757],{},[103,90850,90851],{},"call传递的是普通参数，而apply必须传递的是数组",[24,90853,90855],{"className":52272,"code":90854,"language":52274,"meta":29,"style":29},"\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",[31,90856,90857,90867,90881,90885,90893,90907,90927,90939,90947,90951,90959,90967,90977,90984,90988,90993,91009,91021,91035,91039,91044,91063,91068,91072,91077,91082,91090,91095,91117,91122,91138,91154,91166,91170,91175,91194,91202,91210,91214],{"__ignoreMap":29},[34,90858,90859,90861,90863,90865],{"class":36,"line":37},[34,90860,52936],{"class":40},[34,90862,52940],{"class":52939},[34,90864,52943],{"class":3617},[34,90866,52946],{"class":40},[34,90868,90869,90871,90873,90875,90877,90879],{"class":36,"line":165},[34,90870,2701],{"class":40},[34,90872,52274],{"class":52939},[34,90874,52955],{"class":3617},[34,90876,221],{"class":40},[34,90878,52960],{"class":504},[34,90880,52946],{"class":40},[34,90882,90883],{"class":36,"line":171},[34,90884,1475],{"emptyLinePlaceholder":1474},[34,90886,90887,90889,90891],{"class":36,"line":182},[34,90888,2701],{"class":40},[34,90890,52973],{"class":52939},[34,90892,52946],{"class":40},[34,90894,90895,90897,90899,90901,90903,90905],{"class":36,"line":188},[34,90896,53783],{"class":40},[34,90898,52983],{"class":52939},[34,90900,52986],{"class":3617},[34,90902,221],{"class":40},[34,90904,52991],{"class":504},[34,90906,52946],{"class":40},[34,90908,90909,90911,90913,90915,90917,90919,90921,90923,90925],{"class":36,"line":518},[34,90910,53783],{"class":40},[34,90912,52983],{"class":52939},[34,90914,16566],{"class":3617},[34,90916,221],{"class":40},[34,90918,53030],{"class":504},[34,90920,53010],{"class":3617},[34,90922,221],{"class":40},[34,90924,53037],{"class":504},[34,90926,52946],{"class":40},[34,90928,90929,90931,90933,90935,90937],{"class":36,"line":524},[34,90930,53783],{"class":40},[34,90932,53046],{"class":52939},[34,90934,53049],{"class":40},[34,90936,53046],{"class":52939},[34,90938,52946],{"class":40},[34,90940,90941,90943,90945],{"class":36,"line":530},[34,90942,53424],{"class":40},[34,90944,52973],{"class":52939},[34,90946,52946],{"class":40},[34,90948,90949],{"class":36,"line":624},[34,90950,1475],{"emptyLinePlaceholder":1474},[34,90952,90953,90955,90957],{"class":36,"line":630},[34,90954,2701],{"class":40},[34,90956,53439],{"class":52939},[34,90958,52946],{"class":40},[34,90960,90961,90963,90965],{"class":36,"line":636},[34,90962,53783],{"class":40},[34,90964,53452],{"class":52939},[34,90966,52946],{"class":40},[34,90968,90969,90971,90973,90975],{"class":36,"line":1513},[34,90970,12871],{"class":55},[34,90972,71610],{"class":44},[34,90974,56],{"class":55},[34,90976,17218],{"class":40},[34,90978,90979,90981],{"class":36,"line":1519},[34,90980,73265],{"class":40},[34,90982,90983],{"class":44},"18\n",[34,90985,90986],{"class":36,"line":3283},[34,90987,3841],{"class":40},[34,90989,90990],{"class":36,"line":3297},[34,90991,90992],{"class":161},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[34,90994,90995,90997,90999,91001,91003,91005,91007],{"class":36,"line":3302},[34,90996,71723],{"class":55},[34,90998,90486],{"class":3617},[34,91000,286],{"class":40},[34,91002,1046],{"class":51},[34,91004,48],{"class":40},[34,91006,1024],{"class":51},[34,91008,14090],{"class":40},[34,91010,91011,91013,91015,91017,91019],{"class":36,"line":3308},[34,91012,59883],{"class":40},[34,91014,59886],{"class":3617},[34,91016,286],{"class":40},[34,91018,88629],{"class":44},[34,91020,101],{"class":40},[34,91022,91023,91025,91027,91030,91032],{"class":36,"line":3328},[34,91024,59883],{"class":40},[34,91026,59886],{"class":3617},[34,91028,91029],{"class":40},"(x ",[34,91031,2277],{"class":55},[34,91033,91034],{"class":40}," y)\n",[34,91036,91037],{"class":36,"line":3333},[34,91038,3841],{"class":40},[34,91040,91041],{"class":36,"line":3347},[34,91042,91043],{"class":161},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[34,91045,91046,91049,91052,91055,91057,91059,91061],{"class":36,"line":3352},[34,91047,91048],{"class":40},"    fn.",[34,91050,91051],{"class":3617},"apply",[34,91053,91054],{"class":40},"(obj, [",[34,91056,394],{"class":44},[34,91058,48],{"class":40},[34,91060,332],{"class":44},[34,91062,1077],{"class":40},[34,91064,91065],{"class":36,"line":3381},[34,91066,91067],{"class":161},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[34,91069,91070],{"class":36,"line":3386},[34,91071,1475],{"emptyLinePlaceholder":1474},[34,91073,91074],{"class":36,"line":3403},[34,91075,91076],{"class":161},"    \u002F\u002F 使用场景：求数组最大值\n",[34,91078,91079],{"class":36,"line":3408},[34,91080,91081],{"class":161},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[34,91083,91084,91087],{"class":36,"line":3413},[34,91085,91086],{"class":161},"    \u002F\u002F console.log(max)",[34,91088,91089],{"class":161},"   \u002F\u002F3\n",[34,91091,91092],{"class":36,"line":3418},[34,91093,91094],{"class":161},"    \u002F\u002F 指向空或者Math都是可以的\n",[34,91096,91097,91099,91101,91103,91105,91107,91109,91111,91113,91115],{"class":36,"line":3432},[34,91098,12871],{"class":55},[34,91100,59334],{"class":44},[34,91102,56],{"class":55},[34,91104,53865],{"class":40},[34,91106,451],{"class":44},[34,91108,48],{"class":40},[34,91110,2299],{"class":44},[34,91112,48],{"class":40},[34,91114,2330],{"class":44},[34,91116,34887],{"class":40},[34,91118,91119],{"class":36,"line":3437},[34,91120,91121],{"class":161},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[34,91123,91124,91126,91128,91130,91133,91135],{"class":36,"line":4230},[34,91125,12871],{"class":55},[34,91127,7601],{"class":44},[34,91129,56],{"class":55},[34,91131,91132],{"class":40}," Math.max.",[34,91134,91051],{"class":3617},[34,91136,91137],{"class":40},"(Math, arr)\n",[34,91139,91140,91142,91145,91147,91150,91152],{"class":36,"line":4244},[34,91141,12871],{"class":55},[34,91143,91144],{"class":44}," min",[34,91146,56],{"class":55},[34,91148,91149],{"class":40}," Math.min.",[34,91151,91051],{"class":3617},[34,91153,91137],{"class":40},[34,91155,91156,91158,91160,91163],{"class":36,"line":4252},[34,91157,75392],{"class":40},[34,91159,59886],{"class":3617},[34,91161,91162],{"class":40},"(max, min)     ",[34,91164,91165],{"class":161},"\u002F\u002F100,4\n",[34,91167,91168],{"class":36,"line":4257},[34,91169,1475],{"emptyLinePlaceholder":1474},[34,91171,91172],{"class":36,"line":4263},[34,91173,91174],{"class":161},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[34,91176,91177,91179,91181,91184,91186,91188,91191],{"class":36,"line":4269},[34,91178,75392],{"class":40},[34,91180,59886],{"class":3617},[34,91182,91183],{"class":40},"(Max.",[34,91185,7665],{"class":3617},[34,91187,286],{"class":40},[34,91189,91190],{"class":55},"...",[34,91192,91193],{"class":40},"arr))\n",[34,91195,91196,91198,91200],{"class":36,"line":4274},[34,91197,54056],{"class":40},[34,91199,53452],{"class":52939},[34,91201,52946],{"class":40},[34,91203,91204,91206,91208],{"class":36,"line":9598},[34,91205,53424],{"class":40},[34,91207,53439],{"class":52939},[34,91209,52946],{"class":40},[34,91211,91212],{"class":36,"line":9622},[34,91213,1475],{"emptyLinePlaceholder":1474},[34,91215,91216,91218,91220],{"class":36,"line":9627},[34,91217,53424],{"class":40},[34,91219,52274],{"class":52939},[34,91221,52946],{"class":40},[103,91223,91224],{},[109,91225],{"alt":29,"src":91226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[1772,91228,91229],{"start":171},[1775,91230,91231],{},"bind()",[103,91233,91234],{},[109,91235],{"alt":29,"src":91236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[103,91238,91239],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[103,91241,91242],{},"bind的语法跟call很相似",[24,91244,91246],{"className":54706,"code":91245,"language":54708,"meta":29,"style":29},"\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",[31,91247,91248,91256,91264,91268,91273,91277,91281,91286,91290,91295,91300,91305,91310,91315,91320,91325,91329,91337],{"__ignoreMap":29},[34,91249,91250,91252,91254],{"class":36,"line":37},[34,91251,2701],{"class":40},[34,91253,53439],{"class":52939},[34,91255,52946],{"class":40},[34,91257,91258,91260,91262],{"class":36,"line":165},[34,91259,53783],{"class":40},[34,91261,53452],{"class":52939},[34,91263,52946],{"class":40},[34,91265,91266],{"class":36,"line":171},[34,91267,73162],{"class":40},[34,91269,91270],{"class":36,"line":182},[34,91271,91272],{"class":40},"      age: 18\n",[34,91274,91275],{"class":36,"line":188},[34,91276,3841],{"class":40},[34,91278,91279],{"class":36,"line":518},[34,91280,78781],{"class":40},[34,91282,91283],{"class":36,"line":524},[34,91284,91285],{"class":40},"      console.log(this)\n",[34,91287,91288],{"class":36,"line":530},[34,91289,3841],{"class":40},[34,91291,91292],{"class":36,"line":624},[34,91293,91294],{"class":40},"    \u002F\u002F 1.bind 不会调用函数\n",[34,91296,91297],{"class":36,"line":630},[34,91298,91299],{"class":40},"    \u002F\u002F 2.bind能改变this的指向\n",[34,91301,91302],{"class":36,"line":636},[34,91303,91304],{"class":40},"    fn.bind()\n",[34,91306,91307],{"class":36,"line":1513},[34,91308,91309],{"class":40},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[34,91311,91312],{"class":36,"line":1519},[34,91313,91314],{"class":40},"    const fun = fn.bind(obj)\n",[34,91316,91317],{"class":36,"line":3283},[34,91318,91319],{"class":40},"    \u002F\u002F console.log(fun)\n",[34,91321,91322],{"class":36,"line":3297},[34,91323,91324],{"class":40},"    \u002F\u002F 调用,查看this的指向\n",[34,91326,91327],{"class":36,"line":3302},[34,91328,54290],{"class":40},[34,91330,91331,91333,91335],{"class":36,"line":3308},[34,91332,54056],{"class":40},[34,91334,53452],{"class":52939},[34,91336,52946],{"class":40},[34,91338,91339,91341,91343],{"class":36,"line":3328},[34,91340,53424],{"class":40},[34,91342,53439],{"class":52939},[34,91344,52946],{"class":40},[103,91346,91347],{},[109,91348],{"alt":29,"src":91349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[1772,91351,91352],{"start":182},[1775,91353,91354],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[24,91356,91358],{"className":54706,"code":91357,"language":54708,"meta":29,"style":29},"\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",[31,91359,91360,91368,91381,91389,91394,91398,91403,91408,91413,91418,91423,91428,91433,91438,91442,91450],{"__ignoreMap":29},[34,91361,91362,91364,91366],{"class":36,"line":37},[34,91363,2701],{"class":40},[34,91365,53439],{"class":52939},[34,91367,52946],{"class":40},[34,91369,91370,91372,91374,91377,91379],{"class":36,"line":165},[34,91371,53783],{"class":40},[34,91373,55526],{"class":52939},[34,91375,91376],{"class":40},">禁用\u003C\u002F",[34,91378,55526],{"class":52939},[34,91380,52946],{"class":40},[34,91382,91383,91385,91387],{"class":36,"line":171},[34,91384,53783],{"class":40},[34,91386,53452],{"class":52939},[34,91388,52946],{"class":40},[34,91390,91391],{"class":36,"line":182},[34,91392,91393],{"class":40},"    const btn = document.querySelector('button')\n",[34,91395,91396],{"class":36,"line":188},[34,91397,60655],{"class":40},[34,91399,91400],{"class":36,"line":518},[34,91401,91402],{"class":40},"      this.disabled = true\n",[34,91404,91405],{"class":36,"line":524},[34,91406,91407],{"class":40},"      \u002F\u002F 定时器是window进行调用的\n",[34,91409,91410],{"class":36,"line":530},[34,91411,91412],{"class":40},"      setTimeout(function () {\n",[34,91414,91415],{"class":36,"line":624},[34,91416,91417],{"class":40},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[34,91419,91420],{"class":36,"line":630},[34,91421,91422],{"class":40},"        this.disabled = false\n",[34,91424,91425],{"class":36,"line":636},[34,91426,91427],{"class":40},"      }.bind(this), 2000)\n",[34,91429,91430],{"class":36,"line":1513},[34,91431,91432],{"class":40},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[34,91434,91435],{"class":36,"line":1519},[34,91436,91437],{"class":40},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[34,91439,91440],{"class":36,"line":3283},[34,91441,35102],{"class":40},[34,91443,91444,91446,91448],{"class":36,"line":3297},[34,91445,54056],{"class":40},[34,91447,53452],{"class":52939},[34,91449,52946],{"class":40},[34,91451,91452,91454,91456],{"class":36,"line":3302},[34,91453,53424],{"class":40},[34,91455,53439],{"class":52939},[34,91457,52946],{"class":40},[1772,91459,91460],{"start":188},[1775,91461,23599],{},[103,91463,91464],{},[109,91465],{"alt":29,"src":91466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91468,91470],{"id":91469},"_417-性能优化","4.17 性能优化",[19,91472,91474],{"id":91473},"_4171-防抖","4.17.1 防抖",[103,91476,91477],{},[109,91478],{"alt":29,"src":91479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[103,91481,91482],{},[1165,91483,91484],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[103,91486,91487],{},"防抖实现方式：",[2798,91489,91490],{},[1775,91491,91492],{},"lodash 提供了防抖处理",[103,91494,91495],{},"_.debounce(func,[wait=0],[options={}])",[103,91497,91498],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[24,91500,91502],{"className":52272,"code":91501,"language":52274,"meta":29,"style":29},"\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",[31,91503,91504,91514,91528,91532,91540,91554,91574,91586,91594,91600,91610,91622,91634,91645,91657,91667,91677,91690,91694,91702,91710,91714,91722,91740,91758,91766,91785,91795,91804,91815,91820,91824,91829,91834,91839,91864,91872,91880,91884],{"__ignoreMap":29},[34,91505,91506,91508,91510,91512],{"class":36,"line":37},[34,91507,52936],{"class":40},[34,91509,52940],{"class":52939},[34,91511,52943],{"class":3617},[34,91513,52946],{"class":40},[34,91515,91516,91518,91520,91522,91524,91526],{"class":36,"line":165},[34,91517,2701],{"class":40},[34,91519,52274],{"class":52939},[34,91521,52955],{"class":3617},[34,91523,221],{"class":40},[34,91525,52960],{"class":504},[34,91527,52946],{"class":40},[34,91529,91530],{"class":36,"line":171},[34,91531,1475],{"emptyLinePlaceholder":1474},[34,91533,91534,91536,91538],{"class":36,"line":182},[34,91535,2701],{"class":40},[34,91537,52973],{"class":52939},[34,91539,52946],{"class":40},[34,91541,91542,91544,91546,91548,91550,91552],{"class":36,"line":188},[34,91543,53783],{"class":40},[34,91545,52983],{"class":52939},[34,91547,52986],{"class":3617},[34,91549,221],{"class":40},[34,91551,52991],{"class":504},[34,91553,52946],{"class":40},[34,91555,91556,91558,91560,91562,91564,91566,91568,91570,91572],{"class":36,"line":518},[34,91557,53783],{"class":40},[34,91559,52983],{"class":52939},[34,91561,16566],{"class":3617},[34,91563,221],{"class":40},[34,91565,53030],{"class":504},[34,91567,53010],{"class":3617},[34,91569,221],{"class":40},[34,91571,53037],{"class":504},[34,91573,52946],{"class":40},[34,91575,91576,91578,91580,91582,91584],{"class":36,"line":524},[34,91577,53783],{"class":40},[34,91579,53046],{"class":52939},[34,91581,53049],{"class":40},[34,91583,53046],{"class":52939},[34,91585,52946],{"class":40},[34,91587,91588,91590,91592],{"class":36,"line":530},[34,91589,53783],{"class":40},[34,91591,1711],{"class":52939},[34,91593,52946],{"class":40},[34,91595,91596,91598],{"class":36,"line":624},[34,91597,56391],{"class":3617},[34,91599,17218],{"class":40},[34,91601,91602,91604,91606,91608],{"class":36,"line":630},[34,91603,74235],{"class":44},[34,91605,53076],{"class":40},[34,91607,62144],{"class":44},[34,91609,2952],{"class":40},[34,91611,91612,91614,91616,91618,91620],{"class":36,"line":636},[34,91613,56410],{"class":44},[34,91615,53076],{"class":40},[34,91617,3376],{"class":44},[34,91619,53131],{"class":55},[34,91621,2952],{"class":40},[34,91623,91624,91626,91628,91630,91632],{"class":36,"line":1513},[34,91625,56424],{"class":44},[34,91627,53076],{"class":40},[34,91629,3376],{"class":44},[34,91631,53131],{"class":55},[34,91633,2952],{"class":40},[34,91635,91636,91638,91640,91643],{"class":36,"line":1519},[34,91637,56523],{"class":44},[34,91639,53076],{"class":40},[34,91641,91642],{"class":44},"gray",[34,91644,2952],{"class":40},[34,91646,91647,91649,91651,91653,91655],{"class":36,"line":3283},[34,91648,56561],{"class":44},[34,91650,53076],{"class":40},[34,91652,2617],{"class":44},[34,91654,53131],{"class":55},[34,91656,2952],{"class":40},[34,91658,91659,91661,91663,91665],{"class":36,"line":3297},[34,91660,59055],{"class":44},[34,91662,53076],{"class":40},[34,91664,62481],{"class":44},[34,91666,2952],{"class":40},[34,91668,91669,91671,91673,91675],{"class":36,"line":3302},[34,91670,58925],{"class":44},[34,91672,53076],{"class":40},[34,91674,53231],{"class":44},[34,91676,2952],{"class":40},[34,91678,91679,91682,91684,91686,91688],{"class":36,"line":3308},[34,91680,91681],{"class":44},"      padding-top",[34,91683,53076],{"class":40},[34,91685,224],{"class":44},[34,91687,53131],{"class":55},[34,91689,2952],{"class":40},[34,91691,91692],{"class":36,"line":3328},[34,91693,3841],{"class":40},[34,91695,91696,91698,91700],{"class":36,"line":3333},[34,91697,54056],{"class":40},[34,91699,1711],{"class":52939},[34,91701,52946],{"class":40},[34,91703,91704,91706,91708],{"class":36,"line":3347},[34,91705,53424],{"class":40},[34,91707,52973],{"class":52939},[34,91709,52946],{"class":40},[34,91711,91712],{"class":36,"line":3352},[34,91713,1475],{"emptyLinePlaceholder":1474},[34,91715,91716,91718,91720],{"class":36,"line":3381},[34,91717,2701],{"class":40},[34,91719,53439],{"class":52939},[34,91721,52946],{"class":40},[34,91723,91724,91726,91728,91730,91732,91734,91736,91738],{"class":36,"line":3386},[34,91725,53783],{"class":40},[34,91727,53250],{"class":52939},[34,91729,55125],{"class":3617},[34,91731,221],{"class":40},[34,91733,55130],{"class":504},[34,91735,56953],{"class":40},[34,91737,53250],{"class":52939},[34,91739,52946],{"class":40},[34,91741,91742,91744,91746,91748,91750,91752,91754,91756],{"class":36,"line":3403},[34,91743,53783],{"class":40},[34,91745,53452],{"class":52939},[34,91747,56878],{"class":3617},[34,91749,221],{"class":40},[34,91751,89910],{"class":504},[34,91753,56953],{"class":40},[34,91755,53452],{"class":52939},[34,91757,52946],{"class":40},[34,91759,91760,91762,91764],{"class":36,"line":3408},[34,91761,53783],{"class":40},[34,91763,53452],{"class":52939},[34,91765,52946],{"class":40},[34,91767,91768,91770,91772,91774,91776,91778,91780,91783],{"class":36,"line":3413},[34,91769,12871],{"class":55},[34,91771,88569],{"class":44},[34,91773,56],{"class":55},[34,91775,56035],{"class":40},[34,91777,56038],{"class":3617},[34,91779,286],{"class":40},[34,91781,91782],{"class":504},"'.box'",[34,91784,101],{"class":40},[34,91786,91787,91789,91791,91793],{"class":36,"line":3418},[34,91788,53858],{"class":55},[34,91790,11088],{"class":40},[34,91792,221],{"class":55},[34,91794,48972],{"class":44},[34,91796,91797,91799,91802],{"class":36,"line":3432},[34,91798,71723],{"class":55},[34,91800,91801],{"class":3617}," mouseMove",[34,91803,12503],{"class":40},[34,91805,91806,91809,91811,91813],{"class":36,"line":3437},[34,91807,91808],{"class":40},"      box.innerHTML ",[34,91810,221],{"class":55},[34,91812,4685],{"class":40},[34,91814,4355],{"class":55},[34,91816,91817],{"class":36,"line":4230},[34,91818,91819],{"class":161},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[34,91821,91822],{"class":36,"line":4244},[34,91823,3841],{"class":40},[34,91825,91826],{"class":36,"line":4252},[34,91827,91828],{"class":161},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[34,91830,91831],{"class":36,"line":4257},[34,91832,91833],{"class":161},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[34,91835,91836],{"class":36,"line":4263},[34,91837,91838],{"class":161},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[34,91840,91841,91844,91846,91848,91851,91854,91857,91860,91862],{"class":36,"line":4269},[34,91842,91843],{"class":40},"    box.",[34,91845,59452],{"class":3617},[34,91847,286],{"class":40},[34,91849,91850],{"class":504},"'mousemove'",[34,91852,91853],{"class":40},", _.",[34,91855,91856],{"class":3617},"debounce",[34,91858,91859],{"class":40},"(mouseMove, ",[34,91861,66713],{"class":44},[34,91863,296],{"class":40},[34,91865,91866,91868,91870],{"class":36,"line":4274},[34,91867,54056],{"class":40},[34,91869,53452],{"class":52939},[34,91871,52946],{"class":40},[34,91873,91874,91876,91878],{"class":36,"line":9598},[34,91875,53424],{"class":40},[34,91877,53439],{"class":52939},[34,91879,52946],{"class":40},[34,91881,91882],{"class":36,"line":9622},[34,91883,1475],{"emptyLinePlaceholder":1474},[34,91885,91886,91888,91890],{"class":36,"line":9627},[34,91887,53424],{"class":40},[34,91889,52274],{"class":52939},[34,91891,52946],{"class":40},[2798,91893,91894],{},[1775,91895,91896],{},"手写一个防抖函数来处理",[103,91898,91899],{},"防抖的核心就是利用定时器来实现的：",[103,91901,91902],{},"①声明一个定时器变量",[103,91904,91905],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[103,91907,91908],{},"③如果没有定时器则开启定时器，记得存到变量里面",[24,91910,91912],{"className":52272,"code":91911,"language":52274,"meta":29,"style":29},"\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",[31,91913,91914,91924,91938,91942,91950,91964,91984,91996,92004,92010,92020,92032,92044,92054,92066,92076,92086,92098,92102,92110,92118,92122,92130,92148,92166,92174,92192,92202,92210,92220,92224,92228,92232,92237,92242,92247,92252,92257,92262,92280,92287,92292,92300,92305,92318,92334,92344,92349,92353,92357,92377,92381,92386,92391,92396,92401,92409,92417,92421],{"__ignoreMap":29},[34,91915,91916,91918,91920,91922],{"class":36,"line":37},[34,91917,52936],{"class":40},[34,91919,52940],{"class":52939},[34,91921,52943],{"class":3617},[34,91923,52946],{"class":40},[34,91925,91926,91928,91930,91932,91934,91936],{"class":36,"line":165},[34,91927,2701],{"class":40},[34,91929,52274],{"class":52939},[34,91931,52955],{"class":3617},[34,91933,221],{"class":40},[34,91935,52960],{"class":504},[34,91937,52946],{"class":40},[34,91939,91940],{"class":36,"line":171},[34,91941,1475],{"emptyLinePlaceholder":1474},[34,91943,91944,91946,91948],{"class":36,"line":182},[34,91945,2701],{"class":40},[34,91947,52973],{"class":52939},[34,91949,52946],{"class":40},[34,91951,91952,91954,91956,91958,91960,91962],{"class":36,"line":188},[34,91953,53783],{"class":40},[34,91955,52983],{"class":52939},[34,91957,52986],{"class":3617},[34,91959,221],{"class":40},[34,91961,52991],{"class":504},[34,91963,52946],{"class":40},[34,91965,91966,91968,91970,91972,91974,91976,91978,91980,91982],{"class":36,"line":518},[34,91967,53783],{"class":40},[34,91969,52983],{"class":52939},[34,91971,16566],{"class":3617},[34,91973,221],{"class":40},[34,91975,53030],{"class":504},[34,91977,53010],{"class":3617},[34,91979,221],{"class":40},[34,91981,53037],{"class":504},[34,91983,52946],{"class":40},[34,91985,91986,91988,91990,91992,91994],{"class":36,"line":524},[34,91987,53783],{"class":40},[34,91989,53046],{"class":52939},[34,91991,53049],{"class":40},[34,91993,53046],{"class":52939},[34,91995,52946],{"class":40},[34,91997,91998,92000,92002],{"class":36,"line":530},[34,91999,53783],{"class":40},[34,92001,1711],{"class":52939},[34,92003,52946],{"class":40},[34,92005,92006,92008],{"class":36,"line":624},[34,92007,56391],{"class":3617},[34,92009,17218],{"class":40},[34,92011,92012,92014,92016,92018],{"class":36,"line":630},[34,92013,74235],{"class":44},[34,92015,53076],{"class":40},[34,92017,62144],{"class":44},[34,92019,2952],{"class":40},[34,92021,92022,92024,92026,92028,92030],{"class":36,"line":636},[34,92023,56410],{"class":44},[34,92025,53076],{"class":40},[34,92027,3376],{"class":44},[34,92029,53131],{"class":55},[34,92031,2952],{"class":40},[34,92033,92034,92036,92038,92040,92042],{"class":36,"line":1513},[34,92035,56424],{"class":44},[34,92037,53076],{"class":40},[34,92039,3376],{"class":44},[34,92041,53131],{"class":55},[34,92043,2952],{"class":40},[34,92045,92046,92048,92050,92052],{"class":36,"line":1519},[34,92047,56523],{"class":44},[34,92049,53076],{"class":40},[34,92051,91642],{"class":44},[34,92053,2952],{"class":40},[34,92055,92056,92058,92060,92062,92064],{"class":36,"line":3283},[34,92057,56561],{"class":44},[34,92059,53076],{"class":40},[34,92061,2617],{"class":44},[34,92063,53131],{"class":55},[34,92065,2952],{"class":40},[34,92067,92068,92070,92072,92074],{"class":36,"line":3297},[34,92069,59055],{"class":44},[34,92071,53076],{"class":40},[34,92073,62481],{"class":44},[34,92075,2952],{"class":40},[34,92077,92078,92080,92082,92084],{"class":36,"line":3302},[34,92079,58925],{"class":44},[34,92081,53076],{"class":40},[34,92083,53231],{"class":44},[34,92085,2952],{"class":40},[34,92087,92088,92090,92092,92094,92096],{"class":36,"line":3308},[34,92089,91681],{"class":44},[34,92091,53076],{"class":40},[34,92093,224],{"class":44},[34,92095,53131],{"class":55},[34,92097,2952],{"class":40},[34,92099,92100],{"class":36,"line":3328},[34,92101,3841],{"class":40},[34,92103,92104,92106,92108],{"class":36,"line":3333},[34,92105,54056],{"class":40},[34,92107,1711],{"class":52939},[34,92109,52946],{"class":40},[34,92111,92112,92114,92116],{"class":36,"line":3347},[34,92113,53424],{"class":40},[34,92115,52973],{"class":52939},[34,92117,52946],{"class":40},[34,92119,92120],{"class":36,"line":3352},[34,92121,1475],{"emptyLinePlaceholder":1474},[34,92123,92124,92126,92128],{"class":36,"line":3381},[34,92125,2701],{"class":40},[34,92127,53439],{"class":52939},[34,92129,52946],{"class":40},[34,92131,92132,92134,92136,92138,92140,92142,92144,92146],{"class":36,"line":3386},[34,92133,53783],{"class":40},[34,92135,53250],{"class":52939},[34,92137,55125],{"class":3617},[34,92139,221],{"class":40},[34,92141,55130],{"class":504},[34,92143,56953],{"class":40},[34,92145,53250],{"class":52939},[34,92147,52946],{"class":40},[34,92149,92150,92152,92154,92156,92158,92160,92162,92164],{"class":36,"line":3403},[34,92151,53783],{"class":40},[34,92153,53452],{"class":52939},[34,92155,56878],{"class":3617},[34,92157,221],{"class":40},[34,92159,89910],{"class":504},[34,92161,56953],{"class":40},[34,92163,53452],{"class":52939},[34,92165,52946],{"class":40},[34,92167,92168,92170,92172],{"class":36,"line":3408},[34,92169,53783],{"class":40},[34,92171,53452],{"class":52939},[34,92173,52946],{"class":40},[34,92175,92176,92178,92180,92182,92184,92186,92188,92190],{"class":36,"line":3413},[34,92177,12871],{"class":55},[34,92179,88569],{"class":44},[34,92181,56],{"class":55},[34,92183,56035],{"class":40},[34,92185,56038],{"class":3617},[34,92187,286],{"class":40},[34,92189,91782],{"class":504},[34,92191,101],{"class":40},[34,92193,92194,92196,92198,92200],{"class":36,"line":3418},[34,92195,53858],{"class":55},[34,92197,11088],{"class":40},[34,92199,221],{"class":55},[34,92201,48972],{"class":44},[34,92203,92204,92206,92208],{"class":36,"line":3432},[34,92205,71723],{"class":55},[34,92207,91801],{"class":3617},[34,92209,12503],{"class":40},[34,92211,92212,92214,92216,92218],{"class":36,"line":3437},[34,92213,91808],{"class":40},[34,92215,221],{"class":55},[34,92217,4685],{"class":40},[34,92219,4355],{"class":55},[34,92221,92222],{"class":36,"line":4230},[34,92223,91819],{"class":161},[34,92225,92226],{"class":36,"line":4244},[34,92227,3841],{"class":40},[34,92229,92230],{"class":36,"line":4252},[34,92231,91828],{"class":161},[34,92233,92234],{"class":36,"line":4257},[34,92235,92236],{"class":161},"    \u002F\u002F 手写防抖函数\n",[34,92238,92239],{"class":36,"line":4263},[34,92240,92241],{"class":161},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[34,92243,92244],{"class":36,"line":4269},[34,92245,92246],{"class":161},"    \u002F\u002F 1.声明定时器变量\n",[34,92248,92249],{"class":36,"line":4274},[34,92250,92251],{"class":161},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[34,92253,92254],{"class":36,"line":9598},[34,92255,92256],{"class":161},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[34,92258,92259],{"class":36,"line":9622},[34,92260,92261],{"class":161},"    \u002F\u002F 4.定时器里面写函数调用\n",[34,92263,92264,92266,92269,92271,92274,92276,92278],{"class":36,"line":9627},[34,92265,71723],{"class":55},[34,92267,92268],{"class":3617}," debounce",[34,92270,286],{"class":40},[34,92272,92273],{"class":51},"fn",[34,92275,48],{"class":40},[34,92277,2514],{"class":51},[34,92279,14090],{"class":40},[34,92281,92282,92284],{"class":36,"line":9633},[34,92283,81409],{"class":55},[34,92285,92286],{"class":40}," timer\n",[34,92288,92289],{"class":36,"line":9660},[34,92290,92291],{"class":161},"      \u002F\u002F return 返回一个匿名函数\n",[34,92293,92294,92296,92298],{"class":36,"line":9665},[34,92295,75621],{"class":55},[34,92297,60557],{"class":55},[34,92299,56091],{"class":40},[34,92301,92302],{"class":36,"line":9671},[34,92303,92304],{"class":161},"        \u002F\u002F 这里边写第二三四步\n",[34,92306,92307,92309,92312,92315],{"class":36,"line":9683},[34,92308,4150],{"class":55},[34,92310,92311],{"class":40}," (timer) ",[34,92313,92314],{"class":3617},"clearTimeout",[34,92316,92317],{"class":40},"(timer)\n",[34,92319,92320,92323,92325,92328,92330,92332],{"class":36,"line":9695},[34,92321,92322],{"class":40},"        timer ",[34,92324,221],{"class":55},[34,92326,92327],{"class":3617}," setTimeout",[34,92329,286],{"class":40},[34,92331,56088],{"class":55},[34,92333,56091],{"class":40},[34,92335,92336,92339,92341],{"class":36,"line":9707},[34,92337,92338],{"class":3617},"          fn",[34,92340,14698],{"class":40},[34,92342,92343],{"class":161},"\u002F\u002F加小括号调用fn }, t)\n",[34,92345,92346],{"class":36,"line":11366},[34,92347,92348],{"class":40},"        }, t)\n",[34,92350,92351],{"class":36,"line":11391},[34,92352,54037],{"class":40},[34,92354,92355],{"class":36,"line":11414},[34,92356,3841],{"class":40},[34,92358,92359,92361,92363,92365,92367,92369,92371,92373,92375],{"class":36,"line":11438},[34,92360,91843],{"class":40},[34,92362,59452],{"class":3617},[34,92364,286],{"class":40},[34,92366,91850],{"class":504},[34,92368,48],{"class":40},[34,92370,91856],{"class":3617},[34,92372,91859],{"class":40},[34,92374,66713],{"class":44},[34,92376,296],{"class":40},[34,92378,92379],{"class":36,"line":11443},[34,92380,1475],{"emptyLinePlaceholder":1474},[34,92382,92383],{"class":36,"line":11448},[34,92384,92385],{"class":161},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[34,92387,92388],{"class":36,"line":11453},[34,92389,92390],{"class":161},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[34,92392,92393],{"class":36,"line":11462},[34,92394,92395],{"class":161},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[34,92397,92398],{"class":36,"line":11467},[34,92399,92400],{"class":161},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[34,92402,92403,92405,92407],{"class":36,"line":11473},[34,92404,54056],{"class":40},[34,92406,53452],{"class":52939},[34,92408,52946],{"class":40},[34,92410,92411,92413,92415],{"class":36,"line":11494},[34,92412,53424],{"class":40},[34,92414,53439],{"class":52939},[34,92416,52946],{"class":40},[34,92418,92419],{"class":36,"line":11500},[34,92420,1475],{"emptyLinePlaceholder":1474},[34,92422,92423,92425,92427],{"class":36,"line":11514},[34,92424,53424],{"class":40},[34,92426,52274],{"class":52939},[34,92428,52946],{"class":40},[19,92430,92432],{"id":92431},"_4172-节流","4.17.2 节流",[103,92434,92435],{},[109,92436],{"alt":29,"src":92437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[103,92439,92440],{},[109,92441],{"alt":29,"src":92442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[103,92444,92445],{},[1165,92446,92447],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[103,92449,92450],{},"实现方式：",[2798,92452,92453],{},[1775,92454,92455],{},"lodash 提供的节流函数来处理",[103,92457,92458],{},"_.throttle(func,[wait=0],[options=])",[103,92460,92461],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[24,92463,92465],{"className":52272,"code":92464,"language":52274,"meta":29,"style":29},"\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",[31,92466,92467,92477,92491,92495,92503,92517,92537,92549,92557,92563,92573,92585,92597,92607,92619,92629,92639,92651,92655,92663,92671,92675,92683,92701,92719,92727,92745,92755,92763,92773,92777,92781,92785,92790,92795,92816,92824,92832,92836],{"__ignoreMap":29},[34,92468,92469,92471,92473,92475],{"class":36,"line":37},[34,92470,52936],{"class":40},[34,92472,52940],{"class":52939},[34,92474,52943],{"class":3617},[34,92476,52946],{"class":40},[34,92478,92479,92481,92483,92485,92487,92489],{"class":36,"line":165},[34,92480,2701],{"class":40},[34,92482,52274],{"class":52939},[34,92484,52955],{"class":3617},[34,92486,221],{"class":40},[34,92488,52960],{"class":504},[34,92490,52946],{"class":40},[34,92492,92493],{"class":36,"line":171},[34,92494,1475],{"emptyLinePlaceholder":1474},[34,92496,92497,92499,92501],{"class":36,"line":182},[34,92498,2701],{"class":40},[34,92500,52973],{"class":52939},[34,92502,52946],{"class":40},[34,92504,92505,92507,92509,92511,92513,92515],{"class":36,"line":188},[34,92506,53783],{"class":40},[34,92508,52983],{"class":52939},[34,92510,52986],{"class":3617},[34,92512,221],{"class":40},[34,92514,52991],{"class":504},[34,92516,52946],{"class":40},[34,92518,92519,92521,92523,92525,92527,92529,92531,92533,92535],{"class":36,"line":518},[34,92520,53783],{"class":40},[34,92522,52983],{"class":52939},[34,92524,16566],{"class":3617},[34,92526,221],{"class":40},[34,92528,53030],{"class":504},[34,92530,53010],{"class":3617},[34,92532,221],{"class":40},[34,92534,53037],{"class":504},[34,92536,52946],{"class":40},[34,92538,92539,92541,92543,92545,92547],{"class":36,"line":524},[34,92540,53783],{"class":40},[34,92542,53046],{"class":52939},[34,92544,53049],{"class":40},[34,92546,53046],{"class":52939},[34,92548,52946],{"class":40},[34,92550,92551,92553,92555],{"class":36,"line":530},[34,92552,53783],{"class":40},[34,92554,1711],{"class":52939},[34,92556,52946],{"class":40},[34,92558,92559,92561],{"class":36,"line":624},[34,92560,56391],{"class":3617},[34,92562,17218],{"class":40},[34,92564,92565,92567,92569,92571],{"class":36,"line":630},[34,92566,74235],{"class":44},[34,92568,53076],{"class":40},[34,92570,62144],{"class":44},[34,92572,2952],{"class":40},[34,92574,92575,92577,92579,92581,92583],{"class":36,"line":636},[34,92576,56410],{"class":44},[34,92578,53076],{"class":40},[34,92580,3376],{"class":44},[34,92582,53131],{"class":55},[34,92584,2952],{"class":40},[34,92586,92587,92589,92591,92593,92595],{"class":36,"line":1513},[34,92588,56424],{"class":44},[34,92590,53076],{"class":40},[34,92592,3376],{"class":44},[34,92594,53131],{"class":55},[34,92596,2952],{"class":40},[34,92598,92599,92601,92603,92605],{"class":36,"line":1519},[34,92600,56523],{"class":44},[34,92602,53076],{"class":40},[34,92604,91642],{"class":44},[34,92606,2952],{"class":40},[34,92608,92609,92611,92613,92615,92617],{"class":36,"line":3283},[34,92610,56561],{"class":44},[34,92612,53076],{"class":40},[34,92614,2617],{"class":44},[34,92616,53131],{"class":55},[34,92618,2952],{"class":40},[34,92620,92621,92623,92625,92627],{"class":36,"line":3297},[34,92622,59055],{"class":44},[34,92624,53076],{"class":40},[34,92626,62481],{"class":44},[34,92628,2952],{"class":40},[34,92630,92631,92633,92635,92637],{"class":36,"line":3302},[34,92632,58925],{"class":44},[34,92634,53076],{"class":40},[34,92636,53231],{"class":44},[34,92638,2952],{"class":40},[34,92640,92641,92643,92645,92647,92649],{"class":36,"line":3308},[34,92642,91681],{"class":44},[34,92644,53076],{"class":40},[34,92646,224],{"class":44},[34,92648,53131],{"class":55},[34,92650,2952],{"class":40},[34,92652,92653],{"class":36,"line":3328},[34,92654,3841],{"class":40},[34,92656,92657,92659,92661],{"class":36,"line":3333},[34,92658,54056],{"class":40},[34,92660,1711],{"class":52939},[34,92662,52946],{"class":40},[34,92664,92665,92667,92669],{"class":36,"line":3347},[34,92666,53424],{"class":40},[34,92668,52973],{"class":52939},[34,92670,52946],{"class":40},[34,92672,92673],{"class":36,"line":3352},[34,92674,1475],{"emptyLinePlaceholder":1474},[34,92676,92677,92679,92681],{"class":36,"line":3381},[34,92678,2701],{"class":40},[34,92680,53439],{"class":52939},[34,92682,52946],{"class":40},[34,92684,92685,92687,92689,92691,92693,92695,92697,92699],{"class":36,"line":3386},[34,92686,53783],{"class":40},[34,92688,53250],{"class":52939},[34,92690,55125],{"class":3617},[34,92692,221],{"class":40},[34,92694,55130],{"class":504},[34,92696,56953],{"class":40},[34,92698,53250],{"class":52939},[34,92700,52946],{"class":40},[34,92702,92703,92705,92707,92709,92711,92713,92715,92717],{"class":36,"line":3403},[34,92704,53783],{"class":40},[34,92706,53452],{"class":52939},[34,92708,56878],{"class":3617},[34,92710,221],{"class":40},[34,92712,89910],{"class":504},[34,92714,56953],{"class":40},[34,92716,53452],{"class":52939},[34,92718,52946],{"class":40},[34,92720,92721,92723,92725],{"class":36,"line":3408},[34,92722,53783],{"class":40},[34,92724,53452],{"class":52939},[34,92726,52946],{"class":40},[34,92728,92729,92731,92733,92735,92737,92739,92741,92743],{"class":36,"line":3413},[34,92730,12871],{"class":55},[34,92732,88569],{"class":44},[34,92734,56],{"class":55},[34,92736,56035],{"class":40},[34,92738,56038],{"class":3617},[34,92740,286],{"class":40},[34,92742,91782],{"class":504},[34,92744,101],{"class":40},[34,92746,92747,92749,92751,92753],{"class":36,"line":3418},[34,92748,53858],{"class":55},[34,92750,11088],{"class":40},[34,92752,221],{"class":55},[34,92754,48972],{"class":44},[34,92756,92757,92759,92761],{"class":36,"line":3432},[34,92758,71723],{"class":55},[34,92760,91801],{"class":3617},[34,92762,12503],{"class":40},[34,92764,92765,92767,92769,92771],{"class":36,"line":3437},[34,92766,91808],{"class":40},[34,92768,221],{"class":55},[34,92770,4685],{"class":40},[34,92772,4355],{"class":55},[34,92774,92775],{"class":36,"line":4230},[34,92776,91819],{"class":161},[34,92778,92779],{"class":36,"line":4244},[34,92780,3841],{"class":40},[34,92782,92783],{"class":36,"line":4252},[34,92784,91828],{"class":161},[34,92786,92787],{"class":36,"line":4257},[34,92788,92789],{"class":161},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[34,92791,92792],{"class":36,"line":4263},[34,92793,92794],{"class":161},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[34,92796,92797,92799,92801,92803,92805,92807,92810,92812,92814],{"class":36,"line":4269},[34,92798,91843],{"class":40},[34,92800,59452],{"class":3617},[34,92802,286],{"class":40},[34,92804,91850],{"class":504},[34,92806,91853],{"class":40},[34,92808,92809],{"class":3617},"throttle",[34,92811,91859],{"class":40},[34,92813,66713],{"class":44},[34,92815,296],{"class":40},[34,92817,92818,92820,92822],{"class":36,"line":4274},[34,92819,54056],{"class":40},[34,92821,53452],{"class":52939},[34,92823,52946],{"class":40},[34,92825,92826,92828,92830],{"class":36,"line":9598},[34,92827,53424],{"class":40},[34,92829,53439],{"class":52939},[34,92831,52946],{"class":40},[34,92833,92834],{"class":36,"line":9622},[34,92835,1475],{"emptyLinePlaceholder":1474},[34,92837,92838,92840,92842],{"class":36,"line":9627},[34,92839,53424],{"class":40},[34,92841,52274],{"class":52939},[34,92843,52946],{"class":40},[2798,92845,92846],{},[1775,92847,92848],{},"手写一个节流函数来处理",[103,92850,72591],{},[103,92852,91902],{},[103,92854,92855],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[103,92857,92858],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[24,92860,92862],{"className":52272,"code":92861,"language":52274,"meta":29,"style":29},"\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",[31,92863,92864,92874,92888,92892,92900,92914,92934,92946,92954,92960,92970,92982,92994,93004,93016,93026,93036,93048,93052,93060,93068,93072,93080,93098,93116,93124,93142,93152,93160,93170,93174,93178,93182,93187,93192,93197,93202,93207,93212,93229,93235,93243,93254,93269,93276,93281,93286,93296,93301,93306,93311,93315,93319,93323,93343,93351,93359,93363],{"__ignoreMap":29},[34,92865,92866,92868,92870,92872],{"class":36,"line":37},[34,92867,52936],{"class":40},[34,92869,52940],{"class":52939},[34,92871,52943],{"class":3617},[34,92873,52946],{"class":40},[34,92875,92876,92878,92880,92882,92884,92886],{"class":36,"line":165},[34,92877,2701],{"class":40},[34,92879,52274],{"class":52939},[34,92881,52955],{"class":3617},[34,92883,221],{"class":40},[34,92885,52960],{"class":504},[34,92887,52946],{"class":40},[34,92889,92890],{"class":36,"line":171},[34,92891,1475],{"emptyLinePlaceholder":1474},[34,92893,92894,92896,92898],{"class":36,"line":182},[34,92895,2701],{"class":40},[34,92897,52973],{"class":52939},[34,92899,52946],{"class":40},[34,92901,92902,92904,92906,92908,92910,92912],{"class":36,"line":188},[34,92903,53783],{"class":40},[34,92905,52983],{"class":52939},[34,92907,52986],{"class":3617},[34,92909,221],{"class":40},[34,92911,52991],{"class":504},[34,92913,52946],{"class":40},[34,92915,92916,92918,92920,92922,92924,92926,92928,92930,92932],{"class":36,"line":518},[34,92917,53783],{"class":40},[34,92919,52983],{"class":52939},[34,92921,16566],{"class":3617},[34,92923,221],{"class":40},[34,92925,53030],{"class":504},[34,92927,53010],{"class":3617},[34,92929,221],{"class":40},[34,92931,53037],{"class":504},[34,92933,52946],{"class":40},[34,92935,92936,92938,92940,92942,92944],{"class":36,"line":524},[34,92937,53783],{"class":40},[34,92939,53046],{"class":52939},[34,92941,53049],{"class":40},[34,92943,53046],{"class":52939},[34,92945,52946],{"class":40},[34,92947,92948,92950,92952],{"class":36,"line":530},[34,92949,53783],{"class":40},[34,92951,1711],{"class":52939},[34,92953,52946],{"class":40},[34,92955,92956,92958],{"class":36,"line":624},[34,92957,56391],{"class":3617},[34,92959,17218],{"class":40},[34,92961,92962,92964,92966,92968],{"class":36,"line":630},[34,92963,74235],{"class":44},[34,92965,53076],{"class":40},[34,92967,62144],{"class":44},[34,92969,2952],{"class":40},[34,92971,92972,92974,92976,92978,92980],{"class":36,"line":636},[34,92973,56410],{"class":44},[34,92975,53076],{"class":40},[34,92977,3376],{"class":44},[34,92979,53131],{"class":55},[34,92981,2952],{"class":40},[34,92983,92984,92986,92988,92990,92992],{"class":36,"line":1513},[34,92985,56424],{"class":44},[34,92987,53076],{"class":40},[34,92989,3376],{"class":44},[34,92991,53131],{"class":55},[34,92993,2952],{"class":40},[34,92995,92996,92998,93000,93002],{"class":36,"line":1519},[34,92997,56523],{"class":44},[34,92999,53076],{"class":40},[34,93001,91642],{"class":44},[34,93003,2952],{"class":40},[34,93005,93006,93008,93010,93012,93014],{"class":36,"line":3283},[34,93007,56561],{"class":44},[34,93009,53076],{"class":40},[34,93011,2617],{"class":44},[34,93013,53131],{"class":55},[34,93015,2952],{"class":40},[34,93017,93018,93020,93022,93024],{"class":36,"line":3297},[34,93019,59055],{"class":44},[34,93021,53076],{"class":40},[34,93023,62481],{"class":44},[34,93025,2952],{"class":40},[34,93027,93028,93030,93032,93034],{"class":36,"line":3302},[34,93029,58925],{"class":44},[34,93031,53076],{"class":40},[34,93033,53231],{"class":44},[34,93035,2952],{"class":40},[34,93037,93038,93040,93042,93044,93046],{"class":36,"line":3308},[34,93039,91681],{"class":44},[34,93041,53076],{"class":40},[34,93043,224],{"class":44},[34,93045,53131],{"class":55},[34,93047,2952],{"class":40},[34,93049,93050],{"class":36,"line":3328},[34,93051,3841],{"class":40},[34,93053,93054,93056,93058],{"class":36,"line":3333},[34,93055,54056],{"class":40},[34,93057,1711],{"class":52939},[34,93059,52946],{"class":40},[34,93061,93062,93064,93066],{"class":36,"line":3347},[34,93063,53424],{"class":40},[34,93065,52973],{"class":52939},[34,93067,52946],{"class":40},[34,93069,93070],{"class":36,"line":3352},[34,93071,1475],{"emptyLinePlaceholder":1474},[34,93073,93074,93076,93078],{"class":36,"line":3381},[34,93075,2701],{"class":40},[34,93077,53439],{"class":52939},[34,93079,52946],{"class":40},[34,93081,93082,93084,93086,93088,93090,93092,93094,93096],{"class":36,"line":3386},[34,93083,53783],{"class":40},[34,93085,53250],{"class":52939},[34,93087,55125],{"class":3617},[34,93089,221],{"class":40},[34,93091,55130],{"class":504},[34,93093,56953],{"class":40},[34,93095,53250],{"class":52939},[34,93097,52946],{"class":40},[34,93099,93100,93102,93104,93106,93108,93110,93112,93114],{"class":36,"line":3403},[34,93101,53783],{"class":40},[34,93103,53452],{"class":52939},[34,93105,56878],{"class":3617},[34,93107,221],{"class":40},[34,93109,89910],{"class":504},[34,93111,56953],{"class":40},[34,93113,53452],{"class":52939},[34,93115,52946],{"class":40},[34,93117,93118,93120,93122],{"class":36,"line":3408},[34,93119,53783],{"class":40},[34,93121,53452],{"class":52939},[34,93123,52946],{"class":40},[34,93125,93126,93128,93130,93132,93134,93136,93138,93140],{"class":36,"line":3413},[34,93127,12871],{"class":55},[34,93129,88569],{"class":44},[34,93131,56],{"class":55},[34,93133,56035],{"class":40},[34,93135,56038],{"class":3617},[34,93137,286],{"class":40},[34,93139,91782],{"class":504},[34,93141,101],{"class":40},[34,93143,93144,93146,93148,93150],{"class":36,"line":3418},[34,93145,53858],{"class":55},[34,93147,11088],{"class":40},[34,93149,221],{"class":55},[34,93151,48972],{"class":44},[34,93153,93154,93156,93158],{"class":36,"line":3432},[34,93155,71723],{"class":55},[34,93157,91801],{"class":3617},[34,93159,12503],{"class":40},[34,93161,93162,93164,93166,93168],{"class":36,"line":3437},[34,93163,91808],{"class":40},[34,93165,221],{"class":55},[34,93167,4685],{"class":40},[34,93169,4355],{"class":55},[34,93171,93172],{"class":36,"line":4230},[34,93173,91819],{"class":161},[34,93175,93176],{"class":36,"line":4244},[34,93177,3841],{"class":40},[34,93179,93180],{"class":36,"line":4252},[34,93181,91828],{"class":161},[34,93183,93184],{"class":36,"line":4257},[34,93185,93186],{"class":161},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[34,93188,93189],{"class":36,"line":4263},[34,93190,93191],{"class":161},"    \u002F\u002F 1.声明一个定时器变量\n",[34,93193,93194],{"class":36,"line":4269},[34,93195,93196],{"class":161},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[34,93198,93199],{"class":36,"line":4274},[34,93200,93201],{"class":161},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[34,93203,93204],{"class":36,"line":9598},[34,93205,93206],{"class":161},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[34,93208,93209],{"class":36,"line":9622},[34,93210,93211],{"class":161},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[34,93213,93214,93216,93219,93221,93223,93225,93227],{"class":36,"line":9627},[34,93215,71723],{"class":55},[34,93217,93218],{"class":3617}," throttle",[34,93220,286],{"class":40},[34,93222,92273],{"class":51},[34,93224,48],{"class":40},[34,93226,2514],{"class":51},[34,93228,14090],{"class":40},[34,93230,93231,93233],{"class":36,"line":9633},[34,93232,81409],{"class":55},[34,93234,92286],{"class":40},[34,93236,93237,93239,93241],{"class":36,"line":9660},[34,93238,75621],{"class":55},[34,93240,60557],{"class":55},[34,93242,56091],{"class":40},[34,93244,93245,93247,93249,93251],{"class":36,"line":9665},[34,93246,4150],{"class":55},[34,93248,3313],{"class":40},[34,93250,2034],{"class":55},[34,93252,93253],{"class":40},"timer) {\n",[34,93255,93256,93259,93261,93263,93265,93267],{"class":36,"line":9671},[34,93257,93258],{"class":40},"          timer ",[34,93260,221],{"class":55},[34,93262,92327],{"class":3617},[34,93264,286],{"class":40},[34,93266,56088],{"class":55},[34,93268,56091],{"class":40},[34,93270,93271,93274],{"class":36,"line":9683},[34,93272,93273],{"class":3617},"            fn",[34,93275,3630],{"class":40},[34,93277,93278],{"class":36,"line":9695},[34,93279,93280],{"class":161},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[34,93282,93283],{"class":36,"line":9707},[34,93284,93285],{"class":161},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[34,93287,93288,93291,93293],{"class":36,"line":11366},[34,93289,93290],{"class":40},"            timer ",[34,93292,221],{"class":55},[34,93294,93295],{"class":44}," null\n",[34,93297,93298],{"class":36,"line":11391},[34,93299,93300],{"class":161},"            \u002F\u002F 不能用clearTimeout(timer)\n",[34,93302,93303],{"class":36,"line":11414},[34,93304,93305],{"class":161},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[34,93307,93308],{"class":36,"line":11438},[34,93309,93310],{"class":40},"          }, t)\n",[34,93312,93313],{"class":36,"line":11443},[34,93314,4182],{"class":40},[34,93316,93317],{"class":36,"line":11448},[34,93318,54037],{"class":40},[34,93320,93321],{"class":36,"line":11453},[34,93322,3841],{"class":40},[34,93324,93325,93327,93329,93331,93333,93335,93337,93339,93341],{"class":36,"line":11462},[34,93326,91843],{"class":40},[34,93328,59452],{"class":3617},[34,93330,286],{"class":40},[34,93332,91850],{"class":504},[34,93334,48],{"class":40},[34,93336,92809],{"class":3617},[34,93338,91859],{"class":40},[34,93340,66713],{"class":44},[34,93342,296],{"class":40},[34,93344,93345,93347,93349],{"class":36,"line":11467},[34,93346,54056],{"class":40},[34,93348,53452],{"class":52939},[34,93350,52946],{"class":40},[34,93352,93353,93355,93357],{"class":36,"line":11473},[34,93354,53424],{"class":40},[34,93356,53439],{"class":52939},[34,93358,52946],{"class":40},[34,93360,93361],{"class":36,"line":11494},[34,93362,1475],{"emptyLinePlaceholder":1474},[34,93364,93365,93367,93369],{"class":36,"line":11500},[34,93366,53424],{"class":40},[34,93368,52274],{"class":52939},[34,93370,52946],{"class":40},[19,93372,93374],{"id":93373},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[24,93376,93378],{"className":54706,"code":93377,"language":54708,"meta":29,"style":29},"\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",[31,93379,93380,93388,93396,93401,93406,93411,93416,93420,93428],{"__ignoreMap":29},[34,93381,93382,93384,93386],{"class":36,"line":37},[34,93383,2701],{"class":40},[34,93385,53439],{"class":52939},[34,93387,52946],{"class":40},[34,93389,93390,93392,93394],{"class":36,"line":165},[34,93391,53783],{"class":40},[34,93393,53452],{"class":52939},[34,93395,52946],{"class":40},[34,93397,93398],{"class":36,"line":171},[34,93399,93400],{"class":40},"    let timer = null\n",[34,93402,93403],{"class":36,"line":182},[34,93404,93405],{"class":40},"    timer = setTimeout(() => {\n",[34,93407,93408],{"class":36,"line":188},[34,93409,93410],{"class":40},"      clearTimeout(timer)\n",[34,93412,93413],{"class":36,"line":518},[34,93414,93415],{"class":40},"      console.log(timer)\n",[34,93417,93418],{"class":36,"line":524},[34,93419,61864],{"class":40},[34,93421,93422,93424,93426],{"class":36,"line":530},[34,93423,54056],{"class":40},[34,93425,53452],{"class":52939},[34,93427,52946],{"class":40},[34,93429,93430,93432,93434],{"class":36,"line":624},[34,93431,53424],{"class":40},[34,93433,53439],{"class":52939},[34,93435,52946],{"class":40},[103,93437,93438],{},"输出为1",[103,93440,93441],{},"在开启的定时器里边写清除定时器",[103,93443,93444],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[19,93446,93448],{"id":93447},"_4174-节流综合案例","4.17.4 节流综合案例",[103,93450,93451],{},"页面打开，可以记录上一次的视频播放位置",[103,93453,93454],{},[109,93455],{"alt":29,"src":93456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[103,93458,93459],{},[109,93460],{"alt":29,"src":93461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[24,93463,93465],{"className":52272,"code":93464,"language":52274,"meta":29,"style":29},"\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",[31,93466,93467,93477,93491,93495,93503,93517,93537,93557,93579,93592,93600,93606,93616,93626,93636,93640,93644,93651,93664,93676,93680,93684,93694,93706,93720,93724,93728,93735,93745,93758,93770,93780,93790,93806,93818,93822,93826,93834,93844,93856,93866,93876,93886,93890,93894,93904,93915,93919,93927,93935,93939,93947,93962,93977,93992,94013,94021,94029,94044,94066,94074,94089,94115,94141,94167,94175,94183,94202,94210,94215,94234,94239,94257,94262,94267,94275,94280,94294,94302,94307,94324,94328,94333,94355,94359,94367,94375,94379],{"__ignoreMap":29},[34,93468,93469,93471,93473,93475],{"class":36,"line":37},[34,93470,52936],{"class":40},[34,93472,52940],{"class":52939},[34,93474,52943],{"class":3617},[34,93476,52946],{"class":40},[34,93478,93479,93481,93483,93485,93487,93489],{"class":36,"line":165},[34,93480,2701],{"class":40},[34,93482,52274],{"class":52939},[34,93484,52955],{"class":3617},[34,93486,221],{"class":40},[34,93488,52960],{"class":504},[34,93490,52946],{"class":40},[34,93492,93493],{"class":36,"line":171},[34,93494,1475],{"emptyLinePlaceholder":1474},[34,93496,93497,93499,93501],{"class":36,"line":182},[34,93498,2701],{"class":40},[34,93500,52973],{"class":52939},[34,93502,52946],{"class":40},[34,93504,93505,93507,93509,93511,93513,93515],{"class":36,"line":188},[34,93506,53783],{"class":40},[34,93508,52983],{"class":52939},[34,93510,52986],{"class":3617},[34,93512,221],{"class":40},[34,93514,52991],{"class":504},[34,93516,60766],{"class":40},[34,93518,93519,93521,93523,93525,93527,93529,93531,93533,93535],{"class":36,"line":518},[34,93520,53783],{"class":40},[34,93522,52983],{"class":52939},[34,93524,53002],{"class":3617},[34,93526,221],{"class":40},[34,93528,53007],{"class":504},[34,93530,53010],{"class":3617},[34,93532,221],{"class":40},[34,93534,53015],{"class":504},[34,93536,60766],{"class":40},[34,93538,93539,93541,93543,93545,93547,93549,93551,93553,93555],{"class":36,"line":524},[34,93540,53783],{"class":40},[34,93542,52983],{"class":52939},[34,93544,16566],{"class":3617},[34,93546,221],{"class":40},[34,93548,53030],{"class":504},[34,93550,53010],{"class":3617},[34,93552,221],{"class":40},[34,93554,53037],{"class":504},[34,93556,60766],{"class":40},[34,93558,93559,93561,93563,93565,93567,93570,93572,93574,93577],{"class":36,"line":530},[34,93560,53783],{"class":40},[34,93562,52983],{"class":52939},[34,93564,16566],{"class":3617},[34,93566,221],{"class":40},[34,93568,93569],{"class":504},"\"referrer\"",[34,93571,53010],{"class":3617},[34,93573,221],{"class":40},[34,93575,93576],{"class":504},"\"never\"",[34,93578,60766],{"class":40},[34,93580,93581,93583,93585,93588,93590],{"class":36,"line":624},[34,93582,53783],{"class":40},[34,93584,53046],{"class":52939},[34,93586,93587],{"class":40},">综合案例\u003C\u002F",[34,93589,53046],{"class":52939},[34,93591,52946],{"class":40},[34,93593,93594,93596,93598],{"class":36,"line":630},[34,93595,53783],{"class":40},[34,93597,1711],{"class":52939},[34,93599,52946],{"class":40},[34,93601,93602,93604],{"class":36,"line":636},[34,93603,8053],{"class":52939},[34,93605,17218],{"class":40},[34,93607,93608,93610,93612,93614],{"class":36,"line":1513},[34,93609,56334],{"class":44},[34,93611,53076],{"class":40},[34,93613,177],{"class":44},[34,93615,2952],{"class":40},[34,93617,93618,93620,93622,93624],{"class":36,"line":1519},[34,93619,56345],{"class":44},[34,93621,53076],{"class":40},[34,93623,177],{"class":44},[34,93625,2952],{"class":40},[34,93627,93628,93630,93632,93634],{"class":36,"line":3283},[34,93629,74235],{"class":44},[34,93631,53076],{"class":40},[34,93633,62144],{"class":44},[34,93635,2952],{"class":40},[34,93637,93638],{"class":36,"line":3297},[34,93639,3841],{"class":40},[34,93641,93642],{"class":36,"line":3302},[34,93643,1475],{"emptyLinePlaceholder":1474},[34,93645,93646,93649],{"class":36,"line":3308},[34,93647,93648],{"class":3617},"    .container",[34,93650,17218],{"class":40},[34,93652,93653,93655,93657,93660,93662],{"class":36,"line":3328},[34,93654,56410],{"class":44},[34,93656,53076],{"class":40},[34,93658,93659],{"class":44},"1200",[34,93661,53131],{"class":55},[34,93663,2952],{"class":40},[34,93665,93666,93668,93670,93672,93674],{"class":36,"line":3333},[34,93667,56345],{"class":44},[34,93669,53076],{"class":40},[34,93671,177],{"class":44},[34,93673,53195],{"class":44},[34,93675,2952],{"class":40},[34,93677,93678],{"class":36,"line":3347},[34,93679,3841],{"class":40},[34,93681,93682],{"class":36,"line":3352},[34,93683,1475],{"emptyLinePlaceholder":1474},[34,93685,93686,93689,93692],{"class":36,"line":3381},[34,93687,93688],{"class":3617},"    .video",[34,93690,93691],{"class":52939}," video",[34,93693,17218],{"class":40},[34,93695,93696,93698,93700,93702,93704],{"class":36,"line":3386},[34,93697,56410],{"class":44},[34,93699,53076],{"class":40},[34,93701,451],{"class":44},[34,93703,2131],{"class":55},[34,93705,2952],{"class":40},[34,93707,93708,93710,93712,93714,93716,93718],{"class":36,"line":3403},[34,93709,56334],{"class":44},[34,93711,53076],{"class":40},[34,93713,1249],{"class":44},[34,93715,53131],{"class":55},[34,93717,98],{"class":44},[34,93719,2952],{"class":40},[34,93721,93722],{"class":36,"line":3408},[34,93723,3841],{"class":40},[34,93725,93726],{"class":36,"line":3413},[34,93727,1475],{"emptyLinePlaceholder":1474},[34,93729,93730,93733],{"class":36,"line":3418},[34,93731,93732],{"class":3617},"    .elevator",[34,93734,17218],{"class":40},[34,93736,93737,93739,93741,93743],{"class":36,"line":3432},[34,93738,56398],{"class":44},[34,93740,53076],{"class":40},[34,93742,87869],{"class":44},[34,93744,2952],{"class":40},[34,93746,93747,93749,93751,93754,93756],{"class":36,"line":3437},[34,93748,56586],{"class":44},[34,93750,53076],{"class":40},[34,93752,93753],{"class":44},"280",[34,93755,53131],{"class":55},[34,93757,2952],{"class":40},[34,93759,93760,93762,93764,93766,93768],{"class":36,"line":4230},[34,93761,88063],{"class":44},[34,93763,53076],{"class":40},[34,93765,1249],{"class":44},[34,93767,53131],{"class":55},[34,93769,2952],{"class":40},[34,93771,93772,93774,93776,93778],{"class":36,"line":4244},[34,93773,87876],{"class":44},[34,93775,53076],{"class":40},[34,93777,87881],{"class":44},[34,93779,2952],{"class":40},[34,93781,93782,93784,93786,93788],{"class":36,"line":4252},[34,93783,63360],{"class":44},[34,93785,53076],{"class":40},[34,93787,62481],{"class":44},[34,93789,2952],{"class":40},[34,93791,93792,93794,93796,93798,93800,93802,93804],{"class":36,"line":4257},[34,93793,63616],{"class":44},[34,93795,53076],{"class":40},[34,93797,394],{"class":44},[34,93799,53131],{"class":55},[34,93801,53160],{"class":44},[34,93803,63883],{"class":44},[34,93805,2952],{"class":40},[34,93807,93808,93810,93812,93814,93816],{"class":36,"line":4263},[34,93809,56410],{"class":44},[34,93811,53076],{"class":40},[34,93813,2698],{"class":44},[34,93815,53131],{"class":55},[34,93817,2952],{"class":40},[34,93819,93820],{"class":36,"line":4269},[34,93821,3841],{"class":40},[34,93823,93824],{"class":36,"line":4274},[34,93825,1475],{"emptyLinePlaceholder":1474},[34,93827,93828,93830,93832],{"class":36,"line":9598},[34,93829,93732],{"class":3617},[34,93831,3057],{"class":52939},[34,93833,17218],{"class":40},[34,93835,93836,93838,93840,93842],{"class":36,"line":9622},[34,93837,56648],{"class":44},[34,93839,53076],{"class":40},[34,93841,62508],{"class":44},[34,93843,2952],{"class":40},[34,93845,93846,93848,93850,93852,93854],{"class":36,"line":9627},[34,93847,56334],{"class":44},[34,93849,53076],{"class":40},[34,93851,410],{"class":44},[34,93853,53131],{"class":55},[34,93855,2952],{"class":40},[34,93857,93858,93860,93862,93864],{"class":36,"line":9633},[34,93859,65609],{"class":44},[34,93861,53076],{"class":40},[34,93863,56376],{"class":44},[34,93865,2952],{"class":40},[34,93867,93868,93870,93872,93874],{"class":36,"line":9660},[34,93869,58925],{"class":44},[34,93871,53076],{"class":40},[34,93873,53231],{"class":44},[34,93875,2952],{"class":40},[34,93877,93878,93880,93882,93884],{"class":36,"line":9665},[34,93879,59055],{"class":44},[34,93881,53076],{"class":40},[34,93883,63709],{"class":44},[34,93885,2952],{"class":40},[34,93887,93888],{"class":36,"line":9671},[34,93889,3841],{"class":40},[34,93891,93892],{"class":36,"line":9683},[34,93893,1475],{"emptyLinePlaceholder":1474},[34,93895,93896,93898,93900,93902],{"class":36,"line":9695},[34,93897,93732],{"class":3617},[34,93899,3057],{"class":52939},[34,93901,65663],{"class":3617},[34,93903,17218],{"class":40},[34,93905,93906,93908,93910,93913],{"class":36,"line":9707},[34,93907,59055],{"class":44},[34,93909,53076],{"class":40},[34,93911,93912],{"class":44},"#1286ff",[34,93914,2952],{"class":40},[34,93916,93917],{"class":36,"line":11366},[34,93918,3841],{"class":40},[34,93920,93921,93923,93925],{"class":36,"line":11391},[34,93922,54056],{"class":40},[34,93924,1711],{"class":52939},[34,93926,52946],{"class":40},[34,93928,93929,93931,93933],{"class":36,"line":11414},[34,93930,53424],{"class":40},[34,93932,52973],{"class":52939},[34,93934,52946],{"class":40},[34,93936,93937],{"class":36,"line":11438},[34,93938,1475],{"emptyLinePlaceholder":1474},[34,93940,93941,93943,93945],{"class":36,"line":11443},[34,93942,2701],{"class":40},[34,93944,53439],{"class":52939},[34,93946,52946],{"class":40},[34,93948,93949,93951,93953,93955,93957,93960],{"class":36,"line":11448},[34,93950,53783],{"class":40},[34,93952,53250],{"class":52939},[34,93954,55125],{"class":3617},[34,93956,221],{"class":40},[34,93958,93959],{"class":504},"\"container\"",[34,93961,52946],{"class":40},[34,93963,93964,93966,93968,93970,93972,93975],{"class":36,"line":11453},[34,93965,52980],{"class":40},[34,93967,53250],{"class":52939},[34,93969,55125],{"class":3617},[34,93971,221],{"class":40},[34,93973,93974],{"class":504},"\"header\"",[34,93976,52946],{"class":40},[34,93978,93979,93981,93983,93985,93987,93990],{"class":36,"line":11462},[34,93980,56873],{"class":40},[34,93982,236],{"class":52939},[34,93984,62696],{"class":3617},[34,93986,221],{"class":40},[34,93988,93989],{"class":504},"\"http:\u002F\u002Fpip.itcast.cn\"",[34,93991,52946],{"class":40},[34,93993,93994,93996,93998,94000,94002,94005,94007,94009,94011],{"class":36,"line":11467},[34,93995,56941],{"class":40},[34,93997,109],{"class":52939},[34,93999,56878],{"class":3617},[34,94001,221],{"class":40},[34,94003,94004],{"class":504},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[34,94006,56886],{"class":3617},[34,94008,221],{"class":40},[34,94010,9302],{"class":504},[34,94012,60766],{"class":40},[34,94014,94015,94017,94019],{"class":36,"line":11473},[34,94016,57046],{"class":40},[34,94018,236],{"class":52939},[34,94020,52946],{"class":40},[34,94022,94023,94025,94027],{"class":36,"line":11494},[34,94024,53415],{"class":40},[34,94026,53250],{"class":52939},[34,94028,52946],{"class":40},[34,94030,94031,94033,94035,94037,94039,94042],{"class":36,"line":11500},[34,94032,52980],{"class":40},[34,94034,53250],{"class":52939},[34,94036,55125],{"class":3617},[34,94038,221],{"class":40},[34,94040,94041],{"class":504},"\"video\"",[34,94043,52946],{"class":40},[34,94045,94046,94048,94050,94052,94054,94057,94060,94062,94064],{"class":36,"line":11514},[34,94047,56873],{"class":40},[34,94049,29829],{"class":52939},[34,94051,56878],{"class":3617},[34,94053,221],{"class":40},[34,94055,94056],{"class":504},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[34,94058,94059],{"class":3617}," controls",[34,94061,56953],{"class":40},[34,94063,29829],{"class":52939},[34,94065,52946],{"class":40},[34,94067,94068,94070,94072],{"class":36,"line":11520},[34,94069,53415],{"class":40},[34,94071,53250],{"class":52939},[34,94073,52946],{"class":40},[34,94075,94076,94078,94080,94082,94084,94087],{"class":36,"line":11547},[34,94077,52980],{"class":40},[34,94079,53250],{"class":52939},[34,94081,55125],{"class":3617},[34,94083,221],{"class":40},[34,94085,94086],{"class":504},"\"elevator\"",[34,94088,52946],{"class":40},[34,94090,94091,94093,94095,94097,94099,94101,94104,94106,94108,94111,94113],{"class":36,"line":11556},[34,94092,56873],{"class":40},[34,94094,236],{"class":52939},[34,94096,62696],{"class":3617},[34,94098,221],{"class":40},[34,94100,65875],{"class":504},[34,94102,94103],{"class":3617}," data-ref",[34,94105,221],{"class":40},[34,94107,94041],{"class":504},[34,94109,94110],{"class":40},">视频介绍\u003C\u002F",[34,94112,236],{"class":52939},[34,94114,52946],{"class":40},[34,94116,94117,94119,94121,94123,94125,94127,94129,94131,94134,94137,94139],{"class":36,"line":11562},[34,94118,56873],{"class":40},[34,94120,236],{"class":52939},[34,94122,62696],{"class":3617},[34,94124,221],{"class":40},[34,94126,65875],{"class":504},[34,94128,94103],{"class":3617},[34,94130,221],{"class":40},[34,94132,94133],{"class":504},"\"intro\"",[34,94135,94136],{"class":40},">课程简介\u003C\u002F",[34,94138,236],{"class":52939},[34,94140,52946],{"class":40},[34,94142,94143,94145,94147,94149,94151,94153,94155,94157,94160,94163,94165],{"class":36,"line":11570},[34,94144,56873],{"class":40},[34,94146,236],{"class":52939},[34,94148,62696],{"class":3617},[34,94150,221],{"class":40},[34,94152,65875],{"class":504},[34,94154,94103],{"class":3617},[34,94156,221],{"class":40},[34,94158,94159],{"class":504},"\"outline\"",[34,94161,94162],{"class":40},">评论列表\u003C\u002F",[34,94164,236],{"class":52939},[34,94166,52946],{"class":40},[34,94168,94169,94171,94173],{"class":36,"line":11575},[34,94170,53415],{"class":40},[34,94172,53250],{"class":52939},[34,94174,52946],{"class":40},[34,94176,94177,94179,94181],{"class":36,"line":18250},[34,94178,54056],{"class":40},[34,94180,53250],{"class":52939},[34,94182,52946],{"class":40},[34,94184,94185,94187,94189,94191,94193,94196,94198,94200],{"class":36,"line":18256},[34,94186,53783],{"class":40},[34,94188,53452],{"class":52939},[34,94190,56878],{"class":3617},[34,94192,221],{"class":40},[34,94194,94195],{"class":504},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[34,94197,56953],{"class":40},[34,94199,53452],{"class":52939},[34,94201,52946],{"class":40},[34,94203,94204,94206,94208],{"class":36,"line":18279},[34,94205,53783],{"class":40},[34,94207,53452],{"class":52939},[34,94209,52946],{"class":40},[34,94211,94212],{"class":36,"line":18285},[34,94213,94214],{"class":161},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[34,94216,94217,94219,94221,94223,94225,94227,94229,94232],{"class":36,"line":18308},[34,94218,12871],{"class":55},[34,94220,93691],{"class":44},[34,94222,56],{"class":55},[34,94224,56035],{"class":40},[34,94226,56038],{"class":3617},[34,94228,286],{"class":40},[34,94230,94231],{"class":504},"'video'",[34,94233,101],{"class":40},[34,94235,94236],{"class":36,"line":18322},[34,94237,94238],{"class":161},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[34,94240,94241,94244,94246,94248,94250,94253,94255],{"class":36,"line":18342},[34,94242,94243],{"class":40},"    video.ontimeupdate ",[34,94245,221],{"class":55},[34,94247,89991],{"class":40},[34,94249,92809],{"class":3617},[34,94251,94252],{"class":40},"(() ",[34,94254,86358],{"class":55},[34,94256,17218],{"class":40},[34,94258,94259],{"class":36,"line":18348},[34,94260,94261],{"class":161},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[34,94263,94264],{"class":36,"line":18359},[34,94265,94266],{"class":161},"      \u002F\u002F 控制台输出当前的时间\n",[34,94268,94269,94272],{"class":36,"line":18382},[34,94270,94271],{"class":161},"      \u002F\u002F console.log(video.currentTime)",[34,94273,94274],{"class":161},"  \u002F\u002F获得当前的视频时间\n",[34,94276,94277],{"class":36,"line":18404},[34,94278,94279],{"class":161},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[34,94281,94282,94284,94286,94288,94291],{"class":36,"line":18409},[34,94283,76322],{"class":40},[34,94285,73293],{"class":3617},[34,94287,286],{"class":40},[34,94289,94290],{"class":504},"'currentTime'",[34,94292,94293],{"class":40},", video.currentTime)\n",[34,94295,94296,94298,94300],{"class":36,"line":18415},[34,94297,56174],{"class":40},[34,94299,8060],{"class":44},[34,94301,101],{"class":40},[34,94303,94304],{"class":36,"line":18429},[34,94305,94306],{"class":161},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[34,94308,94309,94312,94315,94317,94320,94322],{"class":36,"line":18442},[34,94310,94311],{"class":40},"    video.",[34,94313,94314],{"class":3617},"onloadeddata",[34,94316,56],{"class":55},[34,94318,94319],{"class":40}," () ",[34,94321,86358],{"class":55},[34,94323,17218],{"class":40},[34,94325,94326],{"class":36,"line":18447},[34,94327,61651],{"class":161},[34,94329,94330],{"class":36,"line":18461},[34,94331,94332],{"class":161},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[34,94334,94335,94338,94340,94343,94345,94347,94349,94351,94353],{"class":36,"line":18466},[34,94336,94337],{"class":40},"      video.currentTime ",[34,94339,221],{"class":55},[34,94341,94342],{"class":40}," localStorage.",[34,94344,73324],{"class":3617},[34,94346,286],{"class":40},[34,94348,94290],{"class":504},[34,94350,372],{"class":40},[34,94352,72996],{"class":55},[34,94354,48972],{"class":44},[34,94356,94357],{"class":36,"line":18472},[34,94358,3841],{"class":40},[34,94360,94361,94363,94365],{"class":36,"line":18477},[34,94362,54056],{"class":40},[34,94364,53452],{"class":52939},[34,94366,52946],{"class":40},[34,94368,94369,94371,94373],{"class":36,"line":18491},[34,94370,53424],{"class":40},[34,94372,53439],{"class":52939},[34,94374,52946],{"class":40},[34,94376,94377],{"class":36,"line":18496},[34,94378,1475],{"emptyLinePlaceholder":1474},[34,94380,94381,94383,94385],{"class":36,"line":18501},[34,94382,53424],{"class":40},[34,94384,52274],{"class":52939},[34,94386,52946],{"class":40},[1711,94388,94389],{},"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":29,"searchDepth":165,"depth":165,"links":94391},[94392,94397,94401,94402,94403,94408,94413,94414,94415,94416,94423,94428,94429,94439,94443,94444,94448],{"id":78329,"depth":165,"text":78330,"children":94393},[94394,94395,94396],{"id":78333,"depth":171,"text":78334},{"id":78358,"depth":171,"text":78359},{"id":78370,"depth":171,"text":78371},{"id":78382,"depth":165,"text":78383,"children":94398},[94399,94400],{"id":78386,"depth":171,"text":78387},{"id":78401,"depth":171,"text":78402},{"id":78453,"depth":165,"text":78454},{"id":78497,"depth":165,"text":78498},{"id":78514,"depth":165,"text":78515,"children":94404},[94405,94406,94407],{"id":78518,"depth":171,"text":78519},{"id":78531,"depth":171,"text":78532},{"id":78636,"depth":171,"text":78637},{"id":78925,"depth":165,"text":78926,"children":94409},[94410,94411,94412],{"id":78929,"depth":171,"text":78930},{"id":79371,"depth":171,"text":79372},{"id":79782,"depth":171,"text":79783},{"id":79845,"depth":165,"text":79846},{"id":79924,"depth":165,"text":79925},{"id":80017,"depth":165,"text":80018},{"id":81862,"depth":165,"text":81863,"children":94417},[94418,94419,94420,94421,94422],{"id":81866,"depth":171,"text":81867},{"id":81878,"depth":171,"text":81879},{"id":82097,"depth":171,"text":82098},{"id":82115,"depth":171,"text":82116},{"id":82175,"depth":171,"text":82176},{"id":86442,"depth":165,"text":86443,"children":94424},[94425,94426,94427],{"id":86446,"depth":171,"text":86447},{"id":86464,"depth":171,"text":86465},{"id":86490,"depth":171,"text":86491},{"id":86499,"depth":165,"text":86500},{"id":86521,"depth":165,"text":86522,"children":94430},[94431,94432,94433,94434,94435,94436,94437,94438],{"id":86525,"depth":171,"text":86526},{"id":86786,"depth":171,"text":86787},{"id":86972,"depth":171,"text":86973},{"id":87339,"depth":171,"text":87340},{"id":87455,"depth":171,"text":87456},{"id":87491,"depth":171,"text":87492},{"id":87538,"depth":171,"text":87539},{"id":87572,"depth":171,"text":87573},{"id":88935,"depth":165,"text":88936,"children":94440},[94441,94442],{"id":88939,"depth":171,"text":88940},{"id":88976,"depth":171,"text":88977},{"id":90331,"depth":165,"text":90332},{"id":90702,"depth":165,"text":90703,"children":94445},[94446,94447],{"id":90706,"depth":171,"text":90707},{"id":90740,"depth":171,"text":90741},{"id":91469,"depth":165,"text":91470,"children":94449},[94450,94451,94452,94453],{"id":91473,"depth":171,"text":91474},{"id":92431,"depth":171,"text":92432},{"id":93373,"depth":171,"text":93374},{"id":93447,"depth":171,"text":93448},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78318,"description":1744},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94460,"title":94461,"body":94462,"description":94473,"extension":1745,"meta":94474,"navigation":1474,"path":94476,"seo":94477,"stem":94478,"__hash__":94479},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94463,"toc":94471},[94464],[103,94465,94466,94467],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[236,94468,94469],{"href":94469,"rel":94470},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25510],{"title":29,"searchDepth":165,"depth":165,"links":94472},[],"三件套第三套学习",{"category":94475},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94461,"description":94473},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94481,"title":94482,"body":94483,"description":1744,"extension":1745,"meta":94588,"navigation":1474,"path":94589,"seo":94590,"stem":94591,"__hash__":94592},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94484,"toc":94583},[94485,94492,94495,94498,94501,94505,94514,94517,94520,94524,94533,94536,94540,94543,94563,94566,94580],[103,94486,94487],{},[236,94488,94491],{"href":94489,"rel":94490},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25510],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94493,94482],{"id":94494},"_1安装",[103,94496,94497],{},"numpy是科学计算基础库,底层是C语言",[103,94499,94500],{},"三种方式：",[14,94502,94504],{"id":94503},"_11-通过pip安装","1.1 通过pip安装",[24,94506,94508],{"className":26,"code":94507,"language":28,"meta":29,"style":29},"pip install numpy\n",[31,94509,94510],{"__ignoreMap":29},[34,94511,94512],{"class":36,"line":37},[34,94513,94507],{"class":40},[103,94515,94516],{},"首选方式，自动处理依赖项",[103,94518,94519],{},"在提示系统命令符中使用cmd",[14,94521,94523],{"id":94522},"_12-通过anaconda安装","1.2 通过Anaconda安装",[24,94525,94527],{"className":26,"code":94526,"language":28,"meta":29,"style":29},"conda install numpy\n",[31,94528,94529],{"__ignoreMap":29},[34,94530,94531],{"class":36,"line":37},[34,94532,94526],{"class":40},[103,94534,94535],{},"自动解决环境依赖",[14,94537,94539],{"id":94538},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[103,94541,94542],{},"对于Debian\u002FUbuntu",[24,94544,94546],{"className":26,"code":94545,"language":28,"meta":29,"style":29},"sudo apt-get install python3-numpy\n",[31,94547,94548],{"__ignoreMap":29},[34,94549,94550,94553,94555,94558,94560],{"class":36,"line":37},[34,94551,94552],{"class":40},"sudo apt",[34,94554,2327],{"class":55},[34,94556,94557],{"class":40},"get install python3",[34,94559,2327],{"class":55},[34,94561,94562],{"class":40},"numpy\n",[103,94564,94565],{},"对于Fedora:",[24,94567,94569],{"className":26,"code":94568,"language":28,"meta":29,"style":29},"sudo dnf install python3-numpy\n",[31,94570,94571],{"__ignoreMap":29},[34,94572,94573,94576,94578],{"class":36,"line":37},[34,94574,94575],{"class":40},"sudo dnf install python3",[34,94577,2327],{"class":55},[34,94579,94562],{"class":40},[1711,94581,94582],{},"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":29,"searchDepth":165,"depth":165,"links":94584},[94585,94586,94587],{"id":94503,"depth":165,"text":94504},{"id":94522,"depth":165,"text":94523},{"id":94538,"depth":165,"text":94539},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94482,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94594,"title":94595,"body":94596,"description":1744,"extension":1745,"meta":94706,"navigation":1474,"path":94707,"seo":94708,"stem":94709,"__hash__":94710},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94597,"toc":94704},[94598,94601,94604,94607,94610,94613,94616,94619,94622,94625,94698,94701],[10,94599,94595],{"id":94600},"_10算数函数",[103,94602,94603],{},"加减乘除运算跟python基础语法没区别",[103,94605,94606],{},"除了python那种方法外还可以使用函数",[103,94608,94609],{},"加：np.add(a,b)",[103,94611,94612],{},"减：np.subtract(a,b)",[103,94614,94615],{},"乘：np.multiply(a,b)",[103,94617,94618],{},"除：np.divide(a,b) == a\u002Fb",[103,94620,94621],{},"取余：np.mod(a,b) == a%b",[103,94623,94624],{},"必须会的用法：",[24,94626,94628],{"className":26,"code":94627,"language":28,"meta":29,"style":29},"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",[31,94629,94630,94650,94671,94681,94693],{"__ignoreMap":29},[34,94631,94632,94634,94636,94638,94640,94642,94644,94646,94648],{"class":36,"line":37},[34,94633,236],{"class":40},[34,94635,221],{"class":55},[34,94637,551],{"class":40},[34,94639,1324],{"class":44},[34,94641,1317],{"class":40},[34,94643,337],{"class":44},[34,94645,291],{"class":40},[34,94647,337],{"class":44},[34,94649,101],{"class":40},[34,94651,94652,94654,94656,94659,94661,94663,94665,94667,94669],{"class":36,"line":165},[34,94653,2070],{"class":40},[34,94655,221],{"class":55},[34,94657,94658],{"class":40},"np.array([",[34,94660,410],{"class":44},[34,94662,291],{"class":40},[34,94664,410],{"class":44},[34,94666,291],{"class":40},[34,94668,410],{"class":44},[34,94670,1077],{"class":40},[34,94672,94673,94676,94678],{"class":36,"line":171},[34,94674,94675],{"class":40},"result",[34,94677,221],{"class":55},[34,94679,94680],{"class":40},"np.empty_like(a)\n",[34,94682,94683,94686,94688,94690],{"class":36,"line":182},[34,94684,94685],{"class":40},"np.add(a,b,",[34,94687,1067],{"class":51},[34,94689,221],{"class":55},[34,94691,94692],{"class":40},"result)\n",[34,94694,94695],{"class":36,"line":188},[34,94696,94697],{"class":40},"result\n",[103,94699,94700],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1711,94702,94703],{},"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":29,"searchDepth":165,"depth":165,"links":94705},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94595,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94712,"title":94713,"body":94714,"description":1744,"extension":1745,"meta":95468,"navigation":1474,"path":95469,"seo":95470,"stem":95471,"__hash__":95472},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94715,"toc":95455},[94716,94719,94722,94725,94729,94766,94770,94814,94874,94878,94881,94920,94922,94965,94969,95005,95009,95077,95081,95144,95148,95151,95154,95157,95160,95195,95199,95239,95243,95315,95318,95322,95385,95389,95452],[10,94717,94713],{"id":94718},"_11统计函数",[103,94720,94721],{},"sum max min mean",[103,94723,94724],{},"这些有axis参数，可以指定方向",[14,94726,94728],{"id":94727},"_111-sum求和函数","11.1 sum()求和函数",[24,94730,94732],{"className":26,"code":94731,"language":28,"meta":29,"style":29},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[31,94733,94734,94738,94758],{"__ignoreMap":29},[34,94735,94736],{"class":36,"line":37},[34,94737,546],{"class":161},[34,94739,94740,94742,94744,94746,94748,94750,94752,94754,94756],{"class":36,"line":165},[34,94741,236],{"class":40},[34,94743,221],{"class":55},[34,94745,367],{"class":40},[34,94747,394],{"class":44},[34,94749,291],{"class":40},[34,94751,451],{"class":44},[34,94753,291],{"class":40},[34,94755,1249],{"class":44},[34,94757,101],{"class":40},[34,94759,94760,94763],{"class":36,"line":171},[34,94761,94762],{"class":40},"np.sum(a)",[34,94764,94765],{"class":161},"#求和\n",[14,94767,94769],{"id":94768},"_112-max求最大值函数","11.2 max()求最大值函数",[24,94771,94773],{"className":26,"code":94772,"language":28,"meta":29,"style":29},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[31,94774,94775,94779,94799,94804,94809],{"__ignoreMap":29},[34,94776,94777],{"class":36,"line":37},[34,94778,546],{"class":161},[34,94780,94781,94783,94785,94787,94789,94791,94793,94795,94797],{"class":36,"line":165},[34,94782,236],{"class":40},[34,94784,221],{"class":55},[34,94786,367],{"class":40},[34,94788,394],{"class":44},[34,94790,291],{"class":40},[34,94792,451],{"class":44},[34,94794,291],{"class":40},[34,94796,1249],{"class":44},[34,94798,101],{"class":40},[34,94800,94801],{"class":36,"line":171},[34,94802,94803],{"class":40},"np.max(a)\n",[34,94805,94806],{"class":36,"line":182},[34,94807,94808],{"class":161},"#最大索引(求最大元素的索引)arg\n",[34,94810,94811],{"class":36,"line":188},[34,94812,94813],{"class":40},"np.argmax(a)\n",[24,94815,94817],{"className":26,"code":94816,"language":28,"meta":29,"style":29},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[31,94818,94819,94840,94860,94864],{"__ignoreMap":29},[34,94820,94821,94823,94825,94828,94830,94832,94834,94836,94838],{"class":36,"line":37},[34,94822,12569],{"class":40},[34,94824,221],{"class":55},[34,94826,94827],{"class":40}," np.array([",[34,94829,394],{"class":44},[34,94831,48],{"class":40},[34,94833,224],{"class":44},[34,94835,48],{"class":40},[34,94837,337],{"class":44},[34,94839,1077],{"class":40},[34,94841,94842,94844,94846,94848,94850,94852,94854,94856,94858],{"class":36,"line":165},[34,94843,12595],{"class":40},[34,94845,221],{"class":55},[34,94847,94827],{"class":40},[34,94849,337],{"class":44},[34,94851,48],{"class":40},[34,94853,332],{"class":44},[34,94855,48],{"class":40},[34,94857,247],{"class":44},[34,94859,1077],{"class":40},[34,94861,94862],{"class":36,"line":171},[34,94863,1475],{"emptyLinePlaceholder":1474},[34,94865,94866,94868,94871],{"class":36,"line":182},[34,94867,723],{"class":44},[34,94869,94870],{"class":40},"(np.maximum(a, b))   ",[34,94872,94873],{"class":161},"# [3 5 4]，每个位置上取较大值\n",[14,94875,94877],{"id":94876},"_113-mean求平均值函数","11.3 mean()求平均值函数",[103,94879,94880],{},"①一维数组：",[24,94882,94884],{"className":26,"code":94883,"language":28,"meta":29,"style":29},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[31,94885,94886,94890,94910,94915],{"__ignoreMap":29},[34,94887,94888],{"class":36,"line":37},[34,94889,546],{"class":161},[34,94891,94892,94894,94896,94898,94900,94902,94904,94906,94908],{"class":36,"line":165},[34,94893,236],{"class":40},[34,94895,221],{"class":55},[34,94897,367],{"class":40},[34,94899,394],{"class":44},[34,94901,291],{"class":40},[34,94903,451],{"class":44},[34,94905,291],{"class":40},[34,94907,1249],{"class":44},[34,94909,101],{"class":40},[34,94911,94912],{"class":36,"line":171},[34,94913,94914],{"class":161},"#求平均值\n",[34,94916,94917],{"class":36,"line":182},[34,94918,94919],{"class":40},"np.mean(a)\n",[103,94921,1254],{},[24,94923,94925],{"className":26,"code":94924,"language":28,"meta":29,"style":29},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[31,94926,94927,94931,94955,94960],{"__ignoreMap":29},[34,94928,94929],{"class":36,"line":37},[34,94930,270],{"class":161},[34,94932,94933,94935,94937,94939,94941,94943,94945,94947,94949,94951,94953],{"class":36,"line":165},[34,94934,275],{"class":40},[34,94936,221],{"class":55},[34,94938,551],{"class":40},[34,94940,394],{"class":44},[34,94942,291],{"class":40},[34,94944,2318],{"class":44},[34,94946,1317],{"class":40},[34,94948,337],{"class":44},[34,94950,291],{"class":40},[34,94952,247],{"class":44},[34,94954,101],{"class":40},[34,94956,94957],{"class":36,"line":171},[34,94958,94959],{"class":161},"#对数组中的所有数求平均\n",[34,94961,94962],{"class":36,"line":182},[34,94963,94964],{"class":40},"np.mean(aa)\n",[14,94966,94968],{"id":94967},"_114-median求中位数函数","11.4 median()求中位数函数",[24,94970,94972],{"className":26,"code":94971,"language":28,"meta":29,"style":29},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[31,94973,94974,94979,94995,95000],{"__ignoreMap":29},[34,94975,94976],{"class":36,"line":37},[34,94977,94978],{"class":161},"#求中位数\n",[34,94980,94981,94983,94985,94987,94989,94991,94993],{"class":36,"line":165},[34,94982,2070],{"class":40},[34,94984,221],{"class":55},[34,94986,551],{"class":40},[34,94988,394],{"class":44},[34,94990,291],{"class":40},[34,94992,410],{"class":44},[34,94994,101],{"class":40},[34,94996,94997],{"class":36,"line":171},[34,94998,94999],{"class":40},"np.median(b)\n",[34,95001,95002],{"class":36,"line":182},[34,95003,95004],{"class":161},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95006,95008],{"id":95007},"_115-power求幂运算函数","11.5 power()求幂运算函数",[24,95010,95012],{"className":26,"code":95011,"language":28,"meta":29,"style":29},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[31,95013,95014,95030,95035,95040,95049,95054,95063],{"__ignoreMap":29},[34,95015,95016,95018,95020,95022,95024,95026,95028],{"class":36,"line":37},[34,95017,2070],{"class":40},[34,95019,221],{"class":55},[34,95021,551],{"class":40},[34,95023,394],{"class":44},[34,95025,291],{"class":40},[34,95027,410],{"class":44},[34,95029,101],{"class":40},[34,95031,95032],{"class":36,"line":165},[34,95033,95034],{"class":161},"#幂运算\n",[34,95036,95037],{"class":36,"line":171},[34,95038,95039],{"class":161},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[34,95041,95042,95045,95047],{"class":36,"line":182},[34,95043,95044],{"class":40},"np.power(b,",[34,95046,332],{"class":44},[34,95048,101],{"class":40},[34,95050,95051],{"class":36,"line":188},[34,95052,95053],{"class":161},"#或者以下代码，将数据存储起来\n",[34,95055,95056,95058,95060],{"class":36,"line":518},[34,95057,1024],{"class":40},[34,95059,221],{"class":55},[34,95061,95062],{"class":40},"np.empty_like(b)\n",[34,95064,95065,95067,95069,95071,95073,95075],{"class":36,"line":524},[34,95066,95044],{"class":40},[34,95068,332],{"class":44},[34,95070,291],{"class":40},[34,95072,1067],{"class":51},[34,95074,221],{"class":55},[34,95076,1153],{"class":40},[14,95078,95080],{"id":95079},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[24,95082,95084],{"className":26,"code":95083,"language":28,"meta":29,"style":29},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[31,95085,95086,95102,95107,95112,95116,95133],{"__ignoreMap":29},[34,95087,95088,95090,95092,95094,95096,95098,95100],{"class":36,"line":37},[34,95089,2070],{"class":40},[34,95091,221],{"class":55},[34,95093,551],{"class":40},[34,95095,394],{"class":44},[34,95097,291],{"class":40},[34,95099,410],{"class":44},[34,95101,101],{"class":40},[34,95103,95104],{"class":36,"line":165},[34,95105,95106],{"class":161},"#开方\n",[34,95108,95109],{"class":36,"line":171},[34,95110,95111],{"class":40},"np.sqrt(b)\n",[34,95113,95114],{"class":36,"line":182},[34,95115,95053],{"class":161},[34,95117,95118,95120,95122,95125,95127,95129,95131],{"class":36,"line":188},[34,95119,1024],{"class":40},[34,95121,221],{"class":55},[34,95123,95124],{"class":40},"np.empty_like(b,",[34,95126,52],{"class":51},[34,95128,221],{"class":55},[34,95130,989],{"class":44},[34,95132,101],{"class":40},[34,95134,95135,95138,95140,95142],{"class":36,"line":518},[34,95136,95137],{"class":40},"np.sqrt(b,",[34,95139,1067],{"class":51},[34,95141,221],{"class":55},[34,95143,1153],{"class":40},[14,95145,95147],{"id":95146},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[103,95149,95150],{},"对数组中的元素累计求和，可指定轴",[103,95152,95153],{},"#累计求和的意思是：",[103,95155,95156],{},"a = np.array([1, 2, 3, 4])",[103,95158,95159],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[24,95161,95163],{"className":26,"code":95162,"language":28,"meta":29,"style":29},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[31,95164,95165,95181,95186,95190],{"__ignoreMap":29},[34,95166,95167,95169,95171,95173,95175,95177,95179],{"class":36,"line":37},[34,95168,2070],{"class":40},[34,95170,221],{"class":55},[34,95172,551],{"class":40},[34,95174,394],{"class":44},[34,95176,291],{"class":40},[34,95178,410],{"class":44},[34,95180,101],{"class":40},[34,95182,95183],{"class":36,"line":165},[34,95184,95185],{"class":40},"np.cumsum(b)\n",[34,95187,95188],{"class":36,"line":171},[34,95189,617],{"class":161},[34,95191,95192],{"class":36,"line":182},[34,95193,95194],{"class":161},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95196,95198],{"id":95197},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[24,95200,95202],{"className":26,"code":95201,"language":28,"meta":29,"style":29},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[31,95203,95204,95220,95225,95230,95234],{"__ignoreMap":29},[34,95205,95206,95208,95210,95212,95214,95216,95218],{"class":36,"line":37},[34,95207,2070],{"class":40},[34,95209,221],{"class":55},[34,95211,551],{"class":40},[34,95213,394],{"class":44},[34,95215,291],{"class":40},[34,95217,410],{"class":44},[34,95219,101],{"class":40},[34,95221,95222],{"class":36,"line":165},[34,95223,95224],{"class":161},"#对数组中的元素累计求积，可指定轴\n",[34,95226,95227],{"class":36,"line":171},[34,95228,95229],{"class":40},"np.cumprod(b)\n",[34,95231,95232],{"class":36,"line":182},[34,95233,617],{"class":161},[34,95235,95236],{"class":36,"line":188},[34,95237,95238],{"class":161},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95240,95242],{"id":95241},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[24,95244,95246],{"className":26,"code":95245,"language":28,"meta":29,"style":29},"#删除数组中的重复数据，并对数据进行排序\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",[31,95247,95248,95253,95301,95306,95310],{"__ignoreMap":29},[34,95249,95250],{"class":36,"line":37},[34,95251,95252],{"class":161},"#删除数组中的重复数据，并对数据进行排序\n",[34,95254,95255,95257,95259,95261,95263,95265,95267,95269,95271,95273,95275,95277,95279,95281,95283,95285,95287,95289,95291,95293,95295,95297,95299],{"class":36,"line":165},[34,95256,236],{"class":40},[34,95258,221],{"class":55},[34,95260,94658],{"class":40},[34,95262,394],{"class":44},[34,95264,291],{"class":40},[34,95266,332],{"class":44},[34,95268,291],{"class":40},[34,95270,337],{"class":44},[34,95272,291],{"class":40},[34,95274,2293],{"class":44},[34,95276,291],{"class":40},[34,95278,337],{"class":44},[34,95280,291],{"class":40},[34,95282,410],{"class":44},[34,95284,291],{"class":40},[34,95286,2006],{"class":44},[34,95288,291],{"class":40},[34,95290,177],{"class":44},[34,95292,291],{"class":40},[34,95294,2568],{"class":44},[34,95296,291],{"class":40},[34,95298,247],{"class":44},[34,95300,1077],{"class":40},[34,95302,95303],{"class":36,"line":171},[34,95304,95305],{"class":40},"np.unique(a)\n",[34,95307,95308],{"class":36,"line":182},[34,95309,617],{"class":161},[34,95311,95312],{"class":36,"line":188},[34,95313,95314],{"class":161},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[103,95316,95317],{},"升序形式排序",[14,95319,95321],{"id":95320},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[24,95323,95325],{"className":26,"code":95324,"language":28,"meta":29,"style":29},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[31,95326,95327,95375,95380],{"__ignoreMap":29},[34,95328,95329,95331,95333,95335,95337,95339,95341,95343,95345,95347,95349,95351,95353,95355,95357,95359,95361,95363,95365,95367,95369,95371,95373],{"class":36,"line":37},[34,95330,236],{"class":40},[34,95332,221],{"class":55},[34,95334,94658],{"class":40},[34,95336,394],{"class":44},[34,95338,291],{"class":40},[34,95340,332],{"class":44},[34,95342,291],{"class":40},[34,95344,337],{"class":44},[34,95346,291],{"class":40},[34,95348,2293],{"class":44},[34,95350,291],{"class":40},[34,95352,337],{"class":44},[34,95354,291],{"class":40},[34,95356,410],{"class":44},[34,95358,291],{"class":40},[34,95360,2006],{"class":44},[34,95362,291],{"class":40},[34,95364,177],{"class":44},[34,95366,291],{"class":40},[34,95368,2568],{"class":44},[34,95370,291],{"class":40},[34,95372,247],{"class":44},[34,95374,1077],{"class":40},[34,95376,95377],{"class":36,"line":165},[34,95378,95379],{"class":161},"#返回数组中非零元素的索引\n",[34,95381,95382],{"class":36,"line":171},[34,95383,95384],{"class":40},"np.nonzero(a)\n",[14,95386,95388],{"id":95387},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[24,95390,95392],{"className":26,"code":95391,"language":28,"meta":29,"style":29},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[31,95393,95394,95442,95447],{"__ignoreMap":29},[34,95395,95396,95398,95400,95402,95404,95406,95408,95410,95412,95414,95416,95418,95420,95422,95424,95426,95428,95430,95432,95434,95436,95438,95440],{"class":36,"line":37},[34,95397,236],{"class":40},[34,95399,221],{"class":55},[34,95401,94658],{"class":40},[34,95403,394],{"class":44},[34,95405,291],{"class":40},[34,95407,332],{"class":44},[34,95409,291],{"class":40},[34,95411,337],{"class":44},[34,95413,291],{"class":40},[34,95415,2293],{"class":44},[34,95417,291],{"class":40},[34,95419,337],{"class":44},[34,95421,291],{"class":40},[34,95423,410],{"class":44},[34,95425,291],{"class":40},[34,95427,2006],{"class":44},[34,95429,291],{"class":40},[34,95431,177],{"class":44},[34,95433,291],{"class":40},[34,95435,2568],{"class":44},[34,95437,291],{"class":40},[34,95439,247],{"class":44},[34,95441,1077],{"class":40},[34,95443,95444],{"class":36,"line":165},[34,95445,95446],{"class":161},"#计算一组数中最大值与最小值的差，可指定轴\n",[34,95448,95449],{"class":36,"line":171},[34,95450,95451],{"class":40},"np.ptp(a)\n",[1711,95453,95454],{},"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":29,"searchDepth":165,"depth":165,"links":95456},[95457,95458,95459,95460,95461,95462,95463,95464,95465,95466,95467],{"id":94727,"depth":165,"text":94728},{"id":94768,"depth":165,"text":94769},{"id":94876,"depth":165,"text":94877},{"id":94967,"depth":165,"text":94968},{"id":95007,"depth":165,"text":95008},{"id":95079,"depth":165,"text":95080},{"id":95146,"depth":165,"text":95147},{"id":95197,"depth":165,"text":95198},{"id":95241,"depth":165,"text":95242},{"id":95320,"depth":165,"text":95321},{"id":95387,"depth":165,"text":95388},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94713,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95474,"title":95475,"body":95476,"description":1744,"extension":1745,"meta":96130,"navigation":1474,"path":96131,"seo":96132,"stem":96133,"__hash__":96134},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95477,"toc":96118},[95478,95481,95485,95488,95703,95707,95710,95919,95923,95989,95994,95998,96001,96004,96042,96046,96049,96054,96058,96061,96064,96069,96073,96076,96080,96083,96086,96091,96095,96098,96101,96106,96110,96115],[10,95479,95475],{"id":95480},"_12其他常用函数",[14,95482,95484],{"id":95483},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[103,95486,95487],{},"将数组的数据按照行列复制扩展",[24,95489,95491],{"className":26,"code":95490,"language":28,"meta":29,"style":29},"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",[31,95492,95493,95509,95518,95522,95527,95532,95545,95549,95554,95559,95564,95568,95572,95596,95608,95612,95616,95621,95626,95631,95636,95640,95653,95657,95661,95666,95671,95676,95681,95686,95690,95694,95699],{"__ignoreMap":29},[34,95494,95495,95497,95499,95501,95503,95505,95507],{"class":36,"line":37},[34,95496,236],{"class":40},[34,95498,221],{"class":55},[34,95500,551],{"class":40},[34,95502,394],{"class":44},[34,95504,291],{"class":40},[34,95506,224],{"class":44},[34,95508,101],{"class":40},[34,95510,95511,95514,95516],{"class":36,"line":165},[34,95512,95513],{"class":40},"np.tile(a,",[34,95515,332],{"class":44},[34,95517,101],{"class":40},[34,95519,95520],{"class":36,"line":171},[34,95521,617],{"class":161},[34,95523,95524],{"class":36,"line":182},[34,95525,95526],{"class":161},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[34,95528,95529],{"class":36,"line":188},[34,95530,95531],{"class":161},"#行复制两次，列复制三次\n",[34,95533,95534,95537,95539,95541,95543],{"class":36,"line":518},[34,95535,95536],{"class":40},"np.tile(a,(",[34,95538,332],{"class":44},[34,95540,291],{"class":40},[34,95542,337],{"class":44},[34,95544,296],{"class":40},[34,95546,95547],{"class":36,"line":524},[34,95548,617],{"class":161},[34,95550,95551],{"class":36,"line":530},[34,95552,95553],{"class":504},"'''\n",[34,95555,95556],{"class":36,"line":624},[34,95557,95558],{"class":504},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[34,95560,95561],{"class":36,"line":630},[34,95562,95563],{"class":504},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[34,95565,95566],{"class":36,"line":636},[34,95567,95553],{"class":504},[34,95569,95570],{"class":36,"line":1513},[34,95571,588],{"class":161},[34,95573,95574,95576,95578,95580,95582,95584,95586,95588,95590,95592,95594],{"class":36,"line":1519},[34,95575,275],{"class":40},[34,95577,221],{"class":55},[34,95579,551],{"class":40},[34,95581,394],{"class":44},[34,95583,291],{"class":40},[34,95585,2318],{"class":44},[34,95587,1317],{"class":40},[34,95589,247],{"class":44},[34,95591,291],{"class":40},[34,95593,337],{"class":44},[34,95595,101],{"class":40},[34,95597,95598,95601,95603,95605],{"class":36,"line":3283},[34,95599,95600],{"class":40},"np.tile(aa,",[34,95602,332],{"class":44},[34,95604,918],{"class":40},[34,95606,95607],{"class":161},"#一个数的时候就是行\n",[34,95609,95610],{"class":36,"line":3297},[34,95611,617],{"class":161},[34,95613,95614],{"class":36,"line":3302},[34,95615,95553],{"class":504},[34,95617,95618],{"class":36,"line":3308},[34,95619,95620],{"class":504},"array([[ 1,  2,  3,  1,  2,  3],\n",[34,95622,95623],{"class":36,"line":3328},[34,95624,95625],{"class":504},"       [ 4,  5,  6,  4,  5,  6],\n",[34,95627,95628],{"class":36,"line":3333},[34,95629,95630],{"class":504},"       [ 7,  8,  9,  7,  8,  9],\n",[34,95632,95633],{"class":36,"line":3347},[34,95634,95635],{"class":504},"       [10, 11, 12, 10, 11, 12]])\n",[34,95637,95638],{"class":36,"line":3352},[34,95639,95553],{"class":504},[34,95641,95642,95645,95647,95649,95651],{"class":36,"line":3381},[34,95643,95644],{"class":40},"np.tile(aa,(",[34,95646,332],{"class":44},[34,95648,291],{"class":40},[34,95650,337],{"class":44},[34,95652,296],{"class":40},[34,95654,95655],{"class":36,"line":3386},[34,95656,617],{"class":161},[34,95658,95659],{"class":36,"line":3403},[34,95660,95553],{"class":504},[34,95662,95663],{"class":36,"line":3408},[34,95664,95665],{"class":504},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[34,95667,95668],{"class":36,"line":3413},[34,95669,95670],{"class":504},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[34,95672,95673],{"class":36,"line":3418},[34,95674,95675],{"class":504},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[34,95677,95678],{"class":36,"line":3432},[34,95679,95680],{"class":504},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[34,95682,95683],{"class":36,"line":3437},[34,95684,95685],{"class":504},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[34,95687,95688],{"class":36,"line":4230},[34,95689,95670],{"class":504},[34,95691,95692],{"class":36,"line":4244},[34,95693,95675],{"class":504},[34,95695,95696],{"class":36,"line":4252},[34,95697,95698],{"class":504},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[34,95700,95701],{"class":36,"line":4257},[34,95702,95553],{"class":504},[14,95704,95706],{"id":95705},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[103,95708,95709],{},"repeat()将数组中的每个元素重复若干次",[24,95711,95713],{"className":26,"code":95712,"language":28,"meta":29,"style":29},"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",[31,95714,95715,95731,95740,95744,95749,95773,95778,95787,95791,95796,95800,95805,95821,95825,95829,95834,95839,95844,95848,95853,95857,95862,95867,95871,95887,95891,95895,95900,95905,95910,95915],{"__ignoreMap":29},[34,95716,95717,95719,95721,95723,95725,95727,95729],{"class":36,"line":37},[34,95718,236],{"class":40},[34,95720,221],{"class":55},[34,95722,551],{"class":40},[34,95724,394],{"class":44},[34,95726,291],{"class":40},[34,95728,224],{"class":44},[34,95730,101],{"class":40},[34,95732,95733,95736,95738],{"class":36,"line":165},[34,95734,95735],{"class":40},"np.repeat(a,",[34,95737,337],{"class":44},[34,95739,101],{"class":40},[34,95741,95742],{"class":36,"line":171},[34,95743,617],{"class":161},[34,95745,95746],{"class":36,"line":182},[34,95747,95748],{"class":161},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[34,95750,95751,95753,95755,95757,95759,95761,95763,95765,95767,95769,95771],{"class":36,"line":188},[34,95752,275],{"class":40},[34,95754,221],{"class":55},[34,95756,551],{"class":40},[34,95758,394],{"class":44},[34,95760,291],{"class":40},[34,95762,2318],{"class":44},[34,95764,1317],{"class":40},[34,95766,247],{"class":44},[34,95768,291],{"class":40},[34,95770,337],{"class":44},[34,95772,101],{"class":40},[34,95774,95775],{"class":36,"line":518},[34,95776,95777],{"class":161},"#这个重复之后二维变成一维\n",[34,95779,95780,95783,95785],{"class":36,"line":524},[34,95781,95782],{"class":40},"np.repeat(aa,",[34,95784,332],{"class":44},[34,95786,101],{"class":40},[34,95788,95789],{"class":36,"line":530},[34,95790,95553],{"class":504},[34,95792,95793],{"class":36,"line":624},[34,95794,95795],{"class":504},"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",[34,95797,95798],{"class":36,"line":630},[34,95799,95553],{"class":504},[34,95801,95802],{"class":36,"line":636},[34,95803,95804],{"class":161},"#指定axis\n",[34,95806,95807,95809,95811,95813,95815,95817,95819],{"class":36,"line":1513},[34,95808,95782],{"class":40},[34,95810,332],{"class":44},[34,95812,291],{"class":40},[34,95814,49153],{"class":51},[34,95816,221],{"class":55},[34,95818,177],{"class":44},[34,95820,101],{"class":40},[34,95822,95823],{"class":36,"line":1519},[34,95824,617],{"class":161},[34,95826,95827],{"class":36,"line":3283},[34,95828,95553],{"class":504},[34,95830,95831],{"class":36,"line":3297},[34,95832,95833],{"class":504},"array([[ 1,  2,  3],\n",[34,95835,95836],{"class":36,"line":3302},[34,95837,95838],{"class":504},"       [ 1,  2,  3],\n",[34,95840,95841],{"class":36,"line":3308},[34,95842,95843],{"class":504},"       [ 4,  5,  6],\n",[34,95845,95846],{"class":36,"line":3328},[34,95847,95843],{"class":504},[34,95849,95850],{"class":36,"line":3333},[34,95851,95852],{"class":504},"       [ 7,  8,  9],\n",[34,95854,95855],{"class":36,"line":3347},[34,95856,95852],{"class":504},[34,95858,95859],{"class":36,"line":3352},[34,95860,95861],{"class":504},"       [10, 11, 12],\n",[34,95863,95864],{"class":36,"line":3381},[34,95865,95866],{"class":504},"       [10, 11, 12]])\n",[34,95868,95869],{"class":36,"line":3386},[34,95870,95553],{"class":504},[34,95872,95873,95875,95877,95879,95881,95883,95885],{"class":36,"line":3403},[34,95874,95782],{"class":40},[34,95876,332],{"class":44},[34,95878,291],{"class":40},[34,95880,49153],{"class":51},[34,95882,221],{"class":55},[34,95884,394],{"class":44},[34,95886,101],{"class":40},[34,95888,95889],{"class":36,"line":3408},[34,95890,617],{"class":161},[34,95892,95893],{"class":36,"line":3413},[34,95894,95553],{"class":504},[34,95896,95897],{"class":36,"line":3418},[34,95898,95899],{"class":504},"array([[ 1,  1,  2,  2,  3,  3],\n",[34,95901,95902],{"class":36,"line":3432},[34,95903,95904],{"class":504},"       [ 4,  4,  5,  5,  6,  6],\n",[34,95906,95907],{"class":36,"line":3437},[34,95908,95909],{"class":504},"       [ 7,  7,  8,  8,  9,  9],\n",[34,95911,95912],{"class":36,"line":4230},[34,95913,95914],{"class":504},"       [10, 10, 11, 11, 12, 12]])\n",[34,95916,95917],{"class":36,"line":4244},[34,95918,95553],{"class":504},[14,95920,95922],{"id":95921},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[24,95924,95926],{"className":26,"code":95925,"language":28,"meta":29,"style":29},"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",[31,95927,95928,95944,95949,95961,95965,95970,95980,95984],{"__ignoreMap":29},[34,95929,95930,95932,95934,95936,95938,95940,95942],{"class":36,"line":37},[34,95931,236],{"class":40},[34,95933,221],{"class":55},[34,95935,551],{"class":40},[34,95937,394],{"class":44},[34,95939,291],{"class":40},[34,95941,224],{"class":44},[34,95943,101],{"class":40},[34,95945,95946],{"class":36,"line":165},[34,95947,95948],{"class":161},"#array([，2，3，4])\n",[34,95950,95951,95954,95956,95958],{"class":36,"line":171},[34,95952,95953],{"class":40},"np.roll(a,",[34,95955,332],{"class":44},[34,95957,918],{"class":40},[34,95959,95960],{"class":161},"#传正数向后调多少位，传负数向前调多少位\n",[34,95962,95963],{"class":36,"line":182},[34,95964,617],{"class":161},[34,95966,95967],{"class":36,"line":188},[34,95968,95969],{"class":161},"#array([3, 4, 1, 2])\n",[34,95971,95972,95974,95976,95978],{"class":36,"line":518},[34,95973,95953],{"class":40},[34,95975,2327],{"class":55},[34,95977,394],{"class":44},[34,95979,101],{"class":40},[34,95981,95982],{"class":36,"line":524},[34,95983,617],{"class":161},[34,95985,95986],{"class":36,"line":530},[34,95987,95988],{"class":161},"#array([2, 3, 4, 1])\n",[103,95990,95991],{},[109,95992],{"alt":29,"src":95993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95995,95997],{"id":95996},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[103,95999,96000],{},"resize()重新调整数组的大小",[103,96002,96003],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[24,96005,96007],{"className":26,"code":96006,"language":28,"meta":29,"style":29},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[31,96008,96009,96014,96027],{"__ignoreMap":29},[34,96010,96011],{"class":36,"line":37},[34,96012,96013],{"class":161},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[34,96015,96016,96019,96021,96023,96025],{"class":36,"line":165},[34,96017,96018],{"class":40},"np.resize(aa,(",[34,96020,332],{"class":44},[34,96022,291],{"class":40},[34,96024,1115],{"class":44},[34,96026,296],{"class":40},[34,96028,96029,96031,96033,96035,96037,96039],{"class":36,"line":171},[34,96030,96018],{"class":40},[34,96032,332],{"class":44},[34,96034,291],{"class":40},[34,96036,1324],{"class":44},[34,96038,793],{"class":40},[34,96040,96041],{"class":161},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96043,96045],{"id":96044},"_125-placeput函数","12.5 place()\u002Fput()函数",[103,96047,96048],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[103,96050,96051],{},[109,96052],{"alt":29,"src":96053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96055,96057],{"id":96056},"_126-保存加载文件","12.6 保存加载文件",[103,96059,96060],{},"savetxt():将数据保存到txt文件中",[103,96062,96063],{},"loadtxt():从文件加载数据",[103,96065,96066],{},[109,96067],{"alt":29,"src":96068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96070,96072],{"id":96071},"_127-genfromtxt函数","12.7 genfromtxt()函数",[103,96074,96075],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96077,96079],{"id":96078},"_128-anyall函数","12.8 any()\u002Fall()函数",[103,96081,96082],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[103,96084,96085],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[103,96087,96088],{},[109,96089],{"alt":29,"src":96090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96092,96094],{"id":96093},"_129-where语句","12.9 where语句",[103,96096,96097],{},"np.where(条件,x,y)",[103,96099,96100],{},"如果条件为True,对应值为x,否则对应值为y",[103,96102,96103],{},[109,96104],{"alt":29,"src":96105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96107,96109],{"id":96108},"_1210-dot矩阵","12.10 dot()矩阵",[103,96111,96112],{},[109,96113],{"alt":29,"src":96114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1711,96116,96117],{},"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":29,"searchDepth":165,"depth":165,"links":96119},[96120,96121,96122,96123,96124,96125,96126,96127,96128,96129],{"id":95483,"depth":165,"text":95484},{"id":95705,"depth":165,"text":95706},{"id":95921,"depth":165,"text":95922},{"id":95996,"depth":165,"text":95997},{"id":96044,"depth":165,"text":96045},{"id":96056,"depth":165,"text":96057},{"id":96071,"depth":165,"text":96072},{"id":96078,"depth":165,"text":96079},{"id":96093,"depth":165,"text":96094},{"id":96108,"depth":165,"text":96109},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95475,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96136,"title":96137,"body":96138,"description":1744,"extension":1745,"meta":96489,"navigation":1474,"path":96490,"seo":96491,"stem":96492,"__hash__":96493},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96139,"toc":96487},[96140,96143,96146,96149,96152,96154,96219,96221,96484],[10,96141,96137],{"id":96142},"_13数组排序",[103,96144,96145],{},"排序主要用到的方法是np.sort和np.argsort",[103,96147,96148],{},"其中np.sort()对数组直接排序",[103,96150,96151],{},"而np.argsort()是返回排序后的原始索引",[103,96153,1227],{},[24,96155,96157],{"className":26,"code":96156,"language":28,"meta":29,"style":29},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[31,96158,96159,96163,96203,96211],{"__ignoreMap":29},[34,96160,96161],{"class":36,"line":37},[34,96162,546],{"class":161},[34,96164,96165,96167,96169,96171,96173,96175,96177,96179,96181,96183,96185,96187,96189,96191,96193,96195,96197,96199,96201],{"class":36,"line":165},[34,96166,236],{"class":40},[34,96168,221],{"class":55},[34,96170,94658],{"class":40},[34,96172,337],{"class":44},[34,96174,291],{"class":40},[34,96176,2293],{"class":44},[34,96178,291],{"class":40},[34,96180,2195],{"class":44},[34,96182,291],{"class":40},[34,96184,2568],{"class":44},[34,96186,291],{"class":40},[34,96188,2086],{"class":44},[34,96190,291],{"class":40},[34,96192,2684],{"class":44},[34,96194,291],{"class":40},[34,96196,1115],{"class":44},[34,96198,291],{"class":40},[34,96200,410],{"class":44},[34,96202,1077],{"class":40},[34,96204,96205,96208],{"class":36,"line":171},[34,96206,96207],{"class":40},"np.sort(a)",[34,96209,96210],{"class":161},"#升序排序\n",[34,96212,96213,96216],{"class":36,"line":182},[34,96214,96215],{"class":40},"np.argsort(a)",[34,96217,96218],{"class":161},"#按照元素大小来索引排序\n",[103,96220,1254],{},[24,96222,96224],{"className":26,"code":96223,"language":28,"meta":29,"style":29},"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",[31,96225,96226,96237,96263,96268,96272,96277,96282,96287,96292,96296,96304,96308,96313,96318,96323,96328,96332,96337,96350,96354,96359,96364,96369,96374,96378,96383,96395,96399,96403,96407,96411,96415,96419,96424,96439,96444,96453,96458,96462,96466,96471,96475,96480],{"__ignoreMap":29},[34,96227,96228,96230,96232,96234],{"class":36,"line":37},[34,96229,174],{"class":40},[34,96231,177],{"class":44},[34,96233,918],{"class":40},[34,96235,96236],{"class":161},"#保证每次值一样\n",[34,96238,96239,96241,96243,96245,96247,96249,96251,96253,96255,96257,96259,96261],{"class":36,"line":165},[34,96240,275],{"class":40},[34,96242,221],{"class":55},[34,96244,367],{"class":40},[34,96246,451],{"class":44},[34,96248,291],{"class":40},[34,96250,218],{"class":51},[34,96252,221],{"class":55},[34,96254,286],{"class":40},[34,96256,247],{"class":44},[34,96258,291],{"class":40},[34,96260,1115],{"class":44},[34,96262,296],{"class":40},[34,96264,96265],{"class":36,"line":171},[34,96266,96267],{"class":161},"#原数组：\n",[34,96269,96270],{"class":36,"line":182},[34,96271,95553],{"class":504},[34,96273,96274],{"class":36,"line":188},[34,96275,96276],{"class":504},"array([[44, 47, 64, 67, 67,  9],\n",[34,96278,96279],{"class":36,"line":518},[34,96280,96281],{"class":504},"       [83, 21, 36, 87, 70, 88],\n",[34,96283,96284],{"class":36,"line":524},[34,96285,96286],{"class":504},"       [88, 12, 58, 65, 39, 87],\n",[34,96288,96289],{"class":36,"line":530},[34,96290,96291],{"class":504},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[34,96293,96294],{"class":36,"line":624},[34,96295,95553],{"class":504},[34,96297,96298,96301],{"class":36,"line":630},[34,96299,96300],{"class":40},"np.sort(aa)",[34,96302,96303],{"class":161},"#每行进行了排序\n",[34,96305,96306],{"class":36,"line":636},[34,96307,95553],{"class":504},[34,96309,96310],{"class":36,"line":1513},[34,96311,96312],{"class":504},"array([[ 9, 44, 47, 64, 67, 67],\n",[34,96314,96315],{"class":36,"line":1519},[34,96316,96317],{"class":504},"       [21, 36, 70, 83, 87, 88],\n",[34,96319,96320],{"class":36,"line":3283},[34,96321,96322],{"class":504},"       [12, 39, 58, 65, 87, 88],\n",[34,96324,96325],{"class":36,"line":3297},[34,96326,96327],{"class":504},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[34,96329,96330],{"class":36,"line":3302},[34,96331,95553],{"class":504},[34,96333,96334],{"class":36,"line":3308},[34,96335,96336],{"class":161},"#axis=0时\n",[34,96338,96339,96342,96344,96346,96348],{"class":36,"line":3328},[34,96340,96341],{"class":40},"np.sort(aa,",[34,96343,49153],{"class":51},[34,96345,221],{"class":55},[34,96347,177],{"class":44},[34,96349,101],{"class":40},[34,96351,96352],{"class":36,"line":3333},[34,96353,95553],{"class":504},[34,96355,96356],{"class":36,"line":3347},[34,96357,96358],{"class":504},"array([[44, 12, 36, 37, 25,  9],\n",[34,96360,96361],{"class":36,"line":3352},[34,96362,96363],{"class":504},"       [46, 21, 58, 65, 39, 77],\n",[34,96365,96366],{"class":36,"line":3381},[34,96367,96368],{"class":504},"       [83, 47, 64, 67, 67, 87],\n",[34,96370,96371],{"class":36,"line":3386},[34,96372,96373],{"class":504},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[34,96375,96376],{"class":36,"line":3403},[34,96377,95553],{"class":504},[34,96379,96380],{"class":36,"line":3408},[34,96381,96382],{"class":161},"#axis=1时,为默认值\n",[34,96384,96385,96387,96389,96391,96393],{"class":36,"line":3413},[34,96386,96341],{"class":40},[34,96388,49153],{"class":51},[34,96390,221],{"class":55},[34,96392,394],{"class":44},[34,96394,101],{"class":40},[34,96396,96397],{"class":36,"line":3418},[34,96398,95553],{"class":504},[34,96400,96401],{"class":36,"line":3432},[34,96402,96312],{"class":504},[34,96404,96405],{"class":36,"line":3437},[34,96406,96317],{"class":504},[34,96408,96409],{"class":36,"line":4230},[34,96410,96322],{"class":504},[34,96412,96413],{"class":36,"line":4244},[34,96414,96327],{"class":504},[34,96416,96417],{"class":36,"line":4252},[34,96418,95553],{"class":504},[34,96420,96421],{"class":36,"line":4257},[34,96422,96423],{"class":161},"#按最后一列排序\n",[34,96425,96426,96428,96430,96433,96435,96437],{"class":36,"line":4263},[34,96427,2070],{"class":40},[34,96429,221],{"class":55},[34,96431,96432],{"class":40},"aa[:,",[34,96434,2327],{"class":55},[34,96436,394],{"class":44},[34,96438,34887],{"class":40},[34,96440,96441],{"class":36,"line":4269},[34,96442,96443],{"class":161},"#获取最后一列排好序的索引\n",[34,96445,96446,96448,96450],{"class":36,"line":4274},[34,96447,75697],{"class":40},[34,96449,221],{"class":55},[34,96451,96452],{"class":40},"np.argsort(b)\n",[34,96454,96455],{"class":36,"line":9598},[34,96456,96457],{"class":40},"aa[index]\n",[34,96459,96460],{"class":36,"line":9622},[34,96461,95553],{"class":504},[34,96463,96464],{"class":36,"line":9627},[34,96465,96276],{"class":504},[34,96467,96468],{"class":36,"line":9633},[34,96469,96470],{"class":504},"       [46, 88, 81, 37, 25, 77],\n",[34,96472,96473],{"class":36,"line":9660},[34,96474,96286],{"class":504},[34,96476,96477],{"class":36,"line":9665},[34,96478,96479],{"class":504},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[34,96481,96482],{"class":36,"line":9671},[34,96483,95553],{"class":504},[1711,96485,96486],{},"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":29,"searchDepth":165,"depth":165,"links":96488},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96137,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96495,"title":96496,"body":96497,"description":1744,"extension":1745,"meta":96527,"navigation":1474,"path":96528,"seo":96529,"stem":96530,"__hash__":96531},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96498,"toc":96525},[96499,96502,96505,96508,96511,96514,96517,96520],[10,96500,96496],{"id":96501},"_14广播机制",[103,96503,96504],{},"广播的规则：",[103,96506,96507],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[103,96509,96510],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[103,96512,96513],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[103,96515,96516],{},"3.如果没有维度形状为1，则会引发异常",[103,96518,96519],{},"也就是只有维度或者个数为1才可以进行广播操作",[103,96521,96522],{},[109,96523],{"alt":29,"src":96524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":29,"searchDepth":165,"depth":165,"links":96526},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96496,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96533,"title":96534,"body":96535,"description":1744,"extension":1745,"meta":96633,"navigation":1474,"path":96634,"seo":96635,"stem":96636,"__hash__":96637},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96536,"toc":96631},[96537,96540,96543,96628],[10,96538,96534],{"id":96539},"_15比较掩码",[103,96541,96542],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[24,96544,96546],{"className":26,"code":96545,"language":28,"meta":29,"style":29},"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",[31,96547,96548,96594,96605,96619,96623],{"__ignoreMap":29},[34,96549,96550,96552,96554,96557,96559,96561,96563,96565,96567,96569,96571,96573,96575,96577,96579,96581,96583,96585,96587,96589,96591],{"class":36,"line":37},[34,96551,236],{"class":40},[34,96553,221],{"class":55},[34,96555,96556],{"class":40},"np.array([[",[34,96558,394],{"class":44},[34,96560,291],{"class":40},[34,96562,332],{"class":44},[34,96564,291],{"class":40},[34,96566,337],{"class":44},[34,96568,49669],{"class":40},[34,96570,399],{"class":44},[34,96572,291],{"class":40},[34,96574,2293],{"class":44},[34,96576,291],{"class":40},[34,96578,2318],{"class":44},[34,96580,49669],{"class":40},[34,96582,558],{"class":44},[34,96584,291],{"class":40},[34,96586,2543],{"class":44},[34,96588,291],{"class":40},[34,96590,2568],{"class":44},[34,96592,96593],{"class":40},"]])\n",[34,96595,96596,96598,96600,96602],{"class":36,"line":165},[34,96597,236],{"class":40},[34,96599,2701],{"class":55},[34,96601,1249],{"class":44},[34,96603,96604],{"class":161},"#结果是一个由True,False组成的数组\n",[34,96606,96607,96610,96612,96614,96616],{"class":36,"line":171},[34,96608,96609],{"class":40},"a[a",[34,96611,2701],{"class":55},[34,96613,1249],{"class":44},[34,96615,2731],{"class":40},[34,96617,96618],{"class":161},"#小于20的元素会存到这个数组中\n",[34,96620,96621],{"class":36,"line":182},[34,96622,617],{"class":161},[34,96624,96625],{"class":36,"line":188},[34,96626,96627],{"class":161},"#array([ 1,  2,  3, 11, 12, 13])\n",[1711,96629,96630],{},"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":29,"searchDepth":165,"depth":165,"links":96632},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96534,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96639,"title":96640,"body":96641,"description":1744,"extension":1745,"meta":96733,"navigation":1474,"path":96734,"seo":96735,"stem":96736,"__hash__":96737},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96642,"toc":96731},[96643,96646,96649,96652,96655,96658,96723,96728],[10,96644,96640],{"id":96645},"_16魔法命令time",[103,96647,96648],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[103,96650,96651],{},"%:行模式",[103,96653,96654],{},"%%:单元格模式",[103,96656,96657],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[24,96659,96661],{"className":26,"code":96660,"language":28,"meta":29,"style":29},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[31,96662,96663,96668,96675,96680,96689,96702,96706,96714],{"__ignoreMap":29},[34,96664,96665],{"class":36,"line":37},[34,96666,96667],{"class":161},"#程序执行时间\n",[34,96669,96670,96672],{"class":36,"line":165},[34,96671,32036],{"class":55},[34,96673,96674],{"class":40}," time \n",[34,96676,96677],{"class":36,"line":171},[34,96678,96679],{"class":161},"#获取时间\n",[34,96681,96682,96685,96687],{"class":36,"line":182},[34,96683,96684],{"class":40},"start",[34,96686,221],{"class":55},[34,96688,34059],{"class":40},[34,96690,96691,96694,96697,96699],{"class":36,"line":188},[34,96692,96693],{"class":40},"time.sleep(",[34,96695,96696],{"class":44},"0.4",[34,96698,918],{"class":40},[34,96700,96701],{"class":161},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[34,96703,96704],{"class":36,"line":518},[34,96705,96679],{"class":161},[34,96707,96708,96710,96712],{"class":36,"line":524},[34,96709,47440],{"class":40},[34,96711,221],{"class":55},[34,96713,34059],{"class":40},[34,96715,96716,96718,96720],{"class":36,"line":530},[34,96717,47440],{"class":40},[34,96719,2327],{"class":55},[34,96721,96722],{"class":40},"start\n",[103,96724,96725],{},[109,96726],{"alt":29,"src":96727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1711,96729,96730],{},"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":29,"searchDepth":165,"depth":165,"links":96732},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96640,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96739,"title":96740,"body":96741,"description":1744,"extension":1745,"meta":96776,"navigation":1474,"path":96777,"seo":96778,"stem":96779,"__hash__":96780},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96742,"toc":96774},[96743,96746,96749,96752,96755,96758,96761,96764,96769],[10,96744,96740],{"id":96745},"_17魔法命令timeit",[103,96747,96748],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[103,96750,96751],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[103,96753,96754],{},"单元格模式：",[103,96756,96757],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[103,96759,96760],{},"初始化语句执行次数由轮数来决定",[103,96762,96763],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[103,96765,96766],{},[109,96767],{"alt":29,"src":96768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[103,96770,96771],{},[109,96772],{"alt":29,"src":96773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":29,"searchDepth":165,"depth":165,"links":96775},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96740,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96782,"title":96783,"body":96784,"description":1744,"extension":1745,"meta":96802,"navigation":1474,"path":96803,"seo":96804,"stem":96805,"__hash__":96806},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96785,"toc":96800},[96786,96789,96792,96795],[10,96787,96783],{"id":96788},"_18魔法命令writefile和run",[103,96790,96791],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[103,96793,96794],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[103,96796,96797],{},[109,96798],{"alt":29,"src":96799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":29,"searchDepth":165,"depth":165,"links":96801},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96783,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96808,"title":96809,"body":96810,"description":1744,"extension":1745,"meta":96863,"navigation":1474,"path":96864,"seo":96865,"stem":96866,"__hash__":96867},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96811,"toc":96861},[96812,96815,96818,96820,96823,96826,96831,96834,96837,96840,96843,96846,96849,96852,96855,96858],[10,96813,96809],{"id":96814},"_19魔法命令memit",[103,96816,96817],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[103,96819,26245],{},[103,96821,96822],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[103,96824,96825],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[103,96827,96828],{},[109,96829],{"alt":29,"src":96830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[103,96832,96833],{},"补充：",[103,96835,96836],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[103,96838,96839],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[103,96841,96842],{},"解决方法：",[103,96844,96845],{},"1.cmd",[103,96847,96848],{},"2.依次输入以下代码：",[103,96850,96851],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[103,96853,96854],{},"pip install --upgrade ipython",[103,96856,96857],{},"#升级 memory_profiler 和 setuptools",[103,96859,96860],{},"pip install --upgrade memory_profiler setuptools",{"title":29,"searchDepth":165,"depth":165,"links":96862},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96809,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":4,"title":5,"body":96869,"description":1744,"extension":1745,"meta":98261,"navigation":1474,"path":1747,"seo":98262,"stem":1749,"__hash__":1750},{"type":7,"value":96870,"toc":98231},[96871,96873,96875,96877,96929,96931,96935,96937,96941,96945,96949,96953,96955,96959,96961,96963,96991,96993,96995,96997,97043,97045,97079,97081,97119,97121,97139,97141,97175,97177,97181,97183,97187,97189,97191,97215,97217,97219,97263,97265,97349,97351,97353,97355,97359,97361,97381,97385,97387,97389,97391,97393,97395,97397,97399,97401,97411,97413,97415,97417,97445,97447,97467,97469,97493,97495,97519,97521,97553,97555,97611,97613,97615,97617,97619,97643,97645,97647,97651,97653,97715,97717,97721,97779,97781,97789,97793,97797,97799,97801,97811,97813,97825,97827,97847,97849,97873,97875,97877,97879,97923,97925,97929,97931,97933,97957,97959,97983,97985,97989,97993,98073,98075,98123,98127,98129,98131,98171,98173,98221,98225,98227,98229],[10,96872,5],{"id":12},[14,96874,17],{"id":16},[19,96876,22],{"id":21},[24,96878,96879],{"className":26,"code":27,"language":28,"meta":29,"style":29},[31,96880,96881],{"__ignoreMap":29},[34,96882,96883,96885,96887,96889,96891,96893,96895,96897,96899,96901,96903,96905,96907,96909,96911,96913,96915,96917,96919,96921,96923,96925,96927],{"class":36,"line":37},[34,96884,41],{"class":40},[34,96886,45],{"class":44},[34,96888,48],{"class":40},[34,96890,52],{"class":51},[34,96892,56],{"class":55},[34,96894,59],{"class":44},[34,96896,48],{"class":40},[34,96898,64],{"class":51},[34,96900,56],{"class":55},[34,96902,69],{"class":44},[34,96904,48],{"class":40},[34,96906,74],{"class":51},[34,96908,56],{"class":55},[34,96910,59],{"class":44},[34,96912,48],{"class":40},[34,96914,83],{"class":51},[34,96916,56],{"class":55},[34,96918,88],{"class":44},[34,96920,48],{"class":40},[34,96922,93],{"class":51},[34,96924,56],{"class":55},[34,96926,98],{"class":44},[34,96928,101],{"class":40},[103,96930,105],{},[103,96932,96933],{},[109,96934],{"alt":29,"src":111},[19,96936,115],{"id":114},[103,96938,96939],{},[109,96940],{"alt":29,"src":120},[103,96942,96943],{},[109,96944],{"alt":29,"src":125},[103,96946,96947],{},[109,96948],{"alt":29,"src":130},[103,96950,96951],{},[109,96952],{"alt":29,"src":135},[103,96954,138],{},[103,96956,96957],{},[109,96958],{"alt":29,"src":143},[14,96960,147],{"id":146},[19,96962,151],{"id":150},[24,96964,96965],{"className":26,"code":154,"language":28,"meta":29,"style":29},[31,96966,96967,96971,96975,96983,96987],{"__ignoreMap":29},[34,96968,96969],{"class":36,"line":37},[34,96970,162],{"class":161},[34,96972,96973],{"class":36,"line":165},[34,96974,168],{"class":161},[34,96976,96977,96979,96981],{"class":36,"line":171},[34,96978,174],{"class":40},[34,96980,177],{"class":44},[34,96982,101],{"class":40},[34,96984,96985],{"class":36,"line":182},[34,96986,185],{"class":40},[34,96988,96989],{"class":36,"line":188},[34,96990,191],{"class":161},[103,96992,194],{},[103,96994,197],{},[103,96996,200],{},[24,96998,96999],{"className":26,"code":203,"language":28,"meta":29,"style":29},[31,97000,97001,97005,97017,97021,97037],{"__ignoreMap":29},[34,97002,97003],{"class":36,"line":37},[34,97004,210],{"class":161},[34,97006,97007,97009,97011,97013,97015],{"class":36,"line":165},[34,97008,215],{"class":40},[34,97010,218],{"class":51},[34,97012,221],{"class":55},[34,97014,224],{"class":44},[34,97016,101],{"class":40},[34,97018,97019],{"class":36,"line":171},[34,97020,231],{"class":161},[34,97022,97023,97025,97027,97029,97031,97033,97035],{"class":36,"line":182},[34,97024,236],{"class":40},[34,97026,221],{"class":55},[34,97028,215],{"class":40},[34,97030,218],{"class":51},[34,97032,221],{"class":55},[34,97034,247],{"class":44},[34,97036,101],{"class":40},[34,97038,97039,97041],{"class":36,"line":188},[34,97040,254],{"class":40},[34,97042,257],{"class":161},[103,97044,260],{},[24,97046,97047],{"className":26,"code":263,"language":28,"meta":29,"style":29},[31,97048,97049,97053,97075],{"__ignoreMap":29},[34,97050,97051],{"class":36,"line":37},[34,97052,270],{"class":161},[34,97054,97055,97057,97059,97061,97063,97065,97067,97069,97071,97073],{"class":36,"line":165},[34,97056,275],{"class":40},[34,97058,221],{"class":55},[34,97060,215],{"class":40},[34,97062,218],{"class":51},[34,97064,221],{"class":55},[34,97066,286],{"class":40},[34,97068,247],{"class":44},[34,97070,291],{"class":40},[34,97072,224],{"class":44},[34,97074,296],{"class":40},[34,97076,97077],{"class":36,"line":171},[34,97078,301],{"class":161},[103,97080,304],{},[24,97082,97083],{"className":26,"code":307,"language":28,"meta":29,"style":29},[31,97084,97085,97089,97115],{"__ignoreMap":29},[34,97086,97087],{"class":36,"line":37},[34,97088,314],{"class":161},[34,97090,97091,97093,97095,97097,97099,97101,97103,97105,97107,97109,97111,97113],{"class":36,"line":165},[34,97092,319],{"class":40},[34,97094,221],{"class":55},[34,97096,215],{"class":40},[34,97098,218],{"class":51},[34,97100,221],{"class":55},[34,97102,286],{"class":40},[34,97104,332],{"class":44},[34,97106,291],{"class":40},[34,97108,337],{"class":44},[34,97110,291],{"class":40},[34,97112,247],{"class":44},[34,97114,296],{"class":40},[34,97116,97117],{"class":36,"line":171},[34,97118,348],{"class":40},[19,97120,352],{"id":351},[24,97122,97123],{"className":26,"code":355,"language":28,"meta":29,"style":29},[31,97124,97125,97129],{"__ignoreMap":29},[34,97126,97127],{"class":36,"line":37},[34,97128,362],{"class":161},[34,97130,97131,97133,97135,97137],{"class":36,"line":165},[34,97132,367],{"class":40},[34,97134,224],{"class":44},[34,97136,372],{"class":40},[34,97138,375],{"class":161},[103,97140,200],{},[24,97142,97143],{"className":26,"code":380,"language":28,"meta":29,"style":29},[31,97144,97145,97149,97171],{"__ignoreMap":29},[34,97146,97147],{"class":36,"line":37},[34,97148,387],{"class":161},[34,97150,97151,97153,97155,97157,97159,97161,97163,97165,97167,97169],{"class":36,"line":165},[34,97152,367],{"class":40},[34,97154,394],{"class":44},[34,97156,291],{"class":40},[34,97158,399],{"class":44},[34,97160,291],{"class":40},[34,97162,218],{"class":51},[34,97164,221],{"class":55},[34,97166,286],{"class":40},[34,97168,410],{"class":44},[34,97170,296],{"class":40},[34,97172,97173],{"class":36,"line":171},[34,97174,417],{"class":161},[103,97176,260],{},[103,97178,97179],{},[109,97180],{"alt":29,"src":424},[103,97182,304],{},[103,97184,97185],{},[109,97186],{"alt":29,"src":431},[19,97188,435],{"id":434},[103,97190,438],{},[24,97192,97193],{"className":26,"code":441,"language":28,"meta":29,"style":29},[31,97194,97195,97207,97211],{"__ignoreMap":29},[34,97196,97197,97199,97201,97203,97205],{"class":36,"line":37},[34,97198,448],{"class":40},[34,97200,451],{"class":44},[34,97202,291],{"class":40},[34,97204,410],{"class":44},[34,97206,101],{"class":40},[34,97208,97209],{"class":36,"line":165},[34,97210,462],{"class":161},[34,97212,97213],{"class":36,"line":171},[34,97214,467],{"class":161},[14,97216,471],{"id":470},[19,97218,475],{"id":474},[24,97220,97221],{"className":26,"code":478,"language":28,"meta":29,"style":29},[31,97222,97223,97235,97239,97243,97247,97251,97255,97259],{"__ignoreMap":29},[34,97224,97225,97227,97229,97231,97233],{"class":36,"line":37},[34,97226,485],{"class":40},[34,97228,52],{"class":51},[34,97230,221],{"class":55},[34,97232,492],{"class":44},[34,97234,101],{"class":40},[34,97236,97237],{"class":36,"line":165},[34,97238,499],{"class":161},[34,97240,97241],{"class":36,"line":171},[34,97242,505],{"class":504},[34,97244,97245],{"class":36,"line":182},[34,97246,510],{"class":504},[34,97248,97249],{"class":36,"line":188},[34,97250,515],{"class":504},[34,97252,97253],{"class":36,"line":518},[34,97254,521],{"class":504},[34,97256,97257],{"class":36,"line":524},[34,97258,527],{"class":504},[34,97260,97261],{"class":36,"line":530},[34,97262,505],{"class":504},[19,97264,536],{"id":535},[24,97266,97267],{"className":26,"code":539,"language":28,"meta":29,"style":29},[31,97268,97269,97273,97297,97301,97305,97309,97329,97333,97337,97341,97345],{"__ignoreMap":29},[34,97270,97271],{"class":36,"line":37},[34,97272,546],{"class":161},[34,97274,97275,97277,97279,97281,97283,97285,97287,97289,97291,97293,97295],{"class":36,"line":165},[34,97276,551],{"class":40},[34,97278,394],{"class":44},[34,97280,291],{"class":40},[34,97282,558],{"class":44},[34,97284,291],{"class":40},[34,97286,394],{"class":44},[34,97288,291],{"class":40},[34,97290,52],{"class":51},[34,97292,221],{"class":55},[34,97294,571],{"class":44},[34,97296,101],{"class":40},[34,97298,97299],{"class":36,"line":171},[34,97300,578],{"class":161},[34,97302,97303],{"class":36,"line":182},[34,97304,583],{"class":161},[34,97306,97307],{"class":36,"line":188},[34,97308,588],{"class":161},[34,97310,97311,97313,97315,97317,97319,97321,97323,97325,97327],{"class":36,"line":518},[34,97312,593],{"class":40},[34,97314,394],{"class":44},[34,97316,291],{"class":40},[34,97318,247],{"class":44},[34,97320,602],{"class":40},[34,97322,247],{"class":44},[34,97324,291],{"class":40},[34,97326,609],{"class":44},[34,97328,612],{"class":40},[34,97330,97331],{"class":36,"line":524},[34,97332,617],{"class":161},[34,97334,97335],{"class":36,"line":530},[34,97336,505],{"class":504},[34,97338,97339],{"class":36,"line":624},[34,97340,627],{"class":504},[34,97342,97343],{"class":36,"line":630},[34,97344,633],{"class":504},[34,97346,97347],{"class":36,"line":636},[34,97348,505],{"class":504},[14,97350,642],{"id":641},[19,97352,646],{"id":645},[103,97354,649],{},[103,97356,97357],{},[109,97358],{"alt":29,"src":654},[19,97360,658],{"id":657},[24,97362,97363],{"className":26,"code":661,"language":28,"meta":29,"style":29},[31,97364,97365,97369,97373,97377],{"__ignoreMap":29},[34,97366,97367],{"class":36,"line":37},[34,97368,668],{"class":40},[34,97370,97371],{"class":36,"line":165},[34,97372,673],{"class":161},[34,97374,97375],{"class":36,"line":171},[34,97376,678],{"class":161},[34,97378,97379],{"class":36,"line":182},[34,97380,683],{"class":161},[103,97382,97383],{},[109,97384],{"alt":29,"src":688},[14,97386,692],{"id":691},[103,97388,695],{},[103,97390,698],{},[103,97392,701],{},[103,97394,704],{},[103,97396,707],{},[103,97398,710],{},[103,97400,713],{},[24,97402,97403],{"className":26,"code":716,"language":28,"meta":29,"style":29},[31,97404,97405],{"__ignoreMap":29},[34,97406,97407,97409],{"class":36,"line":37},[34,97408,723],{"class":44},[34,97410,726],{"class":40},[14,97412,730],{"id":729},[19,97414,734],{"id":733},[103,97416,737],{},[24,97418,97419],{"className":26,"code":740,"language":28,"meta":29,"style":29},[31,97420,97421,97429,97433,97437,97441],{"__ignoreMap":29},[34,97422,97423,97425,97427],{"class":36,"line":37},[34,97424,747],{"class":40},[34,97426,410],{"class":44},[34,97428,101],{"class":40},[34,97430,97431],{"class":36,"line":165},[34,97432,505],{"class":504},[34,97434,97435],{"class":36,"line":171},[34,97436,760],{"class":504},[34,97438,97439],{"class":36,"line":182},[34,97440,765],{"class":504},[34,97442,97443],{"class":36,"line":188},[34,97444,505],{"class":504},[103,97446,772],{},[24,97448,97449],{"className":26,"code":775,"language":28,"meta":29,"style":29},[31,97450,97451],{"__ignoreMap":29},[34,97452,97453,97455,97457,97459,97461,97463,97465],{"class":36,"line":37},[34,97454,747],{"class":40},[34,97456,784],{"class":51},[34,97458,221],{"class":55},[34,97460,286],{"class":40},[34,97462,410],{"class":44},[34,97464,793],{"class":40},[34,97466,796],{"class":161},[103,97468,799],{},[24,97470,97471],{"className":26,"code":802,"language":28,"meta":29,"style":29},[31,97472,97473,97477],{"__ignoreMap":29},[34,97474,97475],{"class":36,"line":37},[34,97476,809],{"class":161},[34,97478,97479,97481,97483,97485,97487,97489,97491],{"class":36,"line":165},[34,97480,747],{"class":40},[34,97482,224],{"class":44},[34,97484,291],{"class":40},[34,97486,52],{"class":51},[34,97488,221],{"class":55},[34,97490,571],{"class":44},[34,97492,101],{"class":40},[103,97494,828],{},[24,97496,97497],{"className":26,"code":831,"language":28,"meta":29,"style":29},[31,97498,97499],{"__ignoreMap":29},[34,97500,97501,97503,97505,97507,97509,97511,97513,97515,97517],{"class":36,"line":37},[34,97502,838],{"class":40},[34,97504,337],{"class":44},[34,97506,291],{"class":40},[34,97508,247],{"class":44},[34,97510,847],{"class":40},[34,97512,52],{"class":51},[34,97514,221],{"class":55},[34,97516,571],{"class":44},[34,97518,101],{"class":40},[103,97520,858],{},[24,97522,97523],{"className":26,"code":861,"language":28,"meta":29,"style":29},[31,97524,97525,97529],{"__ignoreMap":29},[34,97526,97527],{"class":36,"line":37},[34,97528,868],{"class":161},[34,97530,97531,97533,97535,97537,97539,97541,97543,97545,97547,97549,97551],{"class":36,"line":165},[34,97532,838],{"class":40},[34,97534,337],{"class":44},[34,97536,291],{"class":40},[34,97538,247],{"class":44},[34,97540,291],{"class":40},[34,97542,224],{"class":44},[34,97544,847],{"class":40},[34,97546,52],{"class":51},[34,97548,221],{"class":55},[34,97550,571],{"class":44},[34,97552,101],{"class":40},[103,97554,895],{},[24,97556,97557],{"className":26,"code":898,"language":28,"meta":29,"style":29},[31,97558,97559,97563,97577,97581,97585,97607],{"__ignoreMap":29},[34,97560,97561],{"class":36,"line":37},[34,97562,905],{"class":161},[34,97564,97565,97567,97569,97571,97573,97575],{"class":36,"line":165},[34,97566,236],{"class":40},[34,97568,221],{"class":55},[34,97570,551],{"class":40},[34,97572,247],{"class":44},[34,97574,918],{"class":40},[34,97576,921],{"class":161},[34,97578,97579],{"class":36,"line":171},[34,97580,926],{"class":40},[34,97582,97583],{"class":36,"line":182},[34,97584,931],{"class":161},[34,97586,97587,97589,97591,97593,97595,97597,97599,97601,97603,97605],{"class":36,"line":188},[34,97588,275],{"class":40},[34,97590,221],{"class":55},[34,97592,215],{"class":40},[34,97594,218],{"class":51},[34,97596,221],{"class":55},[34,97598,286],{"class":40},[34,97600,247],{"class":44},[34,97602,291],{"class":40},[34,97604,224],{"class":44},[34,97606,296],{"class":40},[34,97608,97609],{"class":36,"line":518},[34,97610,958],{"class":40},[19,97612,962],{"id":961},[103,97614,965],{},[19,97616,969],{"id":968},[103,97618,972],{},[24,97620,97621],{"className":26,"code":975,"language":28,"meta":29,"style":29},[31,97622,97623],{"__ignoreMap":29},[34,97624,97625,97627,97629,97631,97633,97635,97637,97639,97641],{"class":36,"line":37},[34,97626,982],{"class":40},[34,97628,52],{"class":51},[34,97630,221],{"class":55},[34,97632,989],{"class":44},[34,97634,291],{"class":40},[34,97636,74],{"class":51},[34,97638,221],{"class":55},[34,97640,998],{"class":504},[34,97642,101],{"class":40},[103,97644,1003],{},[103,97646,1006],{},[103,97648,97649],{},[109,97650],{"alt":29,"src":1011},[103,97652,1014],{},[24,97654,97655],{"className":26,"code":1017,"language":28,"meta":29,"style":29},[31,97656,97657,97677,97689,97707,97711],{"__ignoreMap":29},[34,97658,97659,97661,97663,97665,97667,97669,97671,97673,97675],{"class":36,"line":37},[34,97660,1024],{"class":40},[34,97662,221],{"class":55},[34,97664,1029],{"class":40},[34,97666,410],{"class":44},[34,97668,291],{"class":40},[34,97670,52],{"class":51},[34,97672,221],{"class":55},[34,97674,571],{"class":44},[34,97676,101],{"class":40},[34,97678,97679,97681,97683,97685,97687],{"class":36,"line":165},[34,97680,1046],{"class":40},[34,97682,221],{"class":55},[34,97684,551],{"class":40},[34,97686,224],{"class":44},[34,97688,101],{"class":40},[34,97690,97691,97693,97695,97697,97699,97701,97703,97705],{"class":36,"line":171},[34,97692,1059],{"class":40},[34,97694,332],{"class":44},[34,97696,1064],{"class":40},[34,97698,1067],{"class":51},[34,97700,221],{"class":55},[34,97702,1072],{"class":40},[34,97704,224],{"class":44},[34,97706,1077],{"class":40},[34,97708,97709],{"class":36,"line":182},[34,97710,1082],{"class":161},[34,97712,97713],{"class":36,"line":188},[34,97714,1087],{"class":40},[103,97716,1090],{},[103,97718,97719],{},[109,97720],{"alt":29,"src":1095},[24,97722,97723],{"className":26,"code":1098,"language":28,"meta":29,"style":29},[31,97724,97725,97741,97761,97775],{"__ignoreMap":29},[34,97726,97727,97729,97731,97733,97735,97737,97739],{"class":36,"line":37},[34,97728,1046],{"class":40},[34,97730,221],{"class":55},[34,97732,551],{"class":40},[34,97734,394],{"class":44},[34,97736,291],{"class":40},[34,97738,1115],{"class":44},[34,97740,101],{"class":40},[34,97742,97743,97745,97747,97749,97751,97753,97755,97757,97759],{"class":36,"line":165},[34,97744,1024],{"class":40},[34,97746,221],{"class":55},[34,97748,1029],{"class":40},[34,97750,224],{"class":44},[34,97752,291],{"class":40},[34,97754,52],{"class":51},[34,97756,221],{"class":55},[34,97758,571],{"class":44},[34,97760,101],{"class":40},[34,97762,97763,97765,97767,97769,97771,97773],{"class":36,"line":171},[34,97764,1142],{"class":40},[34,97766,332],{"class":44},[34,97768,291],{"class":40},[34,97770,1067],{"class":51},[34,97772,221],{"class":55},[34,97774,1153],{"class":40},[34,97776,97777],{"class":36,"line":182},[34,97778,1158],{"class":161},[103,97780,1161],{},[103,97782,97783],{},[1165,97784,1167,97785,1173],{},[1165,97786,97787],{},[1165,97788,1172],{},[103,97790,97791,1179],{},[31,97792,1178],{},[103,97794,97795],{},[109,97796],{"alt":29,"src":1184},[19,97798,1188],{"id":1187},[103,97800,1191],{},[24,97802,97803],{"className":26,"code":1194,"language":28,"meta":29,"style":29},[31,97804,97805],{"__ignoreMap":29},[34,97806,97807,97809],{"class":36,"line":37},[34,97808,1201],{"class":40},[34,97810,1205],{"class":1204},[19,97812,1209],{"id":1208},[24,97814,97815],{"className":26,"code":1212,"language":28,"meta":29,"style":29},[31,97816,97817,97821],{"__ignoreMap":29},[34,97818,97819],{"class":36,"line":37},[34,97820,1219],{"class":40},[34,97822,97823],{"class":36,"line":165},[34,97824,1224],{"class":40},[103,97826,1227],{},[24,97828,97829],{"className":26,"code":1230,"language":28,"meta":29,"style":29},[31,97830,97831,97835],{"__ignoreMap":29},[34,97832,97833],{"class":36,"line":37},[34,97834,1237],{"class":161},[34,97836,97837,97839,97841,97843,97845],{"class":36,"line":165},[34,97838,1242],{"class":40},[34,97840,410],{"class":44},[34,97842,291],{"class":40},[34,97844,1249],{"class":44},[34,97846,101],{"class":40},[103,97848,1254],{},[24,97850,97851],{"className":26,"code":1257,"language":28,"meta":29,"style":29},[31,97852,97853,97857],{"__ignoreMap":29},[34,97854,97855],{"class":36,"line":37},[34,97856,588],{"class":161},[34,97858,97859,97861,97863,97865,97867,97869,97871],{"class":36,"line":165},[34,97860,1268],{"class":40},[34,97862,337],{"class":44},[34,97864,291],{"class":40},[34,97866,224],{"class":44},[34,97868,847],{"class":40},[34,97870,399],{"class":44},[34,97872,101],{"class":40},[103,97874,1283],{},[103,97876,1286],{},[103,97878,1289],{},[24,97880,97881],{"className":26,"code":1292,"language":28,"meta":29,"style":29},[31,97882,97883,97887,97911,97915],{"__ignoreMap":29},[34,97884,97885],{"class":36,"line":37},[34,97886,1299],{"class":161},[34,97888,97889,97891,97893,97895,97897,97899,97901,97903,97905,97907,97909],{"class":36,"line":165},[34,97890,236],{"class":40},[34,97892,221],{"class":55},[34,97894,551],{"class":40},[34,97896,394],{"class":44},[34,97898,291],{"class":40},[34,97900,1314],{"class":44},[34,97902,1317],{"class":40},[34,97904,247],{"class":44},[34,97906,291],{"class":40},[34,97908,1324],{"class":44},[34,97910,101],{"class":40},[34,97912,97913],{"class":36,"line":171},[34,97914,1331],{"class":161},[34,97916,97917,97919,97921],{"class":36,"line":182},[34,97918,1336],{"class":40},[34,97920,410],{"class":44},[34,97922,101],{"class":40},[103,97924,1090],{},[103,97926,97927],{},[109,97928],{"alt":29,"src":1347},[19,97930,1351],{"id":1350},[1353,97932,1356],{"id":1355},[24,97934,97935],{"className":26,"code":1359,"language":28,"meta":29,"style":29},[31,97936,97937,97953],{"__ignoreMap":29},[34,97938,97939,97941,97943,97945,97947,97949,97951],{"class":36,"line":37},[34,97940,1366],{"class":40},[34,97942,247],{"class":44},[34,97944,291],{"class":40},[34,97946,52],{"class":51},[34,97948,221],{"class":55},[34,97950,571],{"class":44},[34,97952,101],{"class":40},[34,97954,97955],{"class":36,"line":165},[34,97956,1383],{"class":161},[1353,97958,1387],{"id":1386},[24,97960,97961],{"className":26,"code":1390,"language":28,"meta":29,"style":29},[31,97962,97963,97967],{"__ignoreMap":29},[34,97964,97965],{"class":36,"line":37},[34,97966,1397],{"class":161},[34,97968,97969,97971,97973,97975,97977,97979,97981],{"class":36,"line":165},[34,97970,1402],{"class":40},[34,97972,224],{"class":44},[34,97974,291],{"class":40},[34,97976,52],{"class":51},[34,97978,221],{"class":55},[34,97980,571],{"class":44},[34,97982,101],{"class":40},[103,97984,1417],{},[103,97986,97987],{},[109,97988],{"alt":29,"src":1422},[103,97990,97991],{},[109,97992],{"alt":29,"src":1427},[24,97994,97995],{"className":26,"code":1430,"language":28,"meta":29,"style":29},[31,97996,97997,98001,98013,98017,98021,98025,98029,98033,98037,98057,98061,98065,98069],{"__ignoreMap":29},[34,97998,97999],{"class":36,"line":37},[34,98000,1437],{"class":161},[34,98002,98003,98005,98007,98009,98011],{"class":36,"line":165},[34,98004,1366],{"class":40},[34,98006,337],{"class":44},[34,98008,48],{"class":40},[34,98010,247],{"class":44},[34,98012,101],{"class":40},[34,98014,98015],{"class":36,"line":171},[34,98016,1454],{"class":161},[34,98018,98019],{"class":36,"line":182},[34,98020,1459],{"class":161},[34,98022,98023],{"class":36,"line":188},[34,98024,1464],{"class":161},[34,98026,98027],{"class":36,"line":518},[34,98028,1469],{"class":161},[34,98030,98031],{"class":36,"line":524},[34,98032,1475],{"emptyLinePlaceholder":1474},[34,98034,98035],{"class":36,"line":530},[34,98036,1480],{"class":161},[34,98038,98039,98041,98043,98045,98047,98049,98051,98053,98055],{"class":36,"line":624},[34,98040,1366],{"class":40},[34,98042,337],{"class":44},[34,98044,48],{"class":40},[34,98046,247],{"class":44},[34,98048,48],{"class":40},[34,98050,1495],{"class":51},[34,98052,221],{"class":55},[34,98054,394],{"class":44},[34,98056,101],{"class":40},[34,98058,98059],{"class":36,"line":630},[34,98060,1454],{"class":161},[34,98062,98063],{"class":36,"line":636},[34,98064,1510],{"class":161},[34,98066,98067],{"class":36,"line":1513},[34,98068,1516],{"class":161},[34,98070,98071],{"class":36,"line":1519},[34,98072,1522],{"class":161},[19,98074,1526],{"id":1525},[24,98076,98077],{"className":26,"code":1529,"language":28,"meta":29,"style":29},[31,98078,98079,98083,98087,98091,98095,98099,98103,98107,98111,98115,98119],{"__ignoreMap":29},[34,98080,98081],{"class":36,"line":37},[34,98082,1536],{"class":161},[34,98084,98085],{"class":36,"line":165},[34,98086,505],{"class":504},[34,98088,98089],{"class":36,"line":171},[34,98090,1545],{"class":504},[34,98092,98093],{"class":36,"line":182},[34,98094,1550],{"class":504},[34,98096,98097],{"class":36,"line":188},[34,98098,1555],{"class":504},[34,98100,98101],{"class":36,"line":518},[34,98102,1560],{"class":504},[34,98104,98105],{"class":36,"line":524},[34,98106,1565],{"class":504},[34,98108,98109],{"class":36,"line":530},[34,98110,1570],{"class":504},[34,98112,98113],{"class":36,"line":624},[34,98114,1575],{"class":504},[34,98116,98117],{"class":36,"line":630},[34,98118,1580],{"class":504},[34,98120,98121],{"class":36,"line":636},[34,98122,505],{"class":504},[103,98124,98125],{},[109,98126],{"alt":29,"src":1589},[103,98128,1592],{},[103,98130,1595],{},[24,98132,98133],{"className":26,"code":1598,"language":28,"meta":29,"style":29},[31,98134,98135,98151],{"__ignoreMap":29},[34,98136,98137,98139,98141,98143,98145,98147,98149],{"class":36,"line":37},[34,98138,1605],{"class":40},[34,98140,394],{"class":44},[34,98142,291],{"class":40},[34,98144,224],{"class":44},[34,98146,291],{"class":40},[34,98148,224],{"class":44},[34,98150,101],{"class":40},[34,98152,98153,98155,98157,98159,98161,98163,98165,98167,98169],{"class":36,"line":165},[34,98154,1605],{"class":40},[34,98156,394],{"class":44},[34,98158,291],{"class":40},[34,98160,224],{"class":44},[34,98162,291],{"class":40},[34,98164,1632],{"class":51},[34,98166,221],{"class":55},[34,98168,224],{"class":44},[34,98170,101],{"class":40},[19,98172,1642],{"id":1641},[24,98174,98175],{"className":26,"code":1645,"language":28,"meta":29,"style":29},[31,98176,98177,98181,98185,98189,98193,98197,98201,98205,98209,98213,98217],{"__ignoreMap":29},[34,98178,98179],{"class":36,"line":37},[34,98180,1652],{"class":161},[34,98182,98183],{"class":36,"line":165},[34,98184,505],{"class":504},[34,98186,98187],{"class":36,"line":171},[34,98188,1661],{"class":504},[34,98190,98191],{"class":36,"line":182},[34,98192,1666],{"class":504},[34,98194,98195],{"class":36,"line":188},[34,98196,1671],{"class":504},[34,98198,98199],{"class":36,"line":518},[34,98200,1676],{"class":504},[34,98202,98203],{"class":36,"line":524},[34,98204,1565],{"class":504},[34,98206,98207],{"class":36,"line":530},[34,98208,1685],{"class":504},[34,98210,98211],{"class":36,"line":624},[34,98212,1690],{"class":504},[34,98214,98215],{"class":36,"line":630},[34,98216,1580],{"class":504},[34,98218,98219],{"class":36,"line":636},[34,98220,505],{"class":504},[103,98222,98223],{},[109,98224],{"alt":29,"src":1703},[103,98226,1706],{},[103,98228,1709],{},[1711,98230,1713],{},{"title":29,"searchDepth":165,"depth":165,"links":98232},[98233,98237,98242,98246,98250,98251],{"id":16,"depth":165,"text":17,"children":98234},[98235,98236],{"id":21,"depth":171,"text":22},{"id":114,"depth":171,"text":115},{"id":146,"depth":165,"text":147,"children":98238},[98239,98240,98241],{"id":150,"depth":171,"text":151},{"id":351,"depth":171,"text":352},{"id":434,"depth":171,"text":435},{"id":470,"depth":165,"text":471,"children":98243},[98244,98245],{"id":474,"depth":171,"text":475},{"id":535,"depth":171,"text":536},{"id":641,"depth":165,"text":642,"children":98247},[98248,98249],{"id":645,"depth":171,"text":646},{"id":657,"depth":171,"text":658},{"id":691,"depth":165,"text":692},{"id":729,"depth":165,"text":730,"children":98252},[98253,98254,98255,98256,98257,98258,98259,98260],{"id":733,"depth":171,"text":734},{"id":961,"depth":171,"text":962},{"id":968,"depth":171,"text":969},{"id":1187,"depth":171,"text":1188},{"id":1208,"depth":171,"text":1209},{"id":1350,"depth":171,"text":1351},{"id":1525,"depth":171,"text":1526},{"id":1641,"depth":171,"text":1642},{},{"title":5,"description":1744},{"id":98264,"title":98265,"body":98266,"description":1744,"extension":1745,"meta":98359,"navigation":1474,"path":98360,"seo":98361,"stem":98362,"__hash__":98363},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98267,"toc":98357},[98268,98271,98274,98277,98280,98283,98286,98289,98292,98295,98298,98301,98303,98306,98309,98314,98317,98320,98354],[10,98269,98265],{"id":98270},"_20魔法命令mprun",[103,98272,98273],{},"逐行分析数据内存的使用情况",[103,98275,98276],{},"语法格式：",[103,98278,98279],{},"%mprun -f 模块名.函数名 模块名.函数名()",[103,98281,98282],{},"分析结果列如下：",[103,98284,98285],{},"Line行号",[103,98287,98288],{},"Mem usage内存使用大小",[103,98290,98291],{},"increment内存增量",[103,98293,98294],{},"Line content代码内容",[103,98296,98297],{},"补充说明：",[103,98299,98300],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[103,98302,96825],{},[103,98304,98305],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[103,98307,98308],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[103,98310,98311],{},[109,98312],{"alt":29,"src":98313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[103,98315,98316],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[103,98318,98319],{},"这时候需要重新加载模块",[24,98321,98323],{"className":26,"code":98322,"language":28,"meta":29,"style":29},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[31,98324,98325,98330,98337,98342],{"__ignoreMap":29},[34,98326,98327],{"class":36,"line":37},[34,98328,98329],{"class":161},"#重新加载模块\n",[34,98331,98332,98334],{"class":36,"line":165},[34,98333,32036],{"class":55},[34,98335,98336],{"class":40}," importlib\n",[34,98338,98339],{"class":36,"line":171},[34,98340,98341],{"class":40},"importlib.reload(mprun_test)\n",[34,98343,98344,98346,98349,98351],{"class":36,"line":182},[34,98345,2131],{"class":55},[34,98347,98348],{"class":40},"mprun ",[34,98350,2327],{"class":55},[34,98352,98353],{"class":40},"f mprun_test.fun_test mprun_test.fun_test()\n",[1711,98355,98356],{},"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":29,"searchDepth":165,"depth":165,"links":98358},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98265,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98365,"title":98366,"body":98367,"description":1744,"extension":1745,"meta":98384,"navigation":1474,"path":98385,"seo":98386,"stem":98387,"__hash__":98388},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98368,"toc":98382},[98369,98372,98377],[10,98370,98366],{"id":98371},"_3一维数组的索引和切片",[103,98373,98374],{},[109,98375],{"alt":29,"src":98376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[103,98378,98379],{},[109,98380],{"alt":29,"src":98381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":29,"searchDepth":165,"depth":165,"links":98383},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98366,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98390,"title":98391,"body":98392,"description":1744,"extension":1745,"meta":98875,"navigation":1474,"path":98876,"seo":98877,"stem":98878,"__hash__":98879},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98393,"toc":98873},[98394,98397,98400,98405,98438,98441,98479,98482,98516,98519,98624,98627,98664,98667,98768,98771,98822,98825,98867,98870],[10,98395,98391],{"id":98396},"_4二维数组的索引与切片",[103,98398,98399],{},"①获取指定单个元素",[103,98401,98402],{},[109,98403],{"alt":29,"src":98404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[24,98406,98408],{"className":26,"code":98407,"language":28,"meta":29,"style":29},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[31,98409,98410,98415,98420,98425],{"__ignoreMap":29},[34,98411,98412],{"class":36,"line":37},[34,98413,98414],{"class":161},"#获取元素9\n",[34,98416,98417],{"class":36,"line":165},[34,98418,98419],{"class":161},"#先获取所在行，再获取所在列\n",[34,98421,98422],{"class":36,"line":171},[34,98423,98424],{"class":161},"#数组[行索引号，列索引号]\n",[34,98426,98427,98430,98432,98434,98436],{"class":36,"line":182},[34,98428,98429],{"class":40},"a[",[34,98431,394],{"class":44},[34,98433,291],{"class":40},[34,98435,332],{"class":44},[34,98437,34887],{"class":40},[103,98439,98440],{},"②获取整行元素",[24,98442,98444],{"className":26,"code":98443,"language":28,"meta":29,"style":29},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[31,98445,98446,98451,98456,98464,98469],{"__ignoreMap":29},[34,98447,98448],{"class":36,"line":37},[34,98449,98450],{"class":161},"#获取整行 数组[行索引号]\n",[34,98452,98453],{"class":36,"line":165},[34,98454,98455],{"class":161},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[34,98457,98458,98460,98462],{"class":36,"line":171},[34,98459,98429],{"class":40},[34,98461,332],{"class":44},[34,98463,34887],{"class":40},[34,98465,98466],{"class":36,"line":182},[34,98467,98468],{"class":161},"#也可以负索引获取一行\n",[34,98470,98471,98473,98475,98477],{"class":36,"line":188},[34,98472,98429],{"class":40},[34,98474,2327],{"class":55},[34,98476,394],{"class":44},[34,98478,34887],{"class":40},[103,98480,98481],{},"③获取整列元素",[24,98483,98485],{"className":26,"code":98484,"language":28,"meta":29,"style":29},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[31,98486,98487,98492,98501,98506],{"__ignoreMap":29},[34,98488,98489],{"class":36,"line":37},[34,98490,98491],{"class":161},"#获取整列 数组名[:,列索引]\n",[34,98493,98494,98497,98499],{"class":36,"line":165},[34,98495,98496],{"class":40},"a[:,",[34,98498,332],{"class":44},[34,98500,34887],{"class":40},[34,98502,98503],{"class":36,"line":171},[34,98504,98505],{"class":161},"#也可以负索引获取一列\n",[34,98507,98508,98510,98512,98514],{"class":36,"line":182},[34,98509,98496],{"class":40},[34,98511,2327],{"class":55},[34,98513,394],{"class":44},[34,98515,34887],{"class":40},[103,98517,98518],{},"④部分行部分列的元素",[24,98520,98522],{"className":26,"code":98521,"language":28,"meta":29,"style":29},"#部分行部分列 数组名[行切片，列切片]\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",[31,98523,98524,98529,98539,98543,98547,98552,98557,98561,98573,98577,98581,98586,98591,98596,98601,98605,98610],{"__ignoreMap":29},[34,98525,98526],{"class":36,"line":37},[34,98527,98528],{"class":161},"#部分行部分列 数组名[行切片，列切片]\n",[34,98530,98531,98534,98536],{"class":36,"line":165},[34,98532,98533],{"class":40},"a[:",[34,98535,332],{"class":44},[34,98537,98538],{"class":40},",:]\n",[34,98540,98541],{"class":36,"line":171},[34,98542,617],{"class":161},[34,98544,98545],{"class":36,"line":182},[34,98546,95553],{"class":504},[34,98548,98549],{"class":36,"line":188},[34,98550,98551],{"class":504},"array([[ 1,  2,  3,  4,  5,  6],\n",[34,98553,98554],{"class":36,"line":518},[34,98555,98556],{"class":504},"       [ 7,  8,  9, 10, 11, 12]])\n",[34,98558,98559],{"class":36,"line":524},[34,98560,95553],{"class":504},[34,98562,98563,98565,98567,98569,98571],{"class":36,"line":530},[34,98564,98496],{"class":40},[34,98566,394],{"class":44},[34,98568,2650],{"class":40},[34,98570,247],{"class":44},[34,98572,34887],{"class":40},[34,98574,98575],{"class":36,"line":624},[34,98576,617],{"class":161},[34,98578,98579],{"class":36,"line":630},[34,98580,95553],{"class":504},[34,98582,98583],{"class":36,"line":636},[34,98584,98585],{"class":504},"array([[ 2,  3,  4],\n",[34,98587,98588],{"class":36,"line":1513},[34,98589,98590],{"class":504},"       [ 8,  9, 10],\n",[34,98592,98593],{"class":36,"line":1519},[34,98594,98595],{"class":504},"       [14, 15, 16],\n",[34,98597,98598],{"class":36,"line":3283},[34,98599,98600],{"class":504},"       [20, 21, 22]])\n",[34,98602,98603],{"class":36,"line":3297},[34,98604,95553],{"class":504},[34,98606,98607],{"class":36,"line":3302},[34,98608,98609],{"class":161},"#对列行同时进行切片，使用了step参数\n",[34,98611,98612,98615,98617,98620,98622],{"class":36,"line":3308},[34,98613,98614],{"class":40},"a[::",[34,98616,332],{"class":44},[34,98618,98619],{"class":40},",::",[34,98621,332],{"class":44},[34,98623,34887],{"class":40},[103,98625,98626],{},"⑤同时获取两个元素",[24,98628,98630],{"className":26,"code":98629,"language":28,"meta":29,"style":29},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[31,98631,98632,98637,98642],{"__ignoreMap":29},[34,98633,98634],{"class":36,"line":37},[34,98635,98636],{"class":161},"#同时获取第三行第二列，第四行第一列\n",[34,98638,98639],{"class":36,"line":165},[34,98640,98641],{"class":161},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[34,98643,98644,98647,98649,98651,98653,98655,98657,98659,98661],{"class":36,"line":171},[34,98645,98646],{"class":40},"a[(",[34,98648,332],{"class":44},[34,98650,291],{"class":40},[34,98652,337],{"class":44},[34,98654,43887],{"class":40},[34,98656,394],{"class":44},[34,98658,291],{"class":40},[34,98660,177],{"class":44},[34,98662,98663],{"class":40},")]\n",[103,98665,98666],{},"⑥切片，对行进行反向获取",[24,98668,98670],{"className":26,"code":98669,"language":28,"meta":29,"style":29},"#切片 对所有行进行反向获取\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",[31,98671,98672,98677,98687,98691,98695,98700,98705,98710,98715,98719,98724,98740,98744,98749,98754,98759,98764],{"__ignoreMap":29},[34,98673,98674],{"class":36,"line":37},[34,98675,98676],{"class":161},"#切片 对所有行进行反向获取\n",[34,98678,98679,98681,98683,98685],{"class":36,"line":165},[34,98680,98614],{"class":40},[34,98682,2327],{"class":55},[34,98684,394],{"class":44},[34,98686,34887],{"class":40},[34,98688,98689],{"class":36,"line":171},[34,98690,617],{"class":161},[34,98692,98693],{"class":36,"line":182},[34,98694,95553],{"class":504},[34,98696,98697],{"class":36,"line":188},[34,98698,98699],{"class":504},"array([[19, 20, 21, 22, 23, 24],\n",[34,98701,98702],{"class":36,"line":518},[34,98703,98704],{"class":504},"       [13, 14, 15, 16, 17, 18],\n",[34,98706,98707],{"class":36,"line":524},[34,98708,98709],{"class":504},"       [ 7,  8,  9, 10, 11, 12],\n",[34,98711,98712],{"class":36,"line":530},[34,98713,98714],{"class":504},"       [ 1,  2,  3,  4,  5,  6]])\n",[34,98716,98717],{"class":36,"line":624},[34,98718,95553],{"class":504},[34,98720,98721],{"class":36,"line":630},[34,98722,98723],{"class":161},"#对行列都进行反向切片获取\n",[34,98725,98726,98728,98730,98732,98734,98736,98738],{"class":36,"line":636},[34,98727,98614],{"class":40},[34,98729,2327],{"class":55},[34,98731,394],{"class":44},[34,98733,98619],{"class":40},[34,98735,2327],{"class":55},[34,98737,394],{"class":44},[34,98739,34887],{"class":40},[34,98741,98742],{"class":36,"line":1513},[34,98743,95553],{"class":504},[34,98745,98746],{"class":36,"line":1519},[34,98747,98748],{"class":504},"array([[24, 23, 22, 21, 20, 19],\n",[34,98750,98751],{"class":36,"line":3283},[34,98752,98753],{"class":504},"       [18, 17, 16, 15, 14, 13],\n",[34,98755,98756],{"class":36,"line":3297},[34,98757,98758],{"class":504},"       [12, 11, 10,  9,  8,  7],\n",[34,98760,98761],{"class":36,"line":3302},[34,98762,98763],{"class":504},"       [ 6,  5,  4,  3,  2,  1]])\n",[34,98765,98766],{"class":36,"line":3308},[34,98767,95553],{"class":504},[103,98769,98770],{},"⑦修改元素",[24,98772,98774],{"className":26,"code":98773,"language":28,"meta":29,"style":29},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[31,98775,98776,98781,98799,98804],{"__ignoreMap":29},[34,98777,98778],{"class":36,"line":37},[34,98779,98780],{"class":161},"#获取前两行和前两列\n",[34,98782,98783,98786,98788,98790,98792,98795,98797],{"class":36,"line":165},[34,98784,98785],{"class":40},"sub_a",[34,98787,221],{"class":55},[34,98789,98533],{"class":40},[34,98791,332],{"class":44},[34,98793,98794],{"class":40},",:",[34,98796,332],{"class":44},[34,98798,34887],{"class":40},[34,98800,98801],{"class":36,"line":171},[34,98802,98803],{"class":161},"#修改sub_a第一个元素的值\n",[34,98805,98806,98809,98811,98813,98815,98817,98819],{"class":36,"line":182},[34,98807,98808],{"class":40},"sub_a[",[34,98810,177],{"class":44},[34,98812,291],{"class":40},[34,98814,177],{"class":44},[34,98816,2731],{"class":40},[34,98818,221],{"class":55},[34,98820,98821],{"class":44},"100\n",[103,98823,98824],{},"⑧数组复制copy()",[24,98826,98828],{"className":26,"code":98827,"language":28,"meta":29,"style":29},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[31,98829,98830,98835,98845,98850],{"__ignoreMap":29},[34,98831,98832],{"class":36,"line":37},[34,98833,98834],{"class":161},"#数组复制\n",[34,98836,98837,98840,98842],{"class":36,"line":165},[34,98838,98839],{"class":40},"copy_a",[34,98841,221],{"class":55},[34,98843,98844],{"class":40},"np.copy(sub_a)\n",[34,98846,98847],{"class":36,"line":171},[34,98848,98849],{"class":161},"#修改copy_a后不影响原数组\n",[34,98851,98852,98855,98857,98859,98861,98863,98865],{"class":36,"line":182},[34,98853,98854],{"class":40},"copy_a[",[34,98856,177],{"class":44},[34,98858,291],{"class":40},[34,98860,177],{"class":44},[34,98862,2731],{"class":40},[34,98864,221],{"class":55},[34,98866,98821],{"class":44},[103,98868,98869],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1711,98871,98872],{},"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":29,"searchDepth":165,"depth":165,"links":98874},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98391,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98881,"title":98882,"body":98883,"description":1744,"extension":1745,"meta":99375,"navigation":1474,"path":99376,"seo":99377,"stem":99378,"__hash__":99379},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98884,"toc":99367},[98885,98888,98892,98895,98898,98951,98954,98979,98982,99001,99021,99024,99040,99044,99090,99094,99136,99140,99143,99146,99149,99152,99155,99217,99277,99281,99284,99341,99345,99350,99359,99364],[10,98886,98882],{"id":98887},"_5改变数组的维度",[14,98889,98891],{"id":98890},"_51-使用reshape","5.1 使用reshape()",[103,98893,98894],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[103,98896,98897],{},"①一维数组转换为二维数组",[24,98899,98901],{"className":26,"code":98900,"language":28,"meta":29,"style":29},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[31,98902,98903,98919,98924,98929,98934],{"__ignoreMap":29},[34,98904,98905,98907,98909,98911,98913,98915,98917],{"class":36,"line":37},[34,98906,236],{"class":40},[34,98908,221],{"class":55},[34,98910,551],{"class":40},[34,98912,394],{"class":44},[34,98914,291],{"class":40},[34,98916,2318],{"class":44},[34,98918,101],{"class":40},[34,98920,98921],{"class":36,"line":165},[34,98922,98923],{"class":161},"#将一维数组进行转换\n",[34,98925,98926],{"class":36,"line":171},[34,98927,98928],{"class":161},"#注意点：元素个数不可以变\n",[34,98930,98931],{"class":36,"line":182},[34,98932,98933],{"class":161},"#转换维度要保持一致，不一致就异常！！！\n",[34,98935,98936,98938,98940,98943,98945,98947,98949],{"class":36,"line":188},[34,98937,275],{"class":40},[34,98939,221],{"class":55},[34,98941,98942],{"class":40},"a.reshape(",[34,98944,332],{"class":44},[34,98946,291],{"class":40},[34,98948,1115],{"class":44},[34,98950,101],{"class":40},[103,98952,98953],{},"②一维数组转换为三维数组",[24,98955,98957],{"className":26,"code":98956,"language":28,"meta":29,"style":29},"aaa=a.reshape(2,3,2)\n",[31,98958,98959],{"__ignoreMap":29},[34,98960,98961,98963,98965,98967,98969,98971,98973,98975,98977],{"class":36,"line":37},[34,98962,319],{"class":40},[34,98964,221],{"class":55},[34,98966,98942],{"class":40},[34,98968,332],{"class":44},[34,98970,291],{"class":40},[34,98972,337],{"class":44},[34,98974,291],{"class":40},[34,98976,332],{"class":44},[34,98978,101],{"class":40},[103,98980,98981],{},"③二维数组转化为一维数组",[24,98983,98985],{"className":26,"code":98984,"language":28,"meta":29,"style":29},"#知道元素个数：\naa.reshape(12)\n",[31,98986,98987,98992],{"__ignoreMap":29},[34,98988,98989],{"class":36,"line":37},[34,98990,98991],{"class":161},"#知道元素个数：\n",[34,98993,98994,98997,98999],{"class":36,"line":165},[34,98995,98996],{"class":40},"aa.reshape(",[34,98998,2293],{"class":44},[34,99000,101],{"class":40},[24,99002,99004],{"className":26,"code":99003,"language":28,"meta":29,"style":29},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[31,99005,99006,99011],{"__ignoreMap":29},[34,99007,99008],{"class":36,"line":37},[34,99009,99010],{"class":161},"#不知道元素个数，参数传递-1\n",[34,99012,99013,99015,99017,99019],{"class":36,"line":165},[34,99014,98996],{"class":40},[34,99016,2327],{"class":55},[34,99018,394],{"class":44},[34,99020,101],{"class":40},[103,99022,99023],{},"④三维数组转换为一维数组",[24,99025,99027],{"className":26,"code":99026,"language":28,"meta":29,"style":29},"aaa.reshape(-1)\n",[31,99028,99029],{"__ignoreMap":29},[34,99030,99031,99034,99036,99038],{"class":36,"line":37},[34,99032,99033],{"class":40},"aaa.reshape(",[34,99035,2327],{"class":55},[34,99037,394],{"class":44},[34,99039,101],{"class":40},[14,99041,99043],{"id":99042},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[24,99045,99047],{"className":26,"code":99046,"language":28,"meta":29,"style":29},"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",[31,99048,99049,99076,99081,99085],{"__ignoreMap":29},[34,99050,99051,99053,99055,99057,99059,99061,99063,99065,99067,99069,99071,99073],{"class":36,"line":37},[34,99052,275],{"class":40},[34,99054,221],{"class":55},[34,99056,551],{"class":40},[34,99058,394],{"class":44},[34,99060,291],{"class":40},[34,99062,2318],{"class":44},[34,99064,1317],{"class":40},[34,99066,332],{"class":44},[34,99068,291],{"class":40},[34,99070,1115],{"class":44},[34,99072,918],{"class":40},[34,99074,99075],{"class":161},"#转换为2行6列的数组\n",[34,99077,99078],{"class":36,"line":165},[34,99079,99080],{"class":40},"aa.revel()\n",[34,99082,99083],{"class":36,"line":171},[34,99084,617],{"class":161},[34,99086,99087],{"class":36,"line":182},[34,99088,99089],{"class":161},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99091,99093],{"id":99092},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[24,99095,99097],{"className":26,"code":99096,"language":28,"meta":29,"style":29},"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",[31,99098,99099,99123,99128,99132],{"__ignoreMap":29},[34,99100,99101,99103,99105,99107,99109,99111,99113,99115,99117,99119,99121],{"class":36,"line":37},[34,99102,275],{"class":40},[34,99104,221],{"class":55},[34,99106,551],{"class":40},[34,99108,394],{"class":44},[34,99110,291],{"class":40},[34,99112,2318],{"class":44},[34,99114,1317],{"class":40},[34,99116,332],{"class":44},[34,99118,291],{"class":40},[34,99120,1115],{"class":44},[34,99122,101],{"class":40},[34,99124,99125],{"class":36,"line":165},[34,99126,99127],{"class":40},"aa.flatten()\n",[34,99129,99130],{"class":36,"line":171},[34,99131,617],{"class":161},[34,99133,99134],{"class":36,"line":182},[34,99135,99089],{"class":161},[14,99137,99139],{"id":99138},"_54-使用resize","5.4 使用resize()",[103,99141,99142],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[103,99144,99145],{},"通过resize方法可以改变数组的维度",[103,99147,99148],{},"#resize修改数组维度",[103,99150,99151],{},"#以元组的形式指定形状",[103,99153,99154],{},"#改变的是原数组",[24,99156,99158],{"className":26,"code":99157,"language":28,"meta":29,"style":29},"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",[31,99159,99160,99176,99196,99209,99213],{"__ignoreMap":29},[34,99161,99162,99164,99166,99168,99170,99172,99174],{"class":36,"line":37},[34,99163,236],{"class":40},[34,99165,221],{"class":55},[34,99167,551],{"class":40},[34,99169,394],{"class":44},[34,99171,291],{"class":40},[34,99173,2318],{"class":44},[34,99175,101],{"class":40},[34,99177,99178,99181,99183,99185,99187,99189,99191,99193],{"class":36,"line":165},[34,99179,99180],{"class":40},"a.shape",[34,99182,221],{"class":55},[34,99184,286],{"class":40},[34,99186,332],{"class":44},[34,99188,291],{"class":40},[34,99190,1115],{"class":44},[34,99192,918],{"class":40},[34,99194,99195],{"class":161},"#改变了原数组\n",[34,99197,99198,99200,99202,99205,99207],{"class":36,"line":171},[34,99199,236],{"class":40},[34,99201,221],{"class":55},[34,99203,99204],{"class":40},"resize((",[34,99206,2293],{"class":44},[34,99208,296],{"class":40},[34,99210,99211],{"class":36,"line":182},[34,99212,617],{"class":161},[34,99214,99215],{"class":36,"line":188},[34,99216,99089],{"class":161},[24,99218,99220],{"className":26,"code":99219,"language":28,"meta":29,"style":29},"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",[31,99221,99222,99235,99239,99243,99248,99253,99258,99263,99268,99273],{"__ignoreMap":29},[34,99223,99224,99227,99229,99231,99233],{"class":36,"line":37},[34,99225,99226],{"class":40},"a.resize((",[34,99228,1115],{"class":44},[34,99230,291],{"class":40},[34,99232,332],{"class":44},[34,99234,296],{"class":40},[34,99236,99237],{"class":36,"line":165},[34,99238,617],{"class":161},[34,99240,99241],{"class":36,"line":171},[34,99242,95553],{"class":504},[34,99244,99245],{"class":36,"line":182},[34,99246,99247],{"class":504},"array([[ 1,  2],\n",[34,99249,99250],{"class":36,"line":188},[34,99251,99252],{"class":504},"       [ 3,  4],\n",[34,99254,99255],{"class":36,"line":518},[34,99256,99257],{"class":504},"       [ 5,  6],\n",[34,99259,99260],{"class":36,"line":524},[34,99261,99262],{"class":504},"       [ 7,  8],\n",[34,99264,99265],{"class":36,"line":530},[34,99266,99267],{"class":504},"       [ 9, 10],\n",[34,99269,99270],{"class":36,"line":624},[34,99271,99272],{"class":504},"       [11, 12]])\n",[34,99274,99275],{"class":36,"line":630},[34,99276,95553],{"class":504},[14,99278,99280],{"id":99279},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[103,99282,99283],{},"改变了原数组",[24,99285,99287],{"className":26,"code":99286,"language":28,"meta":29,"style":29},"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",[31,99288,99289,99305,99321,99325,99329,99333,99337],{"__ignoreMap":29},[34,99290,99291,99293,99295,99297,99299,99301,99303],{"class":36,"line":37},[34,99292,236],{"class":40},[34,99294,221],{"class":55},[34,99296,551],{"class":40},[34,99298,394],{"class":44},[34,99300,291],{"class":40},[34,99302,2318],{"class":44},[34,99304,101],{"class":40},[34,99306,99307,99309,99311,99313,99315,99317,99319],{"class":36,"line":165},[34,99308,99180],{"class":40},[34,99310,221],{"class":55},[34,99312,286],{"class":40},[34,99314,332],{"class":44},[34,99316,291],{"class":40},[34,99318,1115],{"class":44},[34,99320,101],{"class":40},[34,99322,99323],{"class":36,"line":171},[34,99324,617],{"class":161},[34,99326,99327],{"class":36,"line":182},[34,99328,95553],{"class":504},[34,99330,99331],{"class":36,"line":188},[34,99332,98551],{"class":504},[34,99334,99335],{"class":36,"line":518},[34,99336,98556],{"class":504},[34,99338,99339],{"class":36,"line":524},[34,99340,95553],{"class":504},[14,99342,99344],{"id":99343},"_56-重要比较","5.6 重要比较：",[103,99346,99347],{},[109,99348],{"alt":29,"src":99349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[103,99351,99352,99353,99355,99356,99358],{},"口诀：NumPy 函数要么用 ",[31,99354,784],{},"，要么用 ",[31,99357,218],{},"，创建结构用 shape，造数据用 size",[103,99360,99361],{},[109,99362],{"alt":29,"src":99363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1711,99365,99366],{},"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":29,"searchDepth":165,"depth":165,"links":99368},[99369,99370,99371,99372,99373,99374],{"id":98890,"depth":165,"text":98891},{"id":99042,"depth":165,"text":99043},{"id":99092,"depth":165,"text":99093},{"id":99138,"depth":165,"text":99139},{"id":99279,"depth":165,"text":99280},{"id":99343,"depth":165,"text":99344},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98882,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99381,"title":99382,"body":99383,"description":1744,"extension":1745,"meta":100455,"navigation":1474,"path":100456,"seo":100457,"stem":100458,"__hash__":100459},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99384,"toc":100449},[99385,99388,99392,99395,99398,99401,99466,99469,99509,99512,99594,99597,99602,99624,99626,99631,99636,99639,99642,99797,99800,100002,100006,100009,100012,100080,100082,100087,100090,100093,100173,100177,100180,100182,100255,100257,100262,100264,100344,100348,100351,100354,100357,100360,100363,100366,100446],[10,99386,99382],{"id":99387},"_6数组的拼接",[14,99389,99391],{"id":99390},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[103,99393,99394],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[103,99396,99397],{},"函数内部传两个数列构成的数列或者元组",[103,99399,99400],{},"①一维数组的拼接",[24,99402,99404],{"className":26,"code":99403,"language":28,"meta":29,"style":29},"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",[31,99405,99406,99426,99446,99451,99456,99461],{"__ignoreMap":29},[34,99407,99408,99410,99412,99414,99416,99418,99420,99422,99424],{"class":36,"line":37},[34,99409,236],{"class":40},[34,99411,221],{"class":55},[34,99413,94658],{"class":40},[34,99415,394],{"class":44},[34,99417,291],{"class":40},[34,99419,332],{"class":44},[34,99421,291],{"class":40},[34,99423,337],{"class":44},[34,99425,1077],{"class":40},[34,99427,99428,99430,99432,99434,99436,99438,99440,99442,99444],{"class":36,"line":165},[34,99429,2070],{"class":40},[34,99431,221],{"class":55},[34,99433,94658],{"class":40},[34,99435,247],{"class":44},[34,99437,291],{"class":40},[34,99439,224],{"class":44},[34,99441,291],{"class":40},[34,99443,1115],{"class":44},[34,99445,1077],{"class":40},[34,99447,99448],{"class":36,"line":171},[34,99449,99450],{"class":161},"#调用concatenate进行数组拼接\n",[34,99452,99453],{"class":36,"line":182},[34,99454,99455],{"class":40},"np.concatenate((a,b))\n",[34,99457,99458],{"class":36,"line":188},[34,99459,99460],{"class":161},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[34,99462,99463],{"class":36,"line":518},[34,99464,99465],{"class":161},"#np.concatenate([a,b])\n",[103,99467,99468],{},"②一维多个数组拼接",[24,99470,99472],{"className":26,"code":99471,"language":28,"meta":29,"style":29},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[31,99473,99474,99479,99499,99504],{"__ignoreMap":29},[34,99475,99476],{"class":36,"line":37},[34,99477,99478],{"class":161},"#也可以多个数组进行拼接\n",[34,99480,99481,99483,99485,99487,99489,99491,99493,99495,99497],{"class":36,"line":165},[34,99482,2095],{"class":40},[34,99484,221],{"class":55},[34,99486,94658],{"class":40},[34,99488,410],{"class":44},[34,99490,291],{"class":40},[34,99492,399],{"class":44},[34,99494,291],{"class":40},[34,99496,2318],{"class":44},[34,99498,1077],{"class":40},[34,99500,99501],{"class":36,"line":171},[34,99502,99503],{"class":40},"c\n",[34,99505,99506],{"class":36,"line":182},[34,99507,99508],{"class":40},"np.concatenate((a,b,c))\n",[103,99510,99511],{},"③二维数组拼接",[24,99513,99515],{"className":26,"code":99514,"language":28,"meta":29,"style":29},"#二维数组使用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",[31,99516,99517,99522,99546,99571,99576,99581],{"__ignoreMap":29},[34,99518,99519],{"class":36,"line":37},[34,99520,99521],{"class":161},"#二维数组使用concatenate进行拼接\n",[34,99523,99524,99526,99528,99530,99532,99534,99536,99538,99540,99542,99544],{"class":36,"line":165},[34,99525,275],{"class":40},[34,99527,221],{"class":55},[34,99529,551],{"class":40},[34,99531,394],{"class":44},[34,99533,291],{"class":40},[34,99535,2318],{"class":44},[34,99537,1317],{"class":40},[34,99539,337],{"class":44},[34,99541,291],{"class":40},[34,99543,247],{"class":44},[34,99545,101],{"class":40},[34,99547,99548,99551,99553,99555,99557,99559,99561,99563,99565,99567,99569],{"class":36,"line":171},[34,99549,99550],{"class":40},"bb",[34,99552,221],{"class":55},[34,99554,551],{"class":40},[34,99556,2140],{"class":44},[34,99558,291],{"class":40},[34,99560,2437],{"class":44},[34,99562,1317],{"class":40},[34,99564,337],{"class":44},[34,99566,291],{"class":40},[34,99568,247],{"class":44},[34,99570,101],{"class":40},[34,99572,99573],{"class":36,"line":182},[34,99574,99575],{"class":161},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[34,99577,99578],{"class":36,"line":188},[34,99579,99580],{"class":161},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[34,99582,99583,99586,99588,99590,99592],{"class":36,"line":518},[34,99584,99585],{"class":40},"np.concatenate((aa,bb),",[34,99587,49153],{"class":51},[34,99589,221],{"class":55},[34,99591,177],{"class":44},[34,99593,101],{"class":40},[103,99595,99596],{},"结果：",[103,99598,99599],{},[109,99600],{"alt":29,"src":99601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[24,99603,99605],{"className":26,"code":99604,"language":28,"meta":29,"style":29},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[31,99606,99607,99612],{"__ignoreMap":29},[34,99608,99609],{"class":36,"line":37},[34,99610,99611],{"class":161},"#指定axis为1进行拼接\n",[34,99613,99614,99616,99618,99620,99622],{"class":36,"line":165},[34,99615,99585],{"class":40},[34,99617,49153],{"class":51},[34,99619,221],{"class":55},[34,99621,394],{"class":44},[34,99623,101],{"class":40},[103,99625,99596],{},[103,99627,99628],{},[109,99629],{"alt":29,"src":99630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[103,99632,99633],{},[1165,99634,99635],{},"二维数组总结：0竖着方向，1横着方向",[103,99637,99638],{},"④三维数组拼接",[103,99640,99641],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[24,99643,99645],{"className":26,"code":99644,"language":28,"meta":29,"style":29},"#两个三行六列\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",[31,99646,99647,99652,99680,99710,99715,99732,99737,99742,99747,99764,99769,99774,99779,99792],{"__ignoreMap":29},[34,99648,99649],{"class":36,"line":37},[34,99650,99651],{"class":161},"#两个三行六列\n",[34,99653,99654,99656,99658,99660,99662,99664,99666,99668,99670,99672,99674,99676,99678],{"class":36,"line":165},[34,99655,319],{"class":40},[34,99657,221],{"class":55},[34,99659,551],{"class":40},[34,99661,394],{"class":44},[34,99663,291],{"class":40},[34,99665,1314],{"class":44},[34,99667,1317],{"class":40},[34,99669,332],{"class":44},[34,99671,291],{"class":40},[34,99673,337],{"class":44},[34,99675,291],{"class":40},[34,99677,1115],{"class":44},[34,99679,101],{"class":40},[34,99681,99682,99685,99687,99689,99691,99693,99696,99698,99700,99702,99704,99706,99708],{"class":36,"line":171},[34,99683,99684],{"class":40},"bbb",[34,99686,221],{"class":55},[34,99688,551],{"class":40},[34,99690,2140],{"class":44},[34,99692,291],{"class":40},[34,99694,99695],{"class":44},"137",[34,99697,1317],{"class":40},[34,99699,332],{"class":44},[34,99701,291],{"class":40},[34,99703,337],{"class":44},[34,99705,291],{"class":40},[34,99707,1115],{"class":44},[34,99709,101],{"class":40},[34,99711,99712],{"class":36,"line":182},[34,99713,99714],{"class":161},"#axis=0\n",[34,99716,99717,99719,99721,99724,99726,99728,99730],{"class":36,"line":188},[34,99718,2490],{"class":40},[34,99720,221],{"class":55},[34,99722,99723],{"class":40},"np.concatenate((aaa,bbb),",[34,99725,49153],{"class":51},[34,99727,221],{"class":55},[34,99729,177],{"class":44},[34,99731,101],{"class":40},[34,99733,99734],{"class":36,"line":518},[34,99735,99736],{"class":40},"s.shape\n",[34,99738,99739],{"class":36,"line":524},[34,99740,99741],{"class":161},"#输出：(4,3,6)\n",[34,99743,99744],{"class":36,"line":530},[34,99745,99746],{"class":161},"#axis=1\n",[34,99748,99749,99752,99754,99756,99758,99760,99762],{"class":36,"line":624},[34,99750,99751],{"class":40},"ss",[34,99753,221],{"class":55},[34,99755,99723],{"class":40},[34,99757,49153],{"class":51},[34,99759,221],{"class":55},[34,99761,394],{"class":44},[34,99763,101],{"class":40},[34,99765,99766],{"class":36,"line":630},[34,99767,99768],{"class":40},"ss.shape\n",[34,99770,99771],{"class":36,"line":636},[34,99772,99773],{"class":161},"#输出：(2,6,6)\n",[34,99775,99776],{"class":36,"line":1513},[34,99777,99778],{"class":161},"#axis=2\n",[34,99780,99781,99783,99785,99787,99789],{"class":36,"line":1519},[34,99782,99723],{"class":40},[34,99784,49153],{"class":51},[34,99786,221],{"class":55},[34,99788,332],{"class":44},[34,99790,99791],{"class":40},").shape\n",[34,99793,99794],{"class":36,"line":3283},[34,99795,99796],{"class":161},"#输出：（2，3，12）\n",[103,99798,99799],{},"⑤四维数组拼接",[24,99801,99803],{"className":26,"code":99802,"language":28,"meta":29,"style":29},"#两个三行六列\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",[31,99804,99805,99809,99837,99865,99890,99916,99920,99933,99938,99942,99954,99959,99963,99975,99980,99985,99997],{"__ignoreMap":29},[34,99806,99807],{"class":36,"line":37},[34,99808,99651],{"class":161},[34,99810,99811,99813,99815,99817,99819,99821,99823,99825,99827,99829,99831,99833,99835],{"class":36,"line":165},[34,99812,319],{"class":40},[34,99814,221],{"class":55},[34,99816,551],{"class":40},[34,99818,394],{"class":44},[34,99820,291],{"class":40},[34,99822,1314],{"class":44},[34,99824,1317],{"class":40},[34,99826,332],{"class":44},[34,99828,291],{"class":40},[34,99830,337],{"class":44},[34,99832,291],{"class":40},[34,99834,1115],{"class":44},[34,99836,101],{"class":40},[34,99838,99839,99841,99843,99845,99847,99849,99851,99853,99855,99857,99859,99861,99863],{"class":36,"line":171},[34,99840,99684],{"class":40},[34,99842,221],{"class":55},[34,99844,551],{"class":40},[34,99846,2140],{"class":44},[34,99848,291],{"class":40},[34,99850,99695],{"class":44},[34,99852,1317],{"class":40},[34,99854,332],{"class":44},[34,99856,291],{"class":40},[34,99858,337],{"class":44},[34,99860,291],{"class":40},[34,99862,1115],{"class":44},[34,99864,101],{"class":40},[34,99866,99867,99870,99872,99874,99876,99878,99880,99882,99884,99886,99888],{"class":36,"line":182},[34,99868,99869],{"class":40},"aaaa",[34,99871,221],{"class":55},[34,99873,99033],{"class":40},[34,99875,332],{"class":44},[34,99877,291],{"class":40},[34,99879,337],{"class":44},[34,99881,291],{"class":40},[34,99883,337],{"class":44},[34,99885,291],{"class":40},[34,99887,332],{"class":44},[34,99889,101],{"class":40},[34,99891,99892,99895,99897,99900,99902,99904,99906,99908,99910,99912,99914],{"class":36,"line":188},[34,99893,99894],{"class":40},"bbbb",[34,99896,221],{"class":55},[34,99898,99899],{"class":40},"bbb.reshape(",[34,99901,332],{"class":44},[34,99903,291],{"class":40},[34,99905,337],{"class":44},[34,99907,291],{"class":40},[34,99909,337],{"class":44},[34,99911,291],{"class":40},[34,99913,332],{"class":44},[34,99915,101],{"class":40},[34,99917,99918],{"class":36,"line":518},[34,99919,99714],{"class":161},[34,99921,99922,99925,99927,99929,99931],{"class":36,"line":524},[34,99923,99924],{"class":40},"np.concatenate((aaaa,bbbb),",[34,99926,49153],{"class":51},[34,99928,221],{"class":55},[34,99930,177],{"class":44},[34,99932,99791],{"class":40},[34,99934,99935],{"class":36,"line":530},[34,99936,99937],{"class":161},"#结果：（4，3，3，2）\n",[34,99939,99940],{"class":36,"line":624},[34,99941,99746],{"class":161},[34,99943,99944,99946,99948,99950,99952],{"class":36,"line":630},[34,99945,99924],{"class":40},[34,99947,49153],{"class":51},[34,99949,221],{"class":55},[34,99951,394],{"class":44},[34,99953,99791],{"class":40},[34,99955,99956],{"class":36,"line":636},[34,99957,99958],{"class":161},"#结果：（2，6，3，2）\n",[34,99960,99961],{"class":36,"line":1513},[34,99962,99778],{"class":161},[34,99964,99965,99967,99969,99971,99973],{"class":36,"line":1519},[34,99966,99924],{"class":40},[34,99968,49153],{"class":51},[34,99970,221],{"class":55},[34,99972,332],{"class":44},[34,99974,99791],{"class":40},[34,99976,99977],{"class":36,"line":3283},[34,99978,99979],{"class":161},"#结果：（2，3，6，2）\n",[34,99981,99982],{"class":36,"line":3297},[34,99983,99984],{"class":161},"#axis=3\n",[34,99986,99987,99989,99991,99993,99995],{"class":36,"line":3302},[34,99988,99924],{"class":40},[34,99990,49153],{"class":51},[34,99992,221],{"class":55},[34,99994,337],{"class":44},[34,99996,99791],{"class":40},[34,99998,99999],{"class":36,"line":3308},[34,100000,100001],{"class":161},"#结果：（2，3，3，4）\n",[14,100003,100005],{"id":100004},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[103,100007,100008],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[103,100010,100011],{},"①二维数组",[24,100013,100015],{"className":26,"code":100014,"language":28,"meta":29,"style":29},"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",[31,100016,100017,100041,100065,100070,100075],{"__ignoreMap":29},[34,100018,100019,100021,100023,100025,100027,100029,100031,100033,100035,100037,100039],{"class":36,"line":37},[34,100020,275],{"class":40},[34,100022,221],{"class":55},[34,100024,551],{"class":40},[34,100026,394],{"class":44},[34,100028,291],{"class":40},[34,100030,2318],{"class":44},[34,100032,1317],{"class":40},[34,100034,337],{"class":44},[34,100036,291],{"class":40},[34,100038,247],{"class":44},[34,100040,101],{"class":40},[34,100042,100043,100045,100047,100049,100051,100053,100055,100057,100059,100061,100063],{"class":36,"line":165},[34,100044,99550],{"class":40},[34,100046,221],{"class":55},[34,100048,551],{"class":40},[34,100050,2140],{"class":44},[34,100052,291],{"class":40},[34,100054,2437],{"class":44},[34,100056,1317],{"class":40},[34,100058,337],{"class":44},[34,100060,291],{"class":40},[34,100062,247],{"class":44},[34,100064,101],{"class":40},[34,100066,100067],{"class":36,"line":171},[34,100068,100069],{"class":40},"np.hstack((aa,bb))\n",[34,100071,100072],{"class":36,"line":182},[34,100073,100074],{"class":161},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[34,100076,100077],{"class":36,"line":188},[34,100078,100079],{"class":161},"#np.hstack([aa,bb])\n",[103,100081,99596],{},[103,100083,100084],{},[109,100085],{"alt":29,"src":100086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[103,100088,100089],{},"等效于concatenate()函数中axis=1时的情况",[103,100091,100092],{},"②三维数组",[24,100094,100096],{"className":26,"code":100095,"language":28,"meta":29,"style":29},"#两个三行六列\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",[31,100097,100098,100102,100130,100158,100163,100168],{"__ignoreMap":29},[34,100099,100100],{"class":36,"line":37},[34,100101,99651],{"class":161},[34,100103,100104,100106,100108,100110,100112,100114,100116,100118,100120,100122,100124,100126,100128],{"class":36,"line":165},[34,100105,319],{"class":40},[34,100107,221],{"class":55},[34,100109,551],{"class":40},[34,100111,394],{"class":44},[34,100113,291],{"class":40},[34,100115,1314],{"class":44},[34,100117,1317],{"class":40},[34,100119,332],{"class":44},[34,100121,291],{"class":40},[34,100123,337],{"class":44},[34,100125,291],{"class":40},[34,100127,1115],{"class":44},[34,100129,101],{"class":40},[34,100131,100132,100134,100136,100138,100140,100142,100144,100146,100148,100150,100152,100154,100156],{"class":36,"line":171},[34,100133,99684],{"class":40},[34,100135,221],{"class":55},[34,100137,551],{"class":40},[34,100139,2140],{"class":44},[34,100141,291],{"class":40},[34,100143,99695],{"class":44},[34,100145,1317],{"class":40},[34,100147,332],{"class":44},[34,100149,291],{"class":40},[34,100151,337],{"class":44},[34,100153,291],{"class":40},[34,100155,1115],{"class":44},[34,100157,101],{"class":40},[34,100159,100160],{"class":36,"line":182},[34,100161,100162],{"class":161},"#使用hstack\n",[34,100164,100165],{"class":36,"line":188},[34,100166,100167],{"class":40},"np.hstack((aaa,bbb)).shape\n",[34,100169,100170],{"class":36,"line":518},[34,100171,100172],{"class":161},"#输出：（2，6，6）\n",[14,100174,100176],{"id":100175},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[103,100178,100179],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[103,100181,100011],{},[24,100183,100185],{"className":26,"code":100184,"language":28,"meta":29,"style":29},"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",[31,100186,100187,100211,100235,100240,100245,100250],{"__ignoreMap":29},[34,100188,100189,100191,100193,100195,100197,100199,100201,100203,100205,100207,100209],{"class":36,"line":37},[34,100190,275],{"class":40},[34,100192,221],{"class":55},[34,100194,551],{"class":40},[34,100196,394],{"class":44},[34,100198,291],{"class":40},[34,100200,2318],{"class":44},[34,100202,1317],{"class":40},[34,100204,337],{"class":44},[34,100206,291],{"class":40},[34,100208,247],{"class":44},[34,100210,101],{"class":40},[34,100212,100213,100215,100217,100219,100221,100223,100225,100227,100229,100231,100233],{"class":36,"line":165},[34,100214,99550],{"class":40},[34,100216,221],{"class":55},[34,100218,551],{"class":40},[34,100220,2140],{"class":44},[34,100222,291],{"class":40},[34,100224,2437],{"class":44},[34,100226,1317],{"class":40},[34,100228,337],{"class":44},[34,100230,291],{"class":40},[34,100232,247],{"class":44},[34,100234,101],{"class":40},[34,100236,100237],{"class":36,"line":171},[34,100238,100239],{"class":161},"#vstack 垂直方向进行堆叠\n",[34,100241,100242],{"class":36,"line":182},[34,100243,100244],{"class":40},"np.vstack((aa,bb))\n",[34,100246,100247],{"class":36,"line":188},[34,100248,100249],{"class":161},"#与hstack传的参数类似，等价于：\n",[34,100251,100252],{"class":36,"line":518},[34,100253,100254],{"class":40},"np.vstack([aa,bb])\n",[103,100256,99596],{},[103,100258,100259],{},[109,100260],{"alt":29,"src":100261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[103,100263,100092],{},[24,100265,100267],{"className":26,"code":100266,"language":28,"meta":29,"style":29},"#两个三行六列\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",[31,100268,100269,100273,100301,100329,100334,100339],{"__ignoreMap":29},[34,100270,100271],{"class":36,"line":37},[34,100272,99651],{"class":161},[34,100274,100275,100277,100279,100281,100283,100285,100287,100289,100291,100293,100295,100297,100299],{"class":36,"line":165},[34,100276,319],{"class":40},[34,100278,221],{"class":55},[34,100280,551],{"class":40},[34,100282,394],{"class":44},[34,100284,291],{"class":40},[34,100286,1314],{"class":44},[34,100288,1317],{"class":40},[34,100290,332],{"class":44},[34,100292,291],{"class":40},[34,100294,337],{"class":44},[34,100296,291],{"class":40},[34,100298,1115],{"class":44},[34,100300,101],{"class":40},[34,100302,100303,100305,100307,100309,100311,100313,100315,100317,100319,100321,100323,100325,100327],{"class":36,"line":171},[34,100304,99684],{"class":40},[34,100306,221],{"class":55},[34,100308,551],{"class":40},[34,100310,2140],{"class":44},[34,100312,291],{"class":40},[34,100314,99695],{"class":44},[34,100316,1317],{"class":40},[34,100318,332],{"class":44},[34,100320,291],{"class":40},[34,100322,337],{"class":44},[34,100324,291],{"class":40},[34,100326,1115],{"class":44},[34,100328,101],{"class":40},[34,100330,100331],{"class":36,"line":182},[34,100332,100333],{"class":161},"#使用vstack\n",[34,100335,100336],{"class":36,"line":188},[34,100337,100338],{"class":40},"np.vstack((aaa,bbb)).shape\n",[34,100340,100341],{"class":36,"line":518},[34,100342,100343],{"class":161},"#输出：（4，3，6）\n",[14,100345,100347],{"id":100346},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[103,100349,100350],{},"该方法是三维数组特有的方法",[103,100352,100353],{},"也就是说",[103,100355,100356],{},"一维数组拼接方法用：concatenate()",[103,100358,100359],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[103,100361,100362],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[103,100364,100365],{},"四维数组及多维数组只能用concatenate进行拼接",[24,100367,100369],{"className":26,"code":100368,"language":28,"meta":29,"style":29},"#两个三行六列\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",[31,100370,100371,100375,100403,100431,100436,100441],{"__ignoreMap":29},[34,100372,100373],{"class":36,"line":37},[34,100374,99651],{"class":161},[34,100376,100377,100379,100381,100383,100385,100387,100389,100391,100393,100395,100397,100399,100401],{"class":36,"line":165},[34,100378,319],{"class":40},[34,100380,221],{"class":55},[34,100382,551],{"class":40},[34,100384,394],{"class":44},[34,100386,291],{"class":40},[34,100388,1314],{"class":44},[34,100390,1317],{"class":40},[34,100392,332],{"class":44},[34,100394,291],{"class":40},[34,100396,337],{"class":44},[34,100398,291],{"class":40},[34,100400,1115],{"class":44},[34,100402,101],{"class":40},[34,100404,100405,100407,100409,100411,100413,100415,100417,100419,100421,100423,100425,100427,100429],{"class":36,"line":171},[34,100406,99684],{"class":40},[34,100408,221],{"class":55},[34,100410,551],{"class":40},[34,100412,2140],{"class":44},[34,100414,291],{"class":40},[34,100416,99695],{"class":44},[34,100418,1317],{"class":40},[34,100420,332],{"class":44},[34,100422,291],{"class":40},[34,100424,337],{"class":44},[34,100426,291],{"class":40},[34,100428,1115],{"class":44},[34,100430,101],{"class":40},[34,100432,100433],{"class":36,"line":182},[34,100434,100435],{"class":161},"#使用dstack\n",[34,100437,100438],{"class":36,"line":188},[34,100439,100440],{"class":40},"np.dstack((aaa,bbb)).shape\n",[34,100442,100443],{"class":36,"line":518},[34,100444,100445],{"class":161},"#结果：（2，3，12）\n",[1711,100447,100448],{},"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":29,"searchDepth":165,"depth":165,"links":100450},[100451,100452,100453,100454],{"id":99390,"depth":165,"text":99391},{"id":100004,"depth":165,"text":100005},{"id":100175,"depth":165,"text":100176},{"id":100346,"depth":165,"text":100347},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99382,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100461,"title":100462,"body":100463,"description":1744,"extension":1745,"meta":100738,"navigation":1474,"path":100739,"seo":100740,"stem":100741,"__hash__":100742},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100464,"toc":100736},[100465,100468,100471,100565,100568,100571,100574,100577,100580,100583,100586,100589,100733],[10,100466,100462],{"id":100467},"_7数组转置",[103,100469,100470],{},"使用transpose()函数",[24,100472,100474],{"className":26,"code":100473,"language":28,"meta":29,"style":29},"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",[31,100475,100476,100486,100510,100515,100520,100525,100530,100538,100542,100546,100551,100556,100561],{"__ignoreMap":29},[34,100477,100478,100480,100482,100484],{"class":36,"line":37},[34,100479,32036],{"class":55},[34,100481,33022],{"class":40},[34,100483,33025],{"class":55},[34,100485,33028],{"class":40},[34,100487,100488,100490,100492,100494,100496,100498,100500,100502,100504,100506,100508],{"class":36,"line":165},[34,100489,236],{"class":40},[34,100491,221],{"class":55},[34,100493,33358],{"class":40},[34,100495,394],{"class":44},[34,100497,291],{"class":40},[34,100499,2318],{"class":44},[34,100501,1317],{"class":40},[34,100503,247],{"class":44},[34,100505,291],{"class":40},[34,100507,337],{"class":44},[34,100509,101],{"class":40},[34,100511,100512],{"class":36,"line":171},[34,100513,100514],{"class":161},"#二维数组转置\n",[34,100516,100517],{"class":36,"line":182},[34,100518,100519],{"class":161},"#调用transpose()函数\n",[34,100521,100522],{"class":36,"line":188},[34,100523,100524],{"class":40},"a.transpose()\n",[34,100526,100527],{"class":36,"line":518},[34,100528,100529],{"class":161},"#对于二维数组也可以采用.T来实现\n",[34,100531,100532,100535],{"class":36,"line":524},[34,100533,100534],{"class":40},"a.T",[34,100536,100537],{"class":161},"#与上述代码一样\n",[34,100539,100540],{"class":36,"line":530},[34,100541,617],{"class":161},[34,100543,100544],{"class":36,"line":624},[34,100545,95553],{"class":504},[34,100547,100548],{"class":36,"line":630},[34,100549,100550],{"class":504},"array([[ 1,  4,  7, 10],\n",[34,100552,100553],{"class":36,"line":636},[34,100554,100555],{"class":504},"       [ 2,  5,  8, 11],\n",[34,100557,100558],{"class":36,"line":1513},[34,100559,100560],{"class":504},"       [ 3,  6,  9, 12]])\n",[34,100562,100563],{"class":36,"line":1519},[34,100564,95553],{"class":504},[103,100566,100567],{},"也可以使用np.transpose()的形式",[103,100569,100570],{},"#多维数组进行转置 np.transpose()",[103,100572,100573],{},"#对二维数组也可以使用np.transpose()进行转置",[103,100575,100576],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[103,100578,100579],{},"第二个参数，维度可以理解为用axis中的数来理解",[103,100581,100582],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[103,100584,100585],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[103,100587,100588],{},"四维及以上的数组也是一样的道理",[24,100590,100592],{"className":26,"code":100591,"language":28,"meta":29,"style":29},"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",[31,100593,100594,100622,100627,100632,100637,100655,100660,100692,100697,100702,100707,100728],{"__ignoreMap":29},[34,100595,100596,100598,100600,100602,100604,100606,100608,100610,100612,100614,100616,100618,100620],{"class":36,"line":37},[34,100597,1046],{"class":40},[34,100599,221],{"class":55},[34,100601,551],{"class":40},[34,100603,394],{"class":44},[34,100605,291],{"class":40},[34,100607,1314],{"class":44},[34,100609,1317],{"class":40},[34,100611,337],{"class":44},[34,100613,291],{"class":40},[34,100615,1115],{"class":44},[34,100617,291],{"class":40},[34,100619,332],{"class":44},[34,100621,101],{"class":40},[34,100623,100624],{"class":36,"line":165},[34,100625,100626],{"class":40},"x.shape\n",[34,100628,100629],{"class":36,"line":171},[34,100630,100631],{"class":161},"#结果：（3,6,2）\n",[34,100633,100634],{"class":36,"line":182},[34,100635,100636],{"class":161},"#使用np.transpose()进行转置 变为(2,6,3)\n",[34,100638,100639,100642,100644,100646,100648,100650,100652],{"class":36,"line":188},[34,100640,100641],{"class":40},"np.transpose(x,(",[34,100643,332],{"class":44},[34,100645,291],{"class":40},[34,100647,394],{"class":44},[34,100649,291],{"class":40},[34,100651,177],{"class":44},[34,100653,100654],{"class":40},")).shape\n",[34,100656,100657],{"class":36,"line":518},[34,100658,100659],{"class":161},"#结果：(2,6,3)\n",[34,100661,100662,100664,100666,100668,100670,100672,100674,100676,100678,100680,100682,100684,100686,100688,100690],{"class":36,"line":524},[34,100663,99869],{"class":40},[34,100665,221],{"class":55},[34,100667,551],{"class":40},[34,100669,394],{"class":44},[34,100671,291],{"class":40},[34,100673,1314],{"class":44},[34,100675,1317],{"class":40},[34,100677,337],{"class":44},[34,100679,291],{"class":40},[34,100681,332],{"class":44},[34,100683,291],{"class":40},[34,100685,394],{"class":44},[34,100687,291],{"class":40},[34,100689,1115],{"class":44},[34,100691,101],{"class":40},[34,100693,100694],{"class":36,"line":530},[34,100695,100696],{"class":40},"aaaa.shape\n",[34,100698,100699],{"class":36,"line":624},[34,100700,100701],{"class":161},"#结果：（3，2，1，6）\n",[34,100703,100704],{"class":36,"line":630},[34,100705,100706],{"class":161},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[34,100708,100709,100712,100714,100716,100718,100720,100722,100724,100726],{"class":36,"line":636},[34,100710,100711],{"class":40},"np.transpose(aaaa,(",[34,100713,394],{"class":44},[34,100715,291],{"class":40},[34,100717,332],{"class":44},[34,100719,291],{"class":40},[34,100721,177],{"class":44},[34,100723,291],{"class":40},[34,100725,337],{"class":44},[34,100727,100654],{"class":40},[34,100729,100730],{"class":36,"line":1513},[34,100731,100732],{"class":161},"#结果：(2,1,3,6)\n",[1711,100734,100735],{},"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":29,"searchDepth":165,"depth":165,"links":100737},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100462,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100744,"title":100745,"body":100746,"description":1744,"extension":1745,"meta":101480,"navigation":1474,"path":101481,"seo":101482,"stem":101483,"__hash__":101484},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100747,"toc":101478},[100748,100751,100754,100757,100760,100763,100766,100769,100772,100881,100884,100887,101475],[10,100749,100745],{"id":100750},"_8数组分割",[103,100752,100753],{},"split分割",[103,100755,100756],{},"numpy.split(ary,indics_or_sections,axis)",[103,100758,100759],{},"解释：",[103,100761,100762],{},"ary:被分割的数组",[103,100764,100765],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[103,100767,100768],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[103,100770,100771],{},"①一维数组的分割",[24,100773,100775],{"className":26,"code":100774,"language":28,"meta":29,"style":29},"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",[31,100776,100777,100793,100798,100807,100811,100816,100824,100828,100833,100838,100851,100855,100860,100872,100876],{"__ignoreMap":29},[34,100778,100779,100781,100783,100785,100787,100789,100791],{"class":36,"line":37},[34,100780,236],{"class":40},[34,100782,221],{"class":55},[34,100784,551],{"class":40},[34,100786,394],{"class":44},[34,100788,291],{"class":40},[34,100790,1324],{"class":44},[34,100792,101],{"class":40},[34,100794,100795],{"class":36,"line":165},[34,100796,100797],{"class":161},"#如果传入整数，必须能够平分，否则会报错\n",[34,100799,100800,100803,100805],{"class":36,"line":171},[34,100801,100802],{"class":40},"np.split(a,",[34,100804,332],{"class":44},[34,100806,101],{"class":40},[34,100808,100809],{"class":36,"line":182},[34,100810,617],{"class":161},[34,100812,100813],{"class":36,"line":188},[34,100814,100815],{"class":161},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[34,100817,100818,100820,100822],{"class":36,"line":518},[34,100819,100802],{"class":40},[34,100821,247],{"class":44},[34,100823,101],{"class":40},[34,100825,100826],{"class":36,"line":524},[34,100827,617],{"class":161},[34,100829,100830],{"class":36,"line":530},[34,100831,100832],{"class":161},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[34,100834,100835],{"class":36,"line":624},[34,100836,100837],{"class":161},"#传入数组\n",[34,100839,100840,100843,100845,100847,100849],{"class":36,"line":630},[34,100841,100842],{"class":40},"np.split(a,[",[34,100844,337],{"class":44},[34,100846,291],{"class":40},[34,100848,224],{"class":44},[34,100850,1077],{"class":40},[34,100852,100853],{"class":36,"line":636},[34,100854,617],{"class":161},[34,100856,100857],{"class":36,"line":1513},[34,100858,100859],{"class":161},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[34,100861,100862,100864,100866,100868,100870],{"class":36,"line":1519},[34,100863,100842],{"class":40},[34,100865,224],{"class":44},[34,100867,291],{"class":40},[34,100869,609],{"class":44},[34,100871,1077],{"class":40},[34,100873,100874],{"class":36,"line":3283},[34,100875,617],{"class":161},[34,100877,100878],{"class":36,"line":3297},[34,100879,100880],{"class":161},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[103,100882,100883],{},"②二维数组的分割",[103,100885,100886],{},"使用split()",[24,100888,100890],{"className":26,"code":100889,"language":28,"meta":29,"style":29},"#二维数组分割\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",[31,100891,100892,100897,100921,100926,100935,100939,100943,100948,100953,100958,100963,100968,100973,100978,100982,100995,100999,101003,101007,101011,101015,101020,101025,101030,101034,101039,101055,101059,101063,101068,101073,101078,101083,101088,101093,101098,101103,101108,101113,101118,101123,101128,101133,101138,101143,101148,101153,101157,101161,101181,101185,101189,101194,101199,101204,101209,101214,101219,101224,101229,101234,101239,101244,101249,101254,101259,101264,101269,101274,101279,101283,101288,101297,101301,101305,101309,101313,101317,101321,101325,101329,101333,101342,101346,101350,101354,101358,101362,101366,101370,101374,101378,101382,101386,101390,101394,101398,101402,101406,101410,101414,101418,101422,101426,101439,101443,101447,101451,101455,101459,101463,101467,101471],{"__ignoreMap":29},[34,100893,100894],{"class":36,"line":37},[34,100895,100896],{"class":161},"#二维数组分割\n",[34,100898,100899,100901,100903,100905,100907,100909,100911,100913,100915,100917,100919],{"class":36,"line":165},[34,100900,275],{"class":40},[34,100902,221],{"class":55},[34,100904,551],{"class":40},[34,100906,394],{"class":44},[34,100908,291],{"class":40},[34,100910,1314],{"class":44},[34,100912,1317],{"class":40},[34,100914,1115],{"class":44},[34,100916,291],{"class":40},[34,100918,1115],{"class":44},[34,100920,101],{"class":40},[34,100922,100923],{"class":36,"line":171},[34,100924,100925],{"class":161},"#默认axis=0  传入整数平均分,按行来的\n",[34,100927,100928,100931,100933],{"class":36,"line":182},[34,100929,100930],{"class":40},"np.split(aa,",[34,100932,337],{"class":44},[34,100934,101],{"class":40},[34,100936,100937],{"class":36,"line":188},[34,100938,578],{"class":161},[34,100940,100941],{"class":36,"line":518},[34,100942,95553],{"class":504},[34,100944,100945],{"class":36,"line":524},[34,100946,100947],{"class":504},"[array([[ 1,  2,  3,  4,  5,  6],\n",[34,100949,100950],{"class":36,"line":530},[34,100951,100952],{"class":504},"        [ 7,  8,  9, 10, 11, 12]]),\n",[34,100954,100955],{"class":36,"line":624},[34,100956,100957],{"class":504}," array([[13, 14, 15, 16, 17, 18],\n",[34,100959,100960],{"class":36,"line":630},[34,100961,100962],{"class":504},"        [19, 20, 21, 22, 23, 24]]),\n",[34,100964,100965],{"class":36,"line":636},[34,100966,100967],{"class":504}," array([[25, 26, 27, 28, 29, 30],\n",[34,100969,100970],{"class":36,"line":1513},[34,100971,100972],{"class":504},"        [31, 32, 33, 34, 35, 36]])]\n",[34,100974,100975],{"class":36,"line":1519},[34,100976,100977],{"class":504}," '''\n",[34,100979,100980],{"class":36,"line":3283},[34,100981,100837],{"class":161},[34,100983,100984,100987,100989,100991,100993],{"class":36,"line":3297},[34,100985,100986],{"class":40},"np.split(aa,[",[34,100988,332],{"class":44},[34,100990,291],{"class":40},[34,100992,224],{"class":44},[34,100994,1077],{"class":40},[34,100996,100997],{"class":36,"line":3302},[34,100998,578],{"class":161},[34,101000,101001],{"class":36,"line":3308},[34,101002,95553],{"class":504},[34,101004,101005],{"class":36,"line":3328},[34,101006,100947],{"class":504},[34,101008,101009],{"class":36,"line":3333},[34,101010,100952],{"class":504},[34,101012,101013],{"class":36,"line":3347},[34,101014,100957],{"class":504},[34,101016,101017],{"class":36,"line":3352},[34,101018,101019],{"class":504},"        [19, 20, 21, 22, 23, 24],\n",[34,101021,101022],{"class":36,"line":3381},[34,101023,101024],{"class":504},"        [25, 26, 27, 28, 29, 30]]),\n",[34,101026,101027],{"class":36,"line":3386},[34,101028,101029],{"class":504}," array([[31, 32, 33, 34, 35, 36]])]\n",[34,101031,101032],{"class":36,"line":3403},[34,101033,95553],{"class":504},[34,101035,101036],{"class":36,"line":3408},[34,101037,101038],{"class":161},"#axis=1 按照列来分\n",[34,101040,101041,101043,101045,101047,101049,101051,101053],{"class":36,"line":3413},[34,101042,100930],{"class":40},[34,101044,337],{"class":44},[34,101046,291],{"class":40},[34,101048,49153],{"class":51},[34,101050,221],{"class":55},[34,101052,394],{"class":44},[34,101054,101],{"class":40},[34,101056,101057],{"class":36,"line":3418},[34,101058,578],{"class":161},[34,101060,101061],{"class":36,"line":3432},[34,101062,95553],{"class":504},[34,101064,101065],{"class":36,"line":3437},[34,101066,101067],{"class":504},"[array([[ 1,  2],\n",[34,101069,101070],{"class":36,"line":4230},[34,101071,101072],{"class":504},"        [ 7,  8],\n",[34,101074,101075],{"class":36,"line":4244},[34,101076,101077],{"class":504},"        [13, 14],\n",[34,101079,101080],{"class":36,"line":4252},[34,101081,101082],{"class":504},"        [19, 20],\n",[34,101084,101085],{"class":36,"line":4257},[34,101086,101087],{"class":504},"        [25, 26],\n",[34,101089,101090],{"class":36,"line":4263},[34,101091,101092],{"class":504},"        [31, 32]]),\n",[34,101094,101095],{"class":36,"line":4269},[34,101096,101097],{"class":504}," array([[ 3,  4],\n",[34,101099,101100],{"class":36,"line":4274},[34,101101,101102],{"class":504},"        [ 9, 10],\n",[34,101104,101105],{"class":36,"line":9598},[34,101106,101107],{"class":504},"        [15, 16],\n",[34,101109,101110],{"class":36,"line":9622},[34,101111,101112],{"class":504},"        [21, 22],\n",[34,101114,101115],{"class":36,"line":9627},[34,101116,101117],{"class":504},"        [27, 28],\n",[34,101119,101120],{"class":36,"line":9633},[34,101121,101122],{"class":504},"        [33, 34]]),\n",[34,101124,101125],{"class":36,"line":9660},[34,101126,101127],{"class":504}," array([[ 5,  6],\n",[34,101129,101130],{"class":36,"line":9665},[34,101131,101132],{"class":504},"        [11, 12],\n",[34,101134,101135],{"class":36,"line":9671},[34,101136,101137],{"class":504},"        [17, 18],\n",[34,101139,101140],{"class":36,"line":9683},[34,101141,101142],{"class":504},"        [23, 24],\n",[34,101144,101145],{"class":36,"line":9695},[34,101146,101147],{"class":504},"        [29, 30],\n",[34,101149,101150],{"class":36,"line":9707},[34,101151,101152],{"class":504},"        [35, 36]])]\n",[34,101154,101155],{"class":36,"line":11366},[34,101156,100977],{"class":504},[34,101158,101159],{"class":36,"line":11391},[34,101160,100837],{"class":161},[34,101162,101163,101165,101167,101169,101171,101173,101175,101177,101179],{"class":36,"line":11414},[34,101164,100986],{"class":40},[34,101166,394],{"class":44},[34,101168,291],{"class":40},[34,101170,332],{"class":44},[34,101172,43249],{"class":40},[34,101174,49153],{"class":51},[34,101176,221],{"class":55},[34,101178,394],{"class":44},[34,101180,101],{"class":40},[34,101182,101183],{"class":36,"line":11438},[34,101184,617],{"class":161},[34,101186,101187],{"class":36,"line":11443},[34,101188,95553],{"class":504},[34,101190,101191],{"class":36,"line":11448},[34,101192,101193],{"class":504},"[array([[ 1],\n",[34,101195,101196],{"class":36,"line":11453},[34,101197,101198],{"class":504},"        [ 7],\n",[34,101200,101201],{"class":36,"line":11462},[34,101202,101203],{"class":504},"        [13],\n",[34,101205,101206],{"class":36,"line":11467},[34,101207,101208],{"class":504},"        [19],\n",[34,101210,101211],{"class":36,"line":11473},[34,101212,101213],{"class":504},"        [25],\n",[34,101215,101216],{"class":36,"line":11494},[34,101217,101218],{"class":504},"        [31]]),\n",[34,101220,101221],{"class":36,"line":11500},[34,101222,101223],{"class":504}," array([[ 2],\n",[34,101225,101226],{"class":36,"line":11514},[34,101227,101228],{"class":504},"        [ 8],\n",[34,101230,101231],{"class":36,"line":11520},[34,101232,101233],{"class":504},"        [14],\n",[34,101235,101236],{"class":36,"line":11547},[34,101237,101238],{"class":504},"        [20],\n",[34,101240,101241],{"class":36,"line":11556},[34,101242,101243],{"class":504},"        [26],\n",[34,101245,101246],{"class":36,"line":11562},[34,101247,101248],{"class":504},"        [32]]),\n",[34,101250,101251],{"class":36,"line":11570},[34,101252,101253],{"class":504}," array([[ 3,  4,  5,  6],\n",[34,101255,101256],{"class":36,"line":11575},[34,101257,101258],{"class":504},"        [ 9, 10, 11, 12],\n",[34,101260,101261],{"class":36,"line":18250},[34,101262,101263],{"class":504},"        [15, 16, 17, 18],\n",[34,101265,101266],{"class":36,"line":18256},[34,101267,101268],{"class":504},"        [21, 22, 23, 24],\n",[34,101270,101271],{"class":36,"line":18279},[34,101272,101273],{"class":504},"        [27, 28, 29, 30],\n",[34,101275,101276],{"class":36,"line":18285},[34,101277,101278],{"class":504},"        [33, 34, 35, 36]])]\n",[34,101280,101281],{"class":36,"line":18308},[34,101282,95553],{"class":504},[34,101284,101285],{"class":36,"line":18322},[34,101286,101287],{"class":161},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[34,101289,101290,101293,101295],{"class":36,"line":18342},[34,101291,101292],{"class":40},"np.vsplit(aa,",[34,101294,337],{"class":44},[34,101296,101],{"class":40},[34,101298,101299],{"class":36,"line":18348},[34,101300,617],{"class":161},[34,101302,101303],{"class":36,"line":18359},[34,101304,95553],{"class":504},[34,101306,101307],{"class":36,"line":18382},[34,101308,100947],{"class":504},[34,101310,101311],{"class":36,"line":18404},[34,101312,100952],{"class":504},[34,101314,101315],{"class":36,"line":18409},[34,101316,100957],{"class":504},[34,101318,101319],{"class":36,"line":18415},[34,101320,100962],{"class":504},[34,101322,101323],{"class":36,"line":18429},[34,101324,100967],{"class":504},[34,101326,101327],{"class":36,"line":18442},[34,101328,100972],{"class":504},[34,101330,101331],{"class":36,"line":18447},[34,101332,95553],{"class":504},[34,101334,101335,101338,101340],{"class":36,"line":18461},[34,101336,101337],{"class":40},"np.hsplit(aa,",[34,101339,337],{"class":44},[34,101341,101],{"class":40},[34,101343,101344],{"class":36,"line":18466},[34,101345,617],{"class":161},[34,101347,101348],{"class":36,"line":18472},[34,101349,95553],{"class":504},[34,101351,101352],{"class":36,"line":18477},[34,101353,101067],{"class":504},[34,101355,101356],{"class":36,"line":18491},[34,101357,101072],{"class":504},[34,101359,101360],{"class":36,"line":18496},[34,101361,101077],{"class":504},[34,101363,101364],{"class":36,"line":18501},[34,101365,101082],{"class":504},[34,101367,101368],{"class":36,"line":18515},[34,101369,101087],{"class":504},[34,101371,101372],{"class":36,"line":18527},[34,101373,101092],{"class":504},[34,101375,101376],{"class":36,"line":18532},[34,101377,101097],{"class":504},[34,101379,101380],{"class":36,"line":18545},[34,101381,101102],{"class":504},[34,101383,101384],{"class":36,"line":18550},[34,101385,101107],{"class":504},[34,101387,101388],{"class":36,"line":18555},[34,101389,101112],{"class":504},[34,101391,101392],{"class":36,"line":18560},[34,101393,101117],{"class":504},[34,101395,101396],{"class":36,"line":18573},[34,101397,101122],{"class":504},[34,101399,101400],{"class":36,"line":18578},[34,101401,101127],{"class":504},[34,101403,101404],{"class":36,"line":34274},[34,101405,101132],{"class":504},[34,101407,101408],{"class":36,"line":34280},[34,101409,101137],{"class":504},[34,101411,101412],{"class":36,"line":34286},[34,101413,101142],{"class":504},[34,101415,101416],{"class":36,"line":34292},[34,101417,101147],{"class":504},[34,101419,101420],{"class":36,"line":34298},[34,101421,101152],{"class":504},[34,101423,101424],{"class":36,"line":34309},[34,101425,95553],{"class":504},[34,101427,101428,101431,101433,101435,101437],{"class":36,"line":34315},[34,101429,101430],{"class":40},"np.vsplit(aa,[",[34,101432,332],{"class":44},[34,101434,291],{"class":40},[34,101436,224],{"class":44},[34,101438,1077],{"class":40},[34,101440,101441],{"class":36,"line":34335},[34,101442,617],{"class":161},[34,101444,101445],{"class":36,"line":34341},[34,101446,95553],{"class":504},[34,101448,101449],{"class":36,"line":34352},[34,101450,100947],{"class":504},[34,101452,101453],{"class":36,"line":34358},[34,101454,100952],{"class":504},[34,101456,101457],{"class":36,"line":34364},[34,101458,100957],{"class":504},[34,101460,101461],{"class":36,"line":34370},[34,101462,101019],{"class":504},[34,101464,101465],{"class":36,"line":34376},[34,101466,101024],{"class":504},[34,101468,101469],{"class":36,"line":34382},[34,101470,101029],{"class":504},[34,101472,101473],{"class":36,"line":34388},[34,101474,100977],{"class":504},[1711,101476,101477],{},"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":29,"searchDepth":165,"depth":165,"links":101479},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100745,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101486,"title":101487,"body":101488,"description":1744,"extension":1745,"meta":101982,"navigation":1474,"path":101983,"seo":101984,"stem":101985,"__hash__":101986},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101489,"toc":101973},[101490,101493,101496,101521,101525,101584,101636,101640,101642,101678,101732,101734,101772,101843,101847,101852,101856,101859,101892,101895,101899,101902,101905,101908,101911,101916,101920,101923,101926,101929,101932,101937,101941,101946,101949,101970],[10,101491,101487],{"id":101492},"_9数学函数",[103,101494,101495],{},"补充回顾：python的列表推导式",[24,101497,101499],{"className":26,"code":101498,"language":28,"meta":29,"style":29},"[1\u002Fi for i in a]\n",[31,101500,101501],{"__ignoreMap":29},[34,101502,101503,101505,101507,101509,101512,101514,101516,101518],{"class":36,"line":37},[34,101504,2681],{"class":40},[34,101506,394],{"class":44},[34,101508,2379],{"class":55},[34,101510,101511],{"class":40},"i ",[34,101513,4678],{"class":55},[34,101515,11088],{"class":40},[34,101517,27689],{"class":55},[34,101519,101520],{"class":40}," a]\n",[14,101522,101524],{"id":101523},"_91-求倒数","9.1 求倒数",[24,101526,101528],{"className":26,"code":101527,"language":28,"meta":29,"style":29},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[31,101529,101530,101535,101563,101575],{"__ignoreMap":29},[34,101531,101532],{"class":36,"line":37},[34,101533,101534],{"class":161},"#数组求倒数\n",[34,101536,101537,101539,101541,101543,101545,101547,101549,101551,101553,101555,101557,101559,101561],{"class":36,"line":165},[34,101538,236],{"class":40},[34,101540,221],{"class":55},[34,101542,2681],{"class":40},[34,101544,394],{"class":44},[34,101546,291],{"class":40},[34,101548,332],{"class":44},[34,101550,291],{"class":40},[34,101552,337],{"class":44},[34,101554,291],{"class":40},[34,101556,247],{"class":44},[34,101558,291],{"class":40},[34,101560,224],{"class":44},[34,101562,34887],{"class":40},[34,101564,101565,101567,101569,101572],{"class":36,"line":171},[34,101566,2070],{"class":40},[34,101568,221],{"class":55},[34,101570,101571],{"class":40},"np.array(a)",[34,101573,101574],{"class":161},"#将列表转换为数组\n",[34,101576,101577,101579,101581],{"class":36,"line":182},[34,101578,394],{"class":44},[34,101580,2379],{"class":55},[34,101582,101583],{"class":40},"b\n",[24,101585,101587],{"className":26,"code":101586,"language":28,"meta":29,"style":29},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[31,101588,101589,101617,101626,101631],{"__ignoreMap":29},[34,101590,101591,101593,101595,101597,101599,101601,101603,101605,101607,101609,101611,101613,101615],{"class":36,"line":37},[34,101592,236],{"class":40},[34,101594,221],{"class":55},[34,101596,2681],{"class":40},[34,101598,394],{"class":44},[34,101600,291],{"class":40},[34,101602,332],{"class":44},[34,101604,291],{"class":40},[34,101606,337],{"class":44},[34,101608,291],{"class":40},[34,101610,247],{"class":44},[34,101612,291],{"class":40},[34,101614,224],{"class":44},[34,101616,34887],{"class":40},[34,101618,101619,101621,101623],{"class":36,"line":165},[34,101620,2070],{"class":40},[34,101622,221],{"class":55},[34,101624,101625],{"class":40},"np.array(a)\n",[34,101627,101628],{"class":36,"line":171},[34,101629,101630],{"class":161},"#调用numpy中的函数reciprocal()\n",[34,101632,101633],{"class":36,"line":182},[34,101634,101635],{"class":40},"np.reciprocal(b)\n",[14,101637,101639],{"id":101638},"_92-求平方","9.2 求平方",[103,101641,1227],{},[24,101643,101645],{"className":26,"code":101644,"language":28,"meta":29,"style":29},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[31,101646,101647,101652,101657,101673],{"__ignoreMap":29},[34,101648,101649],{"class":36,"line":37},[34,101650,101651],{"class":161},"#square()，求平方\n",[34,101653,101654],{"class":36,"line":165},[34,101655,101656],{"class":161},"#一维数组\n",[34,101658,101659,101661,101663,101665,101667,101669,101671],{"class":36,"line":171},[34,101660,236],{"class":40},[34,101662,221],{"class":55},[34,101664,551],{"class":40},[34,101666,394],{"class":44},[34,101668,291],{"class":40},[34,101670,410],{"class":44},[34,101672,101],{"class":40},[34,101674,101675],{"class":36,"line":182},[34,101676,101677],{"class":40},"np.square(a)\n",[24,101679,101681],{"className":26,"code":101680,"language":28,"meta":29,"style":29},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[31,101682,101683,101688,101693,101714],{"__ignoreMap":29},[34,101684,101685],{"class":36,"line":37},[34,101686,101687],{"class":161},"#或者通过循环遍历的形式来计算\n",[34,101689,101690],{"class":36,"line":165},[34,101691,101692],{"class":161},"#这是一个列表\n",[34,101694,101695,101698,101700,101702,101704,101706,101708,101711],{"class":36,"line":171},[34,101696,101697],{"class":40},"[i",[34,101699,2252],{"class":55},[34,101701,101511],{"class":40},[34,101703,4678],{"class":55},[34,101705,11088],{"class":40},[34,101707,27689],{"class":55},[34,101709,101710],{"class":40}," a]",[34,101712,101713],{"class":161},"#这个求完之后在数列当中\n",[34,101715,101716,101719,101721,101723,101725,101727,101729],{"class":36,"line":182},[34,101717,101718],{"class":40},"np.array([i",[34,101720,2252],{"class":55},[34,101722,101511],{"class":40},[34,101724,4678],{"class":55},[34,101726,11088],{"class":40},[34,101728,27689],{"class":55},[34,101730,101731],{"class":40}," a])\n",[103,101733,1254],{},[24,101735,101737],{"className":26,"code":101736,"language":28,"meta":29,"style":29},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[31,101738,101739,101743,101767],{"__ignoreMap":29},[34,101740,101741],{"class":36,"line":37},[34,101742,270],{"class":161},[34,101744,101745,101747,101749,101751,101753,101755,101757,101759,101761,101763,101765],{"class":36,"line":165},[34,101746,275],{"class":40},[34,101748,221],{"class":55},[34,101750,551],{"class":40},[34,101752,394],{"class":44},[34,101754,291],{"class":40},[34,101756,2318],{"class":44},[34,101758,1317],{"class":40},[34,101760,247],{"class":44},[34,101762,291],{"class":40},[34,101764,337],{"class":44},[34,101766,101],{"class":40},[34,101768,101769],{"class":36,"line":171},[34,101770,101771],{"class":40},"np.square(aa)\n",[24,101773,101775],{"className":26,"code":101774,"language":28,"meta":29,"style":29},"#传统的方式\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",[31,101776,101777,101782,101791,101807,101823,101838],{"__ignoreMap":29},[34,101778,101779],{"class":36,"line":37},[34,101780,101781],{"class":161},"#传统的方式\n",[34,101783,101784,101786,101788],{"class":36,"line":165},[34,101785,99550],{"class":40},[34,101787,221],{"class":55},[34,101789,101790],{"class":40},"np.empty_like(aa)\n",[34,101792,101793,101795,101797,101799,101801,101803,101805],{"class":36,"line":171},[34,101794,4678],{"class":55},[34,101796,11088],{"class":40},[34,101798,27689],{"class":55},[34,101800,34084],{"class":44},[34,101802,286],{"class":40},[34,101804,247],{"class":44},[34,101806,32428],{"class":40},[34,101808,101809,101811,101813,101815,101817,101819,101821],{"class":36,"line":182},[34,101810,4854],{"class":55},[34,101812,11150],{"class":40},[34,101814,27689],{"class":55},[34,101816,34084],{"class":44},[34,101818,286],{"class":40},[34,101820,337],{"class":44},[34,101822,32428],{"class":40},[34,101824,101825,101828,101830,101833,101835],{"class":36,"line":188},[34,101826,101827],{"class":40},"        bb[i,j]",[34,101829,221],{"class":55},[34,101831,101832],{"class":40},"aa[i,j]",[34,101834,2252],{"class":55},[34,101836,101837],{"class":40},"aa[i,j]\n",[34,101839,101840],{"class":36,"line":518},[34,101841,101842],{"class":40},"bb\n",[14,101844,101846],{"id":101845},"_93-求各元素的符号","9.3 求各元素的符号",[103,101848,101849],{},[109,101850],{"alt":29,"src":101851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101853,101855],{"id":101854},"_94-modf函数","9.4 modf函数",[103,101857,101858],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[24,101860,101862],{"className":26,"code":101861,"language":28,"meta":29,"style":29},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[31,101863,101864,101887],{"__ignoreMap":29},[34,101865,101866,101868,101870,101872,101874,101876,101878,101880,101882,101885],{"class":36,"line":37},[34,101867,236],{"class":40},[34,101869,221],{"class":55},[34,101871,551],{"class":40},[34,101873,2327],{"class":55},[34,101875,410],{"class":44},[34,101877,291],{"class":40},[34,101879,410],{"class":44},[34,101881,291],{"class":40},[34,101883,101884],{"class":44},"0.3",[34,101886,101],{"class":40},[34,101888,101889],{"class":36,"line":165},[34,101890,101891],{"class":40},"np.modf(a)\n",[103,101893,101894],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101896,101898],{"id":101897},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[103,101900,101901],{},"np.cell()",[103,101903,101904],{},"np.floor()",[103,101906,101907],{},"np.rint()",[103,101909,101910],{},"对各元素分别向上取整、向下取整、四舍五入",[103,101912,101913],{},[109,101914],{"alt":29,"src":101915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101917,101919],{"id":101918},"_96-around函数","9.6 around()函数",[103,101921,101922],{},"around()函数也可以实现对数的小数位数进行操作",[103,101924,101925],{},"其中的参数：",[103,101927,101928],{},"1.要传的数组",[103,101930,101931],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[103,101933,101934],{},[109,101935],{"alt":29,"src":101936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101938,101940],{"id":101939},"_97-三角函数","9.7 三角函数",[103,101942,101943],{},[109,101944],{"alt":29,"src":101945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[103,101947,101948],{},"引入图像模块非常重要",[24,101950,101952],{"className":26,"code":101951,"language":28,"meta":29,"style":29},"from matplotlib import pyplot as plt\n",[31,101953,101954],{"__ignoreMap":29},[34,101955,101956,101958,101961,101963,101966,101968],{"class":36,"line":37},[34,101957,32379],{"class":55},[34,101959,101960],{"class":40}," matplotlib ",[34,101962,32036],{"class":55},[34,101964,101965],{"class":40}," pyplot ",[34,101967,33025],{"class":55},[34,101969,33079],{"class":40},[1711,101971,101972],{},"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":29,"searchDepth":165,"depth":165,"links":101974},[101975,101976,101977,101978,101979,101980,101981],{"id":101523,"depth":165,"text":101524},{"id":101638,"depth":165,"text":101639},{"id":101845,"depth":165,"text":101846},{"id":101854,"depth":165,"text":101855},{"id":101897,"depth":165,"text":101898},{"id":101918,"depth":165,"text":101919},{"id":101939,"depth":165,"text":101940},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101487,"description":1744},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101988,"title":101989,"body":101990,"description":1744,"extension":1745,"meta":101994,"navigation":1474,"path":101995,"seo":101996,"stem":101997,"__hash__":101998},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101991,"toc":101992},[],{"title":29,"searchDepth":165,"depth":165,"links":101993},[],{"category":52059},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101989,"description":1744},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102000,"title":102001,"body":102002,"description":29,"extension":1745,"meta":104010,"navigation":1474,"path":104011,"seo":104012,"stem":104013,"__hash__":104014},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102003,"toc":103986},[102004,102007,102011,102014,102017,102023,102026,102049,102052,102086,102089,102130,102134,102137,102230,102233,102277,102280,102297,102300,102314,102317,102320,102365,102368,102405,102409,102412,102418,102423,102443,102447,102450,102516,102519,102537,102541,102544,102573,102583,102589,102593,102596,102602,102613,102617,102620,102650,102653,102933,102936,102939,102950,102953,102956,102978,102985,102988,103006,103009,103012,103026,103034,103037,103063,103069,103072,103075,103085,103097,103117,103126,103146,103156,103180,103193,103207,103212,103253,103270,103295,103307,103327,103333,103378,103397,103414,103427,103443,103450,103462,103471,103506,103527,103552,103565,103589,103604,103629,103632,103653,103662,103665,103676,103680,103683,103689,103701,103708,103712,103715,103727,103730,103744,103747,103757,103767,103770,103810,103813,103817,103823,103826,103840,103844,103847,103880,103884,103887,103910,103918,103921,103927,103933,103936,103939,103967,103971,103974,103980,103983],[10,102005,102001],{"id":102006},"_1环境安装与第一个-mujoco-程序",[14,102008,102010],{"id":102009},"_1目标说明","1.目标说明",[103,102012,102013],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[103,102015,102016],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[24,102018,102021],{"className":102019,"code":102020,"language":6838,"meta":29},[6836],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[31,102022,102020],{"__ignoreMap":29},[103,102024,102025],{},"需要掌握:",[1772,102027,102028,102031,102034,102039,102044],{},[1775,102029,102030],{},"Fedora 44 下 MuJoCo 的系统依赖",[1775,102032,102033],{},"Python 虚拟环境创建",[1775,102035,102036],{},[31,102037,102038],{},"mujoco.MjModel",[1775,102040,102041],{},[31,102042,102043],{},"mujoco.MjData",[1775,102045,102046],{},[31,102047,102048],{},"mujoco.mj_step(model, data)",[103,102050,102051],{},"MuJoCo 中最重要的两个对象:",[1948,102053,102054,102064],{},[1951,102055,102056],{},[1954,102057,102058,102061],{},[1957,102059,102060],{"align":25381},"对象",[1957,102062,102063],{"align":25381},"含义",[1994,102065,102066,102076],{},[1954,102067,102068,102073],{},[1999,102069,102070],{"align":25381},[31,102071,102072],{},"MjModel",[1999,102074,102075],{"align":25381},"模型结构，来自 XML，基本不随时间变化",[1954,102077,102078,102083],{},[1999,102079,102080],{"align":25381},[31,102081,102082],{},"MjData",[1999,102084,102085],{"align":25381},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[103,102087,102088],{},"可以先用一个类比理解：",[1948,102090,102091,102101],{},[1951,102092,102093],{},[1954,102094,102095,102098],{},[1957,102096,102097],{"align":25381},"类比",[1957,102099,102100],{"align":25381},"MuJoCo 对象",[1994,102102,102103,102112,102121],{},[1954,102104,102105,102108],{},[1999,102106,102107],{"align":25381},"游戏地图和角色配置",[1999,102109,102110],{"align":25381},[31,102111,102072],{},[1954,102113,102114,102117],{},[1999,102115,102116],{"align":25381},"游戏运行到当前帧的状态",[1999,102118,102119],{"align":25381},[31,102120,102082],{},[1954,102122,102123,102126],{},[1999,102124,102125],{"align":25381},"前进一帧",[1999,102127,102128],{"align":25381},[31,102129,102048],{},[14,102131,102133],{"id":102132},"_2环境与依赖安装","2.环境与依赖安装",[103,102135,102136],{},"Fedora 44 系统依赖:",[24,102138,102140],{"className":25467,"code":102139,"language":25469,"meta":29,"style":29},"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",[31,102141,102142,102154,102167,102180,102190,102200,102219],{"__ignoreMap":29},[34,102143,102144,102146,102148,102150,102152],{"class":36,"line":37},[34,102145,26222],{"class":3617},[34,102147,27961],{"class":504},[34,102149,25479],{"class":504},[34,102151,28046],{"class":44},[34,102153,26324],{"class":44},[34,102155,102156,102159,102162,102165],{"class":36,"line":165},[34,102157,102158],{"class":504},"  python3",[34,102160,102161],{"class":504}," python3-pip",[34,102163,102164],{"class":504}," python3-virtualenv",[34,102166,26324],{"class":44},[34,102168,102169,102172,102175,102178],{"class":36,"line":171},[34,102170,102171],{"class":504},"  mesa-libGL",[34,102173,102174],{"class":504}," mesa-libGLU",[34,102176,102177],{"class":504}," mesa-dri-drivers",[34,102179,26324],{"class":44},[34,102181,102182,102185,102188],{"class":36,"line":182},[34,102183,102184],{"class":504},"  libglvnd-glx",[34,102186,102187],{"class":504}," libglvnd-opengl",[34,102189,26324],{"class":44},[34,102191,102192,102195,102198],{"class":36,"line":188},[34,102193,102194],{"class":504},"  glfw",[34,102196,102197],{"class":504}," glfw-devel",[34,102199,26324],{"class":44},[34,102201,102202,102205,102208,102211,102214,102217],{"class":36,"line":518},[34,102203,102204],{"class":504},"  libX11",[34,102206,102207],{"class":504}," libXcursor",[34,102209,102210],{"class":504}," libXi",[34,102212,102213],{"class":504}," libXinerama",[34,102215,102216],{"class":504}," libXrandr",[34,102218,26324],{"class":44},[34,102220,102221,102224,102227],{"class":36,"line":524},[34,102222,102223],{"class":504},"  gcc",[34,102225,102226],{"class":504}," gcc-c++",[34,102228,102229],{"class":504}," make\n",[103,102231,102232],{},"创建 Python 环境:",[24,102234,102236],{"className":25467,"code":102235,"language":25469,"meta":29,"style":29},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[31,102237,102238,102252,102260],{"__ignoreMap":29},[34,102239,102240,102243,102246,102249],{"class":36,"line":37},[34,102241,102242],{"class":3617},"python3",[34,102244,102245],{"class":44}," -m",[34,102247,102248],{"class":504}," venv",[34,102250,102251],{"class":504}," .venv\n",[34,102253,102254,102257],{"class":36,"line":165},[34,102255,102256],{"class":44},"source",[34,102258,102259],{"class":504}," .venv\u002Fbin\u002Factivate\n",[34,102261,102262,102264,102266,102269,102271,102274],{"class":36,"line":171},[34,102263,28],{"class":3617},[34,102265,102245],{"class":44},[34,102267,102268],{"class":504}," pip",[34,102270,25479],{"class":504},[34,102272,102273],{"class":44}," --upgrade",[34,102275,102276],{"class":504}," pip\n",[103,102278,102279],{},"pip 安装:",[24,102281,102283],{"className":25467,"code":102282,"language":25469,"meta":29,"style":29},"pip install \"mujoco>=2.3\" numpy\n",[31,102284,102285],{"__ignoreMap":29},[34,102286,102287,102289,102291,102294],{"class":36,"line":37},[34,102288,25476],{"class":3617},[34,102290,25479],{"class":504},[34,102292,102293],{"class":504}," \"mujoco>=2.3\"",[34,102295,102296],{"class":504}," numpy\n",[103,102298,102299],{},"安装完成后，先做最小检查：",[24,102301,102303],{"className":25467,"code":102302,"language":25469,"meta":29,"style":29},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[31,102304,102305],{"__ignoreMap":29},[34,102306,102307,102309,102311],{"class":36,"line":37},[34,102308,28],{"class":3617},[34,102310,32004],{"class":44},[34,102312,102313],{"class":504}," \"import mujoco; print(mujoco.__version__)\"\n",[103,102315,102316],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[103,102318,102319],{},"conda 安装:",[24,102321,102323],{"className":25467,"code":102322,"language":25469,"meta":29,"style":29},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[31,102324,102325,102345,102355],{"__ignoreMap":29},[34,102326,102327,102329,102331,102333,102336,102339,102342],{"class":36,"line":37},[34,102328,31976],{"class":3617},[34,102330,30822],{"class":504},[34,102332,26761],{"class":44},[34,102334,102335],{"class":504}," mujoco-study",[34,102337,102338],{"class":504}," python=",[34,102340,102341],{"class":44},"3.10",[34,102343,102344],{"class":44}," -y\n",[34,102346,102347,102349,102352],{"class":36,"line":165},[34,102348,31976],{"class":3617},[34,102350,102351],{"class":504}," activate",[34,102353,102354],{"class":504}," mujoco-study\n",[34,102356,102357,102359,102361,102363],{"class":36,"line":171},[34,102358,25476],{"class":3617},[34,102360,25479],{"class":504},[34,102362,102293],{"class":504},[34,102364,102296],{"class":504},[103,102366,102367],{},"版本冲突说明:",[1772,102369,102370,102376,102386,102395],{},[1775,102371,102372,102373,30031],{},"不要安装 ",[31,102374,102375],{},"mujoco-py",[1775,102377,102378,102379,102381,102382,102385],{},"如果旧项目里同时安装了 ",[31,102380,102375],{}," 和 ",[31,102383,102384],{},"mujoco","，建议新建干净虚拟环境。",[1775,102387,102388,102391,102392,30031],{},[31,102389,102390],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[31,102393,102394],{},"~\u002F.mujoco\u002Fmujoco210",[1775,102396,102397,102398,84176,102401,102404],{},"离屏渲染可能涉及 OpenGL 后端，",[31,102399,102400],{},"MUJOCO_GL=egl",[31,102402,102403],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102406,102408],{"id":102407},"_3核心概念解释","3.核心概念解释",[103,102410,102411],{},"MuJoCo 的基本执行流程:",[24,102413,102416],{"className":102414,"code":102415,"language":6838,"meta":29},[6836],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[31,102417,102415],{"__ignoreMap":29},[103,102419,102420,102422],{},[31,102421,102072],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[103,102424,102425,102427,102428,2021,102431,2021,102434,2021,102437,2021,102440,30031],{},[31,102426,102082],{}," 存放仿真运行时状态，例如 ",[31,102429,102430],{},"data.time",[31,102432,102433],{},"data.qpos",[31,102435,102436],{},"data.qvel",[31,102438,102439],{},"data.ctrl",[31,102441,102442],{},"data.xpos",[19,102444,102446],{"id":102445},"xml-是什么","XML 是什么",[103,102448,102449],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[24,102451,102453],{"className":54706,"code":102452,"language":54708,"meta":29,"style":29},"\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",[31,102454,102455,102477,102508],{"__ignoreMap":29},[34,102456,102457,102459,102461,102463,102465,102467,102470,102472,102475],{"class":36,"line":37},[34,102458,2701],{"class":40},[34,102460,53439],{"class":52939},[34,102462,16566],{"class":3617},[34,102464,221],{"class":40},[34,102466,55130],{"class":504},[34,102468,102469],{"class":3617}," pos",[34,102471,221],{"class":40},[34,102473,102474],{"class":504},"\"0 0 1\"",[34,102476,52946],{"class":40},[34,102478,102479,102481,102484,102486,102488,102491,102493,102495,102497,102500,102502,102505],{"class":36,"line":165},[34,102480,53783],{"class":40},[34,102482,102483],{"class":52939},"geom",[34,102485,16566],{"class":3617},[34,102487,221],{"class":40},[34,102489,102490],{"class":504},"\"box_geom\"",[34,102492,55463],{"class":3617},[34,102494,221],{"class":40},[34,102496,55130],{"class":504},[34,102498,102499],{"class":3617}," size",[34,102501,221],{"class":40},[34,102503,102504],{"class":504},"\"0.1 0.1 0.1\"",[34,102506,102507],{"class":40},"\u002F>\n",[34,102509,102510,102512,102514],{"class":36,"line":171},[34,102511,53424],{"class":40},[34,102513,53439],{"class":52939},[34,102515,52946],{"class":40},[103,102517,102518],{},"这段意思是：",[1772,102520,102521,102527,102534],{},[1775,102522,102523,102524,102526],{},"创建一个叫 ",[31,102525,55353],{}," 的刚体。",[1775,102528,102529,102530,102533],{},"它初始放在 ",[31,102531,102532],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[1775,102535,102536],{},"它里面有一个盒子形状的几何体。",[19,102538,102540],{"id":102539},"timestep-是什么","timestep 是什么",[103,102542,102543],{},"XML 里的：",[24,102545,102547],{"className":54706,"code":102546,"language":54708,"meta":29,"style":29},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[31,102548,102549],{"__ignoreMap":29},[34,102550,102551,102553,102555,102558,102560,102563,102566,102568,102571],{"class":36,"line":37},[34,102552,2701],{"class":40},[34,102554,70805],{"class":52939},[34,102556,102557],{"class":3617}," timestep",[34,102559,221],{"class":40},[34,102561,102562],{"class":504},"\"0.01\"",[34,102564,102565],{"class":3617}," gravity",[34,102567,221],{"class":40},[34,102569,102570],{"class":504},"\"0 0 -9.81\"",[34,102572,102507],{"class":40},[103,102574,102575,102576,102579,102580,102582],{},"表示每调用一次 ",[31,102577,102578],{},"mj_step","，仿真时间前进 ",[31,102581,40626],{}," 秒。循环 100 次，大约就是 1 秒：",[24,102584,102587],{"className":102585,"code":102586,"language":6838,"meta":29},[6836],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[31,102588,102586],{"__ignoreMap":29},[19,102590,102592],{"id":102591},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[103,102594,102595],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[24,102597,102600],{"className":102598,"code":102599,"language":6838,"meta":29},[6836],"x y z qw qx qy qz\n",[31,102601,102599],{"__ignoreMap":29},[103,102603,102604,102605,102608,102609,102612],{},"表示一个自由刚体的位置和姿态。其中 ",[31,102606,102607],{},"x y z"," 是位置，",[31,102610,102611],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102614,102616],{"id":102615},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[103,102618,102619],{},"新建文件:",[24,102621,102623],{"className":25467,"code":102622,"language":25469,"meta":29,"style":29},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[31,102624,102625,102635,102642],{"__ignoreMap":29},[34,102626,102627,102630,102632],{"class":36,"line":37},[34,102628,102629],{"class":3617},"mkdir",[34,102631,30862],{"class":44},[34,102633,102634],{"class":504}," mujoco_tutorial\n",[34,102636,102637,102640],{"class":36,"line":165},[34,102638,102639],{"class":44},"cd",[34,102641,102634],{"class":504},[34,102643,102644,102647],{"class":36,"line":171},[34,102645,102646],{"class":3617},"touch",[34,102648,102649],{"class":504}," ch1_first_sim.py\n",[103,102651,102652],{},"写入:",[24,102654,102656],{"className":26,"code":102655,"language":28,"meta":29,"style":29},"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",[31,102657,102658,102665,102669,102673,102683,102688,102693,102697,102702,102707,102711,102716,102721,102726,102731,102736,102741,102745,102749,102753,102766,102780,102790,102794,102806,102818,102830,102842,102854,102858,102875,102880,102884,102895,102906,102910,102914,102928],{"__ignoreMap":29},[34,102659,102660,102662],{"class":36,"line":37},[34,102661,32036],{"class":55},[34,102663,102664],{"class":40}," mujoco\n",[34,102666,102667],{"class":36,"line":165},[34,102668,1475],{"emptyLinePlaceholder":1474},[34,102670,102671],{"class":36,"line":171},[34,102672,1475],{"emptyLinePlaceholder":1474},[34,102674,102675,102678,102680],{"class":36,"line":182},[34,102676,102677],{"class":44},"XML",[34,102679,56],{"class":55},[34,102681,102682],{"class":504}," \"\"\"\n",[34,102684,102685],{"class":36,"line":188},[34,102686,102687],{"class":504},"\u003Cmujoco model=\"first_sim\">\n",[34,102689,102690],{"class":36,"line":518},[34,102691,102692],{"class":504},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[34,102694,102695],{"class":36,"line":524},[34,102696,1475],{"emptyLinePlaceholder":1474},[34,102698,102699],{"class":36,"line":530},[34,102700,102701],{"class":504},"  \u003Cworldbody>\n",[34,102703,102704],{"class":36,"line":624},[34,102705,102706],{"class":504},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,102708,102709],{"class":36,"line":630},[34,102710,1475],{"emptyLinePlaceholder":1474},[34,102712,102713],{"class":36,"line":636},[34,102714,102715],{"class":504},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[34,102717,102718],{"class":36,"line":1513},[34,102719,102720],{"class":504},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[34,102722,102723],{"class":36,"line":1519},[34,102724,102725],{"class":504},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,102727,102728],{"class":36,"line":3283},[34,102729,102730],{"class":504},"    \u003C\u002Fbody>\n",[34,102732,102733],{"class":36,"line":3297},[34,102734,102735],{"class":504},"  \u003C\u002Fworldbody>\n",[34,102737,102738],{"class":36,"line":3302},[34,102739,102740],{"class":504},"\u003C\u002Fmujoco>\n",[34,102742,102743],{"class":36,"line":3308},[34,102744,505],{"class":504},[34,102746,102747],{"class":36,"line":3328},[34,102748,1475],{"emptyLinePlaceholder":1474},[34,102750,102751],{"class":36,"line":3333},[34,102752,1475],{"emptyLinePlaceholder":1474},[34,102754,102755,102757,102759,102762,102764],{"class":36,"line":3347},[34,102756,33588],{"class":55},[34,102758,3627],{"class":3617},[34,102760,102761],{"class":40},"() -> ",[34,102763,492],{"class":44},[34,102765,5392],{"class":40},[34,102767,102768,102771,102773,102776,102778],{"class":36,"line":3352},[34,102769,102770],{"class":40},"    model ",[34,102772,221],{"class":55},[34,102774,102775],{"class":40}," mujoco.MjModel.from_xml_string(",[34,102777,102677],{"class":44},[34,102779,101],{"class":40},[34,102781,102782,102785,102787],{"class":36,"line":3381},[34,102783,102784],{"class":40},"    data ",[34,102786,221],{"class":55},[34,102788,102789],{"class":40}," mujoco.MjData(model)\n",[34,102791,102792],{"class":36,"line":3386},[34,102793,1475],{"emptyLinePlaceholder":1474},[34,102795,102796,102798,102800,102803],{"class":36,"line":3403},[34,102797,32941],{"class":44},[34,102799,286],{"class":40},[34,102801,102802],{"class":504},"\"nq:\"",[34,102804,102805],{"class":40},", model.nq)\n",[34,102807,102808,102810,102812,102815],{"class":36,"line":3408},[34,102809,32941],{"class":44},[34,102811,286],{"class":40},[34,102813,102814],{"class":504},"\"nv:\"",[34,102816,102817],{"class":40},", model.nv)\n",[34,102819,102820,102822,102824,102827],{"class":36,"line":3413},[34,102821,32941],{"class":44},[34,102823,286],{"class":40},[34,102825,102826],{"class":504},"\"nu:\"",[34,102828,102829],{"class":40},", model.nu)\n",[34,102831,102832,102834,102836,102839],{"class":36,"line":3418},[34,102833,32941],{"class":44},[34,102835,286],{"class":40},[34,102837,102838],{"class":504},"\"initial time:\"",[34,102840,102841],{"class":40},", data.time)\n",[34,102843,102844,102846,102848,102851],{"class":36,"line":3432},[34,102845,32941],{"class":44},[34,102847,286],{"class":40},[34,102849,102850],{"class":504},"\"initial qpos:\"",[34,102852,102853],{"class":40},", data.qpos.copy())\n",[34,102855,102856],{"class":36,"line":3437},[34,102857,1475],{"emptyLinePlaceholder":1474},[34,102859,102860,102862,102865,102867,102869,102871,102873],{"class":36,"line":4230},[34,102861,4854],{"class":55},[34,102863,102864],{"class":40}," _ ",[34,102866,27689],{"class":55},[34,102868,34084],{"class":44},[34,102870,286],{"class":40},[34,102872,451],{"class":44},[34,102874,32428],{"class":40},[34,102876,102877],{"class":36,"line":4244},[34,102878,102879],{"class":40},"        mujoco.mj_step(model, data)\n",[34,102881,102882],{"class":36,"line":4252},[34,102883,1475],{"emptyLinePlaceholder":1474},[34,102885,102886,102888,102890,102893],{"class":36,"line":4257},[34,102887,32941],{"class":44},[34,102889,286],{"class":40},[34,102891,102892],{"class":504},"\"final time:\"",[34,102894,102841],{"class":40},[34,102896,102897,102899,102901,102904],{"class":36,"line":4263},[34,102898,32941],{"class":44},[34,102900,286],{"class":40},[34,102902,102903],{"class":504},"\"final qpos:\"",[34,102905,102853],{"class":40},[34,102907,102908],{"class":36,"line":4269},[34,102909,1475],{"emptyLinePlaceholder":1474},[34,102911,102912],{"class":36,"line":4274},[34,102913,1475],{"emptyLinePlaceholder":1474},[34,102915,102916,102918,102920,102923,102926],{"class":36,"line":9598},[34,102917,3189],{"class":55},[34,102919,32862],{"class":44},[34,102921,102922],{"class":55}," ==",[34,102924,102925],{"class":504}," \"__main__\"",[34,102927,5392],{"class":40},[34,102929,102930],{"class":36,"line":9622},[34,102931,102932],{"class":40},"    main()\n",[19,102934,102935],{"id":102935},"代码逐段解释",[103,102937,102938],{},"导入库：",[24,102940,102942],{"className":26,"code":102941,"language":28,"meta":29,"style":29},"import mujoco\n",[31,102943,102944],{"__ignoreMap":29},[34,102945,102946,102948],{"class":36,"line":37},[34,102947,32036],{"class":55},[34,102949,102664],{"class":40},[103,102951,102952],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[103,102954,102955],{},"定义 XML：",[24,102957,102959],{"className":26,"code":102958,"language":28,"meta":29,"style":29},"XML = \"\"\"\n...\n\"\"\"\n",[31,102960,102961,102969,102974],{"__ignoreMap":29},[34,102962,102963,102965,102967],{"class":36,"line":37},[34,102964,102677],{"class":44},[34,102966,56],{"class":55},[34,102968,102682],{"class":504},[34,102970,102971],{"class":36,"line":165},[34,102972,102973],{"class":504},"...\n",[34,102975,102976],{"class":36,"line":171},[34,102977,505],{"class":504},[103,102979,102980,102981,102984],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[31,102982,102983],{},"freejoint"," 的方块。",[103,102986,102987],{},"编译模型：",[24,102989,102991],{"className":26,"code":102990,"language":28,"meta":29,"style":29},"model = mujoco.MjModel.from_xml_string(XML)\n",[31,102992,102993],{"__ignoreMap":29},[34,102994,102995,102998,103000,103002,103004],{"class":36,"line":37},[34,102996,102997],{"class":40},"model ",[34,102999,221],{"class":55},[34,103001,102775],{"class":40},[34,103003,102677],{"class":44},[34,103005,101],{"class":40},[103,103007,103008],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[103,103010,103011],{},"创建数据：",[24,103013,103015],{"className":26,"code":103014,"language":28,"meta":29,"style":29},"data = mujoco.MjData(model)\n",[31,103016,103017],{"__ignoreMap":29},[34,103018,103019,103022,103024],{"class":36,"line":37},[34,103020,103021],{"class":40},"data ",[34,103023,221],{"class":55},[34,103025,102789],{"class":40},[103,103027,103028,103030,103031,103033],{},[31,103029,35042],{}," 会保存仿真当前状态。刚创建时，时间是 ",[31,103032,177],{},"，方块还在初始位置。",[103,103035,103036],{},"推进仿真：",[24,103038,103040],{"className":26,"code":103039,"language":28,"meta":29,"style":29},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[31,103041,103042,103058],{"__ignoreMap":29},[34,103043,103044,103046,103048,103050,103052,103054,103056],{"class":36,"line":37},[34,103045,4678],{"class":55},[34,103047,102864],{"class":40},[34,103049,27689],{"class":55},[34,103051,34084],{"class":44},[34,103053,286],{"class":40},[34,103055,451],{"class":44},[34,103057,32428],{"class":40},[34,103059,103060],{"class":36,"line":165},[34,103061,103062],{"class":40},"    mujoco.mj_step(model, data)\n",[103,103064,103065,103066,103068],{},"每次 ",[31,103067,102578],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[19,103070,103071],{"id":103071},"代码逐行细讲",[103,103073,103074],{},"下面把完整代码按新手视角拆开讲。",[24,103076,103077],{"className":26,"code":102941,"language":28,"meta":29,"style":29},[31,103078,103079],{"__ignoreMap":29},[34,103080,103081,103083],{"class":36,"line":37},[34,103082,32036],{"class":55},[34,103084,102664],{"class":40},[103,103086,103087,103089,103090,2021,103092,2021,103094,30031],{},[31,103088,32036],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[31,103091,102038],{},[31,103093,102043],{},[31,103095,103096],{},"mujoco.mj_step",[24,103098,103099],{"className":26,"code":102958,"language":28,"meta":29,"style":29},[31,103100,103101,103109,103113],{"__ignoreMap":29},[34,103102,103103,103105,103107],{"class":36,"line":37},[34,103104,102677],{"class":44},[34,103106,56],{"class":55},[34,103108,102682],{"class":504},[34,103110,103111],{"class":36,"line":165},[34,103112,102973],{"class":504},[34,103114,103115],{"class":36,"line":171},[34,103116,505],{"class":504},[103,103118,103119,103121,103122,103125],{},[31,103120,102677],{}," 是一个变量名。右边的三引号 ",[31,103123,103124],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[24,103127,103128],{"className":54706,"code":102687,"language":54708,"meta":29,"style":29},[31,103129,103130],{"__ignoreMap":29},[34,103131,103132,103134,103136,103139,103141,103144],{"class":36,"line":37},[34,103133,2701],{"class":40},[34,103135,102384],{"class":52939},[34,103137,103138],{"class":3617}," model",[34,103140,221],{"class":40},[34,103142,103143],{"class":504},"\"first_sim\"",[34,103145,52946],{"class":40},[103,103147,103148,103149,103152,103153,30031],{},"这是 XML 的根标签。",[31,103150,103151],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[31,103154,103155],{},"first_sim",[24,103157,103158],{"className":54706,"code":102546,"language":54708,"meta":29,"style":29},[31,103159,103160],{"__ignoreMap":29},[34,103161,103162,103164,103166,103168,103170,103172,103174,103176,103178],{"class":36,"line":37},[34,103163,2701],{"class":40},[34,103165,70805],{"class":52939},[34,103167,102557],{"class":3617},[34,103169,221],{"class":40},[34,103171,102562],{"class":504},[34,103173,102565],{"class":3617},[34,103175,221],{"class":40},[34,103177,102570],{"class":504},[34,103179,102507],{"class":40},[103,103181,103182,103184,103185,103188,103189,103192],{},[31,103183,70805],{}," 用来设置仿真参数。",[31,103186,103187],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[31,103190,103191],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[24,103194,103196],{"className":54706,"code":103195,"language":54708,"meta":29,"style":29},"\u003Cworldbody>\n",[31,103197,103198],{"__ignoreMap":29},[34,103199,103200,103202,103205],{"class":36,"line":37},[34,103201,2701],{"class":40},[34,103203,103204],{"class":52939},"worldbody",[34,103206,52946],{"class":40},[103,103208,103209,103211],{},[31,103210,103204],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[24,103213,103215],{"className":54706,"code":103214,"language":54708,"meta":29,"style":29},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[31,103216,103217],{"__ignoreMap":29},[34,103218,103219,103221,103223,103225,103227,103230,103232,103234,103237,103239,103241,103244,103246,103248,103251],{"class":36,"line":37},[34,103220,2701],{"class":40},[34,103222,102483],{"class":52939},[34,103224,16566],{"class":3617},[34,103226,221],{"class":40},[34,103228,103229],{"class":504},"\"floor\"",[34,103231,55463],{"class":3617},[34,103233,221],{"class":40},[34,103235,103236],{"class":504},"\"plane\"",[34,103238,102499],{"class":3617},[34,103240,221],{"class":40},[34,103242,103243],{"class":504},"\"2 2 0.1\"",[34,103245,80404],{"class":3617},[34,103247,221],{"class":40},[34,103249,103250],{"class":504},"\"0.8 0.8 0.8 1\"",[34,103252,102507],{"class":40},[103,103254,103255,103256,103258,103259,103262,103263,103266,103267,103269],{},"这行创建地面。",[31,103257,102483],{}," 是几何体。",[31,103260,103261],{},"name=\"floor\""," 是名字。",[31,103264,103265],{},"type=\"plane\""," 表示平面。",[31,103268,56749],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[24,103271,103273],{"className":54706,"code":103272,"language":54708,"meta":29,"style":29},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[31,103274,103275],{"__ignoreMap":29},[34,103276,103277,103279,103281,103283,103285,103287,103289,103291,103293],{"class":36,"line":37},[34,103278,2701],{"class":40},[34,103280,53439],{"class":52939},[34,103282,16566],{"class":3617},[34,103284,221],{"class":40},[34,103286,55130],{"class":504},[34,103288,102469],{"class":3617},[34,103290,221],{"class":40},[34,103292,102474],{"class":504},[34,103294,52946],{"class":40},[103,103296,103297,103298,30031,103300,103303,103304,103306],{},"这行创建一个刚体，名字叫 ",[31,103299,55353],{},[31,103301,103302],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[31,103305,102532],{},"，也就是离地面 1 米高。",[24,103308,103310],{"className":54706,"code":103309,"language":54708,"meta":29,"style":29},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[31,103311,103312],{"__ignoreMap":29},[34,103313,103314,103316,103318,103320,103322,103325],{"class":36,"line":37},[34,103315,2701],{"class":40},[34,103317,102983],{"class":52939},[34,103319,16566],{"class":3617},[34,103321,221],{"class":40},[34,103323,103324],{"class":504},"\"box_free\"",[34,103326,102507],{"class":40},[103,103328,103329,103330,103332],{},"这行很重要。",[31,103331,102983],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[24,103334,103336],{"className":54706,"code":103335,"language":54708,"meta":29,"style":29},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[31,103337,103338],{"__ignoreMap":29},[34,103339,103340,103342,103344,103346,103348,103350,103352,103354,103356,103358,103360,103362,103365,103367,103369,103371,103373,103376],{"class":36,"line":37},[34,103341,2701],{"class":40},[34,103343,102483],{"class":52939},[34,103345,16566],{"class":3617},[34,103347,221],{"class":40},[34,103349,102490],{"class":504},[34,103351,55463],{"class":3617},[34,103353,221],{"class":40},[34,103355,55130],{"class":504},[34,103357,102499],{"class":3617},[34,103359,221],{"class":40},[34,103361,102504],{"class":504},[34,103363,103364],{"class":3617}," mass",[34,103366,221],{"class":40},[34,103368,5331],{"class":504},[34,103370,80404],{"class":3617},[34,103372,221],{"class":40},[34,103374,103375],{"class":504},"\"1 0 0 1\"",[34,103377,102507],{"class":40},[103,103379,103380,103381,103384,103385,103388,103389,103392,103393,103396],{},"这行给 box body 添加一个盒子形状。",[31,103382,103383],{},"type=\"box\""," 表示形状是盒子。",[31,103386,103387],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[31,103390,103391],{},"mass=\"1\""," 表示质量是 1。",[31,103394,103395],{},"rgba=\"1 0 0 1\""," 表示红色。",[24,103398,103400],{"className":26,"code":103399,"language":28,"meta":29,"style":29},"def main() -> None:\n",[31,103401,103402],{"__ignoreMap":29},[34,103403,103404,103406,103408,103410,103412],{"class":36,"line":37},[34,103405,33588],{"class":55},[34,103407,3627],{"class":3617},[34,103409,102761],{"class":40},[34,103411,492],{"class":44},[34,103413,5392],{"class":40},[103,103415,103416,103418,103419,103422,103423,103426],{},[31,103417,33588],{}," 用来定义函数。这里定义了一个叫 ",[31,103420,103421],{},"main"," 的函数。",[31,103424,103425],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[24,103428,103429],{"className":26,"code":102990,"language":28,"meta":29,"style":29},[31,103430,103431],{"__ignoreMap":29},[34,103432,103433,103435,103437,103439,103441],{"class":36,"line":37},[34,103434,102997],{"class":40},[34,103436,221],{"class":55},[34,103438,102775],{"class":40},[34,103440,102677],{"class":44},[34,103442,101],{"class":40},[103,103444,103445,103446,103449],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[31,103447,103448],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[24,103451,103452],{"className":26,"code":103014,"language":28,"meta":29,"style":29},[31,103453,103454],{"__ignoreMap":29},[34,103455,103456,103458,103460],{"class":36,"line":37},[34,103457,103021],{"class":40},[34,103459,221],{"class":55},[34,103461,102789],{"class":40},[103,103463,103464,103465,103467,103468,103470],{},"这行创建仿真数据。",[31,103466,35042],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[31,103469,35042],{}," 都会变化。",[24,103472,103474],{"className":26,"code":103473,"language":28,"meta":29,"style":29},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[31,103475,103476,103486,103496],{"__ignoreMap":29},[34,103477,103478,103480,103482,103484],{"class":36,"line":37},[34,103479,723],{"class":44},[34,103481,286],{"class":40},[34,103483,102802],{"class":504},[34,103485,102805],{"class":40},[34,103487,103488,103490,103492,103494],{"class":36,"line":165},[34,103489,723],{"class":44},[34,103491,286],{"class":40},[34,103493,102814],{"class":504},[34,103495,102817],{"class":40},[34,103497,103498,103500,103502,103504],{"class":36,"line":171},[34,103499,723],{"class":44},[34,103501,286],{"class":40},[34,103503,102826],{"class":504},[34,103505,102829],{"class":40},[103,103507,103508,103510,103511,103514,103515,103518,103519,103522,103523,103526],{},[31,103509,723],{}," 用来输出信息。",[31,103512,103513],{},"model.nq"," 是位置变量数量，",[31,103516,103517],{},"model.nv"," 是速度变量数量，",[31,103520,103521],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[31,103524,103525],{},"nu"," 是 0。",[24,103528,103530],{"className":26,"code":103529,"language":28,"meta":29,"style":29},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[31,103531,103532,103542],{"__ignoreMap":29},[34,103533,103534,103536,103538,103540],{"class":36,"line":37},[34,103535,723],{"class":44},[34,103537,286],{"class":40},[34,103539,102838],{"class":504},[34,103541,102841],{"class":40},[34,103543,103544,103546,103548,103550],{"class":36,"line":165},[34,103545,723],{"class":44},[34,103547,286],{"class":40},[34,103549,102850],{"class":504},[34,103551,102853],{"class":40},[103,103553,103554,103555,103557,103558,103560,103561,103564],{},"这里打印初始时间和初始位置。",[31,103556,102430],{}," 一开始是 0。",[31,103559,102433],{}," 是位置数组。",[31,103562,103563],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[24,103566,103567],{"className":26,"code":103039,"language":28,"meta":29,"style":29},[31,103568,103569,103585],{"__ignoreMap":29},[34,103570,103571,103573,103575,103577,103579,103581,103583],{"class":36,"line":37},[34,103572,4678],{"class":55},[34,103574,102864],{"class":40},[34,103576,27689],{"class":55},[34,103578,34084],{"class":44},[34,103580,286],{"class":40},[34,103582,451],{"class":44},[34,103584,32428],{"class":40},[34,103586,103587],{"class":36,"line":165},[34,103588,103062],{"class":40},[103,103590,103591,103593,103594,103597,103598,103600,103601,103603],{},[31,103592,4678],{}," 是循环。",[31,103595,103596],{},"range(100)"," 表示循环 100 次。",[31,103599,2783],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[31,103602,102578],{},"，仿真就前进一步。",[24,103605,103607],{"className":26,"code":103606,"language":28,"meta":29,"style":29},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[31,103608,103609,103619],{"__ignoreMap":29},[34,103610,103611,103613,103615,103617],{"class":36,"line":37},[34,103612,723],{"class":44},[34,103614,286],{"class":40},[34,103616,102892],{"class":504},[34,103618,102841],{"class":40},[34,103620,103621,103623,103625,103627],{"class":36,"line":165},[34,103622,723],{"class":44},[34,103624,286],{"class":40},[34,103626,102903],{"class":504},[34,103628,102853],{"class":40},[103,103630,103631],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[24,103633,103635],{"className":26,"code":103634,"language":28,"meta":29,"style":29},"if __name__ == \"__main__\":\n    main()\n",[31,103636,103637,103649],{"__ignoreMap":29},[34,103638,103639,103641,103643,103645,103647],{"class":36,"line":37},[34,103640,3189],{"class":55},[34,103642,32862],{"class":44},[34,103644,102922],{"class":55},[34,103646,102925],{"class":504},[34,103648,5392],{"class":40},[34,103650,103651],{"class":36,"line":165},[34,103652,102932],{"class":40},[103,103654,103655,103656,103659,103660,30031],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[31,103657,103658],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[31,103661,103658],{},[103,103663,103664],{},"运行:",[24,103666,103668],{"className":25467,"code":103667,"language":25469,"meta":29,"style":29},"python ch1_first_sim.py\n",[31,103669,103670],{"__ignoreMap":29},[34,103671,103672,103674],{"class":36,"line":37},[34,103673,28],{"class":3617},[34,103675,102649],{"class":504},[14,103677,103679],{"id":103678},"_5运行结果说明","5.运行结果说明",[103,103681,103682],{},"你应该看到类似输出:",[24,103684,103687],{"className":103685,"code":103686,"language":6838,"meta":29},[6836],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[31,103688,103686],{"__ignoreMap":29},[103,103690,103691,103693,103694,103697,103698,30031],{},[31,103692,102983],{}," 有 7 个位置变量: ",[31,103695,103696],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[31,103699,103700],{},"vx vy vz wx wy wz",[103,103702,103703,103704,103707],{},"你还会看到 ",[31,103705,103706],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103709,103711],{"id":103710},"_6验证步骤","6.验证步骤",[103,103713,103714],{},"确认版本:",[24,103716,103717],{"className":25467,"code":102302,"language":25469,"meta":29,"style":29},[31,103718,103719],{"__ignoreMap":29},[34,103720,103721,103723,103725],{"class":36,"line":37},[34,103722,28],{"class":3617},[34,103724,32004],{"class":44},[34,103726,102313],{"class":504},[103,103728,103729],{},"确认导入的是官方 bindings:",[24,103731,103733],{"className":25467,"code":103732,"language":25469,"meta":29,"style":29},"python -c \"import mujoco; print(mujoco)\"\n",[31,103734,103735],{"__ignoreMap":29},[34,103736,103737,103739,103741],{"class":36,"line":37},[34,103738,28],{"class":3617},[34,103740,32004],{"class":44},[34,103742,103743],{"class":504}," \"import mujoco; print(mujoco)\"\n",[103,103745,103746],{},"运行程序:",[24,103748,103749],{"className":25467,"code":103667,"language":25469,"meta":29,"style":29},[31,103750,103751],{"__ignoreMap":29},[34,103752,103753,103755],{"class":36,"line":37},[34,103754,28],{"class":3617},[34,103756,102649],{"class":504},[103,103758,103759,103760,103763,103764,30031],{},"检查 ",[31,103761,103762],{},"final time"," 是否约等于 ",[31,103765,103766],{},"1.0",[103,103768,103769],{},"再做几个小实验：",[1772,103771,103772,103782,103790,103803],{},[1775,103773,103774,103775,103777,103778,103781],{},"把 ",[31,103776,103302],{}," 改成 ",[31,103779,103780],{},"pos=\"0 0 2\"","，观察初始高度变化。",[1775,103783,103774,103784,103777,103786,103789],{},[31,103785,103191],{},[31,103787,103788],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[1775,103791,103774,103792,103777,103794,103797,103798,103800,103801,30031],{},[31,103793,103187],{},[31,103795,103796],{},"timestep=\"0.005\"","，观察 100 步后的 ",[31,103799,103762],{}," 是否变成约 ",[31,103802,36970],{},[1775,103804,103805,103806,103809],{},"删除 ",[31,103807,103808],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[103,103811,103812],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103814,103816],{"id":103815},"_7常见错误与解决方案","7.常见错误与解决方案",[19,103818,103820],{"id":103819},"modulenotfounderror-no-module-named-mujoco",[31,103821,103822],{},"ModuleNotFoundError: No module named 'mujoco'",[103,103824,103825],{},"解决:",[24,103827,103829],{"className":25467,"code":103828,"language":25469,"meta":29,"style":29},"pip install \"mujoco>=2.3\"\n",[31,103830,103831],{"__ignoreMap":29},[34,103832,103833,103835,103837],{"class":36,"line":37},[34,103834,25476],{"class":3617},[34,103836,25479],{"class":504},[34,103838,103839],{"class":504}," \"mujoco>=2.3\"\n",[19,103841,103843],{"id":103842},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[103,103845,103846],{},"先安装系统依赖:",[24,103848,103850],{"className":25467,"code":103849,"language":25469,"meta":29,"style":29},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[31,103851,103852],{"__ignoreMap":29},[34,103853,103854,103856,103858,103860,103862,103865,103867,103870,103872,103875,103877],{"class":36,"line":37},[34,103855,26222],{"class":3617},[34,103857,27961],{"class":504},[34,103859,25479],{"class":504},[34,103861,28046],{"class":44},[34,103863,103864],{"class":504}," mesa-libGL",[34,103866,102177],{"class":504},[34,103868,103869],{"class":504}," glfw",[34,103871,102197],{"class":504},[34,103873,103874],{"class":504}," libX11",[34,103876,102210],{"class":504},[34,103878,103879],{"class":504}," libXrandr\n",[19,103881,103883],{"id":103882},"xml-解析失败","XML 解析失败",[103,103885,103886],{},"检查:",[1772,103888,103889,103892,103895,103901],{},[1775,103890,103891],{},"标签是否闭合",[1775,103893,103894],{},"属性是否带引号",[1775,103896,103897,103898],{},"根节点是否是 ",[31,103899,103900],{},"\u003Cmujoco>",[1775,103902,103903,103905,103906,103909],{},[31,103904,53439],{}," 是否放在 ",[31,103907,103908],{},"\u003Cworldbody>"," 内部",[19,103911,103913,103915,103916],{"id":103912},"final-time-不是严格等于-10",[31,103914,103762],{}," 不是严格等于 ",[31,103917,103766],{},[103,103919,103920],{},"这通常不是错误。浮点数计算可能得到：",[24,103922,103925],{"className":103923,"code":103924,"language":6838,"meta":29},[6836],"1.0000000000000007\n",[31,103926,103924],{"__ignoreMap":29},[103,103928,103929,103930,103932],{},"只要接近 ",[31,103931,103766],{}," 就正常。",[19,103934,103935],{"id":103935},"方块没有掉下来",[103,103937,103938],{},"检查：",[1772,103940,103941,103947,103953,103958],{},[1775,103942,103943,103944],{},"方块 body 里是否有 ",[31,103945,103946],{},"\u003Cfreejoint\u002F>",[1775,103948,103949,103950],{},"重力是否是 ",[31,103951,103952],{},"0 0 -9.81",[1775,103954,103955,103956],{},"是否真的调用了 ",[31,103957,102048],{},[1775,103959,103960,103961,103963,103964],{},"你看的是否是 ",[31,103962,103706],{},"，不是 ",[31,103965,103966],{},"initial qpos",[14,103968,103970],{"id":103969},"_8本章小结","8.本章小结",[103,103972,103973],{},"本章你已经完成了 MuJoCo 的最小闭环：",[24,103975,103978],{"className":103976,"code":103977,"language":6838,"meta":29},[6836],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[31,103979,103977],{"__ignoreMap":29},[103,103981,103982],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1711,103984,103985],{},"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":29,"searchDepth":165,"depth":165,"links":103987},[103988,103989,103990,103995,103999,104000,104001,104009],{"id":102009,"depth":165,"text":102010},{"id":102132,"depth":165,"text":102133},{"id":102407,"depth":165,"text":102408,"children":103991},[103992,103993,103994],{"id":102445,"depth":171,"text":102446},{"id":102539,"depth":171,"text":102540},{"id":102591,"depth":171,"text":102592},{"id":102615,"depth":165,"text":102616,"children":103996},[103997,103998],{"id":102935,"depth":171,"text":102935},{"id":103071,"depth":171,"text":103071},{"id":103678,"depth":165,"text":103679},{"id":103710,"depth":165,"text":103711},{"id":103815,"depth":165,"text":103816,"children":104002},[104003,104004,104005,104006,104008],{"id":103819,"depth":171,"text":103822},{"id":103842,"depth":171,"text":103843},{"id":103882,"depth":171,"text":103883},{"id":103912,"depth":171,"text":104007},"final time 不是严格等于 1.0",{"id":103935,"depth":171,"text":103935},{"id":103969,"depth":165,"text":103970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102001,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104016,"title":104017,"body":104018,"description":29,"extension":1745,"meta":105674,"navigation":1474,"path":105675,"seo":105676,"stem":105677,"__hash__":105678},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104019,"toc":105650},[104020,104023,104025,104028,104031,104048,104143,104146,104152,104154,104156,104180,104183,104197,104200,104241,104243,104256,104258,104261,104309,104321,104324,104327,104333,104346,104413,104416,104435,104438,104441,104447,104449,104458,104461,104465,104474,104556,104565,104569,104575,104589,104599,104601,104931,104934,104946,104948,104959,104961,104964,104982,104985,104988,105006,105017,105020,105035,105045,105047,105068,105085,105105,105111,105151,105167,105183,105189,105192,105216,105232,105237,105267,105284,105309,105312,105327,105336,105351,105360,105375,105382,105384,105394,105407,105414,105417,105456,105463,105465,105517,105519,105525,105528,105535,105542,105545,105547,105565,105568,105571,105605,105617,105619,105622,105644,105647],[10,104021,104017],{"id":104022},"_2xml-与-mjcf-物理建模基础",[14,104024,102010],{"id":102009},[103,104026,104027],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[103,104029,104030],{},"本章结束后，你应该能看懂一个简单模型里：",[1772,104032,104033,104036,104039,104042,104045],{},[1775,104034,104035],{},"地面在哪里。",[1775,104037,104038],{},"物体初始位置在哪里。",[1775,104040,104041],{},"几何体是什么形状。",[1775,104043,104044],{},"哪些 body 可以自由运动。",[1775,104046,104047],{},"如何用名字在 Python 里找到 XML 中的对象。",[1948,104049,104050,104060],{},[1951,104051,104052],{},[1954,104053,104054,104057],{},[1957,104055,104056],{"align":25381},"标签",[1957,104058,104059],{"align":25381},"作用",[1994,104061,104062,104071,104081,104090,104100,104110,104123,104133],{},[1954,104063,104064,104068],{},[1999,104065,104066],{"align":25381},[31,104067,103900],{},[1999,104069,104070],{"align":25381},"根节点",[1954,104072,104073,104078],{},[1999,104074,104075],{"align":25381},[31,104076,104077],{},"\u003Coption>",[1999,104079,104080],{"align":25381},"仿真参数",[1954,104082,104083,104087],{},[1999,104084,104085],{"align":25381},[31,104086,103908],{},[1999,104088,104089],{"align":25381},"世界中的物体",[1954,104091,104092,104097],{},[1999,104093,104094],{"align":25381},[31,104095,104096],{},"\u003Cbody>",[1999,104098,104099],{"align":25381},"刚体",[1954,104101,104102,104107],{},[1999,104103,104104],{"align":25381},[31,104105,104106],{},"\u003Cgeom>",[1999,104108,104109],{"align":25381},"几何体、碰撞体、可视体",[1954,104111,104112,104120],{},[1999,104113,104114,26624,104117],{"align":25381},[31,104115,104116],{},"\u003Cjoint>",[31,104118,104119],{},"\u003Cfreejoint>",[1999,104121,104122],{"align":25381},"关节",[1954,104124,104125,104130],{},[1999,104126,104127],{"align":25381},[31,104128,104129],{},"\u003Csite>",[1999,104131,104132],{"align":25381},"标记点",[1954,104134,104135,104140],{},[1999,104136,104137],{"align":25381},[31,104138,104139],{},"\u003Cactuator>",[1999,104141,104142],{"align":25381},"控制器",[103,104144,104145],{},"初学时可以先记住：",[24,104147,104150],{"className":104148,"code":104149,"language":6838,"meta":29},[6836],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[31,104151,104149],{"__ignoreMap":29},[14,104153,102133],{"id":102132},[103,104155,102136],{},[24,104157,104159],{"className":25467,"code":104158,"language":25469,"meta":29,"style":29},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[31,104160,104161],{"__ignoreMap":29},[34,104162,104163,104165,104167,104169,104171,104173,104175,104177],{"class":36,"line":37},[34,104164,26222],{"class":3617},[34,104166,27961],{"class":504},[34,104168,25479],{"class":504},[34,104170,28046],{"class":44},[34,104172,103864],{"class":504},[34,104174,102177],{"class":504},[34,104176,103869],{"class":504},[34,104178,104179],{"class":504}," glfw-devel\n",[103,104181,104182],{},"pip:",[24,104184,104185],{"className":25467,"code":102282,"language":25469,"meta":29,"style":29},[31,104186,104187],{"__ignoreMap":29},[34,104188,104189,104191,104193,104195],{"class":36,"line":37},[34,104190,25476],{"class":3617},[34,104192,25479],{"class":504},[34,104194,102293],{"class":504},[34,104196,102296],{"class":504},[103,104198,104199],{},"conda:",[24,104201,104203],{"className":25467,"code":104202,"language":25469,"meta":29,"style":29},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[31,104204,104205,104222,104231],{"__ignoreMap":29},[34,104206,104207,104209,104211,104213,104216,104218,104220],{"class":36,"line":37},[34,104208,31976],{"class":3617},[34,104210,30822],{"class":504},[34,104212,26761],{"class":44},[34,104214,104215],{"class":504}," mujoco-xml",[34,104217,102338],{"class":504},[34,104219,102341],{"class":44},[34,104221,102344],{"class":44},[34,104223,104224,104226,104228],{"class":36,"line":165},[34,104225,31976],{"class":3617},[34,104227,102351],{"class":504},[34,104229,104230],{"class":504}," mujoco-xml\n",[34,104232,104233,104235,104237,104239],{"class":36,"line":171},[34,104234,25476],{"class":3617},[34,104236,25479],{"class":504},[34,104238,102293],{"class":504},[34,104240,102296],{"class":504},[103,104242,102367],{},[1772,104244,104245,104248,104253],{},[1775,104246,104247],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[1775,104249,104250,104251,30031],{},"本章使用基础标签，适用于 ",[31,104252,102390],{},[1775,104254,104255],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104257,102408],{"id":102407},[103,104259,104260],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[24,104262,104264],{"className":54706,"code":104263,"language":54708,"meta":29,"style":29},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[31,104265,104266,104280,104288,104293,104301],{"__ignoreMap":29},[34,104267,104268,104270,104272,104274,104276,104278],{"class":36,"line":37},[34,104269,2701],{"class":40},[34,104271,102384],{"class":52939},[34,104273,103138],{"class":3617},[34,104275,221],{"class":40},[34,104277,64318],{"class":504},[34,104279,52946],{"class":40},[34,104281,104282,104284,104286],{"class":36,"line":165},[34,104283,53783],{"class":40},[34,104285,103204],{"class":52939},[34,104287,52946],{"class":40},[34,104289,104290],{"class":36,"line":171},[34,104291,104292],{"class":40},"    ...\n",[34,104294,104295,104297,104299],{"class":36,"line":182},[34,104296,54056],{"class":40},[34,104298,103204],{"class":52939},[34,104300,52946],{"class":40},[34,104302,104303,104305,104307],{"class":36,"line":188},[34,104304,53424],{"class":40},[34,104306,102384],{"class":52939},[34,104308,52946],{"class":40},[103,104310,104311,104313,104314,104316,104317,104320],{},[31,104312,53439],{}," 表示刚体。",[31,104315,102483],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[31,104318,104319],{},"joint"," 表示刚体相对父刚体如何运动。",[19,104322,104323],{"id":104323},"层级结构非常重要",[103,104325,104326],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[24,104328,104331],{"className":104329,"code":104330,"language":6838,"meta":29},[6836],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[31,104332,104330],{"__ignoreMap":29},[103,104334,104335,102381,104338,104341,104342,104345],{},[31,104336,104337],{},"red_box_geom",[31,104339,104340],{},"box_center"," 都属于 ",[31,104343,104344],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[24,104347,104349],{"className":54706,"code":104348,"language":54708,"meta":29,"style":29},"\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",[31,104350,104351,104371,104385,104405],{"__ignoreMap":29},[34,104352,104353,104355,104357,104359,104361,104363,104365,104367,104369],{"class":36,"line":37},[34,104354,2701],{"class":40},[34,104356,53439],{"class":52939},[34,104358,16566],{"class":3617},[34,104360,221],{"class":40},[34,104362,55130],{"class":504},[34,104364,102469],{"class":3617},[34,104366,221],{"class":40},[34,104368,102474],{"class":504},[34,104370,52946],{"class":40},[34,104372,104373,104375,104377,104379,104381,104383],{"class":36,"line":165},[34,104374,53783],{"class":40},[34,104376,102983],{"class":52939},[34,104378,16566],{"class":3617},[34,104380,221],{"class":40},[34,104382,103324],{"class":504},[34,104384,102507],{"class":40},[34,104386,104387,104389,104391,104393,104395,104397,104399,104401,104403],{"class":36,"line":171},[34,104388,53783],{"class":40},[34,104390,102483],{"class":52939},[34,104392,55463],{"class":3617},[34,104394,221],{"class":40},[34,104396,55130],{"class":504},[34,104398,102499],{"class":3617},[34,104400,221],{"class":40},[34,104402,102504],{"class":504},[34,104404,102507],{"class":40},[34,104406,104407,104409,104411],{"class":36,"line":182},[34,104408,53424],{"class":40},[34,104410,53439],{"class":52939},[34,104412,52946],{"class":40},[103,104414,104415],{},"含义:",[1772,104417,104418,104424,104429,104432],{},[1775,104419,104420,104421,104423],{},"创建名为 ",[31,104422,55353],{}," 的刚体",[1775,104425,104426,104427],{},"初始位置在世界坐标 ",[31,104428,102532],{},[1775,104430,104431],{},"它有一个自由关节",[1775,104433,104434],{},"它有一个盒子几何体",[19,104436,104437],{"id":104437},"坐标怎么理解",[103,104439,104440],{},"MuJoCo 默认使用三维坐标：",[24,104442,104445],{"className":104443,"code":104444,"language":6838,"meta":29},[6836],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[31,104446,104444],{"__ignoreMap":29},[103,104448,16279],{},[24,104450,104452],{"className":54706,"code":104451,"language":54708,"meta":29,"style":29},"pos=\"0 0 1\"\n",[31,104453,104454],{"__ignoreMap":29},[34,104455,104456],{"class":36,"line":37},[34,104457,104451],{"class":40},[103,104459,104460],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[19,104462,104464],{"id":104463},"geom-的-size-怎么理解","geom 的 size 怎么理解",[103,104466,104467,104468,84167,104471,104473],{},"不同 ",[31,104469,104470],{},"type",[31,104472,218],{}," 含义不同：",[1948,104475,104476,104491],{},[1951,104477,104478],{},[1954,104479,104480,104484,104489],{},[1957,104481,104482],{"align":25381},[31,104483,104470],{},[1957,104485,104486,104488],{"align":25381},[31,104487,218],{}," 示例",[1957,104490,102063],{"align":25381},[1994,104492,104493,104507,104522,104541],{},[1954,104494,104495,104499,104504],{},[1999,104496,104497],{"align":25381},[31,104498,55353],{},[1999,104500,104501],{"align":25381},[31,104502,104503],{},"size=\"0.1 0.2 0.3\"",[1999,104505,104506],{"align":25381},"x\u002Fy\u002Fz 半边长，不是完整长度",[1954,104508,104509,104514,104519],{},[1999,104510,104511],{"align":25381},[31,104512,104513],{},"sphere",[1999,104515,104516],{"align":25381},[31,104517,104518],{},"size=\"0.1\"",[1999,104520,104521],{"align":25381},"球半径",[1954,104523,104524,104529,104534],{},[1999,104525,104526],{"align":25381},[31,104527,104528],{},"capsule",[1999,104530,104531],{"align":25381},[31,104532,104533],{},"size=\"0.03\"",[1999,104535,104536,104537,104540],{"align":25381},"胶囊半径，长度常用 ",[31,104538,104539],{},"fromto"," 指定",[1954,104542,104543,104548,104553],{},[1999,104544,104545],{"align":25381},[31,104546,104547],{},"plane",[1999,104549,104550],{"align":25381},[31,104551,104552],{},"size=\"3 3 0.1\"",[1999,104554,104555],{"align":25381},"可视平面大小，通常当地面",[103,104557,104558,104559,104561,104562,104564],{},"最容易踩坑的是 box：",[31,104560,103387],{}," 表示边长大约是 ",[31,104563,33678],{},"，因为 MuJoCo 用的是半边长。",[19,104566,104568],{"id":104567},"site-是什么","site 是什么",[103,104570,104571,104574],{},[31,104572,104573],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[1772,104576,104577,104580,104583,104586],{},[1775,104578,104579],{},"标记机械臂末端。",[1775,104581,104582],{},"标记目标位置。",[1775,104584,104585],{},"放传感器或相机参考点。",[1775,104587,104588],{},"在 Python 中读取某个关键点的世界坐标。",[103,104590,104591,104592,102381,104595,104598],{},"在后面的 Reacher 任务中，",[31,104593,104594],{},"tip",[31,104596,104597],{},"target"," 就会用 site 表示。",[14,104600,102616],{"id":102615},[24,104602,104604],{"className":26,"code":104603,"language":28,"meta":29,"style":29},"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",[31,104605,104606,104612,104622,104626,104630,104638,104643,104647,104651,104655,104660,104664,104669,104674,104679,104684,104688,104692,104696,104700,104704,104708,104720,104732,104740,104744,104759,104774,104778,104791,104806,104819,104832,104836,104852,104856,104860,104871,104883,104895,104907,104911,104915,104927],{"__ignoreMap":29},[34,104607,104608,104610],{"class":36,"line":37},[34,104609,32036],{"class":55},[34,104611,102664],{"class":40},[34,104613,104614,104616,104618,104620],{"class":36,"line":165},[34,104615,32036],{"class":55},[34,104617,33022],{"class":40},[34,104619,33025],{"class":55},[34,104621,33028],{"class":40},[34,104623,104624],{"class":36,"line":171},[34,104625,1475],{"emptyLinePlaceholder":1474},[34,104627,104628],{"class":36,"line":182},[34,104629,1475],{"emptyLinePlaceholder":1474},[34,104631,104632,104634,104636],{"class":36,"line":188},[34,104633,102677],{"class":44},[34,104635,56],{"class":55},[34,104637,102682],{"class":504},[34,104639,104640],{"class":36,"line":518},[34,104641,104642],{"class":504},"\u003Cmujoco model=\"xml_basic\">\n",[34,104644,104645],{"class":36,"line":524},[34,104646,102692],{"class":504},[34,104648,104649],{"class":36,"line":530},[34,104650,1475],{"emptyLinePlaceholder":1474},[34,104652,104653],{"class":36,"line":624},[34,104654,102701],{"class":504},[34,104656,104657],{"class":36,"line":630},[34,104658,104659],{"class":504},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[34,104661,104662],{"class":36,"line":636},[34,104663,1475],{"emptyLinePlaceholder":1474},[34,104665,104666],{"class":36,"line":1513},[34,104667,104668],{"class":504},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[34,104670,104671],{"class":36,"line":1519},[34,104672,104673],{"class":504},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[34,104675,104676],{"class":36,"line":3283},[34,104677,104678],{"class":504},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,104680,104681],{"class":36,"line":3297},[34,104682,104683],{"class":504},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[34,104685,104686],{"class":36,"line":3302},[34,104687,102730],{"class":504},[34,104689,104690],{"class":36,"line":3308},[34,104691,102735],{"class":504},[34,104693,104694],{"class":36,"line":3328},[34,104695,102740],{"class":504},[34,104697,104698],{"class":36,"line":3333},[34,104699,505],{"class":504},[34,104701,104702],{"class":36,"line":3347},[34,104703,1475],{"emptyLinePlaceholder":1474},[34,104705,104706],{"class":36,"line":3352},[34,104707,1475],{"emptyLinePlaceholder":1474},[34,104709,104710,104712,104714,104716,104718],{"class":36,"line":3381},[34,104711,33588],{"class":55},[34,104713,3627],{"class":3617},[34,104715,102761],{"class":40},[34,104717,492],{"class":44},[34,104719,5392],{"class":40},[34,104721,104722,104724,104726,104728,104730],{"class":36,"line":3386},[34,104723,102770],{"class":40},[34,104725,221],{"class":55},[34,104727,102775],{"class":40},[34,104729,102677],{"class":44},[34,104731,101],{"class":40},[34,104733,104734,104736,104738],{"class":36,"line":3403},[34,104735,102784],{"class":40},[34,104737,221],{"class":55},[34,104739,102789],{"class":40},[34,104741,104742],{"class":36,"line":3408},[34,104743,1475],{"emptyLinePlaceholder":1474},[34,104745,104746,104749,104751,104754,104757],{"class":36,"line":3413},[34,104747,104748],{"class":40},"    box_body_id ",[34,104750,221],{"class":55},[34,104752,104753],{"class":40}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[34,104755,104756],{"class":504},"\"red_box\"",[34,104758,101],{"class":40},[34,104760,104761,104764,104766,104769,104772],{"class":36,"line":3418},[34,104762,104763],{"class":40},"    site_id ",[34,104765,221],{"class":55},[34,104767,104768],{"class":40}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[34,104770,104771],{"class":504},"\"box_center\"",[34,104773,101],{"class":40},[34,104775,104776],{"class":36,"line":3432},[34,104777,1475],{"emptyLinePlaceholder":1474},[34,104779,104780,104782,104785,104787,104789],{"class":36,"line":3437},[34,104781,4754],{"class":55},[34,104783,104784],{"class":40}," box_body_id ",[34,104786,2701],{"class":55},[34,104788,98],{"class":44},[34,104790,5392],{"class":40},[34,104792,104793,104796,104799,104801,104804],{"class":36,"line":4230},[34,104794,104795],{"class":55},"        raise",[34,104797,104798],{"class":44}," RuntimeError",[34,104800,286],{"class":40},[34,104802,104803],{"class":504},"\"body red_box not found\"",[34,104805,101],{"class":40},[34,104807,104808,104810,104813,104815,104817],{"class":36,"line":4244},[34,104809,4754],{"class":55},[34,104811,104812],{"class":40}," site_id ",[34,104814,2701],{"class":55},[34,104816,98],{"class":44},[34,104818,5392],{"class":40},[34,104820,104821,104823,104825,104827,104830],{"class":36,"line":4252},[34,104822,104795],{"class":55},[34,104824,104798],{"class":44},[34,104826,286],{"class":40},[34,104828,104829],{"class":504},"\"site box_center not found\"",[34,104831,101],{"class":40},[34,104833,104834],{"class":36,"line":4257},[34,104835,1475],{"emptyLinePlaceholder":1474},[34,104837,104838,104840,104842,104844,104846,104848,104850],{"class":36,"line":4263},[34,104839,4854],{"class":55},[34,104841,102864],{"class":40},[34,104843,27689],{"class":55},[34,104845,34084],{"class":44},[34,104847,286],{"class":40},[34,104849,3376],{"class":44},[34,104851,32428],{"class":40},[34,104853,104854],{"class":36,"line":4269},[34,104855,102879],{"class":40},[34,104857,104858],{"class":36,"line":4274},[34,104859,1475],{"emptyLinePlaceholder":1474},[34,104861,104862,104864,104866,104869],{"class":36,"line":9598},[34,104863,32941],{"class":44},[34,104865,286],{"class":40},[34,104867,104868],{"class":504},"\"simulation time:\"",[34,104870,102841],{"class":40},[34,104872,104873,104875,104877,104880],{"class":36,"line":9622},[34,104874,32941],{"class":44},[34,104876,286],{"class":40},[34,104878,104879],{"class":504},"\"box body position:\"",[34,104881,104882],{"class":40},", data.xpos[box_body_id].copy())\n",[34,104884,104885,104887,104889,104892],{"class":36,"line":9627},[34,104886,32941],{"class":44},[34,104888,286],{"class":40},[34,104890,104891],{"class":504},"\"site position:\"",[34,104893,104894],{"class":40},", data.site_xpos[site_id].copy())\n",[34,104896,104897,104899,104901,104904],{"class":36,"line":9633},[34,104898,32941],{"class":44},[34,104900,286],{"class":40},[34,104902,104903],{"class":504},"\"box qpos:\"",[34,104905,104906],{"class":40},", np.array(data.qpos))\n",[34,104908,104909],{"class":36,"line":9660},[34,104910,1475],{"emptyLinePlaceholder":1474},[34,104912,104913],{"class":36,"line":9665},[34,104914,1475],{"emptyLinePlaceholder":1474},[34,104916,104917,104919,104921,104923,104925],{"class":36,"line":9671},[34,104918,3189],{"class":55},[34,104920,32862],{"class":44},[34,104922,102922],{"class":55},[34,104924,102925],{"class":504},[34,104926,5392],{"class":40},[34,104928,104929],{"class":36,"line":9683},[34,104930,102932],{"class":40},[103,104932,104933],{},"保存为：",[24,104935,104937],{"className":25467,"code":104936,"language":25469,"meta":29,"style":29},"touch ch2_xml_basic.py\n",[31,104938,104939],{"__ignoreMap":29},[34,104940,104941,104943],{"class":36,"line":37},[34,104942,102646],{"class":3617},[34,104944,104945],{"class":504}," ch2_xml_basic.py\n",[103,104947,103664],{},[24,104949,104951],{"className":25467,"code":104950,"language":25469,"meta":29,"style":29},"python ch2_xml_basic.py\n",[31,104952,104953],{"__ignoreMap":29},[34,104954,104955,104957],{"class":36,"line":37},[34,104956,28],{"class":3617},[34,104958,104945],{"class":504},[19,104960,102935],{"id":102935},[103,104962,104963],{},"用名字查找 body：",[24,104965,104967],{"className":26,"code":104966,"language":28,"meta":29,"style":29},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[31,104968,104969],{"__ignoreMap":29},[34,104970,104971,104974,104976,104978,104980],{"class":36,"line":37},[34,104972,104973],{"class":40},"box_body_id ",[34,104975,221],{"class":55},[34,104977,104753],{"class":40},[34,104979,104756],{"class":504},[34,104981,101],{"class":40},[103,104983,104984],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[103,104986,104987],{},"用名字查找 site：",[24,104989,104991],{"className":26,"code":104990,"language":28,"meta":29,"style":29},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[31,104992,104993],{"__ignoreMap":29},[34,104994,104995,104998,105000,105002,105004],{"class":36,"line":37},[34,104996,104997],{"class":40},"site_id ",[34,104999,221],{"class":55},[34,105001,104768],{"class":40},[34,105003,104771],{"class":504},[34,105005,101],{"class":40},[103,105007,105008,105009,105012,105013,105016],{},"注意第二个参数是对象类型。查 body 就用 ",[31,105010,105011],{},"mjOBJ_BODY","，查 site 就用 ",[31,105014,105015],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[103,105018,105019],{},"读取世界坐标：",[24,105021,105023],{"className":26,"code":105022,"language":28,"meta":29,"style":29},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[31,105024,105025,105030],{"__ignoreMap":29},[34,105026,105027],{"class":36,"line":37},[34,105028,105029],{"class":40},"data.xpos[box_body_id]\n",[34,105031,105032],{"class":36,"line":165},[34,105033,105034],{"class":40},"data.site_xpos[site_id]\n",[103,105036,105037,105040,105041,105044],{},[31,105038,105039],{},"xpos"," 是 body 的世界坐标，",[31,105042,105043],{},"site_xpos"," 是 site 的世界坐标。",[19,105046,103071],{"id":103071},[24,105048,105050],{"className":26,"code":105049,"language":28,"meta":29,"style":29},"import mujoco\nimport numpy as np\n",[31,105051,105052,105058],{"__ignoreMap":29},[34,105053,105054,105056],{"class":36,"line":37},[34,105055,32036],{"class":55},[34,105057,102664],{"class":40},[34,105059,105060,105062,105064,105066],{"class":36,"line":165},[34,105061,32036],{"class":55},[34,105063,33022],{"class":40},[34,105065,33025],{"class":55},[34,105067,33028],{"class":40},[103,105069,105070,105071,105074,105075,105078,105079,2021,105082,30031],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[31,105072,105073],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[31,105076,105077],{},"as np"," 是习惯写法，后面就可以写 ",[31,105080,105081],{},"np.array(...)",[31,105083,105084],{},"np.round(...)",[24,105086,105087],{"className":26,"code":102958,"language":28,"meta":29,"style":29},[31,105088,105089,105097,105101],{"__ignoreMap":29},[34,105090,105091,105093,105095],{"class":36,"line":37},[34,105092,102677],{"class":44},[34,105094,56],{"class":55},[34,105096,102682],{"class":504},[34,105098,105099],{"class":36,"line":165},[34,105100,102973],{"class":504},[34,105102,105103],{"class":36,"line":171},[34,105104,505],{"class":504},[103,105106,105107,105108,30031],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[31,105109,105110],{},"mujoco.MjModel.from_xml_string(XML)",[24,105112,105114],{"className":54706,"code":105113,"language":54708,"meta":29,"style":29},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[31,105115,105116],{"__ignoreMap":29},[34,105117,105118,105120,105122,105124,105126,105128,105130,105132,105135,105137,105139,105142,105144,105146,105149],{"class":36,"line":37},[34,105119,2701],{"class":40},[34,105121,104573],{"class":52939},[34,105123,16566],{"class":3617},[34,105125,221],{"class":40},[34,105127,104771],{"class":504},[34,105129,102469],{"class":3617},[34,105131,221],{"class":40},[34,105133,105134],{"class":504},"\"0 0 0\"",[34,105136,102499],{"class":3617},[34,105138,221],{"class":40},[34,105140,105141],{"class":504},"\"0.03\"",[34,105143,80404],{"class":3617},[34,105145,221],{"class":40},[34,105147,105148],{"class":504},"\"0 1 0 1\"",[34,105150,102507],{"class":40},[103,105152,105153,105155,105156,105159,105160,105162,105163,105166],{},[31,105154,104573],{}," 是标记点。",[31,105157,105158],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[31,105161,104533],{}," 表示显示出来的小球大小。",[31,105164,105165],{},"rgba=\"0 1 0 1\""," 表示绿色。",[24,105168,105169],{"className":26,"code":104966,"language":28,"meta":29,"style":29},[31,105170,105171],{"__ignoreMap":29},[34,105172,105173,105175,105177,105179,105181],{"class":36,"line":37},[34,105174,104973],{"class":40},[34,105176,221],{"class":55},[34,105178,104753],{"class":40},[34,105180,104756],{"class":504},[34,105182,101],{"class":40},[103,105184,105185,105186,105188],{},"这行的作用是：根据名字 ",[31,105187,104756],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[103,105190,105191],{},"拆开看：",[1772,105193,105194,105200,105205,105211],{},[1775,105195,105196,105199],{},[31,105197,105198],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[1775,105201,105202,105204],{},[31,105203,103448],{}," 是被查询的模型。",[1775,105206,105207,105210],{},[31,105208,105209],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[1775,105212,105213,105215],{},[31,105214,104756],{}," 是 XML 里写的名字。",[24,105217,105218],{"className":26,"code":104990,"language":28,"meta":29,"style":29},[31,105219,105220],{"__ignoreMap":29},[34,105221,105222,105224,105226,105228,105230],{"class":36,"line":37},[34,105223,104997],{"class":40},[34,105225,221],{"class":55},[34,105227,104768],{"class":40},[34,105229,104771],{"class":504},[34,105231,101],{"class":40},[103,105233,105234,105235,30031],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[31,105236,104771],{},[24,105238,105240],{"className":26,"code":105239,"language":28,"meta":29,"style":29},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[31,105241,105242,105254],{"__ignoreMap":29},[34,105243,105244,105246,105248,105250,105252],{"class":36,"line":37},[34,105245,3189],{"class":55},[34,105247,104784],{"class":40},[34,105249,2701],{"class":55},[34,105251,98],{"class":44},[34,105253,5392],{"class":40},[34,105255,105256,105259,105261,105263,105265],{"class":36,"line":165},[34,105257,105258],{"class":55},"    raise",[34,105260,104798],{"class":44},[34,105262,286],{"class":40},[34,105264,104803],{"class":504},[34,105266,101],{"class":40},[103,105268,105269,105271,105272,105275,105276,105279,105280,105283],{},[31,105270,3189],{}," 是条件判断。",[31,105273,105274],{},"mj_name2id"," 找不到对象时会返回 ",[31,105277,105278],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[31,105281,105282],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[24,105285,105287],{"className":26,"code":105286,"language":28,"meta":29,"style":29},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[31,105288,105289,105305],{"__ignoreMap":29},[34,105290,105291,105293,105295,105297,105299,105301,105303],{"class":36,"line":37},[34,105292,4678],{"class":55},[34,105294,102864],{"class":40},[34,105296,27689],{"class":55},[34,105298,34084],{"class":44},[34,105300,286],{"class":40},[34,105302,3376],{"class":44},[34,105304,32428],{"class":40},[34,105306,105307],{"class":36,"line":165},[34,105308,103062],{"class":40},[103,105310,105311],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[24,105313,105315],{"className":26,"code":105314,"language":28,"meta":29,"style":29},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[31,105316,105317],{"__ignoreMap":29},[34,105318,105319,105321,105323,105325],{"class":36,"line":37},[34,105320,723],{"class":44},[34,105322,286],{"class":40},[34,105324,104879],{"class":504},[34,105326,104882],{"class":40},[103,105328,105329,105331,105332,105335],{},[31,105330,102442],{}," 保存所有 body 的世界坐标。",[31,105333,105334],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[24,105337,105339],{"className":26,"code":105338,"language":28,"meta":29,"style":29},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[31,105340,105341],{"__ignoreMap":29},[34,105342,105343,105345,105347,105349],{"class":36,"line":37},[34,105344,723],{"class":44},[34,105346,286],{"class":40},[34,105348,104891],{"class":504},[34,105350,104894],{"class":40},[103,105352,105353,105356,105357,105359],{},[31,105354,105355],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[31,105358,104340],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[24,105361,105363],{"className":26,"code":105362,"language":28,"meta":29,"style":29},"print(\"box qpos:\", np.array(data.qpos))\n",[31,105364,105365],{"__ignoreMap":29},[34,105366,105367,105369,105371,105373],{"class":36,"line":37},[34,105368,723],{"class":44},[34,105370,286],{"class":40},[34,105372,104903],{"class":504},[34,105374,104906],{"class":40},[103,105376,105377,105378,105381],{},"这里打印广义位置数组。",[31,105379,105380],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105383,103679],{"id":103678},[103,105385,105386,105387,105390,105391,30031],{},"程序会输出 ",[31,105388,105389],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[31,105392,105393],{},"qpos",[103,105395,105396,105398,105399,105402,105403,105406],{},[31,105397,105334],{}," 是 body 的世界坐标位置。",[31,105400,105401],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[31,105404,105405],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[103,105408,83859,105409,84167,105411,105413],{},[31,105410,104340],{},[31,105412,105158],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[103,105415,105416],{},"如果你把 site 改成：",[24,105418,105420],{"className":54706,"code":105419,"language":54708,"meta":29,"style":29},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[31,105421,105422],{"__ignoreMap":29},[34,105423,105424,105426,105428,105430,105432,105435,105437,105439,105442,105444,105446,105448,105450,105452,105454],{"class":36,"line":37},[34,105425,2701],{"class":40},[34,105427,104573],{"class":52939},[34,105429,16566],{"class":3617},[34,105431,221],{"class":40},[34,105433,105434],{"class":504},"\"box_top\"",[34,105436,102469],{"class":3617},[34,105438,221],{"class":40},[34,105440,105441],{"class":504},"\"0 0 0.15\"",[34,105443,102499],{"class":3617},[34,105445,221],{"class":40},[34,105447,105141],{"class":504},[34,105449,80404],{"class":3617},[34,105451,221],{"class":40},[34,105453,105148],{"class":504},[34,105455,102507],{"class":40},[103,105457,105458,105459,105462],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[31,105460,105461],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105464,103711],{"id":103710},[1772,105466,105467,105476,105479,105486,105492,105503],{},[1775,105468,103774,105469,105471,105472,103777,105474,30031],{},[31,105470,104344],{}," 的初始高度从 ",[31,105473,394],{},[31,105475,332],{},[1775,105477,105478],{},"重新运行程序。",[1775,105480,105481,105482,105485],{},"观察 ",[31,105483,105484],{},"box qpos"," 和最终位置是否变化。",[1775,105487,105488,105489,105491],{},"故意把 ",[31,105490,104573],{}," 名称改错，确认程序能报错。",[1775,105493,103774,105494,105496,105497,103777,105499,105502],{},[31,105495,102483],{}," 的颜色 ",[31,105498,103395],{},[31,105500,105501],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[1775,105504,103774,105505,84167,105507,103777,105510,105513,105514,105516],{},[31,105506,104340],{},[31,105508,105509],{},"pos",[31,105511,105512],{},"0 0 0.2","，观察 ",[31,105515,105461],{}," 如何变化。",[14,105518,103816],{"id":103815},[19,105520,105522],{"id":105521},"xml-error-schema-violation",[31,105523,105524],{},"XML Error: Schema violation",[103,105526,105527],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[19,105529,105531,82927,105533],{"id":105530},"mj_name2id-返回-1",[31,105532,105274],{},[31,105534,105278],{},[103,105536,105537,105538,105541],{},"说明名字没有找到。检查 XML 中 ",[31,105539,105540],{},"name=\"...\"","，并确认对象类型正确。",[19,105543,105544],{"id":105544},"物体不下落",[103,105546,103886],{},[1772,105548,105549,105554,105559],{},[1775,105550,105551,105552],{},"body 是否有 ",[31,105553,102983],{},[1775,105555,105556,105557],{},"gravity 是否为 ",[31,105558,103952],{},[1775,105560,105561,105562,105564],{},"body 是否被固定在 ",[31,105563,103204],{}," 中",[19,105566,105567],{"id":105567},"坐标看起来不符合预期",[103,105569,105570],{},"先区分两种坐标：",[1948,105572,105573,105582],{},[1951,105574,105575],{},[1954,105576,105577,105580],{},[1957,105578,105579],{"align":25381},"坐标",[1957,105581,102063],{"align":25381},[1994,105583,105584,105594],{},[1954,105585,105586,105591],{},[1999,105587,105588,105589],{"align":25381},"XML 里的 ",[31,105590,105509],{},[1999,105592,105593],{"align":25381},"相对父 body 的局部坐标",[1954,105595,105596,105602],{},[1999,105597,105598,26624,105600],{"align":25381},[31,105599,102442],{},[31,105601,105355],{},[1999,105603,105604],{"align":25381},"仿真更新后的世界坐标",[103,105606,105607,105608,105610,105611,84176,105614,105616],{},"如果你修改了 ",[31,105609,102433],{},"，但还没调用 ",[31,105612,105613],{},"mj_forward",[31,105615,102578],{},"，世界坐标可能还没有更新。",[14,105618,103970],{"id":103969},[103,105620,105621],{},"MJCF 建模先掌握四件事：",[1772,105623,105624,105629,105634,105639],{},[1775,105625,105626,105628],{},[31,105627,53439],{}," 表示刚体层级。",[1775,105630,105631,105633],{},[31,105632,102483],{}," 表示形状、碰撞和质量。",[1775,105635,105636,105638],{},[31,105637,104319],{}," 决定 body 能不能动、怎么动。",[1775,105640,105641,105643],{},[31,105642,104573],{}," 用来标记关键点，方便 Python 读取位置。",[103,105645,105646],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1711,105648,105649],{},"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":29,"searchDepth":165,"depth":165,"links":105651},[105652,105653,105654,105660,105664,105665,105666,105673],{"id":102009,"depth":165,"text":102010},{"id":102132,"depth":165,"text":102133},{"id":102407,"depth":165,"text":102408,"children":105655},[105656,105657,105658,105659],{"id":104323,"depth":171,"text":104323},{"id":104437,"depth":171,"text":104437},{"id":104463,"depth":171,"text":104464},{"id":104567,"depth":171,"text":104568},{"id":102615,"depth":165,"text":102616,"children":105661},[105662,105663],{"id":102935,"depth":171,"text":102935},{"id":103071,"depth":171,"text":103071},{"id":103678,"depth":165,"text":103679},{"id":103710,"depth":165,"text":103711},{"id":103815,"depth":165,"text":103816,"children":105667},[105668,105669,105671,105672],{"id":105521,"depth":171,"text":105524},{"id":105530,"depth":171,"text":105670},"mj_name2id 返回 -1",{"id":105544,"depth":171,"text":105544},{"id":105567,"depth":171,"text":105567},{"id":103969,"depth":165,"text":103970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104017,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105680,"title":105681,"body":105682,"description":29,"extension":1745,"meta":107177,"navigation":1474,"path":107178,"seo":107179,"stem":107180,"__hash__":107181},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105683,"toc":107149},[105684,105687,105689,105692,105695,105733,105736,105742,105745,105747,105749,105776,105778,105792,105794,105835,105837,105861,105863,105866,105875,105884,105887,105896,105904,105913,105916,105926,105929,105981,105988,105994,106002,106050,106053,106072,106075,106083,106087,106096,106129,106131,106479,106481,106493,106495,106506,106508,106511,106532,106538,106541,106566,106576,106579,106587,106590,106593,106614,106625,106627,106647,106650,106671,106680,106699,106705,106730,106733,106747,106754,106778,106781,106789,106798,106814,106826,106834,106843,106845,106848,106872,106877,106880,106902,106904,106943,106945,106952,106954,106962,106965,106968,106980,107021,107028,107039,107046,107049,107098,107101,107104,107110,107112,107117,107143,107146],[10,105685,105681],{"id":105686},"_3python-控制接口读取状态与推进仿真",[14,105688,102010],{"id":102009},[103,105690,105691],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[103,105693,105694],{},"你将学习:",[1772,105696,105697,105702,105707,105711,105716,105727],{},[1775,105698,105699],{},[31,105700,105701],{},"MjModel.from_xml_string",[1775,105703,105704],{},[31,105705,105706],{},"MjData(model)",[1775,105708,105709],{},[31,105710,102578],{},[1775,105712,105713],{},[31,105714,105715],{},"mj_resetData",[1775,105717,105718,105719,2021,105721,2021,105724],{},"读取 ",[31,105720,105393],{},[31,105722,105723],{},"qvel",[31,105725,105726],{},"ctrl",[1775,105728,105729,105730],{},"使用 ",[31,105731,105732],{},"model.opt.timestep",[103,105734,105735],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[24,105737,105740],{"className":105738,"code":105739,"language":6838,"meta":29},[6836],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[31,105741,105739],{"__ignoreMap":29},[103,105743,105744],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105746,102133],{"id":102132},[103,105748,102136],{},[24,105750,105752],{"className":25467,"code":105751,"language":25469,"meta":29,"style":29},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[31,105753,105754],{"__ignoreMap":29},[34,105755,105756,105758,105760,105762,105764,105767,105769,105771,105773],{"class":36,"line":37},[34,105757,26222],{"class":3617},[34,105759,27961],{"class":504},[34,105761,25479],{"class":504},[34,105763,28046],{"class":44},[34,105765,105766],{"class":504}," python3",[34,105768,102161],{"class":504},[34,105770,103864],{"class":504},[34,105772,102177],{"class":504},[34,105774,105775],{"class":504}," glfw\n",[103,105777,104182],{},[24,105779,105780],{"className":25467,"code":102282,"language":25469,"meta":29,"style":29},[31,105781,105782],{"__ignoreMap":29},[34,105783,105784,105786,105788,105790],{"class":36,"line":37},[34,105785,25476],{"class":3617},[34,105787,25479],{"class":504},[34,105789,102293],{"class":504},[34,105791,102296],{"class":504},[103,105793,104199],{},[24,105795,105797],{"className":25467,"code":105796,"language":25469,"meta":29,"style":29},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[31,105798,105799,105816,105825],{"__ignoreMap":29},[34,105800,105801,105803,105805,105807,105810,105812,105814],{"class":36,"line":37},[34,105802,31976],{"class":3617},[34,105804,30822],{"class":504},[34,105806,26761],{"class":44},[34,105808,105809],{"class":504}," mujoco-python-api",[34,105811,102338],{"class":504},[34,105813,102341],{"class":44},[34,105815,102344],{"class":44},[34,105817,105818,105820,105822],{"class":36,"line":165},[34,105819,31976],{"class":3617},[34,105821,102351],{"class":504},[34,105823,105824],{"class":504}," mujoco-python-api\n",[34,105826,105827,105829,105831,105833],{"class":36,"line":171},[34,105828,25476],{"class":3617},[34,105830,25479],{"class":504},[34,105832,102293],{"class":504},[34,105834,102296],{"class":504},[103,105836,102367],{},[1772,105838,105839,105846,105855],{},[1775,105840,105841,102381,105843,105845],{},[31,105842,102038],{},[31,105844,102043],{}," 是官方 Python bindings 的类名。",[1775,105847,105848,105849,105852,105853,30031],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[31,105850,105851],{},"mjModel"," 在 Python 中是 ",[31,105854,102072],{},[1775,105856,105857,105858,30031],{},"不要使用 ",[31,105859,105860],{},"sim = mujoco_py.MjSim(...)",[14,105862,102408],{"id":102407},[103,105864,105865],{},"仿真推进核心代码:",[24,105867,105869],{"className":26,"code":105868,"language":28,"meta":29,"style":29},"mujoco.mj_step(model, data)\n",[31,105870,105871],{"__ignoreMap":29},[34,105872,105873],{"class":36,"line":37},[34,105874,105868],{"class":40},[103,105876,105877,105878,2021,105880,2021,105882,30031],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[31,105879,102433],{},[31,105881,102436],{},[31,105883,102430],{},[103,105885,105886],{},"重置仿真:",[24,105888,105890],{"className":26,"code":105889,"language":28,"meta":29,"style":29},"mujoco.mj_resetData(model, data)\n",[31,105891,105892],{"__ignoreMap":29},[34,105893,105894],{"class":36,"line":37},[34,105895,105889],{"class":40},[103,105897,105898,105899,84176,105901,105903],{},"如果手动修改了 ",[31,105900,102433],{},[31,105902,102436],{},"，通常应调用:",[24,105905,105907],{"className":26,"code":105906,"language":28,"meta":29,"style":29},"mujoco.mj_forward(model, data)\n",[31,105908,105909],{"__ignoreMap":29},[34,105910,105911],{"class":36,"line":37},[34,105912,105906],{"class":40},[103,105914,105915],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[19,105917,105919,2021,105921,2021,105923,105925],{"id":105918},"qposqvelctrl-是什么",[31,105920,105393],{},[31,105922,105723],{},[31,105924,105726],{}," 是什么",[103,105927,105928],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1948,105930,105931,105943],{},[1951,105932,105933],{},[1954,105934,105935,105938,105940],{},[1957,105936,105937],{"align":25381},"字段",[1957,105939,102063],{"align":25381},[1957,105941,105942],{"align":25381},"谁来修改",[1994,105944,105945,105957,105969],{},[1954,105946,105947,105951,105954],{},[1999,105948,105949],{"align":25381},[31,105950,102433],{},[1999,105952,105953],{"align":25381},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1999,105955,105956],{"align":25381},"MuJoCo 更新，也可以手动设置初始状态",[1954,105958,105959,105963,105966],{},[1999,105960,105961],{"align":25381},[31,105962,102436],{},[1999,105964,105965],{"align":25381},"广义速度，例如小车速度、关节角速度",[1999,105967,105968],{"align":25381},"MuJoCo 更新，也可以手动清零",[1954,105970,105971,105975,105978],{},[1999,105972,105973],{"align":25381},[31,105974,102439],{},[1999,105976,105977],{"align":25381},"actuator 的控制输入",[1999,105979,105980],{"align":25381},"主要由你的控制代码写入",[103,105982,10675,105983,102381,105985,105987],{},[31,105984,105393],{},[31,105986,105723],{}," 不一定同维。自由刚体就是典型例子：",[24,105989,105992],{"className":105990,"code":105991,"language":6838,"meta":29},[6836],"freejoint: qpos 7 维，qvel 6 维\n",[31,105993,105991],{"__ignoreMap":29},[19,105995,105997,102381,105999,106001],{"id":105996},"mj_step-和-mj_forward-的区别",[31,105998,102578],{},[31,106000,105613],{}," 的区别",[1948,106003,106004,106017],{},[1951,106005,106006],{},[1954,106007,106008,106011,106014],{},[1957,106009,106010],{"align":25381},"函数",[1957,106012,106013],{"align":25381},"是否推进时间",[1957,106015,106016],{"align":25381},"什么时候用",[1994,106018,106019,106032],{},[1954,106020,106021,106026,106029],{},[1999,106022,106023],{"align":25381},[31,106024,106025],{},"mj_step(model, data)",[1999,106027,106028],{"align":25381},"是",[1999,106030,106031],{"align":25381},"正常仿真循环，每调用一次前进一步",[1954,106033,106034,106039,106042],{},[1999,106035,106036],{"align":25381},[31,106037,106038],{},"mj_forward(model, data)",[1999,106040,106041],{"align":25381},"否",[1999,106043,106044,106045,2021,106047,106049],{"align":25381},"手动改了 ",[31,106046,105393],{},[31,106048,105723],{}," 后，刷新派生量",[103,106051,106052],{},"例如你写：",[24,106054,106056],{"className":26,"code":106055,"language":28,"meta":29,"style":29},"data.qpos[2] = 2.0\n",[31,106057,106058],{"__ignoreMap":29},[34,106059,106060,106063,106065,106067,106069],{"class":36,"line":37},[34,106061,106062],{"class":40},"data.qpos[",[34,106064,332],{"class":44},[34,106066,6095],{"class":40},[34,106068,221],{"class":55},[34,106070,106071],{"class":44}," 2.0\n",[103,106073,106074],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[24,106076,106077],{"className":26,"code":105906,"language":28,"meta":29,"style":29},[31,106078,106079],{"__ignoreMap":29},[34,106080,106081],{"class":36,"line":37},[34,106082,105906],{"class":40},[19,106084,106086],{"id":106085},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[103,106088,106089,106092,106093,106095],{},[31,106090,106091],{},"mujoco.mj_resetData(model, data)"," 会把 ",[31,106094,35042],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[24,106097,106099],{"className":26,"code":106098,"language":28,"meta":29,"style":29},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[31,106100,106101,106105,106115,106125],{"__ignoreMap":29},[34,106102,106103],{"class":36,"line":37},[34,106104,105889],{"class":40},[34,106106,106107,106110,106112],{"class":36,"line":165},[34,106108,106109],{"class":40},"data.qpos[:] ",[34,106111,221],{"class":55},[34,106113,106114],{"class":40}," random_qpos\n",[34,106116,106117,106120,106122],{"class":36,"line":171},[34,106118,106119],{"class":40},"data.qvel[:] ",[34,106121,221],{"class":55},[34,106123,106124],{"class":44}," 0.0\n",[34,106126,106127],{"class":36,"line":182},[34,106128,105906],{"class":40},[14,106130,102616],{"id":102615},[24,106132,106134],{"className":26,"code":106133,"language":28,"meta":29,"style":29},"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",[31,106135,106136,106142,106152,106156,106160,106168,106173,106177,106181,106185,106190,106194,106199,106204,106209,106213,106217,106221,106225,106229,106233,106252,106259,106271,106282,106298,106314,106318,106322,106334,106346,106354,106358,106369,106373,106389,106393,106397,106406,106410,106415,106424,106428,106441,106446,106455,106459,106463,106475],{"__ignoreMap":29},[34,106137,106138,106140],{"class":36,"line":37},[34,106139,32036],{"class":55},[34,106141,102664],{"class":40},[34,106143,106144,106146,106148,106150],{"class":36,"line":165},[34,106145,32036],{"class":55},[34,106147,33022],{"class":40},[34,106149,33025],{"class":55},[34,106151,33028],{"class":40},[34,106153,106154],{"class":36,"line":171},[34,106155,1475],{"emptyLinePlaceholder":1474},[34,106157,106158],{"class":36,"line":182},[34,106159,1475],{"emptyLinePlaceholder":1474},[34,106161,106162,106164,106166],{"class":36,"line":188},[34,106163,102677],{"class":44},[34,106165,56],{"class":55},[34,106167,102682],{"class":504},[34,106169,106170],{"class":36,"line":518},[34,106171,106172],{"class":504},"\u003Cmujoco model=\"state_api\">\n",[34,106174,106175],{"class":36,"line":524},[34,106176,102692],{"class":504},[34,106178,106179],{"class":36,"line":530},[34,106180,1475],{"emptyLinePlaceholder":1474},[34,106182,106183],{"class":36,"line":624},[34,106184,102701],{"class":504},[34,106186,106187],{"class":36,"line":630},[34,106188,106189],{"class":504},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[34,106191,106192],{"class":36,"line":636},[34,106193,1475],{"emptyLinePlaceholder":1474},[34,106195,106196],{"class":36,"line":1513},[34,106197,106198],{"class":504},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[34,106200,106201],{"class":36,"line":1519},[34,106202,106203],{"class":504},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[34,106205,106206],{"class":36,"line":3283},[34,106207,106208],{"class":504},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[34,106210,106211],{"class":36,"line":3297},[34,106212,102730],{"class":504},[34,106214,106215],{"class":36,"line":3302},[34,106216,102735],{"class":504},[34,106218,106219],{"class":36,"line":3308},[34,106220,102740],{"class":504},[34,106222,106223],{"class":36,"line":3328},[34,106224,505],{"class":504},[34,106226,106227],{"class":36,"line":3333},[34,106228,1475],{"emptyLinePlaceholder":1474},[34,106230,106231],{"class":36,"line":3347},[34,106232,1475],{"emptyLinePlaceholder":1474},[34,106234,106235,106237,106240,106243,106245,106248,106250],{"class":36,"line":3352},[34,106236,33588],{"class":55},[34,106238,106239],{"class":3617}," print_state",[34,106241,106242],{"class":40},"(prefix: ",[34,106244,2961],{"class":44},[34,106246,106247],{"class":40},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[34,106249,492],{"class":44},[34,106251,5392],{"class":40},[34,106253,106254,106256],{"class":36,"line":3381},[34,106255,32941],{"class":44},[34,106257,106258],{"class":40},"(prefix)\n",[34,106260,106261,106263,106265,106268],{"class":36,"line":3386},[34,106262,32941],{"class":44},[34,106264,286],{"class":40},[34,106266,106267],{"class":504},"\"  timestep:\"",[34,106269,106270],{"class":40},", model.opt.timestep)\n",[34,106272,106273,106275,106277,106280],{"class":36,"line":3403},[34,106274,32941],{"class":44},[34,106276,286],{"class":40},[34,106278,106279],{"class":504},"\"  time:\"",[34,106281,102841],{"class":40},[34,106283,106284,106286,106288,106291,106294,106296],{"class":36,"line":3408},[34,106285,32941],{"class":44},[34,106287,286],{"class":40},[34,106289,106290],{"class":504},"\"  qpos:\"",[34,106292,106293],{"class":40},", np.round(data.qpos.copy(), ",[34,106295,247],{"class":44},[34,106297,296],{"class":40},[34,106299,106300,106302,106304,106307,106310,106312],{"class":36,"line":3413},[34,106301,32941],{"class":44},[34,106303,286],{"class":40},[34,106305,106306],{"class":504},"\"  qvel:\"",[34,106308,106309],{"class":40},", np.round(data.qvel.copy(), ",[34,106311,247],{"class":44},[34,106313,296],{"class":40},[34,106315,106316],{"class":36,"line":3418},[34,106317,1475],{"emptyLinePlaceholder":1474},[34,106319,106320],{"class":36,"line":3432},[34,106321,1475],{"emptyLinePlaceholder":1474},[34,106323,106324,106326,106328,106330,106332],{"class":36,"line":3437},[34,106325,33588],{"class":55},[34,106327,3627],{"class":3617},[34,106329,102761],{"class":40},[34,106331,492],{"class":44},[34,106333,5392],{"class":40},[34,106335,106336,106338,106340,106342,106344],{"class":36,"line":4230},[34,106337,102770],{"class":40},[34,106339,221],{"class":55},[34,106341,102775],{"class":40},[34,106343,102677],{"class":44},[34,106345,101],{"class":40},[34,106347,106348,106350,106352],{"class":36,"line":4244},[34,106349,102784],{"class":40},[34,106351,221],{"class":55},[34,106353,102789],{"class":40},[34,106355,106356],{"class":36,"line":4252},[34,106357,1475],{"emptyLinePlaceholder":1474},[34,106359,106360,106363,106366],{"class":36,"line":4257},[34,106361,106362],{"class":40},"    print_state(",[34,106364,106365],{"class":504},"\"initial\"",[34,106367,106368],{"class":40},", model, data)\n",[34,106370,106371],{"class":36,"line":4263},[34,106372,1475],{"emptyLinePlaceholder":1474},[34,106374,106375,106377,106379,106381,106383,106385,106387],{"class":36,"line":4269},[34,106376,4854],{"class":55},[34,106378,102864],{"class":40},[34,106380,27689],{"class":55},[34,106382,34084],{"class":44},[34,106384,286],{"class":40},[34,106386,2451],{"class":44},[34,106388,32428],{"class":40},[34,106390,106391],{"class":36,"line":4274},[34,106392,102879],{"class":40},[34,106394,106395],{"class":36,"line":9598},[34,106396,1475],{"emptyLinePlaceholder":1474},[34,106398,106399,106401,106404],{"class":36,"line":9622},[34,106400,106362],{"class":40},[34,106402,106403],{"class":504},"\"after 50 steps\"",[34,106405,106368],{"class":40},[34,106407,106408],{"class":36,"line":9627},[34,106409,1475],{"emptyLinePlaceholder":1474},[34,106411,106412],{"class":36,"line":9633},[34,106413,106414],{"class":40},"    mujoco.mj_resetData(model, data)\n",[34,106416,106417,106419,106422],{"class":36,"line":9660},[34,106418,106362],{"class":40},[34,106420,106421],{"class":504},"\"after reset\"",[34,106423,106368],{"class":40},[34,106425,106426],{"class":36,"line":9665},[34,106427,1475],{"emptyLinePlaceholder":1474},[34,106429,106430,106433,106435,106437,106439],{"class":36,"line":9671},[34,106431,106432],{"class":40},"    data.qpos[",[34,106434,332],{"class":44},[34,106436,6095],{"class":40},[34,106438,221],{"class":55},[34,106440,106071],{"class":44},[34,106442,106443],{"class":36,"line":9683},[34,106444,106445],{"class":40},"    mujoco.mj_forward(model, data)\n",[34,106447,106448,106450,106453],{"class":36,"line":9695},[34,106449,106362],{"class":40},[34,106451,106452],{"class":504},"\"after manual qpos edit\"",[34,106454,106368],{"class":40},[34,106456,106457],{"class":36,"line":9707},[34,106458,1475],{"emptyLinePlaceholder":1474},[34,106460,106461],{"class":36,"line":11366},[34,106462,1475],{"emptyLinePlaceholder":1474},[34,106464,106465,106467,106469,106471,106473],{"class":36,"line":11391},[34,106466,3189],{"class":55},[34,106468,32862],{"class":44},[34,106470,102922],{"class":55},[34,106472,102925],{"class":504},[34,106474,5392],{"class":40},[34,106476,106477],{"class":36,"line":11414},[34,106478,102932],{"class":40},[103,106480,104933],{},[24,106482,106484],{"className":25467,"code":106483,"language":25469,"meta":29,"style":29},"touch ch3_python_state.py\n",[31,106485,106486],{"__ignoreMap":29},[34,106487,106488,106490],{"class":36,"line":37},[34,106489,102646],{"class":3617},[34,106491,106492],{"class":504}," ch3_python_state.py\n",[103,106494,103664],{},[24,106496,106498],{"className":25467,"code":106497,"language":25469,"meta":29,"style":29},"python ch3_python_state.py\n",[31,106499,106500],{"__ignoreMap":29},[34,106501,106502,106504],{"class":36,"line":37},[34,106503,28],{"class":3617},[34,106505,106492],{"class":504},[19,106507,102935],{"id":102935},[103,106509,106510],{},"打印状态的函数：",[24,106512,106514],{"className":26,"code":106513,"language":28,"meta":29,"style":29},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[31,106515,106516],{"__ignoreMap":29},[34,106517,106518,106520,106522,106524,106526,106528,106530],{"class":36,"line":37},[34,106519,33588],{"class":55},[34,106521,106239],{"class":3617},[34,106523,106242],{"class":40},[34,106525,2961],{"class":44},[34,106527,106247],{"class":40},[34,106529,492],{"class":44},[34,106531,5392],{"class":40},[103,106533,106534,106535,106537],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[31,106536,35042],{}," 里发生了什么。",[103,106539,106540],{},"推进 50 步：",[24,106542,106544],{"className":26,"code":106543,"language":28,"meta":29,"style":29},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[31,106545,106546,106562],{"__ignoreMap":29},[34,106547,106548,106550,106552,106554,106556,106558,106560],{"class":36,"line":37},[34,106549,4678],{"class":55},[34,106551,102864],{"class":40},[34,106553,27689],{"class":55},[34,106555,34084],{"class":44},[34,106557,286],{"class":40},[34,106559,2451],{"class":44},[34,106561,32428],{"class":40},[34,106563,106564],{"class":36,"line":165},[34,106565,103062],{"class":40},[103,106567,106568,106569,106572,106573,106575],{},"由于 ",[31,106570,106571],{},"timestep=0.01","，所以 50 步后时间约为 ",[31,106574,36970],{}," 秒。",[103,106577,106578],{},"重置：",[24,106580,106581],{"className":26,"code":105889,"language":28,"meta":29,"style":29},[31,106582,106583],{"__ignoreMap":29},[34,106584,106585],{"class":36,"line":37},[34,106586,105889],{"class":40},[103,106588,106589],{},"这会把时间、位置、速度恢复到初始状态。",[103,106591,106592],{},"手动改高度：",[24,106594,106596],{"className":26,"code":106595,"language":28,"meta":29,"style":29},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[31,106597,106598,106610],{"__ignoreMap":29},[34,106599,106600,106602,106604,106606,106608],{"class":36,"line":37},[34,106601,106062],{"class":40},[34,106603,332],{"class":44},[34,106605,6095],{"class":40},[34,106607,221],{"class":55},[34,106609,106071],{"class":44},[34,106611,106612],{"class":36,"line":165},[34,106613,105906],{"class":40},[103,106615,106616,106617,106620,106621,106624],{},"这个例子里 ",[31,106618,106619],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[31,106622,106623],{},"2.0"," 表示把小球放到更高的位置。",[19,106626,103071],{"id":103071},[24,106628,106629],{"className":26,"code":106513,"language":28,"meta":29,"style":29},[31,106630,106631],{"__ignoreMap":29},[34,106632,106633,106635,106637,106639,106641,106643,106645],{"class":36,"line":37},[34,106634,33588],{"class":55},[34,106636,106239],{"class":3617},[34,106638,106242],{"class":40},[34,106640,2961],{"class":44},[34,106642,106247],{"class":40},[34,106644,492],{"class":44},[34,106646,5392],{"class":40},[103,106648,106649],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[1772,106651,106652,106661,106666],{},[1775,106653,106654,106657,106658,106660],{},[31,106655,106656],{},"prefix","：一段文字，比如 ",[31,106659,106365],{},"，用来说明现在打印的是哪个阶段。",[1775,106662,106663,106665],{},[31,106664,103448],{},"：MuJoCo 模型。",[1775,106667,106668,106670],{},[31,106669,35042],{},"：MuJoCo 当前状态。",[103,106672,106673,2021,106676,106679],{},[31,106674,106675],{},"prefix: str",[31,106677,106678],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[24,106681,106683],{"className":26,"code":106682,"language":28,"meta":29,"style":29},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[31,106684,106685],{"__ignoreMap":29},[34,106686,106687,106689,106691,106693,106695,106697],{"class":36,"line":37},[34,106688,723],{"class":44},[34,106690,286],{"class":40},[34,106692,106290],{"class":504},[34,106694,106293],{"class":40},[34,106696,247],{"class":44},[34,106698,296],{"class":40},[103,106700,106701,106704],{},[31,106702,106703],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[24,106706,106708],{"className":26,"code":106707,"language":28,"meta":29,"style":29},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[31,106709,106710,106722],{"__ignoreMap":29},[34,106711,106712,106714,106716,106718,106720],{"class":36,"line":37},[34,106713,102997],{"class":40},[34,106715,221],{"class":55},[34,106717,102775],{"class":40},[34,106719,102677],{"class":44},[34,106721,101],{"class":40},[34,106723,106724,106726,106728],{"class":36,"line":165},[34,106725,103021],{"class":40},[34,106727,221],{"class":55},[34,106729,102789],{"class":40},[103,106731,106732],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[24,106734,106736],{"className":26,"code":106735,"language":28,"meta":29,"style":29},"print_state(\"initial\", model, data)\n",[31,106737,106738],{"__ignoreMap":29},[34,106739,106740,106743,106745],{"class":36,"line":37},[34,106741,106742],{"class":40},"print_state(",[34,106744,106365],{"class":504},[34,106746,106368],{"class":40},[103,106748,106749,106750,106753],{},"调用刚才定义的 ",[31,106751,106752],{},"print_state"," 函数，打印初始状态。",[24,106755,106756],{"className":26,"code":106543,"language":28,"meta":29,"style":29},[31,106757,106758,106774],{"__ignoreMap":29},[34,106759,106760,106762,106764,106766,106768,106770,106772],{"class":36,"line":37},[34,106761,4678],{"class":55},[34,106763,102864],{"class":40},[34,106765,27689],{"class":55},[34,106767,34084],{"class":44},[34,106769,286],{"class":40},[34,106771,2451],{"class":44},[34,106773,32428],{"class":40},[34,106775,106776],{"class":36,"line":165},[34,106777,103062],{"class":40},[103,106779,106780],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[24,106782,106783],{"className":26,"code":105889,"language":28,"meta":29,"style":29},[31,106784,106785],{"__ignoreMap":29},[34,106786,106787],{"class":36,"line":37},[34,106788,105889],{"class":40},[103,106790,106791,106792,106794,106795,106797],{},"重置 ",[31,106793,35042],{},"。注意它不会重新创建 ",[31,106796,103448],{},"，因为模型结构没有变，只是状态回到初始值。",[24,106799,106800],{"className":26,"code":106055,"language":28,"meta":29,"style":29},[31,106801,106802],{"__ignoreMap":29},[34,106803,106804,106806,106808,106810,106812],{"class":36,"line":37},[34,106805,106062],{"class":40},[34,106807,332],{"class":44},[34,106809,6095],{"class":40},[34,106811,221],{"class":55},[34,106813,106071],{"class":44},[103,106815,106816,106817,2021,106820,2021,106823,106825],{},"这行是“手动改状态”。在 freejoint 中，",[31,106818,106819],{},"qpos[0]",[31,106821,106822],{},"qpos[1]",[31,106824,106619],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[24,106827,106828],{"className":26,"code":105906,"language":28,"meta":29,"style":29},[31,106829,106830],{"__ignoreMap":29},[34,106831,106832],{"class":36,"line":37},[34,106833,105906],{"class":40},[103,106835,106836,106837,106839,106840,106842],{},"手动改完 ",[31,106838,105393],{}," 后，调用 ",[31,106841,105613],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106844,103679],{"id":103678},[103,106846,106847],{},"你会看到:",[1772,106849,106850,106855,106860,106863],{},[1775,106851,106852,106853],{},"初始时间为 ",[31,106854,177],{},[1775,106856,106857,106858],{},"50 步后时间约为 ",[31,106859,36970],{},[1775,106861,106862],{},"reset 后状态恢复",[1775,106864,106865,106866,106869,106870],{},"手动修改 ",[31,106867,106868],{},"data.qpos[2]"," 后，小球高度变为 ",[31,106871,106623],{},[103,106873,106874,106876],{},[31,106875,106619],{}," 在这个例子中表示自由刚体的 z 坐标。",[103,106878,106879],{},"输出里可以重点看三件事：",[1772,106881,106882,106890,106895],{},[1775,106883,106884,106886,106887,106889],{},[31,106885,4041],{}," 是否随着 ",[31,106888,102578],{}," 增加。",[1775,106891,106892,106894],{},[31,106893,105393],{}," 的 z 坐标是否因为下落而变化。",[1775,106896,106897,106899,106900,30031],{},[31,106898,105715],{}," 后时间是否回到 ",[31,106901,177],{},[14,106903,103711],{"id":103710},[1772,106905,106906,106912,106918,106924,106927,106936],{},[1775,106907,106908,106909,30031],{},"修改 timestep 为 ",[31,106910,106911],{},"0.005",[1775,106913,106914,106915,30031],{},"重新运行，检查 50 步后时间是否约为 ",[31,106916,106917],{},"0.25",[1775,106919,106920,106921,30031],{},"修改重力为 ",[31,106922,106923],{},"0 0 -1.0",[1775,106925,106926],{},"观察小球下降速度是否变慢。",[1775,106928,103774,106929,103777,106932,106935],{},[31,106930,106931],{},"data.qpos[2] = 2.0",[31,106933,106934],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[1775,106937,106938,106939,106942],{},"注释掉 ",[31,106940,106941],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106944,103816],{"id":103815},[19,106946,106948,106949,106951],{"id":106947},"修改-dataqpos-后位置没有更新","修改 ",[31,106950,102433],{}," 后位置没有更新",[103,106953,103825],{},[24,106955,106956],{"className":26,"code":105906,"language":28,"meta":29,"style":29},[31,106957,106958],{"__ignoreMap":29},[34,106959,106960],{"class":36,"line":37},[34,106961,105906],{"class":40},[19,106963,106964],{"id":106964},"数组维度看不懂",[103,106966,106967],{},"打印模型维度:",[24,106969,106971],{"className":26,"code":106970,"language":28,"meta":29,"style":29},"print(model.nq, model.nv, model.nu)\n",[31,106972,106973],{"__ignoreMap":29},[34,106974,106975,106977],{"class":36,"line":37},[34,106976,723],{"class":44},[34,106978,106979],{"class":40},"(model.nq, model.nv, model.nu)\n",[1948,106981,106982,106990],{},[1951,106983,106984],{},[1954,106985,106986,106988],{},[1957,106987,105937],{"align":25381},[1957,106989,102063],{"align":25381},[1994,106991,106992,107002,107012],{},[1954,106993,106994,106999],{},[1999,106995,106996],{"align":25381},[31,106997,106998],{},"nq",[1999,107000,107001],{"align":25381},"位置变量数量",[1954,107003,107004,107009],{},[1999,107005,107006],{"align":25381},[31,107007,107008],{},"nv",[1999,107010,107011],{"align":25381},"速度变量数量",[1954,107013,107014,107018],{},[1999,107015,107016],{"align":25381},[31,107017,103525],{},[1999,107019,107020],{"align":25381},"控制输入数量",[19,107022,107024,107025,107027],{"id":107023},"误以为-qpos-一定等于关节数","误以为 ",[31,107026,105393],{}," 一定等于关节数",[103,107029,107030,107031,84167,107033,107035,107036,107038],{},"不是。例如 ",[31,107032,102983],{},[31,107034,105393],{}," 是 7 维，但 ",[31,107037,105723],{}," 是 6 维。",[19,107040,107042,107043,107045],{"id":107041},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[31,107044,105393],{}," 的第几位",[103,107047,107048],{},"初学时可以先打印：",[24,107050,107052],{"className":26,"code":107051,"language":28,"meta":29,"style":29},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[31,107053,107054,107064,107074,107086],{"__ignoreMap":29},[34,107055,107056,107058,107060,107062],{"class":36,"line":37},[34,107057,723],{"class":44},[34,107059,286],{"class":40},[34,107061,102802],{"class":504},[34,107063,102805],{"class":40},[34,107065,107066,107068,107070,107072],{"class":36,"line":165},[34,107067,723],{"class":44},[34,107069,286],{"class":40},[34,107071,102814],{"class":504},[34,107073,102817],{"class":40},[34,107075,107076,107078,107080,107083],{"class":36,"line":171},[34,107077,723],{"class":44},[34,107079,286],{"class":40},[34,107081,107082],{"class":504},"\"qpos:\"",[34,107084,107085],{"class":40},", data.qpos)\n",[34,107087,107088,107090,107092,107095],{"class":36,"line":182},[34,107089,723],{"class":44},[34,107091,286],{"class":40},[34,107093,107094],{"class":504},"\"qvel:\"",[34,107096,107097],{"class":40},", data.qvel)\n",[103,107099,107100],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[19,107102,107103],{"id":107103},"仿真结果每次都一样",[103,107105,107106,107107,107109],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[31,107108,105393],{},"、目标点或控制输入。",[14,107111,103970],{"id":103969},[103,107113,107114,107115,26264],{},"Python 控制 MuJoCo 的核心就是读写 ",[31,107116,35042],{},[1772,107118,107119,107127,107132,107137],{},[1775,107120,107121,107122,102381,107124,107126],{},"用 ",[31,107123,102433],{},[31,107125,102436],{}," 读取状态。",[1775,107128,107121,107129,107131],{},[31,107130,102439],{}," 写入控制。",[1775,107133,107121,107134,107136],{},[31,107135,102578],{}," 推进时间。",[1775,107138,107139,107140,107142],{},"手动改状态后用 ",[31,107141,105613],{}," 刷新派生量。",[103,107144,107145],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1711,107147,107148],{},"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":29,"searchDepth":165,"depth":165,"links":107150},[107151,107152,107153,107160,107164,107165,107166,107176],{"id":102009,"depth":165,"text":102010},{"id":102132,"depth":165,"text":102133},{"id":102407,"depth":165,"text":102408,"children":107154},[107155,107157,107159],{"id":105918,"depth":171,"text":107156},"qpos、qvel、ctrl 是什么",{"id":105996,"depth":171,"text":107158},"mj_step 和 mj_forward 的区别",{"id":106085,"depth":171,"text":106086},{"id":102615,"depth":165,"text":102616,"children":107161},[107162,107163],{"id":102935,"depth":171,"text":102935},{"id":103071,"depth":171,"text":103071},{"id":103678,"depth":165,"text":103679},{"id":103710,"depth":165,"text":103711},{"id":103815,"depth":165,"text":103816,"children":107167},[107168,107170,107171,107173,107175],{"id":106947,"depth":171,"text":107169},"修改 data.qpos 后位置没有更新",{"id":106964,"depth":171,"text":106964},{"id":107023,"depth":171,"text":107172},"误以为 qpos 一定等于关节数",{"id":107041,"depth":171,"text":107174},"不知道某个元素在 qpos 的第几位",{"id":107103,"depth":171,"text":107103},{"id":103969,"depth":165,"text":103970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105681,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107183,"title":107184,"body":107185,"description":29,"extension":1745,"meta":108875,"navigation":1474,"path":108876,"seo":108877,"stem":108878,"__hash__":108879},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107186,"toc":108851},[107187,107190,107192,107195,107197,107222,107225,107244,107247,107249,107251,107275,107277,107291,107293,107334,107336,107360,107362,107365,107399,107401,107414,107417,107485,107494,107498,107501,107535,107541,107544,107548,107587,107590,107610,107614,107657,107659,107688,107691,107697,107700,107702,108096,108098,108110,108112,108123,108125,108128,108157,108165,108168,108203,108206,108208,108216,108219,108221,108232,108242,108262,108265,108301,108313,108361,108380,108422,108435,108463,108468,108489,108499,108517,108520,108554,108557,108577,108580,108599,108605,108607,108610,108616,108622,108632,108635,108641,108650,108652,108698,108700,108706,108712,108715,108718,108738,108741,108747,108753,108755,108778,108781,108784,108793,108796,108834,108836,108839,108845,108848],[10,107188,107184],{"id":107189},"_4关节actuator-与力控制",[14,107191,102010],{"id":102009},[103,107193,107194],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[103,107196,105694],{},[1772,107198,107199,107205,107210,107214,107219],{},[1775,107200,107201,107204],{},[31,107202,107203],{},"hinge"," 关节",[1775,107206,107207],{},[31,107208,107209],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[1775,107211,107212],{},[31,107213,102439],{},[1775,107215,107216],{},[31,107217,107218],{},"ctrlrange",[1775,107220,107221],{},"读取关节角和角速度",[103,107223,107224],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[24,107226,107228],{"className":26,"code":107227,"language":28,"meta":29,"style":29},"data.ctrl[0] = ...\n",[31,107229,107230],{"__ignoreMap":29},[34,107231,107232,107235,107237,107239,107241],{"class":36,"line":37},[34,107233,107234],{"class":40},"data.ctrl[",[34,107236,177],{"class":44},[34,107238,6095],{"class":40},[34,107240,221],{"class":55},[34,107242,107243],{"class":44}," ...\n",[103,107245,107246],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107248,102133],{"id":102132},[103,107250,102136],{},[24,107252,107253],{"className":25467,"code":105751,"language":25469,"meta":29,"style":29},[31,107254,107255],{"__ignoreMap":29},[34,107256,107257,107259,107261,107263,107265,107267,107269,107271,107273],{"class":36,"line":37},[34,107258,26222],{"class":3617},[34,107260,27961],{"class":504},[34,107262,25479],{"class":504},[34,107264,28046],{"class":44},[34,107266,105766],{"class":504},[34,107268,102161],{"class":504},[34,107270,103864],{"class":504},[34,107272,102177],{"class":504},[34,107274,105775],{"class":504},[103,107276,104182],{},[24,107278,107279],{"className":25467,"code":102282,"language":25469,"meta":29,"style":29},[31,107280,107281],{"__ignoreMap":29},[34,107282,107283,107285,107287,107289],{"class":36,"line":37},[34,107284,25476],{"class":3617},[34,107286,25479],{"class":504},[34,107288,102293],{"class":504},[34,107290,102296],{"class":504},[103,107292,104199],{},[24,107294,107296],{"className":25467,"code":107295,"language":25469,"meta":29,"style":29},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[31,107297,107298,107315,107324],{"__ignoreMap":29},[34,107299,107300,107302,107304,107306,107309,107311,107313],{"class":36,"line":37},[34,107301,31976],{"class":3617},[34,107303,30822],{"class":504},[34,107305,26761],{"class":44},[34,107307,107308],{"class":504}," mujoco-control",[34,107310,102338],{"class":504},[34,107312,102341],{"class":44},[34,107314,102344],{"class":44},[34,107316,107317,107319,107321],{"class":36,"line":165},[34,107318,31976],{"class":3617},[34,107320,102351],{"class":504},[34,107322,107323],{"class":504}," mujoco-control\n",[34,107325,107326,107328,107330,107332],{"class":36,"line":171},[34,107327,25476],{"class":3617},[34,107329,25479],{"class":504},[34,107331,102293],{"class":504},[34,107333,102296],{"class":504},[103,107335,102367],{},[1772,107337,107338,107344,107351,107357],{},[1775,107339,107340,107343],{},[31,107341,107342],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[1775,107345,107346,107348,107349,30031],{},[31,107347,102439],{}," 长度等于 ",[31,107350,103521],{},[1775,107352,83859,107353,107356],{},[31,107354,107355],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[1775,107358,107359],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107361,102408],{"id":102407},[103,107363,107364],{},"关节决定 body 如何运动:",[24,107366,107368],{"className":54706,"code":107367,"language":54708,"meta":29,"style":29},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[31,107369,107370],{"__ignoreMap":29},[34,107371,107372,107374,107376,107378,107380,107383,107385,107387,107389,107392,107394,107397],{"class":36,"line":37},[34,107373,2701],{"class":40},[34,107375,104319],{"class":52939},[34,107377,16566],{"class":3617},[34,107379,221],{"class":40},[34,107381,107382],{"class":504},"\"hinge\"",[34,107384,55463],{"class":3617},[34,107386,221],{"class":40},[34,107388,107382],{"class":504},[34,107390,107391],{"class":3617}," axis",[34,107393,221],{"class":40},[34,107395,107396],{"class":504},"\"0 1 0\"",[34,107398,102507],{"class":40},[103,107400,104415],{},[1772,107402,107403,107408,107411],{},[1775,107404,107405,107406],{},"名字是 ",[31,107407,107203],{},[1775,107409,107410],{},"类型是旋转关节",[1775,107412,107413],{},"绕 y 轴旋转",[103,107415,107416],{},"actuator 决定如何施加控制:",[24,107418,107420],{"className":54706,"code":107419,"language":54708,"meta":29,"style":29},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[31,107421,107422,107431,107477],{"__ignoreMap":29},[34,107423,107424,107426,107429],{"class":36,"line":37},[34,107425,2701],{"class":40},[34,107427,107428],{"class":52939},"actuator",[34,107430,52946],{"class":40},[34,107432,107433,107435,107438,107440,107442,107445,107448,107450,107452,107455,107457,107459,107462,107464,107467,107470,107472,107475],{"class":36,"line":165},[34,107434,53783],{"class":40},[34,107436,107437],{"class":52939},"motor",[34,107439,16566],{"class":3617},[34,107441,221],{"class":40},[34,107443,107444],{"class":504},"\"hinge_motor\"",[34,107446,107447],{"class":3617}," joint",[34,107449,221],{"class":40},[34,107451,107382],{"class":504},[34,107453,107454],{"class":3617}," gear",[34,107456,221],{"class":40},[34,107458,5331],{"class":504},[34,107460,107461],{"class":3617}," ctrlrange",[34,107463,221],{"class":40},[34,107465,107466],{"class":504},"\"-2 2\"",[34,107468,107469],{"class":3617}," ctrllimited",[34,107471,221],{"class":40},[34,107473,107474],{"class":504},"\"true\"",[34,107476,102507],{"class":40},[34,107478,107479,107481,107483],{"class":36,"line":171},[34,107480,53424],{"class":40},[34,107482,107428],{"class":52939},[34,107484,52946],{"class":40},[103,107486,107487,107490,107491,30031],{},[31,107488,107489],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[31,107492,107493],{},"[-2, 2]",[19,107495,107497],{"id":107496},"joint-和-actuator-的关系","joint 和 actuator 的关系",[103,107499,107500],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1948,107502,107503,107513],{},[1951,107504,107505],{},[1954,107506,107507,107509,107511],{},[1957,107508,27399],{"align":25381},[1957,107510,104059],{"align":25381},[1957,107512,102097],{"align":25381},[1994,107514,107515,107525],{},[1954,107516,107517,107519,107522],{},[1999,107518,104319],{"align":25381},[1999,107520,107521],{"align":25381},"定义能怎么动",[1999,107523,107524],{"align":25381},"门轴允许门旋转",[1954,107526,107527,107529,107532],{},[1999,107528,107428],{"align":25381},[1999,107530,107531],{"align":25381},"定义怎么施力或控制",[1999,107533,107534],{"align":25381},"人推门、马达带动门",[103,107536,107537,107538,107540],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[31,107539,102439],{}," 主动控制它。",[103,107542,107543],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[19,107545,107547],{"id":107546},"hinge-joint","hinge joint",[24,107549,107551],{"className":54706,"code":107550,"language":54708,"meta":29,"style":29},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[31,107552,107553],{"__ignoreMap":29},[34,107554,107555,107557,107559,107561,107563,107565,107567,107569,107571,107573,107575,107577,107580,107582,107585],{"class":36,"line":37},[34,107556,2701],{"class":40},[34,107558,104319],{"class":52939},[34,107560,16566],{"class":3617},[34,107562,221],{"class":40},[34,107564,107382],{"class":504},[34,107566,55463],{"class":3617},[34,107568,221],{"class":40},[34,107570,107382],{"class":504},[34,107572,107391],{"class":3617},[34,107574,221],{"class":40},[34,107576,107396],{"class":504},[34,107578,107579],{"class":3617}," damping",[34,107581,221],{"class":40},[34,107583,107584],{"class":504},"\"0.1\"",[34,107586,102507],{"class":40},[103,107588,107589],{},"含义：",[1772,107591,107592,107598,107604],{},[1775,107593,107594,107597],{},[31,107595,107596],{},"type=\"hinge\"","：只能绕一个轴旋转。",[1775,107599,107600,107603],{},[31,107601,107602],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[1775,107605,107606,107609],{},[31,107607,107608],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[19,107611,107613],{"id":107612},"motor-actuator","motor actuator",[24,107615,107617],{"className":54706,"code":107616,"language":54708,"meta":29,"style":29},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[31,107618,107619],{"__ignoreMap":29},[34,107620,107621,107623,107625,107627,107629,107631,107633,107635,107637,107639,107641,107643,107645,107647,107649,107651,107653,107655],{"class":36,"line":37},[34,107622,2701],{"class":40},[34,107624,107437],{"class":52939},[34,107626,16566],{"class":3617},[34,107628,221],{"class":40},[34,107630,107444],{"class":504},[34,107632,107447],{"class":3617},[34,107634,221],{"class":40},[34,107636,107382],{"class":504},[34,107638,107454],{"class":3617},[34,107640,221],{"class":40},[34,107642,5331],{"class":504},[34,107644,107461],{"class":3617},[34,107646,221],{"class":40},[34,107648,107466],{"class":504},[34,107650,107469],{"class":3617},[34,107652,221],{"class":40},[34,107654,107474],{"class":504},[34,107656,102507],{"class":40},[103,107658,107589],{},[1772,107660,107661,107670,107676,107682],{},[1775,107662,107663,107666,107667,107669],{},[31,107664,107665],{},"joint=\"hinge\"","：这个电机作用在名为 ",[31,107668,107203],{}," 的关节上。",[1775,107671,107672,107675],{},[31,107673,107674],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[1775,107677,107678,107681],{},[31,107679,107680],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[1775,107683,107684,107687],{},[31,107685,107686],{},"ctrllimited=\"true\"","：启用控制范围限制。",[103,107689,107690],{},"简单理解：",[24,107692,107695],{"className":107693,"code":107694,"language":6838,"meta":29},[6836],"实际施加效果 ≈ data.ctrl[0] * gear\n",[31,107696,107694],{"__ignoreMap":29},[103,107698,107699],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107701,102616],{"id":102615},[24,107703,107705],{"className":26,"code":107704,"language":28,"meta":29,"style":29},"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",[31,107706,107707,107714,107718,107724,107734,107738,107742,107750,107755,107760,107764,107768,107773,107778,107782,107787,107792,107797,107802,107806,107810,107814,107819,107824,107829,107833,107837,107841,107845,107857,107869,107877,107881,107891,107901,107911,107915,107928,107941,107945,107962,107976,108011,108015,108019,108030,108045,108060,108072,108076,108080,108092],{"__ignoreMap":29},[34,107708,107709,107711],{"class":36,"line":37},[34,107710,32036],{"class":55},[34,107712,107713],{"class":40}," math\n",[34,107715,107716],{"class":36,"line":165},[34,107717,1475],{"emptyLinePlaceholder":1474},[34,107719,107720,107722],{"class":36,"line":171},[34,107721,32036],{"class":55},[34,107723,102664],{"class":40},[34,107725,107726,107728,107730,107732],{"class":36,"line":182},[34,107727,32036],{"class":55},[34,107729,33022],{"class":40},[34,107731,33025],{"class":55},[34,107733,33028],{"class":40},[34,107735,107736],{"class":36,"line":188},[34,107737,1475],{"emptyLinePlaceholder":1474},[34,107739,107740],{"class":36,"line":518},[34,107741,1475],{"emptyLinePlaceholder":1474},[34,107743,107744,107746,107748],{"class":36,"line":524},[34,107745,102677],{"class":44},[34,107747,56],{"class":55},[34,107749,102682],{"class":504},[34,107751,107752],{"class":36,"line":530},[34,107753,107754],{"class":504},"\u003Cmujoco model=\"one_link_motor\">\n",[34,107756,107757],{"class":36,"line":624},[34,107758,107759],{"class":504},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[34,107761,107762],{"class":36,"line":630},[34,107763,1475],{"emptyLinePlaceholder":1474},[34,107765,107766],{"class":36,"line":636},[34,107767,102701],{"class":504},[34,107769,107770],{"class":36,"line":1513},[34,107771,107772],{"class":504},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[34,107774,107775],{"class":36,"line":1519},[34,107776,107777],{"class":504},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[34,107779,107780],{"class":36,"line":3283},[34,107781,1475],{"emptyLinePlaceholder":1474},[34,107783,107784],{"class":36,"line":3297},[34,107785,107786],{"class":504},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[34,107788,107789],{"class":36,"line":3302},[34,107790,107791],{"class":504},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,107793,107794],{"class":36,"line":3308},[34,107795,107796],{"class":504},"        \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",[34,107798,107799],{"class":36,"line":3328},[34,107800,107801],{"class":504},"      \u003C\u002Fbody>\n",[34,107803,107804],{"class":36,"line":3333},[34,107805,102730],{"class":504},[34,107807,107808],{"class":36,"line":3347},[34,107809,102735],{"class":504},[34,107811,107812],{"class":36,"line":3352},[34,107813,1475],{"emptyLinePlaceholder":1474},[34,107815,107816],{"class":36,"line":3381},[34,107817,107818],{"class":504},"  \u003Cactuator>\n",[34,107820,107821],{"class":36,"line":3386},[34,107822,107823],{"class":504},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[34,107825,107826],{"class":36,"line":3403},[34,107827,107828],{"class":504},"  \u003C\u002Factuator>\n",[34,107830,107831],{"class":36,"line":3408},[34,107832,102740],{"class":504},[34,107834,107835],{"class":36,"line":3413},[34,107836,505],{"class":504},[34,107838,107839],{"class":36,"line":3418},[34,107840,1475],{"emptyLinePlaceholder":1474},[34,107842,107843],{"class":36,"line":3432},[34,107844,1475],{"emptyLinePlaceholder":1474},[34,107846,107847,107849,107851,107853,107855],{"class":36,"line":3437},[34,107848,33588],{"class":55},[34,107850,3627],{"class":3617},[34,107852,102761],{"class":40},[34,107854,492],{"class":44},[34,107856,5392],{"class":40},[34,107858,107859,107861,107863,107865,107867],{"class":36,"line":4230},[34,107860,102770],{"class":40},[34,107862,221],{"class":55},[34,107864,102775],{"class":40},[34,107866,102677],{"class":44},[34,107868,101],{"class":40},[34,107870,107871,107873,107875],{"class":36,"line":4244},[34,107872,102784],{"class":40},[34,107874,221],{"class":55},[34,107876,102789],{"class":40},[34,107878,107879],{"class":36,"line":4252},[34,107880,1475],{"emptyLinePlaceholder":1474},[34,107882,107883,107885,107887,107889],{"class":36,"line":4257},[34,107884,32941],{"class":44},[34,107886,286],{"class":40},[34,107888,102802],{"class":504},[34,107890,102805],{"class":40},[34,107892,107893,107895,107897,107899],{"class":36,"line":4263},[34,107894,32941],{"class":44},[34,107896,286],{"class":40},[34,107898,102814],{"class":504},[34,107900,102817],{"class":40},[34,107902,107903,107905,107907,107909],{"class":36,"line":4269},[34,107904,32941],{"class":44},[34,107906,286],{"class":40},[34,107908,102826],{"class":504},[34,107910,102829],{"class":40},[34,107912,107913],{"class":36,"line":4274},[34,107914,1475],{"emptyLinePlaceholder":1474},[34,107916,107917,107919,107922,107924,107926],{"class":36,"line":9598},[34,107918,4754],{"class":55},[34,107920,107921],{"class":40}," model.nu ",[34,107923,22594],{"class":55},[34,107925,26764],{"class":44},[34,107927,5392],{"class":40},[34,107929,107930,107932,107934,107936,107939],{"class":36,"line":9622},[34,107931,104795],{"class":55},[34,107933,104798],{"class":44},[34,107935,286],{"class":40},[34,107937,107938],{"class":504},"\"expected exactly one actuator\"",[34,107940,101],{"class":40},[34,107942,107943],{"class":36,"line":9627},[34,107944,1475],{"emptyLinePlaceholder":1474},[34,107946,107947,107949,107951,107953,107955,107957,107960],{"class":36,"line":9633},[34,107948,4854],{"class":55},[34,107950,33257],{"class":40},[34,107952,27689],{"class":55},[34,107954,34084],{"class":44},[34,107956,286],{"class":40},[34,107958,107959],{"class":44},"2000",[34,107961,32428],{"class":40},[34,107963,107964,107967,107969,107971,107973],{"class":36,"line":9660},[34,107965,107966],{"class":40},"        t ",[34,107968,221],{"class":55},[34,107970,33257],{"class":40},[34,107972,2252],{"class":55},[34,107974,107975],{"class":40}," model.opt.timestep\n",[34,107977,107978,107981,107983,107985,107987,107990,107992,107995,107997,107999,108002,108004,108006,108008],{"class":36,"line":9665},[34,107979,107980],{"class":40},"        data.ctrl[",[34,107982,177],{"class":44},[34,107984,6095],{"class":40},[34,107986,221],{"class":55},[34,107988,107989],{"class":44}," 1.5",[34,107991,8168],{"class":55},[34,107993,107994],{"class":40}," math.sin(",[34,107996,106623],{"class":44},[34,107998,8168],{"class":55},[34,108000,108001],{"class":40}," math.pi ",[34,108003,2252],{"class":55},[34,108005,63506],{"class":44},[34,108007,8168],{"class":55},[34,108009,108010],{"class":40}," t)\n",[34,108012,108013],{"class":36,"line":9671},[34,108014,102879],{"class":40},[34,108016,108017],{"class":36,"line":9683},[34,108018,1475],{"emptyLinePlaceholder":1474},[34,108020,108021,108023,108025,108028],{"class":36,"line":9695},[34,108022,32941],{"class":44},[34,108024,286],{"class":40},[34,108026,108027],{"class":504},"\"time:\"",[34,108029,102841],{"class":40},[34,108031,108032,108034,108036,108039,108041,108043],{"class":36,"line":9707},[34,108033,32941],{"class":44},[34,108035,286],{"class":40},[34,108037,108038],{"class":504},"\"joint qpos:\"",[34,108040,106293],{"class":40},[34,108042,247],{"class":44},[34,108044,296],{"class":40},[34,108046,108047,108049,108051,108054,108056,108058],{"class":36,"line":11366},[34,108048,32941],{"class":44},[34,108050,286],{"class":40},[34,108052,108053],{"class":504},"\"joint qvel:\"",[34,108055,106309],{"class":40},[34,108057,247],{"class":44},[34,108059,296],{"class":40},[34,108061,108062,108064,108066,108069],{"class":36,"line":11391},[34,108063,32941],{"class":44},[34,108065,286],{"class":40},[34,108067,108068],{"class":504},"\"last ctrl:\"",[34,108070,108071],{"class":40},", data.ctrl.copy())\n",[34,108073,108074],{"class":36,"line":11414},[34,108075,1475],{"emptyLinePlaceholder":1474},[34,108077,108078],{"class":36,"line":11438},[34,108079,1475],{"emptyLinePlaceholder":1474},[34,108081,108082,108084,108086,108088,108090],{"class":36,"line":11443},[34,108083,3189],{"class":55},[34,108085,32862],{"class":44},[34,108087,102922],{"class":55},[34,108089,102925],{"class":504},[34,108091,5392],{"class":40},[34,108093,108094],{"class":36,"line":11448},[34,108095,102932],{"class":40},[103,108097,104933],{},[24,108099,108101],{"className":25467,"code":108100,"language":25469,"meta":29,"style":29},"touch ch4_joint_motor.py\n",[31,108102,108103],{"__ignoreMap":29},[34,108104,108105,108107],{"class":36,"line":37},[34,108106,102646],{"class":3617},[34,108108,108109],{"class":504}," ch4_joint_motor.py\n",[103,108111,103664],{},[24,108113,108115],{"className":25467,"code":108114,"language":25469,"meta":29,"style":29},"python ch4_joint_motor.py\n",[31,108116,108117],{"__ignoreMap":29},[34,108118,108119,108121],{"class":36,"line":37},[34,108120,28],{"class":3617},[34,108122,108109],{"class":504},[19,108124,102935],{"id":102935},[103,108126,108127],{},"检查 actuator 数量：",[24,108129,108131],{"className":26,"code":108130,"language":28,"meta":29,"style":29},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[31,108132,108133,108145],{"__ignoreMap":29},[34,108134,108135,108137,108139,108141,108143],{"class":36,"line":37},[34,108136,3189],{"class":55},[34,108138,107921],{"class":40},[34,108140,22594],{"class":55},[34,108142,26764],{"class":44},[34,108144,5392],{"class":40},[34,108146,108147,108149,108151,108153,108155],{"class":36,"line":165},[34,108148,105258],{"class":55},[34,108150,104798],{"class":44},[34,108152,286],{"class":40},[34,108154,107938],{"class":504},[34,108156,101],{"class":40},[103,108158,108159,108161,108162,108164],{},[31,108160,103521],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[31,108163,102439],{}," 长度应该是 1。",[103,108166,108167],{},"产生正弦控制信号：",[24,108169,108171],{"className":26,"code":108170,"language":28,"meta":29,"style":29},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[31,108172,108173],{"__ignoreMap":29},[34,108174,108175,108177,108179,108181,108183,108185,108187,108189,108191,108193,108195,108197,108199,108201],{"class":36,"line":37},[34,108176,107234],{"class":40},[34,108178,177],{"class":44},[34,108180,6095],{"class":40},[34,108182,221],{"class":55},[34,108184,107989],{"class":44},[34,108186,8168],{"class":55},[34,108188,107994],{"class":40},[34,108190,106623],{"class":44},[34,108192,8168],{"class":55},[34,108194,108001],{"class":40},[34,108196,2252],{"class":55},[34,108198,63506],{"class":44},[34,108200,8168],{"class":55},[34,108202,108010],{"class":40},[103,108204,108205],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[103,108207,103036],{},[24,108209,108210],{"className":26,"code":105868,"language":28,"meta":29,"style":29},[31,108211,108212],{"__ignoreMap":29},[34,108213,108214],{"class":36,"line":37},[34,108215,105868],{"class":40},[103,108217,108218],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[19,108220,103071],{"id":103071},[24,108222,108224],{"className":26,"code":108223,"language":28,"meta":29,"style":29},"import math\n",[31,108225,108226],{"__ignoreMap":29},[34,108227,108228,108230],{"class":36,"line":37},[34,108229,32036],{"class":55},[34,108231,107713],{"class":40},[103,108233,108234,108235,102381,108238,108241],{},"导入 Python 标准库里的数学模块。后面要用 ",[31,108236,108237],{},"math.sin",[31,108239,108240],{},"math.pi"," 生成周期变化的控制信号。",[24,108243,108244],{"className":26,"code":105049,"language":28,"meta":29,"style":29},[31,108245,108246,108252],{"__ignoreMap":29},[34,108247,108248,108250],{"class":36,"line":37},[34,108249,32036],{"class":55},[34,108251,102664],{"class":40},[34,108253,108254,108256,108258,108260],{"class":36,"line":165},[34,108255,32036],{"class":55},[34,108257,33022],{"class":40},[34,108259,33025],{"class":55},[34,108261,33028],{"class":40},[103,108263,108264],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[24,108266,108267],{"className":54706,"code":107550,"language":54708,"meta":29,"style":29},[31,108268,108269],{"__ignoreMap":29},[34,108270,108271,108273,108275,108277,108279,108281,108283,108285,108287,108289,108291,108293,108295,108297,108299],{"class":36,"line":37},[34,108272,2701],{"class":40},[34,108274,104319],{"class":52939},[34,108276,16566],{"class":3617},[34,108278,221],{"class":40},[34,108280,107382],{"class":504},[34,108282,55463],{"class":3617},[34,108284,221],{"class":40},[34,108286,107382],{"class":504},[34,108288,107391],{"class":3617},[34,108290,221],{"class":40},[34,108292,107396],{"class":504},[34,108294,107579],{"class":3617},[34,108296,221],{"class":40},[34,108298,107584],{"class":504},[34,108300,102507],{"class":40},[103,108302,108303,108304,108306,108307,108309,108310,108312],{},"这行定义关节。",[31,108305,107203],{}," 表示旋转关节。",[31,108308,107602],{}," 表示绕 y 轴旋转。",[31,108311,107608],{}," 表示有一点阻尼，运动不会完全无损耗。",[24,108314,108316],{"className":54706,"code":108315,"language":54708,"meta":29,"style":29},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[31,108317,108318],{"__ignoreMap":29},[34,108319,108320,108322,108324,108326,108328,108331,108333,108335,108338,108341,108343,108346,108348,108350,108352,108354,108356,108359],{"class":36,"line":37},[34,108321,2701],{"class":40},[34,108323,102483],{"class":52939},[34,108325,16566],{"class":3617},[34,108327,221],{"class":40},[34,108329,108330],{"class":504},"\"link_geom\"",[34,108332,55463],{"class":3617},[34,108334,221],{"class":40},[34,108336,108337],{"class":504},"\"capsule\"",[34,108339,108340],{"class":3617}," fromto",[34,108342,221],{"class":40},[34,108344,108345],{"class":504},"\"0 0 0 0 0 0.5\"",[34,108347,102499],{"class":3617},[34,108349,221],{"class":40},[34,108351,105141],{"class":504},[34,108353,103364],{"class":3617},[34,108355,221],{"class":40},[34,108357,108358],{"class":504},"\"0.5\"",[34,108360,102507],{"class":40},[103,108362,108363,108364,108366,108367,108369,108370,108373,108374,30031,108377,108379],{},"这行定义摆杆的形状。",[31,108365,104528],{}," 是胶囊体，适合表示杆子。",[31,108368,104539],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[31,108371,108372],{},"(0,0,0)"," 延伸到 ",[31,108375,108376],{},"(0,0,0.5)",[31,108378,104533],{}," 是半径。",[24,108381,108382],{"className":54706,"code":107616,"language":54708,"meta":29,"style":29},[31,108383,108384],{"__ignoreMap":29},[34,108385,108386,108388,108390,108392,108394,108396,108398,108400,108402,108404,108406,108408,108410,108412,108414,108416,108418,108420],{"class":36,"line":37},[34,108387,2701],{"class":40},[34,108389,107437],{"class":52939},[34,108391,16566],{"class":3617},[34,108393,221],{"class":40},[34,108395,107444],{"class":504},[34,108397,107447],{"class":3617},[34,108399,221],{"class":40},[34,108401,107382],{"class":504},[34,108403,107454],{"class":3617},[34,108405,221],{"class":40},[34,108407,5331],{"class":504},[34,108409,107461],{"class":3617},[34,108411,221],{"class":40},[34,108413,107466],{"class":504},[34,108415,107469],{"class":3617},[34,108417,221],{"class":40},[34,108419,107474],{"class":504},[34,108421,102507],{"class":40},[103,108423,108424,108425,108427,108428,108431,108432,108434],{},"这行定义电机。它作用在 ",[31,108426,107203],{}," 关节上。",[31,108429,108430],{},"gear"," 可以理解成放大倍数。",[31,108433,107218],{}," 限制控制输入范围。",[24,108436,108437],{"className":26,"code":108130,"language":28,"meta":29,"style":29},[31,108438,108439,108451],{"__ignoreMap":29},[34,108440,108441,108443,108445,108447,108449],{"class":36,"line":37},[34,108442,3189],{"class":55},[34,108444,107921],{"class":40},[34,108446,22594],{"class":55},[34,108448,26764],{"class":44},[34,108450,5392],{"class":40},[34,108452,108453,108455,108457,108459,108461],{"class":36,"line":165},[34,108454,105258],{"class":55},[34,108456,104798],{"class":44},[34,108458,286],{"class":40},[34,108460,107938],{"class":504},[34,108462,101],{"class":40},[103,108464,108465,108467],{},[31,108466,103521],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[24,108469,108471],{"className":26,"code":108470,"language":28,"meta":29,"style":29},"for step in range(2000):\n",[31,108472,108473],{"__ignoreMap":29},[34,108474,108475,108477,108479,108481,108483,108485,108487],{"class":36,"line":37},[34,108476,4678],{"class":55},[34,108478,33257],{"class":40},[34,108480,27689],{"class":55},[34,108482,34084],{"class":44},[34,108484,286],{"class":40},[34,108486,107959],{"class":44},[34,108488,32428],{"class":40},[103,108490,108491,108492,108494,108495,108498],{},"循环 2000 步。这里没有用 ",[31,108493,2783],{},"，而是用 ",[31,108496,108497],{},"step","，因为后面要用当前步数计算时间。",[24,108500,108502],{"className":26,"code":108501,"language":28,"meta":29,"style":29},"t = step * model.opt.timestep\n",[31,108503,108504],{"__ignoreMap":29},[34,108505,108506,108509,108511,108513,108515],{"class":36,"line":37},[34,108507,108508],{"class":40},"t ",[34,108510,221],{"class":55},[34,108512,33257],{"class":40},[34,108514,2252],{"class":55},[34,108516,107975],{"class":40},[103,108518,108519],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[24,108521,108522],{"className":26,"code":108170,"language":28,"meta":29,"style":29},[31,108523,108524],{"__ignoreMap":29},[34,108525,108526,108528,108530,108532,108534,108536,108538,108540,108542,108544,108546,108548,108550,108552],{"class":36,"line":37},[34,108527,107234],{"class":40},[34,108529,177],{"class":44},[34,108531,6095],{"class":40},[34,108533,221],{"class":55},[34,108535,107989],{"class":44},[34,108537,8168],{"class":55},[34,108539,107994],{"class":40},[34,108541,106623],{"class":44},[34,108543,8168],{"class":55},[34,108545,108001],{"class":40},[34,108547,2252],{"class":55},[34,108549,63506],{"class":44},[34,108551,8168],{"class":55},[34,108553,108010],{"class":40},[103,108555,108556],{},"这行给电机输入一个正弦波。拆开看：",[1772,108558,108559,108565,108571],{},[1775,108560,108561,108564],{},[31,108562,108563],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[1775,108566,108567,108570],{},[31,108568,108569],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[1775,108572,108573,108576],{},[31,108574,108575],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[103,108578,108579],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[24,108581,108583],{"className":26,"code":108582,"language":28,"meta":29,"style":29},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[31,108584,108585],{"__ignoreMap":29},[34,108586,108587,108589,108591,108593,108595,108597],{"class":36,"line":37},[34,108588,723],{"class":44},[34,108590,286],{"class":40},[34,108592,108038],{"class":504},[34,108594,106293],{"class":40},[34,108596,247],{"class":44},[34,108598,296],{"class":40},[103,108600,108601,108602,108604],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[31,108603,102433],{}," 只有一个数。",[14,108606,103679],{"id":103678},[103,108608,108609],{},"输出类似:",[24,108611,108614],{"className":108612,"code":108613,"language":6838,"meta":29},[6836],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[31,108615,108613],{"__ignoreMap":29},[103,108617,108618,108619,108621],{},"这里 ",[31,108620,107489],{}," 是电机输入。",[103,108623,108624,108627,108628,108631],{},[31,108625,108626],{},"joint qpos"," 是关节角度，单位通常是弧度。",[31,108629,108630],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[103,108633,108634],{},"角度单位提示：",[24,108636,108639],{"className":108637,"code":108638,"language":6838,"meta":29},[6836],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[31,108640,108638],{"__ignoreMap":29},[103,108642,108643,108644,108646,108647,108649],{},"如果你看到 ",[31,108645,105393],{}," 是 ",[31,108648,36970],{},"，大约就是 28.6 度。",[14,108651,103711],{"id":103710},[1772,108653,108654,108661,108664,108671,108674,108682,108690],{},[1775,108655,103774,108656,103777,108658,30031],{},[31,108657,107674],{},[31,108659,108660],{},"gear=\"5\"",[1775,108662,108663],{},"重新运行，观察关节运动是否更剧烈。",[1775,108665,103774,108666,103777,108668,30031],{},[31,108667,107218],{},[31,108669,108670],{},"-0.2 0.2",[1775,108672,108673],{},"重新运行，观察控制能力是否变弱。",[1775,108675,108676,108677,108679,108680,30031],{},"去掉 actuator，确认 ",[31,108678,103521],{}," 变成 ",[31,108681,177],{},[1775,108683,103774,108684,103777,108686,108689],{},[31,108685,107608],{},[31,108687,108688],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[1775,108691,103774,108692,103777,108694,108697],{},[31,108693,107602],{},[31,108695,108696],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108699,103816],{"id":103815},[19,108701,108703],{"id":108702},"indexerror-index-0-is-out-of-bounds",[31,108704,108705],{},"IndexError: index 0 is out of bounds",[103,108707,108708,108709,108711],{},"原因是 ",[31,108710,107355],{},"，没有 actuator。",[19,108713,108714],{"id":108714},"关节几乎不动",[103,108716,108717],{},"可能原因:",[1772,108719,108720,108725,108729,108735],{},[1775,108721,108722,108724],{},[31,108723,108430],{}," 太小",[1775,108726,108727,108724],{},[31,108728,107218],{},[1775,108730,108731,108734],{},[31,108732,108733],{},"damping"," 太大",[1775,108736,108737],{},"重力方向导致运动不明显",[19,108739,108740],{"id":108740},"模型编译失败",[103,108742,108743,108744,108746],{},"检查 actuator 引用的 ",[31,108745,107665],{}," 是否存在，joint 名称是否拼写一致。",[19,108748,108750,108752],{"id":108749},"datactrl0-写了但没有效果",[31,108751,107489],{}," 写了但没有效果",[103,108754,103938],{},[1772,108756,108757,108762,108765,108770,108775],{},[1775,108758,108759,108761],{},[31,108760,103521],{}," 是否大于 0。",[1775,108763,108764],{},"motor 是否引用了正确 joint。",[1775,108766,108767,108769],{},[31,108768,108430],{}," 是否太小。",[1775,108771,108772,108774],{},[31,108773,107218],{}," 是否把输入限制得太小。",[1775,108776,108777],{},"body 是否真的有可动 joint。",[19,108779,108780],{"id":108780},"控制输入超过范围会怎样",[103,108782,108783],{},"如果设置了：",[24,108785,108787],{"className":54706,"code":108786,"language":54708,"meta":29,"style":29},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[31,108788,108789],{"__ignoreMap":29},[34,108790,108791],{"class":36,"line":37},[34,108792,108786],{"class":40},[103,108794,108795],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[24,108797,108799],{"className":26,"code":108798,"language":28,"meta":29,"style":29},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[31,108800,108801,108821],{"__ignoreMap":29},[34,108802,108803,108806,108808,108811,108813,108815,108817,108819],{"class":36,"line":37},[34,108804,108805],{"class":40},"action ",[34,108807,221],{"class":55},[34,108809,108810],{"class":40}," np.clip(action, ",[34,108812,2327],{"class":55},[34,108814,106623],{"class":44},[34,108816,48],{"class":40},[34,108818,106623],{"class":44},[34,108820,101],{"class":40},[34,108822,108823,108825,108827,108829,108831],{"class":36,"line":165},[34,108824,107234],{"class":40},[34,108826,177],{"class":44},[34,108828,6095],{"class":40},[34,108830,221],{"class":55},[34,108832,108833],{"class":40}," action\n",[14,108835,103970],{"id":103969},[103,108837,108838],{},"这一章建立了控制任务的基本形式：",[24,108840,108843],{"className":108841,"code":108842,"language":6838,"meta":29},[6836],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[31,108844,108842],{"__ignoreMap":29},[103,108846,108847],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1711,108849,108850],{},"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":29,"searchDepth":165,"depth":165,"links":108852},[108853,108854,108855,108860,108864,108865,108866,108874],{"id":102009,"depth":165,"text":102010},{"id":102132,"depth":165,"text":102133},{"id":102407,"depth":165,"text":102408,"children":108856},[108857,108858,108859],{"id":107496,"depth":171,"text":107497},{"id":107546,"depth":171,"text":107547},{"id":107612,"depth":171,"text":107613},{"id":102615,"depth":165,"text":102616,"children":108861},[108862,108863],{"id":102935,"depth":171,"text":102935},{"id":103071,"depth":171,"text":103071},{"id":103678,"depth":165,"text":103679},{"id":103710,"depth":165,"text":103711},{"id":103815,"depth":165,"text":103816,"children":108867},[108868,108869,108870,108871,108873],{"id":108702,"depth":171,"text":108705},{"id":108714,"depth":171,"text":108714},{"id":108740,"depth":171,"text":108740},{"id":108749,"depth":171,"text":108872},"data.ctrl[0] 写了但没有效果",{"id":108780,"depth":171,"text":108780},{"id":103969,"depth":165,"text":103970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107184,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108881,"title":108882,"body":108883,"description":29,"extension":1745,"meta":110792,"navigation":1474,"path":110793,"seo":110794,"stem":110795,"__hash__":110796},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108884,"toc":110768},[108885,108888,108890,108893,108901,108904,108921,108924,108949,108952,108998,109000,109002,109057,109059,109078,109080,109123,109126,109143,109146,109162,109172,109179,109181,109184,109187,109221,109224,109272,109276,109279,109293,109302,109306,109309,109334,109337,109341,109354,109357,109363,109366,109381,109383,109386,109646,109648,109660,109663,109975,109977,109989,109991,109994,110009,110014,110017,110039,110042,110045,110079,110082,110086,110097,110100,110117,110120,110134,110141,110161,110168,110182,110185,110197,110212,110232,110235,110257,110260,110264,110279,110290,110305,110308,110338,110354,110383,110391,110415,110418,110436,110446,110458,110465,110474,110480,110489,110492,110494,110503,110506,110521,110523,110526,110537,110540,110551,110554,110572,110574,110591,110594,110622,110624,110628,110631,110661,110667,110670,110674,110682,110685,110687,110708,110711,110714,110730,110733,110749,110751,110754,110765],[10,108886,108882],{"id":108887},"_5viewer-可视化与-renderer-离屏渲染",[14,108889,102010],{"id":102009},[103,108891,108892],{},"本章掌握两类可视化方式:",[1772,108894,108895,108898],{},[1775,108896,108897],{},"交互式 viewer: 适合人工观察仿真",[1775,108899,108900],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[103,108902,108903],{},"使用官方接口:",[24,108905,108907],{"className":26,"code":108906,"language":28,"meta":29,"style":29},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[31,108908,108909,108916],{"__ignoreMap":29},[34,108910,108911,108913],{"class":36,"line":37},[34,108912,32036],{"class":55},[34,108914,108915],{"class":40}," mujoco.viewer\n",[34,108917,108918],{"class":36,"line":165},[34,108919,108920],{"class":40},"mujoco.viewer.launch_passive(model, data)\n",[103,108922,108923],{},"以及:",[24,108925,108927],{"className":26,"code":108926,"language":28,"meta":29,"style":29},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[31,108928,108929,108939],{"__ignoreMap":29},[34,108930,108931,108934,108936],{"class":36,"line":37},[34,108932,108933],{"class":40},"renderer ",[34,108935,221],{"class":55},[34,108937,108938],{"class":40}," mujoco.Renderer(model)\n",[34,108940,108941,108944,108946],{"class":36,"line":165},[34,108942,108943],{"class":40},"image ",[34,108945,221],{"class":55},[34,108947,108948],{"class":40}," renderer.render()\n",[103,108950,108951],{},"新手建议先理解二者区别：",[1948,108953,108954,108970],{},[1951,108955,108956],{},[1954,108957,108958,108961,108964,108967],{},[1957,108959,108960],{"align":25381},"工具",[1957,108962,108963],{"align":25381},"用途",[1957,108965,108966],{"align":25381},"是否打开窗口",[1957,108968,108969],{"align":25381},"常见场景",[1994,108971,108972,108985],{},[1954,108973,108974,108977,108980,108982],{},[1999,108975,108976],{"align":25381},"Viewer",[1999,108978,108979],{"align":25381},"人眼实时观察仿真",[1999,108981,106028],{"align":25381},[1999,108983,108984],{"align":25381},"调试模型、看控制效果",[1954,108986,108987,108990,108993,108995],{},[1999,108988,108989],{"align":25381},"Renderer",[1999,108991,108992],{"align":25381},"生成图像数组",[1999,108994,106041],{"align":25381},[1999,108996,108997],{"align":25381},"保存图片、训练视觉策略、服务器批量采集",[14,108999,102133],{"id":102132},[103,109001,102136],{},[24,109003,109005],{"className":25467,"code":109004,"language":25469,"meta":29,"style":29},"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",[31,109006,109007,109019,109029,109037,109045],{"__ignoreMap":29},[34,109008,109009,109011,109013,109015,109017],{"class":36,"line":37},[34,109010,26222],{"class":3617},[34,109012,27961],{"class":504},[34,109014,25479],{"class":504},[34,109016,28046],{"class":44},[34,109018,26324],{"class":44},[34,109020,109021,109023,109025,109027],{"class":36,"line":165},[34,109022,102171],{"class":504},[34,109024,102174],{"class":504},[34,109026,102177],{"class":504},[34,109028,26324],{"class":44},[34,109030,109031,109033,109035],{"class":36,"line":171},[34,109032,102184],{"class":504},[34,109034,102187],{"class":504},[34,109036,26324],{"class":44},[34,109038,109039,109041,109043],{"class":36,"line":182},[34,109040,102194],{"class":504},[34,109042,102197],{"class":504},[34,109044,26324],{"class":44},[34,109046,109047,109049,109051,109053,109055],{"class":36,"line":188},[34,109048,102204],{"class":504},[34,109050,102207],{"class":504},[34,109052,102210],{"class":504},[34,109054,102213],{"class":504},[34,109056,103879],{"class":504},[103,109058,104182],{},[24,109060,109062],{"className":25467,"code":109061,"language":25469,"meta":29,"style":29},"pip install \"mujoco>=2.3\" numpy pillow\n",[31,109063,109064],{"__ignoreMap":29},[34,109065,109066,109068,109070,109072,109075],{"class":36,"line":37},[34,109067,25476],{"class":3617},[34,109069,25479],{"class":504},[34,109071,102293],{"class":504},[34,109073,109074],{"class":504}," numpy",[34,109076,109077],{"class":504}," pillow\n",[103,109079,104199],{},[24,109081,109083],{"className":25467,"code":109082,"language":25469,"meta":29,"style":29},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[31,109084,109085,109102,109111],{"__ignoreMap":29},[34,109086,109087,109089,109091,109093,109096,109098,109100],{"class":36,"line":37},[34,109088,31976],{"class":3617},[34,109090,30822],{"class":504},[34,109092,26761],{"class":44},[34,109094,109095],{"class":504}," mujoco-render",[34,109097,102338],{"class":504},[34,109099,102341],{"class":44},[34,109101,102344],{"class":44},[34,109103,109104,109106,109108],{"class":36,"line":165},[34,109105,31976],{"class":3617},[34,109107,102351],{"class":504},[34,109109,109110],{"class":504}," mujoco-render\n",[34,109112,109113,109115,109117,109119,109121],{"class":36,"line":171},[34,109114,25476],{"class":3617},[34,109116,25479],{"class":504},[34,109118,102293],{"class":504},[34,109120,109074],{"class":504},[34,109122,109077],{"class":504},[103,109124,109125],{},"离屏渲染后端:",[24,109127,109129],{"className":25467,"code":109128,"language":25469,"meta":29,"style":29},"export MUJOCO_GL=egl\n",[31,109130,109131],{"__ignoreMap":29},[34,109132,109133,109135,109138,109140],{"class":36,"line":37},[34,109134,26688],{"class":55},[34,109136,109137],{"class":40}," MUJOCO_GL",[34,109139,221],{"class":55},[34,109141,109142],{"class":40},"egl\n",[103,109144,109145],{},"或:",[24,109147,109149],{"className":25467,"code":109148,"language":25469,"meta":29,"style":29},"export MUJOCO_GL=osmesa\n",[31,109150,109151],{"__ignoreMap":29},[34,109152,109153,109155,109157,109159],{"class":36,"line":37},[34,109154,26688],{"class":55},[34,109156,109137],{"class":40},[34,109158,221],{"class":55},[34,109160,109161],{"class":40},"osmesa\n",[103,109163,109164,109165,109168,109169,30031],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[31,109166,109167],{},"egl"," 失败，再尝试 ",[31,109170,109171],{},"osmesa",[103,109173,109174,109175,109178],{},"如果你在本机桌面环境运行，通常先不要设置 ",[31,109176,109177],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109180,102408],{"id":102407},[103,109182,109183],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[103,109185,109186],{},"典型 viewer 流程:",[24,109188,109190],{"className":26,"code":109189,"language":28,"meta":29,"style":29},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[31,109191,109192,109205,109212,109216],{"__ignoreMap":29},[34,109193,109194,109197,109200,109202],{"class":36,"line":37},[34,109195,109196],{"class":55},"with",[34,109198,109199],{"class":40}," mujoco.viewer.launch_passive(model, data) ",[34,109201,33025],{"class":55},[34,109203,109204],{"class":40}," viewer:\n",[34,109206,109207,109209],{"class":36,"line":165},[34,109208,3905],{"class":55},[34,109210,109211],{"class":40}," viewer.is_running():\n",[34,109213,109214],{"class":36,"line":171},[34,109215,102879],{"class":40},[34,109217,109218],{"class":36,"line":182},[34,109219,109220],{"class":40},"        viewer.sync()\n",[103,109222,109223],{},"典型 renderer 流程:",[24,109225,109227],{"className":26,"code":109226,"language":28,"meta":29,"style":29},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[31,109228,109229,109255,109259,109264],{"__ignoreMap":29},[34,109230,109231,109233,109235,109238,109240,109242,109244,109246,109248,109250,109253],{"class":36,"line":37},[34,109232,108933],{"class":40},[34,109234,221],{"class":55},[34,109236,109237],{"class":40}," mujoco.Renderer(model, ",[34,109239,26627],{"class":51},[34,109241,221],{"class":55},[34,109243,43981],{"class":44},[34,109245,48],{"class":40},[34,109247,26623],{"class":51},[34,109249,221],{"class":55},[34,109251,109252],{"class":44},"640",[34,109254,101],{"class":40},[34,109256,109257],{"class":36,"line":165},[34,109258,105868],{"class":40},[34,109260,109261],{"class":36,"line":171},[34,109262,109263],{"class":40},"renderer.update_scene(data)\n",[34,109265,109266,109268,109270],{"class":36,"line":182},[34,109267,108943],{"class":40},[34,109269,221],{"class":55},[34,109271,108948],{"class":40},[19,109273,109275],{"id":109274},"viewer-的同步逻辑","viewer 的同步逻辑",[103,109277,109278],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[24,109280,109282],{"className":26,"code":109281,"language":28,"meta":29,"style":29},"mujoco.mj_step(model, data)\nviewer.sync()\n",[31,109283,109284,109288],{"__ignoreMap":29},[34,109285,109286],{"class":36,"line":37},[34,109287,105868],{"class":40},[34,109289,109290],{"class":36,"line":165},[34,109291,109292],{"class":40},"viewer.sync()\n",[103,109294,109295,109297,109298,109301],{},[31,109296,102578],{}," 负责算物理，",[31,109299,109300],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[19,109303,109305],{"id":109304},"为什么要-sleep","为什么要 sleep",[103,109307,109308],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[24,109310,109312],{"className":26,"code":109311,"language":28,"meta":29,"style":29},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[31,109313,109314],{"__ignoreMap":29},[34,109315,109316,109319,109321,109324,109326,109329,109331],{"class":36,"line":37},[34,109317,109318],{"class":40},"sleep_time ",[34,109320,221],{"class":55},[34,109322,109323],{"class":40}," model.opt.timestep ",[34,109325,2327],{"class":55},[34,109327,109328],{"class":40}," (time.time() ",[34,109330,2327],{"class":55},[34,109332,109333],{"class":40}," step_start)\n",[103,109335,109336],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[19,109338,109340],{"id":109339},"renderer-输出是什么","renderer 输出是什么",[24,109342,109344],{"className":26,"code":109343,"language":28,"meta":29,"style":29},"image = renderer.render()\n",[31,109345,109346],{"__ignoreMap":29},[34,109347,109348,109350,109352],{"class":36,"line":37},[34,109349,108943],{"class":40},[34,109351,221],{"class":55},[34,109353,108948],{"class":40},[103,109355,109356],{},"得到的是 NumPy 数组，形状通常是：",[24,109358,109361],{"className":109359,"code":109360,"language":6838,"meta":29},[6836],"(height, width, 3)\n",[31,109362,109360],{"__ignoreMap":29},[103,109364,109365],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[24,109367,109369],{"className":26,"code":109368,"language":28,"meta":29,"style":29},"Image.fromarray(image).save(\"render_output.png\")\n",[31,109370,109371],{"__ignoreMap":29},[34,109372,109373,109376,109379],{"class":36,"line":37},[34,109374,109375],{"class":40},"Image.fromarray(image).save(",[34,109377,109378],{"class":504},"\"render_output.png\"",[34,109380,101],{"class":40},[14,109382,102616],{"id":102615},[103,109384,109385],{},"交互式 Viewer:",[24,109387,109389],{"className":26,"code":109388,"language":28,"meta":29,"style":29},"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",[31,109390,109391,109397,109401,109407,109413,109417,109421,109429,109434,109438,109442,109446,109451,109456,109460,109464,109468,109473,109477,109481,109485,109489,109493,109497,109509,109521,109529,109533,109543,109563,109573,109578,109583,109587,109604,109617,109622,109626,109630,109642],{"__ignoreMap":29},[34,109392,109393,109395],{"class":36,"line":37},[34,109394,32036],{"class":55},[34,109396,33470],{"class":40},[34,109398,109399],{"class":36,"line":165},[34,109400,1475],{"emptyLinePlaceholder":1474},[34,109402,109403,109405],{"class":36,"line":171},[34,109404,32036],{"class":55},[34,109406,102664],{"class":40},[34,109408,109409,109411],{"class":36,"line":182},[34,109410,32036],{"class":55},[34,109412,108915],{"class":40},[34,109414,109415],{"class":36,"line":188},[34,109416,1475],{"emptyLinePlaceholder":1474},[34,109418,109419],{"class":36,"line":518},[34,109420,1475],{"emptyLinePlaceholder":1474},[34,109422,109423,109425,109427],{"class":36,"line":524},[34,109424,102677],{"class":44},[34,109426,56],{"class":55},[34,109428,102682],{"class":504},[34,109430,109431],{"class":36,"line":530},[34,109432,109433],{"class":504},"\u003Cmujoco model=\"viewer_demo\">\n",[34,109435,109436],{"class":36,"line":624},[34,109437,102692],{"class":504},[34,109439,109440],{"class":36,"line":630},[34,109441,1475],{"emptyLinePlaceholder":1474},[34,109443,109444],{"class":36,"line":636},[34,109445,102701],{"class":504},[34,109447,109448],{"class":36,"line":1513},[34,109449,109450],{"class":504},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[34,109452,109453],{"class":36,"line":1519},[34,109454,109455],{"class":504},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,109457,109458],{"class":36,"line":3283},[34,109459,1475],{"emptyLinePlaceholder":1474},[34,109461,109462],{"class":36,"line":3297},[34,109463,102715],{"class":504},[34,109465,109466],{"class":36,"line":3302},[34,109467,102720],{"class":504},[34,109469,109470],{"class":36,"line":3308},[34,109471,109472],{"class":504},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,109474,109475],{"class":36,"line":3328},[34,109476,102730],{"class":504},[34,109478,109479],{"class":36,"line":3333},[34,109480,102735],{"class":504},[34,109482,109483],{"class":36,"line":3347},[34,109484,102740],{"class":504},[34,109486,109487],{"class":36,"line":3352},[34,109488,505],{"class":504},[34,109490,109491],{"class":36,"line":3381},[34,109492,1475],{"emptyLinePlaceholder":1474},[34,109494,109495],{"class":36,"line":3386},[34,109496,1475],{"emptyLinePlaceholder":1474},[34,109498,109499,109501,109503,109505,109507],{"class":36,"line":3403},[34,109500,33588],{"class":55},[34,109502,3627],{"class":3617},[34,109504,102761],{"class":40},[34,109506,492],{"class":44},[34,109508,5392],{"class":40},[34,109510,109511,109513,109515,109517,109519],{"class":36,"line":3408},[34,109512,102770],{"class":40},[34,109514,221],{"class":55},[34,109516,102775],{"class":40},[34,109518,102677],{"class":44},[34,109520,101],{"class":40},[34,109522,109523,109525,109527],{"class":36,"line":3413},[34,109524,102784],{"class":40},[34,109526,221],{"class":55},[34,109528,102789],{"class":40},[34,109530,109531],{"class":36,"line":3418},[34,109532,1475],{"emptyLinePlaceholder":1474},[34,109534,109535,109537,109539,109541],{"class":36,"line":3432},[34,109536,35819],{"class":55},[34,109538,109199],{"class":40},[34,109540,33025],{"class":55},[34,109542,109204],{"class":40},[34,109544,109545,109548,109551,109553,109556,109558,109561],{"class":36,"line":3437},[34,109546,109547],{"class":55},"        while",[34,109549,109550],{"class":40}," viewer.is_running() ",[34,109552,32105],{"class":55},[34,109554,109555],{"class":40}," data.time ",[34,109557,2701],{"class":55},[34,109559,109560],{"class":44}," 5.0",[34,109562,5392],{"class":40},[34,109564,109565,109568,109570],{"class":36,"line":4230},[34,109566,109567],{"class":40},"            step_start ",[34,109569,221],{"class":55},[34,109571,109572],{"class":40}," time.time()\n",[34,109574,109575],{"class":36,"line":4244},[34,109576,109577],{"class":40},"            mujoco.mj_step(model, data)\n",[34,109579,109580],{"class":36,"line":4252},[34,109581,109582],{"class":40},"            viewer.sync()\n",[34,109584,109585],{"class":36,"line":4257},[34,109586,1475],{"emptyLinePlaceholder":1474},[34,109588,109589,109592,109594,109596,109598,109600,109602],{"class":36,"line":4263},[34,109590,109591],{"class":40},"            sleep_time ",[34,109593,221],{"class":55},[34,109595,109323],{"class":40},[34,109597,2327],{"class":55},[34,109599,109328],{"class":40},[34,109601,2327],{"class":55},[34,109603,109333],{"class":40},[34,109605,109606,109608,109611,109613,109615],{"class":36,"line":4269},[34,109607,6294],{"class":55},[34,109609,109610],{"class":40}," sleep_time ",[34,109612,2751],{"class":55},[34,109614,98],{"class":44},[34,109616,5392],{"class":40},[34,109618,109619],{"class":36,"line":4274},[34,109620,109621],{"class":40},"                time.sleep(sleep_time)\n",[34,109623,109624],{"class":36,"line":9598},[34,109625,1475],{"emptyLinePlaceholder":1474},[34,109627,109628],{"class":36,"line":9622},[34,109629,1475],{"emptyLinePlaceholder":1474},[34,109631,109632,109634,109636,109638,109640],{"class":36,"line":9627},[34,109633,3189],{"class":55},[34,109635,32862],{"class":44},[34,109637,102922],{"class":55},[34,109639,102925],{"class":504},[34,109641,5392],{"class":40},[34,109643,109644],{"class":36,"line":9633},[34,109645,102932],{"class":40},[103,109647,104933],{},[24,109649,109651],{"className":25467,"code":109650,"language":25469,"meta":29,"style":29},"touch ch5_viewer.py\n",[31,109652,109653],{"__ignoreMap":29},[34,109654,109655,109657],{"class":36,"line":37},[34,109656,102646],{"class":3617},[34,109658,109659],{"class":504}," ch5_viewer.py\n",[103,109661,109662],{},"离屏 Renderer 保存图片:",[24,109664,109666],{"className":26,"code":109665,"language":28,"meta":29,"style":29},"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",[31,109667,109668,109680,109684,109690,109700,109704,109708,109716,109721,109725,109729,109733,109737,109742,109746,109750,109754,109758,109762,109766,109770,109774,109778,109782,109786,109798,109810,109818,109843,109847,109863,109867,109871,109886,109895,109899,109913,109918,109923,109927,109939,109951,109955,109959,109971],{"__ignoreMap":29},[34,109669,109670,109672,109675,109677],{"class":36,"line":37},[34,109671,32379],{"class":55},[34,109673,109674],{"class":40}," pathlib ",[34,109676,32036],{"class":55},[34,109678,109679],{"class":40}," Path\n",[34,109681,109682],{"class":36,"line":165},[34,109683,1475],{"emptyLinePlaceholder":1474},[34,109685,109686,109688],{"class":36,"line":171},[34,109687,32036],{"class":55},[34,109689,102664],{"class":40},[34,109691,109692,109694,109696,109698],{"class":36,"line":182},[34,109693,32379],{"class":55},[34,109695,48902],{"class":44},[34,109697,48905],{"class":55},[34,109699,48908],{"class":40},[34,109701,109702],{"class":36,"line":188},[34,109703,1475],{"emptyLinePlaceholder":1474},[34,109705,109706],{"class":36,"line":518},[34,109707,1475],{"emptyLinePlaceholder":1474},[34,109709,109710,109712,109714],{"class":36,"line":524},[34,109711,102677],{"class":44},[34,109713,56],{"class":55},[34,109715,102682],{"class":504},[34,109717,109718],{"class":36,"line":530},[34,109719,109720],{"class":504},"\u003Cmujoco model=\"renderer_demo\">\n",[34,109722,109723],{"class":36,"line":624},[34,109724,102692],{"class":504},[34,109726,109727],{"class":36,"line":630},[34,109728,1475],{"emptyLinePlaceholder":1474},[34,109730,109731],{"class":36,"line":636},[34,109732,102701],{"class":504},[34,109734,109735],{"class":36,"line":1513},[34,109736,109450],{"class":504},[34,109738,109739],{"class":36,"line":1519},[34,109740,109741],{"class":504},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[34,109743,109744],{"class":36,"line":3283},[34,109745,109455],{"class":504},[34,109747,109748],{"class":36,"line":3297},[34,109749,1475],{"emptyLinePlaceholder":1474},[34,109751,109752],{"class":36,"line":3302},[34,109753,102715],{"class":504},[34,109755,109756],{"class":36,"line":3308},[34,109757,102720],{"class":504},[34,109759,109760],{"class":36,"line":3328},[34,109761,109472],{"class":504},[34,109763,109764],{"class":36,"line":3333},[34,109765,102730],{"class":504},[34,109767,109768],{"class":36,"line":3347},[34,109769,102735],{"class":504},[34,109771,109772],{"class":36,"line":3352},[34,109773,102740],{"class":504},[34,109775,109776],{"class":36,"line":3381},[34,109777,505],{"class":504},[34,109779,109780],{"class":36,"line":3386},[34,109781,1475],{"emptyLinePlaceholder":1474},[34,109783,109784],{"class":36,"line":3403},[34,109785,1475],{"emptyLinePlaceholder":1474},[34,109787,109788,109790,109792,109794,109796],{"class":36,"line":3408},[34,109789,33588],{"class":55},[34,109791,3627],{"class":3617},[34,109793,102761],{"class":40},[34,109795,492],{"class":44},[34,109797,5392],{"class":40},[34,109799,109800,109802,109804,109806,109808],{"class":36,"line":3413},[34,109801,102770],{"class":40},[34,109803,221],{"class":55},[34,109805,102775],{"class":40},[34,109807,102677],{"class":44},[34,109809,101],{"class":40},[34,109811,109812,109814,109816],{"class":36,"line":3418},[34,109813,102784],{"class":40},[34,109815,221],{"class":55},[34,109817,102789],{"class":40},[34,109819,109820,109823,109825,109827,109829,109831,109833,109835,109837,109839,109841],{"class":36,"line":3432},[34,109821,109822],{"class":40},"    renderer ",[34,109824,221],{"class":55},[34,109826,109237],{"class":40},[34,109828,26627],{"class":51},[34,109830,221],{"class":55},[34,109832,43981],{"class":44},[34,109834,48],{"class":40},[34,109836,26623],{"class":51},[34,109838,221],{"class":55},[34,109840,109252],{"class":44},[34,109842,101],{"class":40},[34,109844,109845],{"class":36,"line":3437},[34,109846,1475],{"emptyLinePlaceholder":1474},[34,109848,109849,109851,109853,109855,109857,109859,109861],{"class":36,"line":4230},[34,109850,4854],{"class":55},[34,109852,102864],{"class":40},[34,109854,27689],{"class":55},[34,109856,34084],{"class":44},[34,109858,286],{"class":40},[34,109860,451],{"class":44},[34,109862,32428],{"class":40},[34,109864,109865],{"class":36,"line":4244},[34,109866,102879],{"class":40},[34,109868,109869],{"class":36,"line":4252},[34,109870,1475],{"emptyLinePlaceholder":1474},[34,109872,109873,109876,109879,109881,109884],{"class":36,"line":4257},[34,109874,109875],{"class":40},"    renderer.update_scene(data, ",[34,109877,109878],{"class":51},"camera",[34,109880,221],{"class":55},[34,109882,109883],{"class":504},"\"fixed_camera\"",[34,109885,101],{"class":40},[34,109887,109888,109891,109893],{"class":36,"line":4263},[34,109889,109890],{"class":40},"    image ",[34,109892,221],{"class":55},[34,109894,108948],{"class":40},[34,109896,109897],{"class":36,"line":4269},[34,109898,1475],{"emptyLinePlaceholder":1474},[34,109900,109901,109904,109906,109909,109911],{"class":36,"line":4274},[34,109902,109903],{"class":40},"    output_path ",[34,109905,221],{"class":55},[34,109907,109908],{"class":40}," Path(",[34,109910,109378],{"class":504},[34,109912,101],{"class":40},[34,109914,109915],{"class":36,"line":9598},[34,109916,109917],{"class":40},"    Image.fromarray(image).save(output_path)\n",[34,109919,109920],{"class":36,"line":9622},[34,109921,109922],{"class":40},"    renderer.close()\n",[34,109924,109925],{"class":36,"line":9627},[34,109926,1475],{"emptyLinePlaceholder":1474},[34,109928,109929,109931,109933,109936],{"class":36,"line":9633},[34,109930,32941],{"class":44},[34,109932,286],{"class":40},[34,109934,109935],{"class":504},"\"saved:\"",[34,109937,109938],{"class":40},", output_path.resolve())\n",[34,109940,109941,109943,109945,109948],{"class":36,"line":9660},[34,109942,32941],{"class":44},[34,109944,286],{"class":40},[34,109946,109947],{"class":504},"\"image shape:\"",[34,109949,109950],{"class":40},", image.shape)\n",[34,109952,109953],{"class":36,"line":9665},[34,109954,1475],{"emptyLinePlaceholder":1474},[34,109956,109957],{"class":36,"line":9671},[34,109958,1475],{"emptyLinePlaceholder":1474},[34,109960,109961,109963,109965,109967,109969],{"class":36,"line":9683},[34,109962,3189],{"class":55},[34,109964,32862],{"class":44},[34,109966,102922],{"class":55},[34,109968,102925],{"class":504},[34,109970,5392],{"class":40},[34,109972,109973],{"class":36,"line":9695},[34,109974,102932],{"class":40},[103,109976,104933],{},[24,109978,109980],{"className":25467,"code":109979,"language":25469,"meta":29,"style":29},"touch ch5_renderer.py\n",[31,109981,109982],{"__ignoreMap":29},[34,109983,109984,109986],{"class":36,"line":37},[34,109985,102646],{"class":3617},[34,109987,109988],{"class":504}," ch5_renderer.py\n",[19,109990,102935],{"id":102935},[103,109992,109993],{},"viewer 上下文：",[24,109995,109997],{"className":26,"code":109996,"language":28,"meta":29,"style":29},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[31,109998,109999],{"__ignoreMap":29},[34,110000,110001,110003,110005,110007],{"class":36,"line":37},[34,110002,109196],{"class":55},[34,110004,109199],{"class":40},[34,110006,33025],{"class":55},[34,110008,109204],{"class":40},[103,110010,110011,110013],{},[31,110012,109196],{}," 语句会创建窗口，并在退出时自动清理资源。",[103,110015,110016],{},"窗口循环：",[24,110018,110020],{"className":26,"code":110019,"language":28,"meta":29,"style":29},"while viewer.is_running() and data.time \u003C 5.0:\n",[31,110021,110022],{"__ignoreMap":29},[34,110023,110024,110027,110029,110031,110033,110035,110037],{"class":36,"line":37},[34,110025,110026],{"class":55},"while",[34,110028,109550],{"class":40},[34,110030,32105],{"class":55},[34,110032,109555],{"class":40},[34,110034,2701],{"class":55},[34,110036,109560],{"class":44},[34,110038,5392],{"class":40},[103,110040,110041],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[103,110043,110044],{},"固定相机：",[24,110046,110048],{"className":54706,"code":110047,"language":54708,"meta":29,"style":29},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[31,110049,110050],{"__ignoreMap":29},[34,110051,110052,110054,110056,110058,110060,110062,110064,110066,110069,110072,110074,110077],{"class":36,"line":37},[34,110053,2701],{"class":40},[34,110055,109878],{"class":52939},[34,110057,16566],{"class":3617},[34,110059,221],{"class":40},[34,110061,109883],{"class":504},[34,110063,102469],{"class":3617},[34,110065,221],{"class":40},[34,110067,110068],{"class":504},"\"1.5 -2.0 1.2\"",[34,110070,110071],{"class":3617}," xyaxes",[34,110073,221],{"class":40},[34,110075,110076],{"class":504},"\"1 0.75 0 0 0 1\"",[34,110078,102507],{"class":40},[103,110080,110081],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[19,110083,110085],{"id":110084},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[24,110087,110089],{"className":26,"code":110088,"language":28,"meta":29,"style":29},"import time\n",[31,110090,110091],{"__ignoreMap":29},[34,110092,110093,110095],{"class":36,"line":37},[34,110094,32036],{"class":55},[34,110096,33470],{"class":40},[103,110098,110099],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[24,110101,110103],{"className":26,"code":110102,"language":28,"meta":29,"style":29},"import mujoco\nimport mujoco.viewer\n",[31,110104,110105,110111],{"__ignoreMap":29},[34,110106,110107,110109],{"class":36,"line":37},[34,110108,32036],{"class":55},[34,110110,102664],{"class":40},[34,110112,110113,110115],{"class":36,"line":165},[34,110114,32036],{"class":55},[34,110116,108915],{"class":40},[103,110118,110119],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[24,110121,110122],{"className":26,"code":109996,"language":28,"meta":29,"style":29},[31,110123,110124],{"__ignoreMap":29},[34,110125,110126,110128,110130,110132],{"class":36,"line":37},[34,110127,109196],{"class":55},[34,110129,109199],{"class":40},[34,110131,33025],{"class":55},[34,110133,109204],{"class":40},[103,110135,110136,110137,110140],{},"打开一个 viewer 窗口。",[31,110138,110139],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[24,110142,110143],{"className":26,"code":110019,"language":28,"meta":29,"style":29},[31,110144,110145],{"__ignoreMap":29},[34,110146,110147,110149,110151,110153,110155,110157,110159],{"class":36,"line":37},[34,110148,110026],{"class":55},[34,110150,109550],{"class":40},[34,110152,32105],{"class":55},[34,110154,109555],{"class":40},[34,110156,2701],{"class":55},[34,110158,109560],{"class":44},[34,110160,5392],{"class":40},[103,110162,110163,110164,110167],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[31,110165,110166],{},"viewer.is_running()"," 会变成 false，循环结束。",[24,110169,110171],{"className":26,"code":110170,"language":28,"meta":29,"style":29},"step_start = time.time()\n",[31,110172,110173],{"__ignoreMap":29},[34,110174,110175,110178,110180],{"class":36,"line":37},[34,110176,110177],{"class":40},"step_start ",[34,110179,221],{"class":55},[34,110181,109572],{"class":40},[103,110183,110184],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[24,110186,110187],{"className":26,"code":109281,"language":28,"meta":29,"style":29},[31,110188,110189,110193],{"__ignoreMap":29},[34,110190,110191],{"class":36,"line":37},[34,110192,105868],{"class":40},[34,110194,110195],{"class":36,"line":165},[34,110196,109292],{"class":40},[103,110198,110199,110201,110202,110204,110205,110207,110208,110211],{},[31,110200,102578],{}," 推进物理仿真。",[31,110203,109300],{}," 把最新的 ",[31,110206,35042],{}," 同步到窗口里显示。没有 ",[31,110209,110210],{},"sync()","，窗口可能看不到最新状态。",[24,110213,110214],{"className":26,"code":109311,"language":28,"meta":29,"style":29},[31,110215,110216],{"__ignoreMap":29},[34,110217,110218,110220,110222,110224,110226,110228,110230],{"class":36,"line":37},[34,110219,109318],{"class":40},[34,110221,221],{"class":55},[34,110223,109323],{"class":40},[34,110225,2327],{"class":55},[34,110227,109328],{"class":40},[34,110229,2327],{"class":55},[34,110231,109333],{"class":40},[103,110233,110234],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[24,110236,110238],{"className":26,"code":110237,"language":28,"meta":29,"style":29},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[31,110239,110240,110252],{"__ignoreMap":29},[34,110241,110242,110244,110246,110248,110250],{"class":36,"line":37},[34,110243,3189],{"class":55},[34,110245,109610],{"class":40},[34,110247,2751],{"class":55},[34,110249,98],{"class":44},[34,110251,5392],{"class":40},[34,110253,110254],{"class":36,"line":165},[34,110255,110256],{"class":40},"    time.sleep(sleep_time)\n",[103,110258,110259],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[19,110261,110263],{"id":110262},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[24,110265,110267],{"className":26,"code":110266,"language":28,"meta":29,"style":29},"from pathlib import Path\n",[31,110268,110269],{"__ignoreMap":29},[34,110270,110271,110273,110275,110277],{"class":36,"line":37},[34,110272,32379],{"class":55},[34,110274,109674],{"class":40},[34,110276,32036],{"class":55},[34,110278,109679],{"class":40},[103,110280,110281,110282,110285,110286,110289],{},"导入 ",[31,110283,110284],{},"Path","，用来处理文件路径。相比直接写字符串，",[31,110287,110288],{},"Path(\"render_output.png\")"," 更清晰。",[24,110291,110293],{"className":26,"code":110292,"language":28,"meta":29,"style":29},"from PIL import Image\n",[31,110294,110295],{"__ignoreMap":29},[34,110296,110297,110299,110301,110303],{"class":36,"line":37},[34,110298,32379],{"class":55},[34,110300,48902],{"class":44},[34,110302,48905],{"class":55},[34,110304,48908],{"class":40},[103,110306,110307],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[24,110309,110310],{"className":54706,"code":110047,"language":54708,"meta":29,"style":29},[31,110311,110312],{"__ignoreMap":29},[34,110313,110314,110316,110318,110320,110322,110324,110326,110328,110330,110332,110334,110336],{"class":36,"line":37},[34,110315,2701],{"class":40},[34,110317,109878],{"class":52939},[34,110319,16566],{"class":3617},[34,110321,221],{"class":40},[34,110323,109883],{"class":504},[34,110325,102469],{"class":3617},[34,110327,221],{"class":40},[34,110329,110068],{"class":504},[34,110331,110071],{"class":3617},[34,110333,221],{"class":40},[34,110335,110076],{"class":504},[34,110337,102507],{"class":40},[103,110339,110340,110341,110343,110344,110346,110347,110350,110351,110353],{},"定义一个相机。",[31,110342,81447],{}," 是相机名字。",[31,110345,105509],{}," 是相机在世界里的位置。",[31,110348,110349],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[31,110352,105509],{}," 来调视角。",[24,110355,110357],{"className":26,"code":110356,"language":28,"meta":29,"style":29},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[31,110358,110359],{"__ignoreMap":29},[34,110360,110361,110363,110365,110367,110369,110371,110373,110375,110377,110379,110381],{"class":36,"line":37},[34,110362,108933],{"class":40},[34,110364,221],{"class":55},[34,110366,109237],{"class":40},[34,110368,26627],{"class":51},[34,110370,221],{"class":55},[34,110372,43981],{"class":44},[34,110374,48],{"class":40},[34,110376,26623],{"class":51},[34,110378,221],{"class":55},[34,110380,109252],{"class":44},[34,110382,101],{"class":40},[103,110384,110385,110386,102381,110388,110390],{},"创建离屏渲染器。",[31,110387,26627],{},[31,110389,26623],{}," 决定输出图片大小。",[24,110392,110393],{"className":26,"code":103039,"language":28,"meta":29,"style":29},[31,110394,110395,110411],{"__ignoreMap":29},[34,110396,110397,110399,110401,110403,110405,110407,110409],{"class":36,"line":37},[34,110398,4678],{"class":55},[34,110400,102864],{"class":40},[34,110402,27689],{"class":55},[34,110404,34084],{"class":44},[34,110406,286],{"class":40},[34,110408,451],{"class":44},[34,110410,32428],{"class":40},[34,110412,110413],{"class":36,"line":165},[34,110414,103062],{"class":40},[103,110416,110417],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[24,110419,110421],{"className":26,"code":110420,"language":28,"meta":29,"style":29},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[31,110422,110423],{"__ignoreMap":29},[34,110424,110425,110428,110430,110432,110434],{"class":36,"line":37},[34,110426,110427],{"class":40},"renderer.update_scene(data, ",[34,110429,109878],{"class":51},[34,110431,221],{"class":55},[34,110433,109883],{"class":504},[34,110435,101],{"class":40},[103,110437,110438,110439,110441,110442,110445],{},"告诉 renderer：用当前 ",[31,110440,35042],{}," 的状态更新画面，并使用名为 ",[31,110443,110444],{},"fixed_camera"," 的相机视角。",[24,110447,110448],{"className":26,"code":109343,"language":28,"meta":29,"style":29},[31,110449,110450],{"__ignoreMap":29},[34,110451,110452,110454,110456],{"class":36,"line":37},[34,110453,108943],{"class":40},[34,110455,221],{"class":55},[34,110457,108948],{"class":40},[103,110459,110460,110461,110464],{},"真正渲染出图像。",[31,110462,110463],{},"image"," 是一个 NumPy 数组，不是文件。",[24,110466,110468],{"className":26,"code":110467,"language":28,"meta":29,"style":29},"Image.fromarray(image).save(output_path)\n",[31,110469,110470],{"__ignoreMap":29},[34,110471,110472],{"class":36,"line":37},[34,110473,110467],{"class":40},[103,110475,110476,110477,30031],{},"把数组转换成图片，并保存到 ",[31,110478,110479],{},"render_output.png",[24,110481,110483],{"className":26,"code":110482,"language":28,"meta":29,"style":29},"renderer.close()\n",[31,110484,110485],{"__ignoreMap":29},[34,110486,110487],{"class":36,"line":37},[34,110488,110482],{"class":40},[103,110490,110491],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110493,103679],{"id":103678},[103,110495,110496,110497,110499,110500,30031],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[31,110498,110479],{},"，并输出图像数组形状，例如 ",[31,110501,110502],{},"(480, 640, 3)",[103,110504,110505],{},"如果图片里看不到方块，先检查：",[1772,110507,110508,110511,110514],{},[1775,110509,110510],{},"方块是否掉到相机视野外。",[1775,110512,110513],{},"camera 位置是否合理。",[1775,110515,110516,110517,110520],{},"是否在 ",[31,110518,110519],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110522,103711],{"id":103710},[103,110524,110525],{},"运行 viewer:",[24,110527,110529],{"className":25467,"code":110528,"language":25469,"meta":29,"style":29},"python ch5_viewer.py\n",[31,110530,110531],{"__ignoreMap":29},[34,110532,110533,110535],{"class":36,"line":37},[34,110534,28],{"class":3617},[34,110536,109659],{"class":504},[103,110538,110539],{},"运行 renderer:",[24,110541,110543],{"className":25467,"code":110542,"language":25469,"meta":29,"style":29},"python ch5_renderer.py\n",[31,110544,110545],{"__ignoreMap":29},[34,110546,110547,110549],{"class":36,"line":37},[34,110548,28],{"class":3617},[34,110550,109988],{"class":504},[103,110552,110553],{},"如果在服务器上运行:",[24,110555,110557],{"className":25467,"code":110556,"language":25469,"meta":29,"style":29},"MUJOCO_GL=egl python ch5_renderer.py\n",[31,110558,110559],{"__ignoreMap":29},[34,110560,110561,110563,110565,110567,110570],{"class":36,"line":37},[34,110562,109177],{"class":40},[34,110564,221],{"class":55},[34,110566,109167],{"class":504},[34,110568,110569],{"class":3617}," python",[34,110571,109988],{"class":504},[103,110573,109145],{},[24,110575,110577],{"className":25467,"code":110576,"language":25469,"meta":29,"style":29},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[31,110578,110579],{"__ignoreMap":29},[34,110580,110581,110583,110585,110587,110589],{"class":36,"line":37},[34,110582,109177],{"class":40},[34,110584,221],{"class":55},[34,110586,109171],{"class":504},[34,110588,110569],{"class":3617},[34,110590,109988],{"class":504},[103,110592,110593],{},"再做几个练习：",[1772,110595,110596,110603,110606,110612],{},[1775,110597,110598,110599,110602],{},"把 renderer 分辨率改成 ",[31,110600,110601],{},"height=240, width=320","，观察输出 shape。",[1775,110604,110605],{},"把方块颜色改成蓝色，重新保存图片。",[1775,110607,110608,110609,110611],{},"把相机 ",[31,110610,105509],{}," 改远一点，观察画面中物体是否变小。",[1775,110613,110614,110615,103777,110618,110621],{},"把 viewer 示例中的 ",[31,110616,110617],{},"data.time \u003C 5.0",[31,110619,110620],{},"data.time \u003C 20.0","，观察更长时间。",[14,110623,103816],{"id":103815},[19,110625,110627],{"id":110626},"viewer-窗口打不开","viewer 窗口打不开",[103,110629,110630],{},"安装:",[24,110632,110634],{"className":25467,"code":110633,"language":25469,"meta":29,"style":29},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[31,110635,110636],{"__ignoreMap":29},[34,110637,110638,110640,110642,110644,110646,110648,110650,110652,110654,110656,110658],{"class":36,"line":37},[34,110639,26222],{"class":3617},[34,110641,27961],{"class":504},[34,110643,25479],{"class":504},[34,110645,28046],{"class":44},[34,110647,103869],{"class":504},[34,110649,102197],{"class":504},[34,110651,103874],{"class":504},[34,110653,102210],{"class":504},[34,110655,102216],{"class":504},[34,110657,102207],{"class":504},[34,110659,110660],{"class":504}," libXinerama\n",[19,110662,110664],{"id":110663},"glfwerror",[31,110665,110666],{},"GLFWError",[103,110668,110669],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[19,110671,110673],{"id":110672},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[103,110675,110676,110677,84176,110679,110681],{},"尝试 ",[31,110678,102400],{},[31,110680,102403],{},"。可能存在版本差异。",[19,110683,110684],{"id":110684},"保存图片是黑的",[103,110686,103938],{},[1772,110688,110689,110692,110695,110705],{},[1775,110690,110691],{},"XML 里是否有 light。",[1775,110693,110694],{},"相机是否对着模型。",[1775,110696,110697,110698,110701,110702,30031],{},"是否先 ",[31,110699,110700],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[31,110703,110704],{},"renderer.render()",[1775,110706,110707],{},"物体是否已经掉出视野。",[19,110709,110710],{"id":110710},"远程服务器没有显示器",[103,110712,110713],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[24,110715,110716],{"className":25467,"code":110556,"language":25469,"meta":29,"style":29},[31,110717,110718],{"__ignoreMap":29},[34,110719,110720,110722,110724,110726,110728],{"class":36,"line":37},[34,110721,109177],{"class":40},[34,110723,221],{"class":55},[34,110725,109167],{"class":504},[34,110727,110569],{"class":3617},[34,110729,109988],{"class":504},[103,110731,110732],{},"如果 EGL 不可用，再尝试：",[24,110734,110735],{"className":25467,"code":110576,"language":25469,"meta":29,"style":29},[31,110736,110737],{"__ignoreMap":29},[34,110738,110739,110741,110743,110745,110747],{"class":36,"line":37},[34,110740,109177],{"class":40},[34,110742,221],{"class":55},[34,110744,109171],{"class":504},[34,110746,110569],{"class":3617},[34,110748,109988],{"class":504},[14,110750,103970],{"id":103969},[103,110752,110753],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[1772,110755,110756,110759,110762],{},[1775,110757,110758],{},"先用 viewer 看模型和控制是否正常。",[1775,110760,110761],{},"再用 renderer 保存图片或构造视觉观测。",[1775,110763,110764],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1711,110766,110767],{},"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":29,"searchDepth":165,"depth":165,"links":110769},[110770,110771,110772,110777,110782,110783,110784,110791],{"id":102009,"depth":165,"text":102010},{"id":102132,"depth":165,"text":102133},{"id":102407,"depth":165,"text":102408,"children":110773},[110774,110775,110776],{"id":109274,"depth":171,"text":109275},{"id":109304,"depth":171,"text":109305},{"id":109339,"depth":171,"text":109340},{"id":102615,"depth":165,"text":102616,"children":110778},[110779,110780,110781],{"id":102935,"depth":171,"text":102935},{"id":110084,"depth":171,"text":110085},{"id":110262,"depth":171,"text":110263},{"id":103678,"depth":165,"text":103679},{"id":103710,"depth":165,"text":103711},{"id":103815,"depth":165,"text":103816,"children":110785},[110786,110787,110788,110789,110790],{"id":110626,"depth":171,"text":110627},{"id":110663,"depth":171,"text":110666},{"id":110672,"depth":171,"text":110673},{"id":110684,"depth":171,"text":110684},{"id":110710,"depth":171,"text":110710},{"id":103969,"depth":165,"text":103970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108882,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110798,"title":110799,"body":110800,"description":29,"extension":1745,"meta":112711,"navigation":1474,"path":112712,"seo":112713,"stem":112714,"__hash__":112715},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110801,"toc":112687},[110802,110805,110807,110810,110812,110831,110834,110840,110843,110845,110847,110871,110873,110887,110889,110930,110932,110943,110945,110948,110954,110957,110991,110994,111026,111029,111061,111065,111068,111108,111111,111117,111120,111126,111130,111133,111139,111142,111146,111149,111189,111191,111204,111207,111209,111791,111793,111805,111808,111819,111821,111824,111843,111855,111858,111879,111882,111885,111928,111931,111934,111954,111961,111963,111981,111996,111999,112005,112008,112014,112031,112038,112069,112080,112114,112125,112142,112151,112159,112164,112178,112181,112202,112208,112222,112227,112257,112267,112292,112300,112323,112326,112342,112345,112353,112359,112381,112394,112415,112424,112463,112474,112476,112479,112485,112488,112491,112497,112500,112520,112523,112525,112564,112566,112569,112577,112580,112583,112610,112613,112623,112629,112632,112638,112640,112646,112650,112653,112655,112658,112682,112685],[10,110803,110799],{"id":110804},"_6控制任务cartpole",[14,110806,102010],{"id":102009},[103,110808,110809],{},"本章搭建一个最小 Cartpole 控制任务。",[103,110811,105694],{},[1772,110813,110814,110817,110819,110822,110825,110828],{},[1775,110815,110816],{},"slide joint",[1775,110818,107547],{},[1775,110820,110821],{},"cart force actuator",[1775,110823,110824],{},"状态观测",[1775,110826,110827],{},"简单控制循环",[1775,110829,110830],{},"reward 设计雏形",[103,110832,110833],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[24,110835,110838],{"className":110836,"code":110837,"language":6838,"meta":29},[6836],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[31,110839,110837],{"__ignoreMap":29},[103,110841,110842],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110844,102133],{"id":102132},[103,110846,102136],{},[24,110848,110849],{"className":25467,"code":105751,"language":25469,"meta":29,"style":29},[31,110850,110851],{"__ignoreMap":29},[34,110852,110853,110855,110857,110859,110861,110863,110865,110867,110869],{"class":36,"line":37},[34,110854,26222],{"class":3617},[34,110856,27961],{"class":504},[34,110858,25479],{"class":504},[34,110860,28046],{"class":44},[34,110862,105766],{"class":504},[34,110864,102161],{"class":504},[34,110866,103864],{"class":504},[34,110868,102177],{"class":504},[34,110870,105775],{"class":504},[103,110872,104182],{},[24,110874,110875],{"className":25467,"code":102282,"language":25469,"meta":29,"style":29},[31,110876,110877],{"__ignoreMap":29},[34,110878,110879,110881,110883,110885],{"class":36,"line":37},[34,110880,25476],{"class":3617},[34,110882,25479],{"class":504},[34,110884,102293],{"class":504},[34,110886,102296],{"class":504},[103,110888,104199],{},[24,110890,110892],{"className":25467,"code":110891,"language":25469,"meta":29,"style":29},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[31,110893,110894,110911,110920],{"__ignoreMap":29},[34,110895,110896,110898,110900,110902,110905,110907,110909],{"class":36,"line":37},[34,110897,31976],{"class":3617},[34,110899,30822],{"class":504},[34,110901,26761],{"class":44},[34,110903,110904],{"class":504}," mujoco-cartpole",[34,110906,102338],{"class":504},[34,110908,102341],{"class":44},[34,110910,102344],{"class":44},[34,110912,110913,110915,110917],{"class":36,"line":165},[34,110914,31976],{"class":3617},[34,110916,102351],{"class":504},[34,110918,110919],{"class":504}," mujoco-cartpole\n",[34,110921,110922,110924,110926,110928],{"class":36,"line":171},[34,110923,25476],{"class":3617},[34,110925,25479],{"class":504},[34,110927,102293],{"class":504},[34,110929,102296],{"class":504},[103,110931,102367],{},[1772,110933,110934,110937,110940],{},[1775,110935,110936],{},"本章不依赖 Gymnasium。",[1775,110938,110939],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[1775,110941,110942],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110944,102408],{"id":102407},[103,110946,110947],{},"Cartpole 的模型结构:",[24,110949,110952],{"className":110950,"code":110951,"language":6838,"meta":29},[6836],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[31,110953,110951],{"__ignoreMap":29},[103,110955,110956],{},"小车通过 slide joint 左右移动:",[24,110958,110960],{"className":54706,"code":110959,"language":54708,"meta":29,"style":29},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[31,110961,110962],{"__ignoreMap":29},[34,110963,110964,110966,110968,110970,110972,110975,110977,110979,110982,110984,110986,110989],{"class":36,"line":37},[34,110965,2701],{"class":40},[34,110967,104319],{"class":52939},[34,110969,16566],{"class":3617},[34,110971,221],{"class":40},[34,110973,110974],{"class":504},"\"cart_x\"",[34,110976,55463],{"class":3617},[34,110978,221],{"class":40},[34,110980,110981],{"class":504},"\"slide\"",[34,110983,107391],{"class":3617},[34,110985,221],{"class":40},[34,110987,110988],{"class":504},"\"1 0 0\"",[34,110990,102507],{"class":40},[103,110992,110993],{},"杆子通过 hinge joint 旋转:",[24,110995,110997],{"className":54706,"code":110996,"language":54708,"meta":29,"style":29},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[31,110998,110999],{"__ignoreMap":29},[34,111000,111001,111003,111005,111007,111009,111012,111014,111016,111018,111020,111022,111024],{"class":36,"line":37},[34,111002,2701],{"class":40},[34,111004,104319],{"class":52939},[34,111006,16566],{"class":3617},[34,111008,221],{"class":40},[34,111010,111011],{"class":504},"\"pole_hinge\"",[34,111013,55463],{"class":3617},[34,111015,221],{"class":40},[34,111017,107382],{"class":504},[34,111019,107391],{"class":3617},[34,111021,221],{"class":40},[34,111023,107396],{"class":504},[34,111025,102507],{"class":40},[103,111027,111028],{},"控制力作用在小车 slide joint 上:",[24,111030,111032],{"className":54706,"code":111031,"language":54708,"meta":29,"style":29},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[31,111033,111034],{"__ignoreMap":29},[34,111035,111036,111038,111040,111042,111044,111047,111049,111051,111053,111055,111057,111059],{"class":36,"line":37},[34,111037,2701],{"class":40},[34,111039,107437],{"class":52939},[34,111041,16566],{"class":3617},[34,111043,221],{"class":40},[34,111045,111046],{"class":504},"\"cart_motor\"",[34,111048,107447],{"class":3617},[34,111050,221],{"class":40},[34,111052,110974],{"class":504},[34,111054,107454],{"class":3617},[34,111056,221],{"class":40},[34,111058,55955],{"class":504},[34,111060,102507],{"class":40},[19,111062,111064],{"id":111063},"cartpole-的状态是什么","Cartpole 的状态是什么",[103,111066,111067],{},"这个简化模型有两个关节：",[1948,111069,111070,111081],{},[1951,111071,111072],{},[1954,111073,111074,111076,111078],{},[1957,111075,104122],{"align":25381},[1957,111077,25382],{"align":25381},[1957,111079,111080],{"align":25381},"对应状态",[1994,111082,111083,111096],{},[1954,111084,111085,111090,111093],{},[1999,111086,111087],{"align":25381},[31,111088,111089],{},"cart_x",[1999,111091,111092],{"align":25381},"slide",[1999,111094,111095],{"align":25381},"小车 x 位置",[1954,111097,111098,111103,111105],{},[1999,111099,111100],{"align":25381},[31,111101,111102],{},"pole_hinge",[1999,111104,107203],{"align":25381},[1999,111106,111107],{"align":25381},"杆子角度",[103,111109,111110],{},"所以：",[24,111112,111115],{"className":111113,"code":111114,"language":6838,"meta":29},[6836],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[31,111116,111114],{"__ignoreMap":29},[103,111118,111119],{},"把它们拼起来就是观测：",[24,111121,111124],{"className":111122,"code":111123,"language":6838,"meta":29},[6836],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[31,111125,111123],{"__ignoreMap":29},[19,111127,111129],{"id":111128},"action-是什么","action 是什么",[103,111131,111132],{},"本章只有一个 actuator：",[24,111134,111137],{"className":111135,"code":111136,"language":6838,"meta":29},[6836],"data.ctrl[0] = action\n",[31,111138,111136],{"__ignoreMap":29},[103,111140,111141],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[19,111143,111145],{"id":111144},"reward-是什么","reward 是什么",[103,111147,111148],{},"奖励函数：",[24,111150,111152],{"className":26,"code":111151,"language":28,"meta":29,"style":29},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[31,111153,111154],{"__ignoreMap":29},[34,111155,111156,111158,111161,111163,111165,111167,111170,111172,111175,111177,111179,111181,111184,111186],{"class":36,"line":37},[34,111157,18692],{"class":55},[34,111159,111160],{"class":44}," float",[34,111162,286],{"class":40},[34,111164,103766],{"class":44},[34,111166,53910],{"class":55},[34,111168,111169],{"class":44}," 0.1",[34,111171,8168],{"class":55},[34,111173,111174],{"class":40}," cart_x ",[34,111176,2252],{"class":55},[34,111178,111174],{"class":40},[34,111180,2327],{"class":55},[34,111182,111183],{"class":40}," pole_angle ",[34,111185,2252],{"class":55},[34,111187,111188],{"class":40}," pole_angle)\n",[103,111190,107589],{},[1772,111192,111193,111198,111201],{},[1775,111194,111195,111196,30031],{},"基础奖励是 ",[31,111197,103766],{},[1775,111199,111200],{},"小车离中心越远，扣分越多。",[1775,111202,111203],{},"杆子角度越大，扣分越多。",[103,111205,111206],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111208,102616],{"id":102615},[24,111210,111212],{"className":26,"code":111211,"language":28,"meta":29,"style":29},"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",[31,111213,111214,111220,111230,111234,111238,111246,111251,111255,111259,111263,111268,111272,111277,111282,111287,111291,111296,111301,111306,111310,111314,111318,111322,111326,111331,111335,111339,111343,111347,111351,111361,111368,111372,111376,111390,111404,111417,111447,111451,111455,111467,111479,111487,111491,111504,111508,111512,111521,111525,111541,111551,111564,111577,111581,111604,111622,111626,111638,111642,111646,111656,111666,111670,111686,111727,111731,111751,111767,111771,111775,111787],{"__ignoreMap":29},[34,111215,111216,111218],{"class":36,"line":37},[34,111217,32036],{"class":55},[34,111219,102664],{"class":40},[34,111221,111222,111224,111226,111228],{"class":36,"line":165},[34,111223,32036],{"class":55},[34,111225,33022],{"class":40},[34,111227,33025],{"class":55},[34,111229,33028],{"class":40},[34,111231,111232],{"class":36,"line":171},[34,111233,1475],{"emptyLinePlaceholder":1474},[34,111235,111236],{"class":36,"line":182},[34,111237,1475],{"emptyLinePlaceholder":1474},[34,111239,111240,111242,111244],{"class":36,"line":188},[34,111241,102677],{"class":44},[34,111243,56],{"class":55},[34,111245,102682],{"class":504},[34,111247,111248],{"class":36,"line":518},[34,111249,111250],{"class":504},"\u003Cmujoco model=\"cartpole\">\n",[34,111252,111253],{"class":36,"line":524},[34,111254,102692],{"class":504},[34,111256,111257],{"class":36,"line":530},[34,111258,1475],{"emptyLinePlaceholder":1474},[34,111260,111261],{"class":36,"line":624},[34,111262,102701],{"class":504},[34,111264,111265],{"class":36,"line":630},[34,111266,111267],{"class":504},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,111269,111270],{"class":36,"line":636},[34,111271,1475],{"emptyLinePlaceholder":1474},[34,111273,111274],{"class":36,"line":1513},[34,111275,111276],{"class":504},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[34,111278,111279],{"class":36,"line":1519},[34,111280,111281],{"class":504},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[34,111283,111284],{"class":36,"line":3283},[34,111285,111286],{"class":504},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[34,111288,111289],{"class":36,"line":3297},[34,111290,1475],{"emptyLinePlaceholder":1474},[34,111292,111293],{"class":36,"line":3302},[34,111294,111295],{"class":504},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[34,111297,111298],{"class":36,"line":3308},[34,111299,111300],{"class":504},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[34,111302,111303],{"class":36,"line":3328},[34,111304,111305],{"class":504},"        \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",[34,111307,111308],{"class":36,"line":3333},[34,111309,107801],{"class":504},[34,111311,111312],{"class":36,"line":3347},[34,111313,102730],{"class":504},[34,111315,111316],{"class":36,"line":3352},[34,111317,102735],{"class":504},[34,111319,111320],{"class":36,"line":3381},[34,111321,1475],{"emptyLinePlaceholder":1474},[34,111323,111324],{"class":36,"line":3386},[34,111325,107818],{"class":504},[34,111327,111328],{"class":36,"line":3403},[34,111329,111330],{"class":504},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[34,111332,111333],{"class":36,"line":3408},[34,111334,107828],{"class":504},[34,111336,111337],{"class":36,"line":3413},[34,111338,102740],{"class":504},[34,111340,111341],{"class":36,"line":3418},[34,111342,505],{"class":504},[34,111344,111345],{"class":36,"line":3432},[34,111346,1475],{"emptyLinePlaceholder":1474},[34,111348,111349],{"class":36,"line":3437},[34,111350,1475],{"emptyLinePlaceholder":1474},[34,111352,111353,111355,111358],{"class":36,"line":4230},[34,111354,33588],{"class":55},[34,111356,111357],{"class":3617}," get_observation",[34,111359,111360],{"class":40},"(data: mujoco.MjData) -> np.ndarray:\n",[34,111362,111363,111365],{"class":36,"line":4244},[34,111364,5743],{"class":55},[34,111366,111367],{"class":40}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[34,111369,111370],{"class":36,"line":4252},[34,111371,1475],{"emptyLinePlaceholder":1474},[34,111373,111374],{"class":36,"line":4257},[34,111375,1475],{"emptyLinePlaceholder":1474},[34,111377,111378,111380,111383,111386,111388],{"class":36,"line":4263},[34,111379,33588],{"class":55},[34,111381,111382],{"class":3617}," compute_reward",[34,111384,111385],{"class":40},"(obs: np.ndarray) -> ",[34,111387,989],{"class":44},[34,111389,5392],{"class":40},[34,111391,111392,111395,111397,111400,111402],{"class":36,"line":4269},[34,111393,111394],{"class":40},"    cart_x ",[34,111396,221],{"class":55},[34,111398,111399],{"class":40}," obs[",[34,111401,177],{"class":44},[34,111403,34887],{"class":40},[34,111405,111406,111409,111411,111413,111415],{"class":36,"line":4274},[34,111407,111408],{"class":40},"    pole_angle ",[34,111410,221],{"class":55},[34,111412,111399],{"class":40},[34,111414,394],{"class":44},[34,111416,34887],{"class":40},[34,111418,111419,111421,111423,111425,111427,111429,111431,111433,111435,111437,111439,111441,111443,111445],{"class":36,"line":9598},[34,111420,5743],{"class":55},[34,111422,111160],{"class":44},[34,111424,286],{"class":40},[34,111426,103766],{"class":44},[34,111428,53910],{"class":55},[34,111430,111169],{"class":44},[34,111432,8168],{"class":55},[34,111434,111174],{"class":40},[34,111436,2252],{"class":55},[34,111438,111174],{"class":40},[34,111440,2327],{"class":55},[34,111442,111183],{"class":40},[34,111444,2252],{"class":55},[34,111446,111188],{"class":40},[34,111448,111449],{"class":36,"line":9622},[34,111450,1475],{"emptyLinePlaceholder":1474},[34,111452,111453],{"class":36,"line":9627},[34,111454,1475],{"emptyLinePlaceholder":1474},[34,111456,111457,111459,111461,111463,111465],{"class":36,"line":9633},[34,111458,33588],{"class":55},[34,111460,3627],{"class":3617},[34,111462,102761],{"class":40},[34,111464,492],{"class":44},[34,111466,5392],{"class":40},[34,111468,111469,111471,111473,111475,111477],{"class":36,"line":9660},[34,111470,102770],{"class":40},[34,111472,221],{"class":55},[34,111474,102775],{"class":40},[34,111476,102677],{"class":44},[34,111478,101],{"class":40},[34,111480,111481,111483,111485],{"class":36,"line":9665},[34,111482,102784],{"class":40},[34,111484,221],{"class":55},[34,111486,102789],{"class":40},[34,111488,111489],{"class":36,"line":9671},[34,111490,1475],{"emptyLinePlaceholder":1474},[34,111492,111493,111495,111497,111499,111501],{"class":36,"line":9683},[34,111494,106432],{"class":40},[34,111496,394],{"class":44},[34,111498,6095],{"class":40},[34,111500,221],{"class":55},[34,111502,111503],{"class":44}," 0.1\n",[34,111505,111506],{"class":36,"line":9695},[34,111507,106445],{"class":40},[34,111509,111510],{"class":36,"line":9707},[34,111511,1475],{"emptyLinePlaceholder":1474},[34,111513,111514,111517,111519],{"class":36,"line":11366},[34,111515,111516],{"class":40},"    total_reward ",[34,111518,221],{"class":55},[34,111520,106124],{"class":44},[34,111522,111523],{"class":36,"line":11391},[34,111524,1475],{"emptyLinePlaceholder":1474},[34,111526,111527,111529,111531,111533,111535,111537,111539],{"class":36,"line":11414},[34,111528,4854],{"class":55},[34,111530,33257],{"class":40},[34,111532,27689],{"class":55},[34,111534,34084],{"class":44},[34,111536,286],{"class":40},[34,111538,8060],{"class":44},[34,111540,32428],{"class":40},[34,111542,111543,111546,111548],{"class":36,"line":11438},[34,111544,111545],{"class":40},"        obs ",[34,111547,221],{"class":55},[34,111549,111550],{"class":40}," get_observation(data)\n",[34,111552,111553,111556,111558,111560,111562],{"class":36,"line":11443},[34,111554,111555],{"class":40},"        pole_angle ",[34,111557,221],{"class":55},[34,111559,111399],{"class":40},[34,111561,394],{"class":44},[34,111563,34887],{"class":40},[34,111565,111566,111569,111571,111573,111575],{"class":36,"line":11448},[34,111567,111568],{"class":40},"        pole_angular_velocity ",[34,111570,221],{"class":55},[34,111572,111399],{"class":40},[34,111574,337],{"class":44},[34,111576,34887],{"class":40},[34,111578,111579],{"class":36,"line":11453},[34,111580,1475],{"emptyLinePlaceholder":1474},[34,111582,111583,111586,111588,111591,111593,111595,111597,111599,111601],{"class":36,"line":11462},[34,111584,111585],{"class":40},"        action ",[34,111587,221],{"class":55},[34,111589,111590],{"class":44}," 2.0",[34,111592,8168],{"class":55},[34,111594,111183],{"class":40},[34,111596,2277],{"class":55},[34,111598,63506],{"class":44},[34,111600,8168],{"class":55},[34,111602,111603],{"class":40}," pole_angular_velocity\n",[34,111605,111606,111608,111610,111612,111614,111616,111618,111620],{"class":36,"line":11467},[34,111607,111585],{"class":40},[34,111609,221],{"class":55},[34,111611,108810],{"class":40},[34,111613,2327],{"class":55},[34,111615,103766],{"class":44},[34,111617,48],{"class":40},[34,111619,103766],{"class":44},[34,111621,101],{"class":40},[34,111623,111624],{"class":36,"line":11473},[34,111625,1475],{"emptyLinePlaceholder":1474},[34,111627,111628,111630,111632,111634,111636],{"class":36,"line":11494},[34,111629,107980],{"class":40},[34,111631,177],{"class":44},[34,111633,6095],{"class":40},[34,111635,221],{"class":55},[34,111637,108833],{"class":40},[34,111639,111640],{"class":36,"line":11500},[34,111641,102879],{"class":40},[34,111643,111644],{"class":36,"line":11514},[34,111645,1475],{"emptyLinePlaceholder":1474},[34,111647,111648,111651,111653],{"class":36,"line":11520},[34,111649,111650],{"class":40},"        reward ",[34,111652,221],{"class":55},[34,111654,111655],{"class":40}," compute_reward(get_observation(data))\n",[34,111657,111658,111661,111663],{"class":36,"line":11547},[34,111659,111660],{"class":40},"        total_reward ",[34,111662,11127],{"class":55},[34,111664,111665],{"class":40}," reward\n",[34,111667,111668],{"class":36,"line":11556},[34,111669,1475],{"emptyLinePlaceholder":1474},[34,111671,111672,111674,111676,111678,111680,111682,111684],{"class":36,"line":11562},[34,111673,4150],{"class":55},[34,111675,33257],{"class":40},[34,111677,2131],{"class":55},[34,111679,7404],{"class":44},[34,111681,102922],{"class":55},[34,111683,98],{"class":44},[34,111685,5392],{"class":40},[34,111687,111688,111690,111692,111695,111698,111701,111704,111706,111709,111712,111714,111716,111718,111720,111723,111725],{"class":36,"line":11570},[34,111689,36291],{"class":44},[34,111691,286],{"class":40},[34,111693,111694],{"class":504},"\"step:\"",[34,111696,111697],{"class":40},", step, ",[34,111699,111700],{"class":504},"\"obs:\"",[34,111702,111703],{"class":40},", np.round(obs, ",[34,111705,337],{"class":44},[34,111707,111708],{"class":40},"), ",[34,111710,111711],{"class":504},"\"action:\"",[34,111713,48],{"class":40},[34,111715,33659],{"class":44},[34,111717,286],{"class":40},[34,111719,989],{"class":44},[34,111721,111722],{"class":40},"(action), ",[34,111724,337],{"class":44},[34,111726,296],{"class":40},[34,111728,111729],{"class":36,"line":11575},[34,111730,1475],{"emptyLinePlaceholder":1474},[34,111732,111733,111735,111737,111740,111742,111744,111747,111749],{"class":36,"line":18250},[34,111734,32941],{"class":44},[34,111736,286],{"class":40},[34,111738,111739],{"class":504},"\"total_reward:\"",[34,111741,48],{"class":40},[34,111743,33659],{"class":44},[34,111745,111746],{"class":40},"(total_reward, ",[34,111748,337],{"class":44},[34,111750,296],{"class":40},[34,111752,111753,111755,111757,111760,111763,111765],{"class":36,"line":18256},[34,111754,32941],{"class":44},[34,111756,286],{"class":40},[34,111758,111759],{"class":504},"\"final obs:\"",[34,111761,111762],{"class":40},", np.round(get_observation(data), ",[34,111764,337],{"class":44},[34,111766,296],{"class":40},[34,111768,111769],{"class":36,"line":18279},[34,111770,1475],{"emptyLinePlaceholder":1474},[34,111772,111773],{"class":36,"line":18285},[34,111774,1475],{"emptyLinePlaceholder":1474},[34,111776,111777,111779,111781,111783,111785],{"class":36,"line":18308},[34,111778,3189],{"class":55},[34,111780,32862],{"class":44},[34,111782,102922],{"class":55},[34,111784,102925],{"class":504},[34,111786,5392],{"class":40},[34,111788,111789],{"class":36,"line":18322},[34,111790,102932],{"class":40},[103,111792,104933],{},[24,111794,111796],{"className":25467,"code":111795,"language":25469,"meta":29,"style":29},"touch ch6_cartpole.py\n",[31,111797,111798],{"__ignoreMap":29},[34,111799,111800,111802],{"class":36,"line":37},[34,111801,102646],{"class":3617},[34,111803,111804],{"class":504}," ch6_cartpole.py\n",[103,111806,111807],{},"运行：",[24,111809,111811],{"className":25467,"code":111810,"language":25469,"meta":29,"style":29},"python ch6_cartpole.py\n",[31,111812,111813],{"__ignoreMap":29},[34,111814,111815,111817],{"class":36,"line":37},[34,111816,28],{"class":3617},[34,111818,111804],{"class":504},[19,111820,102935],{"id":102935},[103,111822,111823],{},"构造观测：",[24,111825,111827],{"className":26,"code":111826,"language":28,"meta":29,"style":29},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[31,111828,111829,111837],{"__ignoreMap":29},[34,111830,111831,111833,111835],{"class":36,"line":37},[34,111832,33588],{"class":55},[34,111834,111357],{"class":3617},[34,111836,111360],{"class":40},[34,111838,111839,111841],{"class":36,"line":165},[34,111840,5743],{"class":55},[34,111842,111367],{"class":40},[103,111844,111845,111848,111849,111851,111852,111854],{},[31,111846,111847],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[31,111850,105393],{}," 2 维，",[31,111853,105723],{}," 2 维，所以 obs 是 4 维。",[103,111856,111857],{},"设置初始角度：",[24,111859,111861],{"className":26,"code":111860,"language":28,"meta":29,"style":29},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[31,111862,111863,111875],{"__ignoreMap":29},[34,111864,111865,111867,111869,111871,111873],{"class":36,"line":37},[34,111866,106062],{"class":40},[34,111868,394],{"class":44},[34,111870,6095],{"class":40},[34,111872,221],{"class":55},[34,111874,111503],{"class":44},[34,111876,111877],{"class":36,"line":165},[34,111878,105906],{"class":40},[103,111880,111881],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[103,111883,111884],{},"简单反馈控制：",[24,111886,111888],{"className":26,"code":111887,"language":28,"meta":29,"style":29},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[31,111889,111890,111910],{"__ignoreMap":29},[34,111891,111892,111894,111896,111898,111900,111902,111904,111906,111908],{"class":36,"line":37},[34,111893,108805],{"class":40},[34,111895,221],{"class":55},[34,111897,111590],{"class":44},[34,111899,8168],{"class":55},[34,111901,111183],{"class":40},[34,111903,2277],{"class":55},[34,111905,63506],{"class":44},[34,111907,8168],{"class":55},[34,111909,111603],{"class":40},[34,111911,111912,111914,111916,111918,111920,111922,111924,111926],{"class":36,"line":165},[34,111913,108805],{"class":40},[34,111915,221],{"class":55},[34,111917,108810],{"class":40},[34,111919,2327],{"class":55},[34,111921,103766],{"class":44},[34,111923,48],{"class":40},[34,111925,103766],{"class":44},[34,111927,101],{"class":40},[103,111929,111930],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[103,111932,111933],{},"限制动作：",[24,111935,111937],{"className":26,"code":111936,"language":28,"meta":29,"style":29},"np.clip(action, -1.0, 1.0)\n",[31,111938,111939],{"__ignoreMap":29},[34,111940,111941,111944,111946,111948,111950,111952],{"class":36,"line":37},[34,111942,111943],{"class":40},"np.clip(action, ",[34,111945,2327],{"class":55},[34,111947,103766],{"class":44},[34,111949,48],{"class":40},[34,111951,103766],{"class":44},[34,111953,101],{"class":40},[103,111955,111956,111957,111960],{},"因为 XML 里 ",[31,111958,111959],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[19,111962,103071],{"id":103071},[24,111964,111965],{"className":26,"code":111826,"language":28,"meta":29,"style":29},[31,111966,111967,111975],{"__ignoreMap":29},[34,111968,111969,111971,111973],{"class":36,"line":37},[34,111970,33588],{"class":55},[34,111972,111357],{"class":3617},[34,111974,111360],{"class":40},[34,111976,111977,111979],{"class":36,"line":165},[34,111978,5743],{"class":55},[34,111980,111367],{"class":40},[103,111982,111983,111984,111987,111988,111991,111992,111995],{},"这段定义了一个函数，用来获取当前观测。",[31,111985,111986],{},"data.qpos.copy()"," 是位置数组副本，",[31,111989,111990],{},"data.qvel.copy()"," 是速度数组副本。",[31,111993,111994],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[103,111997,111998],{},"在本章模型里：",[24,112000,112003],{"className":112001,"code":112002,"language":6838,"meta":29},[6836],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[31,112004,112002],{"__ignoreMap":29},[103,112006,112007],{},"所以返回的 obs 是：",[24,112009,112012],{"className":112010,"code":112011,"language":6838,"meta":29},[6836],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[31,112013,112011],{"__ignoreMap":29},[24,112015,112017],{"className":26,"code":112016,"language":28,"meta":29,"style":29},"def compute_reward(obs: np.ndarray) -> float:\n",[31,112018,112019],{"__ignoreMap":29},[34,112020,112021,112023,112025,112027,112029],{"class":36,"line":37},[34,112022,33588],{"class":55},[34,112024,111382],{"class":3617},[34,112026,111385],{"class":40},[34,112028,989],{"class":44},[34,112030,5392],{"class":40},[103,112032,112033,112034,112037],{},"这行定义奖励函数。输入是观测 ",[31,112035,112036],{},"obs","，输出是一个浮点数奖励。",[24,112039,112041],{"className":26,"code":112040,"language":28,"meta":29,"style":29},"cart_x = obs[0]\npole_angle = obs[1]\n",[31,112042,112043,112056],{"__ignoreMap":29},[34,112044,112045,112048,112050,112052,112054],{"class":36,"line":37},[34,112046,112047],{"class":40},"cart_x ",[34,112049,221],{"class":55},[34,112051,111399],{"class":40},[34,112053,177],{"class":44},[34,112055,34887],{"class":40},[34,112057,112058,112061,112063,112065,112067],{"class":36,"line":165},[34,112059,112060],{"class":40},"pole_angle ",[34,112062,221],{"class":55},[34,112064,111399],{"class":40},[34,112066,394],{"class":44},[34,112068,34887],{"class":40},[103,112070,112071,112072,112075,112076,112079],{},"数组索引从 0 开始。",[31,112073,112074],{},"obs[0]"," 是第一个元素，也就是小车位置。",[31,112077,112078],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[24,112081,112082],{"className":26,"code":111151,"language":28,"meta":29,"style":29},[31,112083,112084],{"__ignoreMap":29},[34,112085,112086,112088,112090,112092,112094,112096,112098,112100,112102,112104,112106,112108,112110,112112],{"class":36,"line":37},[34,112087,18692],{"class":55},[34,112089,111160],{"class":44},[34,112091,286],{"class":40},[34,112093,103766],{"class":44},[34,112095,53910],{"class":55},[34,112097,111169],{"class":44},[34,112099,8168],{"class":55},[34,112101,111174],{"class":40},[34,112103,2252],{"class":55},[34,112105,111174],{"class":40},[34,112107,2327],{"class":55},[34,112109,111183],{"class":40},[34,112111,2252],{"class":55},[34,112113,111188],{"class":40},[103,112115,112116,112117,112120,112121,112124],{},"这行计算奖励。",[31,112118,112119],{},"cart_x * cart_x"," 是小车位置的平方，",[31,112122,112123],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[24,112126,112128],{"className":26,"code":112127,"language":28,"meta":29,"style":29},"data.qpos[1] = 0.1\n",[31,112129,112130],{"__ignoreMap":29},[34,112131,112132,112134,112136,112138,112140],{"class":36,"line":37},[34,112133,106062],{"class":40},[34,112135,394],{"class":44},[34,112137,6095],{"class":40},[34,112139,221],{"class":55},[34,112141,111503],{"class":44},[103,112143,112144,112145,112147,112148,112150],{},"手动设置杆子的初始角度。因为 ",[31,112146,106819],{}," 是小车位置，",[31,112149,106822],{}," 是杆子角度，所以这里改的是杆子。",[24,112152,112153],{"className":26,"code":105906,"language":28,"meta":29,"style":29},[31,112154,112155],{"__ignoreMap":29},[34,112156,112157],{"class":36,"line":37},[34,112158,105906],{"class":40},[103,112160,106865,112161,112163],{},[31,112162,105393],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[24,112165,112167],{"className":26,"code":112166,"language":28,"meta":29,"style":29},"total_reward = 0.0\n",[31,112168,112169],{"__ignoreMap":29},[34,112170,112171,112174,112176],{"class":36,"line":37},[34,112172,112173],{"class":40},"total_reward ",[34,112175,221],{"class":55},[34,112177,106124],{"class":44},[103,112179,112180],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[24,112182,112184],{"className":26,"code":112183,"language":28,"meta":29,"style":29},"for step in range(1000):\n",[31,112185,112186],{"__ignoreMap":29},[34,112187,112188,112190,112192,112194,112196,112198,112200],{"class":36,"line":37},[34,112189,4678],{"class":55},[34,112191,33257],{"class":40},[34,112193,27689],{"class":55},[34,112195,34084],{"class":44},[34,112197,286],{"class":40},[34,112199,8060],{"class":44},[34,112201,32428],{"class":40},[103,112203,112204,112205,112207],{},"循环 1000 步。",[31,112206,108497],{}," 是当前步数，从 0 到 999。",[24,112209,112211],{"className":26,"code":112210,"language":28,"meta":29,"style":29},"obs = get_observation(data)\n",[31,112212,112213],{"__ignoreMap":29},[34,112214,112215,112218,112220],{"class":36,"line":37},[34,112216,112217],{"class":40},"obs ",[34,112219,221],{"class":55},[34,112221,111550],{"class":40},[103,112223,112224,112225,30031],{},"读取当前状态，保存到 ",[31,112226,112036],{},[24,112228,112230],{"className":26,"code":112229,"language":28,"meta":29,"style":29},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[31,112231,112232,112244],{"__ignoreMap":29},[34,112233,112234,112236,112238,112240,112242],{"class":36,"line":37},[34,112235,112060],{"class":40},[34,112237,221],{"class":55},[34,112239,111399],{"class":40},[34,112241,394],{"class":44},[34,112243,34887],{"class":40},[34,112245,112246,112249,112251,112253,112255],{"class":36,"line":165},[34,112247,112248],{"class":40},"pole_angular_velocity ",[34,112250,221],{"class":55},[34,112252,111399],{"class":40},[34,112254,337],{"class":44},[34,112256,34887],{"class":40},[103,112258,112259,112260,112263,112264,30031],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[31,112261,112262],{},"obs[3]","？因为 obs 的顺序是 ",[31,112265,112266],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[24,112268,112270],{"className":26,"code":112269,"language":28,"meta":29,"style":29},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[31,112271,112272],{"__ignoreMap":29},[34,112273,112274,112276,112278,112280,112282,112284,112286,112288,112290],{"class":36,"line":37},[34,112275,108805],{"class":40},[34,112277,221],{"class":55},[34,112279,111590],{"class":44},[34,112281,8168],{"class":55},[34,112283,111183],{"class":40},[34,112285,2277],{"class":55},[34,112287,63506],{"class":44},[34,112289,8168],{"class":55},[34,112291,111603],{"class":40},[103,112293,112294,112295,102381,112297,112299],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[31,112296,106623],{},[31,112298,36970],{}," 是人为设置的系数，不是固定公式。",[24,112301,112303],{"className":26,"code":112302,"language":28,"meta":29,"style":29},"action = np.clip(action, -1.0, 1.0)\n",[31,112304,112305],{"__ignoreMap":29},[34,112306,112307,112309,112311,112313,112315,112317,112319,112321],{"class":36,"line":37},[34,112308,108805],{"class":40},[34,112310,221],{"class":55},[34,112312,108810],{"class":40},[34,112314,2327],{"class":55},[34,112316,103766],{"class":44},[34,112318,48],{"class":40},[34,112320,103766],{"class":44},[34,112322,101],{"class":40},[103,112324,112325],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[24,112327,112328],{"className":26,"code":111136,"language":28,"meta":29,"style":29},[31,112329,112330],{"__ignoreMap":29},[34,112331,112332,112334,112336,112338,112340],{"class":36,"line":37},[34,112333,107234],{"class":40},[34,112335,177],{"class":44},[34,112337,6095],{"class":40},[34,112339,221],{"class":55},[34,112341,108833],{"class":40},[103,112343,112344],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[24,112346,112347],{"className":26,"code":105868,"language":28,"meta":29,"style":29},[31,112348,112349],{"__ignoreMap":29},[34,112350,112351],{"class":36,"line":37},[34,112352,105868],{"class":40},[103,112354,112355,112356,112358],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[31,112357,107489],{}," 计算小车和杆子的下一刻状态。",[24,112360,112362],{"className":26,"code":112361,"language":28,"meta":29,"style":29},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[31,112363,112364,112373],{"__ignoreMap":29},[34,112365,112366,112369,112371],{"class":36,"line":37},[34,112367,112368],{"class":40},"reward ",[34,112370,221],{"class":55},[34,112372,111655],{"class":40},[34,112374,112375,112377,112379],{"class":36,"line":165},[34,112376,112173],{"class":40},[34,112378,11127],{"class":55},[34,112380,111665],{"class":40},[103,112382,112383,112384,112386,112387,112390,112391,30031],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[31,112385,11127],{}," 是简写，",[31,112388,112389],{},"total_reward += reward"," 等价于 ",[31,112392,112393],{},"total_reward = total_reward + reward",[24,112395,112397],{"className":26,"code":112396,"language":28,"meta":29,"style":29},"if step % 100 == 0:\n",[31,112398,112399],{"__ignoreMap":29},[34,112400,112401,112403,112405,112407,112409,112411,112413],{"class":36,"line":37},[34,112402,3189],{"class":55},[34,112404,33257],{"class":40},[34,112406,2131],{"class":55},[34,112408,7404],{"class":44},[34,112410,102922],{"class":55},[34,112412,98],{"class":44},[34,112414,5392],{"class":40},[103,112416,112417,112419,112420,112423],{},[31,112418,2131],{}," 是取余数。",[31,112421,112422],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[24,112425,112427],{"className":26,"code":112426,"language":28,"meta":29,"style":29},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[31,112428,112429],{"__ignoreMap":29},[34,112430,112431,112433,112435,112437,112439,112441,112443,112445,112447,112449,112451,112453,112455,112457,112459,112461],{"class":36,"line":37},[34,112432,723],{"class":44},[34,112434,286],{"class":40},[34,112436,111694],{"class":504},[34,112438,111697],{"class":40},[34,112440,111700],{"class":504},[34,112442,111703],{"class":40},[34,112444,337],{"class":44},[34,112446,111708],{"class":40},[34,112448,111711],{"class":504},[34,112450,48],{"class":40},[34,112452,33659],{"class":44},[34,112454,286],{"class":40},[34,112456,989],{"class":44},[34,112458,111722],{"class":40},[34,112460,337],{"class":44},[34,112462,296],{"class":40},[103,112464,112465,112466,112469,112470,112473],{},"打印当前步数、观测和动作。",[31,112467,112468],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[31,112471,112472],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112475,103679],{"id":103678},[103,112477,112478],{},"观测向量:",[24,112480,112483],{"className":112481,"code":112482,"language":6838,"meta":29},[6836],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[31,112484,112482],{"__ignoreMap":29},[103,112486,112487],{},"控制器是教学用的简单线性反馈，不保证最优。",[103,112489,112490],{},"每隔 100 步会打印一次：",[24,112492,112495],{"className":112493,"code":112494,"language":6838,"meta":29},[6836],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[31,112496,112494],{"__ignoreMap":29},[103,112498,112499],{},"重点观察：",[1772,112501,112502,112508,112513],{},[1775,112503,112504,112507],{},[31,112505,112506],{},"pole_angle"," 是否越来越大。",[1775,112509,112510,112512],{},[31,112511,111089],{}," 是否跑得太远。",[1775,112514,112515,112516,84176,112518,30031],{},"action 是否经常被 clip 到 ",[31,112517,105278],{},[31,112519,394],{},[103,112521,112522],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112524,103711],{"id":103710},[1772,112526,112527,112533,112536,112542,112552,112558,112561],{},[1775,112528,112529,112530,30031],{},"把初始角度改为 ",[31,112531,112532],{},"data.qpos[1] = 0.3",[1775,112534,112535],{},"重新运行，观察控制是否变差。",[1775,112537,112538,112539,112541],{},"把 actuator ",[31,112540,108430],{}," 改小。",[1775,112543,112544,112545,112548,112549,30031],{},"打印 ",[31,112546,112547],{},"model.nq, model.nv, model.nu","，应为 ",[31,112550,112551],{},"2 2 1",[1775,112553,112554,112555,112557],{},"把 reward 里的 ",[31,112556,112123],{}," 系数改大，观察总奖励变化。",[1775,112559,112560],{},"把控制器改成反号，观察杆子是否更容易倒。",[1775,112562,112563],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112565,103816],{"id":103815},[19,112567,112568],{"id":112568},"杆子方向和预期不一致",[103,112570,103759,112571,112573,112574,112576],{},[31,112572,107602],{}," 和 capsule 的 ",[31,112575,104539],{},"，必要时用 viewer 可视化确认。",[19,112578,112579],{"id":112579},"控制器越控越倒",[103,112581,112582],{},"说明反馈符号可能反了，尝试:",[24,112584,112586],{"className":26,"code":112585,"language":28,"meta":29,"style":29},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[31,112587,112588],{"__ignoreMap":29},[34,112589,112590,112592,112594,112596,112598,112600,112602,112604,112606,112608],{"class":36,"line":37},[34,112591,108805],{"class":40},[34,112593,221],{"class":55},[34,112595,53910],{"class":55},[34,112597,106623],{"class":44},[34,112599,8168],{"class":55},[34,112601,111183],{"class":40},[34,112603,2327],{"class":55},[34,112605,63506],{"class":44},[34,112607,8168],{"class":55},[34,112609,111603],{"class":40},[19,112611,112612],{"id":112612},"小车飞走",[103,112614,112615,112616,112618,112619,112622],{},"降低 ",[31,112617,108430],{}," 或缩小 ",[31,112620,112621],{},"action"," 的 clip 范围。",[19,112624,112626,112628],{"id":112625},"obs3-为什么是杆子角速度",[31,112627,112262],{}," 为什么是杆子角速度",[103,112630,112631],{},"因为这个模型里：",[24,112633,112636],{"className":112634,"code":112635,"language":6838,"meta":29},[6836],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[31,112637,112635],{"__ignoreMap":29},[103,112639,111110],{},[24,112641,112644],{"className":112642,"code":112643,"language":6838,"meta":29},[6836],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[31,112645,112643],{"__ignoreMap":29},[19,112647,112649],{"id":112648},"reward-变成负数是否错误","reward 变成负数是否错误",[103,112651,112652],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112654,103970],{"id":103969},[103,112656,112657],{},"一个控制任务通常包含：",[1772,112659,112660,112663,112671,112676,112679],{},[1775,112661,112662],{},"模型：Cartpole 的 body、joint、actuator。",[1775,112664,112665,112666,2021,112668,112670],{},"观测：从 ",[31,112667,105393],{},[31,112669,105723],{}," 里取状态。",[1775,112672,112673,112674,30031],{},"动作：写入 ",[31,112675,102439],{},[1775,112677,112678],{},"奖励：根据任务目标打分。",[1775,112680,112681],{},"循环：obs -> action -> step -> reward。",[103,112683,112684],{},"这就是后面 Gymnasium 环境的基本骨架。",[1711,112686,105649],{},{"title":29,"searchDepth":165,"depth":165,"links":112688},[112689,112690,112691,112696,112700,112701,112702,112710],{"id":102009,"depth":165,"text":102010},{"id":102132,"depth":165,"text":102133},{"id":102407,"depth":165,"text":102408,"children":112692},[112693,112694,112695],{"id":111063,"depth":171,"text":111064},{"id":111128,"depth":171,"text":111129},{"id":111144,"depth":171,"text":111145},{"id":102615,"depth":165,"text":102616,"children":112697},[112698,112699],{"id":102935,"depth":171,"text":102935},{"id":103071,"depth":171,"text":103071},{"id":103678,"depth":165,"text":103679},{"id":103710,"depth":165,"text":103711},{"id":103815,"depth":165,"text":103816,"children":112703},[112704,112705,112706,112707,112709],{"id":112568,"depth":171,"text":112568},{"id":112579,"depth":171,"text":112579},{"id":112612,"depth":171,"text":112612},{"id":112625,"depth":171,"text":112708},"obs[3] 为什么是杆子角速度",{"id":112648,"depth":171,"text":112649},{"id":103969,"depth":165,"text":103970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110799,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112717,"title":112718,"body":112719,"description":29,"extension":1745,"meta":114733,"navigation":1474,"path":114734,"seo":114735,"stem":114736,"__hash__":114737},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112720,"toc":114709},[112721,112724,112726,112729,112731,112748,112751,112754,112760,112763,112765,112767,112791,112793,112807,112809,112850,112852,112870,112872,112875,112881,112884,112912,112916,112922,112947,112950,112981,112988,112991,112994,113000,113003,113009,113012,113018,113022,113025,113050,113053,113055,113815,113817,113829,113831,113842,113844,113847,113864,113867,113869,113880,113883,113885,113931,113934,113947,113950,114032,114035,114037,114053,114063,114076,114079,114118,114128,114139,114149,114162,114165,114194,114197,114207,114210,114216,114233,114244,114246,114252,114269,114280,114301,114304,114316,114319,114340,114343,114351,114359,114376,114379,114448,114455,114463,114466,114479,114486,114488,114491,114497,114500,114503,114509,114515,114517,114557,114559,114565,114574,114577,114579,114599,114602,114605,114611,114615,114617,114644,114647,114650,114677,114683,114686,114689,114691,114694,114697,114703,114706],[10,112722,112718],{"id":112723},"_7控制任务reacher-机械臂到达目标",[14,112725,102010],{"id":102009},[103,112727,112728],{},"本章搭建一个二维两关节 reacher 任务。",[103,112730,105694],{},[1772,112732,112733,112736,112739,112742,112745],{},[1775,112734,112735],{},"两个 hinge joint",[1775,112737,112738],{},"两个 motor actuator",[1775,112740,112741],{},"site 作为末端点和目标点",[1775,112743,112744],{},"根据末端和目标距离设计 reward",[1775,112746,112747],{},"构造机械臂任务的基本形式",[103,112749,112750],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[103,112752,112753],{},"Reacher 任务可以理解为：",[24,112755,112758],{"className":112756,"code":112757,"language":6838,"meta":29},[6836],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[31,112759,112757],{"__ignoreMap":29},[103,112761,112762],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112764,102133],{"id":102132},[103,112766,102136],{},[24,112768,112769],{"className":25467,"code":105751,"language":25469,"meta":29,"style":29},[31,112770,112771],{"__ignoreMap":29},[34,112772,112773,112775,112777,112779,112781,112783,112785,112787,112789],{"class":36,"line":37},[34,112774,26222],{"class":3617},[34,112776,27961],{"class":504},[34,112778,25479],{"class":504},[34,112780,28046],{"class":44},[34,112782,105766],{"class":504},[34,112784,102161],{"class":504},[34,112786,103864],{"class":504},[34,112788,102177],{"class":504},[34,112790,105775],{"class":504},[103,112792,104182],{},[24,112794,112795],{"className":25467,"code":102282,"language":25469,"meta":29,"style":29},[31,112796,112797],{"__ignoreMap":29},[34,112798,112799,112801,112803,112805],{"class":36,"line":37},[34,112800,25476],{"class":3617},[34,112802,25479],{"class":504},[34,112804,102293],{"class":504},[34,112806,102296],{"class":504},[103,112808,104199],{},[24,112810,112812],{"className":25467,"code":112811,"language":25469,"meta":29,"style":29},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[31,112813,112814,112831,112840],{"__ignoreMap":29},[34,112815,112816,112818,112820,112822,112825,112827,112829],{"class":36,"line":37},[34,112817,31976],{"class":3617},[34,112819,30822],{"class":504},[34,112821,26761],{"class":44},[34,112823,112824],{"class":504}," mujoco-reacher",[34,112826,102338],{"class":504},[34,112828,102341],{"class":44},[34,112830,102344],{"class":44},[34,112832,112833,112835,112837],{"class":36,"line":165},[34,112834,31976],{"class":3617},[34,112836,102351],{"class":504},[34,112838,112839],{"class":504}," mujoco-reacher\n",[34,112841,112842,112844,112846,112848],{"class":36,"line":171},[34,112843,25476],{"class":3617},[34,112845,25479],{"class":504},[34,112847,102293],{"class":504},[34,112849,102296],{"class":504},[103,112851,102367],{},[1772,112853,112854,112857,112860],{},[1775,112855,112856],{},"本章使用低维状态，不使用图像输入。",[1775,112858,112859],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[1775,112861,112862,112863,2021,112865,2021,112867,112869],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[31,112864,105393],{},[31,112866,105723],{},[31,112868,105043],{}," 的方法一致。",[14,112871,102408],{"id":102407},[103,112873,112874],{},"Reacher 任务核心:",[24,112876,112879],{"className":112877,"code":112878,"language":6838,"meta":29},[6836],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[31,112880,112878],{"__ignoreMap":29},[103,112882,112883],{},"读取 site 世界坐标:",[24,112885,112887],{"className":26,"code":112886,"language":28,"meta":29,"style":29},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[31,112888,112889,112902],{"__ignoreMap":29},[34,112890,112891,112893,112895,112897,112900],{"class":36,"line":37},[34,112892,104997],{"class":40},[34,112894,221],{"class":55},[34,112896,104768],{"class":40},[34,112898,112899],{"class":504},"\"tip\"",[34,112901,101],{"class":40},[34,112903,112904,112907,112909],{"class":36,"line":165},[34,112905,112906],{"class":40},"tip_pos ",[34,112908,221],{"class":55},[34,112910,112911],{"class":40}," data.site_xpos[site_id]\n",[19,112913,112915],{"id":112914},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[103,112917,112918,112919,112921],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[31,112920,105393],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[24,112923,112925],{"className":26,"code":112924,"language":28,"meta":29,"style":29},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[31,112926,112927,112937],{"__ignoreMap":29},[34,112928,112929,112932,112934],{"class":36,"line":37},[34,112930,112931],{"class":40},"tip ",[34,112933,221],{"class":55},[34,112935,112936],{"class":40}," data.site_xpos[tip_site_id]\n",[34,112938,112939,112942,112944],{"class":36,"line":165},[34,112940,112941],{"class":40},"target ",[34,112943,221],{"class":55},[34,112945,112946],{"class":40}," data.site_xpos[target_site_id]\n",[103,112948,112949],{},"这样 reward 就很容易写：",[24,112951,112953],{"className":26,"code":112952,"language":28,"meta":29,"style":29},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[31,112954,112955,112970],{"__ignoreMap":29},[34,112956,112957,112960,112962,112965,112967],{"class":36,"line":37},[34,112958,112959],{"class":40},"dist ",[34,112961,221],{"class":55},[34,112963,112964],{"class":40}," np.linalg.norm(tip ",[34,112966,2327],{"class":55},[34,112968,112969],{"class":40}," target)\n",[34,112971,112972,112974,112976,112978],{"class":36,"line":165},[34,112973,112368],{"class":40},[34,112975,221],{"class":55},[34,112977,53910],{"class":55},[34,112979,112980],{"class":40},"dist\n",[103,112982,112983,112984,112987],{},"距离越小，",[31,112985,112986],{},"-dist"," 越接近 0，奖励越高。",[19,112989,112990],{"id":112990},"两关节机械臂的状态",[103,112992,112993],{},"这个模型有两个 hinge joint：",[24,112995,112998],{"className":112996,"code":112997,"language":6838,"meta":29},[6836],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[31,112999,112997],{"__ignoreMap":29},[103,113001,113002],{},"再加上末端和目标位置：",[24,113004,113007],{"className":113005,"code":113006,"language":6838,"meta":29},[6836],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[31,113008,113006],{"__ignoreMap":29},[103,113010,113011],{},"总维度：",[24,113013,113016],{"className":113014,"code":113015,"language":6838,"meta":29},[6836],"2 + 2 + 3 + 3 = 10\n",[31,113017,113015],{"__ignoreMap":29},[19,113019,113021],{"id":113020},"为什么-gravity-是-0","为什么 gravity 是 0",[103,113023,113024],{},"本章把重力设为：",[24,113026,113028],{"className":54706,"code":113027,"language":54708,"meta":29,"style":29},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[31,113029,113030],{"__ignoreMap":29},[34,113031,113032,113034,113036,113038,113040,113042,113044,113046,113048],{"class":36,"line":37},[34,113033,2701],{"class":40},[34,113035,70805],{"class":52939},[34,113037,102557],{"class":3617},[34,113039,221],{"class":40},[34,113041,102562],{"class":504},[34,113043,102565],{"class":3617},[34,113045,221],{"class":40},[34,113047,105134],{"class":504},[34,113049,102507],{"class":40},[103,113051,113052],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113054,102616],{"id":102615},[24,113056,113058],{"className":26,"code":113057,"language":28,"meta":29,"style":29},"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",[31,113059,113060,113066,113076,113080,113084,113092,113097,113102,113106,113110,113115,113120,113124,113129,113134,113139,113143,113148,113153,113158,113163,113167,113171,113175,113179,113183,113188,113193,113197,113201,113205,113209,113213,113228,113237,113249,113272,113279,113283,113287,113297,113311,113325,113332,113336,113340,113354,113366,113378,113391,113406,113423,113427,113431,113443,113455,113463,113471,113475,113491,113496,113509,113522,113537,113541,113576,113608,113612,113616,113625,113629,113645,113655,113666,113682,113698,113714,113730,113734,113752,113772,113791,113795,113799,113811],{"__ignoreMap":29},[34,113061,113062,113064],{"class":36,"line":37},[34,113063,32036],{"class":55},[34,113065,102664],{"class":40},[34,113067,113068,113070,113072,113074],{"class":36,"line":165},[34,113069,32036],{"class":55},[34,113071,33022],{"class":40},[34,113073,33025],{"class":55},[34,113075,33028],{"class":40},[34,113077,113078],{"class":36,"line":171},[34,113079,1475],{"emptyLinePlaceholder":1474},[34,113081,113082],{"class":36,"line":182},[34,113083,1475],{"emptyLinePlaceholder":1474},[34,113085,113086,113088,113090],{"class":36,"line":188},[34,113087,102677],{"class":44},[34,113089,56],{"class":55},[34,113091,102682],{"class":504},[34,113093,113094],{"class":36,"line":518},[34,113095,113096],{"class":504},"\u003Cmujoco model=\"two_link_reacher\">\n",[34,113098,113099],{"class":36,"line":524},[34,113100,113101],{"class":504},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[34,113103,113104],{"class":36,"line":530},[34,113105,1475],{"emptyLinePlaceholder":1474},[34,113107,113108],{"class":36,"line":624},[34,113109,102701],{"class":504},[34,113111,113112],{"class":36,"line":630},[34,113113,113114],{"class":504},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[34,113116,113117],{"class":36,"line":636},[34,113118,113119],{"class":504},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[34,113121,113122],{"class":36,"line":1513},[34,113123,1475],{"emptyLinePlaceholder":1474},[34,113125,113126],{"class":36,"line":1519},[34,113127,113128],{"class":504},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[34,113130,113131],{"class":36,"line":3283},[34,113132,113133],{"class":504},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,113135,113136],{"class":36,"line":3297},[34,113137,113138],{"class":504},"      \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",[34,113140,113141],{"class":36,"line":3302},[34,113142,1475],{"emptyLinePlaceholder":1474},[34,113144,113145],{"class":36,"line":3308},[34,113146,113147],{"class":504},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[34,113149,113150],{"class":36,"line":3328},[34,113151,113152],{"class":504},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,113154,113155],{"class":36,"line":3333},[34,113156,113157],{"class":504},"        \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",[34,113159,113160],{"class":36,"line":3347},[34,113161,113162],{"class":504},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[34,113164,113165],{"class":36,"line":3352},[34,113166,107801],{"class":504},[34,113168,113169],{"class":36,"line":3381},[34,113170,102730],{"class":504},[34,113172,113173],{"class":36,"line":3386},[34,113174,102735],{"class":504},[34,113176,113177],{"class":36,"line":3403},[34,113178,1475],{"emptyLinePlaceholder":1474},[34,113180,113181],{"class":36,"line":3408},[34,113182,107818],{"class":504},[34,113184,113185],{"class":36,"line":3413},[34,113186,113187],{"class":504},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[34,113189,113190],{"class":36,"line":3418},[34,113191,113192],{"class":504},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[34,113194,113195],{"class":36,"line":3432},[34,113196,107828],{"class":504},[34,113198,113199],{"class":36,"line":3437},[34,113200,102740],{"class":504},[34,113202,113203],{"class":36,"line":4230},[34,113204,505],{"class":504},[34,113206,113207],{"class":36,"line":4244},[34,113208,1475],{"emptyLinePlaceholder":1474},[34,113210,113211],{"class":36,"line":4252},[34,113212,1475],{"emptyLinePlaceholder":1474},[34,113214,113215,113217,113220,113223,113225],{"class":36,"line":4257},[34,113216,33588],{"class":55},[34,113218,113219],{"class":3617}," site_position",[34,113221,113222],{"class":40},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[34,113224,2961],{"class":44},[34,113226,113227],{"class":40},") -> np.ndarray:\n",[34,113229,113230,113232,113234],{"class":36,"line":4263},[34,113231,104763],{"class":40},[34,113233,221],{"class":55},[34,113235,113236],{"class":40}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[34,113238,113239,113241,113243,113245,113247],{"class":36,"line":4269},[34,113240,4754],{"class":55},[34,113242,104812],{"class":40},[34,113244,2701],{"class":55},[34,113246,98],{"class":44},[34,113248,5392],{"class":40},[34,113250,113251,113253,113255,113257,113259,113262,113264,113266,113268,113270],{"class":36,"line":4274},[34,113252,104795],{"class":55},[34,113254,104798],{"class":44},[34,113256,286],{"class":40},[34,113258,1867],{"class":55},[34,113260,113261],{"class":504},"\"site not found: ",[34,113263,2687],{"class":44},[34,113265,81447],{"class":40},[34,113267,2737],{"class":44},[34,113269,2058],{"class":504},[34,113271,101],{"class":40},[34,113273,113274,113276],{"class":36,"line":9598},[34,113275,5743],{"class":55},[34,113277,113278],{"class":40}," data.site_xpos[site_id].copy()\n",[34,113280,113281],{"class":36,"line":9622},[34,113282,1475],{"emptyLinePlaceholder":1474},[34,113284,113285],{"class":36,"line":9627},[34,113286,1475],{"emptyLinePlaceholder":1474},[34,113288,113289,113291,113294],{"class":36,"line":9633},[34,113290,33588],{"class":55},[34,113292,113293],{"class":3617}," get_obs",[34,113295,113296],{"class":40},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[34,113298,113299,113302,113304,113307,113309],{"class":36,"line":9660},[34,113300,113301],{"class":40},"    tip ",[34,113303,221],{"class":55},[34,113305,113306],{"class":40}," site_position(model, data, ",[34,113308,112899],{"class":504},[34,113310,101],{"class":40},[34,113312,113313,113316,113318,113320,113323],{"class":36,"line":9665},[34,113314,113315],{"class":40},"    target ",[34,113317,221],{"class":55},[34,113319,113306],{"class":40},[34,113321,113322],{"class":504},"\"target\"",[34,113324,101],{"class":40},[34,113326,113327,113329],{"class":36,"line":9671},[34,113328,5743],{"class":55},[34,113330,113331],{"class":40}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[34,113333,113334],{"class":36,"line":9683},[34,113335,1475],{"emptyLinePlaceholder":1474},[34,113337,113338],{"class":36,"line":9695},[34,113339,1475],{"emptyLinePlaceholder":1474},[34,113341,113342,113344,113347,113350,113352],{"class":36,"line":9707},[34,113343,33588],{"class":55},[34,113345,113346],{"class":3617}," reward",[34,113348,113349],{"class":40},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[34,113351,989],{"class":44},[34,113353,5392],{"class":40},[34,113355,113356,113358,113360,113362,113364],{"class":36,"line":11366},[34,113357,113301],{"class":40},[34,113359,221],{"class":55},[34,113361,113306],{"class":40},[34,113363,112899],{"class":504},[34,113365,101],{"class":40},[34,113367,113368,113370,113372,113374,113376],{"class":36,"line":11391},[34,113369,113315],{"class":40},[34,113371,221],{"class":55},[34,113373,113306],{"class":40},[34,113375,113322],{"class":504},[34,113377,101],{"class":40},[34,113379,113380,113383,113385,113387,113389],{"class":36,"line":11414},[34,113381,113382],{"class":40},"    dist ",[34,113384,221],{"class":55},[34,113386,112964],{"class":40},[34,113388,2327],{"class":55},[34,113390,112969],{"class":40},[34,113392,113393,113396,113398,113401,113403],{"class":36,"line":11438},[34,113394,113395],{"class":40},"    control_cost ",[34,113397,221],{"class":55},[34,113399,113400],{"class":44}," 0.01",[34,113402,8168],{"class":55},[34,113404,113405],{"class":40}," np.sum(np.square(data.ctrl))\n",[34,113407,113408,113410,113412,113414,113416,113418,113420],{"class":36,"line":11443},[34,113409,5743],{"class":55},[34,113411,111160],{"class":44},[34,113413,286],{"class":40},[34,113415,2327],{"class":55},[34,113417,112959],{"class":40},[34,113419,2327],{"class":55},[34,113421,113422],{"class":40}," control_cost)\n",[34,113424,113425],{"class":36,"line":11448},[34,113426,1475],{"emptyLinePlaceholder":1474},[34,113428,113429],{"class":36,"line":11453},[34,113430,1475],{"emptyLinePlaceholder":1474},[34,113432,113433,113435,113437,113439,113441],{"class":36,"line":11462},[34,113434,33588],{"class":55},[34,113436,3627],{"class":3617},[34,113438,102761],{"class":40},[34,113440,492],{"class":44},[34,113442,5392],{"class":40},[34,113444,113445,113447,113449,113451,113453],{"class":36,"line":11467},[34,113446,102770],{"class":40},[34,113448,221],{"class":55},[34,113450,102775],{"class":40},[34,113452,102677],{"class":44},[34,113454,101],{"class":40},[34,113456,113457,113459,113461],{"class":36,"line":11473},[34,113458,102784],{"class":40},[34,113460,221],{"class":55},[34,113462,102789],{"class":40},[34,113464,113465,113467,113469],{"class":36,"line":11494},[34,113466,111516],{"class":40},[34,113468,221],{"class":55},[34,113470,106124],{"class":44},[34,113472,113473],{"class":36,"line":11500},[34,113474,1475],{"emptyLinePlaceholder":1474},[34,113476,113477,113479,113481,113483,113485,113487,113489],{"class":36,"line":11514},[34,113478,4854],{"class":55},[34,113480,33257],{"class":40},[34,113482,27689],{"class":55},[34,113484,34084],{"class":44},[34,113486,286],{"class":40},[34,113488,66713],{"class":44},[34,113490,32428],{"class":40},[34,113492,113493],{"class":36,"line":11520},[34,113494,113495],{"class":40},"        mujoco.mj_forward(model, data)\n",[34,113497,113498,113501,113503,113505,113507],{"class":36,"line":11547},[34,113499,113500],{"class":40},"        tip ",[34,113502,221],{"class":55},[34,113504,113306],{"class":40},[34,113506,112899],{"class":504},[34,113508,101],{"class":40},[34,113510,113511,113514,113516,113518,113520],{"class":36,"line":11556},[34,113512,113513],{"class":40},"        target ",[34,113515,221],{"class":55},[34,113517,113306],{"class":40},[34,113519,113322],{"class":504},[34,113521,101],{"class":40},[34,113523,113524,113527,113529,113532,113534],{"class":36,"line":11562},[34,113525,113526],{"class":40},"        error ",[34,113528,221],{"class":55},[34,113530,113531],{"class":40}," target ",[34,113533,2327],{"class":55},[34,113535,113536],{"class":40}," tip\n",[34,113538,113539],{"class":36,"line":11570},[34,113540,1475],{"emptyLinePlaceholder":1474},[34,113542,113543,113545,113547,113549,113551,113554,113556,113558,113561,113563,113566,113568,113570,113572,113574],{"class":36,"line":11575},[34,113544,107980],{"class":40},[34,113546,177],{"class":44},[34,113548,6095],{"class":40},[34,113550,221],{"class":55},[34,113552,113553],{"class":40}," np.clip(",[34,113555,106623],{"class":44},[34,113557,8168],{"class":55},[34,113559,113560],{"class":40}," error[",[34,113562,332],{"class":44},[34,113564,113565],{"class":40},"], ",[34,113567,2327],{"class":55},[34,113569,103766],{"class":44},[34,113571,48],{"class":40},[34,113573,103766],{"class":44},[34,113575,101],{"class":40},[34,113577,113578,113580,113582,113584,113586,113588,113590,113592,113594,113596,113598,113600,113602,113604,113606],{"class":36,"line":18250},[34,113579,107980],{"class":40},[34,113581,394],{"class":44},[34,113583,6095],{"class":40},[34,113585,221],{"class":55},[34,113587,113553],{"class":40},[34,113589,106623],{"class":44},[34,113591,8168],{"class":55},[34,113593,113560],{"class":40},[34,113595,177],{"class":44},[34,113597,113565],{"class":40},[34,113599,2327],{"class":55},[34,113601,103766],{"class":44},[34,113603,48],{"class":40},[34,113605,103766],{"class":44},[34,113607,101],{"class":40},[34,113609,113610],{"class":36,"line":18256},[34,113611,1475],{"emptyLinePlaceholder":1474},[34,113613,113614],{"class":36,"line":18279},[34,113615,102879],{"class":40},[34,113617,113618,113620,113622],{"class":36,"line":18285},[34,113619,111660],{"class":40},[34,113621,11127],{"class":55},[34,113623,113624],{"class":40}," reward(model, data)\n",[34,113626,113627],{"class":36,"line":18308},[34,113628,1475],{"emptyLinePlaceholder":1474},[34,113630,113631,113633,113635,113637,113639,113641,113643],{"class":36,"line":18322},[34,113632,4150],{"class":55},[34,113634,33257],{"class":40},[34,113636,2131],{"class":55},[34,113638,7404],{"class":44},[34,113640,102922],{"class":55},[34,113642,98],{"class":44},[34,113644,5392],{"class":40},[34,113646,113647,113650,113652],{"class":36,"line":18342},[34,113648,113649],{"class":40},"            obs ",[34,113651,221],{"class":55},[34,113653,113654],{"class":40}," get_obs(model, data)\n",[34,113656,113657,113659,113661,113663],{"class":36,"line":18348},[34,113658,36291],{"class":44},[34,113660,286],{"class":40},[34,113662,111694],{"class":504},[34,113664,113665],{"class":40},", step)\n",[34,113667,113668,113670,113672,113675,113678,113680],{"class":36,"line":18359},[34,113669,36291],{"class":44},[34,113671,286],{"class":40},[34,113673,113674],{"class":504},"\"  tip:\"",[34,113676,113677],{"class":40},", np.round(tip, ",[34,113679,337],{"class":44},[34,113681,296],{"class":40},[34,113683,113684,113686,113688,113691,113694,113696],{"class":36,"line":18382},[34,113685,36291],{"class":44},[34,113687,286],{"class":40},[34,113689,113690],{"class":504},"\"  target:\"",[34,113692,113693],{"class":40},", np.round(target, ",[34,113695,337],{"class":44},[34,113697,296],{"class":40},[34,113699,113700,113702,113704,113707,113710,113712],{"class":36,"line":18404},[34,113701,36291],{"class":44},[34,113703,286],{"class":40},[34,113705,113706],{"class":504},"\"  ctrl:\"",[34,113708,113709],{"class":40},", np.round(data.ctrl.copy(), ",[34,113711,337],{"class":44},[34,113713,296],{"class":40},[34,113715,113716,113718,113720,113723,113726,113728],{"class":36,"line":18409},[34,113717,36291],{"class":44},[34,113719,286],{"class":40},[34,113721,113722],{"class":504},"\"  obs_dim:\"",[34,113724,113725],{"class":40},", obs.shape[",[34,113727,177],{"class":44},[34,113729,1077],{"class":40},[34,113731,113732],{"class":36,"line":18415},[34,113733,1475],{"emptyLinePlaceholder":1474},[34,113735,113736,113738,113740,113742,113744,113746,113748,113750],{"class":36,"line":18429},[34,113737,32941],{"class":44},[34,113739,286],{"class":40},[34,113741,111739],{"class":504},[34,113743,48],{"class":40},[34,113745,33659],{"class":44},[34,113747,111746],{"class":40},[34,113749,337],{"class":44},[34,113751,296],{"class":40},[34,113753,113754,113756,113758,113761,113764,113766,113768,113770],{"class":36,"line":18442},[34,113755,32941],{"class":44},[34,113757,286],{"class":40},[34,113759,113760],{"class":504},"\"final tip:\"",[34,113762,113763],{"class":40},", np.round(site_position(model, data, ",[34,113765,112899],{"class":504},[34,113767,111708],{"class":40},[34,113769,337],{"class":44},[34,113771,296],{"class":40},[34,113773,113774,113776,113778,113781,113783,113785,113787,113789],{"class":36,"line":18447},[34,113775,32941],{"class":44},[34,113777,286],{"class":40},[34,113779,113780],{"class":504},"\"target:\"",[34,113782,113763],{"class":40},[34,113784,113322],{"class":504},[34,113786,111708],{"class":40},[34,113788,337],{"class":44},[34,113790,296],{"class":40},[34,113792,113793],{"class":36,"line":18461},[34,113794,1475],{"emptyLinePlaceholder":1474},[34,113796,113797],{"class":36,"line":18466},[34,113798,1475],{"emptyLinePlaceholder":1474},[34,113800,113801,113803,113805,113807,113809],{"class":36,"line":18472},[34,113802,3189],{"class":55},[34,113804,32862],{"class":44},[34,113806,102922],{"class":55},[34,113808,102925],{"class":504},[34,113810,5392],{"class":40},[34,113812,113813],{"class":36,"line":18477},[34,113814,102932],{"class":40},[103,113816,104933],{},[24,113818,113820],{"className":25467,"code":113819,"language":25469,"meta":29,"style":29},"touch ch7_reacher.py\n",[31,113821,113822],{"__ignoreMap":29},[34,113823,113824,113826],{"class":36,"line":37},[34,113825,102646],{"class":3617},[34,113827,113828],{"class":504}," ch7_reacher.py\n",[103,113830,111807],{},[24,113832,113834],{"className":25467,"code":113833,"language":25469,"meta":29,"style":29},"python ch7_reacher.py\n",[31,113835,113836],{"__ignoreMap":29},[34,113837,113838,113840],{"class":36,"line":37},[34,113839,28],{"class":3617},[34,113841,113828],{"class":504},[19,113843,102935],{"id":102935},[103,113845,113846],{},"读取 site 坐标：",[24,113848,113850],{"className":26,"code":113849,"language":28,"meta":29,"style":29},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[31,113851,113852],{"__ignoreMap":29},[34,113853,113854,113856,113858,113860,113862],{"class":36,"line":37},[34,113855,33588],{"class":55},[34,113857,113219],{"class":3617},[34,113859,113222],{"class":40},[34,113861,2961],{"class":44},[34,113863,113227],{"class":40},[103,113865,113866],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[103,113868,111823],{},[24,113870,113872],{"className":26,"code":113871,"language":28,"meta":29,"style":29},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[31,113873,113874],{"__ignoreMap":29},[34,113875,113876,113878],{"class":36,"line":37},[34,113877,18692],{"class":55},[34,113879,113331],{"class":40},[103,113881,113882],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[103,113884,111148],{},[24,113886,113888],{"className":26,"code":113887,"language":28,"meta":29,"style":29},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[31,113889,113890,113902,113915],{"__ignoreMap":29},[34,113891,113892,113894,113896,113898,113900],{"class":36,"line":37},[34,113893,112959],{"class":40},[34,113895,221],{"class":55},[34,113897,112964],{"class":40},[34,113899,2327],{"class":55},[34,113901,112969],{"class":40},[34,113903,113904,113907,113909,113911,113913],{"class":36,"line":165},[34,113905,113906],{"class":40},"control_cost ",[34,113908,221],{"class":55},[34,113910,113400],{"class":44},[34,113912,8168],{"class":55},[34,113914,113405],{"class":40},[34,113916,113917,113919,113921,113923,113925,113927,113929],{"class":36,"line":171},[34,113918,18692],{"class":55},[34,113920,111160],{"class":44},[34,113922,286],{"class":40},[34,113924,2327],{"class":55},[34,113926,112959],{"class":40},[34,113928,2327],{"class":55},[34,113930,113422],{"class":40},[103,113932,113933],{},"奖励由两部分组成：",[1772,113935,113936,113941],{},[1775,113937,113938,113940],{},[31,113939,112986],{},"：末端离目标越远，奖励越低。",[1775,113942,113943,113946],{},[31,113944,113945],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[103,113948,113949],{},"简单控制器：",[24,113951,113953],{"className":26,"code":113952,"language":28,"meta":29,"style":29},"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",[31,113954,113955,113968,114000],{"__ignoreMap":29},[34,113956,113957,113960,113962,113964,113966],{"class":36,"line":37},[34,113958,113959],{"class":40},"error ",[34,113961,221],{"class":55},[34,113963,113531],{"class":40},[34,113965,2327],{"class":55},[34,113967,113536],{"class":40},[34,113969,113970,113972,113974,113976,113978,113980,113982,113984,113986,113988,113990,113992,113994,113996,113998],{"class":36,"line":165},[34,113971,107234],{"class":40},[34,113973,177],{"class":44},[34,113975,6095],{"class":40},[34,113977,221],{"class":55},[34,113979,113553],{"class":40},[34,113981,106623],{"class":44},[34,113983,8168],{"class":55},[34,113985,113560],{"class":40},[34,113987,332],{"class":44},[34,113989,113565],{"class":40},[34,113991,2327],{"class":55},[34,113993,103766],{"class":44},[34,113995,48],{"class":40},[34,113997,103766],{"class":44},[34,113999,101],{"class":40},[34,114001,114002,114004,114006,114008,114010,114012,114014,114016,114018,114020,114022,114024,114026,114028,114030],{"class":36,"line":171},[34,114003,107234],{"class":40},[34,114005,394],{"class":44},[34,114007,6095],{"class":40},[34,114009,221],{"class":55},[34,114011,113553],{"class":40},[34,114013,106623],{"class":44},[34,114015,8168],{"class":55},[34,114017,113560],{"class":40},[34,114019,177],{"class":44},[34,114021,113565],{"class":40},[34,114023,2327],{"class":55},[34,114025,103766],{"class":44},[34,114027,48],{"class":40},[34,114029,103766],{"class":44},[34,114031,101],{"class":40},[103,114033,114034],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[19,114036,103071],{"id":103071},[24,114038,114039],{"className":26,"code":113849,"language":28,"meta":29,"style":29},[31,114040,114041],{"__ignoreMap":29},[34,114042,114043,114045,114047,114049,114051],{"class":36,"line":37},[34,114044,33588],{"class":55},[34,114046,113219],{"class":3617},[34,114048,113222],{"class":40},[34,114050,2961],{"class":44},[34,114052,113227],{"class":40},[103,114054,114055,114056,114058,114059,84176,114061,30031],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[31,114057,81447],{}," 是 site 的名字，比如 ",[31,114060,112899],{},[31,114062,113322],{},[24,114064,114066],{"className":26,"code":114065,"language":28,"meta":29,"style":29},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[31,114067,114068],{"__ignoreMap":29},[34,114069,114070,114072,114074],{"class":36,"line":37},[34,114071,104997],{"class":40},[34,114073,221],{"class":55},[34,114075,113236],{"class":40},[103,114077,114078],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[24,114080,114082],{"className":26,"code":114081,"language":28,"meta":29,"style":29},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[31,114083,114084,114096],{"__ignoreMap":29},[34,114085,114086,114088,114090,114092,114094],{"class":36,"line":37},[34,114087,3189],{"class":55},[34,114089,104812],{"class":40},[34,114091,2701],{"class":55},[34,114093,98],{"class":44},[34,114095,5392],{"class":40},[34,114097,114098,114100,114102,114104,114106,114108,114110,114112,114114,114116],{"class":36,"line":165},[34,114099,105258],{"class":55},[34,114101,104798],{"class":44},[34,114103,286],{"class":40},[34,114105,1867],{"class":55},[34,114107,113261],{"class":504},[34,114109,2687],{"class":44},[34,114111,81447],{"class":40},[34,114113,2737],{"class":44},[34,114115,2058],{"class":504},[34,114117,101],{"class":40},[103,114119,114120,114121,114124,114125,114127],{},"如果 site 没找到，就主动报错。",[31,114122,114123],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[31,114126,81447],{}," 的值放进字符串里。",[24,114129,114131],{"className":26,"code":114130,"language":28,"meta":29,"style":29},"return data.site_xpos[site_id].copy()\n",[31,114132,114133],{"__ignoreMap":29},[34,114134,114135,114137],{"class":36,"line":37},[34,114136,18692],{"class":55},[34,114138,113278],{"class":40},[103,114140,114141,114142,114144,114145,114148],{},"返回这个 site 的世界坐标。",[31,114143,105043],{}," 里的每一行都是一个 site 的 ",[31,114146,114147],{},"(x, y, z)"," 坐标。",[24,114150,114152],{"className":26,"code":114151,"language":28,"meta":29,"style":29},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[31,114153,114154],{"__ignoreMap":29},[34,114155,114156,114158,114160],{"class":36,"line":37},[34,114157,33588],{"class":55},[34,114159,113293],{"class":3617},[34,114161,113296],{"class":40},[103,114163,114164],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[24,114166,114168],{"className":26,"code":114167,"language":28,"meta":29,"style":29},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[31,114169,114170,114182],{"__ignoreMap":29},[34,114171,114172,114174,114176,114178,114180],{"class":36,"line":37},[34,114173,112931],{"class":40},[34,114175,221],{"class":55},[34,114177,113306],{"class":40},[34,114179,112899],{"class":504},[34,114181,101],{"class":40},[34,114183,114184,114186,114188,114190,114192],{"class":36,"line":165},[34,114185,112941],{"class":40},[34,114187,221],{"class":55},[34,114189,113306],{"class":40},[34,114191,113322],{"class":504},[34,114193,101],{"class":40},[103,114195,114196],{},"分别读取末端点和目标点的世界坐标。",[24,114198,114199],{"className":26,"code":113871,"language":28,"meta":29,"style":29},[31,114200,114201],{"__ignoreMap":29},[34,114202,114203,114205],{"class":36,"line":37},[34,114204,18692],{"class":55},[34,114206,113331],{"class":40},[103,114208,114209],{},"把四部分拼成一个观测数组：",[24,114211,114214],{"className":114212,"code":114213,"language":6838,"meta":29},[6836],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[31,114215,114213],{"__ignoreMap":29},[24,114217,114219],{"className":26,"code":114218,"language":28,"meta":29,"style":29},"dist = np.linalg.norm(tip - target)\n",[31,114220,114221],{"__ignoreMap":29},[34,114222,114223,114225,114227,114229,114231],{"class":36,"line":37},[34,114224,112959],{"class":40},[34,114226,221],{"class":55},[34,114228,112964],{"class":40},[34,114230,2327],{"class":55},[34,114232,112969],{"class":40},[103,114234,114235,114236,114239,114240,114243],{},"计算 tip 到 target 的距离。",[31,114237,114238],{},"tip - target"," 得到一个三维向量，",[31,114241,114242],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[103,114245,16279],{},[24,114247,114250],{"className":114248,"code":114249,"language":6838,"meta":29},[6836],"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",[31,114251,114249],{"__ignoreMap":29},[24,114253,114255],{"className":26,"code":114254,"language":28,"meta":29,"style":29},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[31,114256,114257],{"__ignoreMap":29},[34,114258,114259,114261,114263,114265,114267],{"class":36,"line":37},[34,114260,113906],{"class":40},[34,114262,221],{"class":55},[34,114264,113400],{"class":44},[34,114266,8168],{"class":55},[34,114268,113405],{"class":40},[103,114270,114271,114272,114275,114276,114279],{},"计算动作惩罚。",[31,114273,114274],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[31,114277,114278],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[24,114281,114283],{"className":26,"code":114282,"language":28,"meta":29,"style":29},"return float(-dist - control_cost)\n",[31,114284,114285],{"__ignoreMap":29},[34,114286,114287,114289,114291,114293,114295,114297,114299],{"class":36,"line":37},[34,114288,18692],{"class":55},[34,114290,111160],{"class":44},[34,114292,286],{"class":40},[34,114294,2327],{"class":55},[34,114296,112959],{"class":40},[34,114298,2327],{"class":55},[34,114300,113422],{"class":40},[103,114302,114303],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[24,114305,114306],{"className":26,"code":112166,"language":28,"meta":29,"style":29},[31,114307,114308],{"__ignoreMap":29},[34,114309,114310,114312,114314],{"class":36,"line":37},[34,114311,112173],{"class":40},[34,114313,221],{"class":55},[34,114315,106124],{"class":44},[103,114317,114318],{},"累计奖励变量，记录整个运行过程的总分。",[24,114320,114322],{"className":26,"code":114321,"language":28,"meta":29,"style":29},"for step in range(500):\n",[31,114323,114324],{"__ignoreMap":29},[34,114325,114326,114328,114330,114332,114334,114336,114338],{"class":36,"line":37},[34,114327,4678],{"class":55},[34,114329,33257],{"class":40},[34,114331,27689],{"class":55},[34,114333,34084],{"class":44},[34,114335,286],{"class":40},[34,114337,66713],{"class":44},[34,114339,32428],{"class":40},[103,114341,114342],{},"运行 500 个控制步。",[24,114344,114345],{"className":26,"code":105906,"language":28,"meta":29,"style":29},[31,114346,114347],{"__ignoreMap":29},[34,114348,114349],{"class":36,"line":37},[34,114350,105906],{"class":40},[103,114352,114353,114354,102381,114356,114358],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[31,114355,104594],{},[31,114357,104597],{}," 是当前状态下的坐标。",[24,114360,114362],{"className":26,"code":114361,"language":28,"meta":29,"style":29},"error = target - tip\n",[31,114363,114364],{"__ignoreMap":29},[34,114365,114366,114368,114370,114372,114374],{"class":36,"line":37},[34,114367,113959],{"class":40},[34,114369,221],{"class":55},[34,114371,113531],{"class":40},[34,114373,2327],{"class":55},[34,114375,113536],{"class":40},[103,114377,114378],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[24,114380,114382],{"className":26,"code":114381,"language":28,"meta":29,"style":29},"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",[31,114383,114384,114416],{"__ignoreMap":29},[34,114385,114386,114388,114390,114392,114394,114396,114398,114400,114402,114404,114406,114408,114410,114412,114414],{"class":36,"line":37},[34,114387,107234],{"class":40},[34,114389,177],{"class":44},[34,114391,6095],{"class":40},[34,114393,221],{"class":55},[34,114395,113553],{"class":40},[34,114397,106623],{"class":44},[34,114399,8168],{"class":55},[34,114401,113560],{"class":40},[34,114403,332],{"class":44},[34,114405,113565],{"class":40},[34,114407,2327],{"class":55},[34,114409,103766],{"class":44},[34,114411,48],{"class":40},[34,114413,103766],{"class":44},[34,114415,101],{"class":40},[34,114417,114418,114420,114422,114424,114426,114428,114430,114432,114434,114436,114438,114440,114442,114444,114446],{"class":36,"line":165},[34,114419,107234],{"class":40},[34,114421,394],{"class":44},[34,114423,6095],{"class":40},[34,114425,221],{"class":55},[34,114427,113553],{"class":40},[34,114429,106623],{"class":44},[34,114431,8168],{"class":55},[34,114433,113560],{"class":40},[34,114435,177],{"class":44},[34,114437,113565],{"class":40},[34,114439,2327],{"class":55},[34,114441,103766],{"class":44},[34,114443,48],{"class":40},[34,114445,103766],{"class":44},[34,114447,101],{"class":40},[103,114449,114450,114451,114454],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[31,114452,114453],{},"error -> ctrl -> step"," 的流程。",[24,114456,114457],{"className":26,"code":105868,"language":28,"meta":29,"style":29},[31,114458,114459],{"__ignoreMap":29},[34,114460,114461],{"class":36,"line":37},[34,114462,105868],{"class":40},[103,114464,114465],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[24,114467,114469],{"className":26,"code":114468,"language":28,"meta":29,"style":29},"obs = get_obs(model, data)\n",[31,114470,114471],{"__ignoreMap":29},[34,114472,114473,114475,114477],{"class":36,"line":37},[34,114474,112217],{"class":40},[34,114476,221],{"class":55},[34,114478,113654],{"class":40},[103,114480,114481,114482,114485],{},"读取最新观测。后面打印 ",[31,114483,114484],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114487,103679],{"id":103678},[103,114489,114490],{},"观测维度为:",[24,114492,114495],{"className":114493,"code":114494,"language":6838,"meta":29},[6836],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[31,114496,114494],{"__ignoreMap":29},[103,114498,114499],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[103,114501,114502],{},"程序每 100 步打印：",[24,114504,114507],{"className":114505,"code":114506,"language":6838,"meta":29},[6836],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[31,114508,114506],{"__ignoreMap":29},[103,114510,114511,114512,114514],{},"如果控制有效，你应该看到最终 ",[31,114513,104594],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114516,103711],{"id":103710},[1772,114518,114519,114522,114525,114531,114537,114544,114554],{},[1775,114520,114521],{},"修改目标点位置。",[1775,114523,114524],{},"重新运行，观察最终 tip 是否变化。",[1775,114526,114527,114528,114530],{},"把 gravity 改成 ",[31,114529,103952],{},"，观察控制是否变差。",[1775,114532,112544,114533,112548,114535,30031],{},[31,114534,103521],{},[31,114536,332],{},[1775,114538,103774,114539,103777,114541,114543],{},[31,114540,111959],{},[31,114542,108670],{},"，观察机械臂是否更难移动。",[1775,114545,103774,114546,84167,114548,103777,114550,114553],{},[31,114547,104597],{},[31,114549,105509],{},[31,114551,114552],{},"0.2 0 0.6","，观察 reward 和 final tip。",[1775,114555,114556],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114558,103816],{"id":103815},[19,114560,114562],{"id":114561},"site-not-found",[31,114563,114564],{},"site not found",[103,114566,114567,114568,102381,114571,30031],{},"检查 XML 中是否有 ",[31,114569,114570],{},"site name=\"tip\"",[31,114572,114573],{},"site name=\"target\"",[19,114575,114576],{"id":114576},"机械臂完全不动",[103,114578,103886],{},[1772,114580,114581,114586,114589,114594],{},[1775,114582,114583,114585],{},[31,114584,103521],{}," 是否为 2",[1775,114587,114588],{},"actuator 是否引用正确 joint",[1775,114590,114591,114593],{},[31,114592,102439],{}," 是否被赋值",[1775,114595,114596,114597],{},"是否执行了 ",[31,114598,102048],{},[19,114600,114601],{"id":114601},"控制效果不好",[103,114603,114604],{},"正常。本章重点不是控制器最优，而是任务结构:",[24,114606,114609],{"className":114607,"code":114608,"language":6838,"meta":29},[6836],"obs → action → mj_step → reward → next_obs\n",[31,114610,114608],{"__ignoreMap":29},[19,114612,114614],{"id":114613},"tip-坐标不变化","tip 坐标不变化",[103,114616,103938],{},[1772,114618,114619,114624,114632,114641],{},[1775,114620,114621,114622,30031],{},"是否每步调用了 ",[31,114623,102048],{},[1775,114625,114626,114627,102381,114629,30031],{},"是否写入了 ",[31,114628,107489],{},[31,114630,114631],{},"data.ctrl[1]",[1775,114633,114634,114635,2021,114638,30031],{},"actuator 是否正确引用 ",[31,114636,114637],{},"joint1",[31,114639,114640],{},"joint2",[1775,114642,114643],{},"控制输入是否太小。",[19,114645,114646],{"id":114646},"目标点不会动",[103,114648,114649],{},"本章的 target 是固定 site：",[24,114651,114653],{"className":54706,"code":114652,"language":54708,"meta":29,"style":29},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[31,114654,114655],{"__ignoreMap":29},[34,114656,114657,114659,114661,114663,114665,114667,114669,114671,114674],{"class":36,"line":37},[34,114658,2701],{"class":40},[34,114660,104573],{"class":52939},[34,114662,16566],{"class":3617},[34,114664,221],{"class":40},[34,114666,113322],{"class":504},[34,114668,102469],{"class":3617},[34,114670,221],{"class":40},[34,114672,114673],{"class":504},"\"0.5 0 0.4\"",[34,114675,114676],{"class":40}," ...\u002F>\n",[103,114678,114679,114680,114682],{},"它直接挂在 ",[31,114681,103204],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[19,114684,114685],{"id":114685},"机械臂不像真实机械臂",[103,114687,114688],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114690,103970],{"id":103969},[103,114692,114693],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[103,114695,114696],{},"核心公式：",[24,114698,114701],{"className":114699,"code":114700,"language":6838,"meta":29},[6836],"distance = ||tip - target||\nreward = -distance - action_cost\n",[31,114702,114700],{"__ignoreMap":29},[103,114704,114705],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1711,114707,114708],{},"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":29,"searchDepth":165,"depth":165,"links":114710},[114711,114712,114713,114718,114722,114723,114724,114732],{"id":102009,"depth":165,"text":102010},{"id":102132,"depth":165,"text":102133},{"id":102407,"depth":165,"text":102408,"children":114714},[114715,114716,114717],{"id":112914,"depth":171,"text":112915},{"id":112990,"depth":171,"text":112990},{"id":113020,"depth":171,"text":113021},{"id":102615,"depth":165,"text":102616,"children":114719},[114720,114721],{"id":102935,"depth":171,"text":102935},{"id":103071,"depth":171,"text":103071},{"id":103678,"depth":165,"text":103679},{"id":103710,"depth":165,"text":103711},{"id":103815,"depth":165,"text":103816,"children":114725},[114726,114727,114728,114729,114730,114731],{"id":114561,"depth":171,"text":114564},{"id":114576,"depth":171,"text":114576},{"id":114601,"depth":171,"text":114601},{"id":114613,"depth":171,"text":114614},{"id":114646,"depth":171,"text":114646},{"id":114685,"depth":171,"text":114685},{"id":103969,"depth":165,"text":103970},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112718,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114739,"title":114740,"body":114741,"description":29,"extension":1745,"meta":118203,"navigation":1474,"path":118204,"seo":118205,"stem":118206,"__hash__":118207},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114742,"toc":118174},[114743,114746,114748,114751,114754,114779,114782,114788,114791,114797,114799,114801,114825,114827,114845,114847,114890,114892,114919,114921,114924,114976,114979,114985,114994,114997,115035,115038,115077,115080,115088,115095,115098,115104,115106,115160,115167,115212,115215,115219,115235,115245,115247,116508,116510,116522,116524,116535,116537,116540,116561,116564,116567,116600,116606,116609,116642,116645,116648,116689,116694,116708,116711,116724,116729,116752,116754,116769,116779,116794,116801,116821,116836,116854,116857,116874,116882,116898,116904,116936,116949,116981,116991,117026,117040,117086,117100,117142,117153,117166,117172,117205,117208,117235,117245,117285,117295,117312,117319,117337,117340,117381,117394,117409,117412,117435,117438,117450,117453,117472,117477,117498,117501,117516,117519,117553,117565,117580,117583,117608,117611,117630,117633,117665,117668,117692,117698,117728,117735,117748,117751,117753,117755,117761,117764,117767,117779,117782,117784,117838,117840,117844,117850,117859,117862,117869,117871,117894,117897,117901,117903,117921,117927,117929,117962,117965,117971,117975,117978,117998,118003,118007,118014,118034,118039,118043,118046,118066,118069,118155,118159,118162,118168,118171],[10,114744,114740],{"id":114745},"_8gymnasium-风格强化学习接口基础",[14,114747,102010],{"id":102009},[103,114749,114750],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[103,114752,114753],{},"你将实现:",[24,114755,114757],{"className":26,"code":114756,"language":28,"meta":29,"style":29},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[31,114758,114759,114769],{"__ignoreMap":29},[34,114760,114761,114764,114766],{"class":36,"line":37},[34,114762,114763],{"class":40},"obs, info ",[34,114765,221],{"class":55},[34,114767,114768],{"class":40}," env.reset()\n",[34,114770,114771,114774,114776],{"class":36,"line":165},[34,114772,114773],{"class":40},"obs, reward, terminated, truncated, info ",[34,114775,221],{"class":55},[34,114777,114778],{"class":40}," env.step(action)\n",[103,114780,114781],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[103,114783,114784,114785,114787],{},"前面章节的代码都是“脚本式”的：在 ",[31,114786,103658],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[103,114789,114790],{},"可以先记住 Gymnasium 环境的核心交互：",[24,114792,114795],{"className":114793,"code":114794,"language":6838,"meta":29},[6836],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[31,114796,114794],{"__ignoreMap":29},[14,114798,102133],{"id":102132},[103,114800,102136],{},[24,114802,114803],{"className":25467,"code":105751,"language":25469,"meta":29,"style":29},[31,114804,114805],{"__ignoreMap":29},[34,114806,114807,114809,114811,114813,114815,114817,114819,114821,114823],{"class":36,"line":37},[34,114808,26222],{"class":3617},[34,114810,27961],{"class":504},[34,114812,25479],{"class":504},[34,114814,28046],{"class":44},[34,114816,105766],{"class":504},[34,114818,102161],{"class":504},[34,114820,103864],{"class":504},[34,114822,102177],{"class":504},[34,114824,105775],{"class":504},[103,114826,104182],{},[24,114828,114830],{"className":25467,"code":114829,"language":25469,"meta":29,"style":29},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[31,114831,114832],{"__ignoreMap":29},[34,114833,114834,114836,114838,114840,114842],{"class":36,"line":37},[34,114835,25476],{"class":3617},[34,114837,25479],{"class":504},[34,114839,102293],{"class":504},[34,114841,109074],{"class":504},[34,114843,114844],{"class":504}," gymnasium\n",[103,114846,104199],{},[24,114848,114850],{"className":25467,"code":114849,"language":25469,"meta":29,"style":29},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[31,114851,114852,114869,114878],{"__ignoreMap":29},[34,114853,114854,114856,114858,114860,114863,114865,114867],{"class":36,"line":37},[34,114855,31976],{"class":3617},[34,114857,30822],{"class":504},[34,114859,26761],{"class":44},[34,114861,114862],{"class":504}," mujoco-gym-api",[34,114864,102338],{"class":504},[34,114866,102341],{"class":44},[34,114868,102344],{"class":44},[34,114870,114871,114873,114875],{"class":36,"line":165},[34,114872,31976],{"class":3617},[34,114874,102351],{"class":504},[34,114876,114877],{"class":504}," mujoco-gym-api\n",[34,114879,114880,114882,114884,114886,114888],{"class":36,"line":171},[34,114881,25476],{"class":3617},[34,114883,25479],{"class":504},[34,114885,102293],{"class":504},[34,114887,109074],{"class":504},[34,114889,114844],{"class":504},[103,114891,102367],{},[1772,114893,114894,114904,114907,114913],{},[1775,114895,114896,114897,114900,114901,30031],{},"本章使用 ",[31,114898,114899],{},"gymnasium","，不是旧版 ",[31,114902,114903],{},"gym",[1775,114905,114906],{},"Gymnasium API 与旧 Gym API 有差异。",[1775,114908,114909,114910,30031],{},"旧 Gym 常见返回值是 4 个: ",[31,114911,114912],{},"obs, reward, done, info",[1775,114914,114915,114916,30031],{},"Gymnasium 返回值是 5 个: ",[31,114917,114918],{},"obs, reward, terminated, truncated, info",[14,114920,102408],{"id":102407},[103,114922,114923],{},"强化学习环境接口包含:",[1948,114925,114926,114935],{},[1951,114927,114928],{},[1954,114929,114930,114933],{},[1957,114931,114932],{"align":25381},"方法",[1957,114934,104059],{"align":25381},[1994,114936,114937,114947,114957,114967],{},[1954,114938,114939,114944],{},[1999,114940,114941],{"align":25381},[31,114942,114943],{},"reset()",[1999,114945,114946],{"align":25381},"重置环境",[1954,114948,114949,114954],{},[1999,114950,114951],{"align":25381},[31,114952,114953],{},"step(action)",[1999,114955,114956],{"align":25381},"执行动作",[1954,114958,114959,114964],{},[1999,114960,114961],{"align":25381},[31,114962,114963],{},"observation_space",[1999,114965,114966],{"align":25381},"观测空间",[1954,114968,114969,114974],{},[1999,114970,114971],{"align":25381},[31,114972,114973],{},"action_space",[1999,114975,25299],{"align":25381},[103,114977,114978],{},"一个最小环境需要完成:",[24,114980,114983],{"className":114981,"code":114982,"language":6838,"meta":29},[6836],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[31,114984,114982],{"__ignoreMap":29},[19,114986,114988,102381,114991,106001],{"id":114987},"terminated-和-truncated-的区别",[31,114989,114990],{},"terminated",[31,114992,114993],{},"truncated",[103,114995,114996],{},"Gymnasium 把“结束”拆成两个概念：",[1948,114998,114999,115009],{},[1951,115000,115001],{},[1954,115002,115003,115005,115007],{},[1957,115004,105937],{"align":25381},[1957,115006,102063],{"align":25381},[1957,115008,22833],{"align":25381},[1994,115010,115011,115023],{},[1954,115012,115013,115017,115020],{},[1999,115014,115015],{"align":25381},[31,115016,114990],{},[1999,115018,115019],{"align":25381},"任务自然结束",[1999,115021,115022],{"align":25381},"机械臂到达目标、机器人摔倒",[1954,115024,115025,115029,115032],{},[1999,115026,115027],{"align":25381},[31,115028,114993],{},[1999,115030,115031],{"align":25381},"因外部限制截断",[1999,115033,115034],{"align":25381},"达到最大步数、时间限制",[103,115036,115037],{},"本章中：",[24,115039,115041],{"className":26,"code":115040,"language":28,"meta":29,"style":29},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[31,115042,115043,115058],{"__ignoreMap":29},[34,115044,115045,115048,115050,115053,115055],{"class":36,"line":37},[34,115046,115047],{"class":40},"terminated ",[34,115049,221],{"class":55},[34,115051,115052],{"class":40}," dist ",[34,115054,2701],{"class":55},[34,115056,115057],{"class":44}," 0.05\n",[34,115059,115060,115063,115065,115067,115070,115072,115074],{"class":36,"line":165},[34,115061,115062],{"class":40},"truncated ",[34,115064,221],{"class":55},[34,115066,40514],{"class":44},[34,115068,115069],{"class":40},".steps ",[34,115071,3364],{"class":55},[34,115073,40514],{"class":44},[34,115075,115076],{"class":40},".max_steps\n",[103,115078,115079],{},"也就是：",[1772,115081,115082,115085],{},[1775,115083,115084],{},"末端距离目标小于 0.05，任务成功结束。",[1775,115086,115087],{},"步数超过上限，episode 被截断。",[19,115089,115091,102381,115093],{"id":115090},"observation_space-和-action_space",[31,115092,114963],{},[31,115094,114973],{},[103,115096,115097],{},"这两个对象告诉算法：",[24,115099,115102],{"className":115100,"code":115101,"language":6838,"meta":29},[6836],"观测长什么样\n动作允许多大\n",[31,115103,115101],{"__ignoreMap":29},[103,115105,16279],{},[24,115107,115109],{"className":26,"code":115108,"language":28,"meta":29,"style":29},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[31,115110,115111],{"__ignoreMap":29},[34,115112,115113,115115,115118,115120,115123,115126,115129,115131,115133,115136,115138,115140,115142,115144,115146,115148,115150,115153,115155,115157],{"class":36,"line":37},[34,115114,32465],{"class":44},[34,115116,115117],{"class":40},".action_space ",[34,115119,221],{"class":55},[34,115121,115122],{"class":40}," spaces.Box(",[34,115124,115125],{"class":51},"low",[34,115127,115128],{"class":55},"=-",[34,115130,103766],{"class":44},[34,115132,48],{"class":40},[34,115134,115135],{"class":51},"high",[34,115137,221],{"class":55},[34,115139,103766],{"class":44},[34,115141,48],{"class":40},[34,115143,784],{"class":51},[34,115145,221],{"class":55},[34,115147,286],{"class":40},[34,115149,332],{"class":44},[34,115151,115152],{"class":40},",), ",[34,115154,52],{"class":51},[34,115156,221],{"class":55},[34,115158,115159],{"class":40},"np.float32)\n",[103,115161,115162,115163,115166],{},"表示动作是 2 维数组，每个值都在 ",[31,115164,115165],{},"[-1, 1]"," 范围内。",[24,115168,115170],{"className":26,"code":115169,"language":28,"meta":29,"style":29},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[31,115171,115172],{"__ignoreMap":29},[34,115173,115174,115176,115179,115181,115183,115185,115187,115190,115192,115194,115196,115198,115200,115202,115204,115206,115208,115210],{"class":36,"line":37},[34,115175,32465],{"class":44},[34,115177,115178],{"class":40},".observation_space ",[34,115180,221],{"class":55},[34,115182,115122],{"class":40},[34,115184,115125],{"class":51},[34,115186,115128],{"class":55},[34,115188,115189],{"class":40},"np.inf, ",[34,115191,115135],{"class":51},[34,115193,221],{"class":55},[34,115195,115189],{"class":40},[34,115197,784],{"class":51},[34,115199,221],{"class":55},[34,115201,286],{"class":40},[34,115203,410],{"class":44},[34,115205,115152],{"class":40},[34,115207,52],{"class":51},[34,115209,221],{"class":55},[34,115211,115159],{"class":40},[103,115213,115214],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[19,115216,115218],{"id":115217},"frame_skip-是什么","frame_skip 是什么",[24,115220,115222],{"className":26,"code":115221,"language":28,"meta":29,"style":29},"self.frame_skip = 5\n",[31,115223,115224],{"__ignoreMap":29},[34,115225,115226,115228,115231,115233],{"class":36,"line":37},[34,115227,32465],{"class":44},[34,115229,115230],{"class":40},".frame_skip ",[34,115232,221],{"class":55},[34,115234,56066],{"class":44},[103,115236,115237,115238,115241,115242,115244],{},"表示外部调用一次 ",[31,115239,115240],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[31,115243,102578],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115246,102616],{"id":102615},[24,115248,115250],{"className":26,"code":115249,"language":28,"meta":29,"style":29},"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",[31,115251,115252,115264,115270,115280,115291,115295,115299,115307,115312,115316,115320,115324,115328,115332,115336,115340,115345,115349,115353,115357,115362,115366,115370,115374,115378,115382,115386,115390,115394,115398,115402,115406,115410,115414,115432,115447,115451,115464,115474,115489,115506,115510,115531,115550,115575,115589,115593,115603,115615,115625,115629,115671,115709,115713,115723,115739,115754,115773,115780,115784,115797,115812,115827,115840,115859,115875,115879,115920,115935,115950,115954,115993,116004,116017,116021,116031,116040,116044,116054,116069,116087,116091,116102,116119,116132,116136,116146,116150,116161,116172,116176,116190,116204,116220,116224,116237,116254,116269,116276,116280,116284,116296,116306,116324,116336,116348,116352,116360,116376,116385,116394,116402,116444,116457,116462,116466,116484,116488,116492,116504],{"__ignoreMap":29},[34,115253,115254,115256,115259,115261],{"class":36,"line":37},[34,115255,32036],{"class":55},[34,115257,115258],{"class":40}," gymnasium ",[34,115260,33025],{"class":55},[34,115262,115263],{"class":40}," gym\n",[34,115265,115266,115268],{"class":36,"line":165},[34,115267,32036],{"class":55},[34,115269,102664],{"class":40},[34,115271,115272,115274,115276,115278],{"class":36,"line":171},[34,115273,32036],{"class":55},[34,115275,33022],{"class":40},[34,115277,33025],{"class":55},[34,115279,33028],{"class":40},[34,115281,115282,115284,115286,115288],{"class":36,"line":182},[34,115283,32379],{"class":55},[34,115285,115258],{"class":40},[34,115287,32036],{"class":55},[34,115289,115290],{"class":40}," spaces\n",[34,115292,115293],{"class":36,"line":188},[34,115294,1475],{"emptyLinePlaceholder":1474},[34,115296,115297],{"class":36,"line":518},[34,115298,1475],{"emptyLinePlaceholder":1474},[34,115300,115301,115303,115305],{"class":36,"line":524},[34,115302,102677],{"class":44},[34,115304,56],{"class":55},[34,115306,102682],{"class":504},[34,115308,115309],{"class":36,"line":530},[34,115310,115311],{"class":504},"\u003Cmujoco model=\"gym_reacher\">\n",[34,115313,115314],{"class":36,"line":624},[34,115315,113101],{"class":504},[34,115317,115318],{"class":36,"line":630},[34,115319,1475],{"emptyLinePlaceholder":1474},[34,115321,115322],{"class":36,"line":636},[34,115323,102701],{"class":504},[34,115325,115326],{"class":36,"line":1513},[34,115327,113119],{"class":504},[34,115329,115330],{"class":36,"line":1519},[34,115331,1475],{"emptyLinePlaceholder":1474},[34,115333,115334],{"class":36,"line":3283},[34,115335,113128],{"class":504},[34,115337,115338],{"class":36,"line":3297},[34,115339,113133],{"class":504},[34,115341,115342],{"class":36,"line":3302},[34,115343,115344],{"class":504},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[34,115346,115347],{"class":36,"line":3308},[34,115348,1475],{"emptyLinePlaceholder":1474},[34,115350,115351],{"class":36,"line":3328},[34,115352,113147],{"class":504},[34,115354,115355],{"class":36,"line":3333},[34,115356,113152],{"class":504},[34,115358,115359],{"class":36,"line":3347},[34,115360,115361],{"class":504},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[34,115363,115364],{"class":36,"line":3352},[34,115365,113162],{"class":504},[34,115367,115368],{"class":36,"line":3381},[34,115369,107801],{"class":504},[34,115371,115372],{"class":36,"line":3386},[34,115373,102730],{"class":504},[34,115375,115376],{"class":36,"line":3403},[34,115377,102735],{"class":504},[34,115379,115380],{"class":36,"line":3408},[34,115381,1475],{"emptyLinePlaceholder":1474},[34,115383,115384],{"class":36,"line":3413},[34,115385,107818],{"class":504},[34,115387,115388],{"class":36,"line":3418},[34,115389,113187],{"class":504},[34,115391,115392],{"class":36,"line":3432},[34,115393,113192],{"class":504},[34,115395,115396],{"class":36,"line":3437},[34,115397,107828],{"class":504},[34,115399,115400],{"class":36,"line":4230},[34,115401,102740],{"class":504},[34,115403,115404],{"class":36,"line":4244},[34,115405,505],{"class":504},[34,115407,115408],{"class":36,"line":4252},[34,115409,1475],{"emptyLinePlaceholder":1474},[34,115411,115412],{"class":36,"line":4257},[34,115413,1475],{"emptyLinePlaceholder":1474},[34,115415,115416,115418,115421,115423,115425,115427,115430],{"class":36,"line":4263},[34,115417,16340],{"class":55},[34,115419,115420],{"class":3617}," ReacherEnv",[34,115422,286],{"class":40},[34,115424,114903],{"class":3617},[34,115426,2353],{"class":40},[34,115428,115429],{"class":3617},"Env",[34,115431,32428],{"class":40},[34,115433,115434,115437,115439,115441,115444],{"class":36,"line":4269},[34,115435,115436],{"class":40},"    metadata ",[34,115438,221],{"class":55},[34,115440,6100],{"class":40},[34,115442,115443],{"class":504},"\"render_modes\"",[34,115445,115446],{"class":40},": []}\n",[34,115448,115449],{"class":36,"line":4274},[34,115450,1475],{"emptyLinePlaceholder":1474},[34,115452,115453,115455,115457,115460,115462],{"class":36,"line":9598},[34,115454,32443],{"class":55},[34,115456,32446],{"class":44},[34,115458,115459],{"class":40},"(self) -> ",[34,115461,492],{"class":44},[34,115463,5392],{"class":40},[34,115465,115466,115468,115470,115472],{"class":36,"line":9622},[34,115467,32459],{"class":44},[34,115469,18907],{"class":40},[34,115471,32471],{"class":44},[34,115473,3630],{"class":40},[34,115475,115476,115478,115481,115483,115485,115487],{"class":36,"line":9627},[34,115477,32487],{"class":44},[34,115479,115480],{"class":40},".model ",[34,115482,221],{"class":55},[34,115484,102775],{"class":40},[34,115486,102677],{"class":44},[34,115488,101],{"class":40},[34,115490,115491,115493,115496,115498,115501,115503],{"class":36,"line":9633},[34,115492,32487],{"class":44},[34,115494,115495],{"class":40},".data ",[34,115497,221],{"class":55},[34,115499,115500],{"class":40}," mujoco.MjData(",[34,115502,32465],{"class":44},[34,115504,115505],{"class":40},".model)\n",[34,115507,115508],{"class":36,"line":9660},[34,115509,1475],{"emptyLinePlaceholder":1474},[34,115511,115512,115514,115517,115519,115522,115524,115527,115529],{"class":36,"line":9665},[34,115513,32487],{"class":44},[34,115515,115516],{"class":40},".tip_site_id ",[34,115518,221],{"class":55},[34,115520,115521],{"class":40}," mujoco.mj_name2id(",[34,115523,32465],{"class":44},[34,115525,115526],{"class":40},".model, mujoco.mjtObj.mjOBJ_SITE, ",[34,115528,112899],{"class":504},[34,115530,101],{"class":40},[34,115532,115533,115535,115538,115540,115542,115544,115546,115548],{"class":36,"line":9671},[34,115534,32487],{"class":44},[34,115536,115537],{"class":40},".target_site_id ",[34,115539,221],{"class":55},[34,115541,115521],{"class":40},[34,115543,32465],{"class":44},[34,115545,115526],{"class":40},[34,115547,113322],{"class":504},[34,115549,101],{"class":40},[34,115551,115552,115554,115556,115558,115560,115562,115565,115567,115569,115571,115573],{"class":36,"line":9683},[34,115553,4150],{"class":55},[34,115555,40514],{"class":44},[34,115557,115516],{"class":40},[34,115559,2701],{"class":55},[34,115561,98],{"class":44},[34,115563,115564],{"class":55}," or",[34,115566,40514],{"class":44},[34,115568,115537],{"class":40},[34,115570,2701],{"class":55},[34,115572,98],{"class":44},[34,115574,5392],{"class":40},[34,115576,115577,115580,115582,115584,115587],{"class":36,"line":9695},[34,115578,115579],{"class":55},"            raise",[34,115581,104798],{"class":44},[34,115583,286],{"class":40},[34,115585,115586],{"class":504},"\"required sites not found\"",[34,115588,101],{"class":40},[34,115590,115591],{"class":36,"line":9707},[34,115592,1475],{"emptyLinePlaceholder":1474},[34,115594,115595,115597,115599,115601],{"class":36,"line":11366},[34,115596,32487],{"class":44},[34,115598,115230],{"class":40},[34,115600,221],{"class":55},[34,115602,56066],{"class":44},[34,115604,115605,115607,115610,115612],{"class":36,"line":11391},[34,115606,32487],{"class":44},[34,115608,115609],{"class":40},".max_steps ",[34,115611,221],{"class":55},[34,115613,115614],{"class":44}," 200\n",[34,115616,115617,115619,115621,115623],{"class":36,"line":11414},[34,115618,32487],{"class":44},[34,115620,115069],{"class":40},[34,115622,221],{"class":55},[34,115624,48972],{"class":44},[34,115626,115627],{"class":36,"line":11438},[34,115628,1475],{"emptyLinePlaceholder":1474},[34,115630,115631,115633,115635,115637,115639,115641,115643,115645,115647,115649,115651,115653,115655,115657,115659,115661,115663,115665,115667,115669],{"class":36,"line":11443},[34,115632,32487],{"class":44},[34,115634,115117],{"class":40},[34,115636,221],{"class":55},[34,115638,115122],{"class":40},[34,115640,115125],{"class":51},[34,115642,115128],{"class":55},[34,115644,103766],{"class":44},[34,115646,48],{"class":40},[34,115648,115135],{"class":51},[34,115650,221],{"class":55},[34,115652,103766],{"class":44},[34,115654,48],{"class":40},[34,115656,784],{"class":51},[34,115658,221],{"class":55},[34,115660,286],{"class":40},[34,115662,332],{"class":44},[34,115664,115152],{"class":40},[34,115666,52],{"class":51},[34,115668,221],{"class":55},[34,115670,115159],{"class":40},[34,115672,115673,115675,115677,115679,115681,115683,115685,115687,115689,115691,115693,115695,115697,115699,115701,115703,115705,115707],{"class":36,"line":11448},[34,115674,32487],{"class":44},[34,115676,115178],{"class":40},[34,115678,221],{"class":55},[34,115680,115122],{"class":40},[34,115682,115125],{"class":51},[34,115684,115128],{"class":55},[34,115686,115189],{"class":40},[34,115688,115135],{"class":51},[34,115690,221],{"class":55},[34,115692,115189],{"class":40},[34,115694,784],{"class":51},[34,115696,221],{"class":55},[34,115698,286],{"class":40},[34,115700,410],{"class":44},[34,115702,115152],{"class":40},[34,115704,52],{"class":51},[34,115706,221],{"class":55},[34,115708,115159],{"class":40},[34,115710,115711],{"class":36,"line":11453},[34,115712,1475],{"emptyLinePlaceholder":1474},[34,115714,115715,115717,115720],{"class":36,"line":11462},[34,115716,32443],{"class":55},[34,115718,115719],{"class":3617}," _get_obs",[34,115721,115722],{"class":40},"(self) -> np.ndarray:\n",[34,115724,115725,115727,115729,115731,115734,115736],{"class":36,"line":11467},[34,115726,113500],{"class":40},[34,115728,221],{"class":55},[34,115730,40514],{"class":44},[34,115732,115733],{"class":40},".data.site_xpos[",[34,115735,32465],{"class":44},[34,115737,115738],{"class":40},".tip_site_id].copy()\n",[34,115740,115741,115743,115745,115747,115749,115751],{"class":36,"line":11473},[34,115742,113513],{"class":40},[34,115744,221],{"class":55},[34,115746,40514],{"class":44},[34,115748,115733],{"class":40},[34,115750,32465],{"class":44},[34,115752,115753],{"class":40},".target_site_id].copy()\n",[34,115755,115756,115758,115760,115763,115765,115768,115770],{"class":36,"line":11494},[34,115757,111545],{"class":40},[34,115759,221],{"class":55},[34,115761,115762],{"class":40}," np.concatenate([",[34,115764,32465],{"class":44},[34,115766,115767],{"class":40},".data.qpos.copy(), ",[34,115769,32465],{"class":44},[34,115771,115772],{"class":40},".data.qvel.copy(), tip, target])\n",[34,115774,115775,115777],{"class":36,"line":11500},[34,115776,16398],{"class":55},[34,115778,115779],{"class":40}," obs.astype(np.float32)\n",[34,115781,115782],{"class":36,"line":11514},[34,115783,1475],{"emptyLinePlaceholder":1474},[34,115785,115786,115788,115791,115793,115795],{"class":36,"line":11520},[34,115787,32443],{"class":55},[34,115789,115790],{"class":3617}," _get_reward",[34,115792,115459],{"class":40},[34,115794,989],{"class":44},[34,115796,5392],{"class":40},[34,115798,115799,115801,115803,115805,115807,115809],{"class":36,"line":11547},[34,115800,113500],{"class":40},[34,115802,221],{"class":55},[34,115804,40514],{"class":44},[34,115806,115733],{"class":40},[34,115808,32465],{"class":44},[34,115810,115811],{"class":40},".tip_site_id]\n",[34,115813,115814,115816,115818,115820,115822,115824],{"class":36,"line":11556},[34,115815,113513],{"class":40},[34,115817,221],{"class":55},[34,115819,40514],{"class":44},[34,115821,115733],{"class":40},[34,115823,32465],{"class":44},[34,115825,115826],{"class":40},".target_site_id]\n",[34,115828,115829,115832,115834,115836,115838],{"class":36,"line":11562},[34,115830,115831],{"class":40},"        dist ",[34,115833,221],{"class":55},[34,115835,112964],{"class":40},[34,115837,2327],{"class":55},[34,115839,112969],{"class":40},[34,115841,115842,115845,115847,115849,115851,115854,115856],{"class":36,"line":11570},[34,115843,115844],{"class":40},"        control_cost ",[34,115846,221],{"class":55},[34,115848,113400],{"class":44},[34,115850,8168],{"class":55},[34,115852,115853],{"class":40}," np.sum(np.square(",[34,115855,32465],{"class":44},[34,115857,115858],{"class":40},".data.ctrl))\n",[34,115860,115861,115863,115865,115867,115869,115871,115873],{"class":36,"line":11575},[34,115862,16398],{"class":55},[34,115864,111160],{"class":44},[34,115866,286],{"class":40},[34,115868,2327],{"class":55},[34,115870,112959],{"class":40},[34,115872,2327],{"class":55},[34,115874,113422],{"class":40},[34,115876,115877],{"class":36,"line":18250},[34,115878,1475],{"emptyLinePlaceholder":1474},[34,115880,115881,115883,115886,115889,115891,115894,115896,115898,115900,115902,115904,115907,115910,115912,115914,115916,115918],{"class":36,"line":18256},[34,115882,32443],{"class":55},[34,115884,115885],{"class":3617}," reset",[34,115887,115888],{"class":40},"(self, ",[34,115890,2252],{"class":55},[34,115892,115893],{"class":40},", seed: ",[34,115895,571],{"class":44},[34,115897,26755],{"class":55},[34,115899,59],{"class":44},[34,115901,56],{"class":55},[34,115903,59],{"class":44},[34,115905,115906],{"class":40},", options: ",[34,115908,115909],{"class":44},"dict",[34,115911,26755],{"class":55},[34,115913,59],{"class":44},[34,115915,56],{"class":55},[34,115917,59],{"class":44},[34,115919,32428],{"class":40},[34,115921,115922,115924,115927,115930,115932],{"class":36,"line":18279},[34,115923,32459],{"class":44},[34,115925,115926],{"class":40},"().reset(",[34,115928,115929],{"class":51},"seed",[34,115931,221],{"class":55},[34,115933,115934],{"class":40},"seed)\n",[34,115936,115937,115940,115942,115945,115947],{"class":36,"line":18285},[34,115938,115939],{"class":40},"        mujoco.mj_resetData(",[34,115941,32465],{"class":44},[34,115943,115944],{"class":40},".model, ",[34,115946,32465],{"class":44},[34,115948,115949],{"class":40},".data)\n",[34,115951,115952],{"class":36,"line":18308},[34,115953,1475],{"emptyLinePlaceholder":1474},[34,115955,115956,115958,115961,115963,115965,115968,115970,115972,115974,115976,115978,115980,115982,115984,115986,115988,115990],{"class":36,"line":18322},[34,115957,32487],{"class":44},[34,115959,115960],{"class":40},".data.qpos[:] ",[34,115962,221],{"class":55},[34,115964,40514],{"class":44},[34,115966,115967],{"class":40},".np_random.uniform(",[34,115969,115125],{"class":51},[34,115971,115128],{"class":55},[34,115973,87846],{"class":44},[34,115975,48],{"class":40},[34,115977,115135],{"class":51},[34,115979,221],{"class":55},[34,115981,87846],{"class":44},[34,115983,48],{"class":40},[34,115985,218],{"class":51},[34,115987,221],{"class":55},[34,115989,32465],{"class":44},[34,115991,115992],{"class":40},".model.nq)\n",[34,115994,115995,115997,116000,116002],{"class":36,"line":18342},[34,115996,32487],{"class":44},[34,115998,115999],{"class":40},".data.qvel[:] ",[34,116001,221],{"class":55},[34,116003,106124],{"class":44},[34,116005,116006,116009,116011,116013,116015],{"class":36,"line":18348},[34,116007,116008],{"class":40},"        mujoco.mj_forward(",[34,116010,32465],{"class":44},[34,116012,115944],{"class":40},[34,116014,32465],{"class":44},[34,116016,115949],{"class":40},[34,116018,116019],{"class":36,"line":18359},[34,116020,1475],{"emptyLinePlaceholder":1474},[34,116022,116023,116025,116027,116029],{"class":36,"line":18382},[34,116024,32487],{"class":44},[34,116026,115069],{"class":40},[34,116028,221],{"class":55},[34,116030,48972],{"class":44},[34,116032,116033,116035,116037],{"class":36,"line":18404},[34,116034,16398],{"class":55},[34,116036,40514],{"class":44},[34,116038,116039],{"class":40},"._get_obs(), {}\n",[34,116041,116042],{"class":36,"line":18409},[34,116043,1475],{"emptyLinePlaceholder":1474},[34,116045,116046,116048,116051],{"class":36,"line":18415},[34,116047,32443],{"class":55},[34,116049,116050],{"class":3617}," step",[34,116052,116053],{"class":40},"(self, action):\n",[34,116055,116056,116058,116060,116063,116065,116067],{"class":36,"line":18429},[34,116057,111585],{"class":40},[34,116059,221],{"class":55},[34,116061,116062],{"class":40}," np.asarray(action, ",[34,116064,52],{"class":51},[34,116066,221],{"class":55},[34,116068,115159],{"class":40},[34,116070,116071,116073,116075,116077,116079,116082,116084],{"class":36,"line":18442},[34,116072,111585],{"class":40},[34,116074,221],{"class":55},[34,116076,108810],{"class":40},[34,116078,32465],{"class":44},[34,116080,116081],{"class":40},".action_space.low, ",[34,116083,32465],{"class":44},[34,116085,116086],{"class":40},".action_space.high)\n",[34,116088,116089],{"class":36,"line":18447},[34,116090,1475],{"emptyLinePlaceholder":1474},[34,116092,116093,116095,116098,116100],{"class":36,"line":18461},[34,116094,32487],{"class":44},[34,116096,116097],{"class":40},".data.ctrl[:] ",[34,116099,221],{"class":55},[34,116101,108833],{"class":40},[34,116103,116104,116106,116108,116110,116112,116114,116116],{"class":36,"line":18466},[34,116105,5056],{"class":55},[34,116107,102864],{"class":40},[34,116109,27689],{"class":55},[34,116111,34084],{"class":44},[34,116113,286],{"class":40},[34,116115,32465],{"class":44},[34,116117,116118],{"class":40},".frame_skip):\n",[34,116120,116121,116124,116126,116128,116130],{"class":36,"line":18472},[34,116122,116123],{"class":40},"            mujoco.mj_step(",[34,116125,32465],{"class":44},[34,116127,115944],{"class":40},[34,116129,32465],{"class":44},[34,116131,115949],{"class":40},[34,116133,116134],{"class":36,"line":18477},[34,116135,1475],{"emptyLinePlaceholder":1474},[34,116137,116138,116140,116142,116144],{"class":36,"line":18491},[34,116139,32487],{"class":44},[34,116141,115069],{"class":40},[34,116143,11127],{"class":55},[34,116145,57338],{"class":44},[34,116147,116148],{"class":36,"line":18496},[34,116149,1475],{"emptyLinePlaceholder":1474},[34,116151,116152,116154,116156,116158],{"class":36,"line":18501},[34,116153,111545],{"class":40},[34,116155,221],{"class":55},[34,116157,40514],{"class":44},[34,116159,116160],{"class":40},"._get_obs()\n",[34,116162,116163,116165,116167,116169],{"class":36,"line":18515},[34,116164,111650],{"class":40},[34,116166,221],{"class":55},[34,116168,40514],{"class":44},[34,116170,116171],{"class":40},"._get_reward()\n",[34,116173,116174],{"class":36,"line":18527},[34,116175,1475],{"emptyLinePlaceholder":1474},[34,116177,116178,116180,116182,116184,116186,116188],{"class":36,"line":18532},[34,116179,113500],{"class":40},[34,116181,221],{"class":55},[34,116183,40514],{"class":44},[34,116185,115733],{"class":40},[34,116187,32465],{"class":44},[34,116189,115811],{"class":40},[34,116191,116192,116194,116196,116198,116200,116202],{"class":36,"line":18545},[34,116193,113513],{"class":40},[34,116195,221],{"class":55},[34,116197,40514],{"class":44},[34,116199,115733],{"class":40},[34,116201,32465],{"class":44},[34,116203,115826],{"class":40},[34,116205,116206,116208,116210,116212,116215,116217],{"class":36,"line":18550},[34,116207,115831],{"class":40},[34,116209,221],{"class":55},[34,116211,111160],{"class":44},[34,116213,116214],{"class":40},"(np.linalg.norm(tip ",[34,116216,2327],{"class":55},[34,116218,116219],{"class":40}," target))\n",[34,116221,116222],{"class":36,"line":18555},[34,116223,1475],{"emptyLinePlaceholder":1474},[34,116225,116226,116229,116231,116233,116235],{"class":36,"line":18560},[34,116227,116228],{"class":40},"        terminated ",[34,116230,221],{"class":55},[34,116232,115052],{"class":40},[34,116234,2701],{"class":55},[34,116236,115057],{"class":44},[34,116238,116239,116242,116244,116246,116248,116250,116252],{"class":36,"line":18573},[34,116240,116241],{"class":40},"        truncated ",[34,116243,221],{"class":55},[34,116245,40514],{"class":44},[34,116247,115069],{"class":40},[34,116249,3364],{"class":55},[34,116251,40514],{"class":44},[34,116253,115076],{"class":40},[34,116255,116256,116259,116261,116263,116266],{"class":36,"line":18578},[34,116257,116258],{"class":40},"        info ",[34,116260,221],{"class":55},[34,116262,6100],{"class":40},[34,116264,116265],{"class":504},"\"distance\"",[34,116267,116268],{"class":40},": dist}\n",[34,116270,116271,116273],{"class":36,"line":34274},[34,116272,16398],{"class":55},[34,116274,116275],{"class":40}," obs, reward, terminated, truncated, info\n",[34,116277,116278],{"class":36,"line":34280},[34,116279,1475],{"emptyLinePlaceholder":1474},[34,116281,116282],{"class":36,"line":34286},[34,116283,1475],{"emptyLinePlaceholder":1474},[34,116285,116286,116288,116290,116292,116294],{"class":36,"line":34292},[34,116287,33588],{"class":55},[34,116289,3627],{"class":3617},[34,116291,102761],{"class":40},[34,116293,492],{"class":44},[34,116295,5392],{"class":40},[34,116297,116298,116301,116303],{"class":36,"line":34298},[34,116299,116300],{"class":40},"    env ",[34,116302,221],{"class":55},[34,116304,116305],{"class":40}," ReacherEnv()\n",[34,116307,116308,116311,116313,116316,116318,116320,116322],{"class":36,"line":34309},[34,116309,116310],{"class":40},"    obs, info ",[34,116312,221],{"class":55},[34,116314,116315],{"class":40}," env.reset(",[34,116317,115929],{"class":51},[34,116319,221],{"class":55},[34,116321,177],{"class":44},[34,116323,101],{"class":40},[34,116325,116326,116328,116330,116333],{"class":36,"line":34315},[34,116327,32941],{"class":44},[34,116329,286],{"class":40},[34,116331,116332],{"class":504},"\"initial obs shape:\"",[34,116334,116335],{"class":40},", obs.shape)\n",[34,116337,116338,116340,116342,116345],{"class":36,"line":34335},[34,116339,32941],{"class":44},[34,116341,286],{"class":40},[34,116343,116344],{"class":504},"\"initial info:\"",[34,116346,116347],{"class":40},", info)\n",[34,116349,116350],{"class":36,"line":34341},[34,116351,1475],{"emptyLinePlaceholder":1474},[34,116353,116354,116356,116358],{"class":36,"line":34352},[34,116355,111516],{"class":40},[34,116357,221],{"class":55},[34,116359,106124],{"class":44},[34,116361,116362,116364,116366,116368,116370,116372,116374],{"class":36,"line":34358},[34,116363,4854],{"class":55},[34,116365,33257],{"class":40},[34,116367,27689],{"class":55},[34,116369,34084],{"class":44},[34,116371,286],{"class":40},[34,116373,1249],{"class":44},[34,116375,32428],{"class":40},[34,116377,116378,116380,116382],{"class":36,"line":34364},[34,116379,111585],{"class":40},[34,116381,221],{"class":55},[34,116383,116384],{"class":40}," env.action_space.sample()\n",[34,116386,116387,116390,116392],{"class":36,"line":34370},[34,116388,116389],{"class":40},"        obs, reward, terminated, truncated, info ",[34,116391,221],{"class":55},[34,116393,114778],{"class":40},[34,116395,116396,116398,116400],{"class":36,"line":34376},[34,116397,111660],{"class":40},[34,116399,11127],{"class":55},[34,116401,111665],{"class":40},[34,116403,116404,116406,116408,116410,116412,116415,116417,116419,116422,116424,116426,116429,116431,116433,116436,116438,116440,116442],{"class":36,"line":34382},[34,116405,34092],{"class":44},[34,116407,286],{"class":40},[34,116409,111694],{"class":504},[34,116411,111697],{"class":40},[34,116413,116414],{"class":504},"\"reward:\"",[34,116416,48],{"class":40},[34,116418,33659],{"class":44},[34,116420,116421],{"class":40},"(reward, ",[34,116423,337],{"class":44},[34,116425,111708],{"class":40},[34,116427,116428],{"class":504},"\"distance:\"",[34,116430,48],{"class":40},[34,116432,33659],{"class":44},[34,116434,116435],{"class":40},"(info[",[34,116437,116265],{"class":504},[34,116439,113565],{"class":40},[34,116441,337],{"class":44},[34,116443,296],{"class":40},[34,116445,116446,116448,116451,116454],{"class":36,"line":34388},[34,116447,4150],{"class":55},[34,116449,116450],{"class":40}," terminated ",[34,116452,116453],{"class":55},"or",[34,116455,116456],{"class":40}," truncated:\n",[34,116458,116459],{"class":36,"line":34394},[34,116460,116461],{"class":55},"            break\n",[34,116463,116464],{"class":36,"line":34414},[34,116465,1475],{"emptyLinePlaceholder":1474},[34,116467,116468,116470,116472,116474,116476,116478,116480,116482],{"class":36,"line":34420},[34,116469,32941],{"class":44},[34,116471,286],{"class":40},[34,116473,111739],{"class":504},[34,116475,48],{"class":40},[34,116477,33659],{"class":44},[34,116479,111746],{"class":40},[34,116481,337],{"class":44},[34,116483,296],{"class":40},[34,116485,116486],{"class":36,"line":34436},[34,116487,1475],{"emptyLinePlaceholder":1474},[34,116489,116490],{"class":36,"line":34442},[34,116491,1475],{"emptyLinePlaceholder":1474},[34,116493,116494,116496,116498,116500,116502],{"class":36,"line":34456},[34,116495,3189],{"class":55},[34,116497,32862],{"class":44},[34,116499,102922],{"class":55},[34,116501,102925],{"class":504},[34,116503,5392],{"class":40},[34,116505,116506],{"class":36,"line":34462},[34,116507,102932],{"class":40},[103,116509,104933],{},[24,116511,116513],{"className":25467,"code":116512,"language":25469,"meta":29,"style":29},"touch ch8_gym_env.py\n",[31,116514,116515],{"__ignoreMap":29},[34,116516,116517,116519],{"class":36,"line":37},[34,116518,102646],{"class":3617},[34,116520,116521],{"class":504}," ch8_gym_env.py\n",[103,116523,111807],{},[24,116525,116527],{"className":25467,"code":116526,"language":25469,"meta":29,"style":29},"python ch8_gym_env.py\n",[31,116528,116529],{"__ignoreMap":29},[34,116530,116531,116533],{"class":36,"line":37},[34,116532,28],{"class":3617},[34,116534,116521],{"class":504},[19,116536,102935],{"id":102935},[103,116538,116539],{},"继承 Gymnasium 环境：",[24,116541,116543],{"className":26,"code":116542,"language":28,"meta":29,"style":29},"class ReacherEnv(gym.Env):\n",[31,116544,116545],{"__ignoreMap":29},[34,116546,116547,116549,116551,116553,116555,116557,116559],{"class":36,"line":37},[34,116548,16340],{"class":55},[34,116550,115420],{"class":3617},[34,116552,286],{"class":40},[34,116554,114903],{"class":3617},[34,116556,2353],{"class":40},[34,116558,115429],{"class":3617},[34,116560,32428],{"class":40},[103,116562,116563],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[103,116565,116566],{},"初始化模型：",[24,116568,116570],{"className":26,"code":116569,"language":28,"meta":29,"style":29},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[31,116571,116572,116586],{"__ignoreMap":29},[34,116573,116574,116576,116578,116580,116582,116584],{"class":36,"line":37},[34,116575,32465],{"class":44},[34,116577,115480],{"class":40},[34,116579,221],{"class":55},[34,116581,102775],{"class":40},[34,116583,102677],{"class":44},[34,116585,101],{"class":40},[34,116587,116588,116590,116592,116594,116596,116598],{"class":36,"line":165},[34,116589,32465],{"class":44},[34,116591,115495],{"class":40},[34,116593,221],{"class":55},[34,116595,115500],{"class":40},[34,116597,32465],{"class":44},[34,116599,115505],{"class":40},[103,116601,116602,116603,116605],{},"这和前面章节一样，只是现在放到了类的 ",[31,116604,32471],{}," 里。",[103,116607,116608],{},"缓存 site ID：",[24,116610,116612],{"className":26,"code":116611,"language":28,"meta":29,"style":29},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[31,116613,116614,116628],{"__ignoreMap":29},[34,116615,116616,116618,116620,116622,116624,116626],{"class":36,"line":37},[34,116617,32465],{"class":44},[34,116619,115516],{"class":40},[34,116621,221],{"class":55},[34,116623,115521],{"class":40},[34,116625,91190],{"class":44},[34,116627,101],{"class":40},[34,116629,116630,116632,116634,116636,116638,116640],{"class":36,"line":165},[34,116631,32465],{"class":44},[34,116633,115537],{"class":40},[34,116635,221],{"class":55},[34,116637,115521],{"class":40},[34,116639,91190],{"class":44},[34,116641,101],{"class":40},[103,116643,116644],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[103,116646,116647],{},"reset：",[24,116649,116651],{"className":26,"code":116650,"language":28,"meta":29,"style":29},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[31,116652,116653],{"__ignoreMap":29},[34,116654,116655,116657,116659,116661,116663,116665,116667,116669,116671,116673,116675,116677,116679,116681,116683,116685,116687],{"class":36,"line":37},[34,116656,33588],{"class":55},[34,116658,115885],{"class":3617},[34,116660,115888],{"class":40},[34,116662,2252],{"class":55},[34,116664,115893],{"class":40},[34,116666,571],{"class":44},[34,116668,26755],{"class":55},[34,116670,59],{"class":44},[34,116672,56],{"class":55},[34,116674,59],{"class":44},[34,116676,115906],{"class":40},[34,116678,115909],{"class":44},[34,116680,26755],{"class":55},[34,116682,59],{"class":44},[34,116684,56],{"class":55},[34,116686,59],{"class":44},[34,116688,32428],{"class":40},[103,116690,116691,116693],{},[31,116692,71695],{}," 做四件事：",[1772,116695,116696,116699,116702,116705],{},[1775,116697,116698],{},"设置随机种子。",[1775,116700,116701],{},"重置 MuJoCo data。",[1775,116703,116704],{},"随机初始化关节角。",[1775,116706,116707],{},"返回初始观测和 info。",[103,116709,116710],{},"step：",[24,116712,116714],{"className":26,"code":116713,"language":28,"meta":29,"style":29},"def step(self, action):\n",[31,116715,116716],{"__ignoreMap":29},[34,116717,116718,116720,116722],{"class":36,"line":37},[34,116719,33588],{"class":55},[34,116721,116050],{"class":3617},[34,116723,116053],{"class":40},[103,116725,116726,116728],{},[31,116727,108497],{}," 做六件事：",[1772,116730,116731,116734,116740,116743,116746,116749],{},[1775,116732,116733],{},"检查并裁剪 action。",[1775,116735,116736,116737,30031],{},"写入 ",[31,116738,116739],{},"self.data.ctrl",[1775,116741,116742],{},"连续推进若干个 MuJoCo 物理步。",[1775,116744,116745],{},"计算新观测。",[1775,116747,116748],{},"计算奖励和结束条件。",[1775,116750,116751],{},"返回 Gymnasium 标准五元组。",[19,116753,103071],{"id":103071},[24,116755,116757],{"className":26,"code":116756,"language":28,"meta":29,"style":29},"import gymnasium as gym\n",[31,116758,116759],{"__ignoreMap":29},[34,116760,116761,116763,116765,116767],{"class":36,"line":37},[34,116762,32036],{"class":55},[34,116764,115258],{"class":40},[34,116766,33025],{"class":55},[34,116768,115263],{"class":40},[103,116770,116771,116772,116774,116775,116778],{},"导入 Gymnasium，并起别名 ",[31,116773,114903],{},"。后面写 ",[31,116776,116777],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[24,116780,116782],{"className":26,"code":116781,"language":28,"meta":29,"style":29},"from gymnasium import spaces\n",[31,116783,116784],{"__ignoreMap":29},[34,116785,116786,116788,116790,116792],{"class":36,"line":37},[34,116787,32379],{"class":55},[34,116789,115258],{"class":40},[34,116791,32036],{"class":55},[34,116793,115290],{"class":40},[103,116795,116796,116797,116800],{},"导入空间定义工具。",[31,116798,116799],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[24,116802,116803],{"className":26,"code":116542,"language":28,"meta":29,"style":29},[31,116804,116805],{"__ignoreMap":29},[34,116806,116807,116809,116811,116813,116815,116817,116819],{"class":36,"line":37},[34,116808,16340],{"class":55},[34,116810,115420],{"class":3617},[34,116812,286],{"class":40},[34,116814,114903],{"class":3617},[34,116816,2353],{"class":40},[34,116818,115429],{"class":3617},[34,116820,32428],{"class":40},[103,116822,116823,116824,116827,116828,116830,116831,102381,116833,116835],{},"定义一个类，名字叫 ",[31,116825,116826],{},"ReacherEnv","。括号里的 ",[31,116829,116777],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[31,116832,71695],{},[31,116834,108497],{}," 这两个核心方法。",[24,116837,116839],{"className":26,"code":116838,"language":28,"meta":29,"style":29},"metadata = {\"render_modes\": []}\n",[31,116840,116841],{"__ignoreMap":29},[34,116842,116843,116846,116848,116850,116852],{"class":36,"line":37},[34,116844,116845],{"class":40},"metadata ",[34,116847,221],{"class":55},[34,116849,6100],{"class":40},[34,116851,115443],{"class":504},[34,116853,115446],{"class":40},[103,116855,116856],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[24,116858,116860],{"className":26,"code":116859,"language":28,"meta":29,"style":29},"def __init__(self) -> None:\n",[31,116861,116862],{"__ignoreMap":29},[34,116863,116864,116866,116868,116870,116872],{"class":36,"line":37},[34,116865,33588],{"class":55},[34,116867,32446],{"class":44},[34,116869,115459],{"class":40},[34,116871,492],{"class":44},[34,116873,5392],{"class":40},[103,116875,116876,116878,116879,30031],{},[31,116877,32471],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[31,116880,116881],{},"env = ReacherEnv()",[24,116883,116885],{"className":26,"code":116884,"language":28,"meta":29,"style":29},"super().__init__()\n",[31,116886,116887],{"__ignoreMap":29},[34,116888,116889,116892,116894,116896],{"class":36,"line":37},[34,116890,116891],{"class":44},"super",[34,116893,18907],{"class":40},[34,116895,32471],{"class":44},[34,116897,3630],{"class":40},[103,116899,116900,116901,116903],{},"调用父类 ",[31,116902,116777],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[24,116905,116906],{"className":26,"code":116569,"language":28,"meta":29,"style":29},[31,116907,116908,116922],{"__ignoreMap":29},[34,116909,116910,116912,116914,116916,116918,116920],{"class":36,"line":37},[34,116911,32465],{"class":44},[34,116913,115480],{"class":40},[34,116915,221],{"class":55},[34,116917,102775],{"class":40},[34,116919,102677],{"class":44},[34,116921,101],{"class":40},[34,116923,116924,116926,116928,116930,116932,116934],{"class":36,"line":165},[34,116925,32465],{"class":44},[34,116927,115495],{"class":40},[34,116929,221],{"class":55},[34,116931,115500],{"class":40},[34,116933,32465],{"class":44},[34,116935,115505],{"class":40},[103,116937,116938,116939,116941,116942,102381,116945,116948],{},"把 MuJoCo 模型和状态保存到 ",[31,116940,32465],{}," 上。",[31,116943,116944],{},"self.model",[31,116946,116947],{},"self.data"," 表示这个环境对象自己的模型和状态。",[24,116950,116951],{"className":26,"code":116611,"language":28,"meta":29,"style":29},[31,116952,116953,116967],{"__ignoreMap":29},[34,116954,116955,116957,116959,116961,116963,116965],{"class":36,"line":37},[34,116956,32465],{"class":44},[34,116958,115516],{"class":40},[34,116960,221],{"class":55},[34,116962,115521],{"class":40},[34,116964,91190],{"class":44},[34,116966,101],{"class":40},[34,116968,116969,116971,116973,116975,116977,116979],{"class":36,"line":165},[34,116970,32465],{"class":44},[34,116972,115537],{"class":40},[34,116974,221],{"class":55},[34,116976,115521],{"class":40},[34,116978,91190],{"class":44},[34,116980,101],{"class":40},[103,116982,116983,116984,102381,116987,116990],{},"提前查好 tip 和 target 的 site ID。这样 ",[31,116985,116986],{},"_get_obs",[31,116988,116989],{},"_get_reward"," 里就不用每次按名字查找。",[24,116992,116994],{"className":26,"code":116993,"language":28,"meta":29,"style":29},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[31,116995,116996,117006,117016],{"__ignoreMap":29},[34,116997,116998,117000,117002,117004],{"class":36,"line":37},[34,116999,32465],{"class":44},[34,117001,115230],{"class":40},[34,117003,221],{"class":55},[34,117005,56066],{"class":44},[34,117007,117008,117010,117012,117014],{"class":36,"line":165},[34,117009,32465],{"class":44},[34,117011,115609],{"class":40},[34,117013,221],{"class":55},[34,117015,115614],{"class":44},[34,117017,117018,117020,117022,117024],{"class":36,"line":171},[34,117019,32465],{"class":44},[34,117021,115069],{"class":40},[34,117023,221],{"class":55},[34,117025,48972],{"class":44},[103,117027,117028,117031,117032,117035,117036,117039],{},[31,117029,117030],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[31,117033,117034],{},"max_steps"," 是一个 episode 最多运行多少步。",[31,117037,117038],{},"steps"," 记录当前 episode 已经走了多少步。",[24,117041,117042],{"className":26,"code":115108,"language":28,"meta":29,"style":29},[31,117043,117044],{"__ignoreMap":29},[34,117045,117046,117048,117050,117052,117054,117056,117058,117060,117062,117064,117066,117068,117070,117072,117074,117076,117078,117080,117082,117084],{"class":36,"line":37},[34,117047,32465],{"class":44},[34,117049,115117],{"class":40},[34,117051,221],{"class":55},[34,117053,115122],{"class":40},[34,117055,115125],{"class":51},[34,117057,115128],{"class":55},[34,117059,103766],{"class":44},[34,117061,48],{"class":40},[34,117063,115135],{"class":51},[34,117065,221],{"class":55},[34,117067,103766],{"class":44},[34,117069,48],{"class":40},[34,117071,784],{"class":51},[34,117073,221],{"class":55},[34,117075,286],{"class":40},[34,117077,332],{"class":44},[34,117079,115152],{"class":40},[34,117081,52],{"class":51},[34,117083,221],{"class":55},[34,117085,115159],{"class":40},[103,117087,117088,117089,117092,117093,102381,117096,117099],{},"定义动作空间。",[31,117090,117091],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[31,117094,117095],{},"low=-1.0",[31,117097,117098],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[24,117101,117102],{"className":26,"code":115169,"language":28,"meta":29,"style":29},[31,117103,117104],{"__ignoreMap":29},[34,117105,117106,117108,117110,117112,117114,117116,117118,117120,117122,117124,117126,117128,117130,117132,117134,117136,117138,117140],{"class":36,"line":37},[34,117107,32465],{"class":44},[34,117109,115178],{"class":40},[34,117111,221],{"class":55},[34,117113,115122],{"class":40},[34,117115,115125],{"class":51},[34,117117,115128],{"class":55},[34,117119,115189],{"class":40},[34,117121,115135],{"class":51},[34,117123,221],{"class":55},[34,117125,115189],{"class":40},[34,117127,784],{"class":51},[34,117129,221],{"class":55},[34,117131,286],{"class":40},[34,117133,410],{"class":44},[34,117135,115152],{"class":40},[34,117137,52],{"class":51},[34,117139,221],{"class":55},[34,117141,115159],{"class":40},[103,117143,117144,117145,117148,117149,117152],{},"定义观测空间。",[31,117146,117147],{},"shape=(10,)"," 表示观测是 10 个数。",[31,117150,117151],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[24,117154,117156],{"className":26,"code":117155,"language":28,"meta":29,"style":29},"def _get_obs(self) -> np.ndarray:\n",[31,117157,117158],{"__ignoreMap":29},[34,117159,117160,117162,117164],{"class":36,"line":37},[34,117161,33588],{"class":55},[34,117163,115719],{"class":3617},[34,117165,115722],{"class":40},[103,117167,117168,117169,117171],{},"定义内部函数，用来生成观测。函数名前面的 ",[31,117170,2783],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[24,117173,117175],{"className":26,"code":117174,"language":28,"meta":29,"style":29},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[31,117176,117177,117191],{"__ignoreMap":29},[34,117178,117179,117181,117183,117185,117187,117189],{"class":36,"line":37},[34,117180,112931],{"class":40},[34,117182,221],{"class":55},[34,117184,40514],{"class":44},[34,117186,115733],{"class":40},[34,117188,32465],{"class":44},[34,117190,115738],{"class":40},[34,117192,117193,117195,117197,117199,117201,117203],{"class":36,"line":165},[34,117194,112941],{"class":40},[34,117196,221],{"class":55},[34,117198,40514],{"class":44},[34,117200,115733],{"class":40},[34,117202,32465],{"class":44},[34,117204,115753],{"class":40},[103,117206,117207],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[24,117209,117211],{"className":26,"code":117210,"language":28,"meta":29,"style":29},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[31,117212,117213,117229],{"__ignoreMap":29},[34,117214,117215,117217,117219,117221,117223,117225,117227],{"class":36,"line":37},[34,117216,112217],{"class":40},[34,117218,221],{"class":55},[34,117220,115762],{"class":40},[34,117222,32465],{"class":44},[34,117224,115767],{"class":40},[34,117226,32465],{"class":44},[34,117228,115772],{"class":40},[34,117230,117231,117233],{"class":36,"line":165},[34,117232,18692],{"class":55},[34,117234,115779],{"class":40},[103,117236,117237,117238,117241,117242,117244],{},"拼接观测，并转换成 ",[31,117239,117240],{},"float32","。很多强化学习库默认使用 ",[31,117243,117240],{},"，所以这里主动转换。",[24,117246,117247],{"className":26,"code":116650,"language":28,"meta":29,"style":29},[31,117248,117249],{"__ignoreMap":29},[34,117250,117251,117253,117255,117257,117259,117261,117263,117265,117267,117269,117271,117273,117275,117277,117279,117281,117283],{"class":36,"line":37},[34,117252,33588],{"class":55},[34,117254,115885],{"class":3617},[34,117256,115888],{"class":40},[34,117258,2252],{"class":55},[34,117260,115893],{"class":40},[34,117262,571],{"class":44},[34,117264,26755],{"class":55},[34,117266,59],{"class":44},[34,117268,56],{"class":55},[34,117270,59],{"class":44},[34,117272,115906],{"class":40},[34,117274,115909],{"class":44},[34,117276,26755],{"class":55},[34,117278,59],{"class":44},[34,117280,56],{"class":55},[34,117282,59],{"class":44},[34,117284,32428],{"class":40},[103,117286,117287,117288,117290,117291,117294],{},"定义 reset。",[31,117289,115929],{}," 用来控制随机数，保证实验可以复现。",[31,117292,117293],{},"options"," 用来接收额外配置，本章暂时不用。",[24,117296,117298],{"className":26,"code":117297,"language":28,"meta":29,"style":29},"super().reset(seed=seed)\n",[31,117299,117300],{"__ignoreMap":29},[34,117301,117302,117304,117306,117308,117310],{"class":36,"line":37},[34,117303,116891],{"class":44},[34,117305,115926],{"class":40},[34,117307,115929],{"class":51},[34,117309,221],{"class":55},[34,117311,115934],{"class":40},[103,117313,117314,117315,117318],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[31,117316,117317],{},"self.np_random"," 生成可复现的随机数。",[24,117320,117322],{"className":26,"code":117321,"language":28,"meta":29,"style":29},"mujoco.mj_resetData(self.model, self.data)\n",[31,117323,117324],{"__ignoreMap":29},[34,117325,117326,117329,117331,117333,117335],{"class":36,"line":37},[34,117327,117328],{"class":40},"mujoco.mj_resetData(",[34,117330,32465],{"class":44},[34,117332,115944],{"class":40},[34,117334,32465],{"class":44},[34,117336,115949],{"class":40},[103,117338,117339],{},"把 MuJoCo 状态重置到默认状态。",[24,117341,117343],{"className":26,"code":117342,"language":28,"meta":29,"style":29},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[31,117344,117345],{"__ignoreMap":29},[34,117346,117347,117349,117351,117353,117355,117357,117359,117361,117363,117365,117367,117369,117371,117373,117375,117377,117379],{"class":36,"line":37},[34,117348,32465],{"class":44},[34,117350,115960],{"class":40},[34,117352,221],{"class":55},[34,117354,40514],{"class":44},[34,117356,115967],{"class":40},[34,117358,115125],{"class":51},[34,117360,115128],{"class":55},[34,117362,87846],{"class":44},[34,117364,48],{"class":40},[34,117366,115135],{"class":51},[34,117368,221],{"class":55},[34,117370,87846],{"class":44},[34,117372,48],{"class":40},[34,117374,218],{"class":51},[34,117376,221],{"class":55},[34,117378,32465],{"class":44},[34,117380,115992],{"class":40},[103,117382,116704,117383,117386,117387,117390,117391,117393],{},[31,117384,117385],{},"[:]"," 表示修改整个数组。",[31,117388,117389],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[31,117392,103513],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[24,117395,117397],{"className":26,"code":117396,"language":28,"meta":29,"style":29},"self.data.qvel[:] = 0.0\n",[31,117398,117399],{"__ignoreMap":29},[34,117400,117401,117403,117405,117407],{"class":36,"line":37},[34,117402,32465],{"class":44},[34,117404,115999],{"class":40},[34,117406,221],{"class":55},[34,117408,106124],{"class":44},[103,117410,117411],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[24,117413,117415],{"className":26,"code":117414,"language":28,"meta":29,"style":29},"self.steps = 0\nreturn self._get_obs(), {}\n",[31,117416,117417,117427],{"__ignoreMap":29},[34,117418,117419,117421,117423,117425],{"class":36,"line":37},[34,117420,32465],{"class":44},[34,117422,115069],{"class":40},[34,117424,221],{"class":55},[34,117426,48972],{"class":44},[34,117428,117429,117431,117433],{"class":36,"line":165},[34,117430,18692],{"class":55},[34,117432,40514],{"class":44},[34,117434,116039],{"class":40},[103,117436,117437],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[24,117439,117440],{"className":26,"code":116713,"language":28,"meta":29,"style":29},[31,117441,117442],{"__ignoreMap":29},[34,117443,117444,117446,117448],{"class":36,"line":37},[34,117445,33588],{"class":55},[34,117447,116050],{"class":3617},[34,117449,116053],{"class":40},[103,117451,117452],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[24,117454,117456],{"className":26,"code":117455,"language":28,"meta":29,"style":29},"action = np.asarray(action, dtype=np.float32)\n",[31,117457,117458],{"__ignoreMap":29},[34,117459,117460,117462,117464,117466,117468,117470],{"class":36,"line":37},[34,117461,108805],{"class":40},[34,117463,221],{"class":55},[34,117465,116062],{"class":40},[34,117467,52],{"class":51},[34,117469,221],{"class":55},[34,117471,115159],{"class":40},[103,117473,117474,117475,30031],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[31,117476,117240],{},[24,117478,117480],{"className":26,"code":117479,"language":28,"meta":29,"style":29},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[31,117481,117482],{"__ignoreMap":29},[34,117483,117484,117486,117488,117490,117492,117494,117496],{"class":36,"line":37},[34,117485,108805],{"class":40},[34,117487,221],{"class":55},[34,117489,108810],{"class":40},[34,117491,32465],{"class":44},[34,117493,116081],{"class":40},[34,117495,32465],{"class":44},[34,117497,116086],{"class":40},[103,117499,117500],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[24,117502,117504],{"className":26,"code":117503,"language":28,"meta":29,"style":29},"self.data.ctrl[:] = action\n",[31,117505,117506],{"__ignoreMap":29},[34,117507,117508,117510,117512,117514],{"class":36,"line":37},[34,117509,32465],{"class":44},[34,117511,116097],{"class":40},[34,117513,221],{"class":55},[34,117515,108833],{"class":40},[103,117517,117518],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[24,117520,117522],{"className":26,"code":117521,"language":28,"meta":29,"style":29},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[31,117523,117524,117540],{"__ignoreMap":29},[34,117525,117526,117528,117530,117532,117534,117536,117538],{"class":36,"line":37},[34,117527,4678],{"class":55},[34,117529,102864],{"class":40},[34,117531,27689],{"class":55},[34,117533,34084],{"class":44},[34,117535,286],{"class":40},[34,117537,32465],{"class":44},[34,117539,116118],{"class":40},[34,117541,117542,117545,117547,117549,117551],{"class":36,"line":165},[34,117543,117544],{"class":40},"    mujoco.mj_step(",[34,117546,32465],{"class":44},[34,117548,115944],{"class":40},[34,117550,32465],{"class":44},[34,117552,115949],{"class":40},[103,117554,117555,117556,117559,117560,117562,117563,30031],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[31,117557,117558],{},"frame_skip=5","，所以外部调用一次 ",[31,117561,115240],{},"，内部实际执行 5 次 ",[31,117564,102578],{},[24,117566,117568],{"className":26,"code":117567,"language":28,"meta":29,"style":29},"self.steps += 1\n",[31,117569,117570],{"__ignoreMap":29},[34,117571,117572,117574,117576,117578],{"class":36,"line":37},[34,117573,32465],{"class":44},[34,117575,115069],{"class":40},[34,117577,11127],{"class":55},[34,117579,57338],{"class":44},[103,117581,117582],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[24,117584,117586],{"className":26,"code":117585,"language":28,"meta":29,"style":29},"obs = self._get_obs()\nreward = self._get_reward()\n",[31,117587,117588,117598],{"__ignoreMap":29},[34,117589,117590,117592,117594,117596],{"class":36,"line":37},[34,117591,112217],{"class":40},[34,117593,221],{"class":55},[34,117595,40514],{"class":44},[34,117597,116160],{"class":40},[34,117599,117600,117602,117604,117606],{"class":36,"line":165},[34,117601,112368],{"class":40},[34,117603,221],{"class":55},[34,117605,40514],{"class":44},[34,117607,116171],{"class":40},[103,117609,117610],{},"计算新的观测和奖励。",[24,117612,117614],{"className":26,"code":117613,"language":28,"meta":29,"style":29},"dist = float(np.linalg.norm(tip - target))\n",[31,117615,117616],{"__ignoreMap":29},[34,117617,117618,117620,117622,117624,117626,117628],{"class":36,"line":37},[34,117619,112959],{"class":40},[34,117621,221],{"class":55},[34,117623,111160],{"class":44},[34,117625,116214],{"class":40},[34,117627,2327],{"class":55},[34,117629,116219],{"class":40},[103,117631,117632],{},"计算末端到目标的距离，并转换成 Python float。",[24,117634,117635],{"className":26,"code":115040,"language":28,"meta":29,"style":29},[31,117636,117637,117649],{"__ignoreMap":29},[34,117638,117639,117641,117643,117645,117647],{"class":36,"line":37},[34,117640,115047],{"class":40},[34,117642,221],{"class":55},[34,117644,115052],{"class":40},[34,117646,2701],{"class":55},[34,117648,115057],{"class":44},[34,117650,117651,117653,117655,117657,117659,117661,117663],{"class":36,"line":165},[34,117652,115062],{"class":40},[34,117654,221],{"class":55},[34,117656,40514],{"class":44},[34,117658,115069],{"class":40},[34,117660,3364],{"class":55},[34,117662,40514],{"class":44},[34,117664,115076],{"class":40},[103,117666,117667],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[24,117669,117671],{"className":26,"code":117670,"language":28,"meta":29,"style":29},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[31,117672,117673,117686],{"__ignoreMap":29},[34,117674,117675,117678,117680,117682,117684],{"class":36,"line":37},[34,117676,117677],{"class":40},"info ",[34,117679,221],{"class":55},[34,117681,6100],{"class":40},[34,117683,116265],{"class":504},[34,117685,116268],{"class":40},[34,117687,117688,117690],{"class":36,"line":165},[34,117689,18692],{"class":55},[34,117691,116275],{"class":40},[103,117693,117694,117697],{},[31,117695,117696],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[24,117699,117701],{"className":26,"code":117700,"language":28,"meta":29,"style":29},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[31,117702,117703,117712],{"__ignoreMap":29},[34,117704,117705,117708,117710],{"class":36,"line":37},[34,117706,117707],{"class":40},"env ",[34,117709,221],{"class":55},[34,117711,116305],{"class":40},[34,117713,117714,117716,117718,117720,117722,117724,117726],{"class":36,"line":165},[34,117715,114763],{"class":40},[34,117717,221],{"class":55},[34,117719,116315],{"class":40},[34,117721,115929],{"class":51},[34,117723,221],{"class":55},[34,117725,177],{"class":44},[34,117727,101],{"class":40},[103,117729,117730,117731,117734],{},"创建环境并重置。",[31,117732,117733],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[24,117736,117738],{"className":26,"code":117737,"language":28,"meta":29,"style":29},"action = env.action_space.sample()\n",[31,117739,117740],{"__ignoreMap":29},[34,117741,117742,117744,117746],{"class":36,"line":37},[34,117743,108805],{"class":40},[34,117745,221],{"class":55},[34,117747,116384],{"class":40},[103,117749,117750],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117752,103679],{"id":103678},[103,117754,106847],{},[24,117756,117759],{"className":117757,"code":117758,"language":6838,"meta":29},[6836],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[31,117760,117758],{"__ignoreMap":29},[103,117762,117763],{},"这个环境已经具备强化学习环境的基本结构。",[103,117765,117766],{},"主函数里使用随机动作：",[24,117768,117769],{"className":26,"code":117737,"language":28,"meta":29,"style":29},[31,117770,117771],{"__ignoreMap":29},[34,117772,117773,117775,117777],{"class":36,"line":37},[34,117774,108805],{"class":40},[34,117776,221],{"class":55},[34,117778,116384],{"class":40},[103,117780,117781],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117783,103711],{"id":103710},[1772,117785,117786,117789,117795,117804,117813,117822,117828],{},[1775,117787,117788],{},"运行程序。",[1775,117790,117791,117792,30031],{},"确认 ",[31,117793,117794],{},"obs.shape == (10,)",[1775,117796,112544,117797,117800,117801,30031],{},[31,117798,117799],{},"env.action_space","，应类似 ",[31,117802,117803],{},"Box(-1.0, 1.0, (2,), float32)",[1775,117805,106948,117806,117809,117810,30031],{},[31,117807,117808],{},"self.max_steps = 10","，确认环境会更快 ",[31,117811,117812],{},"truncated=True",[1775,117814,103774,117815,103777,117818,117821],{},[31,117816,117817],{},"terminated = dist \u003C 0.05",[31,117819,117820],{},"dist \u003C 0.2","，观察是否更容易结束。",[1775,117823,103774,117824,117827],{},[31,117825,117826],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[1775,117829,117830,117831,117833,117834,117837],{},"在 ",[31,117832,117696],{}," 里加入 ",[31,117835,117836],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117839,103816],{"id":103815},[19,117841,117843],{"id":117842},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[103,117845,117846,117847,117849],{},"Gymnasium 的 ",[31,117848,108497],{}," 返回 5 个值:",[24,117851,117853],{"className":26,"code":117852,"language":28,"meta":29,"style":29},"obs, reward, terminated, truncated, info\n",[31,117854,117855],{"__ignoreMap":29},[34,117856,117857],{"class":36,"line":37},[34,117858,117852],{"class":40},[103,117860,117861],{},"不是旧 Gym 的 4 个值。",[19,117863,117865,117868],{"id":117864},"datactrl-action-维度错误",[31,117866,117867],{},"data.ctrl[:] = action"," 维度错误",[103,117870,103886],{},[24,117872,117874],{"className":26,"code":117873,"language":28,"meta":29,"style":29},"print(self.model.nu)\nprint(action.shape)\n",[31,117875,117876,117887],{"__ignoreMap":29},[34,117877,117878,117880,117882,117884],{"class":36,"line":37},[34,117879,723],{"class":44},[34,117881,286],{"class":40},[34,117883,32465],{"class":44},[34,117885,117886],{"class":40},".model.nu)\n",[34,117888,117889,117891],{"class":36,"line":165},[34,117890,723],{"class":44},[34,117892,117893],{"class":40},"(action.shape)\n",[103,117895,117896],{},"两者必须匹配。",[19,117898,117900],{"id":117899},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[103,117902,103825],{},[24,117904,117906],{"className":26,"code":117905,"language":28,"meta":29,"style":29},"mujoco.mj_forward(self.model, self.data)\n",[31,117907,117908],{"__ignoreMap":29},[34,117909,117910,117913,117915,117917,117919],{"class":36,"line":37},[34,117911,117912],{"class":40},"mujoco.mj_forward(",[34,117914,32465],{"class":44},[34,117916,115944],{"class":40},[34,117918,32465],{"class":44},[34,117920,115949],{"class":40},[19,117922,117924,117926],{"id":117923},"observation_space-维度和-obs-不一致",[31,117925,114963],{}," 维度和 obs 不一致",[103,117928,103938],{},[24,117930,117932],{"className":26,"code":117931,"language":28,"meta":29,"style":29},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[31,117933,117934,117944,117951],{"__ignoreMap":29},[34,117935,117936,117938,117940,117942],{"class":36,"line":37},[34,117937,112217],{"class":40},[34,117939,221],{"class":55},[34,117941,40514],{"class":44},[34,117943,116160],{"class":40},[34,117945,117946,117948],{"class":36,"line":165},[34,117947,723],{"class":44},[34,117949,117950],{"class":40},"(obs.shape)\n",[34,117952,117953,117955,117957,117959],{"class":36,"line":171},[34,117954,723],{"class":44},[34,117956,286],{"class":40},[34,117958,32465],{"class":44},[34,117960,117961],{"class":40},".observation_space.shape)\n",[103,117963,117964],{},"两者必须一致。本章观测是：",[24,117966,117969],{"className":117967,"code":117968,"language":6838,"meta":29},[6836],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[31,117970,117968],{"__ignoreMap":29},[19,117972,117974],{"id":117973},"action-超过范围","action 超过范围",[103,117976,117977],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[24,117979,117980],{"className":26,"code":117479,"language":28,"meta":29,"style":29},[31,117981,117982],{"__ignoreMap":29},[34,117983,117984,117986,117988,117990,117992,117994,117996],{"class":36,"line":37},[34,117985,108805],{"class":40},[34,117987,221],{"class":55},[34,117989,108810],{"class":40},[34,117991,32465],{"class":44},[34,117993,116081],{"class":40},[34,117995,32465],{"class":44},[34,117997,116086],{"class":40},[103,117999,118000,118001,30031],{},"这能避免无效动作直接写入 ",[31,118002,102439],{},[19,118004,118006],{"id":118005},"忘记返回-info","忘记返回 info",[103,118008,117846,118009,102381,118011,118013],{},[31,118010,71695],{},[31,118012,108497],{}," 都会返回 info：",[24,118015,118016],{"className":26,"code":114756,"language":28,"meta":29,"style":29},[31,118017,118018,118026],{"__ignoreMap":29},[34,118019,118020,118022,118024],{"class":36,"line":37},[34,118021,114763],{"class":40},[34,118023,221],{"class":55},[34,118025,114768],{"class":40},[34,118027,118028,118030,118032],{"class":36,"line":165},[34,118029,114773],{"class":40},[34,118031,221],{"class":55},[34,118033,114778],{"class":40},[103,118035,118036,118037,30031],{},"即使暂时没有额外信息，也返回 ",[31,118038,34100],{},[14,118040,118042],{"id":118041},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[103,118044,118045],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[1772,118047,118048,118051,118054,118057,118060,118063],{},[1775,118049,118050],{},"更稳定的 reward。",[1775,118052,118053],{},"合理的 episode 长度。",[1775,118055,118056],{},"可重复的随机目标采样。",[1775,118058,118059],{},"render 接口。",[1775,118061,118062],{},"环境注册代码。",[1775,118064,118065],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[103,118067,118068],{},"如果只是自己写训练循环，最小形式是：",[24,118070,118072],{"className":26,"code":118071,"language":28,"meta":29,"style":29},"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",[31,118073,118074,118082,118098,118102,118118,118127,118136,118146],{"__ignoreMap":29},[34,118075,118076,118078,118080],{"class":36,"line":37},[34,118077,117707],{"class":40},[34,118079,221],{"class":55},[34,118081,116305],{"class":40},[34,118083,118084,118086,118088,118090,118092,118094,118096],{"class":36,"line":165},[34,118085,114763],{"class":40},[34,118087,221],{"class":55},[34,118089,116315],{"class":40},[34,118091,115929],{"class":51},[34,118093,221],{"class":55},[34,118095,177],{"class":44},[34,118097,101],{"class":40},[34,118099,118100],{"class":36,"line":171},[34,118101,1475],{"emptyLinePlaceholder":1474},[34,118103,118104,118106,118108,118110,118112,118114,118116],{"class":36,"line":182},[34,118105,4678],{"class":55},[34,118107,102864],{"class":40},[34,118109,27689],{"class":55},[34,118111,34084],{"class":44},[34,118113,286],{"class":40},[34,118115,8060],{"class":44},[34,118117,32428],{"class":40},[34,118119,118120,118123,118125],{"class":36,"line":188},[34,118121,118122],{"class":40},"    action ",[34,118124,221],{"class":55},[34,118126,116384],{"class":40},[34,118128,118129,118132,118134],{"class":36,"line":518},[34,118130,118131],{"class":40},"    obs, reward, terminated, truncated, info ",[34,118133,221],{"class":55},[34,118135,114778],{"class":40},[34,118137,118138,118140,118142,118144],{"class":36,"line":524},[34,118139,4754],{"class":55},[34,118141,116450],{"class":40},[34,118143,116453],{"class":55},[34,118145,116456],{"class":40},[34,118147,118148,118151,118153],{"class":36,"line":530},[34,118149,118150],{"class":40},"        obs, info ",[34,118152,221],{"class":55},[34,118154,114768],{"class":40},[14,118156,118158],{"id":118157},"_9本章小结","9.本章小结",[103,118160,118161],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[24,118163,118166],{"className":118164,"code":118165,"language":6838,"meta":29},[6836],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[31,118167,118165],{"__ignoreMap":29},[103,118169,118170],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1711,118172,118173],{},"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":29,"searchDepth":165,"depth":165,"links":118175},[118176,118177,118178,118185,118189,118190,118191,118201,118202],{"id":102009,"depth":165,"text":102010},{"id":102132,"depth":165,"text":102133},{"id":102407,"depth":165,"text":102408,"children":118179},[118180,118182,118184],{"id":114987,"depth":171,"text":118181},"terminated 和 truncated 的区别",{"id":115090,"depth":171,"text":118183},"observation_space 和 action_space",{"id":115217,"depth":171,"text":115218},{"id":102615,"depth":165,"text":102616,"children":118186},[118187,118188],{"id":102935,"depth":171,"text":102935},{"id":103071,"depth":171,"text":103071},{"id":103678,"depth":165,"text":103679},{"id":103710,"depth":165,"text":103711},{"id":103815,"depth":165,"text":103816,"children":118192},[118193,118194,118196,118197,118199,118200],{"id":117842,"depth":171,"text":117843},{"id":117864,"depth":171,"text":118195},"data.ctrl[:] = action 维度错误",{"id":117899,"depth":171,"text":117900},{"id":117923,"depth":171,"text":118198},"observation_space 维度和 obs 不一致",{"id":117973,"depth":171,"text":117974},{"id":118005,"depth":171,"text":118006},{"id":118041,"depth":165,"text":118042},{"id":118157,"depth":165,"text":118158},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114740,"description":29},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118209,"title":118210,"body":118211,"description":118634,"extension":1745,"meta":118635,"navigation":1474,"path":118636,"seo":118637,"stem":118638,"__hash__":118639},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118212,"toc":118624},[118213,118217,118220,118223,118243,118249,118255,118265,118268,118271,118291,118294,118298,118301,118307,118310,118324,118327,118330,118404,118407,118413,118416,118439,118442,118492,118495,118501,118504,118507,118510,118529,118532,118538,118541,118544,118547,118567,118570,118573,118576,118621],[10,118214,118216],{"id":118215},"mujoco-学习","MuJoCo 学习",[103,118218,118219],{},"初版",[103,118221,118222],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[1772,118224,118225,118228,118231,118240],{},[1775,118226,118227],{},"MuJoCo 模型文件在描述什么。",[1775,118229,118230],{},"Python 代码怎样读取和推进仿真。",[1775,118232,118233,2021,118235,2021,118237,118239],{},[31,118234,105393],{},[31,118236,105723],{},[31,118238,105726],{}," 这些数组为什么重要。",[1775,118241,118242],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[103,118244,118245,118246,118248],{},"默认环境为 Fedora 44、Python >= 3.10、",[31,118247,102390],{}," 官方 Python bindings。",[103,118250,118251,118252,118254],{},"注意：本文禁止使用 ",[31,118253,102375],{},"。所有示例均使用：",[24,118256,118257],{"className":26,"code":102941,"language":28,"meta":29,"style":29},[31,118258,118259],{"__ignoreMap":29},[34,118260,118261,118263],{"class":36,"line":37},[34,118262,32036],{"class":55},[34,118264,102664],{"class":40},[14,118266,118267],{"id":118267},"适合谁阅读",[103,118269,118270],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[1772,118272,118273,118276,118279,118282],{},[1775,118274,118275],{},"没学过 MuJoCo，只会一点 Python。",[1775,118277,118278],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[1775,118280,118281],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[1775,118283,118284,118285,118287,118288,118290],{},"以前接触过 ",[31,118286,102375],{},"，现在想迁移到官方 ",[31,118289,102384],{}," Python bindings。",[103,118292,118293],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118295,118297],{"id":118296},"mujoco-到底是什么","MuJoCo 到底是什么",[103,118299,118300],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[24,118302,118305],{"className":118303,"code":118304,"language":6838,"meta":29},[6836],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[31,118306,118304],{"__ignoreMap":29},[103,118308,118309],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[1772,118311,118312,118315,118318,118321],{},[1775,118313,118314],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[1775,118316,118317],{},"快速测试控制算法，不必一开始就上真实机器人。",[1775,118319,118320],{},"生成强化学习环境。",[1775,118322,118323],{},"采集状态、动作、图像、奖励等训练数据。",[14,118325,118326],{"id":118326},"学习前的心智模型",[103,118328,118329],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1948,118331,118332,118344],{},[1951,118333,118334],{},[1954,118335,118336,118339,118342],{},[1957,118337,118338],{"align":25381},"部分",[1957,118340,118341],{"align":25381},"负责什么",[1957,118343,22833],{"align":25381},[1994,118345,118346,118357,118369,118381,118393],{},[1954,118347,118348,118351,118354],{},[1999,118349,118350],{"align":25381},"MJCF XML",[1999,118352,118353],{"align":25381},"定义世界和机器人结构",[1999,118355,118356],{"align":25381},"地面、盒子、关节、电机、摄像头",[1954,118358,118359,118363,118366],{},[1999,118360,118361],{"align":25381},[31,118362,102072],{},[1999,118364,118365],{"align":25381},"编译后的静态模型",[1999,118367,118368],{"align":25381},"有几个关节、有几个电机、时间步长是多少",[1954,118370,118371,118375,118378],{},[1999,118372,118373],{"align":25381},[31,118374,102082],{},[1999,118376,118377],{"align":25381},"运行中的动态状态",[1999,118379,118380],{"align":25381},"当前时间、位置、速度、电机输入",[1954,118382,118383,118387,118390],{},[1999,118384,118385],{"align":25381},[31,118386,102578],{},[1999,118388,118389],{"align":25381},"推进一步物理仿真",[1999,118391,118392],{"align":25381},"根据重力、力、碰撞更新状态",[1954,118394,118395,118398,118401],{},[1999,118396,118397],{"align":25381},"Viewer \u002F Renderer",[1999,118399,118400],{"align":25381},"把仿真显示出来",[1999,118402,118403],{"align":25381},"打开窗口或保存图片",[103,118405,118406],{},"一句话总结：",[24,118408,118411],{"className":118409,"code":118410,"language":6838,"meta":29},[6836],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[31,118412,118410],{"__ignoreMap":29},[103,118414,118415],{},"参考来源：",[2798,118417,118418,118425,118432],{},[1775,118419,118420,118421],{},"MuJoCo Python 官方文档：",[236,118422,118423],{"href":118423,"rel":118424},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25510],[1775,118426,118427,118428],{},"MuJoCo XML Reference：",[236,118429,118430],{"href":118430,"rel":118431},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25510],[1775,118433,118434,118435],{},"MuJoCo Overview：",[236,118436,118437],{"href":118437,"rel":118438},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25510],[14,118440,118441],{"id":118441},"章节目录",[1772,118443,118444,118450,118456,118462,118468,118474,118480,118486],{},[1775,118445,118446],{},[236,118447,118449],{"href":118448},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[1775,118451,118452],{},[236,118453,118455],{"href":118454},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[1775,118457,118458],{},[236,118459,118461],{"href":118460},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[1775,118463,118464],{},[236,118465,118467],{"href":118466},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[1775,118469,118470],{},[236,118471,118473],{"href":118472},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[1775,118475,118476],{},[236,118477,118479],{"href":118478},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[1775,118481,118482],{},[236,118483,118485],{"href":118484},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[1775,118487,118488],{},[236,118489,118491],{"href":118490},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118493,118494],{"id":118494},"推荐学习路线",[24,118496,118499],{"className":118497,"code":118498,"language":6838,"meta":29},[6836],"环境安装\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",[31,118500,118498],{"__ignoreMap":29},[103,118502,118503],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118505,118506],{"id":118506},"建议的目录结构",[103,118508,118509],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[24,118511,118513],{"className":25467,"code":118512,"language":25469,"meta":29,"style":29},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[31,118514,118515,118523],{"__ignoreMap":29},[34,118516,118517,118519,118521],{"class":36,"line":37},[34,118518,102629],{"class":3617},[34,118520,30862],{"class":44},[34,118522,102634],{"class":504},[34,118524,118525,118527],{"class":36,"line":165},[34,118526,102639],{"class":44},[34,118528,102634],{"class":504},[103,118530,118531],{},"每一章的代码都单独保存：",[24,118533,118536],{"className":118534,"code":118535,"language":6838,"meta":29},[6836],"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",[31,118537,118535],{"__ignoreMap":29},[103,118539,118540],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118542,118543],{"id":118543},"学习方法",[103,118545,118546],{},"每章建议按这个顺序操作：",[1772,118548,118549,118552,118555,118558,118561,118564],{},[1775,118550,118551],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[1775,118553,118554],{},"复制最小可运行代码，保存成指定文件。",[1775,118556,118557],{},"运行代码，确认没有报错。",[1775,118559,118560],{},"对照“运行结果说明”理解输出。",[1775,118562,118563],{},"做“验证步骤”，主动改一两个参数。",[1775,118565,118566],{},"遇到报错先看“常见错误与解决方案”。",[103,118568,118569],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118571,118572],{"id":118572},"全局排错顺序",[103,118574,118575],{},"遇到问题时，按下面顺序查：",[1772,118577,118578,118584,118590,118595,118598,118601,118608,118618],{},[1775,118579,118580,118581],{},"Python 环境是否激活：",[31,118582,118583],{},"which python",[1775,118585,118586,118587],{},"MuJoCo 是否能导入：",[31,118588,118589],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[1775,118591,118592,118593],{},"是否误装了 ",[31,118594,102375],{},[1775,118596,118597],{},"XML 标签是否闭合、属性是否拼写正确",[1775,118599,118600],{},"actuator 引用的 joint 名字是否存在",[1775,118602,118603,118605,118606],{},[31,118604,102439],{}," 的长度是否等于 ",[31,118607,103521],{},[1775,118609,106948,118610,84176,118612,118614,118615],{},[31,118611,105393],{},[31,118613,105723],{}," 后是否调用了 ",[31,118616,118617],{},"mujoco.mj_forward",[1775,118619,118620],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1711,118622,118623],{},"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":29,"searchDepth":165,"depth":165,"links":118625},[118626,118627,118628,118629,118630,118631,118632,118633],{"id":118267,"depth":165,"text":118267},{"id":118296,"depth":165,"text":118297},{"id":118326,"depth":165,"text":118326},{"id":118441,"depth":165,"text":118441},{"id":118494,"depth":165,"text":118494},{"id":118506,"depth":165,"text":118506},{"id":118543,"depth":165,"text":118543},{"id":118572,"depth":165,"text":118572},"仿真搭建。",{"category":25023},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118210,"description":118634},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118641,"title":118642,"body":118643,"description":1744,"extension":1745,"meta":119098,"navigation":1474,"path":119099,"seo":119100,"stem":119101,"__hash__":119102},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118644,"toc":119096},[118645,118648,118651,118657,119093],[10,118646,118642],{"id":118647},"_1-最常用的基本操作更新",[103,118649,118650],{},"装linux系统教程：",[103,118652,118653],{},[236,118654,118655],{"href":118655,"rel":118656},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25510],[24,118658,118662],{"className":118659,"code":118660,"language":118661,"meta":29,"style":29},"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",[31,118663,118664,118669,118674,118683,118688,118697,118702,118722,118727,118738,118743,118752,118757,118785,118790,118809,118814,118833,118837,118842,118858,118862,118867,118897,118901,118906,118922,118926,118931,118946,118950,118955,118971,118975,118980,118992,119004,119008,119013,119030,119034,119039,119057,119061,119066,119075,119079,119084],{"__ignoreMap":29},[34,118665,118666],{"class":36,"line":37},[34,118667,118668],{"class":161},"#更新相关的知识\n",[34,118670,118671],{"class":36,"line":165},[34,118672,118673],{"class":161},"# 更新软件包列表（从服务器获取最新软件信息）\n",[34,118675,118676,118678,118681],{"class":36,"line":171},[34,118677,26222],{"class":3617},[34,118679,118680],{"class":504}," apt",[34,118682,27888],{"class":504},[34,118684,118685],{"class":36,"line":182},[34,118686,118687],{"class":161},"# 升级所有可更新的软件包（不删除旧包）\n",[34,118689,118690,118692,118694],{"class":36,"line":188},[34,118691,26222],{"class":3617},[34,118693,118680],{"class":504},[34,118695,118696],{"class":504}," upgrade\n",[34,118698,118699],{"class":36,"line":518},[34,118700,118701],{"class":161},"#更新和升级软件包\n",[34,118703,118704,118706,118708,118711,118713,118715,118717,118720],{"class":36,"line":524},[34,118705,26222],{"class":3617},[34,118707,118680],{"class":504},[34,118709,118710],{"class":504}," update",[34,118712,27836],{"class":40},[34,118714,26222],{"class":3617},[34,118716,118680],{"class":504},[34,118718,118719],{"class":504}," upgrade",[34,118721,102344],{"class":44},[34,118723,118724],{"class":36,"line":530},[34,118725,118726],{"class":161},"#列出可更新的软件包及版本信息\n",[34,118728,118729,118732,118735],{"class":36,"line":624},[34,118730,118731],{"class":3617},"apt",[34,118733,118734],{"class":504}," list",[34,118736,118737],{"class":44}," --upgradable\n",[34,118739,118740],{"class":36,"line":630},[34,118741,118742],{"class":161},"#彻底升级（处理依赖关系，可能删除旧包）\n",[34,118744,118745,118747,118749],{"class":36,"line":636},[34,118746,26222],{"class":3617},[34,118748,118680],{"class":504},[34,118750,118751],{"class":504}," full-upgrade\n",[34,118753,118754],{"class":36,"line":1513},[34,118755,118756],{"class":161},"#设置指定版本\n",[34,118758,118759,118761,118763,118765,118767,118770,118772,118774,118776,118778,118781,118783],{"class":36,"line":1519},[34,118760,26222],{"class":3617},[34,118762,118680],{"class":504},[34,118764,25479],{"class":504},[34,118766,30548],{"class":55},[34,118768,118769],{"class":504},"package_nam",[34,118771,1887],{"class":40},[34,118773,2751],{"class":55},[34,118775,221],{"class":504},[34,118777,2701],{"class":55},[34,118779,118780],{"class":504},"version_numbe",[34,118782,2465],{"class":40},[34,118784,52946],{"class":55},[34,118786,118787],{"class":36,"line":3283},[34,118788,118789],{"class":161},"#只安装软件包不升级\n",[34,118791,118792,118794,118796,118798,118800,118802,118804,118806],{"class":36,"line":3297},[34,118793,26222],{"class":3617},[34,118795,118680],{"class":504},[34,118797,25479],{"class":504},[34,118799,30548],{"class":55},[34,118801,118769],{"class":504},[34,118803,1887],{"class":40},[34,118805,2751],{"class":55},[34,118807,118808],{"class":44}," --no-upgrade\n",[34,118810,118811],{"class":36,"line":3302},[34,118812,118813],{"class":161},"#只升级，不存在就不安装\n",[34,118815,118816,118818,118820,118822,118824,118826,118828,118830],{"class":36,"line":3308},[34,118817,26222],{"class":3617},[34,118819,118680],{"class":504},[34,118821,25479],{"class":504},[34,118823,30548],{"class":55},[34,118825,118769],{"class":504},[34,118827,1887],{"class":40},[34,118829,2751],{"class":55},[34,118831,118832],{"class":44}," --only-upgrade\n",[34,118834,118835],{"class":36,"line":3328},[34,118836,1475],{"emptyLinePlaceholder":1474},[34,118838,118839],{"class":36,"line":3333},[34,118840,118841],{"class":161},"#安装指定的软件命令\n",[34,118843,118844,118846,118848,118850,118852,118854,118856],{"class":36,"line":3347},[34,118845,26222],{"class":3617},[34,118847,118680],{"class":504},[34,118849,25479],{"class":504},[34,118851,30548],{"class":55},[34,118853,118769],{"class":504},[34,118855,1887],{"class":40},[34,118857,52946],{"class":55},[34,118859,118860],{"class":36,"line":3352},[34,118861,1475],{"emptyLinePlaceholder":1474},[34,118863,118864],{"class":36,"line":3381},[34,118865,118866],{"class":161},"#安装多个软件包\n",[34,118868,118869,118871,118873,118875,118877,118880,118883,118885,118887,118890,118892,118894],{"class":36,"line":3386},[34,118870,26222],{"class":3617},[34,118872,118680],{"class":504},[34,118874,25479],{"class":504},[34,118876,30548],{"class":55},[34,118878,118879],{"class":504},"package_",[34,118881,118882],{"class":55},"1>",[34,118884,30548],{"class":55},[34,118886,118879],{"class":504},[34,118888,118889],{"class":55},"2>",[34,118891,30548],{"class":55},[34,118893,118879],{"class":504},[34,118895,118896],{"class":55},"3>\n",[34,118898,118899],{"class":36,"line":3403},[34,118900,1475],{"emptyLinePlaceholder":1474},[34,118902,118903],{"class":36,"line":3408},[34,118904,118905],{"class":161},"#更新指定的软件命令\n",[34,118907,118908,118910,118912,118914,118916,118918,118920],{"class":36,"line":3413},[34,118909,26222],{"class":3617},[34,118911,118680],{"class":504},[34,118913,118710],{"class":504},[34,118915,30548],{"class":55},[34,118917,118769],{"class":504},[34,118919,1887],{"class":40},[34,118921,52946],{"class":55},[34,118923,118924],{"class":36,"line":3418},[34,118925,1475],{"emptyLinePlaceholder":1474},[34,118927,118928],{"class":36,"line":3432},[34,118929,118930],{"class":161},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[34,118932,118933,118935,118938,118940,118942,118944],{"class":36,"line":3437},[34,118934,118731],{"class":3617},[34,118936,118937],{"class":504}," show",[34,118939,30548],{"class":55},[34,118941,118769],{"class":504},[34,118943,1887],{"class":40},[34,118945,52946],{"class":55},[34,118947,118948],{"class":36,"line":4230},[34,118949,1475],{"emptyLinePlaceholder":1474},[34,118951,118952],{"class":36,"line":4244},[34,118953,118954],{"class":161},"#删除软件包命令\n",[34,118956,118957,118959,118961,118963,118965,118967,118969],{"class":36,"line":4252},[34,118958,26222],{"class":3617},[34,118960,118680],{"class":504},[34,118962,27725],{"class":504},[34,118964,30548],{"class":55},[34,118966,118769],{"class":504},[34,118968,1887],{"class":40},[34,118970,52946],{"class":55},[34,118972,118973],{"class":36,"line":4257},[34,118974,1475],{"emptyLinePlaceholder":1474},[34,118976,118977],{"class":36,"line":4263},[34,118978,118979],{"class":161},"# 清理旧版本和缓存（释放磁盘空间）\n",[34,118981,118982,118984,118986,118989],{"class":36,"line":4269},[34,118983,26222],{"class":3617},[34,118985,118680],{"class":504},[34,118987,118988],{"class":504}," autoremove",[34,118990,118991],{"class":161},"  # 删除不再需要的依赖和库文件\n",[34,118993,118994,118996,118998,119001],{"class":36,"line":4274},[34,118995,26222],{"class":3617},[34,118997,118680],{"class":504},[34,118999,119000],{"class":504}," clean",[34,119002,119003],{"class":161},"       # 清理下载的缓存包\n",[34,119005,119006],{"class":36,"line":9598},[34,119007,1475],{"emptyLinePlaceholder":1474},[34,119009,119010],{"class":36,"line":9622},[34,119011,119012],{"class":161},"#移除软件包及配置文件\n",[34,119014,119015,119017,119019,119022,119024,119026,119028],{"class":36,"line":9627},[34,119016,26222],{"class":3617},[34,119018,118680],{"class":504},[34,119020,119021],{"class":504}," purge",[34,119023,30548],{"class":55},[34,119025,118769],{"class":504},[34,119027,1887],{"class":40},[34,119029,52946],{"class":55},[34,119031,119032],{"class":36,"line":9633},[34,119033,1475],{"emptyLinePlaceholder":1474},[34,119035,119036],{"class":36,"line":9660},[34,119037,119038],{"class":161},"#查找软件包命令\n",[34,119040,119041,119043,119045,119048,119050,119053,119055],{"class":36,"line":9665},[34,119042,26222],{"class":3617},[34,119044,118680],{"class":504},[34,119046,119047],{"class":504}," search",[34,119049,30548],{"class":55},[34,119051,119052],{"class":504},"keywor",[34,119054,2119],{"class":40},[34,119056,52946],{"class":55},[34,119058,119059],{"class":36,"line":9671},[34,119060,1475],{"emptyLinePlaceholder":1474},[34,119062,119063],{"class":36,"line":9683},[34,119064,119065],{"class":161},"#列出所有已安装的包\n",[34,119067,119068,119070,119072],{"class":36,"line":9695},[34,119069,118731],{"class":3617},[34,119071,118734],{"class":504},[34,119073,119074],{"class":44}," --installed\n",[34,119076,119077],{"class":36,"line":9707},[34,119078,1475],{"emptyLinePlaceholder":1474},[34,119080,119081],{"class":36,"line":11366},[34,119082,119083],{"class":161},"#列出所有已安装的包的版本信息\n",[34,119085,119086,119088,119090],{"class":36,"line":11391},[34,119087,118731],{"class":3617},[34,119089,118734],{"class":504},[34,119091,119092],{"class":44}," --all-versions\n",[1711,119094,119095],{},"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":29,"searchDepth":165,"depth":165,"links":119097},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118642,"description":1744},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119104,"title":119105,"body":119106,"description":1744,"extension":1745,"meta":119847,"navigation":1474,"path":119848,"seo":119849,"stem":119850,"__hash__":119851},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119107,"toc":119834},[119108,119111,119115,119118,119124,119128,119132,119138,119143,119148,119153,119158,119163,119166,119169,119172,119175,119179,119182,119187,119190,119195,119198,119203,119210,119213,119216,119219,119222,119225,119236,119240,119244,119249,119254,119258,119263,119267,119272,119276,119280,119285,119288,119333,119338,119342,119346,119351,119357,119362,119372,119377,119387,119392,119397,119424,119428,119431,119436,119439,119464,119468,119473,119476,119481,119486,119506,119511,119514,119529,119533,119586,119589,119594,119598,119601,119616,119619,119622,119627,119631,119635,119638,119642,119646,119649,119654,119659,119663,119670,119678,119681,119688,119693,119698,119701,119706,119713,119718,119725,119729,119731,119736,119740,119743,119746,119751,119754,119759,119762,119767,119772,119777,119781,119786,119790,119831],[10,119109,119105],{"id":119110},"_2-linux装机教程",[14,119112,119114],{"id":119113},"_21-实体机","2.1 实体机",[103,119116,119117],{},"使用清华源：（Ubuntu24.04）",[103,119119,119120],{},[236,119121,119122],{"href":119122,"rel":119123},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25510],[14,119125,119127],{"id":119126},"_22-普通虚拟机","2.2 普通虚拟机",[19,119129,119131],{"id":119130},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[103,119133,119134],{},[236,119135,119136],{"href":119136,"rel":119137},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25510],[103,119139,119140],{},[109,119141],{"alt":29,"src":119142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[103,119144,119145],{},[109,119146],{"alt":29,"src":119147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[103,119149,119150],{},[109,119151],{"alt":29,"src":119152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[103,119154,119155],{},[109,119156],{"alt":29,"src":119157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[103,119159,119160],{},[109,119161],{"alt":29,"src":119162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[103,119164,119165],{},"内存4G（4096MB）；",[103,119167,119168],{},"CPU给4个核；",[103,119170,119171],{},"硬盘动态分配60G；",[103,119173,119174],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[19,119176,119178],{"id":119177},"_222-安装ubuntu","2.2.2 安装Ubuntu",[103,119180,119181],{},"按照1.1的步骤下载Ubuntu",[103,119183,119184],{},[109,119185],{"alt":29,"src":119186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[103,119188,119189],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[103,119191,119192],{},[109,119193],{"alt":29,"src":119194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[103,119196,119197],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[103,119199,119200],{},[109,119201],{"alt":29,"src":119202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[103,119204,119205,119206,119209],{},"选择“正常安装”(找不到都用Alt+F7)， ",[1165,119207,119208],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[103,119211,119212],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[103,119214,119215],{},"将改动写入磁盘吗 继续",[103,119217,119218],{},"选择东八区（shanghai，大致在地图上点一下），继续",[103,119220,119221],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[103,119223,119224],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[103,119226,119227,119228,119231,119232,119235],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[1165,119229,119230],{},"除了"," 选不发送系统信息与不升级之外， ",[1165,119233,119234],{},"其它"," 都跳过或前进）",[19,119237,119239],{"id":119238},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[1353,119241,119243],{"id":119242},"_2231-全屏","2.2.3.1 全屏",[103,119245,119246],{},[109,119247],{"alt":29,"src":119248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[103,119250,119251],{},[109,119252],{"alt":29,"src":119253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[1353,119255,119257],{"id":119256},"_2232-文件交换","2.2.3.2 文件交换",[103,119259,119260],{},[109,119261],{"alt":29,"src":119262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[1353,119264,119266],{"id":119265},"_2233-新建文本文档","2.2.3.3 新建文本文档",[103,119268,119269],{},[109,119270],{"alt":29,"src":119271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119273,119275],{"id":119274},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[19,119277,119279],{"id":119278},"_231-简介与优缺点","2.3.1 简介与优缺点",[1772,119281,119282],{},[1775,119283,119284],{},"什么情况下推荐？",[103,119286,119287],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[1772,119289,119290],{"start":165},[1775,119291,119292,119293],{},"优缺点：",[1772,119294,119295,119325],{},[1775,119296,119297,119298],{},"优点：",[1772,119299,119300,119303,119310,119313,119316,119319,119322],{},[1775,119301,119302],{},"WSL2是最好的Linux发行版;(bushi)",[1775,119304,119305,119306,119309],{},"性能损耗极低。且比在Windows上跑深度性能 ",[1165,119307,119308],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[1775,119311,119312],{},"非常方便调用USB设备，可以USB直通;",[1775,119314,119315],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[1775,119317,119318],{},"非常方便Win与WSL2互相传文件等协同操作;",[1775,119320,119321],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[1775,119323,119324],{},"非常方便使用Windows的VScode远程开发;",[1775,119326,119327,119328],{},"缺点：",[1772,119329,119330],{},[1775,119331,119332],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[103,119334,119335],{},[109,119336],{"alt":29,"src":119337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[19,119339,119341],{"id":119340},"_232-安装教程","2.3.2 安装教程",[1353,119343,119345],{"id":119344},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[1772,119347,119348],{},[1775,119349,119350],{},"方法一(图形界面)",[103,119352,119353,119354,26264],{},"用Win+R输入",[31,119355,119356],{},"appwiz.cpl",[103,119358,119359],{},[109,119360],{"alt":29,"src":119361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[103,119363,119364,119365,119368,119369,28119],{},"点击OK进入 ",[1165,119366,119367],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[1165,119370,119371],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[103,119373,119374],{},[109,119375],{"alt":29,"src":119376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[103,119378,119379,119380,102381,119383,119386],{},"选择 ",[1165,119381,119382],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[1165,119384,119385],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[103,119388,119389],{},[109,119390],{"alt":29,"src":119391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[1772,119393,119394],{"start":165},[1775,119395,119396],{},"方法二(命令行)",[24,119398,119402],{"className":119399,"code":119400,"language":119401,"meta":29,"style":29},"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",[31,119403,119404,119409,119414,119419],{"__ignoreMap":29},[34,119405,119406],{"class":36,"line":37},[34,119407,119408],{},"# 开启 Linux 子系统\n",[34,119410,119411],{"class":36,"line":165},[34,119412,119413],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[34,119415,119416],{"class":36,"line":171},[34,119417,119418],{},"# 开启虚拟机平台\n",[34,119420,119421],{"class":36,"line":182},[34,119422,119423],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[1353,119425,119427],{"id":119426},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[103,119429,119430],{},"用管理员权限打开powershell",[103,119432,119433],{},[109,119434],{"alt":29,"src":119435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[103,119437,119438],{},"升级WSL并设置默认版本为WSL2",[24,119440,119442],{"className":119399,"code":119441,"language":119401,"meta":29,"style":29},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[31,119443,119444,119449,119454,119459],{"__ignoreMap":29},[34,119445,119446],{"class":36,"line":37},[34,119447,119448],{},"# 更新 wsl\n",[34,119450,119451],{"class":36,"line":165},[34,119452,119453],{},"wsl --update\n",[34,119455,119456],{"class":36,"line":171},[34,119457,119458],{},"# 将 wsl 版本设置为 wsl2\n",[34,119460,119461],{"class":36,"line":182},[34,119462,119463],{},"wsl --set-default-version 2\n",[1353,119465,119467],{"id":119466},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[1772,119469,119470],{},[1775,119471,119472],{},"方式一(商店下载)",[103,119474,119475],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[103,119477,119478],{},[109,119479],{"alt":29,"src":119480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[1772,119482,119483],{"start":165},[1775,119484,119485],{},"方式二(命令行安装)",[24,119487,119489],{"className":119399,"code":119488,"language":119401,"meta":29,"style":29},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[31,119490,119491,119496,119501],{"__ignoreMap":29},[34,119492,119493],{"class":36,"line":37},[34,119494,119495],{},"# 列出可安装的 Linux 版本\n",[34,119497,119498],{"class":36,"line":165},[34,119499,119500],{},"#（需要科学手段）\n",[34,119502,119503],{"class":36,"line":171},[34,119504,119505],{},"wsl --list --online\n",[103,119507,119508],{},[109,119509],{"alt":29,"src":119510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[103,119512,119513],{},"选择对应发行版并安装",[24,119515,119517],{"className":119399,"code":119516,"language":119401,"meta":29,"style":29},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[31,119518,119519,119524],{"__ignoreMap":29},[34,119520,119521],{"class":36,"line":37},[34,119522,119523],{},"# Ubuntu安装完毕后需要重启系统\n",[34,119525,119526],{"class":36,"line":165},[34,119527,119528],{},"wsl --install -d Ubuntu-24.04\n",[1353,119530,119532],{"id":119531},"_2324-查看系统状态","2.3.2.4 查看系统状态",[24,119534,119536],{"className":119399,"code":119535,"language":119401,"meta":29,"style":29},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[31,119537,119538,119543,119548,119553,119558,119562,119566,119571,119576,119581],{"__ignoreMap":29},[34,119539,119540],{"class":36,"line":37},[34,119541,119542],{},"# 查看 wsl\n",[34,119544,119545],{"class":36,"line":165},[34,119546,119547],{},"wsl -l\n",[34,119549,119550],{"class":36,"line":171},[34,119551,119552],{},"# 查看 wsl 运行版本或模式\n",[34,119554,119555],{"class":36,"line":182},[34,119556,119557],{},"wsl -l -v\n",[34,119559,119560],{"class":36,"line":188},[34,119561,1475],{"emptyLinePlaceholder":1474},[34,119563,119564],{"class":36,"line":518},[34,119565,1475],{"emptyLinePlaceholder":1474},[34,119567,119568],{"class":36,"line":524},[34,119569,119570],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[34,119572,119573],{"class":36,"line":530},[34,119574,119575],{},"wsl --set-version \u003Cdistro> 2\n",[34,119577,119578],{"class":36,"line":624},[34,119579,119580],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[34,119582,119583],{"class":36,"line":630},[34,119584,119585],{},"wsl --unregister \u003Cdistro>\n",[103,119587,119588],{},"输出Version为2即正常",[103,119590,119591],{},[109,119592],{"alt":29,"src":119593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[1353,119595,119597],{"id":119596},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[103,119599,119600],{},"直接在Powershell里输入wsl命令进入子系统",[24,119602,119604],{"className":119399,"code":119603,"language":119401,"meta":29,"style":29},"# 进入子系统\nwsl\n",[31,119605,119606,119611],{"__ignoreMap":29},[34,119607,119608],{"class":36,"line":37},[34,119609,119610],{},"# 进入子系统\n",[34,119612,119613],{"class":36,"line":165},[34,119614,119615],{},"wsl\n",[103,119617,119618],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[103,119620,119621],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[103,119623,119624],{},[109,119625],{"alt":29,"src":119626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[19,119628,119630],{"id":119629},"_233-配置各种环境","2.3.3 配置各种环境",[1353,119632,119634],{"id":119633},"_2331-换源","2.3.3.1 换源",[103,119636,119637],{},"(同实体机LINUX，往下找教程)",[1353,119639,119641],{"id":119640},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24555,119643,119645],{"id":119644},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[103,119647,119648],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[103,119650,119651],{},[109,119652],{"alt":29,"src":119653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[103,119655,119656],{},[109,119657],{"alt":29,"src":119658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24555,119660,119662],{"id":119661},"_23322-cuda","2.3.3.2.2 CUDA",[103,119664,119665,119666],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[236,119667,119668],{"href":119668,"rel":119669},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25510],[103,119671,119672,119675],{},[109,119673],{"alt":29,"src":119674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[109,119676],{"alt":29,"src":119677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[103,119679,119680],{},"在下方的网站，选择合适的版本。",[103,119682,119683,119684],{},"WSL2 专属 CUDA 指南：",[236,119685,119686],{"href":119686,"rel":119687},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25510],[103,119689,119690],{},[1165,119691,119692],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[103,119694,119695],{},[109,119696],{"alt":29,"src":119697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[103,119699,119700],{},"挨行敲一遍",[103,119702,119703],{},[109,119704],{"alt":29,"src":119705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[103,119707,119708,119709,119712],{},"敲完后，输入",[31,119710,119711],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[103,119714,119715],{},[109,119716],{"alt":29,"src":119717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[103,119719,119720,119721,119724],{},"（请详看下方教程的",[1165,119722,119723],{},"安装CUDA的配置环境来看","如何配置环境）",[24555,119726,119728],{"id":119727},"_23323-cudnn","2.3.3.2.3 cuDNN",[103,119730,119637],{},[103,119732,119733],{},[109,119734],{"alt":29,"src":119735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[1353,119737,119739],{"id":119738},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[103,119741,119742],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[103,119744,119745],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[103,119747,119748],{},[109,119749],{"alt":29,"src":119750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[103,119752,119753],{},"连接WSL2",[103,119755,119756],{},[109,119757],{"alt":29,"src":119758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[103,119760,119761],{},"远程开发成功。",[103,119763,119764],{},[109,119765],{"alt":29,"src":119766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[103,119768,119769],{},[109,119770],{"alt":29,"src":119771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[103,119773,119774],{},[109,119775],{"alt":29,"src":119776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[1353,119778,119780],{"id":119779},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[103,119782,119783],{},[109,119784],{"alt":29,"src":119785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[1353,119787,119789],{"id":119788},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[24,119791,119793],{"className":118659,"code":119792,"language":118661,"meta":29,"style":29},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[31,119794,119795,119803,119811,119822,119826],{"__ignoreMap":29},[34,119796,119797,119799,119801],{"class":36,"line":37},[34,119798,26222],{"class":3617},[34,119800,118680],{"class":504},[34,119802,27888],{"class":504},[34,119804,119805,119807,119809],{"class":36,"line":165},[34,119806,26222],{"class":3617},[34,119808,118680],{"class":504},[34,119810,118696],{"class":504},[34,119812,119813,119815,119817,119819],{"class":36,"line":171},[34,119814,26222],{"class":3617},[34,119816,118680],{"class":504},[34,119818,25479],{"class":504},[34,119820,119821],{"class":504}," mesa-utils\n",[34,119823,119824],{"class":36,"line":182},[34,119825,1475],{"emptyLinePlaceholder":1474},[34,119827,119828],{"class":36,"line":188},[34,119829,119830],{"class":161},"#然后重启wsl2即可\n",[1711,119832,119833],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":29,"searchDepth":165,"depth":165,"links":119835},[119836,119837,119842],{"id":119113,"depth":165,"text":119114},{"id":119126,"depth":165,"text":119127,"children":119838},[119839,119840,119841],{"id":119130,"depth":171,"text":119131},{"id":119177,"depth":171,"text":119178},{"id":119238,"depth":171,"text":119239},{"id":119274,"depth":165,"text":119275,"children":119843},[119844,119845,119846],{"id":119278,"depth":171,"text":119279},{"id":119340,"depth":171,"text":119341},{"id":119629,"depth":171,"text":119630},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119105,"description":1744},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119853,"title":119854,"body":119855,"description":1744,"extension":1745,"meta":122791,"navigation":1474,"path":122792,"seo":122793,"stem":122794,"__hash__":122795},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119856,"toc":122763},[119857,119860,119864,119870,119874,119880,119884,120072,120075,120080,120084,120088,120091,120094,120100,120105,120108,120111,120116,120149,120154,120158,120235,120238,120243,120247,120250,120289,120292,120301,120319,120324,120331,120448,120453,120456,120483,120488,120492,120501,120551,120558,120562,120565,120579,120586,120620,120625,120629,120652,120655,120660,120664,120667,120670,120673,120715,120719,120722,120725,120766,120770,120774,120777,120782,120787,120790,120813,120816,120824,120829,120832,120837,120842,120845,120850,120854,120859,120882,120887,120949,120957,120962,120967,120970,120975,120978,120983,120988,121006,121011,121017,121022,121036,121040,121043,121046,121049,121092,121095,121100,121201,121204,121209,121213,121217,121254,121258,121262,121266,121312,121316,121361,121365,121372,121380,121435,121438,121515,121518,121541,121545,121548,121553,121558,121566,121569,121574,121579,121584,121587,121592,121601,121604,121609,121612,121683,121688,121691,121696,121699,121704,121707,121712,121715,121720,121725,121728,121803,121806,121819,121824,121827,121841,121844,121873,121878,121907,121910,121915,121919,121924,121933,121936,121941,121944,121949,121952,121955,121960,121963,121968,121973,121976,121981,121984,122109,122114,122144,122147,122152,122157,122174,122177,122220,122223,122250,122255,122268,122411,122415,122420,122434,122437,122488,122491,122521,122524,122540,122545,122559,122562,122629,122634,122643,122648,122651,122663,122668,122675,122699,122702,122707,122710,122729,122734,122741,122753,122760],[10,119858,119854],{"id":119859},"_3-安装必备配置",[14,119861,119863],{"id":119862},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[24,119865,119868],{"className":119866,"code":119867,"language":6838},[6836],"  打开下方网站（注意，该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",[31,119869,119867],{"__ignoreMap":29},[19,119871,119873],{"id":119872},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[24,119875,119878],{"className":119876,"code":119877,"language":6838},[6836],"  输入以下命令\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",[31,119879,119877],{"__ignoreMap":29},[19,119881,119883],{"id":119882},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[24,119885,119889],{"className":119886,"code":119887,"language":119888,"meta":29,"style":29},"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",[31,119890,119891,119899,119910,119922,119936,119940,119950,119955,119959,119963,119968,119972,119984,119988,119993,119997,120008,120012,120028,120032,120043,120047,120052,120056,120064],{"__ignoreMap":29},[34,119892,119893,119895,119897],{"class":36,"line":37},[34,119894,26222],{"class":3617},[34,119896,118680],{"class":504},[34,119898,27888],{"class":504},[34,119900,119901,119903,119905,119907],{"class":36,"line":165},[34,119902,26222],{"class":3617},[34,119904,118680],{"class":504},[34,119906,25479],{"class":504},[34,119908,119909],{"class":504}," vim\n",[34,119911,119912,119914,119917,119919],{"class":36,"line":171},[34,119913,26222],{"class":3617},[34,119915,119916],{"class":504}," rm",[34,119918,26971],{"class":44},[34,119920,119921],{"class":504}," \u002Fetc\u002Fapt\u002Fsources.list\n",[34,119923,119924,119926,119928,119930,119933],{"class":36,"line":182},[34,119925,26222],{"class":3617},[34,119927,119916],{"class":504},[34,119929,26971],{"class":44},[34,119931,119932],{"class":504}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[34,119934,119935],{"class":44},"**\n",[34,119937,119938],{"class":36,"line":188},[34,119939,1475],{"emptyLinePlaceholder":1474},[34,119941,119942,119944,119947],{"class":36,"line":518},[34,119943,26222],{"class":3617},[34,119945,119946],{"class":504}," vim",[34,119948,119949],{"class":504}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[34,119951,119952],{"class":36,"line":524},[34,119953,119954],{"class":504},"```\n",[34,119956,119957],{"class":36,"line":530},[34,119958,1475],{"emptyLinePlaceholder":1474},[34,119960,119961],{"class":36,"line":624},[34,119962,1475],{"emptyLinePlaceholder":1474},[34,119964,119965],{"class":36,"line":630},[34,119966,119967],{"class":3617},"选择好Ubuntu版本后，复制下方的内容。\n",[34,119969,119970],{"class":36,"line":636},[34,119971,1475],{"emptyLinePlaceholder":1474},[34,119973,119974,119976,119979,119982],{"class":36,"line":1513},[34,119975,2034],{"class":55},[34,119977,119978],{"class":504},"[](",[34,119980,119981],{"class":3617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[34,119983,101],{"class":504},[34,119985,119986],{"class":36,"line":1519},[34,119987,1475],{"emptyLinePlaceholder":1474},[34,119989,119990],{"class":36,"line":3283},[34,119991,119992],{"class":3617},"粘贴进去\n",[34,119994,119995],{"class":36,"line":3297},[34,119996,1475],{"emptyLinePlaceholder":1474},[34,119998,119999,120001,120003,120006],{"class":36,"line":3302},[34,120000,2034],{"class":55},[34,120002,119978],{"class":504},[34,120004,120005],{"class":3617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[34,120007,101],{"class":504},[34,120009,120010],{"class":36,"line":3308},[34,120011,1475],{"emptyLinePlaceholder":1474},[34,120013,120014,120017,120020,120023,120025],{"class":36,"line":3328},[34,120015,120016],{"class":3617},"按一下ESC，然后英文冒号，输入",[34,120018,120019],{"class":504}," `",[34,120021,120022],{"class":3617},":wq!",[34,120024,2763],{"class":504},[34,120026,120027],{"class":3617},"然后回车\n",[34,120029,120030],{"class":36,"line":3333},[34,120031,1475],{"emptyLinePlaceholder":1474},[34,120033,120034,120036,120038,120041],{"class":36,"line":3347},[34,120035,2034],{"class":55},[34,120037,119978],{"class":504},[34,120039,120040],{"class":3617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[34,120042,101],{"class":504},[34,120044,120045],{"class":36,"line":3352},[34,120046,1475],{"emptyLinePlaceholder":1474},[34,120048,120049],{"class":36,"line":3381},[34,120050,120051],{"class":3617},"输入以下命令\n",[34,120053,120054],{"class":36,"line":3386},[34,120055,1475],{"emptyLinePlaceholder":1474},[34,120057,120058,120061],{"class":36,"line":3403},[34,120059,120060],{"class":504},"```",[34,120062,120063],{"class":3617},"Bash\n",[34,120065,120066,120068,120070],{"class":36,"line":3408},[34,120067,26222],{"class":3617},[34,120069,118680],{"class":504},[34,120071,27888],{"class":504},[103,120073,120074],{},"这里被替换成对应学校则成功",[103,120076,120077],{},[109,120078],{"alt":29,"src":120079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120081,120083],{"id":120082},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[19,120085,120087],{"id":120086},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[103,120089,120090],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[103,120092,120093],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[103,120095,120096],{},[236,120097,120098],{"href":120098,"rel":120099},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25510],[103,120101,120102],{},[109,120103],{"alt":29,"src":120104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[103,120106,120107],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[103,120109,120110],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[103,120112,120113],{},[109,120114],{"alt":29,"src":120115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[24,120117,120119],{"className":118659,"code":120118,"language":118661,"meta":29,"style":29},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[31,120120,120121,120126,120133,120138],{"__ignoreMap":29},[34,120122,120123],{"class":36,"line":37},[34,120124,120125],{"class":161},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[34,120127,120128,120130],{"class":36,"line":165},[34,120129,102639],{"class":44},[34,120131,120132],{"class":504}," ~\u002FDownloads\n",[34,120134,120135],{"class":36,"line":171},[34,120136,120137],{"class":161},"#下方chrome安装包名不一定是这个，根据名字来看\n",[34,120139,120140,120142,120144,120146],{"class":36,"line":182},[34,120141,26222],{"class":3617},[34,120143,118680],{"class":504},[34,120145,25479],{"class":504},[34,120147,120148],{"class":504}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[103,120150,120151],{},[109,120152],{"alt":29,"src":120153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[19,120155,120157],{"id":120156},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[24,120159,120161],{"className":118659,"code":120160,"language":118661,"meta":29,"style":29},"# 老版\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",[31,120162,120163,120168,120176,120187,120192,120196,120201,120211,120219,120230],{"__ignoreMap":29},[34,120164,120165],{"class":36,"line":37},[34,120166,120167],{"class":161},"# 老版\n",[34,120169,120170,120172,120174],{"class":36,"line":165},[34,120171,26222],{"class":3617},[34,120173,118680],{"class":504},[34,120175,27888],{"class":504},[34,120177,120178,120180,120182,120184],{"class":36,"line":171},[34,120179,26222],{"class":3617},[34,120181,118680],{"class":504},[34,120183,25479],{"class":504},[34,120185,120186],{"class":504}," neofetch\n",[34,120188,120189],{"class":36,"line":182},[34,120190,120191],{"class":3617},"neofetch\n",[34,120193,120194],{"class":36,"line":188},[34,120195,1475],{"emptyLinePlaceholder":1474},[34,120197,120198],{"class":36,"line":518},[34,120199,120200],{"class":161},"# 新版\n",[34,120202,120203,120205,120208],{"class":36,"line":524},[34,120204,26222],{"class":3617},[34,120206,120207],{"class":504}," add-apt-repository",[34,120209,120210],{"class":504}," ppa:zhangsongcui3371\u002Ffastfetch\n",[34,120212,120213,120215,120217],{"class":36,"line":530},[34,120214,26222],{"class":3617},[34,120216,118680],{"class":504},[34,120218,27888],{"class":504},[34,120220,120221,120223,120225,120227],{"class":36,"line":624},[34,120222,26222],{"class":3617},[34,120224,118680],{"class":504},[34,120226,25479],{"class":504},[34,120228,120229],{"class":504}," fastfetch\n",[34,120231,120232],{"class":36,"line":630},[34,120233,120234],{"class":3617},"fastfetch\n",[103,120236,120237],{},"这里显示，一共有3162个debian的程序，7个snap程序",[103,120239,120240],{},[109,120241],{"alt":29,"src":120242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[19,120244,120246],{"id":120245},"_323-移除snap应用","3.2.3 移除snap应用",[103,120248,120249],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[24,120251,120253],{"className":118659,"code":120252,"language":118661,"meta":29,"style":29},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[31,120254,120255,120267,120278],{"__ignoreMap":29},[34,120256,120257,120259,120261,120264],{"class":36,"line":37},[34,120258,26222],{"class":3617},[34,120260,28159],{"class":504},[34,120262,120263],{"class":504}," disable",[34,120265,120266],{"class":504}," snapd.service\n",[34,120268,120269,120271,120273,120275],{"class":36,"line":165},[34,120270,26222],{"class":3617},[34,120272,28159],{"class":504},[34,120274,120263],{"class":504},[34,120276,120277],{"class":504}," snapd.socket\n",[34,120279,120280,120282,120284,120286],{"class":36,"line":171},[34,120281,26222],{"class":3617},[34,120283,28159],{"class":504},[34,120285,120263],{"class":504},[34,120287,120288],{"class":504}," snapd.seeded.service\n",[103,120290,120291],{},"然后查看snap应用列表",[103,120293,120294,120295,120300],{},"根据你安装的选择不同（最小安装或普通安装），有",[236,120296,120299],{"href":120297,"rel":120298},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25510],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[24,120302,120304],{"className":118659,"code":120303,"language":118661,"meta":29,"style":29},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[31,120305,120306,120311],{"__ignoreMap":29},[34,120307,120308],{"class":36,"line":37},[34,120309,120310],{"class":161},"# 查询当前系统上snap安装了哪些app\n",[34,120312,120313,120316],{"class":36,"line":165},[34,120314,120315],{"class":3617},"snap",[34,120317,120318],{"class":504}," list\n",[103,120320,120321],{},[109,120322],{"alt":29,"src":120323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[103,120325,120326,120327,120330],{},"卸载掉图中所有应用，按照 ",[1165,120328,120329],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[24,120332,120334],{"className":118659,"code":120333,"language":118661,"meta":29,"style":29},"#移除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",[31,120335,120336,120341,120353,120358,120369,120374,120385,120390,120401,120406,120410,120415,120426,120437],{"__ignoreMap":29},[34,120337,120338],{"class":36,"line":37},[34,120339,120340],{"class":161},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[34,120342,120343,120345,120348,120350],{"class":36,"line":165},[34,120344,26222],{"class":3617},[34,120346,120347],{"class":504}," snap",[34,120349,27725],{"class":504},[34,120351,120352],{"class":504}," snap-store\n",[34,120354,120355],{"class":36,"line":171},[34,120356,120357],{"class":161},"#移除firefox浏览器\n",[34,120359,120360,120362,120364,120366],{"class":36,"line":182},[34,120361,26222],{"class":3617},[34,120363,120347],{"class":504},[34,120365,27725],{"class":504},[34,120367,120368],{"class":504}," firefox\n",[34,120370,120371],{"class":36,"line":188},[34,120372,120373],{"class":161},"#移除gnome-42-2204\n",[34,120375,120376,120378,120380,120382],{"class":36,"line":518},[34,120377,26222],{"class":3617},[34,120379,120347],{"class":504},[34,120381,27725],{"class":504},[34,120383,120384],{"class":504}," gnome-42-2204\n",[34,120386,120387],{"class":36,"line":524},[34,120388,120389],{"class":161},"#移除gtk-common-themes\n",[34,120391,120392,120394,120396,120398],{"class":36,"line":530},[34,120393,26222],{"class":3617},[34,120395,120347],{"class":504},[34,120397,27725],{"class":504},[34,120399,120400],{"class":504}," gtk-common-themes\n",[34,120402,120403],{"class":36,"line":624},[34,120404,120405],{"class":161},"#移除其它...\n",[34,120407,120408],{"class":36,"line":630},[34,120409,4327],{"class":40},[34,120411,120412],{"class":36,"line":636},[34,120413,120414],{"class":161},"#移除core22,bare以及snapd\n",[34,120416,120417,120419,120421,120423],{"class":36,"line":1513},[34,120418,26222],{"class":3617},[34,120420,120347],{"class":504},[34,120422,27725],{"class":504},[34,120424,120425],{"class":504}," core22\n",[34,120427,120428,120430,120432,120434],{"class":36,"line":1519},[34,120429,26222],{"class":3617},[34,120431,120347],{"class":504},[34,120433,27725],{"class":504},[34,120435,120436],{"class":504}," bare\n",[34,120438,120439,120441,120443,120445],{"class":36,"line":3283},[34,120440,26222],{"class":3617},[34,120442,120347],{"class":504},[34,120444,27725],{"class":504},[34,120446,120447],{"class":504}," snapd\n",[103,120449,120450],{},[109,120451],{"alt":29,"src":120452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[103,120454,120455],{},"输入以下命令查看是否还有snap包",[24,120457,120459],{"className":118659,"code":120458,"language":118661,"meta":29,"style":29},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[31,120460,120461,120467,120471,120475,120479],{"__ignoreMap":29},[34,120462,120463,120465],{"class":36,"line":37},[34,120464,120315],{"class":3617},[34,120466,120318],{"class":504},[34,120468,120469],{"class":36,"line":165},[34,120470,120167],{"class":161},[34,120472,120473],{"class":36,"line":171},[34,120474,120191],{"class":3617},[34,120476,120477],{"class":36,"line":182},[34,120478,120200],{"class":161},[34,120480,120481],{"class":36,"line":188},[34,120482,120234],{"class":3617},[103,120484,120485],{},[109,120486],{"alt":29,"src":120487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[19,120489,120491],{"id":120490},"_324-移除snap","3.2.4 移除snap",[103,120493,120494,120495,120500],{},"在删除掉",[236,120496,120499],{"href":120497,"rel":120498},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25510],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[24,120502,120504],{"className":118659,"code":120503,"language":118661,"meta":29,"style":29}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[31,120505,120506,120511,120524,120529,120540],{"__ignoreMap":29},[34,120507,120508],{"class":36,"line":37},[34,120509,120510],{"class":161}," #使用apt移除掉snap\n",[34,120512,120513,120515,120517,120519,120522],{"class":36,"line":165},[34,120514,26222],{"class":3617},[34,120516,118680],{"class":504},[34,120518,118988],{"class":504},[34,120520,120521],{"class":44}," --purge",[34,120523,120447],{"class":504},[34,120525,120526],{"class":36,"line":171},[34,120527,120528],{"class":161},"#移除snapd的一些目录\n",[34,120530,120531,120533,120535,120537],{"class":36,"line":182},[34,120532,26222],{"class":3617},[34,120534,119916],{"class":504},[34,120536,26971],{"class":44},[34,120538,120539],{"class":504}," \u002Fvar\u002Fcache\u002Fsnapd\n",[34,120541,120542,120544,120546,120548],{"class":36,"line":188},[34,120543,26222],{"class":3617},[34,120545,119916],{"class":504},[34,120547,26971],{"class":44},[34,120549,120550],{"class":504}," ~\u002Fsnap\n",[103,120552,120553,120554,120557],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[31,120555,120556],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[19,120559,120561],{"id":120560},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[103,120563,120564],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[24,120566,120568],{"className":118659,"code":120567,"language":118661,"meta":29,"style":29},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[31,120569,120570],{"__ignoreMap":29},[34,120571,120572,120574,120576],{"class":36,"line":37},[34,120573,26222],{"class":3617},[34,120575,119946],{"class":504},[34,120577,120578],{"class":504}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[103,120580,120581,120582,120585],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[31,120583,120584],{},":wq"," 回车",[24,120587,120589],{"className":118659,"code":120588,"language":118661,"meta":29,"style":29},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[31,120590,120591,120598,120612],{"__ignoreMap":29},[34,120592,120593,120596],{"class":36,"line":37},[34,120594,120595],{"class":3617},"Package:",[34,120597,120447],{"class":504},[34,120599,120600,120603,120606,120609],{"class":36,"line":165},[34,120601,120602],{"class":3617},"Pin:",[34,120604,120605],{"class":504}," release",[34,120607,120608],{"class":504}," a=",[34,120610,120611],{"class":44},"*\n",[34,120613,120614,120617],{"class":36,"line":171},[34,120615,120616],{"class":3617},"Pin-Priority:",[34,120618,120619],{"class":44}," -10\n",[103,120621,120622],{},[109,120623],{"alt":29,"src":120624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[19,120626,120628],{"id":120627},"_326-测试是否成功","3.2.6 测试是否成功",[24,120630,120632],{"className":118659,"code":120631,"language":118661,"meta":29,"style":29},"sudo apt update\nsudo apt install firefox\n",[31,120633,120634,120642],{"__ignoreMap":29},[34,120635,120636,120638,120640],{"class":36,"line":37},[34,120637,26222],{"class":3617},[34,120639,118680],{"class":504},[34,120641,27888],{"class":504},[34,120643,120644,120646,120648,120650],{"class":36,"line":165},[34,120645,26222],{"class":3617},[34,120647,118680],{"class":504},[34,120649,25479],{"class":504},[34,120651,120368],{"class":504},[103,120653,120654],{},"这里提示snapd无法被安装，就证明成功了",[103,120656,120657],{},[109,120658],{"alt":29,"src":120659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[19,120661,120663],{"id":120662},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[103,120665,120666],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[103,120668,120669],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[103,120671,120672],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[24,120674,120676],{"className":118659,"code":120675,"language":118661,"meta":29,"style":29},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[31,120677,120678,120683,120692,120697,120705],{"__ignoreMap":29},[34,120679,120680],{"class":36,"line":37},[34,120681,120682],{"class":161},"# 添加Mozilla提供的源\n",[34,120684,120685,120687,120689],{"class":36,"line":165},[34,120686,26222],{"class":3617},[34,120688,120207],{"class":504},[34,120690,120691],{"class":504}," ppa:mozillateam\u002Fppa\n",[34,120693,120694],{"class":36,"line":171},[34,120695,120696],{"class":161},"# 安装Firefox\n",[34,120698,120699,120701,120703],{"class":36,"line":182},[34,120700,26222],{"class":3617},[34,120702,118680],{"class":504},[34,120704,27888],{"class":504},[34,120706,120707,120709,120711,120713],{"class":36,"line":188},[34,120708,26222],{"class":3617},[34,120710,118680],{"class":504},[34,120712,25479],{"class":504},[34,120714,120368],{"class":504},[19,120716,120718],{"id":120717},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[103,120720,120721],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[103,120723,120724],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[24,120726,120728],{"className":118659,"code":120727,"language":118661,"meta":29,"style":29},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[31,120729,120730,120735,120745,120753,120757],{"__ignoreMap":29},[34,120731,120732],{"class":36,"line":37},[34,120733,120734],{"class":161},"#删掉禁止安装snap的配置文件\n",[34,120736,120737,120739,120741,120743],{"class":36,"line":165},[34,120738,26222],{"class":3617},[34,120740,119916],{"class":504},[34,120742,26971],{"class":44},[34,120744,120578],{"class":504},[34,120746,120747,120749,120751],{"class":36,"line":171},[34,120748,26222],{"class":3617},[34,120750,118680],{"class":504},[34,120752,27888],{"class":504},[34,120754,120755],{"class":36,"line":182},[34,120756,1475],{"emptyLinePlaceholder":1474},[34,120758,120759,120761,120763],{"class":36,"line":188},[34,120760,26222],{"class":3617},[34,120762,118680],{"class":504},[34,120764,120765],{"class":504}," dist-update\n",[14,120767,120769],{"id":120768},"_33-中文输入法","3.3 中文输入法",[19,120771,120773],{"id":120772},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[103,120775,120776],{},"官网下载搜狗输入法",[103,120778,120779],{},[109,120780],{"alt":29,"src":120781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[103,120783,120784],{},[109,120785],{"alt":29,"src":120786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[103,120788,120789],{},"打开终端输入如下",[24,120791,120793],{"className":118659,"code":120792,"language":118661,"meta":29,"style":29},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[31,120794,120795,120802],{"__ignoreMap":29},[34,120796,120797,120799],{"class":36,"line":37},[34,120798,102639],{"class":44},[34,120800,120801],{"class":504}," ~\u002FDownloads\u002F\n",[34,120803,120804,120806,120808,120810],{"class":36,"line":165},[34,120805,26222],{"class":3617},[34,120807,118680],{"class":504},[34,120809,25479],{"class":504},[34,120811,120812],{"class":504}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[103,120814,120815],{},"打开Fcitx",[103,120817,120818,120821],{},[109,120819],{"alt":29,"src":120820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[109,120822],{"alt":29,"src":120823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[103,120825,120826],{},[109,120827],{"alt":29,"src":120828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[103,120830,120831],{},"添加搜狗输入法",[103,120833,120834],{},[109,120835],{"alt":29,"src":120836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[103,120838,120839],{},[109,120840],{"alt":29,"src":120841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[103,120843,120844],{},"将搜狗输入法设置为唯一输入法",[103,120846,120847],{},[109,120848],{"alt":29,"src":120849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[19,120851,120853],{"id":120852},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[1772,120855,120856],{},[1775,120857,120858],{},"卸载旧输入法",[24,120860,120862],{"className":119886,"code":120861,"language":119888,"meta":29,"style":29},"sudo apt purge fcitx* ibus*\n",[31,120863,120864],{"__ignoreMap":29},[34,120865,120866,120868,120870,120872,120875,120877,120880],{"class":36,"line":37},[34,120867,26222],{"class":3617},[34,120869,118680],{"class":504},[34,120871,119021],{"class":504},[34,120873,120874],{"class":504}," fcitx",[34,120876,2252],{"class":44},[34,120878,120879],{"class":504}," ibus",[34,120881,120611],{"class":44},[1772,120883,120884],{"start":165},[1775,120885,120886],{},"安装Fcitx5",[24,120888,120890],{"className":118659,"code":120889,"language":118661,"meta":29,"style":29},"# 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",[31,120891,120892,120897,120911,120915,120920,120929,120937],{"__ignoreMap":29},[34,120893,120894],{"class":36,"line":37},[34,120895,120896],{"class":161},"# Ubuntu22.04及以上、Debian12及以上\n",[34,120898,120899,120901,120903,120905,120908],{"class":36,"line":165},[34,120900,26222],{"class":3617},[34,120902,118680],{"class":504},[34,120904,25479],{"class":504},[34,120906,120907],{"class":504}," fcitx5",[34,120909,120910],{"class":504}," fcitx5-chinese-addons\n",[34,120912,120913],{"class":36,"line":171},[34,120914,1475],{"emptyLinePlaceholder":1474},[34,120916,120917],{"class":36,"line":182},[34,120918,120919],{"class":161},"# Ubuntu20.04\n",[34,120921,120922,120924,120926],{"class":36,"line":188},[34,120923,26222],{"class":3617},[34,120925,120207],{"class":504},[34,120927,120928],{"class":504}," ppa:zhsj\u002Ffcitx5\n",[34,120930,120931,120933,120935],{"class":36,"line":518},[34,120932,26222],{"class":3617},[34,120934,118680],{"class":504},[34,120936,27888],{"class":504},[34,120938,120939,120941,120943,120945,120947],{"class":36,"line":524},[34,120940,26222],{"class":3617},[34,120942,118680],{"class":504},[34,120944,25479],{"class":504},[34,120946,120907],{"class":504},[34,120948,120910],{"class":504},[1772,120950,120951,120954],{"start":171},[1775,120952,120953],{},"Reboot System",[1775,120955,120956],{},"启动Fcitx5",[103,120958,120959],{},[109,120960],{"alt":29,"src":120961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[1772,120963,120964],{"start":188},[1775,120965,120966],{},"修改一些设置",[103,120968,120969],{},"将Pinyin和Keyboard - English US加入到左边。",[103,120971,120972],{},[109,120973],{"alt":29,"src":120974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[103,120976,120977],{},"添加快捷键以便于更好切换中英文",[103,120979,120980],{},[109,120981],{"alt":29,"src":120982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[1772,120984,120985],{"start":518},[1775,120986,120987],{},"重启",[24,120989,120991],{"className":119886,"code":120990,"language":119888,"meta":29,"style":29},"sudo shutdown -r now\n",[31,120992,120993],{"__ignoreMap":29},[34,120994,120995,120997,121000,121003],{"class":36,"line":37},[34,120996,26222],{"class":3617},[34,120998,120999],{"class":504}," shutdown",[34,121001,121002],{"class":44}," -r",[34,121004,121005],{"class":504}," now\n",[1772,121007,121008],{"start":524},[1775,121009,121010],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[103,121012,121013],{},[236,121014,121015],{"href":121015,"rel":121016},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25510],[1772,121018,121019],{"start":530},[1775,121020,121021],{},"再重启",[24,121023,121024],{"className":119886,"code":120990,"language":119888,"meta":29,"style":29},[31,121025,121026],{"__ignoreMap":29},[34,121027,121028,121030,121032,121034],{"class":36,"line":37},[34,121029,26222],{"class":3617},[34,121031,120999],{"class":504},[34,121033,121002],{"class":44},[34,121035,121005],{"class":504},[14,121037,121039],{"id":121038},"_34-pip3源替换","3.4 pip3源替换",[103,121041,121042],{},"非Debian系发行版需要做。",[103,121044,121045],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[103,121047,121048],{},"使用dnf的系统也可能不用做。",[24,121050,121052],{"className":118659,"code":121051,"language":118661,"meta":29,"style":29},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[31,121053,121054,121059,121066,121071,121076],{"__ignoreMap":29},[34,121055,121056],{"class":36,"line":37},[34,121057,121058],{"class":161},"# 检查是否已安装 pip\n",[34,121060,121061,121064],{"class":36,"line":165},[34,121062,121063],{"class":3617},"pip3",[34,121065,27939],{"class":44},[34,121067,121068],{"class":36,"line":171},[34,121069,121070],{"class":161},"# 如果未安装，先安装 pip3（见下方）\n",[34,121072,121073],{"class":36,"line":182},[34,121074,121075],{"class":161},"# 配置 pip 使用清华源\n",[34,121077,121078,121080,121083,121086,121089],{"class":36,"line":188},[34,121079,121063],{"class":3617},[34,121081,121082],{"class":504}," config",[34,121084,121085],{"class":504}," set",[34,121087,121088],{"class":504}," global.index-url",[34,121090,121091],{"class":504}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[103,121093,121094],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[103,121096,121097],{},[109,121098],{"alt":29,"src":121099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[24,121101,121103],{"className":118659,"code":121102,"language":118661,"meta":29,"style":29},"#安装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",[31,121104,121105,121110,121118,121129,121133,121138,121157,121161,121166,121178,121182,121187],{"__ignoreMap":29},[34,121106,121107],{"class":36,"line":37},[34,121108,121109],{"class":161},"#安装pip3\n",[34,121111,121112,121114,121116],{"class":36,"line":165},[34,121113,26222],{"class":3617},[34,121115,118680],{"class":504},[34,121117,27888],{"class":504},[34,121119,121120,121122,121124,121126],{"class":36,"line":171},[34,121121,26222],{"class":3617},[34,121123,27722],{"class":504},[34,121125,25479],{"class":504},[34,121127,121128],{"class":504}," python3-pip\n",[34,121130,121131],{"class":36,"line":182},[34,121132,1475],{"emptyLinePlaceholder":1474},[34,121134,121135],{"class":36,"line":188},[34,121136,121137],{"class":161},"#更新pip3\n",[34,121139,121140,121142,121144,121146,121148,121150,121153,121155],{"class":36,"line":518},[34,121141,102242],{"class":3617},[34,121143,102245],{"class":44},[34,121145,102268],{"class":504},[34,121147,25479],{"class":504},[34,121149,28076],{"class":44},[34,121151,121152],{"class":504}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[34,121154,102273],{"class":44},[34,121156,102276],{"class":504},[34,121158,121159],{"class":36,"line":524},[34,121160,1475],{"emptyLinePlaceholder":1474},[34,121162,121163],{"class":36,"line":530},[34,121164,121165],{"class":161},"#设置pip源为清华源\n",[34,121167,121168,121170,121172,121174,121176],{"class":36,"line":624},[34,121169,121063],{"class":3617},[34,121171,121082],{"class":504},[34,121173,121085],{"class":504},[34,121175,121088],{"class":504},[34,121177,121091],{"class":504},[34,121179,121180],{"class":36,"line":630},[34,121181,1475],{"emptyLinePlaceholder":1474},[34,121183,121184],{"class":36,"line":636},[34,121185,121186],{"class":161},"#测试\n",[34,121188,121189,121191,121193,121195,121197,121199],{"class":36,"line":1513},[34,121190,102242],{"class":3617},[34,121192,102245],{"class":44},[34,121194,102268],{"class":504},[34,121196,25479],{"class":504},[34,121198,102273],{"class":44},[34,121200,102276],{"class":504},[103,121202,121203],{},"成功的话，会看到Looking后面是tsinghua字样。",[103,121205,121206],{},[109,121207],{"alt":29,"src":121208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121210,121212],{"id":121211},"_35-显卡驱动安装","3.5 显卡驱动安装",[19,121214,121216],{"id":121215},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[24,121218,121220],{"className":119886,"code":121219,"language":119888,"meta":29,"style":29},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[31,121221,121222,121227,121242,121247],{"__ignoreMap":29},[34,121223,121224],{"class":36,"line":37},[34,121225,121226],{"class":161},"# 如果是使用apt安装的驱动\n",[34,121228,121229,121231,121233,121235,121237,121240],{"class":36,"line":165},[34,121230,26222],{"class":3617},[34,121232,27722],{"class":504},[34,121234,27725],{"class":504},[34,121236,120521],{"class":44},[34,121238,121239],{"class":504}," nvidia",[34,121241,120611],{"class":44},[34,121243,121244],{"class":36,"line":171},[34,121245,121246],{"class":161},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[34,121248,121249,121251],{"class":36,"line":182},[34,121250,26222],{"class":3617},[34,121252,121253],{"class":504}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[19,121255,121257],{"id":121256},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[1353,121259,121261],{"id":121260},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24555,121263,121265],{"id":121264},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[24,121267,121269],{"className":119886,"code":121268,"language":119888,"meta":29,"style":29},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[31,121270,121271,121276,121287,121292,121302,121307],{"__ignoreMap":29},[34,121272,121273],{"class":36,"line":37},[34,121274,121275],{"class":161},"# 安装英伟达驱动\n",[34,121277,121278,121280,121282,121284],{"class":36,"line":165},[34,121279,26222],{"class":3617},[34,121281,118680],{"class":504},[34,121283,25479],{"class":504},[34,121285,121286],{"class":504}," nvidia-driver-版本号\n",[34,121288,121289],{"class":36,"line":171},[34,121290,121291],{"class":161},"# 重启 \n",[34,121293,121294,121296,121298,121300],{"class":36,"line":182},[34,121295,26222],{"class":3617},[34,121297,120999],{"class":504},[34,121299,121002],{"class":44},[34,121301,121005],{"class":504},[34,121303,121304],{"class":36,"line":188},[34,121305,121306],{"class":161},"# 检查驱动是否安装成功\n",[34,121308,121309],{"class":36,"line":518},[34,121310,121311],{"class":3617},"nvidia-smi\n",[24555,121313,121315],{"id":121314},"_35212-debian","3.5.2.1.2 Debian",[24,121317,121319],{"className":119886,"code":121318,"language":119888,"meta":29,"style":29},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[31,121320,121321,121325,121339,121343,121353,121357],{"__ignoreMap":29},[34,121322,121323],{"class":36,"line":37},[34,121324,121275],{"class":161},[34,121326,121327,121329,121331,121333,121336],{"class":36,"line":165},[34,121328,26222],{"class":3617},[34,121330,118680],{"class":504},[34,121332,25479],{"class":504},[34,121334,121335],{"class":504}," nvidia-driver",[34,121337,121338],{"class":504}," nvidia-settings\n",[34,121340,121341],{"class":36,"line":171},[34,121342,121291],{"class":161},[34,121344,121345,121347,121349,121351],{"class":36,"line":182},[34,121346,26222],{"class":3617},[34,121348,120999],{"class":504},[34,121350,121002],{"class":44},[34,121352,121005],{"class":504},[34,121354,121355],{"class":36,"line":188},[34,121356,121306],{"class":161},[34,121358,121359],{"class":36,"line":518},[34,121360,121311],{"class":3617},[1353,121362,121364],{"id":121363},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[103,121366,121367,121368,121371],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[1165,121369,121370],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[103,121373,121374,121375],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25198,121376,121377],{},[1165,121378,121379],{},"（也可以不禁用桌面环境，直接进行下一步。）",[24,121381,121383],{"className":119886,"code":121382,"language":119888,"meta":29,"style":29},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[31,121384,121385,121390,121400,121405,121418,121423],{"__ignoreMap":29},[34,121386,121387],{"class":36,"line":37},[34,121388,121389],{"class":161},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[34,121391,121392,121394,121397],{"class":36,"line":165},[34,121393,26222],{"class":3617},[34,121395,121396],{"class":504}," telinit",[34,121398,121399],{"class":44}," 3\n",[34,121401,121402],{"class":36,"line":171},[34,121403,121404],{"class":161},"# ubuntu 使用下方命令\n",[34,121406,121407,121409,121412,121415],{"class":36,"line":182},[34,121408,26222],{"class":3617},[34,121410,121411],{"class":504}," service",[34,121413,121414],{"class":504}," lightdm",[34,121416,121417],{"class":504}," stop\n",[34,121419,121420],{"class":36,"line":188},[34,121421,121422],{"class":161},"# Fedora 使用下方命令\n",[34,121424,121425,121427,121429,121432],{"class":36,"line":518},[34,121426,26222],{"class":3617},[34,121428,28159],{"class":504},[34,121430,121431],{"class":504}," isolate",[34,121433,121434],{"class":504}," multi-user.target\n",[103,121436,121437],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[24,121439,121441],{"className":119886,"code":121440,"language":119888,"meta":29,"style":29},"# 编译环境+准备工作\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",[31,121442,121443,121448,121459,121464,121471,121476,121488,121493,121500,121505],{"__ignoreMap":29},[34,121444,121445],{"class":36,"line":37},[34,121446,121447],{"class":161},"# 编译环境+准备工作\n",[34,121449,121450,121452,121454,121456],{"class":36,"line":165},[34,121451,26222],{"class":3617},[34,121453,118680],{"class":504},[34,121455,25479],{"class":504},[34,121457,121458],{"class":504}," build-essential\n",[34,121460,121461],{"class":36,"line":171},[34,121462,121463],{"class":161},"# 进入到.run目录中\n",[34,121465,121466,121468],{"class":36,"line":182},[34,121467,102639],{"class":44},[34,121469,121470],{"class":504}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[34,121472,121473],{"class":36,"line":188},[34,121474,121475],{"class":161},"# 给驱动文件增加可执行权限：\n",[34,121477,121478,121480,121482,121485],{"class":36,"line":518},[34,121479,26222],{"class":3617},[34,121481,26225],{"class":504},[34,121483,121484],{"class":504}," a+x",[34,121486,121487],{"class":504}," NVIDIA-Linux-x86_64-550.107.02.run\n",[34,121489,121490],{"class":36,"line":524},[34,121491,121492],{"class":161},"# 然后执行安装：\n",[34,121494,121495,121497],{"class":36,"line":530},[34,121496,26222],{"class":3617},[34,121498,121499],{"class":504}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[34,121501,121502],{"class":36,"line":624},[34,121503,121504],{"class":161},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[34,121506,121507,121509,121512],{"class":36,"line":630},[34,121508,26222],{"class":3617},[34,121510,121511],{"class":504}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[34,121513,121514],{"class":44},"  --no-opengl-files\n",[103,121516,121517],{},"安装完毕重启即可",[24,121519,121521],{"className":119886,"code":121520,"language":119888,"meta":29,"style":29},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[31,121522,121523,121527,121533,121537],{"__ignoreMap":29},[34,121524,121525],{"class":36,"line":37},[34,121526,121291],{"class":161},[34,121528,121529,121531],{"class":36,"line":165},[34,121530,26222],{"class":3617},[34,121532,28293],{"class":504},[34,121534,121535],{"class":36,"line":171},[34,121536,121306],{"class":161},[34,121538,121539],{"class":36,"line":182},[34,121540,121311],{"class":3617},[19,121542,121544],{"id":121543},"_353-安装cuda","3.5.3 安装CUDA",[103,121546,121547],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[103,121549,121550],{},[109,121551],{"alt":29,"src":121552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[1772,121554,121555],{},[1775,121556,121557],{},"先查看显卡驱动所支持的最高CUDA版本",[24,121559,121560],{"className":119886,"code":121311,"language":119888,"meta":29,"style":29},[31,121561,121562],{"__ignoreMap":29},[34,121563,121564],{"class":36,"line":37},[34,121565,121311],{"class":3617},[103,121567,121568],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[103,121570,121571],{},[109,121572],{"alt":29,"src":121573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[1772,121575,121576],{"start":165},[1775,121577,121578],{},"下载CUDA并安装CUDA",[103,121580,119665,121581],{},[236,121582,119668],{"href":119668,"rel":121583},[25510],[103,121585,121586],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[103,121588,121589],{},[109,121590],{"alt":29,"src":121591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[103,121593,121594,121595,121600],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[236,121596,121599],{"href":121597,"rel":121598},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25510],"Vinci机器人队单片机教程","）",[103,121602,121603],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[103,121605,121606],{},[109,121607],{"alt":29,"src":121608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[103,121610,121611],{},"将最下方框框里的命令敲入终端",[24,121613,121615],{"className":119886,"code":121614,"language":119888,"meta":29,"style":29},"# 在当前文件夹下创建一个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",[31,121616,121617,121622,121631,121636,121643,121648,121656,121661,121672,121677],{"__ignoreMap":29},[34,121618,121619],{"class":36,"line":37},[34,121620,121621],{"class":161},"# 在当前文件夹下创建一个ttt的子文件夹\n",[34,121623,121624,121626,121628],{"class":36,"line":165},[34,121625,102629],{"class":3617},[34,121627,30862],{"class":44},[34,121629,121630],{"class":504}," .\u002Fttt\n",[34,121632,121633],{"class":36,"line":171},[34,121634,121635],{"class":161},"# 进入ttt文件夹\n",[34,121637,121638,121640],{"class":36,"line":182},[34,121639,102639],{"class":44},[34,121641,121642],{"class":504}," ttt\n",[34,121644,121645],{"class":36,"line":188},[34,121646,121647],{"class":161},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[34,121649,121650,121653],{"class":36,"line":518},[34,121651,121652],{"class":3617},"wget",[34,121654,121655],{"class":504}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[34,121657,121658],{"class":36,"line":524},[34,121659,121660],{"class":161},"# 给予权限\n",[34,121662,121663,121665,121667,121669],{"class":36,"line":530},[34,121664,26222],{"class":3617},[34,121666,26225],{"class":504},[34,121668,121484],{"class":504},[34,121670,121671],{"class":504}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[34,121673,121674],{"class":36,"line":624},[34,121675,121676],{"class":161},"# 运行脚本\n",[34,121678,121679,121681],{"class":36,"line":630},[34,121680,26222],{"class":3617},[34,121682,121671],{"class":504},[103,121684,121685],{},[109,121686],{"alt":29,"src":121687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[103,121689,121690],{},"正在安装中：",[103,121692,121693],{},[109,121694],{"alt":29,"src":121695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[103,121697,121698],{},"输入accept接受即可",[103,121700,121701],{},[109,121702],{"alt":29,"src":121703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[103,121705,121706],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[103,121708,121709],{},[109,121710],{"alt":29,"src":121711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[103,121713,121714],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[103,121716,121717],{},[109,121718],{"alt":29,"src":121719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[1772,121721,121722],{"start":171},[1775,121723,121724],{},"配置环境",[103,121726,121727],{},"根据上方确认一下路径，比如我上面红色框起来的为",[24,121729,121731],{"className":119886,"code":121730,"language":119888,"meta":29,"style":29},"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",[31,121732,121733,121749,121764],{"__ignoreMap":29},[34,121734,121735,121738,121741,121744,121747],{"class":36,"line":37},[34,121736,121737],{"class":3617},"Please",[34,121739,121740],{"class":504}," make",[34,121742,121743],{"class":504}," sure",[34,121745,121746],{"class":504}," that",[34,121748,4327],{"class":40},[34,121750,121751,121753,121756,121759,121762],{"class":36,"line":165},[34,121752,53910],{"class":3617},[34,121754,121755],{"class":504},"   PATH",[34,121757,121758],{"class":504}," includes",[34,121760,121761],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[34,121763,4327],{"class":40},[34,121765,121766,121768,121771,121773,121776,121779,121781,121784,121787,121790,121793,121795,121798,121800],{"class":36,"line":171},[34,121767,53910],{"class":3617},[34,121769,121770],{"class":504},"   LD_LIBRARY_PATH",[34,121772,121758],{"class":504},[34,121774,121775],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[34,121777,121778],{"class":504}," or,",[34,121780,6860],{"class":504},[34,121782,121783],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[34,121785,121786],{"class":504}," to",[34,121788,121789],{"class":504}," \u002Fetc\u002Fld.so.conf",[34,121791,121792],{"class":504}," and",[34,121794,28876],{"class":504},[34,121796,121797],{"class":504}," ldconfig",[34,121799,66243],{"class":504},[34,121801,121802],{"class":504}," root\n",[103,121804,121805],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[24,121807,121809],{"className":119886,"code":121808,"language":119888,"meta":29,"style":29},"which nvcc\n",[31,121810,121811],{"__ignoreMap":29},[34,121812,121813,121816],{"class":36,"line":37},[34,121814,121815],{"class":44},"which",[34,121817,121818],{"class":504}," nvcc\n",[103,121820,121821],{},[109,121822],{"alt":29,"src":121823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[103,121825,121826],{},"所以我进行以下操作：",[24,121828,121830],{"className":119886,"code":121829,"language":119888,"meta":29,"style":29},"sudo vim ~\u002F.bashrc\n",[31,121831,121832],{"__ignoreMap":29},[34,121833,121834,121836,121838],{"class":36,"line":37},[34,121835,26222],{"class":3617},[34,121837,119946],{"class":504},[34,121839,121840],{"class":504}," ~\u002F.bashrc\n",[103,121842,121843],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[24,121845,121847],{"className":119886,"code":121846,"language":119888,"meta":29,"style":29},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[31,121848,121849,121861],{"__ignoreMap":29},[34,121850,121851,121853,121856,121858],{"class":36,"line":37},[34,121852,26688],{"class":55},[34,121854,121855],{"class":40}," PATH",[34,121857,221],{"class":55},[34,121859,121860],{"class":40},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[34,121862,121863,121865,121868,121870],{"class":36,"line":165},[34,121864,26688],{"class":55},[34,121866,121867],{"class":40}," LD_LIBRARY_PATH",[34,121869,221],{"class":55},[34,121871,121872],{"class":40},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[103,121874,121875],{},[109,121876],{"alt":29,"src":121877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[24,121879,121881],{"className":119886,"code":121880,"language":119888,"meta":29,"style":29},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[31,121882,121883,121888,121894,121899],{"__ignoreMap":29},[34,121884,121885],{"class":36,"line":37},[34,121886,121887],{"class":161},"# 刷新当前终端的环境变量\n",[34,121889,121890,121892],{"class":36,"line":165},[34,121891,102256],{"class":44},[34,121893,121840],{"class":504},[34,121895,121896],{"class":36,"line":171},[34,121897,121898],{"class":161},"# 验证CUDA是否安装成功\n",[34,121900,121901,121904],{"class":36,"line":182},[34,121902,121903],{"class":3617},"nvcc",[34,121905,121906],{"class":44}," -V\n",[103,121908,121909],{},"出现下图这种则安装成功。",[103,121911,121912],{},[109,121913],{"alt":29,"src":121914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[19,121916,121918],{"id":121917},"_354-安装cudnn","3.5.4 安装cuDNN",[1772,121920,121921],{},[1775,121922,121923],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[103,121925,121926,121927,121932],{},"前往 NVIDIA cuDNN 下载页面：",[236,121928,121931],{"href":121929,"rel":121930},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25510],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[103,121934,121935],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[103,121937,121938],{},[109,121939],{"alt":29,"src":121940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[103,121942,121943],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[103,121945,121946],{},[109,121947],{"alt":29,"src":121948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[103,121950,121951],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[103,121953,121954],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[103,121956,121957],{},[1165,121958,121959],{},"我这里选择所有Linux X86_64最通用的办法：",[103,121961,121962],{},"下载好的：",[103,121964,121965],{},[109,121966],{"alt":29,"src":121967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[1772,121969,121970],{"start":165},[1775,121971,121972],{},"安装cuDNN",[103,121974,121975],{},"找到该文件所在目录，并打开终端，cd到该目录。",[103,121977,121978],{},[109,121979],{"alt":29,"src":121980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[103,121982,121983],{},"解压文件，并复制到对应位置完成安装",[24,121985,121987],{"className":119886,"code":121986,"language":119888,"meta":29,"style":29},"# 解压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",[31,121988,121989,121994,122005,122010,122017,122022,122038,122052,122057,122068,122077,122081,122097],{"__ignoreMap":29},[34,121990,121991],{"class":36,"line":37},[34,121992,121993],{"class":161},"# 解压cuDNN文件\n",[34,121995,121996,121999,122002],{"class":36,"line":165},[34,121997,121998],{"class":3617},"tar",[34,122000,122001],{"class":44}," -xvf",[34,122003,122004],{"class":504}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[34,122006,122007],{"class":36,"line":171},[34,122008,122009],{"class":161},"# cd进文件夹\n",[34,122011,122012,122014],{"class":36,"line":182},[34,122013,102639],{"class":44},[34,122015,122016],{"class":504}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[34,122018,122019],{"class":36,"line":188},[34,122020,122021],{"class":161},"# 复制cuDNN文件到CUDA目录\n",[34,122023,122024,122026,122028,122031,122033,122036],{"class":36,"line":518},[34,122025,26222],{"class":3617},[34,122027,29507],{"class":504},[34,122029,122030],{"class":504}," include\u002Fcudnn",[34,122032,2252],{"class":44},[34,122034,122035],{"class":504},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[34,122037,4327],{"class":40},[34,122039,122040,122042,122044,122047,122049],{"class":36,"line":524},[34,122041,26222],{"class":3617},[34,122043,29507],{"class":504},[34,122045,122046],{"class":504}," lib\u002Flibcudnn",[34,122048,2252],{"class":44},[34,122050,122051],{"class":504},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[34,122053,122054],{"class":36,"line":530},[34,122055,122056],{"class":161},"# 对比一下有没有缺文件\n",[34,122058,122059,122061,122064,122066],{"class":36,"line":624},[34,122060,28407],{"class":3617},[34,122062,122063],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[34,122065,2252],{"class":44},[34,122067,4327],{"class":40},[34,122069,122070,122072,122075],{"class":36,"line":630},[34,122071,28407],{"class":3617},[34,122073,122074],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[34,122076,120611],{"class":44},[34,122078,122079],{"class":36,"line":636},[34,122080,121660],{"class":161},[34,122082,122083,122085,122087,122090,122092,122094],{"class":36,"line":1513},[34,122084,26222],{"class":3617},[34,122086,26225],{"class":504},[34,122088,122089],{"class":504}," a+r",[34,122091,122063],{"class":504},[34,122093,2252],{"class":44},[34,122095,122096],{"class":40},"   \n",[34,122098,122099,122101,122103,122105,122107],{"class":36,"line":1519},[34,122100,26222],{"class":3617},[34,122102,26225],{"class":504},[34,122104,122089],{"class":504},[34,122106,122074],{"class":504},[34,122108,120611],{"class":44},[1772,122110,122111],{"start":171},[1775,122112,122113],{},"检查是否安装成功",[24,122115,122117],{"className":119886,"code":122116,"language":119888,"meta":29,"style":29},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[31,122118,122119,122124],{"__ignoreMap":29},[34,122120,122121],{"class":36,"line":37},[34,122122,122123],{"class":161},"# 检查cuDNN版本命令\n",[34,122125,122126,122129,122132,122134,122136,122139,122142],{"class":36,"line":165},[34,122127,122128],{"class":3617},"cat",[34,122130,122131],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[34,122133,26755],{"class":55},[34,122135,31882],{"class":3617},[34,122137,122138],{"class":504}," CUDNN_MAJOR",[34,122140,122141],{"class":44}," -A",[34,122143,49362],{"class":44},[103,122145,122146],{},"出现下图这样的就是安装成功了",[103,122148,122149],{},[109,122150],{"alt":29,"src":122151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[1772,122153,122154],{"start":182},[1775,122155,122156],{},"软链接(一般不需要)",[24,122158,122160],{"className":119886,"code":122159,"language":119888,"meta":29,"style":29},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[31,122161,122162,122167],{"__ignoreMap":29},[34,122163,122164],{"class":36,"line":37},[34,122165,122166],{"class":161},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[34,122168,122169,122171],{"class":36,"line":165},[34,122170,26222],{"class":3617},[34,122172,122173],{"class":504}," ldconfig\n",[103,122175,122176],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[24,122178,122183],{"className":122179,"code":122180,"language":122181,"meta":122182,"style":29},"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",[31,122184,122185,122190,122195,122200,122205,122210,122215],{"__ignoreMap":29},[34,122186,122187],{"class":36,"line":37},[34,122188,122189],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[34,122191,122192],{"class":36,"line":165},[34,122193,122194],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[34,122196,122197],{"class":36,"line":171},[34,122198,122199],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[34,122201,122202],{"class":36,"line":182},[34,122203,122204],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[34,122206,122207],{"class":36,"line":188},[34,122208,122209],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[34,122211,122212],{"class":36,"line":518},[34,122213,122214],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[34,122216,122217],{"class":36,"line":524},[34,122218,122219],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[103,122221,122222],{},"运行下方的命令",[24,122224,122226],{"className":119886,"code":122225,"language":119888,"meta":29,"style":29},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[31,122227,122228,122233,122240,122245],{"__ignoreMap":29},[34,122229,122230],{"class":36,"line":37},[34,122231,122232],{"class":161},"# cd进入CUDA路径\n",[34,122234,122235,122237],{"class":36,"line":165},[34,122236,102639],{"class":44},[34,122238,122239],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[34,122241,122242],{"class":36,"line":171},[34,122243,122244],{"class":161}," # 查看本路径下的需要软链接的文件名\n",[34,122246,122247],{"class":36,"line":182},[34,122248,122249],{"class":3617}," ls\n",[103,122251,122252],{},[109,122253],{"alt":29,"src":122254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[103,122256,122257,122258,20056,122261,20056,122264,122267],{},"如上图，我需要将",[31,122259,122260],{},"libcudnn_xxx_xxxxx.so.8.9.7",[31,122262,122263],{},"libcudnn_xxx_xxxxx.so.8",[31,122265,122266],{},"libcudnn_xxx_xxxxx.so","软链接",[24,122269,122271],{"className":119886,"code":122270,"language":119888,"meta":29,"style":29},"# 创建符号链接。对于每个 .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",[31,122272,122273,122278,122294,122308,122322,122336,122350,122364,122378,122383,122389,122394],{"__ignoreMap":29},[34,122274,122275],{"class":36,"line":37},[34,122276,122277],{"class":161},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[34,122279,122280,122282,122285,122288,122291],{"class":36,"line":165},[34,122281,26222],{"class":3617},[34,122283,122284],{"class":504}," ln",[34,122286,122287],{"class":44}," -sf",[34,122289,122290],{"class":504}," libcudnn_cnn_train.so.8.9.7",[34,122292,122293],{"class":504}," libcudnn_cnn_train.so.8\n",[34,122295,122296,122298,122300,122302,122305],{"class":36,"line":171},[34,122297,26222],{"class":3617},[34,122299,122284],{"class":504},[34,122301,122287],{"class":44},[34,122303,122304],{"class":504}," libcudnn_adv_infer.so.8.9.7",[34,122306,122307],{"class":504}," libcudnn_adv_infer.so.8\n",[34,122309,122310,122312,122314,122316,122319],{"class":36,"line":182},[34,122311,26222],{"class":3617},[34,122313,122284],{"class":504},[34,122315,122287],{"class":44},[34,122317,122318],{"class":504}," libcudnn_adv_train.so.8.9.7",[34,122320,122321],{"class":504}," libcudnn_adv_train.so.8\n",[34,122323,122324,122326,122328,122330,122333],{"class":36,"line":188},[34,122325,26222],{"class":3617},[34,122327,122284],{"class":504},[34,122329,122287],{"class":44},[34,122331,122332],{"class":504}," libcudnn_cnn_infer.so.8.9.7",[34,122334,122335],{"class":504}," libcudnn_cnn_infer.so.8\n",[34,122337,122338,122340,122342,122344,122347],{"class":36,"line":518},[34,122339,26222],{"class":3617},[34,122341,122284],{"class":504},[34,122343,122287],{"class":44},[34,122345,122346],{"class":504}," libcudnn.so.8.9.7",[34,122348,122349],{"class":504}," libcudnn.so.8\n",[34,122351,122352,122354,122356,122358,122361],{"class":36,"line":524},[34,122353,26222],{"class":3617},[34,122355,122284],{"class":504},[34,122357,122287],{"class":44},[34,122359,122360],{"class":504}," libcudnn_ops_infer.so.8.9.7",[34,122362,122363],{"class":504}," libcudnn_ops_infer.so.8\n",[34,122365,122366,122368,122370,122372,122375],{"class":36,"line":530},[34,122367,26222],{"class":3617},[34,122369,122284],{"class":504},[34,122371,122287],{"class":44},[34,122373,122374],{"class":504}," libcudnn_ops_train.so.8.9.7",[34,122376,122377],{"class":504}," libcudnn_ops_train.so.8\n",[34,122379,122380],{"class":36,"line":624},[34,122381,122382],{"class":161},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[34,122384,122385,122387],{"class":36,"line":630},[34,122386,26222],{"class":3617},[34,122388,122173],{"class":504},[34,122390,122391],{"class":36,"line":636},[34,122392,122393],{"class":161},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[34,122395,122396,122398,122401,122404,122406,122409],{"class":36,"line":1513},[34,122397,28407],{"class":3617},[34,122399,122400],{"class":44}," -l",[34,122402,122403],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[34,122405,2252],{"class":44},[34,122407,122408],{"class":504},".so",[34,122410,120611],{"class":44},[19,122412,122414],{"id":122413},"_355-常见问题","3.5.5 常见问题",[1772,122416,122417],{},[1775,122418,122419],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[24,122421,122423],{"className":119886,"code":122422,"language":119888,"meta":29,"style":29},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[31,122424,122425],{"__ignoreMap":29},[34,122426,122427,122429,122431],{"class":36,"line":37},[34,122428,26222],{"class":3617},[34,122430,119946],{"class":504},[34,122432,122433],{"class":504}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[103,122435,122436],{},"blacklist-nouveau.conf文件内容如下：",[24,122438,122440],{"className":119886,"code":122439,"language":119888,"meta":29,"style":29},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[31,122441,122442,122450,122457,122469,122479],{"__ignoreMap":29},[34,122443,122444,122447],{"class":36,"line":37},[34,122445,122446],{"class":3617},"blacklist",[34,122448,122449],{"class":504}," nouveau\n",[34,122451,122452,122454],{"class":36,"line":165},[34,122453,122446],{"class":3617},[34,122455,122456],{"class":504}," lbm-nouveau\n",[34,122458,122459,122461,122464,122467],{"class":36,"line":171},[34,122460,117293],{"class":3617},[34,122462,122463],{"class":504}," nouveau",[34,122465,122466],{"class":504}," modeset=",[34,122468,4738],{"class":44},[34,122470,122471,122474,122476],{"class":36,"line":182},[34,122472,122473],{"class":44},"alias",[34,122475,122463],{"class":504},[34,122477,122478],{"class":504}," off\n",[34,122480,122481,122483,122486],{"class":36,"line":188},[34,122482,122473],{"class":44},[34,122484,122485],{"class":504}," lbm-nouveau",[34,122487,122478],{"class":504},[103,122489,122490],{},"接着运行下方命令",[24,122492,122494],{"className":119886,"code":122493,"language":119888,"meta":29,"style":29},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[31,122495,122496,122506,122511],{"__ignoreMap":29},[34,122497,122498,122500,122503],{"class":36,"line":37},[34,122499,26222],{"class":3617},[34,122501,122502],{"class":504}," update-initramfs",[34,122504,122505],{"class":44}," -u\n",[34,122507,122508],{"class":36,"line":165},[34,122509,122510],{"class":3617},"或者\n",[34,122512,122513,122515,122518],{"class":36,"line":171},[34,122514,26222],{"class":3617},[34,122516,122517],{"class":504}," dracut",[34,122519,122520],{"class":44}," --force\n",[103,122522,122523],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[24,122525,122527],{"className":119886,"code":122526,"language":119888,"meta":29,"style":29},"lsmod | grep nouveau\n",[31,122528,122529],{"__ignoreMap":29},[34,122530,122531,122534,122536,122538],{"class":36,"line":37},[34,122532,122533],{"class":3617},"lsmod",[34,122535,26755],{"class":55},[34,122537,31882],{"class":3617},[34,122539,122449],{"class":504},[1772,122541,122542],{"start":165},[1775,122543,122544],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[24,122546,122548],{"className":119886,"code":122547,"language":119888,"meta":29,"style":29},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[31,122549,122550],{"__ignoreMap":29},[34,122551,122552,122554,122556],{"class":36,"line":37},[34,122553,26222],{"class":3617},[34,122555,119946],{"class":504},[34,122557,122558],{"class":504}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[103,122560,122561],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[24,122563,122565],{"className":119886,"code":122564,"language":119888,"meta":29,"style":29},"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",[31,122566,122567,122575,122583,122591,122598,122606,122616,122624],{"__ignoreMap":29},[34,122568,122569,122572],{"class":36,"line":37},[34,122570,122571],{"class":3617},"Section",[34,122573,122574],{"class":504}," \"OutputClass\"\n",[34,122576,122577,122580],{"class":36,"line":165},[34,122578,122579],{"class":3617},"   Identifier",[34,122581,122582],{"class":504}," \"nvidia\"\n",[34,122584,122585,122588],{"class":36,"line":171},[34,122586,122587],{"class":3617},"   MatchDriver",[34,122589,122590],{"class":504}," \"nvidia-drm\"\n",[34,122592,122593,122596],{"class":36,"line":182},[34,122594,122595],{"class":3617},"   Driver",[34,122597,122582],{"class":504},[34,122599,122600,122603],{"class":36,"line":188},[34,122601,122602],{"class":3617},"   Option",[34,122604,122605],{"class":504}," \"AllowEmptyInitialConfiguration\"\n",[34,122607,122608,122610,122613],{"class":36,"line":518},[34,122609,122602],{"class":3617},[34,122611,122612],{"class":504}," \"PrimaryGPU\"",[34,122614,122615],{"class":504}," \"yes\"\n",[34,122617,122618,122621],{"class":36,"line":524},[34,122619,122620],{"class":3617},"   ModulePath",[34,122622,122623],{"class":504}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[34,122625,122626],{"class":36,"line":530},[34,122627,122628],{"class":3617},"EndSection\n",[1772,122630,122631],{"start":171},[1775,122632,122633],{},"安装N卡驱动提示错误",[24,122635,122637],{"className":122179,"code":122636,"language":122181,"meta":122182,"style":29},"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",[31,122638,122639],{"__ignoreMap":29},[34,122640,122641],{"class":36,"line":37},[34,122642,122636],{},[1772,122644,122645],{},[1775,122646,122647],{},"检查当前运行的内核版本：",[103,122649,122650],{},"运行以下命令以查看你当前正在使用的内核版本：",[24,122652,122654],{"className":118659,"code":122653,"language":118661,"meta":29,"style":29},"uname -r\n",[31,122655,122656],{"__ignoreMap":29},[34,122657,122658,122660],{"class":36,"line":37},[34,122659,71843],{"class":3617},[34,122661,122662],{"class":44}," -r\n",[1772,122664,122665],{"start":165},[1775,122666,122667],{},"安装内核开发文件：",[103,122669,122670,122671,122674],{},"确保你已经安装了与当前内核版本相匹配的 ",[31,122672,122673],{},"kernel-devel"," 包。运行以下命令来安装：",[24,122676,122678],{"className":118659,"code":122677,"language":118661,"meta":29,"style":29},"sudo dnf install kernel-devel-$(uname -r)\n",[31,122679,122680],{"__ignoreMap":29},[34,122681,122682,122684,122686,122688,122691,122693,122695,122697],{"class":36,"line":37},[34,122683,26222],{"class":3617},[34,122685,27961],{"class":504},[34,122687,25479],{"class":504},[34,122689,122690],{"class":504}," kernel-devel-",[34,122692,26745],{"class":40},[34,122694,71843],{"class":3617},[34,122696,121002],{"class":44},[34,122698,101],{"class":40},[103,122700,122701],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[1772,122703,122704],{"start":171},[1775,122705,122706],{},"安装内核源代码（如果需要）：",[103,122708,122709],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[24,122711,122713],{"className":118659,"code":122712,"language":118661,"meta":29,"style":29},"sudo dnf install kernel-headers kernel-source\n",[31,122714,122715],{"__ignoreMap":29},[34,122716,122717,122719,122721,122723,122726],{"class":36,"line":37},[34,122718,26222],{"class":3617},[34,122720,27961],{"class":504},[34,122722,25479],{"class":504},[34,122724,122725],{"class":504}," kernel-headers",[34,122727,122728],{"class":504}," kernel-source\n",[1772,122730,122731],{"start":182},[1775,122732,122733],{},"检查安装：",[103,122735,122736,122737,122740],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[31,122738,122739],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[24,122742,122744],{"className":118659,"code":122743,"language":118661,"meta":29,"style":29},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[31,122745,122746],{"__ignoreMap":29},[34,122747,122748,122750],{"class":36,"line":37},[34,122749,28407],{"class":3617},[34,122751,122752],{"class":504}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[103,122754,122755,122756,122759],{},"如果仍然遇到问题，可以通过 ",[31,122757,122758],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1711,122761,122762],{},"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":29,"searchDepth":165,"depth":165,"links":122764},[122765,122769,122779,122783,122784],{"id":119862,"depth":165,"text":119863,"children":122766},[122767,122768],{"id":119872,"depth":171,"text":119873},{"id":119882,"depth":171,"text":119883},{"id":120082,"depth":165,"text":120083,"children":122770},[122771,122772,122773,122774,122775,122776,122777,122778],{"id":120086,"depth":171,"text":120087},{"id":120156,"depth":171,"text":120157},{"id":120245,"depth":171,"text":120246},{"id":120490,"depth":171,"text":120491},{"id":120560,"depth":171,"text":120561},{"id":120627,"depth":171,"text":120628},{"id":120662,"depth":171,"text":120663},{"id":120717,"depth":171,"text":120718},{"id":120768,"depth":165,"text":120769,"children":122780},[122781,122782],{"id":120772,"depth":171,"text":120773},{"id":120852,"depth":171,"text":120853},{"id":121038,"depth":165,"text":121039},{"id":121211,"depth":165,"text":121212,"children":122785},[122786,122787,122788,122789,122790],{"id":121215,"depth":171,"text":121216},{"id":121256,"depth":171,"text":121257},{"id":121543,"depth":171,"text":121544},{"id":121917,"depth":171,"text":121918},{"id":122413,"depth":171,"text":122414},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119854,"description":1744},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122797,"title":122798,"body":122799,"description":1744,"extension":1745,"meta":123139,"navigation":1474,"path":123140,"seo":123141,"stem":123142,"__hash__":123143},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122800,"toc":123137},[122801,122804,122809,122812,123058,123063,123066,123102,123105,123134],[10,122802,122798],{"id":122803},"_4-命令教程长期积累",[1772,122805,122806],{},[1775,122807,122808],{},"大多数命令",[103,122810,122811],{},"常用 Linux 命令速查：",[24,122813,122815],{"className":118659,"code":122814,"language":118661,"meta":29,"style":29},"# 文件与目录\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",[31,122816,122817,122822,122829,122836,122844,122851,122858,122866,122874,122881,122888,122896,122900,122905,122912,122920,122927,122931,122936,122943,122951,122959,122967,122975,122979,122984,122992,122999,123006,123014,123022,123026,123031,123040,123049],{"__ignoreMap":29},[34,122818,122819],{"class":36,"line":37},[34,122820,122821],{"class":161},"# 文件与目录\n",[34,122823,122824,122826],{"class":36,"line":165},[34,122825,28407],{"class":3617},[34,122827,122828],{"class":161},"        # 列出目录内容\n",[34,122830,122831,122833],{"class":36,"line":171},[34,122832,102639],{"class":44},[34,122834,122835],{"class":161},"        # 切换目录\n",[34,122837,122838,122841],{"class":36,"line":182},[34,122839,122840],{"class":44},"pwd",[34,122842,122843],{"class":161},"       # 显示当前路径\n",[34,122845,122846,122848],{"class":36,"line":188},[34,122847,102629],{"class":3617},[34,122849,122850],{"class":161},"     # 创建目录\n",[34,122852,122853,122855],{"class":36,"line":518},[34,122854,26968],{"class":3617},[34,122856,122857],{"class":161},"        # 删除文件或目录\n",[34,122859,122860,122863],{"class":36,"line":524},[34,122861,122862],{"class":3617},"cp",[34,122864,122865],{"class":161},"        # 复制文件或目录\n",[34,122867,122868,122871],{"class":36,"line":530},[34,122869,122870],{"class":3617},"mv",[34,122872,122873],{"class":161},"        # 移动\u002F重命名文件或目录\n",[34,122875,122876,122878],{"class":36,"line":624},[34,122877,102646],{"class":3617},[34,122879,122880],{"class":161},"     # 创建空文件\n",[34,122882,122883,122885],{"class":36,"line":630},[34,122884,122128],{"class":3617},[34,122886,122887],{"class":161},"       # 查看文件内容\n",[34,122889,122890,122893],{"class":36,"line":636},[34,122891,122892],{"class":3617},"head\u002Ftail",[34,122894,122895],{"class":161}," # 查看文件头部\u002F尾部\n",[34,122897,122898],{"class":36,"line":1513},[34,122899,1475],{"emptyLinePlaceholder":1474},[34,122901,122902],{"class":36,"line":1519},[34,122903,122904],{"class":161},"# 权限管理\n",[34,122906,122907,122909],{"class":36,"line":3283},[34,122908,26257],{"class":3617},[34,122910,122911],{"class":161},"     # 修改文件权限\n",[34,122913,122914,122917],{"class":36,"line":3297},[34,122915,122916],{"class":3617},"chown",[34,122918,122919],{"class":161},"     # 修改文件所有者\n",[34,122921,122922,122924],{"class":36,"line":3302},[34,122923,26222],{"class":3617},[34,122925,122926],{"class":161},"      # 以管理员身份执行\n",[34,122928,122929],{"class":36,"line":3308},[34,122930,1475],{"emptyLinePlaceholder":1474},[34,122932,122933],{"class":36,"line":3328},[34,122934,122935],{"class":161},"# 系统信息\n",[34,122937,122938,122940],{"class":36,"line":3333},[34,122939,71843],{"class":3617},[34,122941,122942],{"class":161},"     # 系统信息\n",[34,122944,122945,122948],{"class":36,"line":3347},[34,122946,122947],{"class":3617},"df",[34,122949,122950],{"class":161},"        # 磁盘使用情况\n",[34,122952,122953,122956],{"class":36,"line":3352},[34,122954,122955],{"class":3617},"free",[34,122957,122958],{"class":161},"      # 内存使用情况\n",[34,122960,122961,122964],{"class":36,"line":3381},[34,122962,122963],{"class":3617},"top\u002Fhtop",[34,122965,122966],{"class":161},"  # 进程监控\n",[34,122968,122969,122972],{"class":36,"line":3386},[34,122970,122971],{"class":3617},"ps",[34,122973,122974],{"class":161},"        # 查看进程\n",[34,122976,122977],{"class":36,"line":3403},[34,122978,1475],{"emptyLinePlaceholder":1474},[34,122980,122981],{"class":36,"line":3408},[34,122982,122983],{"class":161},"# 网络\n",[34,122985,122986,122989],{"class":36,"line":3413},[34,122987,122988],{"class":3617},"ping",[34,122990,122991],{"class":161},"      # 测试网络连通性\n",[34,122993,122994,122996],{"class":36,"line":3418},[34,122995,28495],{"class":3617},[34,122997,122998],{"class":161},"      # 发送 HTTP 请求\n",[34,123000,123001,123003],{"class":36,"line":3432},[34,123002,121652],{"class":3617},[34,123004,123005],{"class":161},"      # 下载文件\n",[34,123007,123008,123011],{"class":36,"line":3437},[34,123009,123010],{"class":3617},"ssh",[34,123012,123013],{"class":161},"       # 远程登录\n",[34,123015,123016,123019],{"class":36,"line":4230},[34,123017,123018],{"class":3617},"scp",[34,123020,123021],{"class":161},"       # 远程文件传输\n",[34,123023,123024],{"class":36,"line":4244},[34,123025,1475],{"emptyLinePlaceholder":1474},[34,123027,123028],{"class":36,"line":4252},[34,123029,123030],{"class":161},"# 包管理（Debian\u002FUbuntu）\n",[34,123032,123033,123035,123037],{"class":36,"line":4257},[34,123034,118731],{"class":3617},[34,123036,118710],{"class":504},[34,123038,123039],{"class":161},"   # 更新软件源\n",[34,123041,123042,123044,123046],{"class":36,"line":4263},[34,123043,118731],{"class":3617},[34,123045,25479],{"class":504},[34,123047,123048],{"class":161},"  # 安装软件包\n",[34,123050,123051,123053,123055],{"class":36,"line":4269},[34,123052,118731],{"class":3617},[34,123054,27725],{"class":504},[34,123056,123057],{"class":161},"   # 卸载软件包\n",[1772,123059,123060],{"start":165},[1775,123061,123062],{},"KDE Dolphin 以root打开",[103,123064,123065],{},"kde5",[24,123067,123069],{"className":118659,"code":123068,"language":118661,"meta":29,"style":29},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[31,123070,123071],{"__ignoreMap":29},[34,123072,123073,123076,123079,123082,123084,123086,123089,123092,123094,123097,123099],{"class":36,"line":37},[34,123074,123075],{"class":3617},"pkexec",[34,123077,123078],{"class":504}," env",[34,123080,123081],{"class":504}," DISPLAY=",[34,123083,29789],{"class":40},[34,123085,29847],{"class":504},[34,123087,123088],{"class":40},"$XAUTHORITY ",[34,123090,123091],{"class":504},"KDE_SESSION_VERSION=",[34,123093,224],{"class":44},[34,123095,123096],{"class":504}," KDE_FULL_SESSION=",[34,123098,3021],{"class":44},[34,123100,123101],{"class":504}," dolphin\n",[103,123103,123104],{},"kde6",[24,123106,123108],{"className":118659,"code":123107,"language":118661,"meta":29,"style":29},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[31,123109,123110],{"__ignoreMap":29},[34,123111,123112,123114,123116,123118,123120,123122,123124,123126,123128,123130,123132],{"class":36,"line":37},[34,123113,123075],{"class":3617},[34,123115,123078],{"class":504},[34,123117,123081],{"class":504},[34,123119,29789],{"class":40},[34,123121,29847],{"class":504},[34,123123,123088],{"class":40},[34,123125,123091],{"class":504},[34,123127,1115],{"class":44},[34,123129,123096],{"class":504},[34,123131,3021],{"class":44},[34,123133,123101],{"class":504},[1711,123135,123136],{},"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":29,"searchDepth":165,"depth":165,"links":123138},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122798,"description":1744},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123145,"title":123146,"body":123147,"description":1744,"extension":1745,"meta":123161,"navigation":1474,"path":123162,"seo":123163,"stem":123164,"__hash__":123165},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123148,"toc":123159},[123149,123152],[10,123150,123146],{"id":123151},"_5-各种环境配置",[103,123153,123154],{},[236,123155,123158],{"href":123156,"rel":123157},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25510],"电控组环境搭建大全",{"title":29,"searchDepth":165,"depth":165,"links":123160},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123146,"description":1744},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123167,"title":123168,"body":123169,"description":1744,"extension":1745,"meta":123517,"navigation":1474,"path":123518,"seo":123519,"stem":123520,"__hash__":123521},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123170,"toc":123509},[123171,123174,123178,123182,123186,123191,123198,123202,123495,123499,123506],[10,123172,123168],{"id":123173},"_6-拓展功能",[14,123175,123177],{"id":123176},"_61-wine","6.1 Wine",[14,123179,123181],{"id":123180},"_62-android","6.2 Android",[19,123183,123185],{"id":123184},"_621-i卡a卡","6.2.1 I卡、A卡",[1772,123187,123188],{},[1775,123189,123190],{},"Wayland-Waydroid(体验超级好)",[103,123192,123193,123194],{},"Waydroid 官网与安装指南：",[236,123195,123196],{"href":123196,"rel":123197},"https:\u002F\u002Fwaydro.id\u002F",[25510],[19,123199,123201],{"id":123200},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[1772,123203,123204],{},[1775,123205,123206,123207,123209,123210,123214,123216,123219,123224,123421],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55355,123208],{},"BlissOS 官网下载：",[236,123211,123212],{"href":123212,"rel":123213},"https:\u002F\u002Fblissos.org\u002F",[25510],[55355,123215],{},[109,123217],{"alt":29,"src":123218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[1772,123220,123221],{"start":171},[1775,123222,123223],{},"比较推荐的配置",[24,123225,123227],{"className":118659,"code":123226,"language":118661,"meta":29,"style":29},"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",[31,123228,123229,123236,123246,123256,123266,123278,123288,123295,123305,123314,123323,123333,123343,123352,123362,123372,123384,123394,123403,123413],{"__ignoreMap":29},[34,123230,123231,123234],{"class":36,"line":37},[34,123232,123233],{"class":3617},"qemu-system-x86_64",[34,123235,26324],{"class":44},[34,123237,123238,123241,123244],{"class":36,"line":165},[34,123239,123240],{"class":44},"        -M",[34,123242,123243],{"class":504}," q35,vmport=off",[34,123245,26324],{"class":44},[34,123247,123248,123251,123254],{"class":36,"line":171},[34,123249,123250],{"class":44},"        -accel",[34,123252,123253],{"class":504}," kvm",[34,123255,26324],{"class":44},[34,123257,123258,123261,123264],{"class":36,"line":182},[34,123259,123260],{"class":44},"        -cpu",[34,123262,123263],{"class":504}," qemu64,+sse3,+sse4.2",[34,123265,26324],{"class":44},[34,123267,123268,123271,123274,123276],{"class":36,"line":188},[34,123269,123270],{"class":44},"        -smp",[34,123272,123273],{"class":504}," 8,cores=",[34,123275,247],{"class":44},[34,123277,26324],{"class":44},[34,123279,123280,123283,123286],{"class":36,"line":518},[34,123281,123282],{"class":44},"        -m",[34,123284,123285],{"class":504}," 6G",[34,123287,26324],{"class":44},[34,123289,123290,123293],{"class":36,"line":524},[34,123291,123292],{"class":44},"        -usb",[34,123294,26324],{"class":44},[34,123296,123297,123300,123303],{"class":36,"line":530},[34,123298,123299],{"class":44},"        -device",[34,123301,123302],{"class":504}," virtio-tablet",[34,123304,26324],{"class":44},[34,123306,123307,123309,123312],{"class":36,"line":624},[34,123308,123299],{"class":44},[34,123310,123311],{"class":504}," virtio-keyboard",[34,123313,26324],{"class":44},[34,123315,123316,123318,123321],{"class":36,"line":630},[34,123317,123299],{"class":44},[34,123319,123320],{"class":504}," usb-tablet",[34,123322,26324],{"class":44},[34,123324,123325,123328,123331],{"class":36,"line":636},[34,123326,123327],{"class":44},"        -bios",[34,123329,123330],{"class":504}," OVMF-pure-efi64.fd",[34,123332,26324],{"class":44},[34,123334,123335,123338,123341],{"class":36,"line":1513},[34,123336,123337],{"class":44},"        -net",[34,123339,123340],{"class":504}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[34,123342,26324],{"class":44},[34,123344,123345,123347,123350],{"class":36,"line":1519},[34,123346,123337],{"class":44},[34,123348,123349],{"class":504}," nic,model=virtio",[34,123351,26324],{"class":44},[34,123353,123354,123357,123360],{"class":36,"line":3283},[34,123355,123356],{"class":44},"        -audio",[34,123358,123359],{"class":504}," sdl,model=hda",[34,123361,26324],{"class":44},[34,123363,123364,123367,123370],{"class":36,"line":3297},[34,123365,123366],{"class":44},"        -display",[34,123368,123369],{"class":504}," sdl,gl=on,show-cursor=on",[34,123371,26324],{"class":44},[34,123373,123374,123376,123379,123382],{"class":36,"line":3302},[34,123375,123299],{"class":44},[34,123377,123378],{"class":504}," virtio-vga-gl,xres=1920,yres=",[34,123380,123381],{"class":44},"1080",[34,123383,26324],{"class":44},[34,123385,123386,123389,123392],{"class":36,"line":3308},[34,123387,123388],{"class":44},"        -drive",[34,123390,123391],{"class":504}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[34,123393,26324],{"class":44},[34,123395,123396,123398,123401],{"class":36,"line":3328},[34,123397,123388],{"class":44},[34,123399,123400],{"class":504}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[34,123402,26324],{"class":44},[34,123404,123405,123408,123411],{"class":36,"line":3333},[34,123406,123407],{"class":44},"        -monitor",[34,123409,123410],{"class":504}," stdio",[34,123412,26324],{"class":44},[34,123414,123415,123418],{"class":36,"line":3347},[34,123416,123417],{"class":44},"        -serial",[34,123419,123420],{"class":504}," none\n",[1772,123422,123423],{"start":188},[1775,123424,123425,123426],{},"常用操作：",[1772,123427,123428,123431,123487],{},[1775,123429,123430],{},"全屏：Ctrl+Alt+F",[1775,123432,123433,123434,123439],{},"adb调试",[1772,123435,123436],{},[1775,123437,123438],{},"使Linux与Android用ADB连接。",[24,123440,123442],{"className":118659,"code":123441,"language":118661,"meta":29,"style":29},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[31,123443,123444,123449,123460,123465,123477,123482],{"__ignoreMap":29},[34,123445,123446],{"class":36,"line":37},[34,123447,123448],{"class":161},"# 连接安卓\n",[34,123450,123451,123454,123457],{"class":36,"line":165},[34,123452,123453],{"class":3617},"adb",[34,123455,123456],{"class":504}," connect",[34,123458,123459],{"class":44}," 127.0.0.1\n",[34,123461,123462],{"class":36,"line":171},[34,123463,123464],{"class":161},"# 打开shell\n",[34,123466,123467,123469,123471,123474],{"class":36,"line":182},[34,123468,123453],{"class":3617},[34,123470,28529],{"class":44},[34,123472,123473],{"class":504}," 127.0.0.1:5555",[34,123475,123476],{"class":504}," shell\n",[34,123478,123479],{"class":36,"line":188},[34,123480,123481],{"class":161},"# 使用root权限\n",[34,123483,123484],{"class":36,"line":518},[34,123485,123486],{"class":3617},"su\n",[1775,123488,123489,123490],{},"中文输入法",[1772,123491,123492],{},[1775,123493,123494],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123496,123498],{"id":123497},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[103,123500,123501,123502],{},"rEFInd 官网与文档：",[236,123503,123504],{"href":123504,"rel":123505},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25510],[1711,123507,123508],{},"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":29,"searchDepth":165,"depth":165,"links":123510},[123511,123512,123516],{"id":123176,"depth":165,"text":123177},{"id":123180,"depth":165,"text":123181,"children":123513},[123514,123515],{"id":123184,"depth":171,"text":123185},{"id":123200,"depth":171,"text":123201},{"id":123497,"depth":165,"text":123498},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123168,"description":1744},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123523,"title":123524,"body":123525,"description":1744,"extension":1745,"meta":126824,"navigation":1474,"path":126825,"seo":126826,"stem":126827,"__hash__":126828},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123526,"toc":126798},[123527,123530,123534,123537,123544,123794,123797,123869,123872,123876,123880,123885,123888,123891,123894,123899,123902,123905,123908,123913,123916,123921,123924,123927,123932,123935,123940,123943,123947,123951,123954,123959,123962,123976,123979,123982,123991,123994,124003,124006,124009,124018,124021,124030,124033,124036,124045,124048,124051,124066,124069,124072,124081,124086,124089,124092,124101,124104,124113,124116,124125,124128,124137,124142,124145,124153,124158,124161,124170,124173,124181,124186,124189,124198,124201,124204,124208,124211,124216,124219,124224,124238,124243,124248,124259,124264,124270,124275,124290,124295,124298,124303,124308,124313,124321,124326,124333,124338,124349,124354,124357,124361,124364,124367,124372,124375,124394,124399,124402,124411,124416,124419,124441,124444,124474,124477,124482,124485,124499,124504,124523,124526,124529,124534,124546,124551,124556,124559,124564,124567,124582,124585,124590,124595,124599,124604,124644,124647,124651,124657,124663,124668,124671,124678,124683,124690,124693,124696,124703,124717,124720,124780,124783,124797,124809,124812,124815,124818,124882,124885,124888,124891,124911,124914,124919,124926,124930,124933,124937,124942,124947,124951,124954,124957,124999,125004,125007,125029,125044,125046,125051,125063,125123,125125,125127,125181,125183,125185,125191,125196,125199,125204,125208,125211,125273,125278,125281,125283,125287,125299,125381,125383,125385,125439,125445,125447,125451,125456,125458,125463,125467,125487,125522,125526,125529,125532,125535,125542,125545,125557,125560,125575,125578,125597,125645,125648,125665,125668,125682,125687,125690,125699,125714,125726,125764,125769,125778,125783,125788,125814,125823,125827,125831,125836,125839,125843,125847,125852,125855,125860,125863,125868,125871,125876,125879,125883,125888,125891,125896,125899,125903,125908,125911,125916,125919,125924,125927,125931,125936,125939,125944,125947,125952,125955,125959,125964,125967,125972,125975,125980,125983,125988,125991,125996,125999,126004,126007,126011,126016,126019,126024,126031,126035,126040,126043,126048,126051,126055,126060,126063,126066,126069,126072,126075,126079,126082,126092,126097,126102,126124,126129,126134,126141,126145,126150,126153,126156,126161,126164,126167,126170,126173,126176,126179,126182,126185,126188,126191,126194,126197,126202,126207,126212,126217,126222,126227,126232,126235,126239,126242,126246,126251,126256,126261,126266,126270,126276,126284,126289,126292,126297,126312,126315,126320,126354,126369,126372,126427,126453,126465,126468,126477,126480,126495,126500,126503,126509,126514,126517,126522,126525,126530,126535,126542,126545,126560,126563,126598,126603,126611,126649,126652,126655,126660,126663,126668,126679,126713,126718,126721,126730,126735,126741,126744,126749,126758,126763,126766,126769,126774,126782,126785,126790,126795],[10,123528,123524],{"id":123529},"_7-其他操作",[14,123531,123533],{"id":123532},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[103,123535,123536],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[103,123538,123539,123540,123543],{},"进入工控机的硬盘目录，进入",[31,123541,123542],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[24,123545,123549],{"className":123546,"code":123547,"language":123548,"meta":29,"style":29},"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",[31,123550,123551,123559,123570,123577,123584,123596,123603,123615,123626,123637,123644,123651,123658,123670,123682,123689,123701,123713,123720,123732,123744,123756,123767,123774,123785],{"__ignoreMap":29},[34,123552,123553,123556],{"class":36,"line":37},[34,123554,123555],{"class":52939},"network",[34,123557,123558],{"class":40},": \n",[34,123560,123561,123564,123566,123568],{"class":36,"line":165},[34,123562,123563],{"class":52939},"  version",[34,123565,53076],{"class":40},[34,123567,332],{"class":44},[34,123569,4327],{"class":40},[34,123571,123572,123575],{"class":36,"line":171},[34,123573,123574],{"class":52939},"  wifis",[34,123576,123558],{"class":40},[34,123578,123579,123582],{"class":36,"line":182},[34,123580,123581],{"class":52939},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[34,123583,123558],{"class":40},[34,123585,123586,123589,123591,123594],{"class":36,"line":188},[34,123587,123588],{"class":52939},"      renderer",[34,123590,53076],{"class":40},[34,123592,123593],{"class":504},"NetworkManager",[34,123595,4327],{"class":40},[34,123597,123598,123601],{"class":36,"line":518},[34,123599,123600],{"class":52939},"      match",[34,123602,123558],{"class":40},[34,123604,123605,123608,123610,123613],{"class":36,"line":524},[34,123606,123607],{"class":52939},"        name",[34,123609,53076],{"class":40},[34,123611,123612],{"class":504},"\"wlan0\"",[34,123614,4327],{"class":40},[34,123616,123617,123620,123622,123624],{"class":36,"line":530},[34,123618,123619],{"class":52939},"      dhcp4",[34,123621,53076],{"class":40},[34,123623,3021],{"class":44},[34,123625,4327],{"class":40},[34,123627,123628,123631,123633,123635],{"class":36,"line":624},[34,123629,123630],{"class":52939},"      dhcp6",[34,123632,53076],{"class":40},[34,123634,3021],{"class":44},[34,123636,4327],{"class":40},[34,123638,123639,123642],{"class":36,"line":630},[34,123640,123641],{"class":52939},"      access-points",[34,123643,123558],{"class":40},[34,123645,123646,123649],{"class":36,"line":636},[34,123647,123648],{"class":504},"        \"EMIS_Vinci_Robocon_5G\"",[34,123650,123558],{"class":40},[34,123652,123653,123656],{"class":36,"line":1513},[34,123654,123655],{"class":52939},"          auth",[34,123657,123558],{"class":40},[34,123659,123660,123663,123665,123668],{"class":36,"line":1519},[34,123661,123662],{"class":52939},"            key-management",[34,123664,53076],{"class":40},[34,123666,123667],{"class":504},"\"psk\"",[34,123669,4327],{"class":40},[34,123671,123672,123675,123677,123680],{"class":36,"line":3283},[34,123673,123674],{"class":52939},"            password",[34,123676,53076],{"class":40},[34,123678,123679],{"class":504},"\"vinci666\"",[34,123681,4327],{"class":40},[34,123683,123684,123687],{"class":36,"line":3297},[34,123685,123686],{"class":52939},"          networkmanager",[34,123688,123558],{"class":40},[34,123690,123691,123694,123696,123699],{"class":36,"line":3302},[34,123692,123693],{"class":52939},"            uuid",[34,123695,53076],{"class":40},[34,123697,123698],{"class":504},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[34,123700,4327],{"class":40},[34,123702,123703,123706,123708,123711],{"class":36,"line":3308},[34,123704,123705],{"class":52939},"            name",[34,123707,53076],{"class":40},[34,123709,123710],{"class":504},"\"EMIS_Vinci_Robocon_5G\"",[34,123712,4327],{"class":40},[34,123714,123715,123718],{"class":36,"line":3328},[34,123716,123717],{"class":52939},"            passthrough",[34,123719,123558],{"class":40},[34,123721,123722,123725,123727,123730],{"class":36,"line":3333},[34,123723,123724],{"class":52939},"              wifi-security.auth-alg",[34,123726,53076],{"class":40},[34,123728,123729],{"class":504},"\"open\"",[34,123731,4327],{"class":40},[34,123733,123734,123737,123739,123742],{"class":36,"line":3347},[34,123735,123736],{"class":52939},"              ipv6.addr-gen-mode",[34,123738,53076],{"class":40},[34,123740,123741],{"class":504},"\"default\"",[34,123743,4327],{"class":40},[34,123745,123746,123749,123751,123754],{"class":36,"line":3352},[34,123747,123748],{"class":52939},"              ipv6.ip6-privacy",[34,123750,53076],{"class":40},[34,123752,123753],{"class":504},"\"-1\"",[34,123755,4327],{"class":40},[34,123757,123758,123761,123763,123765],{"class":36,"line":3381},[34,123759,123760],{"class":52939},"              proxy._",[34,123762,53076],{"class":40},[34,123764,9302],{"class":504},[34,123766,4327],{"class":40},[34,123768,123769,123772],{"class":36,"line":3386},[34,123770,123771],{"class":52939},"      networkmanager",[34,123773,123558],{"class":40},[34,123775,123776,123779,123781,123783],{"class":36,"line":3403},[34,123777,123778],{"class":52939},"        uuid",[34,123780,53076],{"class":40},[34,123782,123698],{"class":504},[34,123784,4327],{"class":40},[34,123786,123787,123789,123791],{"class":36,"line":3408},[34,123788,123607],{"class":52939},[34,123790,53076],{"class":40},[34,123792,123793],{"class":504},"\"EMIS_Vinci_Robocon_5G\"\n",[103,123795,123796],{},"将其改为新wifi的名和密码：",[24,123798,123800],{"className":123546,"code":123799,"language":123548,"meta":29,"style":29},"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",[31,123801,123802,123808,123817,123823,123830,123839,123847,123853,123859],{"__ignoreMap":29},[34,123803,123804,123806],{"class":36,"line":37},[34,123805,123555],{"class":52939},[34,123807,5392],{"class":40},[34,123809,123810,123812,123814],{"class":36,"line":165},[34,123811,123563],{"class":52939},[34,123813,53076],{"class":40},[34,123815,123816],{"class":44},"2\n",[34,123818,123819,123821],{"class":36,"line":171},[34,123820,123574],{"class":52939},[34,123822,5392],{"class":40},[34,123824,123825,123828],{"class":36,"line":182},[34,123826,123827],{"class":52939},"    wlan0",[34,123829,5392],{"class":40},[34,123831,123832,123834,123836],{"class":36,"line":188},[34,123833,123619],{"class":52939},[34,123835,53076],{"class":40},[34,123837,123838],{"class":44},"true\n",[34,123840,123841,123843,123845],{"class":36,"line":518},[34,123842,123630],{"class":52939},[34,123844,53076],{"class":40},[34,123846,123838],{"class":44},[34,123848,123849,123851],{"class":36,"line":524},[34,123850,123641],{"class":52939},[34,123852,5392],{"class":40},[34,123854,123855,123857],{"class":36,"line":530},[34,123856,123648],{"class":504},[34,123858,5392],{"class":40},[34,123860,123861,123864,123866],{"class":36,"line":624},[34,123862,123863],{"class":52939},"          password",[34,123865,53076],{"class":40},[34,123867,123868],{"class":504},"\"vinci666\"\n",[103,123870,123871],{},"工控机开机即可连上网。",[14,123873,123875],{"id":123874},"_72-ssh远程开发","7.2 SSH远程开发",[19,123877,123879],{"id":123878},"_721-环境准备","7.2.1 环境准备",[103,123881,123882],{},[1165,123883,123884],{},"1.硬件准备",[103,123886,123887],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[103,123889,123890],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[103,123892,123893],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[103,123895,123896],{},[1165,123897,123898],{},"2.设置固定IP",[103,123900,123901],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[103,123903,123904],{},"1.进入设置界面",[103,123906,123907],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[103,123909,123910],{},[109,123911],{"alt":29,"src":123912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[103,123914,123915],{},"2.配置所连接的网络",[103,123917,123918],{},[109,123919],{"alt":29,"src":123920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[103,123922,123923],{},"3.设置固定IP",[103,123925,123926],{},"查看当前IP地址。",[103,123928,123929],{},[109,123930],{"alt":29,"src":123931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[103,123933,123934],{},"设置固定IP。",[103,123936,123937],{},[109,123938],{"alt":29,"src":123939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[103,123941,123942],{},"至此，IP配置完毕。",[19,123944,123946],{"id":123945},"_722-环境搭建","7.2.2 环境搭建",[103,123948,123949],{},[1165,123950,27399],{},[103,123952,123953],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[103,123955,123956],{},[1165,123957,123958],{},"实现",[103,123960,123961],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[1772,123963,123964,123967,123970,123973],{},[1775,123965,123966],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[1775,123968,123969],{},"远程主机启动SSH服务；",[1775,123971,123972],{},"本地主机登陆远程主机；",[1775,123974,123975],{},"实现数据传输。",[103,123977,123978],{},"1.安装SSH客户端与服务端",[103,123980,123981],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[24,123983,123985],{"className":122179,"code":123984,"language":122181,"meta":122182,"style":29}," sudo apt install openssh-server\n",[31,123986,123987],{"__ignoreMap":29},[34,123988,123989],{"class":36,"line":37},[34,123990,123984],{},[103,123992,123993],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[24,123995,123997],{"className":122179,"code":123996,"language":122181,"meta":122182,"style":29},"sudo apt install openssh-client\n",[31,123998,123999],{"__ignoreMap":29},[34,124000,124001],{"class":36,"line":37},[34,124002,123996],{},[103,124004,124005],{},"2.远程主机启动SSH服务",[103,124007,124008],{},"远程主机启动 ssh 服务命令如下：",[24,124010,124012],{"className":122179,"code":124011,"language":122181,"meta":122182,"style":29},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[31,124013,124014],{"__ignoreMap":29},[34,124015,124016],{"class":36,"line":37},[34,124017,124011],{},[103,124019,124020],{},"启动后可使用如下命令查看服务是否正常运行：",[24,124022,124024],{"className":122179,"code":124023,"language":122181,"meta":122182,"style":29},"ps -e | grep ssh\n",[31,124025,124026],{"__ignoreMap":29},[34,124027,124028],{"class":36,"line":37},[34,124029,124023],{},[103,124031,124032],{},"如果启动成功，会包含 sshd 程序。",[103,124034,124035],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[24,124037,124039],{"className":122179,"code":124038,"language":122181,"meta":122182,"style":29},"sudo systemctl enable ssh\n",[31,124040,124041],{"__ignoreMap":29},[34,124042,124043],{"class":36,"line":37},[34,124044,124038],{},[103,124046,124047],{},"3.本地远程登录",[103,124049,124050],{},"登录远程主机可以调用如下命令:",[24,124052,124054],{"className":118659,"code":124053,"language":118661,"meta":29,"style":29},"ssh -X 用户名@ip地址\n",[31,124055,124056],{"__ignoreMap":29},[34,124057,124058,124060,124063],{"class":36,"line":37},[34,124059,123010],{"class":3617},[34,124061,124062],{"class":44}," -X",[34,124064,124065],{"class":504}," 用户名@ip地址\n",[103,124067,124068],{},"然后根据提示，录入登陆密码，即可成功登录。",[103,124070,124071],{},"如果退出，可以调用exit命令：",[24,124073,124075],{"className":122179,"code":124074,"language":122181,"meta":122182,"style":29},"exit\n",[31,124076,124077],{"__ignoreMap":29},[34,124078,124079],{"class":36,"line":37},[34,124080,124074],{},[103,124082,124083],{},[1165,124084,124085],{},"4.实现数据传输",[103,124087,124088],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[103,124090,124091],{},"上传文件指令格式如下：",[24,124093,124095],{"className":122179,"code":124094,"language":122181,"meta":122182,"style":29},"scp 本地文件路径 账号@ip:路径\n",[31,124096,124097],{"__ignoreMap":29},[34,124098,124099],{"class":36,"line":37},[34,124100,124094],{},[103,124102,124103],{},"上传文件夹指令格式如下：",[24,124105,124107],{"className":122179,"code":124106,"language":122181,"meta":122182,"style":29},"scp -r 本地文件夹路径 账号@ip:路径\n",[31,124108,124109],{"__ignoreMap":29},[34,124110,124111],{"class":36,"line":37},[34,124112,124106],{},[103,124114,124115],{},"下载文件指令格式如下：",[24,124117,124119],{"className":122179,"code":124118,"language":122181,"meta":122182,"style":29},"scp 账号@ip:路径 本地文件夹路径\n",[31,124120,124121],{"__ignoreMap":29},[34,124122,124123],{"class":36,"line":37},[34,124124,124118],{},[103,124126,124127],{},"下载文件夹指令格式如下：",[24,124129,124131],{"className":122179,"code":124130,"language":122181,"meta":122182,"style":29},"scp -r 账号@ip:路径 本地文件夹路径\n",[31,124132,124133],{"__ignoreMap":29},[34,124134,124135],{"class":36,"line":37},[34,124136,124130],{},[103,124138,124139],{},[1165,124140,124141],{},"优化",[103,124143,124144],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[1772,124146,124147,124150],{},[1775,124148,124149],{},"本地生成密钥对；",[1775,124151,124152],{},"将公钥上传至远程主机。",[103,124154,124155],{},[1165,124156,124157],{},"1.生成密钥对",[103,124159,124160],{},"本地客户端生成公私钥：（一路回车默认即可）",[24,124162,124164],{"className":122179,"code":124163,"language":122181,"meta":122182,"style":29},"ssh-keygen\n",[31,124165,124166],{"__ignoreMap":29},[34,124167,124168],{"class":36,"line":37},[34,124169,124163],{},[103,124171,124172],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[1772,124174,124175,124178],{},[1775,124176,124177],{},"id_rsa （私钥）；",[1775,124179,124180],{},"id_rsa.pub (公钥)。",[103,124182,124183],{},[1165,124184,124185],{},"2.公钥上传",[103,124187,124188],{},"上传指令如下：",[24,124190,124192],{"className":122179,"code":124191,"language":122181,"meta":122182,"style":29},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[31,124193,124194],{"__ignoreMap":29},[34,124195,124196],{"class":36,"line":37},[34,124197,124191],{},[103,124199,124200],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[103,124202,124203],{},"以后再远程登录就无需录入密码了。",[19,124205,124207],{"id":124206},"_723-使用vscode优化","7.2.3 使用VScode优化",[103,124209,124210],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[103,124212,124213],{},[1165,124214,124215],{},"1.准备工作",[103,124217,124218],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[103,124220,124221],{},[1165,124222,124223],{},"2.为VScode安装远程开发插件",[103,124225,124226,124227,124230,124231,124234,124235,30031],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[31,124228,124229],{},"扩展：商店","的搜索栏输入",[31,124232,124233],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[31,124236,124237],{},"安装",[103,124239,124240],{},[109,124241],{"alt":29,"src":124242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[103,124244,124245],{},[1165,124246,124247],{},"3.配置远程连接",[103,124249,124250,124251,124254,124255,124258],{},"步骤1：使用快捷键",[31,124252,124253],{},"ctrl + shift + p","打开命令输入窗口，并输入",[31,124256,124257],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[103,124260,124261],{},[109,124262],{"alt":29,"src":124263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[103,124265,124266,124267,30031],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[31,124268,124269],{},"Add New SSH Host",[103,124271,124272],{},[109,124273],{"alt":29,"src":124274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[103,124276,124277,124278,124281,124282,124285,124286,124289],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[31,124279,124280],{},"ssh +X ubuntu@192.168.43.164","，其中，",[31,124283,124284],{},"ubuntu","需要替换为你的登录用户名，",[31,124287,124288],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[103,124291,124292],{},[109,124293],{"alt":29,"src":124294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[103,124296,124297],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[103,124299,124300],{},[109,124301],{"alt":29,"src":124302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[103,124304,124305],{},[109,124306],{"alt":29,"src":124307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[103,124309,124310],{},[1165,124311,124312],{},"4.使用",[103,124314,124315,124316,124254,124318,124320],{},"步骤1：继续使用快捷键",[31,124317,124253],{},[31,124319,124257],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[103,124322,124323],{},[109,124324],{"alt":29,"src":124325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[103,124327,124328,124329,124332],{},"或者，也可以点击侧边栏的",[31,124330,124331],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[103,124334,124335],{},[109,124336],{"alt":29,"src":124337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[103,124339,124340,124341,124344,124345,124348],{},"步骤2：选择菜单栏的",[31,124342,124343],{},"文件","下的",[31,124346,124347],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[103,124350,124351],{},[109,124352],{"alt":29,"src":124353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[103,124355,124356],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124358,124360],{"id":124359},"_73-远程桌面","7.3 远程桌面",[103,124362,124363],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[103,124365,124366],{},"我们选择使用VNC来看。",[1772,124368,124369],{},[1775,124370,124371],{},"安装VNC服务器：",[103,124373,124374],{},"这里以TigerVNC为例进行安装：",[24,124376,124378],{"className":118659,"code":124377,"language":118661,"meta":29,"style":29},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[31,124379,124380],{"__ignoreMap":29},[34,124381,124382,124384,124386,124388,124391],{"class":36,"line":37},[34,124383,26222],{"class":3617},[34,124385,118680],{"class":504},[34,124387,25479],{"class":504},[34,124389,124390],{"class":504}," tigervnc-standalone-server",[34,124392,124393],{"class":504}," tigervnc-common\n",[1772,124395,124396],{"start":165},[1775,124397,124398],{},"设置VNC密码：",[103,124400,124401],{},"为VNC用户设置密码，运行以下命令：",[24,124403,124405],{"className":118659,"code":124404,"language":118661,"meta":29,"style":29},"vncpasswd\n",[31,124406,124407],{"__ignoreMap":29},[34,124408,124409],{"class":36,"line":37},[34,124410,124404],{"class":3617},[1772,124412,124413],{"start":171},[1775,124414,124415],{},"配置VNC启动脚本:",[103,124417,124418],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[24,124420,124422],{"className":118659,"code":124421,"language":118661,"meta":29,"style":29},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[31,124423,124424,124433],{"__ignoreMap":29},[34,124425,124426,124428,124430],{"class":36,"line":37},[34,124427,102629],{"class":3617},[34,124429,30862],{"class":44},[34,124431,124432],{"class":504}," ~\u002F.vnc\n",[34,124434,124435,124438],{"class":36,"line":165},[34,124436,124437],{"class":3617},"nano",[34,124439,124440],{"class":504}," ~\u002F.vnc\u002Fxstartup\n",[103,124442,124443],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[24,124445,124447],{"className":118659,"code":124446,"language":118661,"meta":29,"style":29},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[31,124448,124449,124454,124462,124469],{"__ignoreMap":29},[34,124450,124451],{"class":36,"line":37},[34,124452,124453],{"class":161},"#!\u002Fbin\u002Fsh\n",[34,124455,124456,124459],{"class":36,"line":165},[34,124457,124458],{"class":44},"unset",[34,124460,124461],{"class":504}," SESSION_MANAGER\n",[34,124463,124464,124466],{"class":36,"line":171},[34,124465,124458],{"class":44},[34,124467,124468],{"class":504}," DBUS_SESSION_BUS_ADDRESS\n",[34,124470,124471],{"class":36,"line":182},[34,124472,124473],{"class":3617},"gnome-session\n",[103,124475,124476],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[1772,124478,124479],{"start":182},[1775,124480,124481],{},"给予执行权限：",[103,124483,124484],{},"为xstartup文件设置执行权限：",[24,124486,124488],{"className":118659,"code":124487,"language":118661,"meta":29,"style":29},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[31,124489,124490],{"__ignoreMap":29},[34,124491,124492,124494,124497],{"class":36,"line":37},[34,124493,26257],{"class":3617},[34,124495,124496],{"class":504}," +x",[34,124498,124440],{"class":504},[1772,124500,124501],{"start":188},[1775,124502,124503],{},"启动VNC服务器：",[24,124505,124507],{"className":118659,"code":124506,"language":118661,"meta":29,"style":29},"vncserver -geometry 1920x1080 -localhost=0\n",[31,124508,124509],{"__ignoreMap":29},[34,124510,124511,124514,124517,124520],{"class":36,"line":37},[34,124512,124513],{"class":3617},"vncserver",[34,124515,124516],{"class":44}," -geometry",[34,124518,124519],{"class":504}," 1920x1080",[34,124521,124522],{"class":44}," -localhost=0\n",[103,124524,124525],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[103,124527,124528],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[1772,124530,124531],{"start":518},[1775,124532,124533],{},"查看已开启的VNC服务器：",[24,124535,124537],{"className":118659,"code":124536,"language":118661,"meta":29,"style":29},"vncserver -list\n",[31,124538,124539],{"__ignoreMap":29},[34,124540,124541,124543],{"class":36,"line":37},[34,124542,124513],{"class":3617},[34,124544,124545],{"class":44}," -list\n",[103,124547,124548],{},[109,124549],{"alt":29,"src":124550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[1772,124552,124553],{"start":524},[1775,124554,124555],{},"连接到VNC服务器：",[103,124557,124558],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[1772,124560,124561],{"start":530},[1775,124562,124563],{},"停止VNC服务器：",[103,124565,124566],{},"如果需要停止VNC服务器，可以使用以下命令：",[24,124568,124570],{"className":118659,"code":124569,"language":118661,"meta":29,"style":29},"vncserver -kill :1\n",[31,124571,124572],{"__ignoreMap":29},[34,124573,124574,124576,124579],{"class":36,"line":37},[34,124575,124513],{"class":3617},[34,124577,124578],{"class":44}," -kill",[34,124580,124581],{"class":504}," :1\n",[103,124583,124584],{},"将:1替换为你实际使用的显示编号。",[103,124586,124587],{},[109,124588],{"alt":29,"src":124589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[103,124591,124592],{},[109,124593],{"alt":29,"src":124594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124596,124598],{"id":124597},"_74-usb端口设置","7.4 USB端口设置",[103,124600,124601],{},[1165,124602,124603],{},"首先先配置好权限",[24,124605,124607],{"className":118659,"code":124606,"language":118661,"meta":29,"style":29},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[31,124608,124609,124614,124627,124634,124639],{"__ignoreMap":29},[34,124610,124611],{"class":36,"line":37},[34,124612,124613],{"class":161},"# 将用户权限提高\n",[34,124615,124616,124618,124620,124622,124625],{"class":36,"line":165},[34,124617,26222],{"class":3617},[34,124619,28220],{"class":504},[34,124621,28223],{"class":44},[34,124623,124624],{"class":504}," dialout",[34,124626,28228],{"class":40},[34,124628,124629,124631],{"class":36,"line":171},[34,124630,28247],{"class":3617},[34,124632,124633],{"class":504}," dialout\n",[34,124635,124636],{"class":36,"line":182},[34,124637,124638],{"class":161},"# 查看下面命令是否输出dialout（若输出才正常）\n",[34,124640,124641],{"class":36,"line":188},[34,124642,124643],{"class":3617},"groups\n",[103,124645,124646],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[19,124648,124650],{"id":124649},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[103,124652,124653,124656],{},[1165,124654,124655],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[103,124658,124659,124662],{},[1165,124660,124661],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[103,124664,124665],{},[1165,124666,124667],{},"流程如下：",[103,124669,124670],{},"（1）.查找设备idVendor和idProduct",[103,124672,124673,124674,124677],{},"接入两个USB设备，在终端调用指令",[31,124675,124676],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[103,124679,124680],{},[109,124681],{"alt":29,"src":124682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[103,124684,124685,124686,124689],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[31,124687,124688],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[103,124691,124692],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[103,124694,124695],{},"（2）.编写映射规则",[103,124697,124698,124699,124702],{},"在",[31,124700,124701],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[24,124704,124706],{"className":118659,"code":124705,"language":118661,"meta":29,"style":29},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[31,124707,124708],{"__ignoreMap":29},[34,124709,124710,124712,124714],{"class":36,"line":37},[34,124711,26222],{"class":3617},[34,124713,119946],{"class":504},[34,124715,124716],{"class":504}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[103,124718,124719],{},"输入如下内容：",[24,124721,124723],{"className":118659,"code":124722,"language":118661,"meta":29,"style":29},"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",[31,124724,124725,124755],{"__ignoreMap":29},[34,124726,124727,124730,124732,124735,124738,124741,124744,124746,124749,124752],{"class":36,"line":37},[34,124728,124729],{"class":40},"KERNEL",[34,124731,221],{"class":55},[34,124733,124734],{"class":504},"=\"ttyUSB*\",",[34,124736,124737],{"class":3617}," ATTRS",[34,124739,124740],{"class":504},"{idVendor}==",[34,124742,124743],{"class":3617},"\"10c4\"",[34,124745,291],{"class":3617},[34,124747,124748],{"class":504}," ATTRS{idProduct}==\"ea60\",",[34,124750,124751],{"class":504}," MODE:=\"0777\",",[34,124753,124754],{"class":504}," SYMLINK+=\"mylidar\"\n",[34,124756,124757,124759,124761,124763,124765,124767,124770,124772,124775,124777],{"class":36,"line":165},[34,124758,124729],{"class":40},[34,124760,221],{"class":55},[34,124762,124734],{"class":504},[34,124764,124737],{"class":3617},[34,124766,124740],{"class":504},[34,124768,124769],{"class":3617},"\"1a86\"",[34,124771,291],{"class":3617},[34,124773,124774],{"class":504}," ATTRS{idProduct}==\"7523\",",[34,124776,124751],{"class":504},[34,124778,124779],{"class":504}," SYMLINK+=\"mycar\"\n",[103,124781,124782],{},"代码解释：",[2798,124784,124785,124788,124791,124794],{},[1775,124786,124787],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[1775,124789,124790],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[1775,124792,124793],{},"SYMLINK是符号连接，即绑定的别名；",[1775,124795,124796],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[103,124798,124799,124800,124803,124806],{},"***小提示：***",[25198,124801,124802],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[31,124804,124805],{},"\u002Fetc\u002Fudev\u002Frule.d",[25198,124807,124808],{},"目录即可。",[103,124810,124811],{},"表格 还在加载中，请等待加载完成后再尝试复制",[103,124813,124814],{},"（3）.使规则生效",[103,124816,124817],{},"在终端下输入如下指令：",[24,124819,124821],{"className":118659,"code":124820,"language":118661,"meta":29,"style":29},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[31,124822,124823,124828,124840,124851,124855,124860,124873],{"__ignoreMap":29},[34,124824,124825],{"class":36,"line":37},[34,124826,124827],{"class":161},"# Ubuntu用下方命令\n",[34,124829,124830,124832,124834,124837],{"class":36,"line":165},[34,124831,26222],{"class":3617},[34,124833,121411],{"class":504},[34,124835,124836],{"class":504}," udev",[34,124838,124839],{"class":504}," reload\n",[34,124841,124842,124844,124846,124848],{"class":36,"line":171},[34,124843,26222],{"class":3617},[34,124845,121411],{"class":504},[34,124847,124836],{"class":504},[34,124849,124850],{"class":504}," restart\n",[34,124852,124853],{"class":36,"line":182},[34,124854,1475],{"emptyLinePlaceholder":1474},[34,124856,124857],{"class":36,"line":188},[34,124858,124859],{"class":161},"#Fedora用下方命令\n",[34,124861,124862,124864,124867,124870],{"class":36,"line":518},[34,124863,26222],{"class":3617},[34,124865,124866],{"class":504}," udevadm",[34,124868,124869],{"class":504}," control",[34,124871,124872],{"class":44}," --reload\n",[34,124874,124875,124877,124879],{"class":36,"line":524},[34,124876,26222],{"class":3617},[34,124878,124866],{"class":504},[34,124880,124881],{"class":504}," trigger\n",[103,124883,124884],{},"再重新插拔设备即可。",[103,124886,124887],{},"（4）.测试",[103,124889,124890],{},"终端下输入如下指令",[24,124892,124894],{"className":118659,"code":124893,"language":118661,"meta":29,"style":29},"ll \u002Fdev | grep ttyUSB\n",[31,124895,124896],{"__ignoreMap":29},[34,124897,124898,124901,124904,124906,124908],{"class":36,"line":37},[34,124899,124900],{"class":3617},"ll",[34,124902,124903],{"class":504}," \u002Fdev",[34,124905,26755],{"class":55},[34,124907,31882],{"class":3617},[34,124909,124910],{"class":504}," ttyUSB\n",[103,124912,124913],{},"运行结果如下：",[103,124915,124916],{},[109,124917],{"alt":29,"src":124918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[103,124920,124921,124922,124925],{},"也可以多次插拔USB设备，会发现设备端口",[31,124923,124924],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[103,124927,124928],{},[1165,124929,119327],{},[103,124931,124932],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[19,124934,124936],{"id":124935},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[103,124938,124939,124941],{},[1165,124940,124655],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[103,124943,124944,124946],{},[1165,124945,124661],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[103,124948,124949],{},[1165,124950,124667],{},[103,124952,124953],{},"（1）.查看所连接的主机USB接口的KERNELS",[103,124955,124956],{},"调用如下指令查看第一台雷达的USB信息：",[24,124958,124960],{"className":118659,"code":124959,"language":118661,"meta":29,"style":29},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[31,124961,124962,124982],{"__ignoreMap":29},[34,124963,124964,124967,124969,124972,124975,124977,124979],{"class":36,"line":37},[34,124965,124966],{"class":3617},"udevadm",[34,124968,71460],{"class":504},[34,124970,124971],{"class":44}," --attribute-walk",[34,124973,124974],{"class":44}," --name=\u002Fdev\u002FttyUSB0",[34,124976,26755],{"class":55},[34,124978,31882],{"class":3617},[34,124980,124981],{"class":504}," KERNELS\n",[34,124983,124984,124986,124988,124990,124993,124995,124997],{"class":36,"line":165},[34,124985,124966],{"class":3617},[34,124987,71460],{"class":504},[34,124989,124971],{"class":44},[34,124991,124992],{"class":44}," --name=\u002Fdev\u002FttyACM0",[34,124994,26755],{"class":55},[34,124996,31882],{"class":3617},[34,124998,124981],{"class":504},[103,125000,125001],{},[109,125002],{"alt":29,"src":125003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[103,125005,125006],{},"调用如下指令查看第二台雷达的USB信息：",[24,125008,125010],{"className":118659,"code":125009,"language":118661,"meta":29,"style":29},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[31,125011,125012],{"__ignoreMap":29},[34,125013,125014,125016,125018,125020,125023,125025,125027],{"class":36,"line":37},[34,125015,124966],{"class":3617},[34,125017,71460],{"class":504},[34,125019,124971],{"class":44},[34,125021,125022],{"class":44}," --name=\u002Fdev\u002FttyUSB1",[34,125024,26755],{"class":55},[34,125026,31882],{"class":3617},[34,125028,124981],{"class":504},[103,125030,125031,125032,125035,125036,125039,125040,125043],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[31,125033,125034],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[31,125037,125038],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[1165,125041,125042],{},"唯一性标识","”。",[103,125045,124695],{},[103,125047,124698,125048,125050],{},[31,125049,124701],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[24,125052,125053],{"className":118659,"code":124705,"language":118661,"meta":29,"style":29},[31,125054,125055],{"__ignoreMap":29},[34,125056,125057,125059,125061],{"class":36,"line":37},[34,125058,26222],{"class":3617},[34,125060,119946],{"class":504},[34,125062,124716],{"class":504},[24,125064,125066],{"className":118659,"code":125065,"language":118661,"meta":29,"style":29},"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",[31,125067,125068,125097],{"__ignoreMap":29},[34,125069,125070,125072,125074,125076,125079,125081,125084,125087,125089,125092,125094],{"class":36,"line":37},[34,125071,124729],{"class":40},[34,125073,221],{"class":55},[34,125075,124734],{"class":504},[34,125077,125078],{"class":40}," KERNELS",[34,125080,221],{"class":55},[34,125082,125083],{"class":504},"=\"1-1.3:1.0\",",[34,125085,125086],{"class":3617}," MODE:",[34,125088,221],{"class":504},[34,125090,125091],{"class":3617},"\"0777\"",[34,125093,291],{"class":3617},[34,125095,125096],{"class":504}," SYMLINK+=\"rplidar_front\"\n",[34,125098,125099,125101,125103,125105,125107,125109,125112,125114,125116,125118,125120],{"class":36,"line":165},[34,125100,124729],{"class":40},[34,125102,221],{"class":55},[34,125104,124734],{"class":504},[34,125106,125078],{"class":40},[34,125108,221],{"class":55},[34,125110,125111],{"class":504},"=\"1-1.4:1.0\",",[34,125113,125086],{"class":3617},[34,125115,221],{"class":504},[34,125117,125091],{"class":3617},[34,125119,291],{"class":3617},[34,125121,125122],{"class":504}," SYMLINK+=\"rplidar_back\"\n",[103,125124,124814],{},[103,125126,124817],{},[24,125128,125129],{"className":118659,"code":124820,"language":118661,"meta":29,"style":29},[31,125130,125131,125135,125145,125155,125159,125163,125173],{"__ignoreMap":29},[34,125132,125133],{"class":36,"line":37},[34,125134,124827],{"class":161},[34,125136,125137,125139,125141,125143],{"class":36,"line":165},[34,125138,26222],{"class":3617},[34,125140,121411],{"class":504},[34,125142,124836],{"class":504},[34,125144,124839],{"class":504},[34,125146,125147,125149,125151,125153],{"class":36,"line":171},[34,125148,26222],{"class":3617},[34,125150,121411],{"class":504},[34,125152,124836],{"class":504},[34,125154,124850],{"class":504},[34,125156,125157],{"class":36,"line":182},[34,125158,1475],{"emptyLinePlaceholder":1474},[34,125160,125161],{"class":36,"line":188},[34,125162,124859],{"class":161},[34,125164,125165,125167,125169,125171],{"class":36,"line":518},[34,125166,26222],{"class":3617},[34,125168,124866],{"class":504},[34,125170,124869],{"class":504},[34,125172,124872],{"class":44},[34,125174,125175,125177,125179],{"class":36,"line":524},[34,125176,26222],{"class":3617},[34,125178,124866],{"class":504},[34,125180,124881],{"class":504},[103,125182,124884],{},[103,125184,124887],{},[103,125186,124890,125187,125190],{},[31,125188,125189],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[103,125192,125193],{},[109,125194],{"alt":29,"src":125195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[103,125197,125198],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[103,125200,125201,125203],{},[1165,125202,119327],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[19,125205,125207],{"id":125206},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[103,125209,125210],{},"（1）.查看所连接的主机USB接口的信息",[24,125212,125214],{"className":118659,"code":125213,"language":118661,"meta":29,"style":29},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[31,125215,125216,125246],{"__ignoreMap":29},[34,125217,125218,125220,125222,125225,125227,125229,125231,125233,125236,125239,125241,125244],{"class":36,"line":37},[34,125219,124966],{"class":3617},[34,125221,71460],{"class":504},[34,125223,125224],{"class":44}," -a",[34,125226,30862],{"class":44},[34,125228,30068],{"class":40},[34,125230,124966],{"class":3617},[34,125232,71460],{"class":504},[34,125234,125235],{"class":44}," -q",[34,125237,125238],{"class":504}," path",[34,125240,26761],{"class":44},[34,125242,125243],{"class":504}," \u002Fdev\u002FttyACM0",[34,125245,101],{"class":40},[34,125247,125248,125250,125252,125254,125256,125258,125260,125262,125264,125266,125268,125271],{"class":36,"line":165},[34,125249,124966],{"class":3617},[34,125251,71460],{"class":504},[34,125253,125224],{"class":44},[34,125255,30862],{"class":44},[34,125257,30068],{"class":40},[34,125259,124966],{"class":3617},[34,125261,71460],{"class":504},[34,125263,125235],{"class":44},[34,125265,125238],{"class":504},[34,125267,26761],{"class":44},[34,125269,125270],{"class":504}," \u002Fdev\u002FttyUSB0",[34,125272,101],{"class":40},[103,125274,125275],{},[109,125276],{"alt":29,"src":125277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[103,125279,125280],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[103,125282,124695],{},[103,125284,124698,125285,125050],{},[31,125286,124701],{},[24,125288,125289],{"className":118659,"code":124705,"language":118661,"meta":29,"style":29},[31,125290,125291],{"__ignoreMap":29},[34,125292,125293,125295,125297],{"class":36,"line":37},[34,125294,26222],{"class":3617},[34,125296,119946],{"class":504},[34,125298,124716],{"class":504},[24,125300,125302],{"className":118659,"code":125301,"language":118661,"meta":29,"style":29},"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",[31,125303,125304,125332,125358],{"__ignoreMap":29},[34,125305,125306,125308,125310,125313,125315,125317,125319,125321,125324,125327,125329],{"class":36,"line":37},[34,125307,124729],{"class":40},[34,125309,221],{"class":55},[34,125311,125312],{"class":504},"=\"ttyACM*\",",[34,125314,124737],{"class":3617},[34,125316,124740],{"class":504},[34,125318,124769],{"class":3617},[34,125320,291],{"class":3617},[34,125322,125323],{"class":504}," ATTRS{idProduct}==\"55d4\",",[34,125325,125326],{"class":504}," ATTRS{serial}==\"0001\",",[34,125328,124751],{"class":504},[34,125330,125331],{"class":504}," SYMLINK+=\"ttyACM_MCU\"\n",[34,125333,125334,125336,125338,125340,125342,125344,125346,125348,125350,125353,125355],{"class":36,"line":165},[34,125335,124729],{"class":40},[34,125337,221],{"class":55},[34,125339,125312],{"class":504},[34,125341,124737],{"class":3617},[34,125343,124740],{"class":504},[34,125345,124769],{"class":3617},[34,125347,291],{"class":3617},[34,125349,125323],{"class":504},[34,125351,125352],{"class":504}," ATTRS{serial}==\"0002\",",[34,125354,124751],{"class":504},[34,125356,125357],{"class":504}," SYMLINK+=\"ttyACM_Lidar\"\n",[34,125359,125360,125362,125364,125366,125368,125370,125372,125374,125376,125378],{"class":36,"line":171},[34,125361,124729],{"class":40},[34,125363,221],{"class":55},[34,125365,124734],{"class":504},[34,125367,124737],{"class":3617},[34,125369,124740],{"class":504},[34,125371,124769],{"class":3617},[34,125373,291],{"class":3617},[34,125375,124774],{"class":504},[34,125377,124751],{"class":504},[34,125379,125380],{"class":504}," SYMLINK+=\"ttyUSB_IMU\"\n",[103,125382,124814],{},[103,125384,124817],{},[24,125386,125387],{"className":118659,"code":124820,"language":118661,"meta":29,"style":29},[31,125388,125389,125393,125403,125413,125417,125421,125431],{"__ignoreMap":29},[34,125390,125391],{"class":36,"line":37},[34,125392,124827],{"class":161},[34,125394,125395,125397,125399,125401],{"class":36,"line":165},[34,125396,26222],{"class":3617},[34,125398,121411],{"class":504},[34,125400,124836],{"class":504},[34,125402,124839],{"class":504},[34,125404,125405,125407,125409,125411],{"class":36,"line":171},[34,125406,26222],{"class":3617},[34,125408,121411],{"class":504},[34,125410,124836],{"class":504},[34,125412,124850],{"class":504},[34,125414,125415],{"class":36,"line":182},[34,125416,1475],{"emptyLinePlaceholder":1474},[34,125418,125419],{"class":36,"line":188},[34,125420,124859],{"class":161},[34,125422,125423,125425,125427,125429],{"class":36,"line":518},[34,125424,26222],{"class":3617},[34,125426,124866],{"class":504},[34,125428,124869],{"class":504},[34,125430,124872],{"class":44},[34,125432,125433,125435,125437],{"class":36,"line":524},[34,125434,26222],{"class":3617},[34,125436,124866],{"class":504},[34,125438,124881],{"class":504},[103,125440,125441,125442],{},"再重新插拔设备即可，或者 ",[1165,125443,125444],{},"直接重启系统。",[103,125446,124887],{},[103,125448,124890,125449,125190],{},[31,125450,125189],{},[103,125452,125453],{},[109,125454],{"alt":29,"src":125455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[103,125457,125198],{},[103,125459,125460,125462],{},[1165,125461,119327],{}," 一些设备可能没有串口号等。",[19,125464,125466],{"id":125465},"_744-其他注意事项","7.4.4 其他注意事项",[103,125468,125469,125470,125472,125473,125476,125477,20056,125480,125483,125484,125486],{},"并非所有的USB设备端口号都是",[31,125471,124924],{},"的格式，比如Arduino的端口号可能是",[31,125474,125475],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[31,125478,125479],{},"videon",[31,125481,125482],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[31,125485,125479],{},"端口，绑定时需要关联的也是该接口。",[103,125488,125489,125490,125493,125494,125497,125498,125500,125501,125504,125505,125508,125509,125512,125513,125512,125516,125512,125519,30031],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[31,125491,125492],{},"KERNEL==\"ttyUSB*\"","修改为",[31,125495,125496],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[31,125499,125492],{},"修改为类似于",[31,125502,125503],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[31,125506,125507],{},"video[0,2,4,6]","表示可以绑定的端口为",[31,125510,125511],{},"video0","或",[31,125514,125515],{},"video2",[31,125517,125518],{},"video4",[31,125520,125521],{},"video6",[14,125523,125525],{"id":125524},"_75-挂载内网网页","7.5 挂载内网网页",[103,125527,125528],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[103,125530,125531],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[103,125533,125534],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[103,125536,125537,125538],{},"Termux 下载地址（F-Droid）：",[236,125539,125540],{"href":125540,"rel":125541},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25510],[103,125543,125544],{},"首先打开app后，先更新软件缓存：",[24,125546,125548],{"className":118659,"code":125547,"language":118661,"meta":29,"style":29},"pkg update\n",[31,125549,125550],{"__ignoreMap":29},[34,125551,125552,125555],{"class":36,"line":37},[34,125553,125554],{"class":3617},"pkg",[34,125556,27888],{"class":504},[103,125558,125559],{},"然后换源",[24,125561,125563],{"className":118659,"code":125562,"language":118661,"meta":29,"style":29},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[31,125564,125565],{"__ignoreMap":29},[34,125566,125567,125569,125572],{"class":36,"line":37},[34,125568,124437],{"class":3617},[34,125570,125571],{"class":40}," $PREFIX",[34,125573,125574],{"class":504},"\u002Fetc\u002Fapt\u002Fsources.list\n",[103,125576,125577],{},"将该文件内容替换为下面：",[24,125579,125581],{"className":118659,"code":125580,"language":118661,"meta":29,"style":29},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[31,125582,125583],{"__ignoreMap":29},[34,125584,125585,125588,125591,125594],{"class":36,"line":37},[34,125586,125587],{"class":3617},"deb",[34,125589,125590],{"class":504}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[34,125592,125593],{"class":504}," stable",[34,125595,125596],{"class":504}," main\n",[2798,125598,125599,125626],{},[1775,125600,125601,125602,125604,125605],{},"如果你使用的是",[31,125603,124437],{},"编辑器：",[2798,125606,125607,125614,125620],{},[1775,125608,125609,125610,125613],{},"按 ",[31,125611,125612],{},"Ctrl+O"," 保存文件。",[1775,125615,125609,125616,125619],{},[31,125617,125618],{},"Enter"," 确认文件名。",[1775,125621,125609,125622,125625],{},[31,125623,125624],{},"Ctrl+X"," 退出编辑器。",[1775,125627,125601,125628,125604,125631],{},[31,125629,125630],{},"vim",[2798,125632,125633,125639],{},[1775,125634,125609,125635,125638],{},[31,125636,125637],{},"Esc"," 退出编辑模式。",[1775,125640,125641,125642,125644],{},"输入 ",[31,125643,120584],{}," 保存并退出。",[103,125646,125647],{},"接下来重新更新软件源：",[24,125649,125651],{"className":118659,"code":125650,"language":118661,"meta":29,"style":29},"pkg update && pkg upgrade\n",[31,125652,125653],{"__ignoreMap":29},[34,125654,125655,125657,125659,125661,125663],{"class":36,"line":37},[34,125656,125554],{"class":3617},[34,125658,118710],{"class":504},[34,125660,27836],{"class":40},[34,125662,125554],{"class":3617},[34,125664,118696],{"class":504},[103,125666,125667],{},"安装python：",[24,125669,125671],{"className":118659,"code":125670,"language":118661,"meta":29,"style":29},"pkg install python\n",[31,125672,125673],{"__ignoreMap":29},[34,125674,125675,125677,125679],{"class":36,"line":37},[34,125676,125554],{"class":3617},[34,125678,25479],{"class":504},[34,125680,125681],{"class":504}," python\n",[103,125683,125684,28119],{},[1165,125685,125686],{},"通过Termux访问设备存储",[103,125688,125689],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[24,125691,125693],{"className":118659,"code":125692,"language":118661,"meta":29,"style":29},"termux-setup-storage\n",[31,125694,125695],{"__ignoreMap":29},[34,125696,125697],{"class":36,"line":37},[34,125698,125692],{"class":3617},[1772,125700,125701],{},[1775,125702,125703,28119,125706],{},[1165,125704,125705],{},"进入HTML文件所在的目录",[1772,125707,125708],{},[1775,125709,125710,125711,125713],{},"使用",[31,125712,102639],{},"命令进入HTML文件所在的目录：",[24,125715,125717],{"className":118659,"code":125716,"language":118661,"meta":29,"style":29},"cd ~\u002Fyour_html_folder\n",[31,125718,125719],{"__ignoreMap":29},[34,125720,125721,125723],{"class":36,"line":37},[34,125722,102639],{"class":44},[34,125724,125725],{"class":504}," ~\u002Fyour_html_folder\n",[1772,125727,125728],{"start":165},[1775,125729,125730,28119,125733,125738,125755],{},[1165,125731,125732],{},"启动Python HTTP服务器",[1772,125734,125735],{},[1775,125736,125737],{},"运行以下命令启动一个简单的HTTP服务器：",[24,125739,125741],{"className":118659,"code":125740,"language":118661,"meta":29,"style":29},"python -m http.server 8000\n",[31,125742,125743],{"__ignoreMap":29},[34,125744,125745,125747,125749,125752],{"class":36,"line":37},[34,125746,28],{"class":3617},[34,125748,102245],{"class":44},[34,125750,125751],{"class":504}," http.server",[34,125753,125754],{"class":44}," 8000\n",[1772,125756,125757],{"start":171},[1775,125758,125759,125760,125763],{},"这会在端口",[31,125761,125762],{},"8000","上启动一个Web服务器。",[2798,125765,125766],{},[1775,125767,125768],{},"启动服务器后，Termux会显示日志信息，例如：",[24,125770,125772],{"className":122179,"code":125771,"language":122181,"meta":122182,"style":29},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[31,125773,125774],{"__ignoreMap":29},[34,125775,125776],{"class":36,"line":37},[34,125777,125771],{},[2798,125779,125780],{},[1775,125781,125782],{},"这表示服务器已成功启动。",[103,125784,125785],{},[1165,125786,125787],{},"在浏览器中访问HTML文件",[1772,125789,125790],{},[1775,125791,125792,28119,125795,125800],{},[1165,125793,125794],{},"在同一设备上访问",[1772,125796,125797],{},[1775,125798,125799],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[24,125801,125804],{"className":125802,"code":125803,"language":73303,"meta":29,"style":29},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[31,125805,125806],{"__ignoreMap":29},[34,125807,125808,125811],{"class":36,"line":37},[34,125809,125810],{"class":40},"http:",[34,125812,125813],{"class":161},"\u002F\u002Flocalhost:8000\n",[2798,125815,125816],{},[1775,125817,125818,125819,125822],{},"如果HTML文件中有",[31,125820,125821],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125824,125826],{"id":125825},"_76-linux重点知识","7.6 Linux重点知识",[19,125828,125830],{"id":125829},"_761-关于点的说明","7.6.1 关于点的说明",[103,125832,125833],{},[109,125834],{"alt":29,"src":125835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[103,125837,125838],{},"一点本目录，两点上目录",[19,125840,125842],{"id":125841},"_762-目录","7.6.2 目录",[1353,125844,125846],{"id":125845},"_7621-系统启动必须","7.6.2.1 系统启动必须",[103,125848,125849],{},[1165,125850,125851],{},"\u002Fboot:",[103,125853,125854],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[103,125856,125857],{},[1165,125858,125859],{},"\u002Fetc:",[103,125861,125862],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[103,125864,125865],{},[1165,125866,125867],{},"\u002Flib：",[103,125869,125870],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[103,125872,125873],{},[1165,125874,125875],{},"\u002Fsys:",[103,125877,125878],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[1353,125880,125882],{"id":125881},"_7622-指令集合","7.6.2.2 指令集合",[103,125884,125885],{},[1165,125886,125887],{},"\u002Fbin:",[103,125889,125890],{},"为二进制文件的缩写，存放最经常使用的命令",[103,125892,125893],{},[1165,125894,125895],{},"\u002Fsbin:",[103,125897,125898],{},"只有系统管理员才能使用的程序和指令",[1353,125900,125902],{"id":125901},"_7623-外部文件管理","7.6.2.3 外部文件管理",[103,125904,125905],{},[1165,125906,125907],{},"\u002Fdev:",[103,125909,125910],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[103,125912,125913],{},[1165,125914,125915],{},"\u002Fmedia:",[103,125917,125918],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[103,125920,125921],{},[1165,125922,125923],{},"\u002Fmnt:",[103,125925,125926],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[1353,125928,125930],{"id":125929},"_7624-临时文件","7.6.2.4 临时文件",[103,125932,125933],{},[1165,125934,125935],{},"\u002Frun:",[103,125937,125938],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[103,125940,125941],{},[1165,125942,125943],{},"\u002Flost+found:",[103,125945,125946],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[103,125948,125949],{},[1165,125950,125951],{},"\u002Ftmp:",[103,125953,125954],{},"这个目录是用来存放一些临时文件的",[1353,125956,125958],{"id":125957},"_7625-账户","7.6.2.5 账户",[103,125960,125961],{},[1165,125962,125963],{},"\u002Froot：",[103,125965,125966],{},"系统管理员的用户主目录",[103,125968,125969,28119],{},[1165,125970,125971],{},"\u002Fhome",[103,125973,125974],{},"用户的主目录，以用户的账号命名的",[103,125976,125977,28119],{},[1165,125978,125979],{},"\u002Fusr",[103,125981,125982],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[103,125984,125985],{},[1165,125986,125987],{},"\u002Fusr\u002Fbin：",[103,125989,125990],{},"系统用户使用的应用程序与指令",[103,125992,125993],{},[1165,125994,125995],{},"\u002Fusr\u002Fsbin：",[103,125997,125998],{},"超级用户使用的比较高级的管理程序和系统守护程序",[103,126000,126001],{},[1165,126002,126003],{},"\u002Fusr\u002Fsrc：",[103,126005,126006],{},"内核源代码默认的放置目录",[1353,126008,126010],{"id":126009},"_7626-运行过程要用","7.6.2.6 运行过程要用",[103,126012,126013],{},[1165,126014,126015],{},"\u002Fvar：",[103,126017,126018],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[103,126020,126021],{},[1165,126022,126023],{},"\u002Fproc:",[103,126025,126026,126027,126030],{},"管理 ",[1165,126028,126029],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[1353,126032,126034],{"id":126033},"_7627-扩展用的","7.6.2.7 扩展用的",[103,126036,126037],{},[1165,126038,126039],{},"\u002Fopt:",[103,126041,126042],{},"默认是空的，我们安装额外软件可以放在这个里面",[103,126044,126045],{},[1165,126046,126047],{},"\u002Fsrv:",[103,126049,126050],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[19,126052,126054],{"id":126053},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[103,126056,126057],{},[109,126058],{"alt":29,"src":126059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[103,126061,126062],{},"windows-->linux:",[103,126064,126065],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[103,126067,126068],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[103,126070,126071],{},"linux传输文件到windows",[103,126073,126074],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[19,126076,126078],{"id":126077},"_764-易忘知识","7.6.4 易忘知识",[103,126080,126081],{},"操作系统内核查看",[24,126083,126084],{"className":118659,"code":122653,"language":118661,"meta":29,"style":29},[31,126085,126086],{"__ignoreMap":29},[34,126087,126088,126090],{"class":36,"line":37},[34,126089,71843],{"class":3617},[34,126091,122662],{"class":44},[103,126093,126094],{},[109,126095],{"alt":29,"src":126096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[103,126098,126099],{},[109,126100],{"alt":29,"src":126101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[24,126103,126105],{"className":118659,"code":126104,"language":118661,"meta":29,"style":29},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[31,126106,126107,126119],{"__ignoreMap":29},[34,126108,126109,126111,126114,126117],{"class":36,"line":37},[34,126110,122870],{"class":3617},[34,126112,126113],{"class":504}," mvtest",[34,126115,126116],{"class":504}," mvtest2",[34,126118,4327],{"class":40},[34,126120,126121],{"class":36,"line":165},[34,126122,126123],{"class":3617},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[103,126125,126126],{},[109,126127],{"alt":29,"src":126128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[103,126130,126131],{},[109,126132],{"alt":29,"src":126133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[103,126135,126136,126137,126140],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[31,126138,126139],{},"du -a"," 可以快速查看磁盘使用细节。",[19,126142,126144],{"id":126143},"_765-vim","7.6.5 Vim",[103,126146,126147],{},[109,126148],{"alt":29,"src":126149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[103,126151,126152],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[103,126154,126155],{},"一开始进去为命令模式，此时点击输入的字母为命令",[103,126157,126158],{},[1165,126159,126160],{},"1.命令模式：",[103,126162,126163],{},"i 切换到输入模式，在光标当前位置开始输入文本",[103,126165,126166],{},"x 删除当前光标所在处的字符",[103,126168,126169],{},"：切换到底线命令模式，以在最底一行输入命令",[103,126171,126172],{},"a 进行插入模式，在光标下一个位置输入文本",[103,126174,126175],{},"o 在当前的下方插入一个新行，并进入插入模式",[103,126177,126178],{},"0 在当前行的上方插入一个新行，并进入插入模式",[103,126180,126181],{},"dd 剪切当前行",[103,126183,126184],{},"yy 复制当前行",[103,126186,126187],{},"p 粘贴剪贴板内容到光标下方",[103,126189,126190],{},"P 粘贴剪贴板内容到光标上方",[103,126192,126193],{},"u 撤销上一次操作",[103,126195,126196],{},"ctrl+r 重做上一次操作",[103,126198,126199,126201],{},[2588,126200],{}," 保存文件",[103,126203,126204,126206],{},[2440,126205],{}," 退出Vim编辑器",[103,126208,126209,126211],{},[2440,126210],{},"! 强制退出Vim编辑器，不保存修改",[103,126213,126214],{},[1165,126215,126216],{},"2.输入模式：",[103,126218,126219],{},[109,126220],{"alt":29,"src":126221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[103,126223,126224],{},[1165,126225,126226],{},"3.底线命令模式：",[103,126228,126229],{},[109,126230],{"alt":29,"src":126231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[103,126233,126234],{},"按下esc可以退出底线命令模式",[19,126236,126238],{"id":126237},"_766-apt","7.6.6 apt",[103,126240,126241],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[19,126243,126245],{"id":126244},"_767-home与root的区别","7.6.7 home与root的区别",[103,126247,126248],{},[109,126249],{"alt":29,"src":126250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[103,126252,126253],{},[109,126254],{"alt":29,"src":126255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[103,126257,126258],{},[109,126259],{"alt":29,"src":126260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[103,126262,126263],{},[109,126264],{"alt":29,"src":126265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[19,126267,126269],{"id":126268},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[103,126271,126272],{},[236,126273,126274],{"href":126274,"rel":126275},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25510],[1772,126277,126278,126281],{},[1775,126279,126280],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[1775,126282,126283],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[103,126285,126286],{},[109,126287],{"alt":29,"src":126288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[103,126290,126291],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[103,126293,126294],{},[109,126295],{"alt":29,"src":126296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[24,126298,126300],{"className":122179,"code":126299,"language":122181,"meta":122182,"style":29},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[31,126301,126302,126307],{"__ignoreMap":29},[34,126303,126304],{"class":36,"line":37},[34,126305,126306],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[34,126308,126309],{"class":36,"line":165},[34,126310,126311],{},".\u002Fpycharm.sh\n",[103,126313,126314],{},"3️⃣创建.desktop文件",[103,126316,126317],{},[1165,126318,126319],{},"原理：",[2798,126321,126322,126332],{},[1775,126323,126324,126325,126331],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[1165,126326,126327,126330],{},[31,126328,126329],{},".desktop"," 文件"," 来识别应用。",[1775,126333,126334,126336,126337],{},[31,126335,126329],{}," 文件相当于一个“应用注册表”，告诉系统：",[2798,126338,126339,126342,126345,126348,126351],{},[1775,126340,126341],{},"应用名字（Name）",[1775,126343,126344],{},"图标（Icon）",[1775,126346,126347],{},"执行命令（Exec）",[1775,126349,126350],{},"分类（Categories）",[1775,126352,126353],{},"是否需要终端（Terminal）",[24,126355,126357],{"className":122179,"code":126356,"language":122181,"meta":122182,"style":29},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[31,126358,126359,126364],{"__ignoreMap":29},[34,126360,126361],{"class":36,"line":37},[34,126362,126363],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[34,126365,126366],{"class":36,"line":165},[34,126367,126368],{},"nano pycharm.desktop\n",[103,126370,126371],{},"nano是一个命令行下的编辑器，也可以使用vim",[24,126373,126375],{"className":122179,"code":126374,"language":122181,"meta":122182,"style":29},"[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",[31,126376,126377,126382,126387,126392,126397,126402,126407,126412,126417,126422],{"__ignoreMap":29},[34,126378,126379],{"class":36,"line":37},[34,126380,126381],{},"[Desktop Entry]\n",[34,126383,126384],{"class":36,"line":165},[34,126385,126386],{},"Version=1.0\n",[34,126388,126389],{"class":36,"line":171},[34,126390,126391],{},"Type=Application\n",[34,126393,126394],{"class":36,"line":182},[34,126395,126396],{},"Name=PyCharm\n",[34,126398,126399],{"class":36,"line":188},[34,126400,126401],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[34,126403,126404],{"class":36,"line":518},[34,126405,126406],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[34,126408,126409],{"class":36,"line":524},[34,126410,126411],{},"Comment=JetBrains PyCharm IDE\n",[34,126413,126414],{"class":36,"line":530},[34,126415,126416],{},"Categories=Development;IDE;\n",[34,126418,126419],{"class":36,"line":624},[34,126420,126421],{},"Terminal=false\n",[34,126423,126424],{"class":36,"line":630},[34,126425,126426],{},"StartupWMClass=jetbrains-pycharm\n",[2798,126428,126429,126435,126441,126447],{},[1775,126430,126431,126434],{},[31,126432,126433],{},"Exec"," → 点击图标时执行的命令",[1775,126436,126437,126440],{},[31,126438,126439],{},"Icon"," → 显示在菜单和桌面上的图标",[1775,126442,126443,126446],{},[31,126444,126445],{},"Terminal=false"," → 不打开终端",[1775,126448,126449,126452],{},[31,126450,126451],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126454,126455,126456],"blockquote",{},[103,126457,126458,126459,126461,126462],{},"可以理解成 ",[31,126460,126329],{}," 文件是 Linux 的 ",[1165,126463,126464],{},"快捷方式配置文件",[103,126466,126467],{},"4️⃣设置可执行权限",[24,126469,126471],{"className":122179,"code":126470,"language":122181,"meta":122182,"style":29},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[31,126472,126473],{"__ignoreMap":29},[34,126474,126475],{"class":36,"line":37},[34,126476,126470],{},[103,126478,126479],{},"5️⃣桌面图标启动的话如下：",[24,126481,126483],{"className":122179,"code":126482,"language":122181,"meta":122182,"style":29},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[31,126484,126485,126490],{"__ignoreMap":29},[34,126486,126487],{"class":36,"line":37},[34,126488,126489],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[34,126491,126492],{"class":36,"line":165},[34,126493,126494],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[1772,126496,126497],{"start":171},[1775,126498,126499],{},"下载Appimage文件实现软件的安装",[103,126501,126502],{},"1️⃣先下载appimage",[103,126504,126505],{},[236,126506,126507],{"href":126507,"rel":126508},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25510],[103,126510,126511],{},[109,126512],{"alt":29,"src":126513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[103,126515,126516],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[103,126518,126519],{},[109,126520],{"alt":29,"src":126521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[103,126523,126524],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[103,126526,126527],{},[109,126528],{"alt":29,"src":126529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[103,126531,126532],{},[109,126533],{"alt":29,"src":126534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[103,126536,126537,126538,126541],{},"3️⃣给他们放在",[31,126539,126540],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[103,126543,126544],{},"4️⃣给软件执行权限",[24,126546,126548],{"className":122179,"code":126547,"language":122181,"meta":122182,"style":29},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[31,126549,126550,126555],{"__ignoreMap":29},[34,126551,126552],{"class":36,"line":37},[34,126553,126554],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[34,126556,126557],{"class":36,"line":165},[34,126558,126559],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[103,126561,126562],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[24,126564,126566],{"className":118659,"code":126565,"language":118661,"meta":29,"style":29},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[31,126567,126568,126575,126582,126588],{"__ignoreMap":29},[34,126569,126570,126572],{"class":36,"line":37},[34,126571,102639],{"class":44},[34,126573,126574],{"class":504}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[34,126576,126577,126579],{"class":36,"line":165},[34,126578,102646],{"class":3617},[34,126580,126581],{"class":504}," .\u002Fqqmusic.desktop\n",[34,126583,126584,126586],{"class":36,"line":171},[34,126585,125630],{"class":3617},[34,126587,126581],{"class":504},[34,126589,126590,126592,126594,126596],{"class":36,"line":182},[34,126591,26222],{"class":3617},[34,126593,26225],{"class":504},[34,126595,124496],{"class":504},[34,126597,126581],{"class":504},[103,126599,126600,126602],{},[31,126601,102646],{},"：一个 Linux 命令，主要功能是：",[2798,126604,126605,126608],{},[1775,126606,126607],{},"如果文件不存在，就创建一个新的空文件",[1775,126609,126610],{},"如果文件已存在，就更新该文件的最后修改时间",[24,126612,126614],{"className":122179,"code":126613,"language":122181,"meta":122182,"style":29},"[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",[31,126615,126616,126620,126625,126630,126635,126639,126644],{"__ignoreMap":29},[34,126617,126618],{"class":36,"line":37},[34,126619,126381],{},[34,126621,126622],{"class":36,"line":165},[34,126623,126624],{},"Name=QQ音乐\n",[34,126626,126627],{"class":36,"line":171},[34,126628,126629],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[34,126631,126632],{"class":36,"line":182},[34,126633,126634],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[34,126636,126637],{"class":36,"line":188},[34,126638,126391],{},[34,126640,126641],{"class":36,"line":518},[34,126642,126643],{},"Categories=Audio;Music;Player;\n",[34,126645,126646],{"class":36,"line":524},[34,126647,126648],{},"Comment=QQ Music Client for Linux\n",[103,126650,126651],{},"将文件复制进去",[103,126653,126654],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[103,126656,126657],{},[109,126658],{"alt":29,"src":126659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[103,126661,126662],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[103,126664,126665],{},[109,126666],{"alt":29,"src":126667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[103,126669,126670,126671,126674,126675,126678],{},"如果你用的不是KDE，那么也可以直接修改",[31,126672,126673],{},"qqmuic.desktop","：在exec的末尾加上",[31,126676,126677],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[24,126680,126682],{"className":122179,"code":126681,"language":122181,"meta":122182,"style":29},"[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",[31,126683,126684,126688,126692,126697,126701,126705,126709],{"__ignoreMap":29},[34,126685,126686],{"class":36,"line":37},[34,126687,126381],{},[34,126689,126690],{"class":36,"line":165},[34,126691,126624],{},[34,126693,126694],{"class":36,"line":171},[34,126695,126696],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[34,126698,126699],{"class":36,"line":182},[34,126700,126634],{},[34,126702,126703],{"class":36,"line":188},[34,126704,126391],{},[34,126706,126707],{"class":36,"line":518},[34,126708,126643],{},[34,126710,126711],{"class":36,"line":524},[34,126712,126648],{},[103,126714,126715],{},[109,126716],{"alt":29,"src":126717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[103,126719,126720],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[24,126722,126724],{"className":122179,"code":126723,"language":122181,"meta":122182,"style":29},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[31,126725,126726],{"__ignoreMap":29},[34,126727,126728],{"class":36,"line":37},[34,126729,126723],{},[1772,126731,126732],{"start":182},[1775,126733,126734],{},"去Flathub上安装软件",[103,126736,126737],{},[236,126738,126739],{"href":126739,"rel":126740},"https:\u002F\u002Fflathub.org\u002F",[25510],[103,126742,126743],{},"1️⃣去上面的官网搜索软件+下载软件",[103,126745,126746],{},[109,126747],{"alt":29,"src":126748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[24,126750,126752],{"className":122179,"code":126751,"language":122181,"meta":122182,"style":29},"flatpak install flathub com.obsproject.Studio\n",[31,126753,126754],{"__ignoreMap":29},[34,126755,126756],{"class":36,"line":37},[34,126757,126751],{},[103,126759,126760],{},[109,126761],{"alt":29,"src":126762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[103,126764,126765],{},"2️⃣运行软件",[103,126767,126768],{},"a.官方方式：",[103,126770,126771],{},[109,126772],{"alt":29,"src":126773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[24,126775,126776],{"className":122179,"code":126751,"language":122181,"meta":122182,"style":29},[31,126777,126778],{"__ignoreMap":29},[34,126779,126780],{"class":36,"line":37},[34,126781,126751],{},[103,126783,126784],{},"b.当普通软件运行：",[103,126786,126787],{},[109,126788],{"alt":29,"src":126789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[103,126791,126792],{},[109,126793],{"alt":29,"src":126794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1711,126796,126797],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":29,"searchDepth":165,"depth":165,"links":126799},[126800,126801,126806,126807,126813,126814],{"id":123532,"depth":165,"text":123533},{"id":123874,"depth":165,"text":123875,"children":126802},[126803,126804,126805],{"id":123878,"depth":171,"text":123879},{"id":123945,"depth":171,"text":123946},{"id":124206,"depth":171,"text":124207},{"id":124359,"depth":165,"text":124360},{"id":124597,"depth":165,"text":124598,"children":126808},[126809,126810,126811,126812],{"id":124649,"depth":171,"text":124650},{"id":124935,"depth":171,"text":124936},{"id":125206,"depth":171,"text":125207},{"id":125465,"depth":171,"text":125466},{"id":125524,"depth":165,"text":125525},{"id":125825,"depth":165,"text":125826,"children":126815},[126816,126817,126818,126819,126820,126821,126822,126823],{"id":125829,"depth":171,"text":125830},{"id":125841,"depth":171,"text":125842},{"id":126053,"depth":171,"text":126054},{"id":126077,"depth":171,"text":126078},{"id":126143,"depth":171,"text":126144},{"id":126237,"depth":171,"text":126238},{"id":126244,"depth":171,"text":126245},{"id":126268,"depth":171,"text":126269},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123524,"description":1744},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126830,"title":126831,"body":126832,"description":1744,"extension":1745,"meta":126836,"navigation":1474,"path":126837,"seo":126838,"stem":126839,"__hash__":126840},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126833,"toc":126834},[],{"title":29,"searchDepth":165,"depth":165,"links":126835},[],{"category":31909},"\u002Fwiki\u002F2025-01-27-linux",{"title":126831,"description":1744},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126842,"title":126843,"body":126844,"description":126848,"extension":1745,"meta":127239,"navigation":1474,"path":127240,"seo":127241,"stem":127242,"__hash__":127243},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126845,"toc":127237},[126846,126849,126853,126870,126873,126926,126930,126932,126972,126981,126985,126988,127229,127234],[103,126847,126848],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126850,126852],{"id":126851},"_1ubuntu环境配置","1.Ubuntu环境配置",[1772,126854,126855,126858,126861,126864,126867],{},[1775,126856,126857],{},"ubuntu环境换源",[1775,126859,126860],{},"安装cuda",[1775,126862,126863],{},"安装miniconda",[1775,126865,126866],{},"安装pytorch",[1775,126868,126869],{},"安装genesis",[103,126871,126872],{},"参考链接：",[24,126874,126876],{"className":25467,"code":126875,"language":25469,"meta":29,"style":29},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[31,126877,126878],{"__ignoreMap":29},[34,126879,126880,126883,126886,126889,126891,126894,126897,126899,126902,126905,126907,126910,126913,126915,126918,126921,126923],{"class":36,"line":37},[34,126881,126882],{"class":3617},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[34,126884,126885],{"class":504},"=blogdetail",[34,126887,126888],{"class":40},"&sharetype",[34,126890,221],{"class":55},[34,126892,126893],{"class":504},"blogdetail",[34,126895,126896],{"class":40},"&sharerId",[34,126898,221],{"class":55},[34,126900,126901],{"class":504},"144728092",[34,126903,126904],{"class":40},"&sharerefer",[34,126906,221],{"class":55},[34,126908,126909],{"class":504},"PC",[34,126911,126912],{"class":40},"&sharesource",[34,126914,221],{"class":55},[34,126916,126917],{"class":504},"qq_69379513",[34,126919,126920],{"class":40},"&sharefrom",[34,126922,221],{"class":55},[34,126924,126925],{"class":504},"from_link\n",[10,126927,126929],{"id":126928},"_2genesis-报错issue","2.Genesis 报错issue",[103,126931,126872],{},[24,126933,126934],{"className":25467,"code":126875,"language":25469,"meta":29,"style":29},[31,126935,126936],{"__ignoreMap":29},[34,126937,126938,126940,126942,126944,126946,126948,126950,126952,126954,126956,126958,126960,126962,126964,126966,126968,126970],{"class":36,"line":37},[34,126939,126882],{"class":3617},[34,126941,126885],{"class":504},[34,126943,126888],{"class":40},[34,126945,221],{"class":55},[34,126947,126893],{"class":504},[34,126949,126896],{"class":40},[34,126951,221],{"class":55},[34,126953,126901],{"class":504},[34,126955,126904],{"class":40},[34,126957,221],{"class":55},[34,126959,126909],{"class":504},[34,126961,126912],{"class":40},[34,126963,221],{"class":55},[34,126965,126917],{"class":504},[34,126967,126920],{"class":40},[34,126969,221],{"class":55},[34,126971,126925],{"class":504},[24,126973,126975],{"className":25467,"code":126974,"language":25469,"meta":29,"style":29},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[31,126976,126977],{"__ignoreMap":29},[34,126978,126979],{"class":36,"line":37},[34,126980,126974],{"class":3617},[10,126982,126984],{"id":126983},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[103,126986,126987],{},"hello_robot.py",[24,126989,126991],{"className":26,"code":126990,"language":28,"meta":29,"style":29},"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",[31,126992,126993,126999,127014,127018,127030,127042,127046,127059,127063,127082,127092,127102,127116,127120,127124,127129,127133,127143,127150,127164,127171,127181,127186,127190,127208,127213,127217,127224],{"__ignoreMap":29},[34,126994,126995,126997],{"class":36,"line":37},[34,126996,32036],{"class":55},[34,126998,46944],{"class":40},[34,127000,127001,127004,127007,127009,127011],{"class":36,"line":165},[34,127002,127003],{"class":40},"os.environ[",[34,127005,127006],{"class":504},"'PYOPENGL_PLATFORM'",[34,127008,6095],{"class":40},[34,127010,221],{"class":55},[34,127012,127013],{"class":504}," 'glx'\n",[34,127015,127016],{"class":36,"line":171},[34,127017,1475],{"emptyLinePlaceholder":1474},[34,127019,127020,127022,127025,127027],{"class":36,"line":182},[34,127021,32036],{"class":55},[34,127023,127024],{"class":40}," genesis ",[34,127026,33025],{"class":55},[34,127028,127029],{"class":40}," gs\n",[34,127031,127032,127034,127037,127039],{"class":36,"line":188},[34,127033,32379],{"class":55},[34,127035,127036],{"class":40}," pynput ",[34,127038,32036],{"class":55},[34,127040,127041],{"class":40}," keyboard\n",[34,127043,127044],{"class":36,"line":518},[34,127045,1475],{"emptyLinePlaceholder":1474},[34,127047,127048,127051,127054,127056],{"class":36,"line":524},[34,127049,127050],{"class":40},"gs.init(",[34,127052,127053],{"class":51},"backend",[34,127055,221],{"class":55},[34,127057,127058],{"class":40},"gs.gpu)\n",[34,127060,127061],{"class":36,"line":530},[34,127062,1475],{"emptyLinePlaceholder":1474},[34,127064,127065,127068,127070,127073,127076,127078,127080],{"class":36,"line":624},[34,127066,127067],{"class":40},"scene ",[34,127069,221],{"class":55},[34,127071,127072],{"class":40}," gs.Scene(",[34,127074,127075],{"class":51},"show_viewer",[34,127077,221],{"class":55},[34,127079,33118],{"class":44},[34,127081,101],{"class":40},[34,127083,127084,127087,127089],{"class":36,"line":630},[34,127085,127086],{"class":40},"plane ",[34,127088,221],{"class":55},[34,127090,127091],{"class":40}," scene.add_entity(gs.morphs.Plane())\n",[34,127093,127094,127097,127099],{"class":36,"line":636},[34,127095,127096],{"class":40},"franka ",[34,127098,221],{"class":55},[34,127100,127101],{"class":40}," scene.add_entity(\n",[34,127103,127104,127107,127109,127111,127114],{"class":36,"line":1513},[34,127105,127106],{"class":40},"    gs.morphs.MJCF(",[34,127108,46993],{"class":51},[34,127110,221],{"class":55},[34,127112,127113],{"class":504},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[34,127115,39688],{"class":40},[34,127117,127118],{"class":36,"line":1519},[34,127119,101],{"class":40},[34,127121,127122],{"class":36,"line":3283},[34,127123,1475],{"emptyLinePlaceholder":1474},[34,127125,127126],{"class":36,"line":3297},[34,127127,127128],{"class":40},"scene.build()\n",[34,127130,127131],{"class":36,"line":3302},[34,127132,1475],{"emptyLinePlaceholder":1474},[34,127134,127135,127137,127140],{"class":36,"line":3308},[34,127136,33588],{"class":55},[34,127138,127139],{"class":3617}," on_press",[34,127141,127142],{"class":40},"(key):\n",[34,127144,127145,127148],{"class":36,"line":3328},[34,127146,127147],{"class":55},"    try",[34,127149,5392],{"class":40},[34,127151,127152,127154,127157,127159,127162],{"class":36,"line":3333},[34,127153,4150],{"class":55},[34,127155,127156],{"class":40}," key.char ",[34,127158,4602],{"class":55},[34,127160,127161],{"class":504}," 'q'",[34,127163,5392],{"class":40},[34,127165,127166,127168],{"class":36,"line":3347},[34,127167,17378],{"class":55},[34,127169,127170],{"class":44}," False\n",[34,127172,127173,127176,127179],{"class":36,"line":3352},[34,127174,127175],{"class":55},"    except",[34,127177,127178],{"class":44}," AttributeError",[34,127180,5392],{"class":40},[34,127182,127183],{"class":36,"line":3381},[34,127184,127185],{"class":55},"        pass\n",[34,127187,127188],{"class":36,"line":3386},[34,127189,1475],{"emptyLinePlaceholder":1474},[34,127191,127192,127195,127197,127200,127203,127205],{"class":36,"line":3403},[34,127193,127194],{"class":40},"listener ",[34,127196,221],{"class":55},[34,127198,127199],{"class":40}," keyboard.Listener(",[34,127201,127202],{"class":51},"on_press",[34,127204,221],{"class":55},[34,127206,127207],{"class":40},"on_press)\n",[34,127209,127210],{"class":36,"line":3408},[34,127211,127212],{"class":40},"listener.start()\n",[34,127214,127215],{"class":36,"line":3413},[34,127216,1475],{"emptyLinePlaceholder":1474},[34,127218,127219,127221],{"class":36,"line":3418},[34,127220,110026],{"class":55},[34,127222,127223],{"class":40}," listener.running:\n",[34,127225,127226],{"class":36,"line":3432},[34,127227,127228],{"class":40},"    scene.step()\n",[103,127230,127231],{},[109,127232],{"alt":29,"src":127233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1711,127235,127236],{},"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":29,"searchDepth":165,"depth":165,"links":127238},[],{"category":25023},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126843,"description":126848},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127245,"title":127246,"body":127247,"description":1744,"extension":1745,"meta":127262,"navigation":1474,"path":127263,"seo":127264,"stem":127265,"__hash__":127266},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127248,"toc":127259},[127249,127252,127256],[10,127250,127246],{"id":127251},"_1-基础知识",[14,127253,127255],{"id":127254},"_11-js的组成","1.1 js的组成",[103,127257,127258],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":29,"searchDepth":165,"depth":165,"links":127260},[127261],{"id":127254,"depth":165,"text":127255},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127246,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127268,"title":127269,"body":127270,"description":1744,"extension":1745,"meta":127409,"navigation":1474,"path":127410,"seo":127411,"stem":127412,"__hash__":127413},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127271,"toc":127397},[127272,127275,127279,127282,127286,127296,127300,127303,127306,127309,127313,127320,127326,127330,127336,127347,127351,127354,127358,127361,127365,127368,127372,127375,127379,127382,127385,127388,127391,127394],[10,127273,127269],{"id":127274},"_2-vscode必备内容",[14,127276,127278],{"id":127277},"_21-标签分类","2.1 标签分类",[103,127280,127281],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127283,127285],{"id":127284},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[103,127287,127288,127289,127291,127292,127295],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[31,127290,2034],{}," 然后按 ",[31,127293,127294],{},"Tab","，快速自动生成基本结构。",[14,127297,127299],{"id":127298},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[103,127301,127302],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[103,127304,127305],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[103,127307,127308],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127310,127312],{"id":127311},"_24-视图缩放","2.4 视图缩放",[103,127314,127315,127316,127319],{},"缩放视图 ",[31,127317,127318],{},"ctrl+"," 可实现代码增大。",[103,127321,127322,127325],{},[31,127323,127324],{},"ctrl-"," 可实现代码减小。",[14,127327,127329],{"id":127328},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[103,127331,127332,127333,30031],{},"VSCode 新建文件快捷键为 ",[31,127334,127335],{},"ctrl+N",[103,127337,127338,127339,127342,127343,127346],{},"保存快捷键为 ",[31,127340,127341],{},"ctrl+S","，将文本保存为 ",[31,127344,127345],{},".html"," 文件。",[14,127348,127350],{"id":127349},"_26-auto-rename-tag","2.6 Auto Rename Tag",[103,127352,127353],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127355,127357],{"id":127356},"_27-vscode-icons","2.7 vscode-icons",[103,127359,127360],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127362,127364],{"id":127363},"_28-easy-less","2.8 Easy LESS",[103,127366,127367],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127369,127371],{"id":127370},"_29-会了吧插件","2.9 会了吧插件",[103,127373,127374],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127376,127378],{"id":127377},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[103,127380,127381],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[103,127383,127384],{},"②选定多个相同的单词:ctrl+D",[103,127386,127387],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[103,127389,127390],{},"④全局替换某些单词:ctrl+h",[103,127392,127393],{},"⑤快速定位到某一行:ctrl+g",[103,127395,127396],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":29,"searchDepth":165,"depth":165,"links":127398},[127399,127400,127401,127402,127403,127404,127405,127406,127407,127408],{"id":127277,"depth":165,"text":127278},{"id":127284,"depth":165,"text":127285},{"id":127298,"depth":165,"text":127299},{"id":127311,"depth":165,"text":127312},{"id":127328,"depth":165,"text":127329},{"id":127349,"depth":165,"text":127350},{"id":127356,"depth":165,"text":127357},{"id":127363,"depth":165,"text":127364},{"id":127370,"depth":165,"text":127371},{"id":127377,"depth":165,"text":127378},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127269,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127415,"title":127416,"body":127417,"description":1744,"extension":1745,"meta":127576,"navigation":1474,"path":127577,"seo":127578,"stem":127579,"__hash__":127580},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127418,"toc":127568},[127419,127422,127426,127436,127442,127448,127452,127461,127465,127470,127473,127476,127480,127483,127493,127502,127511,127520,127530,127537,127542,127547,127560],[10,127420,127416],{"id":127421},"_3-html文本与容器标签",[14,127423,127425],{"id":127424},"_31-标题标签","3.1 标题标签",[103,127427,127428,127431,127432,127435],{},[31,127429,127430],{},"\u003Ch1>","我是一级标签",[31,127433,127434],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[103,127437,127438,127431,127440],{},[31,127439,127430],{},[31,127441,127434],{},[103,127443,124698,127444,127447],{},[31,127445,127446],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127449,127451],{"id":127450},"_32-段落标签","3.2 段落标签",[103,127453,127454,127457,127458],{},[31,127455,127456],{},"\u003Cp>","....",[31,127459,127460],{},"\u003C\u002Fp>",[14,127462,127464],{"id":127463},"_33-换行标签","3.3 换行标签",[103,127466,127467],{},[31,127468,127469],{},"\u003Cbr \u002F>",[103,127471,127472],{},"具有强制换行的作用",[103,127474,127475],{},"单标签",[14,127477,127479],{"id":127478},"_34-文本格式化标签","3.4 文本格式化标签",[103,127481,127482],{},"提供粗体、斜体和下划线等效果",[103,127484,127485,127486,84176,127489,127492],{},"加粗：",[31,127487,127488],{},"\u003Cstrong>...\u003C\u002Fstrong>",[31,127490,127491],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[103,127494,127495,127496,84176,127499,127492],{},"斜体：",[31,127497,127498],{},"\u003Cem>...\u003C\u002Fem>",[31,127500,127501],{},"\u003Ci>...\u003C\u002Fi>",[103,127503,127504,127505,84176,127508,127492],{},"删除线：",[31,127506,127507],{},"\u003Cdel>...\u003C\u002Fdel>",[31,127509,127510],{},"\u003Cs>...\u003C\u002Fs>",[103,127512,127513,127514,84176,127517,127492],{},"下划线：",[31,127515,127516],{},"\u003Cins>...\u003C\u002Fins>",[31,127518,127519],{},"\u003Cu>...\u003C\u002Fu>",[14,127521,127523,127524,20056,127527,104056],{"id":127522},"_35-div和span标签","3.5 ",[31,127525,127526],{},"\u003Cdiv>",[31,127528,127529],{},"\u003Cspan>",[103,127531,127532,102381,127534,127536],{},[31,127533,127526],{},[31,127535,127529],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[103,127538,127539],{},[31,127540,127541],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[103,127543,127544],{},[31,127545,127546],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[103,127548,127549,127550,127552,127553,127555,127556,127559],{},"两者特点：①",[31,127551,127526],{}," 标签用来布局，但一行通常只放一个 ",[31,127554,127526],{},"。可以理解为一个大盒子，独占一行，在 ",[31,127557,127558],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[103,127561,78887,127562,127564,127565,127567],{},[31,127563,127529],{}," 标签也可用于布局，一行可以放多个 ",[31,127566,127529],{},"，可理解为小盒子。",{"title":29,"searchDepth":165,"depth":165,"links":127569},[127570,127571,127572,127573,127574],{"id":127424,"depth":165,"text":127425},{"id":127450,"depth":165,"text":127451},{"id":127463,"depth":165,"text":127464},{"id":127478,"depth":165,"text":127479},{"id":127522,"depth":165,"text":127575},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127416,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127582,"title":127583,"body":127584,"description":1744,"extension":1745,"meta":127781,"navigation":1474,"path":127782,"seo":127783,"stem":127784,"__hash__":127785},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127585,"toc":127773},[127586,127589,127593,127596,127602,127609,127615,127621,127624,127627,127630,127633,127636,127639,127642,127646,127649,127652,127655,127661,127667,127673,127680,127684,127690,127696,127699,127702,127708,127714,127720,127723,127726,127730,127733,127743,127749,127753,127762,127766,127769],[10,127587,127583],{"id":127588},"_4-html图像与链接",[14,127590,127592],{"id":127591},"_41-图像标签","4.1 图像标签",[103,127594,127595],{},"（1）标签",[103,127597,127598,127601],{},[31,127599,127600],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[103,127603,127604,127605,127608],{},"src是",[31,127606,127607],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[103,127610,127611,127612],{},"alt:文本，替换文本。图像不能显示的文字 ",[31,127613,127614],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[103,127616,127617,127618],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[31,127619,127620],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[103,127622,127623],{},"width:像素，设置图像的宽度",[103,127625,127626],{},"height:像素，设置图像的高度",[103,127628,127629],{},"border：像素，设置图像的边框粗细",[103,127631,127632],{},"（2）图像标签属性的注意点：",[103,127634,127635],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[103,127637,127638],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[103,127640,127641],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127643,127645],{"id":127644},"_42-路径注意要点","4.2 路径注意要点：",[103,127647,127648],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[103,127650,127651],{},"（2）根目录：就是打开文件夹的第一层根目录",[103,127653,127654],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[103,127656,127657,127658],{},"①同一级路径：图像文件位于HTML文件同一级，如",[31,127659,127660],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[103,127662,127663,127664],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[31,127665,127666],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[103,127668,127669,127670],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[31,127671,127672],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[103,127674,127675,127676,2058],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[236,127677,127678],{"href":127678,"rel":127679},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25510],[14,127681,127683],{"id":127682},"_43-超链接标签","4.3 超链接标签",[103,127685,127686,127689],{},[31,127687,127688],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[103,127691,127692,127693],{},"①语法格式：",[31,127694,127695],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[103,127697,127698],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[103,127700,127701],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[103,127703,127704,127705],{},"③链接分类：外部链接：",[31,127706,127707],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[103,127709,127710,127711],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[31,127712,127713],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[103,127715,127716,127717],{},"空链接：如果当时没有确定链接目标时，",[31,127718,127719],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[103,127721,127722],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[103,127724,127725],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127727,127729],{"id":127728},"_44-锚点链接","4.4 锚点链接",[103,127731,127732],{},"点我们点击链接，可以快速定位到页面中的某个位置",[103,127734,127735,127736,127739,127740],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[31,127737,127738],{},"\u003Ca href=\"#two\">","第二级",[31,127741,127742],{},"\u003C\u002Fa>",[103,127744,127745,127746],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[31,127747,127748],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127750,127752],{"id":127751},"_45-注释标签","4.5 注释标签",[103,127754,127755,127758,127759],{},[31,127756,127757],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[31,127760,127761],{},"ctrl+\u002F",[14,127763,127765],{"id":127764},"_46-特殊字符","4.6 特殊字符",[103,127767,127768],{},"可以实现添加多个空格",[109,127770],{"style":127771,"src":127772},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":29,"searchDepth":165,"depth":165,"links":127774},[127775,127776,127777,127778,127779,127780],{"id":127591,"depth":165,"text":127592},{"id":127644,"depth":165,"text":127645},{"id":127682,"depth":165,"text":127683},{"id":127728,"depth":165,"text":127729},{"id":127751,"depth":165,"text":127752},{"id":127764,"depth":165,"text":127765},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127583,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127787,"title":127788,"body":127789,"description":1744,"extension":1745,"meta":128082,"navigation":1474,"path":128083,"seo":128084,"stem":128085,"__hash__":128086},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127790,"toc":128073},[127791,127794,127798,127801,127804,127807,127810,127813,127816,127819,127822,127825,127845,127851,127855,127858,127861,127864,127867,127870,127873,127877,127880,127883,127886,127889,127902,127907,127910,127913,127928,127931,127934,127937,127940,127943,127947,127950,127957,127960,127963,127966,127969,127972,127978,127981,127984,127990,127993,127996,127999,128005,128008,128011,128025,128032,128035,128038,128045,128054,128057,128060,128063,128067,128070],[10,127792,127788],{"id":127793},"_5-html表格列表与表单",[14,127795,127797],{"id":127796},"_51-表格标签","5.1 表格标签",[103,127799,127800],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[103,127802,127803],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[103,127805,127806],{},"②表格基本语法：",[109,127808],{"style":127771,"src":127809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[103,127811,127812],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[109,127814],{"style":127771,"src":127815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[103,127817,127818],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[109,127820],{"style":127771,"src":127821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[103,127823,127824],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[103,127826,127827,127830,127831,127833,127834,127837,127838,127840,127841,127844],{},[31,127828,127829],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[31,127832,127829],{},"内部必须拥有",[31,127835,127836],{},"\u003Ctr>","标签，一般位于第一行，",[31,127839,127829],{},"比",[31,127842,127843],{},"\u003Cth>","范围广",[103,127846,127847,127850],{},[31,127848,127849],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127852,127854],{"id":127853},"_52-合并单元格","5.2 合并单元格",[103,127856,127857],{},"（1）合并单元格方式：",[103,127859,127860],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[103,127862,127863],{},"②跨列合并：colspan=\"合并单元格的个数\"",[103,127865,127866],{},"（2）目标单元格：",[103,127868,127869],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[103,127871,127872],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127874,127876],{"id":127875},"_53-列表标签","5.3 列表标签",[103,127878,127879],{},"（1）分类：无序列表、有序列表、自定义列表",[103,127881,127882],{},"①无序列表：",[109,127884],{"style":127771,"src":127885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[103,127887,127888],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[103,127890,127891,127894,127895,127898,127899,127901],{},[31,127892,127893],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[31,127896,127897],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[31,127900,127893],{},"中输入其他标签或文字是不对的",[103,127903,127904,127906],{},[31,127905,127897],{},"之间相当于一个容器，可以容纳所有元素",[103,127908,127909],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[103,127911,127912],{},"在css中去除前边的小圆点采用如下代码:",[24,127914,127918],{"className":127915,"code":127916,"language":127917,"meta":29,"style":29},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[31,127919,127920],{"__ignoreMap":29},[34,127921,127922,127925],{"class":36,"line":37},[34,127923,127924],{"class":52939},"list-style",[34,127926,127927],{"class":40},": none;\n",[103,127929,127930],{},"②有序列表：",[109,127932],{"style":127771,"src":127933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[103,127935,127936],{},"③自定义列表：",[109,127938],{"style":127771,"src":127939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[109,127941],{"style":127771,"src":127942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127944,127946],{"id":127945},"_54-表单标签","5.4 表单标签",[103,127948,127949],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[103,127951,127952,127953,127956],{},"（1）表单域：包含单元素的区域，",[31,127954,127955],{},"\u003Cform>","标签可以实现信息的收集和传递。",[109,127958],{"style":127771,"src":127959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[103,127961,127962],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[103,127964,127965],{},"表单元素提交必须有name属性",[103,127967,127968],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[103,127970,127971],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[103,127973,78864,127974,127977],{},[31,127975,127976],{},"\u003Cinput>","输入表单元素",[109,127979],{"style":127771,"src":127980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[109,127982],{"style":127771,"src":127983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[103,127985,127986,127987],{},"单选按钮：",[31,127988,127989],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[109,127991],{"style":127771,"src":127992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[103,127994,127995],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[109,127997],{"style":127771,"src":127998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[103,128000,128001,128004],{},[1165,128002,128003],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[103,128006,128007],{},"②select下拉表单元素：可以节约页面控件",[109,128009],{"style":127771,"src":128010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[103,128012,128013,15441,128015,128018,128019,128021,128022,128024],{},[1165,128014,1847],{},[31,128016,128017],{},"\u003Cselect>","中至少包含一对",[31,128020,104077],{},"；在",[31,128023,104077],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[103,128026,128027,128028,128031],{},"③",[31,128029,128030],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[109,128033],{"style":127771,"src":128034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[103,128036,128037],{},"3行20列",[14,128039,128041,128042,104056],{"id":128040},"_55-lable标签","5.5 ",[31,128043,128044],{},"\u003Clable>",[103,128046,128047,128048,128050,128051,128053],{},"它不是表单标签，但常常与表单标签搭配使用，",[31,128049,128044],{},"标签用于绑定一个表单标签，当点击",[31,128052,128044],{},"标签内的文本",[103,128055,128056],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[109,128058],{"style":127771,"src":128059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[109,128061],{"style":127771,"src":128062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128064,128066],{"id":128065},"_56-实例","5.6 实例",[109,128068],{"style":127771,"src":128069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1711,128071,128072],{},"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":29,"searchDepth":165,"depth":165,"links":128074},[128075,128076,128077,128078,128079,128081],{"id":127796,"depth":165,"text":127797},{"id":127853,"depth":165,"text":127854},{"id":127875,"depth":165,"text":127876},{"id":127945,"depth":165,"text":127946},{"id":128040,"depth":165,"text":128080},"5.5 \u003Clable>标签",{"id":128065,"depth":165,"text":128066},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127788,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128088,"title":128089,"body":128090,"description":1744,"extension":1745,"meta":128639,"navigation":1474,"path":128640,"seo":128641,"stem":128642,"__hash__":128643},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128091,"toc":128614},[128092,128095,128099,128102,128105,128109,128112,128115,128118,128121,128124,128127,128130,128134,128137,128141,128144,128147,128150,128154,128157,128160,128163,128169,128172,128175,128178,128181,128184,128187,128190,128223,128227,128230,128233,128236,128240,128243,128246,128249,128252,128255,128259,128262,128265,128268,128272,128275,128279,128282,128286,128289,128294,128298,128301,128305,128308,128311,128314,128317,128344,128347,128351,128354,128357,128362,128365,128368,128372,128375,128380,128383,128386,128389,128393,128396,128399,128402,128406,128409,128412,128415,128419,128423,128426,128466,128469,128473,128480,128483,128487,128490,128536,128540,128543,128546,128549,128577,128581,128584,128611],[10,128093,128089],{"id":128094},"_6-css语法与文本样式",[14,128096,128098],{"id":128097},"_61-css语法规范","6.1 css语法规范",[103,128100,128101],{},"由两部分组成，选择器及一条或多条声明",[109,128103],{"style":127771,"src":128104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[103,128106,128107],{},[1165,128108,1847],{},[103,128110,128111],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[103,128113,128114],{},"②属性与属性值以“键值对”的形式出现",[103,128116,128117],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[103,128119,128120],{},"④属性和属性值之间用英文“;”分开",[109,128122],{"style":127771,"src":128123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[109,128125],{"style":127771,"src":128126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[109,128128],{"style":127771,"src":128129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128131,128133],{"id":128132},"_62-css选择器","6.2 css选择器",[103,128135,128136],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[19,128138,128140],{"id":128139},"_621-标签选择器","6.2.1 标签选择器",[103,128142,128143],{},"①优点：能快速为页面中同类型的标签统一设置样式",[103,128145,128146],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[109,128148],{"style":127771,"src":128149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[19,128151,128153],{"id":128152},"_622-类选择器","6.2.2 类选择器",[103,128155,128156],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[103,128158,128159],{},"②样例",[109,128161],{"style":127771,"src":128162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[103,128164,128165,128166,128168],{},"③ ",[1165,128167,128003],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[103,128170,128171],{},"可以理解为给这个标签起了个名字，来表示；",[103,128173,128174],{},"长名称或词组可以使用横线来为选择器命名；",[103,128176,128177],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[103,128179,128180],{},"命名要有意义；",[109,128182],{"style":127771,"src":128183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[103,128185,128186],{},"类选择器也可以指定特殊的元素p.center{}",[103,128188,128189],{},"p.center和.center都对",[24,128191,128193],{"className":127915,"code":128192,"language":127917,"meta":29,"style":29},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[31,128194,128195,128200,128209,128219],{"__ignoreMap":29},[34,128196,128197],{"class":36,"line":37},[34,128198,128199],{"class":161},"\u002F* 类选择器指定特殊元素 *\u002F\n",[34,128201,128202,128204,128207],{"class":36,"line":165},[34,128203,103],{"class":52939},[34,128205,128206],{"class":3617},".center",[34,128208,17218],{"class":40},[34,128210,128211,128213,128215,128217],{"class":36,"line":171},[34,128212,72165],{"class":44},[34,128214,53076],{"class":40},[34,128216,53231],{"class":44},[34,128218,2952],{"class":40},[34,128220,128221],{"class":36,"line":182},[34,128222,3223],{"class":40},[19,128224,128226],{"id":128225},"_623-多类名使用","6.2.3 多类名使用",[103,128228,128229],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[109,128231],{"style":127771,"src":128232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[103,128234,128235],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[19,128237,128239],{"id":128238},"_624-id选择器","6.2.4 id选择器",[103,128241,128242],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[103,128244,128245],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[109,128247],{"style":127771,"src":128248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[103,128250,128251],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[103,128253,128254],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[19,128256,128258],{"id":128257},"_625-通配符选择器","6.2.5 通配符选择器",[103,128260,128261],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[103,128263,128264],{},"* {",[103,128266,128267],{},"color=\"red\"}",[19,128269,128271],{"id":128270},"_626-总结","6.2.6 总结",[109,128273],{"style":127771,"src":128274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128276,128278],{"id":128277},"_63-css字体属性","6.3 css字体属性",[103,128280,128281],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[19,128283,128285],{"id":128284},"_631-字体系列","6.3.1 字体系列",[103,128287,128288],{},"font-family: '宋体';",[103,128290,128291,128293],{},[1165,128292,1847],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[19,128295,128297],{"id":128296},"_632-字体大小","6.3.2 字体大小",[103,128299,128300],{},"font-size: 20px",[103,128302,128303,28119],{},[1165,128304,128003],{},[103,128306,128307],{},"①px（像素）大小是网页的最常用单位",[103,128309,128310],{},"②谷歌浏览器默认为16px",[103,128312,128313],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[103,128315,128316],{},"④可以给body指定整个页面的大小：会自动引用",[24,128318,128320],{"className":127915,"code":128319,"language":127917,"meta":29,"style":29},"body {\n  font-size: 16px;\n}\n",[31,128321,128322,128328,128340],{"__ignoreMap":29},[34,128323,128324,128326],{"class":36,"line":37},[34,128325,53439],{"class":52939},[34,128327,17218],{"class":40},[34,128329,128330,128332,128334,128336,128338],{"class":36,"line":165},[34,128331,72265],{"class":44},[34,128333,53076],{"class":40},[34,128335,2396],{"class":44},[34,128337,53131],{"class":55},[34,128339,2952],{"class":40},[34,128341,128342],{"class":36,"line":171},[34,128343,3223],{"class":40},[103,128345,128346],{},"⑤标题标签比较特殊，需要单独指定大小",[19,128348,128350],{"id":128349},"_633-字体粗细","6.3.3 字体粗细",[103,128352,128353],{},"font-weight: bold;",[103,128355,128356],{},"font-weight: 100；",[103,128358,128359,128361],{},[1165,128360,1847],{}," ①粗体文字变细：尽量别用normal，多用数字",[103,128363,128364],{},"font-weight= 400;",[103,128366,128367],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[19,128369,128371],{"id":128370},"_634-文字样式","6.3.4 文字样式",[103,128373,128374],{},"font-style: normal；",[103,128376,128377,28119],{},[1165,128378,128379],{},"属性值",[103,128381,128382],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[103,128384,128385],{},"②italic：浏览器会显示斜体的字体样式",[109,128387],{"style":127771,"src":128388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[19,128390,128392],{"id":128391},"_635-字体符合属性","6.3.5 字体符合属性",[109,128394],{"style":127771,"src":128395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[109,128397],{"style":127771,"src":128398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[103,128400,128401],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[103,128403,128404,28119],{},[1165,128405,128003],{},[103,128407,128408],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[103,128410,128411],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[103,128413,128414],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128416,128418],{"id":128417},"_64-css-test文本属性","6.4 css test文本属性",[19,128420,128422],{"id":128421},"_641-文本颜色","6.4.1 文本颜色",[103,128424,128425],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[24,128427,128429],{"className":127915,"code":128428,"language":127917,"meta":29,"style":29},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[31,128430,128431,128436,128442,128452,128457,128462],{"__ignoreMap":29},[34,128432,128433],{"class":36,"line":37},[34,128434,128435],{"class":161},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[34,128437,128438,128440],{"class":36,"line":165},[34,128439,103],{"class":52939},[34,128441,17218],{"class":40},[34,128443,128444,128446,128448,128450],{"class":36,"line":171},[34,128445,72544],{"class":44},[34,128447,53076],{"class":40},[34,128449,59060],{"class":44},[34,128451,2952],{"class":40},[34,128453,128454],{"class":36,"line":182},[34,128455,128456],{"class":161},"  \u002F* color: #ff0000; *\u002F\n",[34,128458,128459],{"class":36,"line":188},[34,128460,128461],{"class":161},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[34,128463,128464],{"class":36,"line":518},[34,128465,3223],{"class":40},[109,128467],{"style":127771,"src":128468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[19,128470,128472],{"id":128471},"_642-对齐文本","6.4.2 对齐文本",[103,128474,128475,128476,128479],{},"text-align属于用于设置元素内文本内容的 ",[1165,128477,128478],{},"水平对齐"," 方式",[103,128481,128482],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[19,128484,128486],{"id":128485},"_643-装饰文本","6.4.3 装饰文本",[103,128488,128489],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[24,128491,128493],{"className":127915,"code":128492,"language":127917,"meta":29,"style":29},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[31,128494,128495,128501,128511,128515,128521,128532],{"__ignoreMap":29},[34,128496,128497,128499],{"class":36,"line":37},[34,128498,236],{"class":52939},[34,128500,17218],{"class":40},[34,128502,128503,128505,128507,128509],{"class":36,"line":165},[34,128504,72141],{"class":44},[34,128506,53076],{"class":40},[34,128508,56376],{"class":44},[34,128510,2952],{"class":40},[34,128512,128513],{"class":36,"line":171},[34,128514,3223],{"class":40},[34,128516,128517,128519],{"class":36,"line":182},[34,128518,103],{"class":52939},[34,128520,17218],{"class":40},[34,128522,128523,128525,128527,128530],{"class":36,"line":188},[34,128524,72141],{"class":44},[34,128526,53076],{"class":40},[34,128528,128529],{"class":44},"underline",[34,128531,2952],{"class":40},[34,128533,128534],{"class":36,"line":518},[34,128535,3223],{"class":40},[19,128537,128539],{"id":128538},"_644-文本缩进","6.4.4 文本缩进",[103,128541,128542],{},"实现文本的第一行首行缩进自己指定的距离",[103,128544,128545],{},"20px往右边走；-20px往左边走",[103,128547,128548],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[24,128550,128552],{"className":127915,"code":128551,"language":127917,"meta":29,"style":29},"p {\n  text-indent: 2em;\n}\n",[31,128553,128554,128560,128573],{"__ignoreMap":29},[34,128555,128556,128558],{"class":36,"line":37},[34,128557,103],{"class":52939},[34,128559,17218],{"class":40},[34,128561,128562,128565,128567,128569,128571],{"class":36,"line":165},[34,128563,128564],{"class":44},"  text-indent",[34,128566,53076],{"class":40},[34,128568,332],{"class":44},[34,128570,25198],{"class":55},[34,128572,2952],{"class":40},[34,128574,128575],{"class":36,"line":171},[34,128576,3223],{"class":40},[19,128578,128580],{"id":128579},"_645-行间距","6.4.5 行间距",[103,128582,128583],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[24,128585,128587],{"className":127915,"code":128586,"language":127917,"meta":29,"style":29},"p {\n  line-height: 1.6;\n}\n",[31,128588,128589,128595,128607],{"__ignoreMap":29},[34,128590,128591,128593],{"class":36,"line":37},[34,128592,103],{"class":52939},[34,128594,17218],{"class":40},[34,128596,128597,128600,128602,128605],{"class":36,"line":165},[34,128598,128599],{"class":44},"  line-height",[34,128601,53076],{"class":40},[34,128603,128604],{"class":44},"1.6",[34,128606,2952],{"class":40},[34,128608,128609],{"class":36,"line":171},[34,128610,3223],{"class":40},[1711,128612,128613],{},"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":29,"searchDepth":165,"depth":165,"links":128615},[128616,128617,128625,128632],{"id":128097,"depth":165,"text":128098},{"id":128132,"depth":165,"text":128133,"children":128618},[128619,128620,128621,128622,128623,128624],{"id":128139,"depth":171,"text":128140},{"id":128152,"depth":171,"text":128153},{"id":128225,"depth":171,"text":128226},{"id":128238,"depth":171,"text":128239},{"id":128257,"depth":171,"text":128258},{"id":128270,"depth":171,"text":128271},{"id":128277,"depth":165,"text":128278,"children":128626},[128627,128628,128629,128630,128631],{"id":128284,"depth":171,"text":128285},{"id":128296,"depth":171,"text":128297},{"id":128349,"depth":171,"text":128350},{"id":128370,"depth":171,"text":128371},{"id":128391,"depth":171,"text":128392},{"id":128417,"depth":165,"text":128418,"children":128633},[128634,128635,128636,128637,128638],{"id":128421,"depth":171,"text":128422},{"id":128471,"depth":171,"text":128472},{"id":128485,"depth":171,"text":128486},{"id":128538,"depth":171,"text":128539},{"id":128579,"depth":171,"text":128580},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128089,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128645,"title":128646,"body":128647,"description":1744,"extension":1745,"meta":129296,"navigation":1474,"path":129297,"seo":129298,"stem":129299,"__hash__":129300},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128648,"toc":129277},[128649,128652,128656,128660,128720,128724,128734,128737,128740,128744,128769,128773,128776,128779,128782,128785,128788,128792,128795,128798,128840,128843,128869,128875,128878,128882,128886,128892,128895,128898,128901,128904,128907,128910,128955,128959,128962,128965,128969,128973,129002,129005,129010,129013,129016,129019,129022,129026,129030,129033,129035,129038,129042,129045,129049,129052,129055,129058,129062,129066,129072,129082,129085,129088,129091,129094,129097,129220,129228,129236,129274],[10,128650,128646],{"id":128651},"_7-css引入方式与选择器进阶",[14,128653,128655],{"id":128654},"_71-css引入方式","7.1 css引入方式",[19,128657,128659],{"id":128658},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[24,128661,128665],{"className":128662,"code":128663,"language":128664,"meta":29,"style":29},"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",[31,128666,128667,128675,128682,128694,128707,128712],{"__ignoreMap":29},[34,128668,128669,128671,128673],{"class":36,"line":37},[34,128670,2701],{"class":40},[34,128672,1711],{"class":52939},[34,128674,52946],{"class":40},[34,128676,128677,128680],{"class":36,"line":165},[34,128678,128679],{"class":52939},"  h1",[34,128681,17218],{"class":40},[34,128683,128684,128687,128689,128692],{"class":36,"line":171},[34,128685,128686],{"class":44},"    color",[34,128688,53076],{"class":40},[34,128690,128691],{"class":44},"blue",[34,128693,2952],{"class":40},[34,128695,128696,128699,128701,128703,128705],{"class":36,"line":182},[34,128697,128698],{"class":44},"    font-size",[34,128700,53076],{"class":40},[34,128702,2593],{"class":44},[34,128704,53131],{"class":55},[34,128706,2952],{"class":40},[34,128708,128709],{"class":36,"line":188},[34,128710,128711],{"class":40},"  }\n",[34,128713,128714,128716,128718],{"class":36,"line":518},[34,128715,53424],{"class":40},[34,128717,1711],{"class":52939},[34,128719,52946],{"class":40},[103,128721,128722,28119],{},[1165,128723,128003],{},[103,128725,78864,128726,128729,128730,128733],{},[31,128727,128728],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[31,128731,128732],{},"\u003Chead>","标签中",[103,128735,128736],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[103,128738,128739],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[19,128741,128743],{"id":128742},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[24,128745,128747],{"className":128662,"code":128746,"language":128664,"meta":29,"style":29},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[31,128748,128749],{"__ignoreMap":29},[34,128750,128751,128753,128755,128757,128759,128762,128765,128767],{"class":36,"line":37},[34,128752,2701],{"class":40},[34,128754,103],{"class":52939},[34,128756,64265],{"class":3617},[34,128758,221],{"class":40},[34,128760,128761],{"class":504},"\"color: red; font-size: 16px;\"",[34,128763,128764],{"class":40},">这是一个段落\u003C\u002F",[34,128766,103],{"class":52939},[34,128768,52946],{"class":40},[103,128770,128771,28119],{},[1165,128772,128003],{},[103,128774,128775],{},"①style其实就是标签的属性",[103,128777,128778],{},"②在双引号中间，写法要符合css规范",[103,128780,128781],{},"③可以控制当前的标签设置样式",[103,128783,128784],{},"④书写繁琐，简单时才用",[103,128786,128787],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[19,128789,128791],{"id":128790},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[103,128793,128794],{},"使用最多，单独建一个css文件，然后html引用",[103,128796,128797],{},"①css文件部分： style.css",[24,128799,128801],{"className":127915,"code":128800,"language":127917,"meta":29,"style":29},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[31,128802,128803,128808,128814,128824,128836],{"__ignoreMap":29},[34,128804,128805],{"class":36,"line":37},[34,128806,128807],{"class":161},"\u002F* style.css *\u002F\n",[34,128809,128810,128812],{"class":36,"line":165},[34,128811,10],{"class":52939},[34,128813,17218],{"class":40},[34,128815,128816,128818,128820,128822],{"class":36,"line":171},[34,128817,72544],{"class":44},[34,128819,53076],{"class":40},[34,128821,128691],{"class":44},[34,128823,2952],{"class":40},[34,128825,128826,128828,128830,128832,128834],{"class":36,"line":182},[34,128827,72265],{"class":44},[34,128829,53076],{"class":40},[34,128831,2593],{"class":44},[34,128833,53131],{"class":55},[34,128835,2952],{"class":40},[34,128837,128838],{"class":36,"line":188},[34,128839,3223],{"class":40},[103,128841,128842],{},"②html部分",[24,128844,128846],{"className":128662,"code":128845,"language":128664,"meta":29,"style":29},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[31,128847,128848],{"__ignoreMap":29},[34,128849,128850,128852,128854,128856,128858,128860,128862,128864,128867],{"class":36,"line":37},[34,128851,2701],{"class":40},[34,128853,70644],{"class":52939},[34,128855,70647],{"class":3617},[34,128857,221],{"class":40},[34,128859,70652],{"class":504},[34,128861,62696],{"class":3617},[34,128863,221],{"class":40},[34,128865,128866],{"class":504},"\"style.css\"",[34,128868,52946],{"class":40},[103,128870,128871,128874],{},[31,128872,128873],{},"\u003Chr>","水平线标签（但是不常用！）",[103,128876,128877],{},"ctrl+0回到页面原来大小",[14,128879,128881],{"id":128880},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[19,128883,128885],{"id":128884},"_721-快速生成html","7.2.1 快速生成html",[103,128887,128888,128889],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[31,128890,128891],{},"\u003Cdiv>``\u003C\u002Fdiv>",[103,128893,128894],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[103,128896,128897],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[103,128899,128900],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[103,128902,128903],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[103,128905,128906],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[103,128908,128909],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[24,128911,128913],{"className":128662,"code":128912,"language":128664,"meta":29,"style":29},"\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",[31,128914,128915,128920,128925,128930,128935,128940,128945,128950],{"__ignoreMap":29},[34,128916,128917],{"class":36,"line":37},[34,128918,128919],{"class":161},"\u003C!-- Emmet 语法示例 -->\n",[34,128921,128922],{"class":36,"line":165},[34,128923,128924],{"class":161},"\u003C!-- div*3        → 生成3个div -->\n",[34,128926,128927],{"class":36,"line":171},[34,128928,128929],{"class":161},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[34,128931,128932],{"class":36,"line":182},[34,128933,128934],{"class":161},"\u003C!-- div+p        → 兄弟div和p -->\n",[34,128936,128937],{"class":36,"line":188},[34,128938,128939],{"class":161},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[34,128941,128942],{"class":36,"line":518},[34,128943,128944],{"class":161},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[34,128946,128947],{"class":36,"line":524},[34,128948,128949],{"class":161},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[34,128951,128952],{"class":36,"line":530},[34,128953,128954],{"class":161},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[19,128956,128958],{"id":128957},"_722-快速生成css","7.2.2 快速生成css",[103,128960,128961],{},"简写开头",[103,128963,128964],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128966,128968],{"id":128967},"_73-css复合选择器","7.3 css复合选择器",[19,128970,128972],{"id":128971},"_731-后代选择器","7.3.1 后代选择器",[24,128974,128976],{"className":127915,"code":128975,"language":127917,"meta":29,"style":29},".parent .child {\n  color: blue;\n}\n",[31,128977,128978,128988,128998],{"__ignoreMap":29},[34,128979,128980,128983,128986],{"class":36,"line":37},[34,128981,128982],{"class":3617},".parent",[34,128984,128985],{"class":3617}," .child",[34,128987,17218],{"class":40},[34,128989,128990,128992,128994,128996],{"class":36,"line":165},[34,128991,72544],{"class":44},[34,128993,53076],{"class":40},[34,128995,128691],{"class":44},[34,128997,2952],{"class":40},[34,128999,129000],{"class":36,"line":171},[34,129001,3223],{"class":40},[103,129003,129004],{},"元素1 元素2 {样式声明}",[103,129006,129007],{},[1165,129008,129009],{},"注意点:",[103,129011,129012],{},"①元素1和元素2中间用空格隔开",[103,129014,129015],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[103,129017,129018],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[103,129020,129021],{},"④元素1和元素2可以是任意基础选择器",[19,129023,129025],{"id":129024},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[103,129027,129028],{},[1165,129029,129009],{},[103,129031,129032],{},"①元素1和元素2中间用大于号隔开",[103,129034,129015],{},[103,129036,129037],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[19,129039,129041],{"id":129040},"_733-并集选择器","7.3.3 并集选择器",[103,129043,129044],{},"元素1，元素2 {样式声明}",[103,129046,129047],{},[1165,129048,129009],{},[103,129050,129051],{},"①元素1和元素2中间用逗号隔开",[103,129053,129054],{},"②逗号可以理解为和的意思",[103,129056,129057],{},"③并集选择器通常用于集体声明",[19,129059,129061],{"id":129060},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[103,129063,129064],{},[1165,129065,129009],{},[103,129067,129068,129069,129071],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70644,129070],{},"－:visited－:hover－:active。",[103,129073,129074,129075,129078,129079,27386],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129076,129077],"hover",{}," 、 ",[129080,129081],"first-child",{},[103,129083,129084],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[103,129086,129087],{},"link对没访问的进行设置",[103,129089,129090],{},"vistied对已访问的进行改变",[103,129092,129093],{},"hover鼠标经过就会变",[103,129095,129096],{},"active常按(点)就会变",[24,129098,129100],{"className":127915,"code":129099,"language":127917,"meta":29,"style":29},"\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",[31,129101,129102,129107,129116,129126,129136,129140,129149,129160,129164,129172,129182,129192,129196,129205,129216],{"__ignoreMap":29},[34,129103,129104],{"class":36,"line":37},[34,129105,129106],{"class":161},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[34,129108,129109,129111,129114],{"class":36,"line":165},[34,129110,236],{"class":52939},[34,129112,129113],{"class":3617},":link",[34,129115,17218],{"class":40},[34,129117,129118,129120,129122,129124],{"class":36,"line":171},[34,129119,72544],{"class":44},[34,129121,53076],{"class":40},[34,129123,64008],{"class":44},[34,129125,2952],{"class":40},[34,129127,129128,129130,129132,129134],{"class":36,"line":182},[34,129129,72141],{"class":44},[34,129131,53076],{"class":40},[34,129133,56376],{"class":44},[34,129135,2952],{"class":40},[34,129137,129138],{"class":36,"line":188},[34,129139,3223],{"class":40},[34,129141,129142,129144,129147],{"class":36,"line":518},[34,129143,236],{"class":52939},[34,129145,129146],{"class":3617},":visited",[34,129148,17218],{"class":40},[34,129150,129151,129153,129155,129158],{"class":36,"line":524},[34,129152,72544],{"class":44},[34,129154,53076],{"class":40},[34,129156,129157],{"class":44},"purple",[34,129159,2952],{"class":40},[34,129161,129162],{"class":36,"line":530},[34,129163,3223],{"class":40},[34,129165,129166,129168,129170],{"class":36,"line":624},[34,129167,236],{"class":52939},[34,129169,62579],{"class":3617},[34,129171,17218],{"class":40},[34,129173,129174,129176,129178,129180],{"class":36,"line":630},[34,129175,72544],{"class":44},[34,129177,53076],{"class":40},[34,129179,56528],{"class":44},[34,129181,2952],{"class":40},[34,129183,129184,129186,129188,129190],{"class":36,"line":636},[34,129185,72141],{"class":44},[34,129187,53076],{"class":40},[34,129189,128529],{"class":44},[34,129191,2952],{"class":40},[34,129193,129194],{"class":36,"line":1513},[34,129195,3223],{"class":40},[34,129197,129198,129200,129203],{"class":36,"line":1519},[34,129199,236],{"class":52939},[34,129201,129202],{"class":3617},":active",[34,129204,17218],{"class":40},[34,129206,129207,129209,129211,129214],{"class":36,"line":3283},[34,129208,72544],{"class":44},[34,129210,53076],{"class":40},[34,129212,129213],{"class":44},"green",[34,129215,2952],{"class":40},[34,129217,129218],{"class":36,"line":3297},[34,129219,3223],{"class":40},[19,129221,129223,129224,129227],{"id":129222},"_735-伪类选择器","7.3.5 ",[129225,129226],"focus",{},"伪类选择器",[103,129229,129230,129232,129233,129235],{},[129225,129231],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[31,129234,127976],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[24,129237,129239],{"className":127915,"code":129238,"language":127917,"meta":29,"style":29},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[31,129240,129241,129249,129260,129270],{"__ignoreMap":29},[34,129242,129243,129245,129247],{"class":36,"line":37},[34,129244,55460],{"class":52939},[34,129246,63539],{"class":3617},[34,129248,17218],{"class":40},[34,129250,129251,129254,129256,129258],{"class":36,"line":165},[34,129252,129253],{"class":44},"  border-color",[34,129255,53076],{"class":40},[34,129257,56528],{"class":44},[34,129259,2952],{"class":40},[34,129261,129262,129264,129266,129268],{"class":36,"line":171},[34,129263,72437],{"class":44},[34,129265,53076],{"class":40},[34,129267,56376],{"class":44},[34,129269,2952],{"class":40},[34,129271,129272],{"class":36,"line":182},[34,129273,3223],{"class":40},[1711,129275,129276],{},"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":29,"searchDepth":165,"depth":165,"links":129278},[129279,129284,129288],{"id":128654,"depth":165,"text":128655,"children":129280},[129281,129282,129283],{"id":128658,"depth":171,"text":128659},{"id":128742,"depth":171,"text":128743},{"id":128790,"depth":171,"text":128791},{"id":128880,"depth":165,"text":128881,"children":129285},[129286,129287],{"id":128884,"depth":171,"text":128885},{"id":128957,"depth":171,"text":128958},{"id":128967,"depth":165,"text":128968,"children":129289},[129290,129291,129292,129293,129294],{"id":128971,"depth":171,"text":128972},{"id":129024,"depth":171,"text":129025},{"id":129040,"depth":171,"text":129041},{"id":129060,"depth":171,"text":129061},{"id":129222,"depth":171,"text":129295},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128646,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129302,"title":129303,"body":129304,"description":1744,"extension":1745,"meta":131227,"navigation":1474,"path":131228,"seo":131229,"stem":131230,"__hash__":131231},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129305,"toc":131201},[129306,129309,129313,129322,129326,129352,129357,129360,129363,129366,129369,129373,129376,129386,129394,129398,129433,129438,129441,129444,129447,129450,129454,129457,129466,129470,129483,129488,129491,129494,129497,129501,129504,129508,129511,129566,129569,129600,129603,129657,129661,129664,129830,129953,129956,129959,129962,129965,129969,129972,129976,129979,129982,129986,129989,130020,130047,130075,130078,130082,130108,130151,130155,130249,130252,130279,130282,130285,130288,130291,130294,130297,130300,130303,130306,130310,130367,130394,130398,130446,130450,130491,130493,130496,130499,130502,130505,130509,130601,130604,130607,130610,130614,130737,130938,130942,130946,130949,130952,130955,130959,130962,130965,130990,130993,130996,130999,131002,131005,131009,131017,131079,131082,131140,131143,131146,131149,131152,131155,131158,131161,131198],[10,129307,129303],{"id":129308},"_8-css显示模式与背景特性",[14,129310,129312],{"id":129311},"_81-css元素显示模式","8.1 css元素显示模式",[103,129314,129315,129316,129318,129319,129321],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[31,129317,127526],{},"自己占一行，比如一行可以放多个",[31,129320,127529],{},"，HTML 元素一般分为块元素和行内元素两种类型",[19,129323,129325],{"id":129324},"_811-块元素","8.1.1 块元素",[103,129327,129328,129329,129331,129332,2021,129335,2021,129337,2021,129339,2021,129342,2021,129345,129348,129349,129351],{},"常见的块元素有",[31,129330,127430],{},"~",[31,129333,129334],{},"\u003Ch6>",[31,129336,127456],{},[31,129338,127526],{},[31,129340,129341],{},"\u003Cul>",[31,129343,129344],{},"\u003Col>",[31,129346,129347],{},"\u003Cli>","等，其中 ",[31,129350,127526],{}," 标签是最典型的块元素",[103,129353,129354],{},[1165,129355,129356],{},"块级元素的特点：",[103,129358,129359],{},"① 比较霸道，自己独占一行。",[103,129361,129362],{},"② 高度，宽度、外边距以及内边距都可以控制。",[103,129364,129365],{},"③ 宽度默认是容器（父级宽度）的100%。",[103,129367,129368],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[103,129370,129371],{},[1165,129372,1847],{},[103,129374,129375],{},"①文字类的元素内不能使用块级元素",[103,129377,78887,129378,129380,129381,129383,129384],{},[31,129379,127456],{}," 标签主要用于存放文字，因此 ",[31,129382,127456],{}," 里面不能放块级元素，特别是不能放",[31,129385,127526],{},[103,129387,129388,129389,129331,129391,129393],{},"⑥同理， ",[31,129390,127430],{},[31,129392,129334],{},"等都是文字类块级标签，里面也不能放其他块级元素",[19,129395,129397],{"id":129396},"_812-行内元素","8.1.2 行内元素",[103,129399,129400,129401,2021,129403,2021,129406,2021,129409,2021,129412,2021,129415,2021,129418,2021,129421,2021,129424,2021,129427,129429,129430,129432],{},"常见的行内元素有 ",[31,129402,127688],{},[31,129404,129405],{},"\u003Cstrong>",[31,129407,129408],{},"\u003Cb>",[31,129410,129411],{},"\u003Cem>",[31,129413,129414],{},"\u003Ci>",[31,129416,129417],{},"\u003Cdel>",[31,129419,129420],{},"\u003Cs>",[31,129422,129423],{},"\u003Cins>",[31,129425,129426],{},"\u003Cu>",[31,129428,127529],{}," 等，其中 ",[31,129431,127529],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[103,129434,129435],{},[1165,129436,129437],{},"特点：",[103,129439,129440],{},"① 相邻行内元素在一行上，一行可以显示多个。",[103,129442,129443],{},"② 高、宽直接设置是无效的。",[103,129445,129446],{},"③ 默认宽度就是它本身内容的宽度。",[103,129448,129449],{},"④ 行内元素只能容纳文本或其他行内元素。",[103,129451,129452],{},[1165,129453,1847],{},[103,129455,129456],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[103,129458,129459,129460,129462,129463,129465],{},"②特殊情况链接 ",[31,129461,127688],{}," 里面可以放块级元素，但是给 ",[31,129464,127688],{}," 转换一下块级模式最安全",[19,129467,129469],{"id":129468},"_813-行内块元素","8.1.3 行内块元素",[103,129471,129472,129473,2021,129476,2021,129479,129482],{},"在行内元素中有几个特殊的标签 —— ",[31,129474,129475],{},"\u003Cimg \u002F>",[31,129477,129478],{},"\u003Cinput \u002F>",[31,129480,129481],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[103,129484,129485],{},[1165,129486,129487],{},"行内块元素的特点：",[103,129489,129490],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[103,129492,129493],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[103,129495,129496],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[19,129498,129500],{"id":129499},"_814-总结","8.1.4 总结",[109,129502],{"style":127771,"src":129503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[19,129505,129507],{"id":129506},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[103,129509,129510],{},"①转换为块元素：display:block;",[24,129512,129514],{"className":127915,"code":129513,"language":127917,"meta":29,"style":29},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[31,129515,129516,129521,129527,129538,129550,129562],{"__ignoreMap":29},[34,129517,129518],{"class":36,"line":37},[34,129519,129520],{"class":161},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[34,129522,129523,129525],{"class":36,"line":165},[34,129524,236],{"class":52939},[34,129526,17218],{"class":40},[34,129528,129529,129532,129534,129536],{"class":36,"line":171},[34,129530,129531],{"class":44},"  display",[34,129533,53076],{"class":40},[34,129535,62508],{"class":44},[34,129537,2952],{"class":40},[34,129539,129540,129542,129544,129546,129548],{"class":36,"line":182},[34,129541,72207],{"class":44},[34,129543,53076],{"class":40},[34,129545,451],{"class":44},[34,129547,53131],{"class":55},[34,129549,2952],{"class":40},[34,129551,129552,129554,129556,129558,129560],{"class":36,"line":188},[34,129553,72427],{"class":44},[34,129555,53076],{"class":40},[34,129557,2201],{"class":44},[34,129559,53131],{"class":55},[34,129561,2952],{"class":40},[34,129563,129564],{"class":36,"line":518},[34,129565,3223],{"class":40},[103,129567,129568],{},"②转换为行内元素：display:inline;",[24,129570,129572],{"className":127915,"code":129571,"language":127917,"meta":29,"style":29},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[31,129573,129574,129579,129585,129596],{"__ignoreMap":29},[34,129575,129576],{"class":36,"line":37},[34,129577,129578],{"class":161},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[34,129580,129581,129583],{"class":36,"line":165},[34,129582,53250],{"class":52939},[34,129584,17218],{"class":40},[34,129586,129587,129589,129591,129594],{"class":36,"line":171},[34,129588,129531],{"class":44},[34,129590,53076],{"class":40},[34,129592,129593],{"class":44},"inline",[34,129595,2952],{"class":40},[34,129597,129598],{"class":36,"line":182},[34,129599,3223],{"class":40},[103,129601,129602],{},"③转换为行内块：display:inline-block;",[24,129604,129606],{"className":127915,"code":129605,"language":127917,"meta":29,"style":29},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[31,129607,129608,129613,129619,129629,129641,129653],{"__ignoreMap":29},[34,129609,129610],{"class":36,"line":37},[34,129611,129612],{"class":161},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[34,129614,129615,129617],{"class":36,"line":165},[34,129616,34],{"class":52939},[34,129618,17218],{"class":40},[34,129620,129621,129623,129625,129627],{"class":36,"line":171},[34,129622,129531],{"class":44},[34,129624,53076],{"class":40},[34,129626,74022],{"class":44},[34,129628,2952],{"class":40},[34,129630,129631,129633,129635,129637,129639],{"class":36,"line":182},[34,129632,72207],{"class":44},[34,129634,53076],{"class":40},[34,129636,2407],{"class":44},[34,129638,53131],{"class":55},[34,129640,2952],{"class":40},[34,129642,129643,129645,129647,129649,129651],{"class":36,"line":188},[34,129644,72427],{"class":44},[34,129646,53076],{"class":40},[34,129648,2742],{"class":44},[34,129650,53131],{"class":55},[34,129652,2952],{"class":40},[34,129654,129655],{"class":36,"line":518},[34,129656,3223],{"class":40},[19,129658,129660],{"id":129659},"_816-小米侧边栏","8.1.6 小米侧边栏",[109,129662],{"style":127771,"src":129663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[24,129665,129667],{"className":128662,"code":129666,"language":128664,"meta":29,"style":29},"\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",[31,129668,129669,129674,129689,129708,129727,129746,129765,129784,129803,129822],{"__ignoreMap":29},[34,129670,129671],{"class":36,"line":37},[34,129672,129673],{"class":161},"\u003C!-- 小米侧边栏案例 -->\n",[34,129675,129676,129678,129680,129682,129684,129687],{"class":36,"line":165},[34,129677,2701],{"class":40},[34,129679,53250],{"class":52939},[34,129681,55125],{"class":3617},[34,129683,221],{"class":40},[34,129685,129686],{"class":504},"\"sidebar\"",[34,129688,52946],{"class":40},[34,129690,129691,129693,129695,129697,129699,129701,129704,129706],{"class":36,"line":171},[34,129692,53783],{"class":40},[34,129694,236],{"class":52939},[34,129696,62696],{"class":3617},[34,129698,221],{"class":40},[34,129700,62701],{"class":504},[34,129702,129703],{"class":40},">手机 电话卡\u003C\u002F",[34,129705,236],{"class":52939},[34,129707,52946],{"class":40},[34,129709,129710,129712,129714,129716,129718,129720,129723,129725],{"class":36,"line":182},[34,129711,53783],{"class":40},[34,129713,236],{"class":52939},[34,129715,62696],{"class":3617},[34,129717,221],{"class":40},[34,129719,62701],{"class":504},[34,129721,129722],{"class":40},">电视 盒子\u003C\u002F",[34,129724,236],{"class":52939},[34,129726,52946],{"class":40},[34,129728,129729,129731,129733,129735,129737,129739,129742,129744],{"class":36,"line":188},[34,129730,53783],{"class":40},[34,129732,236],{"class":52939},[34,129734,62696],{"class":3617},[34,129736,221],{"class":40},[34,129738,62701],{"class":504},[34,129740,129741],{"class":40},">笔记本 平板\u003C\u002F",[34,129743,236],{"class":52939},[34,129745,52946],{"class":40},[34,129747,129748,129750,129752,129754,129756,129758,129761,129763],{"class":36,"line":518},[34,129749,53783],{"class":40},[34,129751,236],{"class":52939},[34,129753,62696],{"class":3617},[34,129755,221],{"class":40},[34,129757,62701],{"class":504},[34,129759,129760],{"class":40},">出行 穿戴\u003C\u002F",[34,129762,236],{"class":52939},[34,129764,52946],{"class":40},[34,129766,129767,129769,129771,129773,129775,129777,129780,129782],{"class":36,"line":524},[34,129768,53783],{"class":40},[34,129770,236],{"class":52939},[34,129772,62696],{"class":3617},[34,129774,221],{"class":40},[34,129776,62701],{"class":504},[34,129778,129779],{"class":40},">智能 路由器\u003C\u002F",[34,129781,236],{"class":52939},[34,129783,52946],{"class":40},[34,129785,129786,129788,129790,129792,129794,129796,129799,129801],{"class":36,"line":530},[34,129787,53783],{"class":40},[34,129789,236],{"class":52939},[34,129791,62696],{"class":3617},[34,129793,221],{"class":40},[34,129795,62701],{"class":504},[34,129797,129798],{"class":40},">健康 儿童\u003C\u002F",[34,129800,236],{"class":52939},[34,129802,52946],{"class":40},[34,129804,129805,129807,129809,129811,129813,129815,129818,129820],{"class":36,"line":624},[34,129806,53783],{"class":40},[34,129808,236],{"class":52939},[34,129810,62696],{"class":3617},[34,129812,221],{"class":40},[34,129814,62701],{"class":504},[34,129816,129817],{"class":40},">耳机 音响\u003C\u002F",[34,129819,236],{"class":52939},[34,129821,52946],{"class":40},[34,129823,129824,129826,129828],{"class":36,"line":630},[34,129825,53424],{"class":40},[34,129827,53250],{"class":52939},[34,129829,52946],{"class":40},[24,129831,129833],{"className":127915,"code":129832,"language":127917,"meta":29,"style":29},".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",[31,129834,129835,129844,129854,129867,129879,129891,129903,129913,129924,129928,129938,129949],{"__ignoreMap":29},[34,129836,129837,129840,129842],{"class":36,"line":37},[34,129838,129839],{"class":3617},".sidebar",[34,129841,3057],{"class":52939},[34,129843,17218],{"class":40},[34,129845,129846,129848,129850,129852],{"class":36,"line":165},[34,129847,129531],{"class":44},[34,129849,53076],{"class":40},[34,129851,62508],{"class":44},[34,129853,2952],{"class":40},[34,129855,129856,129858,129860,129863,129865],{"class":36,"line":171},[34,129857,72207],{"class":44},[34,129859,53076],{"class":40},[34,129861,129862],{"class":44},"234",[34,129864,53131],{"class":55},[34,129866,2952],{"class":40},[34,129868,129869,129871,129873,129875,129877],{"class":36,"line":182},[34,129870,72427],{"class":44},[34,129872,53076],{"class":40},[34,129874,2249],{"class":44},[34,129876,53131],{"class":55},[34,129878,2952],{"class":40},[34,129880,129881,129883,129885,129887,129889],{"class":36,"line":188},[34,129882,128599],{"class":44},[34,129884,53076],{"class":40},[34,129886,2249],{"class":44},[34,129888,53131],{"class":55},[34,129890,2952],{"class":40},[34,129892,129893,129895,129897,129899,129901],{"class":36,"line":518},[34,129894,72462],{"class":44},[34,129896,53076],{"class":40},[34,129898,2742],{"class":44},[34,129900,53131],{"class":55},[34,129902,2952],{"class":40},[34,129904,129905,129907,129909,129911],{"class":36,"line":524},[34,129906,72544],{"class":44},[34,129908,53076],{"class":40},[34,129910,62481],{"class":44},[34,129912,2952],{"class":40},[34,129914,129915,129917,129919,129922],{"class":36,"line":530},[34,129916,72517],{"class":44},[34,129918,53076],{"class":40},[34,129920,129921],{"class":44},"#55585a",[34,129923,2952],{"class":40},[34,129925,129926],{"class":36,"line":624},[34,129927,3223],{"class":40},[34,129929,129930,129932,129934,129936],{"class":36,"line":630},[34,129931,129839],{"class":3617},[34,129933,3057],{"class":52939},[34,129935,62579],{"class":3617},[34,129937,17218],{"class":40},[34,129939,129940,129942,129944,129947],{"class":36,"line":636},[34,129941,72517],{"class":44},[34,129943,53076],{"class":40},[34,129945,129946],{"class":44},"#ff6700",[34,129948,2952],{"class":40},[34,129950,129951],{"class":36,"line":1513},[34,129952,3223],{"class":40},[109,129954],{"style":127771,"src":129955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[103,129957,129958],{},"行高=盒子高度：实现文字的垂直居中",[103,129960,129961],{},"原理讲解：",[109,129963],{"style":127771,"src":129964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129966,129968],{"id":129967},"_82-css背景","8.2 css背景",[103,129970,129971],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[19,129973,129975],{"id":129974},"_821-背景颜色","8.2.1 背景颜色",[103,129977,129978],{},"background-color:颜色值;",[103,129980,129981],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[19,129983,129985],{"id":129984},"_822-背景图片","8.2.2 背景图片",[103,129987,129988],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[24,129990,129992],{"className":127915,"code":129991,"language":127917,"meta":29,"style":29},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[31,129993,129994,130000,130016],{"__ignoreMap":29},[34,129995,129996,129998],{"class":36,"line":37},[34,129997,53250],{"class":52939},[34,129999,17218],{"class":40},[34,130001,130002,130005,130007,130009,130011,130014],{"class":36,"line":165},[34,130003,130004],{"class":44},"  background-image",[34,130006,53076],{"class":40},[34,130008,63365],{"class":44},[34,130010,286],{"class":40},[34,130012,130013],{"class":51},"images\u002Fbg.png",[34,130015,4372],{"class":40},[34,130017,130018],{"class":36,"line":171},[34,130019,3223],{"class":40},[1948,130021,130022,130031],{},[1951,130023,130024],{},[1954,130025,130026,130029],{},[1957,130027,130028],{"align":25381},"参数值",[1957,130030,104059],{"align":25381},[1994,130032,130033,130040],{},[1954,130034,130035,130037],{},[1999,130036,56376],{"align":25381},[1999,130038,130039],{"align":25381},"无背景图（默认的）",[1954,130041,130042,130044],{},[1999,130043,63365],{"align":25381},[1999,130045,130046],{"align":25381},"使用绝对或相对地址指定背景图像",[24,130048,130049],{"className":127915,"code":129991,"language":127917,"meta":29,"style":29},[31,130050,130051,130057,130071],{"__ignoreMap":29},[34,130052,130053,130055],{"class":36,"line":37},[34,130054,53250],{"class":52939},[34,130056,17218],{"class":40},[34,130058,130059,130061,130063,130065,130067,130069],{"class":36,"line":165},[34,130060,130004],{"class":44},[34,130062,53076],{"class":40},[34,130064,63365],{"class":44},[34,130066,286],{"class":40},[34,130068,130013],{"class":51},[34,130070,4372],{"class":40},[34,130072,130073],{"class":36,"line":171},[34,130074,3223],{"class":40},[103,130076,130077],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[19,130079,130081],{"id":130080},"_823-背景平铺","8.2.3 背景平铺",[24,130083,130085],{"className":127915,"code":130084,"language":127917,"meta":29,"style":29},"div {\n  background-repeat: no-repeat;\n}\n",[31,130086,130087,130093,130104],{"__ignoreMap":29},[34,130088,130089,130091],{"class":36,"line":37},[34,130090,53250],{"class":52939},[34,130092,17218],{"class":40},[34,130094,130095,130098,130100,130102],{"class":36,"line":165},[34,130096,130097],{"class":44},"  background-repeat",[34,130099,53076],{"class":40},[34,130101,63375],{"class":44},[34,130103,2952],{"class":40},[34,130105,130106],{"class":36,"line":171},[34,130107,3223],{"class":40},[1948,130109,130110,130118],{},[1951,130111,130112],{},[1954,130113,130114,130116],{},[1957,130115,130028],{"align":25381},[1957,130117,104059],{"align":25381},[1994,130119,130120,130128,130135,130143],{},[1954,130121,130122,130125],{},[1999,130123,130124],{"align":25381},"repeat",[1999,130126,130127],{"align":25381},"背景图像在纵向和横向上平铺（默认的）",[1954,130129,130130,130132],{},[1999,130131,63375],{"align":25381},[1999,130133,130134],{"align":25381},"背景图像不平铺",[1954,130136,130137,130140],{},[1999,130138,130139],{"align":25381},"repeat-x",[1999,130141,130142],{"align":25381},"背景图像在横向上平铺",[1954,130144,130145,130148],{},[1999,130146,130147],{"align":25381},"repeat-y",[1999,130149,130150],{"align":25381},"背景图像在纵向平铺",[19,130152,130154],{"id":130153},"_824-背景图片位置","8.2.4 背景图片位置",[24,130156,130158],{"className":127915,"code":130157,"language":127917,"meta":29,"style":29},"\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",[31,130159,130160,130165,130171,130185,130189,130194,130200,130216,130220,130225,130231,130245],{"__ignoreMap":29},[34,130161,130162],{"class":36,"line":37},[34,130163,130164],{"class":161},"\u002F* 方位名词 *\u002F\n",[34,130166,130167,130169],{"class":36,"line":165},[34,130168,53250],{"class":52939},[34,130170,17218],{"class":40},[34,130172,130173,130176,130178,130180,130183],{"class":36,"line":171},[34,130174,130175],{"class":44},"  background-position",[34,130177,53076],{"class":40},[34,130179,53231],{"class":44},[34,130181,130182],{"class":44}," top",[34,130184,2952],{"class":40},[34,130186,130187],{"class":36,"line":182},[34,130188,3223],{"class":40},[34,130190,130191],{"class":36,"line":188},[34,130192,130193],{"class":161},"\u002F* 精确单位 *\u002F\n",[34,130195,130196,130198],{"class":36,"line":518},[34,130197,53250],{"class":52939},[34,130199,17218],{"class":40},[34,130201,130202,130204,130206,130208,130210,130212,130214],{"class":36,"line":524},[34,130203,130175],{"class":44},[34,130205,53076],{"class":40},[34,130207,1249],{"class":44},[34,130209,53131],{"class":55},[34,130211,59143],{"class":44},[34,130213,53131],{"class":55},[34,130215,2952],{"class":40},[34,130217,130218],{"class":36,"line":530},[34,130219,3223],{"class":40},[34,130221,130222],{"class":36,"line":624},[34,130223,130224],{"class":161},"\u002F* 混合单位 *\u002F\n",[34,130226,130227,130229],{"class":36,"line":630},[34,130228,53250],{"class":52939},[34,130230,17218],{"class":40},[34,130232,130233,130235,130237,130239,130241,130243],{"class":36,"line":636},[34,130234,130175],{"class":44},[34,130236,53076],{"class":40},[34,130238,1249],{"class":44},[34,130240,53131],{"class":55},[34,130242,18790],{"class":44},[34,130244,2952],{"class":40},[34,130246,130247],{"class":36,"line":1513},[34,130248,3223],{"class":40},[103,130250,130251],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1948,130253,130254,130262],{},[1951,130255,130256],{},[1954,130257,130258,130260],{},[1957,130259,130028],{"align":25381},[1957,130261,27515],{"align":25381},[1994,130263,130264,130271],{},[1954,130265,130266,130268],{},[1999,130267,53607],{"align":25381},[1999,130269,130270],{"align":25381},"百分数|由浮点数和单位标识符组成的长度值",[1954,130272,130273,130276],{},[1999,130274,130275],{"align":25381},"position",[1999,130277,130278],{"align":25381},"top|center|bottom|left|center|right 方位名词",[103,130280,130281],{},"其他说明：",[103,130283,130284],{},"①参数是方位名词",[103,130286,130287],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[103,130289,130290],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[103,130292,130293],{},"②参数是精确单位",[103,130295,130296],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[103,130298,130299],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[103,130301,130302],{},"③参数是混合单位",[103,130304,130305],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[19,130307,130309],{"id":130308},"_825-背景图片固定","8.2.5 背景图片固定",[24,130311,130313],{"className":127915,"code":130312,"language":127917,"meta":29,"style":29},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[31,130314,130315,130320,130326,130338,130342,130347,130353,130363],{"__ignoreMap":29},[34,130316,130317],{"class":36,"line":37},[34,130318,130319],{"class":161},"\u002F* 背景滚动（默认） *\u002F\n",[34,130321,130322,130324],{"class":36,"line":165},[34,130323,53250],{"class":52939},[34,130325,17218],{"class":40},[34,130327,130328,130331,130333,130336],{"class":36,"line":171},[34,130329,130330],{"class":44},"  background-attachment",[34,130332,53076],{"class":40},[34,130334,130335],{"class":44},"scroll",[34,130337,2952],{"class":40},[34,130339,130340],{"class":36,"line":182},[34,130341,3223],{"class":40},[34,130343,130344],{"class":36,"line":188},[34,130345,130346],{"class":161},"\u002F* 背景固定 *\u002F\n",[34,130348,130349,130351],{"class":36,"line":518},[34,130350,53250],{"class":52939},[34,130352,17218],{"class":40},[34,130354,130355,130357,130359,130361],{"class":36,"line":524},[34,130356,130330],{"class":44},[34,130358,53076],{"class":40},[34,130360,87869],{"class":44},[34,130362,2952],{"class":40},[34,130364,130365],{"class":36,"line":530},[34,130366,3223],{"class":40},[1948,130368,130369,130378],{},[1951,130370,130371],{},[1954,130372,130373,130376],{},[1957,130374,130375],{"align":25381},"参数",[1957,130377,104059],{"align":25381},[1994,130379,130380,130387],{},[1954,130381,130382,130384],{},[1999,130383,130335],{"align":25381},[1999,130385,130386],{"align":25381},"背景图像是随对象内容滚动",[1954,130388,130389,130391],{},[1999,130390,87869],{"align":25381},[1999,130392,130393],{"align":25381},"背景图像固定",[19,130395,130397],{"id":130396},"_826-背景样式合写","8.2.6 背景样式合写",[24,130399,130401],{"className":127915,"code":130400,"language":127917,"meta":29,"style":29},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[31,130402,130403,130408,130414,130442],{"__ignoreMap":29},[34,130404,130405],{"class":36,"line":37},[34,130406,130407],{"class":161},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[34,130409,130410,130412],{"class":36,"line":165},[34,130411,53250],{"class":52939},[34,130413,17218],{"class":40},[34,130415,130416,130418,130420,130422,130425,130427,130429,130431,130433,130436,130438,130440],{"class":36,"line":171},[34,130417,72250],{"class":44},[34,130419,53076],{"class":40},[34,130421,62481],{"class":44},[34,130423,130424],{"class":44}," url",[34,130426,286],{"class":40},[34,130428,130013],{"class":51},[34,130430,372],{"class":40},[34,130432,63375],{"class":44},[34,130434,130435],{"class":44}," fixed",[34,130437,18790],{"class":44},[34,130439,130182],{"class":44},[34,130441,2952],{"class":40},[34,130443,130444],{"class":36,"line":182},[34,130445,3223],{"class":40},[19,130447,130449],{"id":130448},"_827-背景色半透明","8.2.7 背景色半透明",[24,130451,130453],{"className":127915,"code":130452,"language":127917,"meta":29,"style":29},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[31,130454,130455,130461,130487],{"__ignoreMap":29},[34,130456,130457,130459],{"class":36,"line":37},[34,130458,53250],{"class":52939},[34,130460,17218],{"class":40},[34,130462,130463,130465,130467,130469,130471,130473,130475,130477,130479,130481,130483,130485],{"class":36,"line":165},[34,130464,72250],{"class":44},[34,130466,53076],{"class":40},[34,130468,56749],{"class":44},[34,130470,286],{"class":40},[34,130472,177],{"class":44},[34,130474,48],{"class":40},[34,130476,177],{"class":44},[34,130478,48],{"class":40},[34,130480,177],{"class":44},[34,130482,48],{"class":40},[34,130484,101884],{"class":44},[34,130486,4372],{"class":40},[34,130488,130489],{"class":36,"line":171},[34,130490,3223],{"class":40},[103,130492,100759],{},[103,130494,130495],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[103,130497,130498],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[103,130500,130501],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[103,130503,130504],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[19,130506,130508],{"id":130507},"_828-总结","8.2.8 总结",[1948,130510,130511,130522],{},[1951,130512,130513],{},[1954,130514,130515,130518,130520],{},[1957,130516,130517],{"align":25381},"属性",[1957,130519,104059],{"align":25381},[1957,130521,1962],{"align":25381},[1994,130523,130524,130535,130546,130557,130568,130579,130590],{},[1954,130525,130526,130529,130532],{},[1999,130527,130528],{"align":25381},"background-color",[1999,130530,130531],{"align":25381},"背景颜色",[1999,130533,130534],{"align":25381},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1954,130536,130537,130540,130543],{},[1999,130538,130539],{"align":25381},"background-image",[1999,130541,130542],{"align":25381},"背景图片",[1999,130544,130545],{"align":25381},"url(图片路径)",[1954,130547,130548,130551,130554],{},[1999,130549,130550],{"align":25381},"background-repeat",[1999,130552,130553],{"align":25381},"是否平铺",[1999,130555,130556],{"align":25381},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1954,130558,130559,130562,130565],{},[1999,130560,130561],{"align":25381},"background-position",[1999,130563,130564],{"align":25381},"背景位置",[1999,130566,130567],{"align":25381},"length\u002Fposition 分别是x和y坐标",[1954,130569,130570,130573,130576],{},[1999,130571,130572],{"align":25381},"background-attachment",[1999,130574,130575],{"align":25381},"背景附着",[1999,130577,130578],{"align":25381},"scroll(背景滚动) \u002Ffixed (背景固定)",[1954,130580,130581,130584,130587],{},[1999,130582,130583],{"align":25381},"背景简写",[1999,130585,130586],{"align":25381},"书写更简单",[1999,130588,130589],{"align":25381},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1954,130591,130592,130595,130598],{},[1999,130593,130594],{"align":25381},"背景半透明",[1999,130596,130597],{"align":25381},"背景颜色半透明",[1999,130599,130600],{"align":25381},"background: rgba(0,0,0.3); 后面必须是4个值",[103,130602,130603],{},"颜色渐变：",[109,130605],{"style":127771,"src":130606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[109,130608],{"style":127771,"src":130609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[19,130611,130613],{"id":130612},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[24,130615,130617],{"className":128662,"code":130616,"language":128664,"meta":29,"style":29},"\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",[31,130618,130619,130634,130653,130672,130691,130710,130729],{"__ignoreMap":29},[34,130620,130621,130623,130625,130627,130629,130632],{"class":36,"line":37},[34,130622,2701],{"class":40},[34,130624,53250],{"class":52939},[34,130626,55125],{"class":3617},[34,130628,221],{"class":40},[34,130630,130631],{"class":504},"\"nav\"",[34,130633,52946],{"class":40},[34,130635,130636,130638,130640,130642,130644,130646,130649,130651],{"class":36,"line":165},[34,130637,53783],{"class":40},[34,130639,236],{"class":52939},[34,130641,62696],{"class":3617},[34,130643,221],{"class":40},[34,130645,62701],{"class":504},[34,130647,130648],{"class":40},">五彩导航1\u003C\u002F",[34,130650,236],{"class":52939},[34,130652,52946],{"class":40},[34,130654,130655,130657,130659,130661,130663,130665,130668,130670],{"class":36,"line":171},[34,130656,53783],{"class":40},[34,130658,236],{"class":52939},[34,130660,62696],{"class":3617},[34,130662,221],{"class":40},[34,130664,62701],{"class":504},[34,130666,130667],{"class":40},">五彩导航2\u003C\u002F",[34,130669,236],{"class":52939},[34,130671,52946],{"class":40},[34,130673,130674,130676,130678,130680,130682,130684,130687,130689],{"class":36,"line":182},[34,130675,53783],{"class":40},[34,130677,236],{"class":52939},[34,130679,62696],{"class":3617},[34,130681,221],{"class":40},[34,130683,62701],{"class":504},[34,130685,130686],{"class":40},">五彩导航3\u003C\u002F",[34,130688,236],{"class":52939},[34,130690,52946],{"class":40},[34,130692,130693,130695,130697,130699,130701,130703,130706,130708],{"class":36,"line":188},[34,130694,53783],{"class":40},[34,130696,236],{"class":52939},[34,130698,62696],{"class":3617},[34,130700,221],{"class":40},[34,130702,62701],{"class":504},[34,130704,130705],{"class":40},">五彩导航4\u003C\u002F",[34,130707,236],{"class":52939},[34,130709,52946],{"class":40},[34,130711,130712,130714,130716,130718,130720,130722,130725,130727],{"class":36,"line":518},[34,130713,53783],{"class":40},[34,130715,236],{"class":52939},[34,130717,62696],{"class":3617},[34,130719,221],{"class":40},[34,130721,62701],{"class":504},[34,130723,130724],{"class":40},">五彩导航5\u003C\u002F",[34,130726,236],{"class":52939},[34,130728,52946],{"class":40},[34,130730,130731,130733,130735],{"class":36,"line":524},[34,130732,53424],{"class":40},[34,130734,53250],{"class":52939},[34,130736,52946],{"class":40},[24,130738,130740],{"className":127915,"code":130739,"language":127917,"meta":29,"style":29},".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",[31,130741,130742,130751,130761,130773,130785,130795,130807,130817,130821,130846,130869,130892,130915],{"__ignoreMap":29},[34,130743,130744,130747,130749],{"class":36,"line":37},[34,130745,130746],{"class":3617},".nav",[34,130748,3057],{"class":52939},[34,130750,17218],{"class":40},[34,130752,130753,130755,130757,130759],{"class":36,"line":165},[34,130754,129531],{"class":44},[34,130756,53076],{"class":40},[34,130758,74022],{"class":44},[34,130760,2952],{"class":40},[34,130762,130763,130765,130767,130769,130771],{"class":36,"line":171},[34,130764,72207],{"class":44},[34,130766,53076],{"class":40},[34,130768,2610],{"class":44},[34,130770,53131],{"class":55},[34,130772,2952],{"class":40},[34,130774,130775,130777,130779,130781,130783],{"class":36,"line":182},[34,130776,72427],{"class":44},[34,130778,53076],{"class":40},[34,130780,2647],{"class":44},[34,130782,53131],{"class":55},[34,130784,2952],{"class":40},[34,130786,130787,130789,130791,130793],{"class":36,"line":188},[34,130788,72165],{"class":44},[34,130790,53076],{"class":40},[34,130792,53231],{"class":44},[34,130794,2952],{"class":40},[34,130796,130797,130799,130801,130803,130805],{"class":36,"line":518},[34,130798,128599],{"class":44},[34,130800,53076],{"class":40},[34,130802,2647],{"class":44},[34,130804,53131],{"class":55},[34,130806,2952],{"class":40},[34,130808,130809,130811,130813,130815],{"class":36,"line":524},[34,130810,72544],{"class":44},[34,130812,53076],{"class":40},[34,130814,62481],{"class":44},[34,130816,2952],{"class":40},[34,130818,130819],{"class":36,"line":530},[34,130820,3223],{"class":40},[34,130822,130823,130825,130827,130830,130832,130834,130837,130839,130841,130843],{"class":36,"line":624},[34,130824,130746],{"class":3617},[34,130826,3057],{"class":52939},[34,130828,130829],{"class":3617},":nth-child",[34,130831,286],{"class":40},[34,130833,394],{"class":44},[34,130835,130836],{"class":40},") { ",[34,130838,130528],{"class":44},[34,130840,53076],{"class":40},[34,130842,129946],{"class":44},[34,130844,130845],{"class":40},"; }\n",[34,130847,130848,130850,130852,130854,130856,130858,130860,130862,130864,130867],{"class":36,"line":630},[34,130849,130746],{"class":3617},[34,130851,3057],{"class":52939},[34,130853,130829],{"class":3617},[34,130855,286],{"class":40},[34,130857,332],{"class":44},[34,130859,130836],{"class":40},[34,130861,130528],{"class":44},[34,130863,53076],{"class":40},[34,130865,130866],{"class":44},"#ff0000",[34,130868,130845],{"class":40},[34,130870,130871,130873,130875,130877,130879,130881,130883,130885,130887,130890],{"class":36,"line":636},[34,130872,130746],{"class":3617},[34,130874,3057],{"class":52939},[34,130876,130829],{"class":3617},[34,130878,286],{"class":40},[34,130880,337],{"class":44},[34,130882,130836],{"class":40},[34,130884,130528],{"class":44},[34,130886,53076],{"class":40},[34,130888,130889],{"class":44},"#00a4ff",[34,130891,130845],{"class":40},[34,130893,130894,130896,130898,130900,130902,130904,130906,130908,130910,130913],{"class":36,"line":1513},[34,130895,130746],{"class":3617},[34,130897,3057],{"class":52939},[34,130899,130829],{"class":3617},[34,130901,286],{"class":40},[34,130903,247],{"class":44},[34,130905,130836],{"class":40},[34,130907,130528],{"class":44},[34,130909,53076],{"class":40},[34,130911,130912],{"class":44},"#ff00ff",[34,130914,130845],{"class":40},[34,130916,130917,130919,130921,130923,130925,130927,130929,130931,130933,130936],{"class":36,"line":1519},[34,130918,130746],{"class":3617},[34,130920,3057],{"class":52939},[34,130922,130829],{"class":3617},[34,130924,286],{"class":40},[34,130926,224],{"class":44},[34,130928,130836],{"class":40},[34,130930,130528],{"class":44},[34,130932,53076],{"class":40},[34,130934,130935],{"class":44},"#00ff00",[34,130937,130845],{"class":40},[14,130939,130941],{"id":130940},"_83-css三大特性","8.3 css三大特性",[19,130943,130945],{"id":130944},"_831-层叠性","8.3.1 层叠性",[103,130947,130948],{},"为了解决样式冲突问题",[103,130950,130951],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[103,130953,130954],{},"   ②样式不冲突，不会层叠",[19,130956,130958],{"id":130957},"_832-继承性","8.3.2 继承性",[103,130960,130961],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[103,130963,130964],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[24,130966,130968],{"className":127915,"code":130967,"language":127917,"meta":29,"style":29},"p {\n  color: #333;\n}\n",[31,130969,130970,130976,130986],{"__ignoreMap":29},[34,130971,130972,130974],{"class":36,"line":37},[34,130973,103],{"class":52939},[34,130975,17218],{"class":40},[34,130977,130978,130980,130982,130984],{"class":36,"line":165},[34,130979,72544],{"class":44},[34,130981,53076],{"class":40},[34,130983,64008],{"class":44},[34,130985,2952],{"class":40},[34,130987,130988],{"class":36,"line":171},[34,130989,3223],{"class":40},[109,130991],{"style":127771,"src":130992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[103,130994,130995],{},"解释：①行高可以跟单位也可以不跟单位",[103,130997,130998],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[103,131000,131001],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[103,131003,131004],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[19,131006,131008],{"id":131007},"_833-优先级","8.3.3 优先级",[1772,131010,131011,131014],{},[1775,131012,131013],{},"选择器相同，则执行层叠性",[1775,131015,131016],{},"选择器不同，则根据选择器权重执行",[1948,131018,131019,131029],{},[1951,131020,131021],{},[1954,131022,131023,131026],{},[1957,131024,131025],{"align":25381},"选择器",[1957,131027,131028],{"align":25381},"选择器权重",[1994,131030,131031,131039,131047,131055,131063,131071],{},[1954,131032,131033,131036],{},[1999,131034,131035],{"align":25381},"继承 或者*",[1999,131037,131038],{"align":25381},"0，0，0，0",[1954,131040,131041,131044],{},[1999,131042,131043],{"align":25381},"标签选择器",[1999,131045,131046],{"align":25381},"0，0，0，1",[1954,131048,131049,131052],{},[1999,131050,131051],{"align":25381},"类选择器，伪类选择器",[1999,131053,131054],{"align":25381},"0，0，1，0",[1954,131056,131057,131060],{},[1999,131058,131059],{"align":25381},"ID选择器",[1999,131061,131062],{"align":25381},"0，1，0，0",[1954,131064,131065,131068],{},[1999,131066,131067],{"align":25381},"行内样式",[1999,131069,131070],{"align":25381},"1，0，0，0",[1954,131072,131073,131076],{},[1999,131074,131075],{"align":25381},"！important",[1999,131077,131078],{"align":25381},"无穷大",[103,131080,131081],{},"! important用法：",[24,131083,131085],{"className":127915,"code":131084,"language":127917,"meta":29,"style":29},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[31,131086,131087,131092,131098,131111,131115,131120,131126,131136],{"__ignoreMap":29},[34,131088,131089],{"class":36,"line":37},[34,131090,131091],{"class":161},"\u002F* !important 拥有最高优先级 *\u002F\n",[34,131093,131094,131096],{"class":36,"line":165},[34,131095,53250],{"class":52939},[34,131097,17218],{"class":40},[34,131099,131100,131102,131104,131106,131109],{"class":36,"line":171},[34,131101,72544],{"class":44},[34,131103,53076],{"class":40},[34,131105,53284],{"class":44},[34,131107,131108],{"class":55}," !important",[34,131110,2952],{"class":40},[34,131112,131113],{"class":36,"line":182},[34,131114,3223],{"class":40},[34,131116,131117],{"class":36,"line":188},[34,131118,131119],{"class":161},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[34,131121,131122,131124],{"class":36,"line":518},[34,131123,53250],{"class":52939},[34,131125,17218],{"class":40},[34,131127,131128,131130,131132,131134],{"class":36,"line":524},[34,131129,72544],{"class":44},[34,131131,53076],{"class":40},[34,131133,59060],{"class":44},[34,131135,2952],{"class":40},[34,131137,131138],{"class":36,"line":530},[34,131139,3223],{"class":40},[103,131141,131142],{},"优先级注意点：",[103,131144,131145],{},"①权重是有4组数字组成,但是不会有进位",[103,131147,131148],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[103,131150,131151],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[103,131153,131154],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[103,131156,131157],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[103,131159,131160],{},"⑥复合选择器",[1948,131162,131163,131173],{},[1951,131164,131165],{},[1954,131166,131167,131170],{},[1957,131168,131169],{"align":25381},"div ul li",[1957,131171,131172],{"align":25381},"0,0,0,3",[1994,131174,131175,131183,131191],{},[1954,131176,131177,131180],{},[1999,131178,131179],{"align":25381},".nav ul li",[1999,131181,131182],{"align":25381},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1954,131184,131185,131188],{},[1999,131186,131187],{"align":25381},"a:hover",[1999,131189,131190],{"align":25381},"0,0,1,1",[1954,131192,131193,131196],{},[1999,131194,131195],{"align":25381},".nav a",[1999,131197,131190],{"align":25381},[1711,131199,131200],{},"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":29,"searchDepth":165,"depth":165,"links":131202},[131203,131211,131222],{"id":129311,"depth":165,"text":129312,"children":131204},[131205,131206,131207,131208,131209,131210],{"id":129324,"depth":171,"text":129325},{"id":129396,"depth":171,"text":129397},{"id":129468,"depth":171,"text":129469},{"id":129499,"depth":171,"text":129500},{"id":129506,"depth":171,"text":129507},{"id":129659,"depth":171,"text":129660},{"id":129967,"depth":165,"text":129968,"children":131212},[131213,131214,131215,131216,131217,131218,131219,131220,131221],{"id":129974,"depth":171,"text":129975},{"id":129984,"depth":171,"text":129985},{"id":130080,"depth":171,"text":130081},{"id":130153,"depth":171,"text":130154},{"id":130308,"depth":171,"text":130309},{"id":130396,"depth":171,"text":130397},{"id":130448,"depth":171,"text":130449},{"id":130507,"depth":171,"text":130508},{"id":130612,"depth":171,"text":130613},{"id":130940,"depth":165,"text":130941,"children":131223},[131224,131225,131226],{"id":130944,"depth":171,"text":130945},{"id":130957,"depth":171,"text":130958},{"id":131007,"depth":171,"text":131008},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129303,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131233,"title":131234,"body":131235,"description":1744,"extension":1745,"meta":132825,"navigation":1474,"path":132826,"seo":132827,"stem":132828,"__hash__":132829},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131236,"toc":132804},[131237,131240,131244,131247,131250,131253,131256,131259,131262,131265,131269,131277,131314,131350,131353,131367,131372,131406,131409,131502,131507,131510,131540,131543,131548,131556,131560,131567,131613,131657,131662,131665,131668,131671,131674,131677,131680,131682,131685,131689,131694,131738,131743,131746,131749,131786,131791,131794,131797,131800,131803,131835,131838,131841,131844,131876,131879,131882,131885,131889,131892,131924,131927,131931,131951,131954,131962,131965,131969,131974,131977,132009,132014,132017,132055,132059,132064,132067,132070,132101,132104,132121,132126,132178,132238,132243,132297,132335,132339,132343,132346,132350,132358,132361,132363,132374,132379,132427,132461,132464,132467,132470,132473,132517,132520,132523,132526,132529,132532,132535,132579,132582,132585,132588,132591,132594,132597,132603,132606,132650,132653,132656,132659,132662,132665,132709,132712,132714,132717,132721,132725,132763,132767,132770,132773,132777,132785,132789,132792,132795,132798,132801],[10,131238,131234],{"id":131239},"_9-css盒模型浮动与切图",[14,131241,131243],{"id":131242},"_91-盒子模型","9.1 盒子模型",[103,131245,131246],{},"利用盒子来设计网页",[103,131248,131249],{},"盒子包含：边框、外边距、内边距、实际内容",[103,131251,131252],{},"网页布局设置：",[103,131254,131255],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[103,131257,131258],{},"②利用css设置好盒子样式，然后摆放到相应位置",[103,131260,131261],{},"③往盒子里装内容",[109,131263],{"style":127771,"src":131264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[19,131266,131268],{"id":131267},"_911-边框border","9.1.1 边框（border）",[1772,131270,131271,131274],{},[1775,131272,131273],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[1775,131275,131276],{},"语法",[24,131278,131280],{"className":127915,"code":131279,"language":127917,"meta":29,"style":29},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[31,131281,131282,131287,131293,131310],{"__ignoreMap":29},[34,131283,131284],{"class":36,"line":37},[34,131285,131286],{"class":161},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[34,131288,131289,131291],{"class":36,"line":165},[34,131290,53250],{"class":52939},[34,131292,17218],{"class":40},[34,131294,131295,131297,131299,131301,131303,131305,131308],{"class":36,"line":171},[34,131296,72535],{"class":44},[34,131298,53076],{"class":40},[34,131300,394],{"class":44},[34,131302,53131],{"class":55},[34,131304,53160],{"class":44},[34,131306,131307],{"class":44}," #ccc",[34,131309,2952],{"class":40},[34,131311,131312],{"class":36,"line":182},[34,131313,3223],{"class":40},[1948,131315,131316,131324],{},[1951,131317,131318],{},[1954,131319,131320,131322],{},[1957,131321,130517],{"align":25381},[1957,131323,104059],{"align":25381},[1994,131325,131326,131334,131342],{},[1954,131327,131328,131331],{},[1999,131329,131330],{"align":25381},"border-width",[1999,131332,131333],{"align":25381},"定义边框粗细，单位是px",[1954,131335,131336,131339],{},[1999,131337,131338],{"align":25381},"border-style",[1999,131340,131341],{"align":25381},"边框的样式",[1954,131343,131344,131347],{},[1999,131345,131346],{"align":25381},"border-color",[1999,131348,131349],{"align":25381},"边框的颜色",[103,131351,131352],{},"边框样式 border-style 可以设置如下值：",[2798,131354,131355,131358,131361,131364],{},[1775,131356,131357],{},"none：没有边框即忽略所有边框的宽度（默认值）",[1775,131359,131360],{},"solid：边框为单实线(最为常用的)",[1775,131362,131363],{},"dashed：边框为虚线",[1775,131365,131366],{},"dotted：边框为点线",[1772,131368,131369],{"start":171},[1775,131370,131371],{},"边框的合写分写",[24,131373,131374],{"className":127915,"code":131279,"language":127917,"meta":29,"style":29},[31,131375,131376,131380,131386,131402],{"__ignoreMap":29},[34,131377,131378],{"class":36,"line":37},[34,131379,131286],{"class":161},[34,131381,131382,131384],{"class":36,"line":165},[34,131383,53250],{"class":52939},[34,131385,17218],{"class":40},[34,131387,131388,131390,131392,131394,131396,131398,131400],{"class":36,"line":171},[34,131389,72535],{"class":44},[34,131391,53076],{"class":40},[34,131393,394],{"class":44},[34,131395,53131],{"class":55},[34,131397,53160],{"class":44},[34,131399,131307],{"class":44},[34,131401,2952],{"class":40},[34,131403,131404],{"class":36,"line":182},[34,131405,3223],{"class":40},[103,131407,131408],{},"边框分开写法：",[24,131410,131412],{"className":127915,"code":131411,"language":127917,"meta":29,"style":29},"\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",[31,131413,131414,131419,131425,131443,131461,131480,131498],{"__ignoreMap":29},[34,131415,131416],{"class":36,"line":37},[34,131417,131418],{"class":161},"\u002F* 边框分开写法 *\u002F\n",[34,131420,131421,131423],{"class":36,"line":165},[34,131422,53250],{"class":52939},[34,131424,17218],{"class":40},[34,131426,131427,131430,131432,131434,131436,131438,131441],{"class":36,"line":171},[34,131428,131429],{"class":44},"  border-top",[34,131431,53076],{"class":40},[34,131433,394],{"class":44},[34,131435,53131],{"class":55},[34,131437,53160],{"class":44},[34,131439,131440],{"class":44}," #000",[34,131442,2952],{"class":40},[34,131444,131445,131448,131450,131452,131454,131456,131459],{"class":36,"line":182},[34,131446,131447],{"class":44},"  border-right",[34,131449,53076],{"class":40},[34,131451,332],{"class":44},[34,131453,53131],{"class":55},[34,131455,63880],{"class":44},[34,131457,131458],{"class":44}," #333",[34,131460,2952],{"class":40},[34,131462,131463,131466,131468,131470,131472,131475,131478],{"class":36,"line":188},[34,131464,131465],{"class":44},"  border-bottom",[34,131467,53076],{"class":40},[34,131469,337],{"class":44},[34,131471,53131],{"class":55},[34,131473,131474],{"class":44}," dotted",[34,131476,131477],{"class":44}," #666",[34,131479,2952],{"class":40},[34,131481,131482,131485,131487,131489,131491,131493,131496],{"class":36,"line":518},[34,131483,131484],{"class":44},"  border-left",[34,131486,53076],{"class":40},[34,131488,394],{"class":44},[34,131490,53131],{"class":55},[34,131492,53160],{"class":44},[34,131494,131495],{"class":44}," #999",[34,131497,2952],{"class":40},[34,131499,131500],{"class":36,"line":524},[34,131501,3223],{"class":40},[1772,131503,131504],{"start":182},[1775,131505,131506],{},"表格的细线边框",[103,131508,131509],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[24,131511,131513],{"className":127915,"code":131512,"language":127917,"meta":29,"style":29},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[31,131514,131515,131520,131526,131536],{"__ignoreMap":29},[34,131516,131517],{"class":36,"line":37},[34,131518,131519],{"class":161},"\u002F* 表格细线边框合并 *\u002F\n",[34,131521,131522,131524],{"class":36,"line":165},[34,131523,1948],{"class":52939},[34,131525,17218],{"class":40},[34,131527,131528,131530,131532,131534],{"class":36,"line":171},[34,131529,72217],{"class":44},[34,131531,53076],{"class":40},[34,131533,66674],{"class":44},[34,131535,2952],{"class":40},[34,131537,131538],{"class":36,"line":182},[34,131539,3223],{"class":40},[103,131541,131542],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[1772,131544,131545],{"start":188},[1775,131546,131547],{},"解决边框额外增加盒子的实际大小的方法：",[2798,131549,131550,131553],{},[1775,131551,131552],{},"测量盒子大小的时候,不量边框",[1775,131554,131555],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[19,131557,131559],{"id":131558},"_912-内边距","9.1.2 内边距",[1772,131561,131562,131565],{},[1775,131563,131564],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[1775,131566,131276],{},[1948,131568,131569,131579],{},[1951,131570,131571],{},[1954,131572,131573,131576],{},[1957,131574,131575],{"align":25381},"值的个数",[1957,131577,131578],{"align":25381},"表达意思",[1994,131580,131581,131589,131597,131605],{},[1954,131582,131583,131586],{},[1999,131584,131585],{"align":25381},"padding: 5px;",[1999,131587,131588],{"align":25381},"1个值，代表上下左右都有5个元素",[1954,131590,131591,131594],{},[1999,131592,131593],{"align":25381},"padding: 5px 10px;",[1999,131595,131596],{"align":25381},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1954,131598,131599,131602],{},[1999,131600,131601],{"align":25381},"padding: 5px 10px 20px;",[1999,131603,131604],{"align":25381},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1954,131606,131607,131610],{},[1999,131608,131609],{"align":25381},"padding: 5px 10px 20px 30px;",[1999,131611,131612],{"align":25381},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1948,131614,131615,131623],{},[1951,131616,131617],{},[1954,131618,131619,131621],{},[1957,131620,130517],{"align":25381},[1957,131622,104059],{"align":25381},[1994,131624,131625,131633,131641,131649],{},[1954,131626,131627,131630],{},[1999,131628,131629],{"align":25381},"padding-left",[1999,131631,131632],{"align":25381},"左内边距",[1954,131634,131635,131638],{},[1999,131636,131637],{"align":25381},"padding-right",[1999,131639,131640],{"align":25381},"右内边距",[1954,131642,131643,131646],{},[1999,131644,131645],{"align":25381},"padding-top",[1999,131647,131648],{"align":25381},"上内边距",[1954,131650,131651,131654],{},[1999,131652,131653],{"align":25381},"padding-bottom",[1999,131655,131656],{"align":25381},"下内边距",[1772,131658,131659],{"start":171},[1775,131660,131661],{},"内边距会影响盒子的实际大小",[103,131663,131664],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[103,131666,131667],{},"①内容和边框有了距离，添加了内边距",[103,131669,131670],{},"②padding影响了盒子实际大小",[103,131672,131673],{},"内边距对盒子大小的影响：",[103,131675,131676],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[103,131678,131679],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[103,131681,96842],{},[103,131683,131684],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[19,131686,131688],{"id":131687},"_913-外边距","9.1.3 外边距",[1772,131690,131691],{},[1775,131692,131693],{},"控制盒子与盒子之间的距离",[1948,131695,131696,131704],{},[1951,131697,131698],{},[1954,131699,131700,131702],{},[1957,131701,130517],{"align":25381},[1957,131703,104059],{"align":25381},[1994,131705,131706,131714,131722,131730],{},[1954,131707,131708,131711],{},[1999,131709,131710],{"align":25381},"margin-left",[1999,131712,131713],{"align":25381},"左外边距",[1954,131715,131716,131719],{},[1999,131717,131718],{"align":25381},"margin-right",[1999,131720,131721],{"align":25381},"右外边距",[1954,131723,131724,131727],{},[1999,131725,131726],{"align":25381},"margin-top",[1999,131728,131729],{"align":25381},"上外边距",[1954,131731,131732,131735],{},[1999,131733,131734],{"align":25381},"margin-bottom",[1999,131736,131737],{"align":25381},"下外边距",[1772,131739,131740],{"start":165},[1775,131741,131742],{},"外边距可以让块级盒子水平居中的两个条件：",[103,131744,131745],{},"①盒子必须指定了宽度（width）",[103,131747,131748],{},"②盒子左右的外边距都设置为 auto",[24,131750,131752],{"className":127915,"code":131751,"language":127917,"meta":29,"style":29},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[31,131753,131754,131759,131766,131782],{"__ignoreMap":29},[34,131755,131756],{"class":36,"line":37},[34,131757,131758],{"class":161},"\u002F* margin 复合写法（同上） *\u002F\n",[34,131760,131761,131764],{"class":36,"line":165},[34,131762,131763],{"class":3617},".box",[34,131765,17218],{"class":40},[34,131767,131768,131770,131772,131774,131776,131779],{"class":36,"line":171},[34,131769,72109],{"class":44},[34,131771,53076],{"class":40},[34,131773,177],{"class":44},[34,131775,53195],{"class":44},[34,131777,131778],{"class":40},";  ",[34,131780,131781],{"class":161},"\u002F* 块级盒子水平居中 *\u002F\n",[34,131783,131784],{"class":36,"line":182},[34,131785,3223],{"class":40},[1772,131787,131788],{"start":171},[1775,131789,131790],{},"外边距塌陷问题",[103,131792,131793],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[109,131795],{"style":127771,"src":131796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[103,131798,131799],{},"解决方案：",[103,131801,131802],{},"①可以为父亲元素定义上边距",[24,131804,131805],{"className":127915,"code":131751,"language":127917,"meta":29,"style":29},[31,131806,131807,131811,131817,131831],{"__ignoreMap":29},[34,131808,131809],{"class":36,"line":37},[34,131810,131758],{"class":161},[34,131812,131813,131815],{"class":36,"line":165},[34,131814,131763],{"class":3617},[34,131816,17218],{"class":40},[34,131818,131819,131821,131823,131825,131827,131829],{"class":36,"line":171},[34,131820,72109],{"class":44},[34,131822,53076],{"class":40},[34,131824,177],{"class":44},[34,131826,53195],{"class":44},[34,131828,131778],{"class":40},[34,131830,131781],{"class":161},[34,131832,131833],{"class":36,"line":182},[34,131834,3223],{"class":40},[103,131836,131837],{},"②可以为父亲元素定义上内边距",[103,131839,131840],{},"③可以为父亲元素添加overflow:hidden",[109,131842],{"style":127771,"src":131843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[24,131845,131846],{"className":127915,"code":131751,"language":127917,"meta":29,"style":29},[31,131847,131848,131852,131858,131872],{"__ignoreMap":29},[34,131849,131850],{"class":36,"line":37},[34,131851,131758],{"class":161},[34,131853,131854,131856],{"class":36,"line":165},[34,131855,131763],{"class":3617},[34,131857,17218],{"class":40},[34,131859,131860,131862,131864,131866,131868,131870],{"class":36,"line":171},[34,131861,72109],{"class":44},[34,131863,53076],{"class":40},[34,131865,177],{"class":44},[34,131867,53195],{"class":44},[34,131869,131778],{"class":40},[34,131871,131781],{"class":161},[34,131873,131874],{"class":36,"line":182},[34,131875,3223],{"class":40},[109,131877],{"style":127771,"src":131878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[103,131880,131881],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[103,131883,131884],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[19,131886,131888],{"id":131887},"_914-清除内外边距","9.1.4 清除内外边距",[103,131890,131891],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[24,131893,131894],{"className":127915,"code":131751,"language":127917,"meta":29,"style":29},[31,131895,131896,131900,131906,131920],{"__ignoreMap":29},[34,131897,131898],{"class":36,"line":37},[34,131899,131758],{"class":161},[34,131901,131902,131904],{"class":36,"line":165},[34,131903,131763],{"class":3617},[34,131905,17218],{"class":40},[34,131907,131908,131910,131912,131914,131916,131918],{"class":36,"line":171},[34,131909,72109],{"class":44},[34,131911,53076],{"class":40},[34,131913,177],{"class":44},[34,131915,53195],{"class":44},[34,131917,131778],{"class":40},[34,131919,131781],{"class":161},[34,131921,131922],{"class":36,"line":182},[34,131923,3223],{"class":40},[103,131925,131926],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[19,131928,131930],{"id":131929},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[2798,131932,131933,131936,131939,131942,131945,131948],{},[1775,131934,131935],{},"文件→打开 ：可以打开我们要测量的图片",[1775,131937,131938],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[1775,131940,131941],{},"右击标尺，把里面的单位改为像素",[1775,131943,131944],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[1775,131946,131947],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[1775,131949,131950],{},"用选区拖动 可以测量大小",[109,131952],{"style":127771,"src":131953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[2798,131955,131956,131959],{},[1775,131957,131958],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[1775,131960,131961],{},"吸管取色工具",[109,131963],{"style":127771,"src":131964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[19,131966,131968],{"id":131967},"_916-案例","9.1.6 案例",[1772,131970,131971],{},[1775,131972,131973],{},"小米商品",[109,131975],{"style":127771,"src":131976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[24,131978,131979],{"className":127915,"code":131751,"language":127917,"meta":29,"style":29},[31,131980,131981,131985,131991,132005],{"__ignoreMap":29},[34,131982,131983],{"class":36,"line":37},[34,131984,131758],{"class":161},[34,131986,131987,131989],{"class":36,"line":165},[34,131988,131763],{"class":3617},[34,131990,17218],{"class":40},[34,131992,131993,131995,131997,131999,132001,132003],{"class":36,"line":171},[34,131994,72109],{"class":44},[34,131996,53076],{"class":40},[34,131998,177],{"class":44},[34,132000,53195],{"class":44},[34,132002,131778],{"class":40},[34,132004,131781],{"class":161},[34,132006,132007],{"class":36,"line":182},[34,132008,3223],{"class":40},[1772,132010,132011],{"start":165},[1775,132012,132013],{},"快报模块",[109,132015],{"style":127771,"src":132016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[24,132018,132020],{"className":128662,"code":132019,"language":128664,"meta":29,"style":29},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[31,132021,132022,132027,132042,132047],{"__ignoreMap":29},[34,132023,132024],{"class":36,"line":37},[34,132025,132026],{"class":161},"\u003C!-- HTML 代码示例 -->\n",[34,132028,132029,132031,132033,132035,132037,132040],{"class":36,"line":165},[34,132030,2701],{"class":40},[34,132032,53250],{"class":52939},[34,132034,55125],{"class":3617},[34,132036,221],{"class":40},[34,132038,132039],{"class":504},"\"example\"",[34,132041,52946],{"class":40},[34,132043,132044],{"class":36,"line":171},[34,132045,132046],{"class":40},"  示例内容\n",[34,132048,132049,132051,132053],{"class":36,"line":182},[34,132050,53424],{"class":40},[34,132052,53250],{"class":52939},[34,132054,52946],{"class":40},[19,132056,132058],{"id":132057},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[1772,132060,132061],{},[1775,132062,132063],{},"圆角边框",[103,132065,132066],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[109,132068],{"style":127771,"src":132069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[24,132071,132073],{"className":127915,"code":132072,"language":127917,"meta":29,"style":29},"div {\n  border: 1px solid #ccc;\n}\n",[31,132074,132075,132081,132097],{"__ignoreMap":29},[34,132076,132077,132079],{"class":36,"line":37},[34,132078,53250],{"class":52939},[34,132080,17218],{"class":40},[34,132082,132083,132085,132087,132089,132091,132093,132095],{"class":36,"line":165},[34,132084,72535],{"class":44},[34,132086,53076],{"class":40},[34,132088,394],{"class":44},[34,132090,53131],{"class":55},[34,132092,53160],{"class":44},[34,132094,131307],{"class":44},[34,132096,2952],{"class":40},[34,132098,132099],{"class":36,"line":171},[34,132100,3223],{"class":40},[103,132102,132103],{},"解释:",[2798,132105,132106,132109,132112,132115,132118],{},[1775,132107,132108],{},"参数值可以为数值或百分比的形式",[1775,132110,132111],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[1775,132113,132114],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[1775,132116,132117],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[1775,132119,132120],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[1772,132122,132123],{"start":165},[1775,132124,132125],{},"盒子阴影",[24,132127,132129],{"className":127915,"code":132128,"language":127917,"meta":29,"style":29},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[31,132130,132131,132137,132174],{"__ignoreMap":29},[34,132132,132133,132135],{"class":36,"line":37},[34,132134,53250],{"class":52939},[34,132136,17218],{"class":40},[34,132138,132139,132142,132144,132146,132148,132150,132152,132154,132156,132158,132160,132162,132164,132166,132168,132170,132172],{"class":36,"line":165},[34,132140,132141],{"class":44},"  box-shadow",[34,132143,53076],{"class":40},[34,132145,177],{"class":44},[34,132147,16401],{"class":44},[34,132149,53131],{"class":55},[34,132151,3692],{"class":44},[34,132153,53131],{"class":55},[34,132155,80404],{"class":44},[34,132157,286],{"class":40},[34,132159,177],{"class":44},[34,132161,48],{"class":40},[34,132163,177],{"class":44},[34,132165,48],{"class":40},[34,132167,177],{"class":44},[34,132169,48],{"class":40},[34,132171,87846],{"class":44},[34,132173,4372],{"class":40},[34,132175,132176],{"class":36,"line":171},[34,132177,3223],{"class":40},[1948,132179,132180,132188],{},[1951,132181,132182],{},[1954,132183,132184,132186],{},[1957,132185,1962],{"align":25381},[1957,132187,29135],{"align":25381},[1994,132189,132190,132198,132206,132214,132222,132230],{},[1954,132191,132192,132195],{},[1999,132193,132194],{"align":25381},"h-shadow",[1999,132196,132197],{"align":25381},"必需,水平阴影的位置,允许负值",[1954,132199,132200,132203],{},[1999,132201,132202],{"align":25381},"v-shadow",[1999,132204,132205],{"align":25381},"必需,垂直阴影的位置,允许负值",[1954,132207,132208,132211],{},[1999,132209,132210],{"align":25381},"blur",[1999,132212,132213],{"align":25381},"可选,模糊距离,就是影子的虚实",[1954,132215,132216,132219],{},[1999,132217,132218],{"align":25381},"spread",[1999,132220,132221],{"align":25381},"可选,阴影尺寸",[1954,132223,132224,132227],{},[1999,132225,132226],{"align":25381},"color",[1999,132228,132229],{"align":25381},"可选,阴影的颜色",[1954,132231,132232,132235],{},[1999,132233,132234],{"align":25381},"inset",[1999,132236,132237],{"align":25381},"可选,将外部阴影(outset)改为内部阴影",[1772,132239,132240],{"start":171},[1775,132241,132242],{},"文字阴影",[24,132244,132246],{"className":127915,"code":132245,"language":127917,"meta":29,"style":29},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[31,132247,132248,132254,132293],{"__ignoreMap":29},[34,132249,132250,132252],{"class":36,"line":37},[34,132251,103],{"class":52939},[34,132253,17218],{"class":40},[34,132255,132256,132259,132261,132263,132265,132267,132269,132271,132273,132275,132277,132279,132281,132283,132285,132287,132289,132291],{"class":36,"line":165},[34,132257,132258],{"class":44},"  text-shadow",[34,132260,53076],{"class":40},[34,132262,394],{"class":44},[34,132264,53131],{"class":55},[34,132266,26764],{"class":44},[34,132268,53131],{"class":55},[34,132270,16401],{"class":44},[34,132272,53131],{"class":55},[34,132274,80404],{"class":44},[34,132276,286],{"class":40},[34,132278,177],{"class":44},[34,132280,48],{"class":40},[34,132282,177],{"class":44},[34,132284,48],{"class":40},[34,132286,177],{"class":44},[34,132288,48],{"class":40},[34,132290,101884],{"class":44},[34,132292,4372],{"class":40},[34,132294,132295],{"class":36,"line":171},[34,132296,3223],{"class":40},[1948,132298,132299,132307],{},[1951,132300,132301],{},[1954,132302,132303,132305],{},[1957,132304,1962],{"align":25381},[1957,132306,29135],{"align":25381},[1994,132308,132309,132315,132322,132329],{},[1954,132310,132311,132313],{},[1999,132312,132194],{"align":25381},[1999,132314,132197],{"align":25381},[1954,132316,132317,132319],{},[1999,132318,132202],{"align":25381},[1999,132320,132321],{"align":25381},"必需,垂直阴影位置,允许负值",[1954,132323,132324,132326],{},[1999,132325,132210],{"align":25381},[1999,132327,132328],{"align":25381},"可选,模糊的距离",[1954,132330,132331,132333],{},[1999,132332,132226],{"align":25381},[1999,132334,132229],{"align":25381},[14,132336,132338],{"id":132337},"_92-浮动","9.2 浮动",[19,132340,132342],{"id":132341},"_921-浮动介绍","9.2.1 浮动介绍",[103,132344,132345],{},"在16.2中详细介绍",[19,132347,132349],{"id":132348},"_922-清除浮动","9.2.2 清除浮动",[1772,132351,132352,132355],{},[1775,132353,132354],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[1775,132356,132357],{},"清除浮动的本质",[103,132359,132360],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[103,132362,10675],{},[2798,132364,132365,132368,132371],{},[1775,132366,132367],{},"如果父盒子本身有高度，则不需要清除浮动",[1775,132369,132370],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[1775,132372,132373],{},"父级有了高度，就不会影响下面的标准流了",[1772,132375,132376],{"start":171},[1775,132377,132378],{},"清除浮动样式",[24,132380,132382],{"className":127915,"code":132381,"language":127917,"meta":29,"style":29},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[31,132383,132384,132391,132402,132406,132413,132423],{"__ignoreMap":29},[34,132385,132386,132389],{"class":36,"line":37},[34,132387,132388],{"class":3617},".left",[34,132390,17218],{"class":40},[34,132392,132393,132396,132398,132400],{"class":36,"line":165},[34,132394,132395],{"class":44},"  float",[34,132397,53076],{"class":40},[34,132399,25381],{"class":44},[34,132401,2952],{"class":40},[34,132403,132404],{"class":36,"line":171},[34,132405,3223],{"class":40},[34,132407,132408,132411],{"class":36,"line":182},[34,132409,132410],{"class":3617},".right",[34,132412,17218],{"class":40},[34,132414,132415,132417,132419,132421],{"class":36,"line":188},[34,132416,132395],{"class":44},[34,132418,53076],{"class":40},[34,132420,74161],{"class":44},[34,132422,2952],{"class":40},[34,132424,132425],{"class":36,"line":518},[34,132426,3223],{"class":40},[1948,132428,132429,132437],{},[1951,132430,132431],{},[1954,132432,132433,132435],{},[1957,132434,128379],{"align":25381},[1957,132436,29135],{"align":25381},[1994,132438,132439,132446,132453],{},[1954,132440,132441,132443],{},[1999,132442,25381],{"align":25381},[1999,132444,132445],{"align":25381},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1954,132447,132448,132450],{},[1999,132449,74161],{"align":25381},[1999,132451,132452],{"align":25381},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1954,132454,132455,132458],{},[1999,132456,132457],{"align":25381},"both",[1999,132459,132460],{"align":25381},"同时清除左右侧浮动的影响",[103,132462,132463],{},"法一",[103,132465,132466],{},"额外标签法也称为隔墙法",[103,132468,132469],{},"使用方式：",[103,132471,132472],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[24,132474,132475],{"className":127915,"code":132381,"language":127917,"meta":29,"style":29},[31,132476,132477,132483,132493,132497,132503,132513],{"__ignoreMap":29},[34,132478,132479,132481],{"class":36,"line":37},[34,132480,132388],{"class":3617},[34,132482,17218],{"class":40},[34,132484,132485,132487,132489,132491],{"class":36,"line":165},[34,132486,132395],{"class":44},[34,132488,53076],{"class":40},[34,132490,25381],{"class":44},[34,132492,2952],{"class":40},[34,132494,132495],{"class":36,"line":171},[34,132496,3223],{"class":40},[34,132498,132499,132501],{"class":36,"line":182},[34,132500,132410],{"class":3617},[34,132502,17218],{"class":40},[34,132504,132505,132507,132509,132511],{"class":36,"line":188},[34,132506,132395],{"class":44},[34,132508,53076],{"class":40},[34,132510,74161],{"class":44},[34,132512,2952],{"class":40},[34,132514,132515],{"class":36,"line":518},[34,132516,3223],{"class":40},[103,132518,132519],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[103,132521,132522],{},"优点： 通俗易懂，书写方便",[103,132524,132525],{},"缺点： 添加许多无意义的标签，结构化较差",[103,132527,132528],{},"注意： 要求这个新的空标签必须是块级元素。",[103,132530,132531],{},"法二",[103,132533,132534],{},"父级添加overflow属性",[24,132536,132537],{"className":127915,"code":132381,"language":127917,"meta":29,"style":29},[31,132538,132539,132545,132555,132559,132565,132575],{"__ignoreMap":29},[34,132540,132541,132543],{"class":36,"line":37},[34,132542,132388],{"class":3617},[34,132544,17218],{"class":40},[34,132546,132547,132549,132551,132553],{"class":36,"line":165},[34,132548,132395],{"class":44},[34,132550,53076],{"class":40},[34,132552,25381],{"class":44},[34,132554,2952],{"class":40},[34,132556,132557],{"class":36,"line":171},[34,132558,3223],{"class":40},[34,132560,132561,132563],{"class":36,"line":182},[34,132562,132410],{"class":3617},[34,132564,17218],{"class":40},[34,132566,132567,132569,132571,132573],{"class":36,"line":188},[34,132568,132395],{"class":44},[34,132570,53076],{"class":40},[34,132572,74161],{"class":44},[34,132574,2952],{"class":40},[34,132576,132577],{"class":36,"line":518},[34,132578,3223],{"class":40},[103,132580,132581],{},"overflow: hidden;",[103,132583,132584],{},"优点：代码简洁",[103,132586,132587],{},"缺点：无法显示溢出的部分",[103,132589,132590],{},"注意：是给父元素添加代码",[103,132592,132593],{},"法三",[103,132595,132596],{},"父级添加after伪元素",[103,132598,132599,132602],{},[132600,132601],"after",{}," 方式是额外标签法的升级版",[103,132604,132605],{},"使用的时候复制就可以",[24,132607,132608],{"className":127915,"code":132381,"language":127917,"meta":29,"style":29},[31,132609,132610,132616,132626,132630,132636,132646],{"__ignoreMap":29},[34,132611,132612,132614],{"class":36,"line":37},[34,132613,132388],{"class":3617},[34,132615,17218],{"class":40},[34,132617,132618,132620,132622,132624],{"class":36,"line":165},[34,132619,132395],{"class":44},[34,132621,53076],{"class":40},[34,132623,25381],{"class":44},[34,132625,2952],{"class":40},[34,132627,132628],{"class":36,"line":171},[34,132629,3223],{"class":40},[34,132631,132632,132634],{"class":36,"line":182},[34,132633,132410],{"class":3617},[34,132635,17218],{"class":40},[34,132637,132638,132640,132642,132644],{"class":36,"line":188},[34,132639,132395],{"class":44},[34,132641,53076],{"class":40},[34,132643,74161],{"class":44},[34,132645,2952],{"class":40},[34,132647,132648],{"class":36,"line":518},[34,132649,3223],{"class":40},[103,132651,132652],{},"优点：没有增加标签，结构更简单",[103,132654,132655],{},"缺点：照顾低版本浏览器",[103,132657,132658],{},"代表网站： 百度、淘宝网、网易等",[103,132660,132661],{},"法四",[103,132663,132664],{},"父级添加双伪元素",[24,132666,132667],{"className":127915,"code":132381,"language":127917,"meta":29,"style":29},[31,132668,132669,132675,132685,132689,132695,132705],{"__ignoreMap":29},[34,132670,132671,132673],{"class":36,"line":37},[34,132672,132388],{"class":3617},[34,132674,17218],{"class":40},[34,132676,132677,132679,132681,132683],{"class":36,"line":165},[34,132678,132395],{"class":44},[34,132680,53076],{"class":40},[34,132682,25381],{"class":44},[34,132684,2952],{"class":40},[34,132686,132687],{"class":36,"line":171},[34,132688,3223],{"class":40},[34,132690,132691,132693],{"class":36,"line":182},[34,132692,132410],{"class":3617},[34,132694,17218],{"class":40},[34,132696,132697,132699,132701,132703],{"class":36,"line":188},[34,132698,132395],{"class":44},[34,132700,53076],{"class":40},[34,132702,74161],{"class":44},[34,132704,2952],{"class":40},[34,132706,132707],{"class":36,"line":518},[34,132708,3223],{"class":40},[103,132710,132711],{},"优点：代码更简洁",[103,132713,132655],{},[103,132715,132716],{},"代表网站：小米、腾讯等",[14,132718,132720],{"id":132719},"_93-ps切图","9.3 PS切图",[19,132722,132724],{"id":132723},"_931-常见图片格式","9.3.1 常见图片格式",[1948,132726,132727,132737],{},[1951,132728,132729],{},[1954,132730,132731,132734],{},[1957,132732,132733],{"align":25381},"jpg图像格式",[1957,132735,132736],{"align":25381},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1994,132738,132739,132747,132755],{},[1954,132740,132741,132744],{},[1999,132742,132743],{"align":25381},"gif图像格式",[1999,132745,132746],{"align":25381},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1954,132748,132749,132752],{},[1999,132750,132751],{"align":25381},"png图像格式",[1999,132753,132754],{"align":25381},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1954,132756,132757,132760],{},[1999,132758,132759],{"align":25381},"PSD图像格式",[1999,132761,132762],{"align":25381},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[19,132764,132766],{"id":132765},"_932-图层切图","9.3.2 图层切图",[103,132768,132769],{},"最简单的切图方式：右击图层 → 导出 → 切片",[103,132771,132772],{},"按住shift选中两个图层->图层菜单->合并图层",[19,132774,132776],{"id":132775},"_933-切片切图","9.3.3 切片切图",[2798,132778,132779,132782],{},[1775,132780,132781],{},"利用切片工具手动划出",[1775,132783,132784],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[19,132786,132788],{"id":132787},"_934-切图步骤","9.3.4 切图步骤",[103,132790,132791],{},"用切片工具选中：",[109,132793],{"style":127771,"src":132794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[103,132796,132797],{},"文件 -> 导出",[109,132799],{"style":127771,"src":132800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1711,132802,132803],{},"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":29,"searchDepth":165,"depth":165,"links":132805},[132806,132815,132819],{"id":131242,"depth":165,"text":131243,"children":132807},[132808,132809,132810,132811,132812,132813,132814],{"id":131267,"depth":171,"text":131268},{"id":131558,"depth":171,"text":131559},{"id":131687,"depth":171,"text":131688},{"id":131887,"depth":171,"text":131888},{"id":131929,"depth":171,"text":131930},{"id":131967,"depth":171,"text":131968},{"id":132057,"depth":171,"text":132058},{"id":132337,"depth":165,"text":132338,"children":132816},[132817,132818],{"id":132341,"depth":171,"text":132342},{"id":132348,"depth":171,"text":132349},{"id":132719,"depth":165,"text":132720,"children":132820},[132821,132822,132823,132824],{"id":132723,"depth":171,"text":132724},{"id":132765,"depth":171,"text":132766},{"id":132775,"depth":171,"text":132776},{"id":132787,"depth":171,"text":132788},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131234,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132831,"title":132832,"body":132833,"description":1744,"extension":1745,"meta":133474,"navigation":1474,"path":133475,"seo":133476,"stem":133477,"__hash__":133478},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132834,"toc":133462},[132835,132838,132842,132868,132902,132906,132910,132913,132955,132962,132972,132980,132982,132985,132988,132991,132998,133012,133016,133019,133048,133052,133055,133069,133073,133076,133104,133108,133111,133137,133141,133146,133179,133184,133212,133216,133233,133279,133284,133328,133345,133452,133460],[10,132836,132832],{"id":132837},"_10-css规范与学成在线案例",[14,132839,132841],{"id":132840},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[1772,132843,132844,132850,132856,132862],{},[1775,132845,132846,132849],{},[1165,132847,132848],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[1775,132851,132852,132855],{},[1165,132853,132854],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[1775,132857,132858,132861],{},[1165,132859,132860],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[1775,132863,132864,132867],{},[1165,132865,132866],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[24,132869,132870],{"className":127915,"code":131279,"language":127917,"meta":29,"style":29},[31,132871,132872,132876,132882,132898],{"__ignoreMap":29},[34,132873,132874],{"class":36,"line":37},[34,132875,131286],{"class":161},[34,132877,132878,132880],{"class":36,"line":165},[34,132879,53250],{"class":52939},[34,132881,17218],{"class":40},[34,132883,132884,132886,132888,132890,132892,132894,132896],{"class":36,"line":171},[34,132885,72535],{"class":44},[34,132887,53076],{"class":40},[34,132889,394],{"class":44},[34,132891,53131],{"class":55},[34,132893,53160],{"class":44},[34,132895,131307],{"class":44},[34,132897,2952],{"class":40},[34,132899,132900],{"class":36,"line":182},[34,132901,3223],{"class":40},[14,132903,132905],{"id":132904},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[19,132907,132909],{"id":132908},"_1021-header头部制作","10.2.1 header头部制作",[109,132911],{"style":127771,"src":132912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[2798,132914,132915,132922,132929,132935,132942,132949],{},[1775,132916,132917,132918,132921],{},"1号是版心盒子 ",[1165,132919,132920],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[1775,132923,132924,132925,132928],{},"版心盒子 里面包含 2号盒子 ",[1165,132926,132927],{},"logo"," 图标",[1775,132930,132931,132932,132934],{},"版心盒子 里面包含 3号盒子 ",[1165,132933,55352],{}," 导航栏",[1775,132936,132937,132938,132941],{},"版心盒子 里面包含 4号盒子 ",[1165,132939,132940],{},"search"," 搜索框",[1775,132943,132944,132945,132948],{},"版心盒子 里面包含 5号盒子 ",[1165,132946,132947],{},"user"," 个人信息",[1775,132950,132951,132952],{},"注意，要求里面的 ",[1165,132953,132954],{},"4个子盒子 必须都浮动",[1772,132956,132957],{},[1775,132958,132959],{},[1165,132960,132961],{},"导航栏注意点:",[103,132963,132964,132965,132968,132969],{},"实际开发中， ",[1165,132966,132967],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[1165,132970,132971],{},"用 li 包含链接(li+a)的做法",[2798,132973,132974,132977],{},[1775,132975,132976],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[1775,132978,132979],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[103,132981,10675],{},[103,132983,132984],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[103,132986,132987],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[103,132989,132990],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[1772,132992,132993],{"start":165},[1775,132994,132995],{},[1165,132996,132997],{},"4号盒子search的细节：",[2798,132999,133000,133003,133006],{},[1775,133001,133002],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[1775,133004,133005],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[1775,133007,133008,133011],{},[31,133009,133010],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[19,133013,133015],{"id":133014},"_1022-banner制作","10.2.2 banner制作",[109,133017],{"style":127771,"src":133018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[2798,133020,133021,133028,133034,133041],{},[1775,133022,133023,133024,133027],{},"1号盒子是通栏的大盒子 ",[1165,133025,133026],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[1775,133029,133030,133031,133033],{},"2号盒子是版心 ",[1165,133032,2588],{}," ， 要水平居中对齐",[1775,133035,133036,133037,133040],{},"3号盒子版心内，左对齐 ",[1165,133038,133039],{},"subnav"," 侧导航栏",[1775,133042,133043,133044,133047],{},"4号盒子版心内，右对齐 ",[1165,133045,133046],{},"course"," 课程",[19,133049,133051],{"id":133050},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[109,133053],{"style":127771,"src":133054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[2798,133056,133057,133060,133063,133066],{},[1775,133058,133059],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[1775,133061,133062],{},"1号盒子是标题 H3 左侧浮动",[1775,133064,133065],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[1775,133067,133068],{},"3号盒子 右浮动 mod 修改",[19,133070,133072],{"id":133071},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[109,133074],{"style":127771,"src":133075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[2798,133077,133078,133084,133091,133098,133101],{},[1775,133079,133080,133081,133083],{},"1号盒子为最大的盒子 ",[1165,133082,55353],{}," 版心水平居中对齐",[1775,133085,133086,133087,133090],{},"2号盒子为上面部分 ",[1165,133088,133089],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[1775,133092,133093,133094,133097],{},"3号盒子为底下部分 ",[1165,133095,133096],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[1775,133099,133100],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[1775,133102,133103],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[19,133105,133107],{"id":133106},"_1025-底部模块制作","10.2.5 底部模块制作",[109,133109],{"style":127771,"src":133110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[2798,133112,133113,133120,133123,133130],{},[1775,133114,133115,133116,133119],{},"1号盒子通栏大盒子 底部 ",[1165,133117,133118],{},"footer"," 给高度 底色是白色",[1775,133121,133122],{},"2号盒子版心水平居中",[1775,133124,133125,133126,133129],{},"3号盒子版权 ",[1165,133127,133128],{},"copyright"," 左对齐",[1775,133131,133132,133133,133136],{},"4号盒子 链接组 ",[1165,133134,133135],{},"links"," 右对齐",[19,133138,133140],{"id":133139},"_1026-代码模块","10.2.6 代码模块",[1772,133142,133143],{},[1775,133144,133145],{},"html部分",[24,133147,133149],{"className":128662,"code":133148,"language":128664,"meta":29,"style":29},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[31,133150,133151],{"__ignoreMap":29},[34,133152,133153,133155,133157,133159,133161,133164,133167,133169,133172,133175,133177],{"class":36,"line":37},[34,133154,2701],{"class":40},[34,133156,236],{"class":52939},[34,133158,62696],{"class":3617},[34,133160,221],{"class":40},[34,133162,133163],{"class":504},"\"https:\u002F\u002Fexample.com\"",[34,133165,133166],{"class":3617}," target",[34,133168,221],{"class":40},[34,133170,133171],{"class":504},"\"_blank\"",[34,133173,133174],{"class":40},">链接文字\u003C\u002F",[34,133176,236],{"class":52939},[34,133178,52946],{"class":40},[1772,133180,133181],{"start":165},[1775,133182,133183],{},"css部分",[24,133185,133186],{"className":128662,"code":133148,"language":128664,"meta":29,"style":29},[31,133187,133188],{"__ignoreMap":29},[34,133189,133190,133192,133194,133196,133198,133200,133202,133204,133206,133208,133210],{"class":36,"line":37},[34,133191,2701],{"class":40},[34,133193,236],{"class":52939},[34,133195,62696],{"class":3617},[34,133197,221],{"class":40},[34,133199,133163],{"class":504},[34,133201,133166],{"class":3617},[34,133203,221],{"class":40},[34,133205,133171],{"class":504},[34,133207,133174],{"class":40},[34,133209,236],{"class":52939},[34,133211,52946],{"class":40},[19,133213,133215],{"id":133214},"_1027-收获","10.2.7 收获",[1772,133217,133218,133221,133224,133227,133230],{},[1775,133219,133220],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[1775,133222,133223],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[1775,133225,133226],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[1775,133228,133229],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[1775,133231,133232],{},"遗忘代码",[24,133234,133236],{"className":127915,"code":133235,"language":127917,"meta":29,"style":29},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[31,133237,133238,133260,133265,133275],{"__ignoreMap":29},[34,133239,133240,133242,133244,133246,133248,133250,133252,133254,133256,133258],{"class":36,"line":37},[34,133241,53250],{"class":52939},[34,133243,48],{"class":40},[34,133245,103],{"class":52939},[34,133247,48],{"class":40},[34,133249,10],{"class":52939},[34,133251,48],{"class":40},[34,133253,2798],{"class":52939},[34,133255,48],{"class":40},[34,133257,1775],{"class":52939},[34,133259,17218],{"class":40},[34,133261,133262],{"class":36,"line":165},[34,133263,133264],{"class":161},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[34,133266,133267,133269,133271,133273],{"class":36,"line":171},[34,133268,129531],{"class":44},[34,133270,53076],{"class":40},[34,133272,62508],{"class":44},[34,133274,2952],{"class":40},[34,133276,133277],{"class":36,"line":182},[34,133278,3223],{"class":40},[1772,133280,133281],{"start":518},[1775,133282,133283],{},"html引css的程序",[24,133285,133286],{"className":127915,"code":133235,"language":127917,"meta":29,"style":29},[31,133287,133288,133310,133314,133324],{"__ignoreMap":29},[34,133289,133290,133292,133294,133296,133298,133300,133302,133304,133306,133308],{"class":36,"line":37},[34,133291,53250],{"class":52939},[34,133293,48],{"class":40},[34,133295,103],{"class":52939},[34,133297,48],{"class":40},[34,133299,10],{"class":52939},[34,133301,48],{"class":40},[34,133303,2798],{"class":52939},[34,133305,48],{"class":40},[34,133307,1775],{"class":52939},[34,133309,17218],{"class":40},[34,133311,133312],{"class":36,"line":165},[34,133313,133264],{"class":161},[34,133315,133316,133318,133320,133322],{"class":36,"line":171},[34,133317,129531],{"class":44},[34,133319,53076],{"class":40},[34,133321,62508],{"class":44},[34,133323,2952],{"class":40},[34,133325,133326],{"class":36,"line":182},[34,133327,3223],{"class":40},[1772,133329,133330,133333,133336,133339,133342],{"start":524},[1775,133331,133332],{},"浮动的盒子不会有外边距合并问题",[1775,133334,133335],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[1775,133337,133338],{},"ctrl+g快速定位行；shift+alt多个光标",[1775,133340,133341],{},"学习上方各个模块的选择器起名方法，以后就这样用",[1775,133343,133344],{},"在写选择器时尽量写全一些，例如",[24,133346,133348],{"className":127915,"code":133347,"language":127917,"meta":29,"style":29},"\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",[31,133349,133350,133355,133371,133376,133391,133396,133411,133416,133431,133436],{"__ignoreMap":29},[34,133351,133352],{"class":36,"line":37},[34,133353,133354],{"class":161},"\u002F* 静态定位（默认） *\u002F\n",[34,133356,133357,133360,133362,133364,133366,133369],{"class":36,"line":165},[34,133358,133359],{"class":3617},".static",[34,133361,81444],{"class":40},[34,133363,130275],{"class":44},[34,133365,53076],{"class":40},[34,133367,133368],{"class":44},"static",[34,133370,130845],{"class":40},[34,133372,133373],{"class":36,"line":171},[34,133374,133375],{"class":161},"\u002F* 相对定位 *\u002F\n",[34,133377,133378,133381,133383,133385,133387,133389],{"class":36,"line":182},[34,133379,133380],{"class":3617},".relative",[34,133382,81444],{"class":40},[34,133384,130275],{"class":44},[34,133386,53076],{"class":40},[34,133388,56403],{"class":44},[34,133390,130845],{"class":40},[34,133392,133393],{"class":36,"line":188},[34,133394,133395],{"class":161},"\u002F* 绝对定位 *\u002F\n",[34,133397,133398,133401,133403,133405,133407,133409],{"class":36,"line":518},[34,133399,133400],{"class":3617},".absolute",[34,133402,81444],{"class":40},[34,133404,130275],{"class":44},[34,133406,53076],{"class":40},[34,133408,56470],{"class":44},[34,133410,130845],{"class":40},[34,133412,133413],{"class":36,"line":524},[34,133414,133415],{"class":161},"\u002F* 固定定位 *\u002F\n",[34,133417,133418,133421,133423,133425,133427,133429],{"class":36,"line":530},[34,133419,133420],{"class":3617},".fixed",[34,133422,81444],{"class":40},[34,133424,130275],{"class":44},[34,133426,53076],{"class":40},[34,133428,87869],{"class":44},[34,133430,130845],{"class":40},[34,133432,133433],{"class":36,"line":624},[34,133434,133435],{"class":161},"\u002F* 粘性定位 *\u002F\n",[34,133437,133438,133441,133443,133445,133447,133450],{"class":36,"line":630},[34,133439,133440],{"class":3617},".sticky",[34,133442,81444],{"class":40},[34,133444,130275],{"class":44},[34,133446,53076],{"class":40},[34,133448,133449],{"class":44},"sticky",[34,133451,130845],{"class":40},[1772,133453,133454,133457],{"start":1513},[1775,133455,133456],{},"一定要用好注释",[1775,133458,133459],{},"浮动的盒子不会有外边距合并的问题",[1711,133461,132803],{},{"title":29,"searchDepth":165,"depth":165,"links":133463},[133464,133465],{"id":132840,"depth":165,"text":132841},{"id":132904,"depth":165,"text":132905,"children":133466},[133467,133468,133469,133470,133471,133472,133473],{"id":132908,"depth":171,"text":132909},{"id":133014,"depth":171,"text":133015},{"id":133050,"depth":171,"text":133051},{"id":133071,"depth":171,"text":133072},{"id":133106,"depth":171,"text":133107},{"id":133139,"depth":171,"text":133140},{"id":133214,"depth":171,"text":133215},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132832,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133480,"title":133481,"body":133482,"description":1744,"extension":1745,"meta":134968,"navigation":1474,"path":134969,"seo":134970,"stem":134971,"__hash__":134972},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133483,"toc":134960},[133484,133487,133491,133495,133506,133510,133527,133571,133604,133607,133624,133627,133630,133674,133678,133682,133685,133688,133692,133695,133706,133769,133810,133813,133828,133882,133890,133893,133904,133958,133984,133987,134000,134054,134086,134140,134163,134217,134220,134223,134230,134284,134305,134359,134362,134365,134450,134458,134515,134538,134542,134545,134563,134567,134586,134640,134678,134682,134685,134688,134710,134714,134722,134725,134730,134741,134744,134748,134762,134806,134809,134813,134816,134821,134847,134852,134929,134932,134936,134939,134942,134945,134948,134951,134954,134957],[10,133485,133481],{"id":133486},"_11-传统布局与定位体系",[14,133488,133490],{"id":133489},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[19,133492,133494],{"id":133493},"_1111-普通流标准流","11.1.1 普通流（标准流）",[2798,133496,133497,133500,133503],{},[1775,133498,133499],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[1775,133501,133502],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[1775,133504,133505],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[19,133507,133509],{"id":133508},"_1112-浮动","11.1.2 浮动",[2798,133511,133512,133515,133518,133521,133524],{},[1775,133513,133514],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[1775,133516,133517],{},"浮动可以改变元素标签默认的排列方式",[1775,133519,133520],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[1775,133522,133523],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[1775,133525,133526],{},"在使用行内块转换时盒子之间是有空隙的",[24,133528,133529],{"className":127915,"code":132381,"language":127917,"meta":29,"style":29},[31,133530,133531,133537,133547,133551,133557,133567],{"__ignoreMap":29},[34,133532,133533,133535],{"class":36,"line":37},[34,133534,132388],{"class":3617},[34,133536,17218],{"class":40},[34,133538,133539,133541,133543,133545],{"class":36,"line":165},[34,133540,132395],{"class":44},[34,133542,53076],{"class":40},[34,133544,25381],{"class":44},[34,133546,2952],{"class":40},[34,133548,133549],{"class":36,"line":171},[34,133550,3223],{"class":40},[34,133552,133553,133555],{"class":36,"line":182},[34,133554,132410],{"class":3617},[34,133556,17218],{"class":40},[34,133558,133559,133561,133563,133565],{"class":36,"line":188},[34,133560,132395],{"class":44},[34,133562,53076],{"class":40},[34,133564,74161],{"class":44},[34,133566,2952],{"class":40},[34,133568,133569],{"class":36,"line":518},[34,133570,3223],{"class":40},[1948,133572,133573,133581],{},[1951,133574,133575],{},[1954,133576,133577,133579],{},[1957,133578,128379],{"align":25381},[1957,133580,29135],{"align":25381},[1994,133582,133583,133590,133597],{},[1954,133584,133585,133587],{},[1999,133586,56376],{"align":25381},[1999,133588,133589],{"align":25381},"元素不浮动（默认值）",[1954,133591,133592,133594],{},[1999,133593,25381],{"align":25381},[1999,133595,133596],{"align":25381},"元素向左浮动",[1954,133598,133599,133601],{},[1999,133600,74161],{"align":25381},[1999,133602,133603],{"align":25381},"元素向右浮动",[103,133605,133606],{},"浮动重点：",[2798,133608,133609,133612,133615,133618,133621],{},[1775,133610,133611],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[1775,133613,133614],{},"浮动的元素会一行内显示并且元素顶部对齐",[1775,133616,133617],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[1775,133619,133620],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[1775,133622,133623],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[103,133625,133626],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[103,133628,133629],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[24,133631,133632],{"className":127915,"code":132381,"language":127917,"meta":29,"style":29},[31,133633,133634,133640,133650,133654,133660,133670],{"__ignoreMap":29},[34,133635,133636,133638],{"class":36,"line":37},[34,133637,132388],{"class":3617},[34,133639,17218],{"class":40},[34,133641,133642,133644,133646,133648],{"class":36,"line":165},[34,133643,132395],{"class":44},[34,133645,53076],{"class":40},[34,133647,25381],{"class":44},[34,133649,2952],{"class":40},[34,133651,133652],{"class":36,"line":171},[34,133653,3223],{"class":40},[34,133655,133656,133658],{"class":36,"line":182},[34,133657,132410],{"class":3617},[34,133659,17218],{"class":40},[34,133661,133662,133664,133666,133668],{"class":36,"line":188},[34,133663,132395],{"class":44},[34,133665,53076],{"class":40},[34,133667,74161],{"class":44},[34,133669,2952],{"class":40},[34,133671,133672],{"class":36,"line":518},[34,133673,3223],{"class":40},[19,133675,133677],{"id":133676},"_1113-定位","11.1.3 定位",[1353,133679,133681],{"id":133680},"_11131-使用场景","11.1.3.1 使用场景",[103,133683,133684],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[103,133686,133687],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[1353,133689,133691],{"id":133690},"_11132-定位组成","11.1.3.2 定位组成",[103,133693,133694],{},"定位 = 定位模式 + 边偏移",[1772,133696,133697],{},[1775,133698,133699,133702,133703],{},[1165,133700,133701],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[1165,133704,133705],{},"定位模式",[24,133707,133709],{"className":127915,"code":133708,"language":127917,"meta":29,"style":29},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[31,133710,133711,133717,133731,133748,133765],{"__ignoreMap":29},[34,133712,133713,133715],{"class":36,"line":37},[34,133714,131763],{"class":3617},[34,133716,17218],{"class":40},[34,133718,133719,133722,133724,133726,133728],{"class":36,"line":165},[34,133720,133721],{"class":44},"  position",[34,133723,53076],{"class":40},[34,133725,56403],{"class":44},[34,133727,131778],{"class":40},[34,133729,133730],{"class":161},"\u002F* 定位模式 *\u002F\n",[34,133732,133733,133736,133738,133740,133742,133745],{"class":36,"line":171},[34,133734,133735],{"class":44},"  top",[34,133737,53076],{"class":40},[34,133739,410],{"class":44},[34,133741,53131],{"class":55},[34,133743,133744],{"class":40},";           ",[34,133746,133747],{"class":161},"\u002F* 边偏移：上 *\u002F\n",[34,133749,133750,133753,133755,133757,133759,133762],{"class":36,"line":182},[34,133751,133752],{"class":44},"  left",[34,133754,53076],{"class":40},[34,133756,1249],{"class":44},[34,133758,53131],{"class":55},[34,133760,133761],{"class":40},";          ",[34,133763,133764],{"class":161},"\u002F* 边偏移：左 *\u002F\n",[34,133766,133767],{"class":36,"line":188},[34,133768,3223],{"class":40},[1948,133770,133771,133780],{},[1951,133772,133773],{},[1954,133774,133775,133777],{},[1957,133776,1962],{"align":25381},[1957,133778,133779],{"align":25381},"语义",[1994,133781,133782,133789,133796,133803],{},[1954,133783,133784,133786],{},[1999,133785,133368],{"align":25381},[1999,133787,133788],{"align":25381},"静态定位",[1954,133790,133791,133793],{},[1999,133792,56403],{"align":25381},[1999,133794,133795],{"align":25381},"相对定位",[1954,133797,133798,133800],{},[1999,133799,56470],{"align":25381},[1999,133801,133802],{"align":25381},"绝对定位",[1954,133804,133805,133807],{},[1999,133806,87869],{"align":25381},[1999,133808,133809],{"align":25381},"固定定位",[103,133811,133812],{},"（1）静态定位：",[2798,133814,133815,133826],{},[1775,133816,133817,133818,133821,133822,133825],{},"静态定位是元素的 ",[1165,133819,133820],{},"默认定位方式"," ， ",[1165,133823,133824],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[1775,133827,6832],{},[24,133829,133830],{"className":127915,"code":133708,"language":127917,"meta":29,"style":29},[31,133831,133832,133838,133850,133864,133878],{"__ignoreMap":29},[34,133833,133834,133836],{"class":36,"line":37},[34,133835,131763],{"class":3617},[34,133837,17218],{"class":40},[34,133839,133840,133842,133844,133846,133848],{"class":36,"line":165},[34,133841,133721],{"class":44},[34,133843,53076],{"class":40},[34,133845,56403],{"class":44},[34,133847,131778],{"class":40},[34,133849,133730],{"class":161},[34,133851,133852,133854,133856,133858,133860,133862],{"class":36,"line":171},[34,133853,133735],{"class":44},[34,133855,53076],{"class":40},[34,133857,410],{"class":44},[34,133859,53131],{"class":55},[34,133861,133744],{"class":40},[34,133863,133747],{"class":161},[34,133865,133866,133868,133870,133872,133874,133876],{"class":36,"line":182},[34,133867,133752],{"class":44},[34,133869,53076],{"class":40},[34,133871,1249],{"class":44},[34,133873,53131],{"class":55},[34,133875,133761],{"class":40},[34,133877,133764],{"class":161},[34,133879,133880],{"class":36,"line":188},[34,133881,3223],{"class":40},[2798,133883,133884,133887],{},[1775,133885,133886],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[1775,133888,133889],{},"静态定位在布局时我们几乎不用的",[103,133891,133892],{},"（2）相对定位",[2798,133894,133895,133902],{},[1775,133896,133897,133898,133901],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[1165,133899,133900],{},"原来的位置"," 来说的（自恋型）",[1775,133903,6832],{},[24,133905,133906],{"className":127915,"code":133708,"language":127917,"meta":29,"style":29},[31,133907,133908,133914,133926,133940,133954],{"__ignoreMap":29},[34,133909,133910,133912],{"class":36,"line":37},[34,133911,131763],{"class":3617},[34,133913,17218],{"class":40},[34,133915,133916,133918,133920,133922,133924],{"class":36,"line":165},[34,133917,133721],{"class":44},[34,133919,53076],{"class":40},[34,133921,56403],{"class":44},[34,133923,131778],{"class":40},[34,133925,133730],{"class":161},[34,133927,133928,133930,133932,133934,133936,133938],{"class":36,"line":171},[34,133929,133735],{"class":44},[34,133931,53076],{"class":40},[34,133933,410],{"class":44},[34,133935,53131],{"class":55},[34,133937,133744],{"class":40},[34,133939,133747],{"class":161},[34,133941,133942,133944,133946,133948,133950,133952],{"class":36,"line":182},[34,133943,133752],{"class":44},[34,133945,53076],{"class":40},[34,133947,1249],{"class":44},[34,133949,53131],{"class":55},[34,133951,133761],{"class":40},[34,133953,133764],{"class":161},[34,133955,133956],{"class":36,"line":188},[34,133957,3223],{"class":40},[2798,133959,133960],{},[1775,133961,133962,133963,133965,133966,133968,133969,133972,133973,133976,133977,133979,133980,133983],{},"相对定位的特点：",[55355,133964],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55355,133967],{},"  ② ",[1165,133970,133971],{},"原来"," 在标准流的 ",[1165,133974,133975],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55355,133978],{},"  ③因此， ",[1165,133981,133982],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[103,133985,133986],{},"（3）绝对定位",[2798,133988,133989,133998],{},[1775,133990,133991,133993,133994,133997],{},[1165,133992,133802],{}," 是元素在移动位置的时候，是相对于它 ",[1165,133995,133996],{},"祖先元素"," 来说的（拼爹型）",[1775,133999,6832],{},[24,134001,134002],{"className":127915,"code":133708,"language":127917,"meta":29,"style":29},[31,134003,134004,134010,134022,134036,134050],{"__ignoreMap":29},[34,134005,134006,134008],{"class":36,"line":37},[34,134007,131763],{"class":3617},[34,134009,17218],{"class":40},[34,134011,134012,134014,134016,134018,134020],{"class":36,"line":165},[34,134013,133721],{"class":44},[34,134015,53076],{"class":40},[34,134017,56403],{"class":44},[34,134019,131778],{"class":40},[34,134021,133730],{"class":161},[34,134023,134024,134026,134028,134030,134032,134034],{"class":36,"line":171},[34,134025,133735],{"class":44},[34,134027,53076],{"class":40},[34,134029,410],{"class":44},[34,134031,53131],{"class":55},[34,134033,133744],{"class":40},[34,134035,133747],{"class":161},[34,134037,134038,134040,134042,134044,134046,134048],{"class":36,"line":182},[34,134039,133752],{"class":44},[34,134041,53076],{"class":40},[34,134043,1249],{"class":44},[34,134045,53131],{"class":55},[34,134047,133761],{"class":40},[34,134049,133764],{"class":161},[34,134051,134052],{"class":36,"line":188},[34,134053,3223],{"class":40},[2798,134055,134056,134071,134080,134083],{},[1775,134057,134058,134059,134061,134062,134064,134065,134067,134068,134070],{},"绝对定位的特点：",[55355,134060],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55355,134063],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55355,134066],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55355,134069],{},"  (4)固定定位",[1775,134072,134073,134075,134076,134079],{},[1165,134074,133809],{}," 是元素 ",[1165,134077,134078],{},"固定于浏览器可视区的位置"," 。（认死理型）",[1775,134081,134082],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[1775,134084,134085],{},"语法:",[24,134087,134088],{"className":127915,"code":133708,"language":127917,"meta":29,"style":29},[31,134089,134090,134096,134108,134122,134136],{"__ignoreMap":29},[34,134091,134092,134094],{"class":36,"line":37},[34,134093,131763],{"class":3617},[34,134095,17218],{"class":40},[34,134097,134098,134100,134102,134104,134106],{"class":36,"line":165},[34,134099,133721],{"class":44},[34,134101,53076],{"class":40},[34,134103,56403],{"class":44},[34,134105,131778],{"class":40},[34,134107,133730],{"class":161},[34,134109,134110,134112,134114,134116,134118,134120],{"class":36,"line":171},[34,134111,133735],{"class":44},[34,134113,53076],{"class":40},[34,134115,410],{"class":44},[34,134117,53131],{"class":55},[34,134119,133744],{"class":40},[34,134121,133747],{"class":161},[34,134123,134124,134126,134128,134130,134132,134134],{"class":36,"line":182},[34,134125,133752],{"class":44},[34,134127,53076],{"class":40},[34,134129,1249],{"class":44},[34,134131,53131],{"class":55},[34,134133,133761],{"class":40},[34,134135,133764],{"class":161},[34,134137,134138],{"class":36,"line":188},[34,134139,3223],{"class":40},[2798,134141,134142,134151],{},[1775,134143,134144,134145,134147,134148,134150],{},"特点:",[55355,134146],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55355,134149],{},"  ②固定定位不再占有原先的位置,完全脱标",[1775,134152,134153,134154,134156,134157,134159,134160,134162],{},"固定在版心位置的方法:",[55355,134155],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55355,134158],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55355,134161],{},"  实例：",[24,134164,134165],{"className":127915,"code":133708,"language":127917,"meta":29,"style":29},[31,134166,134167,134173,134185,134199,134213],{"__ignoreMap":29},[34,134168,134169,134171],{"class":36,"line":37},[34,134170,131763],{"class":3617},[34,134172,17218],{"class":40},[34,134174,134175,134177,134179,134181,134183],{"class":36,"line":165},[34,134176,133721],{"class":44},[34,134178,53076],{"class":40},[34,134180,56403],{"class":44},[34,134182,131778],{"class":40},[34,134184,133730],{"class":161},[34,134186,134187,134189,134191,134193,134195,134197],{"class":36,"line":171},[34,134188,133735],{"class":44},[34,134190,53076],{"class":40},[34,134192,410],{"class":44},[34,134194,53131],{"class":55},[34,134196,133744],{"class":40},[34,134198,133747],{"class":161},[34,134200,134201,134203,134205,134207,134209,134211],{"class":36,"line":182},[34,134202,133752],{"class":44},[34,134204,53076],{"class":40},[34,134206,1249],{"class":44},[34,134208,53131],{"class":55},[34,134210,133761],{"class":40},[34,134212,133764],{"class":161},[34,134214,134215],{"class":36,"line":188},[34,134216,3223],{"class":40},[109,134218],{"style":127771,"src":134219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[103,134221,134222],{},"(5)粘性定位",[2798,134224,134225,134228],{},[1775,134226,134227],{},"粘性定位可以被认为是相对定位和固定定位的混合",[1775,134229,6832],{},[24,134231,134232],{"className":127915,"code":133708,"language":127917,"meta":29,"style":29},[31,134233,134234,134240,134252,134266,134280],{"__ignoreMap":29},[34,134235,134236,134238],{"class":36,"line":37},[34,134237,131763],{"class":3617},[34,134239,17218],{"class":40},[34,134241,134242,134244,134246,134248,134250],{"class":36,"line":165},[34,134243,133721],{"class":44},[34,134245,53076],{"class":40},[34,134247,56403],{"class":44},[34,134249,131778],{"class":40},[34,134251,133730],{"class":161},[34,134253,134254,134256,134258,134260,134262,134264],{"class":36,"line":171},[34,134255,133735],{"class":44},[34,134257,53076],{"class":40},[34,134259,410],{"class":44},[34,134261,53131],{"class":55},[34,134263,133744],{"class":40},[34,134265,133747],{"class":161},[34,134267,134268,134270,134272,134274,134276,134278],{"class":36,"line":182},[34,134269,133752],{"class":44},[34,134271,53076],{"class":40},[34,134273,1249],{"class":44},[34,134275,53131],{"class":55},[34,134277,133761],{"class":40},[34,134279,133764],{"class":161},[34,134281,134282],{"class":36,"line":188},[34,134283,3223],{"class":40},[2798,134285,134286],{},[1775,134287,134288,134289,134291,134292,134294,134295,134297,134298,134301,134302,134304],{},"粘性定位的特点：",[55355,134290],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55355,134293],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55355,134296],{},"  ③必须添加 top 、left、right、bottom ",[1165,134299,134300],{},"其中一个"," 才有效",[55355,134303],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[24,134306,134307],{"className":127915,"code":133708,"language":127917,"meta":29,"style":29},[31,134308,134309,134315,134327,134341,134355],{"__ignoreMap":29},[34,134310,134311,134313],{"class":36,"line":37},[34,134312,131763],{"class":3617},[34,134314,17218],{"class":40},[34,134316,134317,134319,134321,134323,134325],{"class":36,"line":165},[34,134318,133721],{"class":44},[34,134320,53076],{"class":40},[34,134322,56403],{"class":44},[34,134324,131778],{"class":40},[34,134326,133730],{"class":161},[34,134328,134329,134331,134333,134335,134337,134339],{"class":36,"line":171},[34,134330,133735],{"class":44},[34,134332,53076],{"class":40},[34,134334,410],{"class":44},[34,134336,53131],{"class":55},[34,134338,133744],{"class":40},[34,134340,133747],{"class":161},[34,134342,134343,134345,134347,134349,134351,134353],{"class":36,"line":182},[34,134344,133752],{"class":44},[34,134346,53076],{"class":40},[34,134348,1249],{"class":44},[34,134350,53131],{"class":55},[34,134352,133761],{"class":40},[34,134354,133764],{"class":161},[34,134356,134357],{"class":36,"line":188},[34,134358,3223],{"class":40},[109,134360],{"style":127771,"src":134361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[103,134363,134364],{},"(6)总结",[1948,134366,134367,134382],{},[1951,134368,134369],{},[1954,134370,134371,134373,134376,134379],{},[1957,134372,133705],{"align":25381},[1957,134374,134375],{"align":25381},"是否脱标",[1957,134377,134378],{"align":25381},"移动位置",[1957,134380,134381],{"align":25381},"是否常用",[1994,134383,134384,134397,134411,134425,134438],{},[1954,134385,134386,134389,134391,134394],{},[1999,134387,134388],{"align":25381},"Static 静态定位",[1999,134390,106041],{"align":25381},[1999,134392,134393],{"align":25381},"不能使用边偏移",[1999,134395,134396],{"align":25381},"很少",[1954,134398,134399,134402,134405,134408],{},[1999,134400,134401],{"align":25381},"Relative 相对定位",[1999,134403,134404],{"align":25381},"否(占有位置)",[1999,134406,134407],{"align":25381},"相对于自身位置移动",[1999,134409,134410],{"align":25381},"基本单独使用",[1954,134412,134413,134416,134419,134422],{},[1999,134414,134415],{"align":25381},"Absolute 绝对定位",[1999,134417,134418],{"align":25381},"是(不占有位置)",[1999,134420,134421],{"align":25381},"带有定位的父级",[1999,134423,134424],{"align":25381},"要和定位父级元素搭配使用",[1954,134426,134427,134430,134432,134435],{},[1999,134428,134429],{"align":25381},"Fixed 固定定位",[1999,134431,134418],{"align":25381},[1999,134433,134434],{"align":25381},"浏览器可视区",[1999,134436,134437],{"align":25381},"单独使用,不需要父级",[1954,134439,134440,134443,134445,134447],{},[1999,134441,134442],{"align":25381},"Sticky 粘性定位",[1999,134444,134404],{"align":25381},[1999,134446,134434],{"align":25381},[1999,134448,134449],{"align":25381},"当前阶段少",[1772,134451,134452],{"start":165},[1775,134453,134454,134457],{},[1165,134455,134456],{},"边偏移"," 则决定了该元素的最终位置",[1948,134459,134460,134471],{},[1951,134461,134462],{},[1954,134463,134464,134467,134469],{},[1957,134465,134466],{"align":25381},"边偏移属性",[1957,134468,29138],{"align":25381},[1957,134470,29135],{"align":25381},[1994,134472,134473,134484,134495,134505],{},[1954,134474,134475,134478,134481],{},[1999,134476,134477],{"align":25381},"top",[1999,134479,134480],{"align":25381},"top: 80px;",[1999,134482,134483],{"align":25381},"顶端偏移量，定义元素相对于父元素上边线的距离",[1954,134485,134486,134489,134492],{},[1999,134487,134488],{"align":25381},"bottom",[1999,134490,134491],{"align":25381},"bottom: 80px ;",[1999,134493,134494],{"align":25381},"底部偏移量，定义元素相对于其父元素下边线的距离",[1954,134496,134497,134499,134502],{},[1999,134498,25381],{"align":25381},[1999,134500,134501],{"align":25381},"left: 80px ;",[1999,134503,134504],{"align":25381},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1954,134506,134507,134509,134512],{},[1999,134508,74161],{"align":25381},[1999,134510,134511],{"align":25381},"right: 80px ;",[1999,134513,134514],{"align":25381},"右侧偏移量，定义元素相对于其父元素右边线的距离",[2798,134516,134517],{},[1775,134518,10675,134519,134521,134522,134524,134525,134527,134528,134531,134532,134534,134535,134537],{},[55355,134520],{},"  ① ",[1165,134523,134456],{}," 需要和 ",[1165,134526,133705],{}," 联合使用， ",[1165,134529,134530],{},"单独使用无效"," ；",[55355,134533],{},"  ②top和bottom不要同时使用",[55355,134536],{},"  ③left和right不要同时使用",[1353,134539,134541],{"id":134540},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[103,134543,134544],{},"子级是绝对定位的话，父级要用相对定位",[2798,134546,134547,134550,134553,134556],{},[1775,134548,134549],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[1775,134551,134552],{},"父盒子需要加定位限制子盒子在父盒子内显示",[1775,134554,134555],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[1775,134557,134558,134559,134562],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[1165,134560,134561],{},"子绝父绝"," 也会遇到",[1353,134564,134566],{"id":134565},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[2798,134568,134569,134584],{},[1775,134570,134571,134572,134575,134576,134579,134580,134583],{},"在使用 ",[1165,134573,134574],{},"定位"," 布局时，可能会 ",[1165,134577,134578],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[1165,134581,134582],{},"z-index"," 来控制盒子的前后次序 (z轴)",[1775,134585,6832],{},[24,134587,134588],{"className":127915,"code":133708,"language":127917,"meta":29,"style":29},[31,134589,134590,134596,134608,134622,134636],{"__ignoreMap":29},[34,134591,134592,134594],{"class":36,"line":37},[34,134593,131763],{"class":3617},[34,134595,17218],{"class":40},[34,134597,134598,134600,134602,134604,134606],{"class":36,"line":165},[34,134599,133721],{"class":44},[34,134601,53076],{"class":40},[34,134603,56403],{"class":44},[34,134605,131778],{"class":40},[34,134607,133730],{"class":161},[34,134609,134610,134612,134614,134616,134618,134620],{"class":36,"line":171},[34,134611,133735],{"class":44},[34,134613,53076],{"class":40},[34,134615,410],{"class":44},[34,134617,53131],{"class":55},[34,134619,133744],{"class":40},[34,134621,133747],{"class":161},[34,134623,134624,134626,134628,134630,134632,134634],{"class":36,"line":182},[34,134625,133752],{"class":44},[34,134627,53076],{"class":40},[34,134629,1249],{"class":44},[34,134631,53131],{"class":55},[34,134633,133761],{"class":40},[34,134635,133764],{"class":161},[34,134637,134638],{"class":36,"line":188},[34,134639,3223],{"class":40},[2798,134641,134642],{},[1775,134643,134644,134645,134521,134647,134649,134650,129078,134653,84176,134656,134658,134659,134661,134662,134665,134666,134531,134669,134671,134672,134675,134677],{},"z-index的特性",[55355,134646],{},[1165,134648,128379],{}," ： ",[1165,134651,134652],{},"正整数",[1165,134654,134655],{},"负整数",[1165,134657,177],{}," ，默认值是 0，数值越大，盒子越靠上；",[55355,134660],{},"  ②如果 ",[1165,134663,134664],{},"属性值相同"," ，则按照书写顺序， ",[1165,134667,134668],{},"后来居上",[55355,134670],{},"  ③数字后面 ",[1165,134673,134674],{},"不能加单位",[55355,134676],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[1353,134679,134681],{"id":134680},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[103,134683,134684],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[103,134686,134687],{},"方法:",[2798,134689,134690,134700],{},[1775,134691,134692,134693,134696,134697],{},"left: 50%; 让 ",[1165,134694,134695],{},"盒子的左侧"," 移动到 ",[1165,134698,134699],{},"父级元素的水平中心位置",[1775,134701,134702,134703,134706,134707],{},"margin-left: -100px; 让盒子 ",[1165,134704,134705],{},"向左"," 移动 ",[1165,134708,134709],{},"自身宽度的一半",[1353,134711,134713],{"id":134712},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[1772,134715,134716,134719],{},[1775,134717,134718],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[1775,134720,134721],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[103,134723,134724],{},"也就是说绝对定位和固定定位和浮动类似",[1772,134726,134727],{"start":171},[1775,134728,134729],{},"display 是显示模式， 可以改变显示模式有以下方式:",[2798,134731,134732,134735,134738],{},[1775,134733,134734],{},"可以用inline-block 转换为行内块",[1775,134736,134737],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[1775,134739,134740],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[103,134742,134743],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[1353,134745,134747],{"id":134746},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[1772,134749,134750,134753,134756,134759],{},[1775,134751,134752],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[1775,134754,134755],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[1775,134757,134758],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[1775,134760,134761],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[24,134763,134764],{"className":127915,"code":132381,"language":127917,"meta":29,"style":29},[31,134765,134766,134772,134782,134786,134792,134802],{"__ignoreMap":29},[34,134767,134768,134770],{"class":36,"line":37},[34,134769,132388],{"class":3617},[34,134771,17218],{"class":40},[34,134773,134774,134776,134778,134780],{"class":36,"line":165},[34,134775,132395],{"class":44},[34,134777,53076],{"class":40},[34,134779,25381],{"class":44},[34,134781,2952],{"class":40},[34,134783,134784],{"class":36,"line":171},[34,134785,3223],{"class":40},[34,134787,134788,134790],{"class":36,"line":182},[34,134789,132410],{"class":3617},[34,134791,17218],{"class":40},[34,134793,134794,134796,134798,134800],{"class":36,"line":188},[34,134795,132395],{"class":44},[34,134797,53076],{"class":40},[34,134799,74161],{"class":44},[34,134801,2952],{"class":40},[34,134803,134804],{"class":36,"line":518},[34,134805,3223],{"class":40},[109,134807],{"style":127771,"src":134808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[1353,134810,134812],{"id":134811},"_11138-轮播图","11.1.3.8 轮播图",[109,134814],{"style":127771,"src":134815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[1772,134817,134818],{},[1775,134819,134820],{},"制作顺序:",[2798,134822,134823,134826,134829,134838],{},[1775,134824,134825],{},"大盒子我们类名为： tb-promo 淘宝广告",[1775,134827,134828],{},"里面先放一张图片",[1775,134830,134831,134832,134834,134835,134837],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55355,134833],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55355,134836],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[1775,134839,134840,134841,134843,134844,134846],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55355,134842],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55355,134845],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[1772,134848,134849],{"start":165},[1775,134850,134851],{},"代码模块",[24,134853,134855],{"className":127915,"code":134854,"language":127917,"meta":29,"style":29},"\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",[31,134856,134857,134862,134869,134879,134889,134899,134903,134908,134915,134925],{"__ignoreMap":29},[34,134858,134859],{"class":36,"line":37},[34,134860,134861],{"class":161},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[34,134863,134864,134867],{"class":36,"line":165},[34,134865,134866],{"class":3617},".son",[34,134868,17218],{"class":40},[34,134870,134871,134873,134875,134877],{"class":36,"line":171},[34,134872,133721],{"class":44},[34,134874,53076],{"class":40},[34,134876,56470],{"class":44},[34,134878,2952],{"class":40},[34,134880,134881,134883,134885,134887],{"class":36,"line":182},[34,134882,133735],{"class":44},[34,134884,53076],{"class":40},[34,134886,177],{"class":44},[34,134888,2952],{"class":40},[34,134890,134891,134893,134895,134897],{"class":36,"line":188},[34,134892,133752],{"class":44},[34,134894,53076],{"class":40},[34,134896,177],{"class":44},[34,134898,2952],{"class":40},[34,134900,134901],{"class":36,"line":518},[34,134902,3223],{"class":40},[34,134904,134905],{"class":36,"line":524},[34,134906,134907],{"class":161},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[34,134909,134910,134913],{"class":36,"line":530},[34,134911,134912],{"class":3617},".father",[34,134914,17218],{"class":40},[34,134916,134917,134919,134921,134923],{"class":36,"line":624},[34,134918,133721],{"class":44},[34,134920,53076],{"class":40},[34,134922,56403],{"class":44},[34,134924,2952],{"class":40},[34,134926,134927],{"class":36,"line":630},[34,134928,3223],{"class":40},[103,134930,134931],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[19,134933,134935],{"id":134934},"_1114-定位数值的移动","11.1.4 定位数值的移动",[109,134937],{"style":127771,"src":134938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[103,134940,134941],{},"✨ 黄金口诀：",[103,134943,134944],{},"\"TOP正下负上，LEFT正右负左\"",[103,134946,134947],{},"\"RIGHT正左负右，BOTTOM正上负下",[103,134949,134950],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[103,134952,134953],{},"✨ 简单记：",[103,134955,134956],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1711,134958,134959],{},"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":29,"searchDepth":165,"depth":165,"links":134961},[134962],{"id":133489,"depth":165,"text":133490,"children":134963},[134964,134965,134966,134967],{"id":133493,"depth":171,"text":133494},{"id":133508,"depth":171,"text":133509},{"id":133676,"depth":171,"text":133677},{"id":134934,"depth":171,"text":134935},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133481,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134974,"title":134975,"body":134976,"description":1744,"extension":1745,"meta":136399,"navigation":1474,"path":136400,"seo":136401,"stem":136402,"__hash__":136403},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134977,"toc":136378},[134978,134981,134985,134993,134997,135002,135010,135022,135026,135031,135039,135050,135054,135059,135100,135108,135112,135115,135118,135121,135215,135218,135312,135315,135409,135412,135415,135450,135453,135456,135486,135489,135492,135495,135498,135501,135504,135507,135577,135580,135584,135588,135629,135633,135639,135642,135645,135649,135652,135655,135658,135739,135742,135745,135749,135753,135756,135759,135762,135765,135768,135774,135783,135787,135806,135810,135820,135823,135826,135829,135832,135835,135838,135841,135844,135853,135857,135866,135869,135874,135927,135932,136098,136101,136104,136109,136112,136115,136118,136121,136126,136274,136277,136280,136285,136288,136293,136327,136330,136333,136337,136340,136347,136350,136353,136356,136359,136362,136365,136368,136372,136375],[10,134979,134975],{"id":134980},"_12-显示隐藏与图形资源",[14,134982,134984],{"id":134983},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[2798,134986,134987,134990],{},[1775,134988,134989],{},"目的:让一个元素在页面中消失或者显示出来",[1775,134991,134992],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[19,134994,134996],{"id":134995},"_1211-display-显示","12.1.1 display 显示",[1772,134998,134999],{},[1775,135000,135001],{},"display 设置或检索对象是否及如何显示",[2798,135003,135004,135007],{},[1775,135005,135006],{},"display: none;隐藏对象",[1775,135008,135009],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[1772,135011,135012,135019],{"start":165},[1775,135013,135014,135015,135018],{},"特点： display 隐藏元素后， ",[1165,135016,135017],{},"不再占"," 有原来的位置",[1775,135020,135021],{},"在js中使用非常的广泛",[19,135023,135025],{"id":135024},"_1212-visibility可见性","12.1.2 visibility可见性",[1772,135027,135028],{},[1775,135029,135030],{},"visibility 属性用于指定一个元素应可见还是隐藏",[2798,135032,135033,135036],{},[1775,135034,135035],{},"visibility： visible；元素可见",[1775,135037,135038],{},"visibility：hidden；元素隐藏",[1772,135040,135041,135044,135047],{"start":165},[1775,135042,135043],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[1775,135045,135046],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[1775,135048,135049],{},"隐藏后继续占有原有位置",[19,135051,135053],{"id":135052},"_1213-overflow溢出","12.1.3 overflow溢出",[2798,135055,135056],{},[1775,135057,135058],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1948,135060,135061,135069],{},[1951,135062,135063],{},[1954,135064,135065,135067],{},[1957,135066,128379],{"align":25381},[1957,135068,29135],{"align":25381},[1994,135070,135071,135079,135086,135093],{},[1954,135072,135073,135076],{},[1999,135074,135075],{"align":25381},"visible",[1999,135077,135078],{"align":25381},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1954,135080,135081,135083],{},[1999,135082,63353],{"align":25381},[1999,135084,135085],{"align":25381},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1954,135087,135088,135090],{},[1999,135089,130335],{"align":25381},[1999,135091,135092],{"align":25381},"不管超出内容否，总是显示滚动条",[1954,135094,135095,135097],{},[1999,135096,74302],{"align":25381},[1999,135098,135099],{"align":25381},"超出自动显示滚动条，不超出不显示滚动条",[2798,135101,135102,135105],{},[1775,135103,135104],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[1775,135106,135107],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[19,135109,135111],{"id":135110},"_1214-案例收获","12.1.4 案例收获",[109,135113],{"style":127771,"src":135114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[103,135116,135117],{},"问题：没做出来动态效果，使用hover没实现",[103,135119,135120],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[24,135122,135123],{"className":127915,"code":133347,"language":127917,"meta":29,"style":29},[31,135124,135125,135129,135143,135147,135161,135165,135179,135183,135197,135201],{"__ignoreMap":29},[34,135126,135127],{"class":36,"line":37},[34,135128,133354],{"class":161},[34,135130,135131,135133,135135,135137,135139,135141],{"class":36,"line":165},[34,135132,133359],{"class":3617},[34,135134,81444],{"class":40},[34,135136,130275],{"class":44},[34,135138,53076],{"class":40},[34,135140,133368],{"class":44},[34,135142,130845],{"class":40},[34,135144,135145],{"class":36,"line":171},[34,135146,133375],{"class":161},[34,135148,135149,135151,135153,135155,135157,135159],{"class":36,"line":182},[34,135150,133380],{"class":3617},[34,135152,81444],{"class":40},[34,135154,130275],{"class":44},[34,135156,53076],{"class":40},[34,135158,56403],{"class":44},[34,135160,130845],{"class":40},[34,135162,135163],{"class":36,"line":188},[34,135164,133395],{"class":161},[34,135166,135167,135169,135171,135173,135175,135177],{"class":36,"line":518},[34,135168,133400],{"class":3617},[34,135170,81444],{"class":40},[34,135172,130275],{"class":44},[34,135174,53076],{"class":40},[34,135176,56470],{"class":44},[34,135178,130845],{"class":40},[34,135180,135181],{"class":36,"line":524},[34,135182,133415],{"class":161},[34,135184,135185,135187,135189,135191,135193,135195],{"class":36,"line":530},[34,135186,133420],{"class":3617},[34,135188,81444],{"class":40},[34,135190,130275],{"class":44},[34,135192,53076],{"class":40},[34,135194,87869],{"class":44},[34,135196,130845],{"class":40},[34,135198,135199],{"class":36,"line":624},[34,135200,133435],{"class":161},[34,135202,135203,135205,135207,135209,135211,135213],{"class":36,"line":630},[34,135204,133440],{"class":3617},[34,135206,81444],{"class":40},[34,135208,130275],{"class":44},[34,135210,53076],{"class":40},[34,135212,133449],{"class":44},[34,135214,130845],{"class":40},[103,135216,135217],{},"完整代码：",[24,135219,135220],{"className":127915,"code":133347,"language":127917,"meta":29,"style":29},[31,135221,135222,135226,135240,135244,135258,135262,135276,135280,135294,135298],{"__ignoreMap":29},[34,135223,135224],{"class":36,"line":37},[34,135225,133354],{"class":161},[34,135227,135228,135230,135232,135234,135236,135238],{"class":36,"line":165},[34,135229,133359],{"class":3617},[34,135231,81444],{"class":40},[34,135233,130275],{"class":44},[34,135235,53076],{"class":40},[34,135237,133368],{"class":44},[34,135239,130845],{"class":40},[34,135241,135242],{"class":36,"line":171},[34,135243,133375],{"class":161},[34,135245,135246,135248,135250,135252,135254,135256],{"class":36,"line":182},[34,135247,133380],{"class":3617},[34,135249,81444],{"class":40},[34,135251,130275],{"class":44},[34,135253,53076],{"class":40},[34,135255,56403],{"class":44},[34,135257,130845],{"class":40},[34,135259,135260],{"class":36,"line":188},[34,135261,133395],{"class":161},[34,135263,135264,135266,135268,135270,135272,135274],{"class":36,"line":518},[34,135265,133400],{"class":3617},[34,135267,81444],{"class":40},[34,135269,130275],{"class":44},[34,135271,53076],{"class":40},[34,135273,56470],{"class":44},[34,135275,130845],{"class":40},[34,135277,135278],{"class":36,"line":524},[34,135279,133415],{"class":161},[34,135281,135282,135284,135286,135288,135290,135292],{"class":36,"line":530},[34,135283,133420],{"class":3617},[34,135285,81444],{"class":40},[34,135287,130275],{"class":44},[34,135289,53076],{"class":40},[34,135291,87869],{"class":44},[34,135293,130845],{"class":40},[34,135295,135296],{"class":36,"line":624},[34,135297,133435],{"class":161},[34,135299,135300,135302,135304,135306,135308,135310],{"class":36,"line":630},[34,135301,133440],{"class":3617},[34,135303,81444],{"class":40},[34,135305,130275],{"class":44},[34,135307,53076],{"class":40},[34,135309,133449],{"class":44},[34,135311,130845],{"class":40},[103,135313,135314],{},"分布思路重点详解：",[24,135316,135317],{"className":127915,"code":133347,"language":127917,"meta":29,"style":29},[31,135318,135319,135323,135337,135341,135355,135359,135373,135377,135391,135395],{"__ignoreMap":29},[34,135320,135321],{"class":36,"line":37},[34,135322,133354],{"class":161},[34,135324,135325,135327,135329,135331,135333,135335],{"class":36,"line":165},[34,135326,133359],{"class":3617},[34,135328,81444],{"class":40},[34,135330,130275],{"class":44},[34,135332,53076],{"class":40},[34,135334,133368],{"class":44},[34,135336,130845],{"class":40},[34,135338,135339],{"class":36,"line":171},[34,135340,133375],{"class":161},[34,135342,135343,135345,135347,135349,135351,135353],{"class":36,"line":182},[34,135344,133380],{"class":3617},[34,135346,81444],{"class":40},[34,135348,130275],{"class":44},[34,135350,53076],{"class":40},[34,135352,56403],{"class":44},[34,135354,130845],{"class":40},[34,135356,135357],{"class":36,"line":188},[34,135358,133395],{"class":161},[34,135360,135361,135363,135365,135367,135369,135371],{"class":36,"line":518},[34,135362,133400],{"class":3617},[34,135364,81444],{"class":40},[34,135366,130275],{"class":44},[34,135368,53076],{"class":40},[34,135370,56470],{"class":44},[34,135372,130845],{"class":40},[34,135374,135375],{"class":36,"line":524},[34,135376,133415],{"class":161},[34,135378,135379,135381,135383,135385,135387,135389],{"class":36,"line":530},[34,135380,133420],{"class":3617},[34,135382,81444],{"class":40},[34,135384,130275],{"class":44},[34,135386,53076],{"class":40},[34,135388,87869],{"class":44},[34,135390,130845],{"class":40},[34,135392,135393],{"class":36,"line":624},[34,135394,133435],{"class":161},[34,135396,135397,135399,135401,135403,135405,135407],{"class":36,"line":630},[34,135398,133440],{"class":3617},[34,135400,81444],{"class":40},[34,135402,130275],{"class":44},[34,135404,53076],{"class":40},[34,135406,133449],{"class":44},[34,135408,130845],{"class":40},[109,135410],{"style":127771,"src":135411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[103,135413,135414],{},"图片太大，盒子太小，此时需要修改图片的大小",[24,135416,135418],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[31,135419,135420],{"__ignoreMap":29},[34,135421,135422,135424,135426,135428,135430,135433,135435,135437,135440,135443,135445,135448],{"class":36,"line":37},[34,135423,2701],{"class":40},[34,135425,109],{"class":52939},[34,135427,56878],{"class":3617},[34,135429,221],{"class":40},[34,135431,135432],{"class":504},"\"images\u002Fpic.jpg\"",[34,135434,56886],{"class":3617},[34,135436,221],{"class":40},[34,135438,135439],{"class":504},"\"描述文字\"",[34,135441,135442],{"class":3617}," title",[34,135444,221],{"class":40},[34,135446,135447],{"class":504},"\"悬停提示\"",[34,135449,52946],{"class":40},[109,135451],{"style":127771,"src":135452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[103,135454,135455],{},"制造遮罩层",[24,135457,135458],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,135459,135460],{"__ignoreMap":29},[34,135461,135462,135464,135466,135468,135470,135472,135474,135476,135478,135480,135482,135484],{"class":36,"line":37},[34,135463,2701],{"class":40},[34,135465,109],{"class":52939},[34,135467,56878],{"class":3617},[34,135469,221],{"class":40},[34,135471,135432],{"class":504},[34,135473,56886],{"class":3617},[34,135475,221],{"class":40},[34,135477,135439],{"class":504},[34,135479,135442],{"class":3617},[34,135481,221],{"class":40},[34,135483,135447],{"class":504},[34,135485,52946],{"class":40},[103,135487,135488],{},"此时是这样的为标准流",[109,135490],{"style":127771,"src":135491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[103,135493,135494],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[103,135496,135497],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[103,135499,135500],{},"让他在中间，用center(background-position)",[103,135502,135503],{},"将需要变的尽可能放到一个盒子中",[103,135505,135506],{},"放大盒子上内部盒子发生变化",[24,135508,135510],{"className":127915,"code":135509,"language":127917,"meta":29,"style":29},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[31,135511,135512,135518,135528,135532,135539,135549,135561,135573],{"__ignoreMap":29},[34,135513,135514,135516],{"class":36,"line":37},[34,135515,128982],{"class":3617},[34,135517,17218],{"class":40},[34,135519,135520,135522,135524,135526],{"class":36,"line":165},[34,135521,133721],{"class":44},[34,135523,53076],{"class":40},[34,135525,56403],{"class":44},[34,135527,2952],{"class":40},[34,135529,135530],{"class":36,"line":171},[34,135531,3223],{"class":40},[34,135533,135534,135537],{"class":36,"line":182},[34,135535,135536],{"class":3617},".child",[34,135538,17218],{"class":40},[34,135540,135541,135543,135545,135547],{"class":36,"line":188},[34,135542,133721],{"class":44},[34,135544,53076],{"class":40},[34,135546,56470],{"class":44},[34,135548,2952],{"class":40},[34,135550,135551,135553,135555,135557,135559],{"class":36,"line":518},[34,135552,133735],{"class":44},[34,135554,53076],{"class":40},[34,135556,2451],{"class":44},[34,135558,2131],{"class":55},[34,135560,2952],{"class":40},[34,135562,135563,135565,135567,135569,135571],{"class":36,"line":524},[34,135564,133752],{"class":44},[34,135566,53076],{"class":40},[34,135568,2451],{"class":44},[34,135570,2131],{"class":55},[34,135572,2952],{"class":40},[34,135574,135575],{"class":36,"line":530},[34,135576,3223],{"class":40},[103,135578,135579],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135581,135583],{"id":135582},"_122-精灵图","12.2 精灵图",[19,135585,135587],{"id":135586},"_1221-理解","12.2.1 理解",[1772,135589,135590,135608],{},[1775,135591,135592,135593,133821,135596,135599,135600,135603,135604,135607],{},"目的： ",[1165,135594,135595],{},"为了有效地减少服务器接收和发送请求的次数",[1165,135597,135598],{},"提高"," 页面的 ",[1165,135601,135602],{},"加载速度"," ，出现了 ",[1165,135605,135606],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[1775,135609,135610,135611,135613,135614,135616,135617,135619,135620,135622,135623,135625,135626,135628],{},"使用精灵图核心：",[55355,135612],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55355,135615],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55355,135618],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55355,135621],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55355,135624],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55355,135627],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[19,135630,135632],{"id":135631},"_1222-扒图","12.2.2 扒图",[24,135634,135637],{"className":135635,"code":135636,"language":6838},[6836],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[31,135638,135636],{"__ignoreMap":29},[109,135640],{"style":127771,"src":135641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[109,135643],{"style":127771,"src":135644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[19,135646,135648],{"id":135647},"_1223-精灵图的实现","12.2.3 精灵图的实现",[109,135650],{"style":127771,"src":135651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[103,135653,135654],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[109,135656],{"style":127771,"src":135657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[24,135659,135661],{"className":127915,"code":135660,"language":127917,"meta":29,"style":29},"\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",[31,135662,135663,135668,135675,135687,135699,135718,135735],{"__ignoreMap":29},[34,135664,135665],{"class":36,"line":37},[34,135666,135667],{"class":161},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[34,135669,135670,135673],{"class":36,"line":165},[34,135671,135672],{"class":3617},".icon",[34,135674,17218],{"class":40},[34,135676,135677,135679,135681,135683,135685],{"class":36,"line":171},[34,135678,72207],{"class":44},[34,135680,53076],{"class":40},[34,135682,1249],{"class":44},[34,135684,53131],{"class":55},[34,135686,2952],{"class":40},[34,135688,135689,135691,135693,135695,135697],{"class":36,"line":182},[34,135690,72427],{"class":44},[34,135692,53076],{"class":40},[34,135694,1249],{"class":44},[34,135696,53131],{"class":55},[34,135698,2952],{"class":40},[34,135700,135701,135703,135705,135707,135709,135712,135714,135716],{"class":36,"line":188},[34,135702,72250],{"class":44},[34,135704,53076],{"class":40},[34,135706,63365],{"class":44},[34,135708,286],{"class":40},[34,135710,135711],{"class":51},"sprites.png",[34,135713,372],{"class":40},[34,135715,63375],{"class":44},[34,135717,2952],{"class":40},[34,135719,135720,135722,135724,135726,135728,135731,135733],{"class":36,"line":518},[34,135721,130175],{"class":44},[34,135723,53076],{"class":40},[34,135725,53402],{"class":44},[34,135727,53131],{"class":55},[34,135729,135730],{"class":44}," -20",[34,135732,53131],{"class":55},[34,135734,2952],{"class":40},[34,135736,135737],{"class":36,"line":524},[34,135738,3223],{"class":40},[109,135740],{"style":127771,"src":135741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[103,135743,135744],{},"在前端中坐标轴的正方向是右和下",[14,135746,135748],{"id":135747},"_123-字体图标","12.3 字体图标",[19,135750,135752],{"id":135751},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[103,135754,135755],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[103,135757,135758],{},"精灵图是有诸多优点的，但是缺点很明显。",[103,135760,135761],{},"1.图片文件还是比较大的。",[103,135763,135764],{},"2.图片本身放大和缩小会失真。",[103,135766,135767],{},"3.一旦图片制作完毕想要更换非常复杂。",[103,135769,135770,135771,27386],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[1165,135772,135773],{},"字体图标 iconfont",[103,135775,135776,135779,135780,30031],{},[1165,135777,135778],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[1165,135781,135782],{},"展示的是图标，本质属于字体",[19,135784,135786],{"id":135785},"_1232-字体图标的优点","12.3.2 字体图标的优点",[2798,135788,135789,135794,135797,135800,135803],{},[1775,135790,135791,135793],{},[1165,135792,27522],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[1775,135795,135796],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[1775,135798,135799],{},"兼容性：几乎支持所有的浏览器，请放心使用",[1775,135801,135802],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[1775,135804,135805],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[19,135807,135809],{"id":135808},"_1233-字体库下载网站","12.3.3 字体库下载网站",[2798,135811,135812],{},[1775,135813,135814,135815],{},"icomoon字体库：",[236,135816,135819],{"href":135817,"rel":135818},"http:\u002F\u002Ficomoon.io\u002F",[25510],"http:\u002F\u002Ficomoon.io",[103,135821,135822],{},"进去之后点icomoon app",[109,135824],{"style":127771,"src":135825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[103,135827,135828],{},"可以对其编辑：",[109,135830],{"style":127771,"src":135831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[103,135833,135834],{},"生成字体：",[109,135836],{"style":127771,"src":135837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[103,135839,135840],{},"下载：",[109,135842],{"style":127771,"src":135843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[2798,135845,135846],{},[1775,135847,135848,135849],{},"阿里iconfont字体库： ",[236,135850,135851],{"href":135851,"rel":135852},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25510],[19,135854,135856],{"id":135855},"_1234-字体图标的引入","12.3.4 字体图标的引入",[1772,135858,135859],{},[1775,135860,135861,135862,135865],{},"把下载包里面的 ",[1165,135863,135864],{},"fonts"," 文件夹放入页面根目录下",[109,135867],{"style":127771,"src":135868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[1772,135870,135871],{"start":165},[1775,135872,135873],{},"字体文件格式",[1948,135875,135876,135885],{},[1951,135877,135878],{},[1954,135879,135880,135883],{},[1957,135881,135882],{"align":25381},"格式",[1957,135884,25385],{"align":25381},[1994,135886,135887,135897,135907,135917],{},[1954,135888,135889,135894],{},[1999,135890,135891],{"align":25381},[1165,135892,135893],{},".ttf",[1999,135895,135896],{"align":25381},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1954,135898,135899,135904],{},[1999,135900,135901],{"align":25381},[1165,135902,135903],{},".woff",[1999,135905,135906],{"align":25381},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1954,135908,135909,135914],{},[1999,135910,135911],{"align":25381},[1165,135912,135913],{},".eot",[1999,135915,135916],{"align":25381},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1954,135918,135919,135924],{},[1999,135920,135921],{"align":25381},[1165,135922,135923],{},"svg",[1999,135925,135926],{"align":25381},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[1772,135928,135929],{"start":171},[1775,135930,135931],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[24,135933,135935],{"className":127915,"code":135934,"language":127917,"meta":29,"style":29},"\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",[31,135936,135937,135942,135949,135961,135977,136002,136023,136043,136063,136067,136073,136083,136094],{"__ignoreMap":29},[34,135938,135939],{"class":36,"line":37},[34,135940,135941],{"class":161},"\u002F* 引入字体图标 *\u002F\n",[34,135943,135944,135947],{"class":36,"line":165},[34,135945,135946],{"class":55},"@font-face",[34,135948,17218],{"class":40},[34,135950,135951,135954,135956,135959],{"class":36,"line":171},[34,135952,135953],{"class":44},"  font-family",[34,135955,53076],{"class":40},[34,135957,135958],{"class":504},"'icomoon'",[34,135960,2952],{"class":40},[34,135962,135963,135966,135968,135970,135972,135975],{"class":36,"line":182},[34,135964,135965],{"class":44},"  src",[34,135967,53076],{"class":40},[34,135969,63365],{"class":44},[34,135971,286],{"class":40},[34,135973,135974],{"class":504},"'fonts\u002Ficomoon.eot'",[34,135976,4372],{"class":40},[34,135978,135979,135981,135983,135985,135987,135990,135992,135995,135997,136000],{"class":36,"line":188},[34,135980,135965],{"class":44},[34,135982,53076],{"class":40},[34,135984,63365],{"class":44},[34,135986,286],{"class":40},[34,135988,135989],{"class":504},"'fonts\u002Ficomoon.eot?#iefix'",[34,135991,372],{"class":40},[34,135993,135994],{"class":44},"format",[34,135996,286],{"class":40},[34,135998,135999],{"class":504},"'embedded-opentype'",[34,136001,39688],{"class":40},[34,136003,136004,136007,136009,136012,136014,136016,136018,136021],{"class":36,"line":518},[34,136005,136006],{"class":44},"       url",[34,136008,286],{"class":40},[34,136010,136011],{"class":504},"'fonts\u002Ficomoon.woff'",[34,136013,372],{"class":40},[34,136015,135994],{"class":44},[34,136017,286],{"class":40},[34,136019,136020],{"class":504},"'woff'",[34,136022,39688],{"class":40},[34,136024,136025,136027,136029,136032,136034,136036,136038,136041],{"class":36,"line":524},[34,136026,136006],{"class":44},[34,136028,286],{"class":40},[34,136030,136031],{"class":504},"'fonts\u002Ficomoon.ttf'",[34,136033,372],{"class":40},[34,136035,135994],{"class":44},[34,136037,286],{"class":40},[34,136039,136040],{"class":504},"'truetype'",[34,136042,39688],{"class":40},[34,136044,136045,136047,136049,136052,136054,136056,136058,136061],{"class":36,"line":530},[34,136046,136006],{"class":44},[34,136048,286],{"class":40},[34,136050,136051],{"class":504},"'fonts\u002Ficomoon.svg#icomoon'",[34,136053,372],{"class":40},[34,136055,135994],{"class":44},[34,136057,286],{"class":40},[34,136059,136060],{"class":504},"'svg'",[34,136062,4372],{"class":40},[34,136064,136065],{"class":36,"line":624},[34,136066,3223],{"class":40},[34,136068,136069,136071],{"class":36,"line":630},[34,136070,135672],{"class":3617},[34,136072,17218],{"class":40},[34,136074,136075,136077,136079,136081],{"class":36,"line":636},[34,136076,135953],{"class":44},[34,136078,53076],{"class":40},[34,136080,135958],{"class":504},[34,136082,2952],{"class":40},[34,136084,136085,136088,136090,136092],{"class":36,"line":1513},[34,136086,136087],{"class":44},"  font-style",[34,136089,53076],{"class":40},[34,136091,65480],{"class":44},[34,136093,2952],{"class":40},[34,136095,136096],{"class":36,"line":1519},[34,136097,3223],{"class":40},[103,136099,136100],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[109,136102],{"style":127771,"src":136103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[1772,136105,136106],{"start":182},[1775,136107,136108],{},"添加字体",[109,136110],{"style":127771,"src":136111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[103,136113,136114],{},"复制：",[109,136116],{"style":127771,"src":136117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[103,136119,136120],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[1772,136122,136123],{"start":188},[1775,136124,136125],{},"代码展示：",[24,136127,136128],{"className":127915,"code":135934,"language":127917,"meta":29,"style":29},[31,136129,136130,136134,136140,136150,136164,136186,136204,136222,136240,136244,136250,136260,136270],{"__ignoreMap":29},[34,136131,136132],{"class":36,"line":37},[34,136133,135941],{"class":161},[34,136135,136136,136138],{"class":36,"line":165},[34,136137,135946],{"class":55},[34,136139,17218],{"class":40},[34,136141,136142,136144,136146,136148],{"class":36,"line":171},[34,136143,135953],{"class":44},[34,136145,53076],{"class":40},[34,136147,135958],{"class":504},[34,136149,2952],{"class":40},[34,136151,136152,136154,136156,136158,136160,136162],{"class":36,"line":182},[34,136153,135965],{"class":44},[34,136155,53076],{"class":40},[34,136157,63365],{"class":44},[34,136159,286],{"class":40},[34,136161,135974],{"class":504},[34,136163,4372],{"class":40},[34,136165,136166,136168,136170,136172,136174,136176,136178,136180,136182,136184],{"class":36,"line":188},[34,136167,135965],{"class":44},[34,136169,53076],{"class":40},[34,136171,63365],{"class":44},[34,136173,286],{"class":40},[34,136175,135989],{"class":504},[34,136177,372],{"class":40},[34,136179,135994],{"class":44},[34,136181,286],{"class":40},[34,136183,135999],{"class":504},[34,136185,39688],{"class":40},[34,136187,136188,136190,136192,136194,136196,136198,136200,136202],{"class":36,"line":518},[34,136189,136006],{"class":44},[34,136191,286],{"class":40},[34,136193,136011],{"class":504},[34,136195,372],{"class":40},[34,136197,135994],{"class":44},[34,136199,286],{"class":40},[34,136201,136020],{"class":504},[34,136203,39688],{"class":40},[34,136205,136206,136208,136210,136212,136214,136216,136218,136220],{"class":36,"line":524},[34,136207,136006],{"class":44},[34,136209,286],{"class":40},[34,136211,136031],{"class":504},[34,136213,372],{"class":40},[34,136215,135994],{"class":44},[34,136217,286],{"class":40},[34,136219,136040],{"class":504},[34,136221,39688],{"class":40},[34,136223,136224,136226,136228,136230,136232,136234,136236,136238],{"class":36,"line":530},[34,136225,136006],{"class":44},[34,136227,286],{"class":40},[34,136229,136051],{"class":504},[34,136231,372],{"class":40},[34,136233,135994],{"class":44},[34,136235,286],{"class":40},[34,136237,136060],{"class":504},[34,136239,4372],{"class":40},[34,136241,136242],{"class":36,"line":624},[34,136243,3223],{"class":40},[34,136245,136246,136248],{"class":36,"line":630},[34,136247,135672],{"class":3617},[34,136249,17218],{"class":40},[34,136251,136252,136254,136256,136258],{"class":36,"line":636},[34,136253,135953],{"class":44},[34,136255,53076],{"class":40},[34,136257,135958],{"class":504},[34,136259,2952],{"class":40},[34,136261,136262,136264,136266,136268],{"class":36,"line":1513},[34,136263,136087],{"class":44},[34,136265,53076],{"class":40},[34,136267,65480],{"class":44},[34,136269,2952],{"class":40},[34,136271,136272],{"class":36,"line":1519},[34,136273,3223],{"class":40},[109,136275],{"style":127771,"src":136276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[103,136278,136279],{},"更加细节展示：",[1772,136281,136282],{},[1775,136283,136284],{},"html 标签内添加小图标",[109,136286],{"style":127771,"src":136287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[1772,136289,136290],{"start":165},[1775,136291,136292],{},"给标签定义字体",[24,136294,136295],{"className":128662,"code":132019,"language":128664,"meta":29,"style":29},[31,136296,136297,136301,136315,136319],{"__ignoreMap":29},[34,136298,136299],{"class":36,"line":37},[34,136300,132026],{"class":161},[34,136302,136303,136305,136307,136309,136311,136313],{"class":36,"line":165},[34,136304,2701],{"class":40},[34,136306,53250],{"class":52939},[34,136308,55125],{"class":3617},[34,136310,221],{"class":40},[34,136312,132039],{"class":504},[34,136314,52946],{"class":40},[34,136316,136317],{"class":36,"line":171},[34,136318,132046],{"class":40},[34,136320,136321,136323,136325],{"class":36,"line":182},[34,136322,53424],{"class":40},[34,136324,53250],{"class":52939},[34,136326,52946],{"class":40},[103,136328,136329],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[109,136331],{"style":127771,"src":136332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[19,136334,136336],{"id":136335},"_1235-字体图标的追加","12.3.5 字体图标的追加",[103,136338,136339],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[103,136341,136342,136343,136346],{},"把压缩包里面的 ",[1165,136344,136345],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[103,136348,136349],{},"打开网站，点下方：",[109,136351],{"style":127771,"src":136352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[109,136354],{"style":127771,"src":136355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[109,136357],{"style":127771,"src":136358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[103,136360,136361],{},"点yes重新加载",[103,136363,136364],{},"然后重复之前的操作就可以实现了",[103,136366,136367],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[19,136369,136371],{"id":136370},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[109,136373],{"style":127771,"src":136374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1711,136376,136377],{},"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":29,"searchDepth":165,"depth":165,"links":136379},[136380,136386,136391],{"id":134983,"depth":165,"text":134984,"children":136381},[136382,136383,136384,136385],{"id":134995,"depth":171,"text":134996},{"id":135024,"depth":171,"text":135025},{"id":135052,"depth":171,"text":135053},{"id":135110,"depth":171,"text":135111},{"id":135582,"depth":165,"text":135583,"children":136387},[136388,136389,136390],{"id":135586,"depth":171,"text":135587},{"id":135631,"depth":171,"text":135632},{"id":135647,"depth":171,"text":135648},{"id":135747,"depth":165,"text":135748,"children":136392},[136393,136394,136395,136396,136397,136398],{"id":135751,"depth":171,"text":135752},{"id":135785,"depth":171,"text":135786},{"id":135808,"depth":171,"text":135809},{"id":135855,"depth":171,"text":135856},{"id":136335,"depth":171,"text":136336},{"id":136370,"depth":171,"text":136371},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134975,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136405,"title":136406,"body":136407,"description":1744,"extension":1745,"meta":137634,"navigation":1474,"path":137635,"seo":137636,"stem":137637,"__hash__":137638},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136408,"toc":137615},[136409,136412,136416,136419,136433,136501,136531,136534,136538,136542,136644,136691,136695,136698,136701,136735,136738,136741,136744,136747,136750,136753,136756,136758,136761,136764,136767,136770,136773,136776,136779,136807,136810,136814,136817,136824,136827,136830,136856,136859,136863,136866,136869,136876,136880,136883,136885,136917,136920,136923,136935,136941,136944,136947,136950,136952,136956,136959,136962,136965,137010,137014,137016,137019,137026,137068,137071,137075,137080,137094,137098,137101,137104,137107,137110,137113,137147,137150,137153,137207,137210,137213,137216,137219,137271,137274,137277,137326,137330,137332,137335,137338,137341,137344,137347,137405,137408,137414,137417,137420,137452,137455,137459,137463,137466,137498,137502,137505,137549,137553,137556,137559,137562,137565,137568,137571,137574,137576,137579,137581,137584,137587,137590,137593,137598,137601,137603,137606,137609,137612],[10,136410,136406],{"id":136411},"_13-界面样式与布局技巧",[14,136413,136415],{"id":136414},"_131-css三角","13.1 css三角",[103,136417,136418],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[2798,136420,136421,136424,136427,136430],{},[1775,136422,136423],{},"用css 边框可以模拟三角效果",[1775,136425,136426],{},"宽度高度为0",[1775,136428,136429],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[1775,136431,136432],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[24,136434,136436],{"className":127915,"code":136435,"language":127917,"meta":29,"style":29},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[31,136437,136438,136443,136450,136460,136470,136486,136497],{"__ignoreMap":29},[34,136439,136440],{"class":36,"line":37},[34,136441,136442],{"class":161},"\u002F* CSS 实现三角形 *\u002F\n",[34,136444,136445,136448],{"class":36,"line":165},[34,136446,136447],{"class":3617},".triangle",[34,136449,17218],{"class":40},[34,136451,136452,136454,136456,136458],{"class":36,"line":171},[34,136453,72207],{"class":44},[34,136455,53076],{"class":40},[34,136457,177],{"class":44},[34,136459,2952],{"class":40},[34,136461,136462,136464,136466,136468],{"class":36,"line":182},[34,136463,72427],{"class":44},[34,136465,53076],{"class":40},[34,136467,177],{"class":44},[34,136469,2952],{"class":40},[34,136471,136472,136474,136476,136478,136480,136482,136484],{"class":36,"line":188},[34,136473,72535],{"class":44},[34,136475,53076],{"class":40},[34,136477,410],{"class":44},[34,136479,53131],{"class":55},[34,136481,53160],{"class":44},[34,136483,65630],{"class":44},[34,136485,2952],{"class":40},[34,136487,136488,136491,136493,136495],{"class":36,"line":518},[34,136489,136490],{"class":44},"  border-bottom-color",[34,136492,53076],{"class":40},[34,136494,64008],{"class":44},[34,136496,2952],{"class":40},[34,136498,136499],{"class":36,"line":524},[34,136500,3223],{"class":40},[24,136502,136503],{"className":127915,"code":132072,"language":127917,"meta":29,"style":29},[31,136504,136505,136511,136527],{"__ignoreMap":29},[34,136506,136507,136509],{"class":36,"line":37},[34,136508,53250],{"class":52939},[34,136510,17218],{"class":40},[34,136512,136513,136515,136517,136519,136521,136523,136525],{"class":36,"line":165},[34,136514,72535],{"class":44},[34,136516,53076],{"class":40},[34,136518,394],{"class":44},[34,136520,53131],{"class":55},[34,136522,53160],{"class":44},[34,136524,131307],{"class":44},[34,136526,2952],{"class":40},[34,136528,136529],{"class":36,"line":171},[34,136530,3223],{"class":40},[109,136532],{"style":127771,"src":136533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136535,136537],{"id":136536},"_132-css用户界面样式","13.2 css用户界面样式",[19,136539,136541],{"id":136540},"_1321-鼠标样式","13.2.1 鼠标样式",[24,136543,136545],{"className":127915,"code":136544,"language":127917,"meta":29,"style":29},"\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",[31,136546,136547,136552,136571,136589,136608,136625],{"__ignoreMap":29},[34,136548,136549],{"class":36,"line":37},[34,136550,136551],{"class":161},"\u002F* 鼠标样式 *\u002F\n",[34,136553,136554,136556,136558,136561,136563,136565,136568],{"class":36,"line":165},[34,136555,53250],{"class":52939},[34,136557,81444],{"class":40},[34,136559,136560],{"class":44},"cursor",[34,136562,53076],{"class":40},[34,136564,63669],{"class":44},[34,136566,136567],{"class":40},"; }   ",[34,136569,136570],{"class":161},"\u002F* 手型 *\u002F\n",[34,136572,136573,136575,136577,136579,136581,136584,136586],{"class":36,"line":171},[34,136574,53250],{"class":52939},[34,136576,81444],{"class":40},[34,136578,136560],{"class":44},[34,136580,53076],{"class":40},[34,136582,136583],{"class":44},"default",[34,136585,136567],{"class":40},[34,136587,136588],{"class":161},"\u002F* 默认 *\u002F\n",[34,136590,136591,136593,136595,136597,136599,136602,136605],{"class":36,"line":182},[34,136592,53250],{"class":52939},[34,136594,81444],{"class":40},[34,136596,136560],{"class":44},[34,136598,53076],{"class":40},[34,136600,136601],{"class":44},"move",[34,136603,136604],{"class":40},"; }      ",[34,136606,136607],{"class":161},"\u002F* 移动 *\u002F\n",[34,136609,136610,136612,136614,136616,136618,136620,136622],{"class":36,"line":188},[34,136611,53250],{"class":52939},[34,136613,81444],{"class":40},[34,136615,136560],{"class":44},[34,136617,53076],{"class":40},[34,136619,6838],{"class":44},[34,136621,136604],{"class":40},[34,136623,136624],{"class":161},"\u002F* 文本 *\u002F\n",[34,136626,136627,136629,136631,136633,136635,136638,136641],{"class":36,"line":518},[34,136628,53250],{"class":52939},[34,136630,81444],{"class":40},[34,136632,136560],{"class":44},[34,136634,53076],{"class":40},[34,136636,136637],{"class":44},"not-allowed",[34,136639,136640],{"class":40},"; } ",[34,136642,136643],{"class":161},"\u002F* 禁止 *\u002F\n",[1948,136645,136646,136654],{},[1951,136647,136648],{},[1954,136649,136650,136652],{},[1957,136651,128379],{"align":25381},[1957,136653,29135],{"align":25381},[1994,136655,136656,136663,136670,136677,136684],{},[1954,136657,136658,136660],{},[1999,136659,136583],{"align":25381},[1999,136661,136662],{"align":25381},"小白 默认",[1954,136664,136665,136667],{},[1999,136666,63669],{"align":25381},[1999,136668,136669],{"align":25381},"小手",[1954,136671,136672,136674],{},[1999,136673,136601],{"align":25381},[1999,136675,136676],{"align":25381},"移动",[1954,136678,136679,136681],{},[1999,136680,6838],{"align":25381},[1999,136682,136683],{"align":25381},"文本",[1954,136685,136686,136688],{},[1999,136687,136637],{"align":25381},[1999,136689,136690],{"align":25381},"禁止",[19,136692,136694],{"id":136693},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[103,136696,136697],{},"去除表单轮廓线",[103,136699,136700],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[24,136702,136703],{"className":127915,"code":131279,"language":127917,"meta":29,"style":29},[31,136704,136705,136709,136715,136731],{"__ignoreMap":29},[34,136706,136707],{"class":36,"line":37},[34,136708,131286],{"class":161},[34,136710,136711,136713],{"class":36,"line":165},[34,136712,53250],{"class":52939},[34,136714,17218],{"class":40},[34,136716,136717,136719,136721,136723,136725,136727,136729],{"class":36,"line":171},[34,136718,72535],{"class":44},[34,136720,53076],{"class":40},[34,136722,394],{"class":44},[34,136724,53131],{"class":55},[34,136726,53160],{"class":44},[34,136728,131307],{"class":44},[34,136730,2952],{"class":40},[34,136732,136733],{"class":36,"line":182},[34,136734,3223],{"class":40},[103,136736,136737],{},"文本域：",[109,136739],{"style":127771,"src":136740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[103,136742,136743],{},"此时会有一个空白区域",[109,136745],{"style":127771,"src":136746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[103,136748,136749],{},"写在同一行就不会出现这个问题",[109,136751],{"style":127771,"src":136752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[103,136754,136755],{},"文本域是行内块元素，一定记住！！！",[103,136757,99596],{},[109,136759],{"style":127771,"src":136760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[103,136762,136763],{},"文本域尽量放在一行",[103,136765,136766],{},"知识回顾：cols是列，rols是行",[109,136768],{"style":127771,"src":136769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[103,136771,136772],{},"它可以进行拖动，显然这是我们不愿意看到的",[109,136774],{"style":127771,"src":136775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[103,136777,136778],{},"使用resize进行解决",[24,136780,136782],{"className":127915,"code":136781,"language":127917,"meta":29,"style":29},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[31,136783,136784,136790,136803],{"__ignoreMap":29},[34,136785,136786,136788],{"class":36,"line":37},[34,136787,55460],{"class":52939},[34,136789,17218],{"class":40},[34,136791,136792,136794,136796,136798,136800],{"class":36,"line":165},[34,136793,72437],{"class":44},[34,136795,53076],{"class":40},[34,136797,56376],{"class":44},[34,136799,131778],{"class":40},[34,136801,136802],{"class":161},"\u002F* 取消表单轮廓线 *\u002F\n",[34,136804,136805],{"class":36,"line":171},[34,136806,3223],{"class":40},[103,136808,136809],{},"此时就无法通过右下方实现拖动了",[19,136811,136813],{"id":136812},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[103,136815,136816],{},"实现一个盒子中的文字和图片对齐",[103,136818,136819,136820,136823],{},"用于设置一个元素的 ",[1165,136821,136822],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[103,136825,136826],{},"图片和文字默认是基线对齐",[109,136828],{"style":127771,"src":136829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[24,136831,136832],{"className":127915,"code":136781,"language":127917,"meta":29,"style":29},[31,136833,136834,136840,136852],{"__ignoreMap":29},[34,136835,136836,136838],{"class":36,"line":37},[34,136837,55460],{"class":52939},[34,136839,17218],{"class":40},[34,136841,136842,136844,136846,136848,136850],{"class":36,"line":165},[34,136843,72437],{"class":44},[34,136845,53076],{"class":40},[34,136847,56376],{"class":44},[34,136849,131778],{"class":40},[34,136851,136802],{"class":161},[34,136853,136854],{"class":36,"line":171},[34,136855,3223],{"class":40},[109,136857],{"style":127771,"src":136858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[1353,136860,136862],{"id":136861},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[103,136864,136865],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[109,136867],{"style":127771,"src":136868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[103,136870,136871,136872,136875],{},"此时可以给图片、表单这些行内块元素的 ",[1165,136873,136874],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[1353,136877,136879],{"id":136878},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[103,136881,136882],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[103,136884,16279],{},[24,136886,136888],{"className":127915,"code":136887,"language":127917,"meta":29,"style":29},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[31,136889,136890,136895,136901,136913],{"__ignoreMap":29},[34,136891,136892],{"class":36,"line":37},[34,136893,136894],{"class":161},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[34,136896,136897,136899],{"class":36,"line":165},[34,136898,109],{"class":52939},[34,136900,17218],{"class":40},[34,136902,136903,136906,136908,136911],{"class":36,"line":171},[34,136904,136905],{"class":44},"  vertical-align",[34,136907,53076],{"class":40},[34,136909,136910],{"class":44},"middle",[34,136912,2952],{"class":40},[34,136914,136915],{"class":36,"line":182},[34,136916,3223],{"class":40},[109,136918],{"style":127771,"src":136919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[103,136921,136922],{},"主要解决方法有两种：",[1772,136924,136925],{},[1775,136926,136927,136930,136931,136934],{},[1165,136928,136929],{},"给图片"," 添加 ",[1165,136932,136933],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[103,136936,136937,136938],{},"2.把图片转换为块级元素 ",[1165,136939,136940],{},"display: block",[103,136942,136943],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[103,136945,136946],{},"img {",[103,136948,136949],{},"vertical-align:middle;",[103,136951,2737],{},[19,136953,136955],{"id":136954},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[103,136957,136958],{},"效果：",[109,136960],{"style":127771,"src":136961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[103,136963,136964],{},"单行文本溢出显示省略号--必须满足三个条件：",[24,136966,136968],{"className":127915,"code":136967,"language":127917,"meta":29,"style":29},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[31,136969,136970,136975,136981,136991,136996,137006],{"__ignoreMap":29},[34,136971,136972],{"class":36,"line":37},[34,136973,136974],{"class":161},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[34,136976,136977,136979],{"class":36,"line":165},[34,136978,109],{"class":52939},[34,136980,17218],{"class":40},[34,136982,136983,136985,136987,136989],{"class":36,"line":171},[34,136984,136905],{"class":44},[34,136986,53076],{"class":40},[34,136988,136910],{"class":44},[34,136990,2952],{"class":40},[34,136992,136993],{"class":36,"line":182},[34,136994,136995],{"class":161},"  \u002F* 或 *\u002F\n",[34,136997,136998,137000,137002,137004],{"class":36,"line":188},[34,136999,129531],{"class":44},[34,137001,53076],{"class":40},[34,137003,62508],{"class":44},[34,137005,2952],{"class":40},[34,137007,137008],{"class":36,"line":518},[34,137009,3223],{"class":40},[19,137011,137013],{"id":137012},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[103,137015,136958],{},[109,137017],{"style":127771,"src":137018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[103,137020,137021,137022,137025],{},"多行文本溢出显示省略号， ",[1165,137023,137024],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[24,137027,137028],{"className":127915,"code":136967,"language":127917,"meta":29,"style":29},[31,137029,137030,137034,137040,137050,137054,137064],{"__ignoreMap":29},[34,137031,137032],{"class":36,"line":37},[34,137033,136974],{"class":161},[34,137035,137036,137038],{"class":36,"line":165},[34,137037,109],{"class":52939},[34,137039,17218],{"class":40},[34,137041,137042,137044,137046,137048],{"class":36,"line":171},[34,137043,136905],{"class":44},[34,137045,53076],{"class":40},[34,137047,136910],{"class":44},[34,137049,2952],{"class":40},[34,137051,137052],{"class":36,"line":182},[34,137053,136995],{"class":161},[34,137055,137056,137058,137060,137062],{"class":36,"line":188},[34,137057,129531],{"class":44},[34,137059,53076],{"class":40},[34,137061,62508],{"class":44},[34,137063,2952],{"class":40},[34,137065,137066],{"class":36,"line":518},[34,137067,3223],{"class":40},[103,137069,137070],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137072,137074],{"id":137073},"_133-常见布局技巧","13.3 常见布局技巧",[103,137076,137077],{},[1165,137078,137079],{},"巧妙利用一个技术更快更好的布局：",[1772,137081,137082,137085,137088,137091],{},[1775,137083,137084],{},"margin负值的运用",[1775,137086,137087],{},"文字围绕浮动元素",[1775,137089,137090],{},"行内块的巧妙运用",[1775,137092,137093],{},"CSS三角强化",[19,137095,137097],{"id":137096},"_1331-margin负值的运用","13.3.1 margin负值的运用",[103,137099,137100],{},"应用场景：",[109,137102],{"style":127771,"src":137103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[109,137105],{"style":127771,"src":137106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[103,137108,137109],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[103,137111,137112],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[24,137114,137115],{"className":127915,"code":131279,"language":127917,"meta":29,"style":29},[31,137116,137117,137121,137127,137143],{"__ignoreMap":29},[34,137118,137119],{"class":36,"line":37},[34,137120,131286],{"class":161},[34,137122,137123,137125],{"class":36,"line":165},[34,137124,53250],{"class":52939},[34,137126,17218],{"class":40},[34,137128,137129,137131,137133,137135,137137,137139,137141],{"class":36,"line":171},[34,137130,72535],{"class":44},[34,137132,53076],{"class":40},[34,137134,394],{"class":44},[34,137136,53131],{"class":55},[34,137138,53160],{"class":44},[34,137140,131307],{"class":44},[34,137142,2952],{"class":40},[34,137144,137145],{"class":36,"line":182},[34,137146,3223],{"class":40},[109,137148],{"style":127771,"src":137149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[103,137151,137152],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[24,137154,137156],{"className":127915,"code":137155,"language":127917,"meta":29,"style":29},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[31,137157,137158,137163,137169,137179,137191,137203],{"__ignoreMap":29},[34,137159,137160],{"class":36,"line":37},[34,137161,137162],{"class":161},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[34,137164,137165,137167],{"class":36,"line":165},[34,137166,131763],{"class":3617},[34,137168,17218],{"class":40},[34,137170,137171,137173,137175,137177],{"class":36,"line":171},[34,137172,133721],{"class":44},[34,137174,53076],{"class":40},[34,137176,56403],{"class":44},[34,137178,2952],{"class":40},[34,137180,137181,137183,137185,137187,137189],{"class":36,"line":182},[34,137182,133735],{"class":44},[34,137184,53076],{"class":40},[34,137186,410],{"class":44},[34,137188,53131],{"class":55},[34,137190,2952],{"class":40},[34,137192,137193,137195,137197,137199,137201],{"class":36,"line":188},[34,137194,133752],{"class":44},[34,137196,53076],{"class":40},[34,137198,1249],{"class":44},[34,137200,53131],{"class":55},[34,137202,2952],{"class":40},[34,137204,137205],{"class":36,"line":518},[34,137206,3223],{"class":40},[103,137208,137209],{},"加上上述代码会发现：",[109,137211],{"style":127771,"src":137212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[103,137214,137215],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[103,137217,137218],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[24,137220,137221],{"className":127915,"code":137155,"language":127917,"meta":29,"style":29},[31,137222,137223,137227,137233,137243,137255,137267],{"__ignoreMap":29},[34,137224,137225],{"class":36,"line":37},[34,137226,137162],{"class":161},[34,137228,137229,137231],{"class":36,"line":165},[34,137230,131763],{"class":3617},[34,137232,17218],{"class":40},[34,137234,137235,137237,137239,137241],{"class":36,"line":171},[34,137236,133721],{"class":44},[34,137238,53076],{"class":40},[34,137240,56403],{"class":44},[34,137242,2952],{"class":40},[34,137244,137245,137247,137249,137251,137253],{"class":36,"line":182},[34,137246,133735],{"class":44},[34,137248,53076],{"class":40},[34,137250,410],{"class":44},[34,137252,53131],{"class":55},[34,137254,2952],{"class":40},[34,137256,137257,137259,137261,137263,137265],{"class":36,"line":188},[34,137258,133752],{"class":44},[34,137260,53076],{"class":40},[34,137262,1249],{"class":44},[34,137264,53131],{"class":55},[34,137266,2952],{"class":40},[34,137268,137269],{"class":36,"line":518},[34,137270,3223],{"class":40},[103,137272,137273],{},"解决方式2：",[103,137275,137276],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[24,137278,137280],{"className":127915,"code":137279,"language":127917,"meta":29,"style":29},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[31,137281,137282,137288,137298,137310,137322],{"__ignoreMap":29},[34,137283,137284,137286],{"class":36,"line":37},[34,137285,53250],{"class":52939},[34,137287,17218],{"class":40},[34,137289,137290,137292,137294,137296],{"class":36,"line":165},[34,137291,133721],{"class":44},[34,137293,53076],{"class":40},[34,137295,56403],{"class":44},[34,137297,2952],{"class":40},[34,137299,137300,137302,137304,137306,137308],{"class":36,"line":171},[34,137301,133735],{"class":44},[34,137303,53076],{"class":40},[34,137305,410],{"class":44},[34,137307,53131],{"class":55},[34,137309,2952],{"class":40},[34,137311,137312,137314,137316,137318,137320],{"class":36,"line":182},[34,137313,133752],{"class":44},[34,137315,53076],{"class":40},[34,137317,1249],{"class":44},[34,137319,53131],{"class":55},[34,137321,2952],{"class":40},[34,137323,137324],{"class":36,"line":188},[34,137325,3223],{"class":40},[19,137327,137329],{"id":137328},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[103,137331,137100],{},[109,137333],{"style":127771,"src":137334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[103,137336,137337],{},"实现结构图：",[109,137339],{"style":127771,"src":137340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[103,137342,137343],{},"巧妙运用浮动元素不会压住文字的特性",[103,137345,137346],{},"代码显示：",[24,137348,137350],{"className":127915,"code":137349,"language":127917,"meta":29,"style":29},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[31,137351,137352,137358,137368,137372,137377,137381,137387,137401],{"__ignoreMap":29},[34,137353,137354,137356],{"class":36,"line":37},[34,137355,131763],{"class":3617},[34,137357,17218],{"class":40},[34,137359,137360,137362,137364,137366],{"class":36,"line":165},[34,137361,132395],{"class":44},[34,137363,53076],{"class":40},[34,137365,25381],{"class":44},[34,137367,2952],{"class":40},[34,137369,137370],{"class":36,"line":171},[34,137371,3223],{"class":40},[34,137373,137374],{"class":36,"line":182},[34,137375,137376],{"class":40},"```Css\n",[34,137378,137379],{"class":36,"line":188},[34,137380,131758],{"class":161},[34,137382,137383,137385],{"class":36,"line":518},[34,137384,131763],{"class":3617},[34,137386,17218],{"class":40},[34,137388,137389,137391,137393,137395,137397,137399],{"class":36,"line":524},[34,137390,72109],{"class":44},[34,137392,53076],{"class":40},[34,137394,177],{"class":44},[34,137396,53195],{"class":44},[34,137398,131778],{"class":40},[34,137400,131781],{"class":161},[34,137402,137403],{"class":36,"line":530},[34,137404,3223],{"class":40},[103,137406,137407],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[24,137409,137412],{"className":137410,"code":137411,"language":6838},[6836],"\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",[31,137413,137411],{"__ignoreMap":29},[109,137415],{"style":127771,"src":137416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[103,137418,137419],{},"最终展示结果：",[24,137421,137422],{"className":127915,"code":131751,"language":127917,"meta":29,"style":29},[31,137423,137424,137428,137434,137448],{"__ignoreMap":29},[34,137425,137426],{"class":36,"line":37},[34,137427,131758],{"class":161},[34,137429,137430,137432],{"class":36,"line":165},[34,137431,131763],{"class":3617},[34,137433,17218],{"class":40},[34,137435,137436,137438,137440,137442,137444,137446],{"class":36,"line":171},[34,137437,72109],{"class":44},[34,137439,53076],{"class":40},[34,137441,177],{"class":44},[34,137443,53195],{"class":44},[34,137445,131778],{"class":40},[34,137447,131781],{"class":161},[34,137449,137450],{"class":36,"line":182},[34,137451,3223],{"class":40},[109,137453],{"style":127771,"src":137454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137456,137458],{"id":137457},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[19,137460,137462],{"id":137461},"_1341-原理","13.4.1 原理",[109,137464],{"style":127771,"src":137465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[24,137467,137468],{"className":127915,"code":131751,"language":127917,"meta":29,"style":29},[31,137469,137470,137474,137480,137494],{"__ignoreMap":29},[34,137471,137472],{"class":36,"line":37},[34,137473,131758],{"class":161},[34,137475,137476,137478],{"class":36,"line":165},[34,137477,131763],{"class":3617},[34,137479,17218],{"class":40},[34,137481,137482,137484,137486,137488,137490,137492],{"class":36,"line":171},[34,137483,72109],{"class":44},[34,137485,53076],{"class":40},[34,137487,177],{"class":44},[34,137489,53195],{"class":44},[34,137491,131778],{"class":40},[34,137493,131781],{"class":161},[34,137495,137496],{"class":36,"line":182},[34,137497,3223],{"class":40},[19,137499,137501],{"id":137500},"_1342-实例","13.4.2 实例",[109,137503],{"style":127771,"src":137504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[24,137506,137507],{"className":127915,"code":132381,"language":127917,"meta":29,"style":29},[31,137508,137509,137515,137525,137529,137535,137545],{"__ignoreMap":29},[34,137510,137511,137513],{"class":36,"line":37},[34,137512,132388],{"class":3617},[34,137514,17218],{"class":40},[34,137516,137517,137519,137521,137523],{"class":36,"line":165},[34,137518,132395],{"class":44},[34,137520,53076],{"class":40},[34,137522,25381],{"class":44},[34,137524,2952],{"class":40},[34,137526,137527],{"class":36,"line":171},[34,137528,3223],{"class":40},[34,137530,137531,137533],{"class":36,"line":182},[34,137532,132410],{"class":3617},[34,137534,17218],{"class":40},[34,137536,137537,137539,137541,137543],{"class":36,"line":188},[34,137538,132395],{"class":44},[34,137540,53076],{"class":40},[34,137542,74161],{"class":44},[34,137544,2952],{"class":40},[34,137546,137547],{"class":36,"line":518},[34,137548,3223],{"class":40},[14,137550,137552],{"id":137551},"_135-css的初始化","13.5 css的初始化",[103,137554,137555],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[103,137557,137558],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[103,137560,137561],{},"每个网页都必须首先进行 CSS初始化。",[103,137563,137564],{},"这里我们以 京东CSS初始化代码为例。",[103,137566,137567],{},"在网页右键查看网页源代码",[103,137569,137570],{},"找到css的link引入语句",[103,137572,137573],{},"然后ctrl+f 输入body",[103,137575,78864],{},[109,137577],{"style":127771,"src":137578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[103,137580,78887],{},[109,137582],{"style":127771,"src":137583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[103,137585,137586],{},"③打开了网页上传压缩的代码",[109,137588],{"style":127771,"src":137589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[103,137591,137592],{},"④从body前可以查看这个网页的初始化代码",[103,137594,137595],{},[1165,137596,137597],{},"Unicode编码字体：",[103,137599,137600],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[103,137602,84843],{},[103,137604,137605],{},"黑体 \\9ED1\\4F53",[103,137607,137608],{},"宋体 \\5B8B\\4F53",[103,137610,137611],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1711,137613,137614],{},"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":29,"searchDepth":165,"depth":165,"links":137616},[137617,137618,137625,137629,137633],{"id":136414,"depth":165,"text":136415},{"id":136536,"depth":165,"text":136537,"children":137619},[137620,137621,137622,137623,137624],{"id":136540,"depth":171,"text":136541},{"id":136693,"depth":171,"text":136694},{"id":136812,"depth":171,"text":136813},{"id":136954,"depth":171,"text":136955},{"id":137012,"depth":171,"text":137013},{"id":137073,"depth":165,"text":137074,"children":137626},[137627,137628],{"id":137096,"depth":171,"text":137097},{"id":137328,"depth":171,"text":137329},{"id":137457,"depth":165,"text":137458,"children":137630},[137631,137632],{"id":137461,"depth":171,"text":137462},{"id":137500,"depth":171,"text":137501},{"id":137551,"depth":165,"text":137552},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136406,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137640,"title":137641,"body":137642,"description":1744,"extension":1745,"meta":139328,"navigation":1474,"path":139329,"seo":139330,"stem":139331,"__hash__":139332},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137643,"toc":139317},[137644,137647,137651,137655,137658,137665,137668,137671,137709,137712,137714,137728,137732,137741,137745,137750,137753,137756,137759,137794,137799,137802,137832,137835,137840,137843,137846,137876,137879,137933,137936,137940,137945,137957,137960,137964,137994,137997,138002,138005,138035,138038,138042,138059,138063,138067,138070,138103,138106,138110,138113,138116,138119,138122,138125,138236,138239,138242,138245,138347,138350,138354,138358,138362,138365,138405,138408,138410,138426,138430,138433,138438,138519,138522,138525,138651,138656,138659,138667,138670,138675,138760,138763,138767,138770,138773,138777,138797,138802,138886,138889,138894,138897,138900,138978,138981,138984,138987,138990,138993,138998,139001,139004,139076,139079,139084,139087,139184,139187,139193,139196,139199,139202,139205,139208,139211,139214,139217,139221,139226,139229,139262,139267,139270,139311,139314],[10,137645,137641],{"id":137646},"_14-html5与css3新特性",[14,137648,137650],{"id":137649},"_141-html5的新特性","14.1 HTML5的新特性",[19,137652,137654],{"id":137653},"_1411-基本标签","14.1.1 基本标签",[103,137656,137657],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[103,137659,137660,137661,137664],{},"这些新特性都有兼容性问题，基本是 ",[1165,137662,137663],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[103,137666,137667],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[103,137669,137670],{},"现在使用的是新特性：",[2798,137672,137673,137679,137685,137691,137697,137703],{},[1775,137674,137675,137678],{},[31,137676,137677],{},"\u003Cheader>"," 头部标签",[1775,137680,137681,137684],{},[31,137682,137683],{},"\u003Cnav>"," 导航标签",[1775,137686,137687,137690],{},[31,137688,137689],{},"\u003Carticle>"," 内容标签",[1775,137692,137693,137696],{},[31,137694,137695],{},"\u003Csection>"," 定义文档某个区域",[1775,137698,137699,137702],{},[31,137700,137701],{},"\u003Caside>"," 侧边栏标签",[1775,137704,137705,137708],{},[31,137706,137707],{},"\u003Cfooter>"," 尾部标签",[109,137710],{"style":127771,"src":137711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[103,137713,1847],{},[2798,137715,137716,137719,137722,137725],{},[1775,137717,137718],{},"这种语义化标准主要是针对搜索引擎的",[1775,137720,137721],{},"这些标签页面中可以经常使用",[1775,137723,137724],{},"在IE9中，需要把这些元素转换为块级元素",[1775,137726,137727],{},"移动端更喜欢使用这些标签",[19,137729,137731],{"id":137730},"_1412-多媒体标签","14.1.2 多媒体标签",[103,137733,137734,137735,137737,137738,137740],{},"音频 ",[1165,137736,29820],{}," 和视频 ",[1165,137739,29829],{}," 两个标签",[1353,137742,137744],{"id":137743},"_14121-视频标签-video","14.1.2.1 视频标签- video",[1772,137746,137747],{},[1775,137748,137749],{},"支持格式：",[109,137751],{"style":127771,"src":137752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[103,137754,137755],{},"尽量使用MP4，兼容性好",[103,137757,137758],{},"用MP4就可以",[24,137760,137762],{"className":128662,"code":137761,"language":128664,"meta":29,"style":29},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[31,137763,137764],{"__ignoreMap":29},[34,137765,137766,137768,137770,137772,137774,137777,137779,137782,137785,137788,137790,137792],{"class":36,"line":37},[34,137767,2701],{"class":40},[34,137769,29829],{"class":52939},[34,137771,56878],{"class":3617},[34,137773,221],{"class":40},[34,137775,137776],{"class":504},"\"movie.mp4\"",[34,137778,94059],{"class":3617},[34,137780,137781],{"class":3617}," autoplay",[34,137783,137784],{"class":3617}," muted",[34,137786,137787],{"class":3617}," loop",[34,137789,56953],{"class":40},[34,137791,29829],{"class":52939},[34,137793,52946],{"class":40},[1772,137795,137796],{"start":165},[1775,137797,137798],{},"兼容写法",[103,137800,137801],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[24,137803,137804],{"className":128662,"code":137761,"language":128664,"meta":29,"style":29},[31,137805,137806],{"__ignoreMap":29},[34,137807,137808,137810,137812,137814,137816,137818,137820,137822,137824,137826,137828,137830],{"class":36,"line":37},[34,137809,2701],{"class":40},[34,137811,29829],{"class":52939},[34,137813,56878],{"class":3617},[34,137815,221],{"class":40},[34,137817,137776],{"class":504},[34,137819,94059],{"class":3617},[34,137821,137781],{"class":3617},[34,137823,137784],{"class":3617},[34,137825,137787],{"class":3617},[34,137827,56953],{"class":40},[34,137829,29829],{"class":52939},[34,137831,52946],{"class":40},[103,137833,137834],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1772,137836,137837],{"start":171},[1775,137838,137839],{},"video常用属性",[109,137841],{"style":127771,"src":137842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[103,137844,137845],{},"poster属性后面是跟的等待加载图片的地址",[24,137847,137848],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,137849,137850],{"__ignoreMap":29},[34,137851,137852,137854,137856,137858,137860,137862,137864,137866,137868,137870,137872,137874],{"class":36,"line":37},[34,137853,2701],{"class":40},[34,137855,109],{"class":52939},[34,137857,56878],{"class":3617},[34,137859,221],{"class":40},[34,137861,135432],{"class":504},[34,137863,56886],{"class":3617},[34,137865,221],{"class":40},[34,137867,135439],{"class":504},[34,137869,135442],{"class":3617},[34,137871,221],{"class":40},[34,137873,135447],{"class":504},[34,137875,52946],{"class":40},[103,137877,137878],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[24,137880,137882],{"className":127915,"code":137881,"language":127917,"meta":29,"style":29},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[31,137883,137884,137889,137895,137919,137924,137929],{"__ignoreMap":29},[34,137885,137886],{"class":36,"line":37},[34,137887,137888],{"class":161},"\u002F* 2D 位移 *\u002F\n",[34,137890,137891,137893],{"class":36,"line":165},[34,137892,53250],{"class":52939},[34,137894,17218],{"class":40},[34,137896,137897,137900,137902,137905,137907,137909,137911,137913,137915,137917],{"class":36,"line":171},[34,137898,137899],{"class":44},"  transform",[34,137901,53076],{"class":40},[34,137903,137904],{"class":44},"translate",[34,137906,286],{"class":40},[34,137908,451],{"class":44},[34,137910,53131],{"class":55},[34,137912,48],{"class":40},[34,137914,2451],{"class":44},[34,137916,53131],{"class":55},[34,137918,4372],{"class":40},[34,137920,137921],{"class":36,"line":182},[34,137922,137923],{"class":161},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[34,137925,137926],{"class":36,"line":188},[34,137927,137928],{"class":161},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[34,137930,137931],{"class":36,"line":518},[34,137932,3223],{"class":40},[103,137934,137935],{},"muted:自动静音属性",[1353,137937,137939],{"id":137938},"_14122-音频标签audio","14.1.2.2 音频标签audio",[1772,137941,137942],{},[1775,137943,137944],{},"基本使用",[103,137946,137947,137948,137953,137954],{},"当前 ",[1165,137949,137950],{},[31,137951,137952],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[1165,137955,137956],{},"mp3格式",[109,137958],{"style":127771,"src":137959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[1772,137961,137962],{"start":165},[1775,137963,137798],{},[24,137965,137966],{"className":128662,"code":137761,"language":128664,"meta":29,"style":29},[31,137967,137968],{"__ignoreMap":29},[34,137969,137970,137972,137974,137976,137978,137980,137982,137984,137986,137988,137990,137992],{"class":36,"line":37},[34,137971,2701],{"class":40},[34,137973,29829],{"class":52939},[34,137975,56878],{"class":3617},[34,137977,221],{"class":40},[34,137979,137776],{"class":504},[34,137981,94059],{"class":3617},[34,137983,137781],{"class":3617},[34,137985,137784],{"class":3617},[34,137987,137787],{"class":3617},[34,137989,56953],{"class":40},[34,137991,29829],{"class":52939},[34,137993,52946],{"class":40},[103,137995,137996],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1772,137998,137999],{"start":171},[1775,138000,138001],{},"常用属性",[109,138003],{"style":127771,"src":138004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[24,138006,138007],{"className":128662,"code":137761,"language":128664,"meta":29,"style":29},[31,138008,138009],{"__ignoreMap":29},[34,138010,138011,138013,138015,138017,138019,138021,138023,138025,138027,138029,138031,138033],{"class":36,"line":37},[34,138012,2701],{"class":40},[34,138014,29829],{"class":52939},[34,138016,56878],{"class":3617},[34,138018,221],{"class":40},[34,138020,137776],{"class":504},[34,138022,94059],{"class":3617},[34,138024,137781],{"class":3617},[34,138026,137784],{"class":3617},[34,138028,137787],{"class":3617},[34,138030,56953],{"class":40},[34,138032,29829],{"class":52939},[34,138034,52946],{"class":40},[103,138036,138037],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[1353,138039,138041],{"id":138040},"_14123-总结","14.1.2.3 总结",[2798,138043,138044,138047,138050,138053,138056],{},[1775,138045,138046],{},"音频标签和视频标签使用方式基本一致",[1775,138048,138049],{},"浏览器支持情况不同",[1775,138051,138052],{},"谷歌浏览器把音频和视频自动播放禁止了",[1775,138054,138055],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[1775,138057,138058],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[19,138060,138062],{"id":138061},"_1413-表单元素","14.1.3 表单元素",[1353,138064,138066],{"id":138065},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[109,138068],{"style":127771,"src":138069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[24,138071,138073],{"className":128662,"code":138072,"language":128664,"meta":29,"style":29},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[31,138074,138075],{"__ignoreMap":29},[34,138076,138077,138079,138081,138083,138085,138087,138089,138091,138094,138096,138098,138101],{"class":36,"line":37},[34,138078,2701],{"class":40},[34,138080,55460],{"class":52939},[34,138082,55463],{"class":3617},[34,138084,221],{"class":40},[34,138086,64338],{"class":504},[34,138088,16566],{"class":3617},[34,138090,221],{"class":40},[34,138092,138093],{"class":504},"\"username\"",[34,138095,62659],{"class":3617},[34,138097,221],{"class":40},[34,138099,138100],{"class":504},"\"请输入用户名\"",[34,138102,52946],{"class":40},[109,138104],{"style":127771,"src":138105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[1353,138107,138109],{"id":138108},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[109,138111],{"style":127771,"src":138112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[103,138114,138115],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[103,138117,138118],{},"快捷操作：",[109,138120],{"style":127771,"src":138121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[103,138123,138124],{},"例子1：",[24,138126,138128],{"className":128662,"code":138127,"language":128664,"meta":29,"style":29},"\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",[31,138129,138130,138153,138180,138209,138228],{"__ignoreMap":29},[34,138131,138132,138134,138136,138138,138140,138143,138146,138148,138151],{"class":36,"line":37},[34,138133,2701],{"class":40},[34,138135,68264],{"class":52939},[34,138137,68267],{"class":3617},[34,138139,221],{"class":40},[34,138141,138142],{"class":504},"\"\u002Fsubmit\"",[34,138144,138145],{"class":3617}," method",[34,138147,221],{"class":40},[34,138149,138150],{"class":504},"\"post\"",[34,138152,52946],{"class":40},[34,138154,138155,138157,138159,138161,138163,138165,138167,138169,138171,138173,138175,138178],{"class":36,"line":165},[34,138156,53783],{"class":40},[34,138158,55460],{"class":52939},[34,138160,55463],{"class":3617},[34,138162,221],{"class":40},[34,138164,64338],{"class":504},[34,138166,16566],{"class":3617},[34,138168,221],{"class":40},[34,138170,138093],{"class":504},[34,138172,62659],{"class":3617},[34,138174,221],{"class":40},[34,138176,138177],{"class":504},"\"用户名\"",[34,138179,52946],{"class":40},[34,138181,138182,138184,138186,138188,138190,138193,138195,138197,138200,138202,138204,138207],{"class":36,"line":171},[34,138183,53783],{"class":40},[34,138185,55460],{"class":52939},[34,138187,55463],{"class":3617},[34,138189,221],{"class":40},[34,138191,138192],{"class":504},"\"password\"",[34,138194,16566],{"class":3617},[34,138196,221],{"class":40},[34,138198,138199],{"class":504},"\"pwd\"",[34,138201,62659],{"class":3617},[34,138203,221],{"class":40},[34,138205,138206],{"class":504},"\"密码\"",[34,138208,52946],{"class":40},[34,138210,138211,138213,138215,138217,138219,138221,138224,138226],{"class":36,"line":182},[34,138212,53783],{"class":40},[34,138214,55526],{"class":52939},[34,138216,55463],{"class":3617},[34,138218,221],{"class":40},[34,138220,68287],{"class":504},[34,138222,138223],{"class":40},">提交\u003C\u002F",[34,138225,55526],{"class":52939},[34,138227,52946],{"class":40},[34,138229,138230,138232,138234],{"class":36,"line":188},[34,138231,53424],{"class":40},[34,138233,68264],{"class":52939},[34,138235,52946],{"class":40},[109,138237],{"style":127771,"src":138238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[103,138240,138241],{},"value是表单域的内容",[103,138243,138244],{},"例子2：",[24,138246,138247],{"className":128662,"code":138127,"language":128664,"meta":29,"style":29},[31,138248,138249,138269,138295,138321,138339],{"__ignoreMap":29},[34,138250,138251,138253,138255,138257,138259,138261,138263,138265,138267],{"class":36,"line":37},[34,138252,2701],{"class":40},[34,138254,68264],{"class":52939},[34,138256,68267],{"class":3617},[34,138258,221],{"class":40},[34,138260,138142],{"class":504},[34,138262,138145],{"class":3617},[34,138264,221],{"class":40},[34,138266,138150],{"class":504},[34,138268,52946],{"class":40},[34,138270,138271,138273,138275,138277,138279,138281,138283,138285,138287,138289,138291,138293],{"class":36,"line":165},[34,138272,53783],{"class":40},[34,138274,55460],{"class":52939},[34,138276,55463],{"class":3617},[34,138278,221],{"class":40},[34,138280,64338],{"class":504},[34,138282,16566],{"class":3617},[34,138284,221],{"class":40},[34,138286,138093],{"class":504},[34,138288,62659],{"class":3617},[34,138290,221],{"class":40},[34,138292,138177],{"class":504},[34,138294,52946],{"class":40},[34,138296,138297,138299,138301,138303,138305,138307,138309,138311,138313,138315,138317,138319],{"class":36,"line":171},[34,138298,53783],{"class":40},[34,138300,55460],{"class":52939},[34,138302,55463],{"class":3617},[34,138304,221],{"class":40},[34,138306,138192],{"class":504},[34,138308,16566],{"class":3617},[34,138310,221],{"class":40},[34,138312,138199],{"class":504},[34,138314,62659],{"class":3617},[34,138316,221],{"class":40},[34,138318,138206],{"class":504},[34,138320,52946],{"class":40},[34,138322,138323,138325,138327,138329,138331,138333,138335,138337],{"class":36,"line":182},[34,138324,53783],{"class":40},[34,138326,55526],{"class":52939},[34,138328,55463],{"class":3617},[34,138330,221],{"class":40},[34,138332,68287],{"class":504},[34,138334,138223],{"class":40},[34,138336,55526],{"class":52939},[34,138338,52946],{"class":40},[34,138340,138341,138343,138345],{"class":36,"line":188},[34,138342,53424],{"class":40},[34,138344,68264],{"class":52939},[34,138346,52946],{"class":40},[109,138348],{"style":127771,"src":138349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138351,138353],{"id":138352},"_142-css新特性","14.2 CSS新特性",[19,138355,138357],{"id":138356},"_1421-新增选择器","14.2.1 新增选择器",[1353,138359,138361],{"id":138360},"_14211-属性选择器","14.2.1.1 属性选择器",[109,138363],{"style":127771,"src":138364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[24,138366,138368],{"className":127915,"code":138367,"language":127917,"meta":29,"style":29},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[31,138369,138370,138385,138401],{"__ignoreMap":29},[34,138371,138372,138374,138376,138378,138380,138382],{"class":36,"line":37},[34,138373,55460],{"class":52939},[34,138375,2681],{"class":40},[34,138377,104470],{"class":3617},[34,138379,221],{"class":55},[34,138381,64338],{"class":504},[34,138383,138384],{"class":40},"] {\n",[34,138386,138387,138389,138391,138393,138395,138397,138399],{"class":36,"line":165},[34,138388,72535],{"class":44},[34,138390,53076],{"class":40},[34,138392,394],{"class":44},[34,138394,53131],{"class":55},[34,138396,53160],{"class":44},[34,138398,131495],{"class":44},[34,138400,2952],{"class":40},[34,138402,138403],{"class":36,"line":171},[34,138404,3223],{"class":40},[109,138406],{"style":127771,"src":138407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[103,138409,1847],{},[2798,138411,138412,138415,138418,138421],{},[1775,138413,138414],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[1775,138416,138417],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[1775,138419,138420],{},"属性选择器也可以选择出来自定义的属性",[1775,138422,138423,138425],{},[1165,138424,10675],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[1353,138427,138429],{"id":138428},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[109,138431],{"style":127771,"src":138432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[1772,138434,138435],{},[1775,138436,138437],{},"fist-child",[24,138439,138441],{"className":127915,"code":138440,"language":127917,"meta":29,"style":29},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[31,138442,138443,138448,138463,138483,138501],{"__ignoreMap":29},[34,138444,138445],{"class":36,"line":37},[34,138446,138447],{"class":161},"\u002F* 属性选择器 *\u002F\n",[34,138449,138450,138452,138454,138456,138458,138460],{"class":36,"line":165},[34,138451,55460],{"class":52939},[34,138453,2681],{"class":40},[34,138455,104470],{"class":3617},[34,138457,221],{"class":55},[34,138459,64338],{"class":504},[34,138461,138462],{"class":40},"] { }\n",[34,138464,138465,138467,138469,138471,138474,138477,138480],{"class":36,"line":171},[34,138466,55460],{"class":52939},[34,138468,2681],{"class":40},[34,138470,16340],{"class":3617},[34,138472,138473],{"class":55},"^=",[34,138475,138476],{"class":504},"\"icon\"",[34,138478,138479],{"class":40},"] { }  ",[34,138481,138482],{"class":161},"\u002F* 以 icon 开头 *\u002F\n",[34,138484,138485,138487,138489,138491,138494,138496,138498],{"class":36,"line":182},[34,138486,55460],{"class":52939},[34,138488,2681],{"class":40},[34,138490,16340],{"class":3617},[34,138492,138493],{"class":55},"$=",[34,138495,138476],{"class":504},[34,138497,138479],{"class":40},[34,138499,138500],{"class":161},"\u002F* 以 icon 结尾 *\u002F\n",[34,138502,138503,138505,138507,138509,138512,138514,138516],{"class":36,"line":188},[34,138504,55460],{"class":52939},[34,138506,2681],{"class":40},[34,138508,16340],{"class":3617},[34,138510,138511],{"class":55},"*=",[34,138513,138476],{"class":504},[34,138515,138479],{"class":40},[34,138517,138518],{"class":161},"\u002F* 包含 icon *\u002F\n",[103,138520,138521],{},"ul的第一个儿子文本为红色",[103,138523,138524],{},"一定要在冒号前加空格，不然就是选中所有的了",[24,138526,138528],{"className":127915,"code":138527,"language":127917,"meta":29,"style":29},".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",[31,138529,138530,138536,138546,138550,138554,138559,138572,138585,138601,138618,138635],{"__ignoreMap":29},[34,138531,138532,138534],{"class":36,"line":37},[34,138533,128206],{"class":3617},[34,138535,17218],{"class":40},[34,138537,138538,138540,138542,138544],{"class":36,"line":165},[34,138539,72544],{"class":44},[34,138541,53076],{"class":40},[34,138543,59060],{"class":44},[34,138545,2952],{"class":40},[34,138547,138548],{"class":36,"line":171},[34,138549,3223],{"class":40},[34,138551,138552],{"class":36,"line":182},[34,138553,137376],{"class":40},[34,138555,138556],{"class":36,"line":188},[34,138557,138558],{"class":161},"\u002F* 结构伪类选择器 *\u002F\n",[34,138560,138561,138563,138566,138569],{"class":36,"line":518},[34,138562,1775],{"class":52939},[34,138564,138565],{"class":3617},":first-child",[34,138567,138568],{"class":40}," { }           ",[34,138570,138571],{"class":161},"\u002F* 第一个 *\u002F\n",[34,138573,138574,138576,138579,138582],{"class":36,"line":524},[34,138575,1775],{"class":52939},[34,138577,138578],{"class":3617},":last-child",[34,138580,138581],{"class":40}," { }            ",[34,138583,138584],{"class":161},"\u002F* 最后一个 *\u002F\n",[34,138586,138587,138589,138591,138593,138595,138598],{"class":36,"line":530},[34,138588,1775],{"class":52939},[34,138590,130829],{"class":3617},[34,138592,286],{"class":40},[34,138594,332],{"class":44},[34,138596,138597],{"class":40},") { }          ",[34,138599,138600],{"class":161},"\u002F* 第2个 *\u002F\n",[34,138602,138603,138605,138607,138609,138612,138615],{"class":36,"line":624},[34,138604,1775],{"class":52939},[34,138606,130829],{"class":3617},[34,138608,286],{"class":40},[34,138610,138611],{"class":44},"2n",[34,138613,138614],{"class":40},") { }         ",[34,138616,138617],{"class":161},"\u002F* 偶数 *\u002F\n",[34,138619,138620,138622,138624,138626,138629,138632],{"class":36,"line":630},[34,138621,1775],{"class":52939},[34,138623,130829],{"class":3617},[34,138625,286],{"class":40},[34,138627,138628],{"class":44},"2n+1",[34,138630,138631],{"class":40},") { }       ",[34,138633,138634],{"class":161},"\u002F* 奇数 *\u002F\n",[34,138636,138637,138639,138641,138643,138646,138648],{"class":36,"line":636},[34,138638,1775],{"class":52939},[34,138640,130829],{"class":3617},[34,138642,286],{"class":40},[34,138644,138645],{"class":44},"-n+3",[34,138647,138631],{"class":40},[34,138649,138650],{"class":161},"\u002F* 前3个 *\u002F\n",[53250,138652,138655],{"className":138653},[138654],"example","\n  示例内容\n",[103,138657,138658],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[2798,138660,138661],{},[1775,138662,138663,138666],{},[31,138664,138665],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[103,138668,138669],{},"也就是说它选择的是熊大",[1772,138671,138672],{"start":518},[1775,138673,138674],{},"权重",[24,138676,138678],{"className":127915,"code":138677,"language":127917,"meta":29,"style":29},"\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",[31,138679,138680,138684,138694,138704,138718,138732,138746],{"__ignoreMap":29},[34,138681,138682],{"class":36,"line":37},[34,138683,138558],{"class":161},[34,138685,138686,138688,138690,138692],{"class":36,"line":165},[34,138687,1775],{"class":52939},[34,138689,138565],{"class":3617},[34,138691,138568],{"class":40},[34,138693,138571],{"class":161},[34,138695,138696,138698,138700,138702],{"class":36,"line":171},[34,138697,1775],{"class":52939},[34,138699,138578],{"class":3617},[34,138701,138581],{"class":40},[34,138703,138584],{"class":161},[34,138705,138706,138708,138710,138712,138714,138716],{"class":36,"line":182},[34,138707,1775],{"class":52939},[34,138709,130829],{"class":3617},[34,138711,286],{"class":40},[34,138713,332],{"class":44},[34,138715,138597],{"class":40},[34,138717,138600],{"class":161},[34,138719,138720,138722,138724,138726,138728,138730],{"class":36,"line":188},[34,138721,1775],{"class":52939},[34,138723,130829],{"class":3617},[34,138725,286],{"class":40},[34,138727,138611],{"class":44},[34,138729,138614],{"class":40},[34,138731,138617],{"class":161},[34,138733,138734,138736,138738,138740,138742,138744],{"class":36,"line":518},[34,138735,1775],{"class":52939},[34,138737,130829],{"class":3617},[34,138739,286],{"class":40},[34,138741,138628],{"class":44},[34,138743,138631],{"class":40},[34,138745,138634],{"class":161},[34,138747,138748,138750,138752,138754,138756,138758],{"class":36,"line":524},[34,138749,1775],{"class":52939},[34,138751,130829],{"class":3617},[34,138753,286],{"class":40},[34,138755,138645],{"class":44},[34,138757,138631],{"class":40},[34,138759,138650],{"class":161},[103,138761,138762],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[1353,138764,138766],{"id":138765},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[103,138768,138769],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[109,138771],{"style":127771,"src":138772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[1772,138774,138775],{},[1775,138776,1847],{},[2798,138778,138779,138782,138785,138788,138791,138794],{},[1775,138780,138781],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[1775,138783,138784],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[1775,138786,138787],{},"语法： element::before {}",[1775,138789,138790],{},"before 和 after 必须有 content 属性",[1775,138792,138793],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[1775,138795,138796],{},"伪元素选择器和标签选择器一样，权重为 1",[1772,138798,138799],{"start":165},[1775,138800,138801],{},"实例",[24,138803,138804],{"className":127915,"code":138677,"language":127917,"meta":29,"style":29},[31,138805,138806,138810,138820,138830,138844,138858,138872],{"__ignoreMap":29},[34,138807,138808],{"class":36,"line":37},[34,138809,138558],{"class":161},[34,138811,138812,138814,138816,138818],{"class":36,"line":165},[34,138813,1775],{"class":52939},[34,138815,138565],{"class":3617},[34,138817,138568],{"class":40},[34,138819,138571],{"class":161},[34,138821,138822,138824,138826,138828],{"class":36,"line":171},[34,138823,1775],{"class":52939},[34,138825,138578],{"class":3617},[34,138827,138581],{"class":40},[34,138829,138584],{"class":161},[34,138831,138832,138834,138836,138838,138840,138842],{"class":36,"line":182},[34,138833,1775],{"class":52939},[34,138835,130829],{"class":3617},[34,138837,286],{"class":40},[34,138839,332],{"class":44},[34,138841,138597],{"class":40},[34,138843,138600],{"class":161},[34,138845,138846,138848,138850,138852,138854,138856],{"class":36,"line":188},[34,138847,1775],{"class":52939},[34,138849,130829],{"class":3617},[34,138851,286],{"class":40},[34,138853,138611],{"class":44},[34,138855,138614],{"class":40},[34,138857,138617],{"class":161},[34,138859,138860,138862,138864,138866,138868,138870],{"class":36,"line":518},[34,138861,1775],{"class":52939},[34,138863,130829],{"class":3617},[34,138865,286],{"class":40},[34,138867,138628],{"class":44},[34,138869,138631],{"class":40},[34,138871,138634],{"class":161},[34,138873,138874,138876,138878,138880,138882,138884],{"class":36,"line":524},[34,138875,1775],{"class":52939},[34,138877,130829],{"class":3617},[34,138879,286],{"class":40},[34,138881,138645],{"class":44},[34,138883,138631],{"class":40},[34,138885,138650],{"class":161},[109,138887],{"style":127771,"src":138888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[1772,138890,138891],{"start":171},[1775,138892,138893],{},"使用场景1",[109,138895],{"style":127771,"src":138896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[103,138898,138899],{},"不需要再加盒子来整红色那部分了",[24,138901,138903],{"className":127915,"code":138902,"language":127917,"meta":29,"style":29},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[31,138904,138905,138910,138919,138930,138940,138944,138953,138964,138974],{"__ignoreMap":29},[34,138906,138907],{"class":36,"line":37},[34,138908,138909],{"class":161},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[34,138911,138912,138914,138917],{"class":36,"line":165},[34,138913,53250],{"class":52939},[34,138915,138916],{"class":3617},"::before",[34,138918,17218],{"class":40},[34,138920,138921,138924,138926,138928],{"class":36,"line":171},[34,138922,138923],{"class":44},"  content",[34,138925,53076],{"class":40},[34,138927,9302],{"class":504},[34,138929,2952],{"class":40},[34,138931,138932,138934,138936,138938],{"class":36,"line":182},[34,138933,129531],{"class":44},[34,138935,53076],{"class":40},[34,138937,62508],{"class":44},[34,138939,2952],{"class":40},[34,138941,138942],{"class":36,"line":188},[34,138943,3223],{"class":40},[34,138945,138946,138948,138951],{"class":36,"line":518},[34,138947,53250],{"class":52939},[34,138949,138950],{"class":3617},"::after",[34,138952,17218],{"class":40},[34,138954,138955,138957,138959,138962],{"class":36,"line":524},[34,138956,138923],{"class":44},[34,138958,53076],{"class":40},[34,138960,138961],{"class":504},"\"→\"",[34,138963,2952],{"class":40},[34,138965,138966,138968,138970,138972],{"class":36,"line":530},[34,138967,72544],{"class":44},[34,138969,53076],{"class":40},[34,138971,63709],{"class":44},[34,138973,2952],{"class":40},[34,138975,138976],{"class":36,"line":624},[34,138977,3223],{"class":40},[109,138979],{"style":127771,"src":138980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[103,138982,138983],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[109,138985],{"style":127771,"src":138986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[103,138988,138989],{},"但是在引用时需要先转义一下",[103,138991,138992],{},"content='\\e930'",[1772,138994,138995],{"start":182},[1775,138996,138997],{},"使用场景2",[103,138999,139000],{},"仿土豆效果",[103,139002,139003],{},"通过使用伪元素选择器可以减少body中盒子的数量",[24,139005,139006],{"className":127915,"code":138902,"language":127917,"meta":29,"style":29},[31,139007,139008,139012,139020,139030,139040,139044,139052,139062,139072],{"__ignoreMap":29},[34,139009,139010],{"class":36,"line":37},[34,139011,138909],{"class":161},[34,139013,139014,139016,139018],{"class":36,"line":165},[34,139015,53250],{"class":52939},[34,139017,138916],{"class":3617},[34,139019,17218],{"class":40},[34,139021,139022,139024,139026,139028],{"class":36,"line":171},[34,139023,138923],{"class":44},[34,139025,53076],{"class":40},[34,139027,9302],{"class":504},[34,139029,2952],{"class":40},[34,139031,139032,139034,139036,139038],{"class":36,"line":182},[34,139033,129531],{"class":44},[34,139035,53076],{"class":40},[34,139037,62508],{"class":44},[34,139039,2952],{"class":40},[34,139041,139042],{"class":36,"line":188},[34,139043,3223],{"class":40},[34,139045,139046,139048,139050],{"class":36,"line":518},[34,139047,53250],{"class":52939},[34,139049,138950],{"class":3617},[34,139051,17218],{"class":40},[34,139053,139054,139056,139058,139060],{"class":36,"line":524},[34,139055,138923],{"class":44},[34,139057,53076],{"class":40},[34,139059,138961],{"class":504},[34,139061,2952],{"class":40},[34,139063,139064,139066,139068,139070],{"class":36,"line":530},[34,139065,72544],{"class":44},[34,139067,53076],{"class":40},[34,139069,63709],{"class":44},[34,139071,2952],{"class":40},[34,139073,139074],{"class":36,"line":624},[34,139075,3223],{"class":40},[109,139077],{"style":127771,"src":139078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[1772,139080,139081],{"start":188},[1775,139082,139083],{},"使用场景3",[103,139085,139086],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[24,139088,139090],{"className":127915,"code":139089,"language":127917,"meta":29,"style":29},".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",[31,139091,139092,139098,139108,139112,139116,139120,139128,139138,139148,139152,139160,139170,139180],{"__ignoreMap":29},[34,139093,139094,139096],{"class":36,"line":37},[34,139095,131763],{"class":3617},[34,139097,17218],{"class":40},[34,139099,139100,139102,139104,139106],{"class":36,"line":165},[34,139101,132395],{"class":44},[34,139103,53076],{"class":40},[34,139105,25381],{"class":44},[34,139107,2952],{"class":40},[34,139109,139110],{"class":36,"line":171},[34,139111,3223],{"class":40},[34,139113,139114],{"class":36,"line":182},[34,139115,137376],{"class":40},[34,139117,139118],{"class":36,"line":188},[34,139119,138909],{"class":161},[34,139121,139122,139124,139126],{"class":36,"line":518},[34,139123,53250],{"class":52939},[34,139125,138916],{"class":3617},[34,139127,17218],{"class":40},[34,139129,139130,139132,139134,139136],{"class":36,"line":524},[34,139131,138923],{"class":44},[34,139133,53076],{"class":40},[34,139135,9302],{"class":504},[34,139137,2952],{"class":40},[34,139139,139140,139142,139144,139146],{"class":36,"line":530},[34,139141,129531],{"class":44},[34,139143,53076],{"class":40},[34,139145,62508],{"class":44},[34,139147,2952],{"class":40},[34,139149,139150],{"class":36,"line":624},[34,139151,3223],{"class":40},[34,139153,139154,139156,139158],{"class":36,"line":630},[34,139155,53250],{"class":52939},[34,139157,138950],{"class":3617},[34,139159,17218],{"class":40},[34,139161,139162,139164,139166,139168],{"class":36,"line":636},[34,139163,138923],{"class":44},[34,139165,53076],{"class":40},[34,139167,138961],{"class":504},[34,139169,2952],{"class":40},[34,139171,139172,139174,139176,139178],{"class":36,"line":1513},[34,139173,72544],{"class":44},[34,139175,53076],{"class":40},[34,139177,63709],{"class":44},[34,139179,2952],{"class":40},[34,139181,139182],{"class":36,"line":1519},[34,139183,3223],{"class":40},[103,139185,139186],{},"div {\nmargin: 0 auto;\n}",[24,139188,139191],{"className":139189,"code":139190,"language":6838},[6836],"\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",[31,139192,139190],{"__ignoreMap":29},[103,139194,139195],{},"如果想让多个元素都发生变化",[103,139197,139198],{},"不能如下操作：",[103,139200,139201],{},"transition: width 2s ease 0.5s;",[103,139203,139204],{},"transition: height 2s ease 0.5s;不对！！！",[103,139206,139207],{},"上方会样式冲突，导致不显示任何过渡效果",[103,139209,139210],{},"使用如下：加逗号隔开",[103,139212,139213],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[103,139215,139216],{},"transition all 2s ease;",[19,139218,139220],{"id":139219},"_1426-过渡练习","14.2.6 过渡练习",[1772,139222,139223],{},[1775,139224,139225],{},"进度条",[109,139227],{"style":127771,"src":139228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[24,139230,139232],{"className":127915,"code":139231,"language":127917,"meta":29,"style":29},"div {\n  transition: all 0.3s ease;\n}\n",[31,139233,139234,139240,139258],{"__ignoreMap":29},[34,139235,139236,139238],{"class":36,"line":37},[34,139237,53250],{"class":52939},[34,139239,17218],{"class":40},[34,139241,139242,139245,139247,139249,139252,139254,139256],{"class":36,"line":165},[34,139243,139244],{"class":44},"  transition",[34,139246,53076],{"class":40},[34,139248,29767],{"class":44},[34,139250,139251],{"class":44}," 0.3",[34,139253,2490],{"class":55},[34,139255,80317],{"class":44},[34,139257,2952],{"class":40},[34,139259,139260],{"class":36,"line":171},[34,139261,3223],{"class":40},[1772,139263,139264],{"start":165},[1775,139265,139266],{},"小米logo",[103,139268,139269],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[24,139271,139273],{"className":127915,"code":139272,"language":127917,"meta":29,"style":29},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[31,139274,139275,139280,139286,139302,139307],{"__ignoreMap":29},[34,139276,139277],{"class":36,"line":37},[34,139278,139279],{"class":161},"\u002F* CSS3 过渡 *\u002F\n",[34,139281,139282,139284],{"class":36,"line":165},[34,139283,53250],{"class":52939},[34,139285,17218],{"class":40},[34,139287,139288,139290,139292,139294,139296,139298,139300],{"class":36,"line":171},[34,139289,139244],{"class":44},[34,139291,53076],{"class":40},[34,139293,29767],{"class":44},[34,139295,139251],{"class":44},[34,139297,2490],{"class":55},[34,139299,80317],{"class":44},[34,139301,2952],{"class":40},[34,139303,139304],{"class":36,"line":182},[34,139305,139306],{"class":161},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[34,139308,139309],{"class":36,"line":188},[34,139310,3223],{"class":40},[103,139312,139313],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1711,139315,139316],{},"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":29,"searchDepth":165,"depth":165,"links":139318},[139319,139324],{"id":137649,"depth":165,"text":137650,"children":139320},[139321,139322,139323],{"id":137653,"depth":171,"text":137654},{"id":137730,"depth":171,"text":137731},{"id":138061,"depth":171,"text":138062},{"id":138352,"depth":165,"text":138353,"children":139325},[139326,139327],{"id":138356,"depth":171,"text":138357},{"id":139219,"depth":171,"text":139220},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137641,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139334,"title":139335,"body":139336,"description":1744,"extension":1745,"meta":141080,"navigation":1474,"path":141081,"seo":141082,"stem":141083,"__hash__":141084},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139337,"toc":141061},[139338,139341,139345,139348,139354,139360,139364,139366,139369,139372,139375,139378,139381,139384,139387,139391,139395,139398,139401,139404,139408,139411,139414,139419,139422,139425,139428,139432,139435,139444,139447,139450,139454,139457,139460,139465,139472,139486,139494,139501,139506,139509,139512,139515,139522,139526,139532,139538,139541,139544,139549,139555,139557,139565,139570,139573,139579,139581,139586,139591,139594,139596,139601,139604,139609,139614,139648,139652,139656,139659,139663,139666,139752,139755,139792,139795,139831,139835,139840,139853,139907,139909,139937,139939,139967,139973,139987,139989,140033,140035,140079,140082,140089,140100,140102,140129,140131,140157,140164,140180,140182,140276,140278,140372,140379,140382,140387,140393,140467,140470,140472,140508,140510,140546,140549,140556,140575,140578,140581,140583,140608,140610,140634,140637,140640,140670,140674,140677,140740,140742,140808,140810,140874,140877,140909,140911,140937,140939,140965,140968,140999,141001,141027,141029,141055,141058],[10,139339,139335],{"id":139340},"_15-品优购项目上篇-搭建与公共模块",[14,139342,139344],{"id":139343},"_151-项目规划","15.1 项目规划",[109,139346],{"style":127771,"src":139347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[103,139349,139350,139353],{},[1165,139351,139352],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[103,139355,139356,139359],{},[1165,139357,139358],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139361,139363],{"id":139362},"_152-项目介绍","15.2 项目介绍",[103,139365,139352],{},[109,139367],{"style":127771,"src":139368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[103,139370,139371],{},"主页：",[109,139373],{"style":127771,"src":139374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[103,139376,139377],{},"列表页：",[109,139379],{"style":127771,"src":139380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[103,139382,139383],{},"注册页：",[109,139385],{"style":127771,"src":139386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139388,139390],{"id":139389},"_153-项目搭建工作","15.3 项目搭建工作",[19,139392,139394],{"id":139393},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[109,139396],{"style":127771,"src":139397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[103,139399,139400],{},"经常更换的图片要放到upload文件夹中",[103,139402,139403],{},"不经常换的放到images文件夹中",[19,139405,139407],{"id":139406},"_1532-创建文件如下","15.3.2 创建文件如下",[109,139409],{"style":127771,"src":139410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[109,139412],{"style":127771,"src":139413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[103,139415,139416],{},[1165,139417,139418],{},"初始化样式：",[103,139420,139421],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[103,139423,139424],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[103,139426,139427],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[19,139429,139431],{"id":139430},"_1533-项目模块化开发","15.3.3 项目模块化开发",[103,139433,139434],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[103,139436,139437,139438,139443],{},"这里最典型的应用就是 ",[1165,139439,139440],{},[31,139441,139442],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[109,139445],{"style":127771,"src":139446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[103,139448,139449],{},"通过link方法来引入",[19,139451,139453],{"id":139452},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[109,139455],{"style":127771,"src":139456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[103,139458,139459],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[1772,139461,139462],{},[1775,139463,139464],{},"制作favicon图标",[103,139466,139467,139468,139471],{},"①把品优购图标切成 ",[31,139469,139470],{},"png"," 图片",[103,139473,139474,139475,139477,139478,139481,139482],{},"②把 ",[31,139476,139470],{}," 图片转换为 ",[31,139479,139480],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[236,139483,139484],{"href":139484,"rel":139485},"http:\u002F\u002Fwww.bitbug.net\u002F",[25510],[1772,139487,139488,139491],{"start":165},[1775,139489,139490],{},"favicon图标放到网站根目录下",[1775,139492,139493],{},"HTML页面引入favicon",[103,139495,139496,139497,139500],{},"在html 页面里面的 ",[31,139498,139499],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[103,139502,139503],{},[31,139504,139505],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[103,139507,139508],{},"复制这行代码或者在生成这个的网站进行复制",[109,139510],{"style":127771,"src":139511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[103,139513,139514],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[103,139516,139517,139518],{},"例如:",[236,139519,139520],{"href":139520,"rel":139521},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25510],[19,139523,139525],{"id":139524},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[103,139527,139528,139531],{},[1165,139529,139530],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[103,139533,139534,139537],{},[1165,139535,139536],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[103,139539,139540],{},"页面必须有三个标签用来符合 SEO 优化",[109,139542],{"style":127771,"src":139543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[1772,139545,139546],{},[1775,139547,139548],{},"title网站标题",[103,139550,139551,139554],{},[1165,139552,139553],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[103,139556,70429],{},[2798,139558,139559,139562],{},[1775,139560,139561],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[1775,139563,139564],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[1772,139566,139567],{"start":165},[1775,139568,139569],{},"description网站描述",[103,139571,139572],{},"简要说明我们网站主要是做什么的",[103,139574,139575,139578],{},[1165,139576,139577],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[103,139580,70429],{},[103,139582,139583],{},[31,139584,139585],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[1772,139587,139588],{"start":171},[1775,139589,139590],{},"keywords关键词",[103,139592,139593],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[103,139595,70429],{},[103,139597,139598],{},[31,139599,139600],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[103,139602,139603],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[103,139605,139606],{},[1165,139607,139608],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[1772,139610,139611],{"start":182},[1775,139612,139613],{},"代码总结",[24,139615,139616],{"className":128662,"code":132019,"language":128664,"meta":29,"style":29},[31,139617,139618,139622,139636,139640],{"__ignoreMap":29},[34,139619,139620],{"class":36,"line":37},[34,139621,132026],{"class":161},[34,139623,139624,139626,139628,139630,139632,139634],{"class":36,"line":165},[34,139625,2701],{"class":40},[34,139627,53250],{"class":52939},[34,139629,55125],{"class":3617},[34,139631,221],{"class":40},[34,139633,132039],{"class":504},[34,139635,52946],{"class":40},[34,139637,139638],{"class":36,"line":171},[34,139639,132046],{"class":40},[34,139641,139642,139644,139646],{"class":36,"line":182},[34,139643,53424],{"class":40},[34,139645,53250],{"class":52939},[34,139647,52946],{"class":40},[14,139649,139651],{"id":139650},"_154-项目公共部分制作","15.4 项目公共部分制作",[19,139653,139655],{"id":139654},"_1541-常用模块类命名","15.4.1 常用模块类命名",[109,139657],{"style":127771,"src":139658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[19,139660,139662],{"id":139661},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[103,139664,139665],{},"布局思路：",[2798,139667,139668,139671,139674,139696,139729],{},[1775,139669,139670],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[1775,139672,139673],{},"里面包含版心的盒子",[1775,139675,139676,139677],{},"版心盒子里面包含 1 号左侧盒子左浮动",[2798,139678,139679,139687,139693],{},[1775,139680,139681,139682,23146,139684,139686],{},"1 号盒子 里面包含一个",[31,139683,2798],{},[31,139685,2798],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[1775,139688,139689,139690,139692],{},"里面的内容是水平排列，所以需要给",[31,139691,1775],{},"设置浮动",[1775,139694,139695],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[1775,139697,139698,139699],{},"版心盒子里面包含 2 号右侧盒子右浮动",[2798,139700,139701,139715,139720],{},[1775,139702,139703,139704,23146,139706,139708,139709,139711,139712,139714],{},"2 号盒子 里面包含一个",[31,139705,2798],{},[31,139707,2798],{},"包裹",[31,139710,1775],{},"，中间的",[31,139713,2712],{},"可以用样式去设置，也可以用字符 |",[1775,139716,139717,139718,139692],{},"里面内容水平排列，给",[31,139719,1775],{},[1775,139721,139722,139723,139725,139726,139728],{},"找到里面所有偶数的 ",[31,139724,1775],{}," 设置样式（偶数的 ",[31,139727,1775],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[1775,139730,139731,139732],{},"需要用到字体图标",[2798,139733,139734,139740,139743,139746,139749],{},[1775,139735,139736,139737],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[31,139738,139739],{},"arrow-icon",[1775,139741,139742],{},"先要引入字体图片的资源",[1775,139744,139745],{},"在样式里面利用 font-face 来进行声明",[1775,139747,139748],{},"在伪元素的 content属性设置 图标的编码",[1775,139750,139751],{},"给伪元素设置font-family属性",[103,139753,139754],{},"结构实例代码：",[24,139756,139758],{"className":127915,"code":139757,"language":127917,"meta":29,"style":29},"div::before {\n  content: \"\";\n  display: block;\n}\n",[31,139759,139760,139768,139778,139788],{"__ignoreMap":29},[34,139761,139762,139764,139766],{"class":36,"line":37},[34,139763,53250],{"class":52939},[34,139765,138916],{"class":3617},[34,139767,17218],{"class":40},[34,139769,139770,139772,139774,139776],{"class":36,"line":165},[34,139771,138923],{"class":44},[34,139773,53076],{"class":40},[34,139775,9302],{"class":504},[34,139777,2952],{"class":40},[34,139779,139780,139782,139784,139786],{"class":36,"line":171},[34,139781,129531],{"class":44},[34,139783,53076],{"class":40},[34,139785,62508],{"class":44},[34,139787,2952],{"class":40},[34,139789,139790],{"class":36,"line":182},[34,139791,3223],{"class":40},[103,139793,139794],{},"样式实例代码：",[24,139796,139797],{"className":127915,"code":139757,"language":127917,"meta":29,"style":29},[31,139798,139799,139807,139817,139827],{"__ignoreMap":29},[34,139800,139801,139803,139805],{"class":36,"line":37},[34,139802,53250],{"class":52939},[34,139804,138916],{"class":3617},[34,139806,17218],{"class":40},[34,139808,139809,139811,139813,139815],{"class":36,"line":165},[34,139810,138923],{"class":44},[34,139812,53076],{"class":40},[34,139814,9302],{"class":504},[34,139816,2952],{"class":40},[34,139818,139819,139821,139823,139825],{"class":36,"line":171},[34,139820,129531],{"class":44},[34,139822,53076],{"class":40},[34,139824,62508],{"class":44},[34,139826,2952],{"class":40},[34,139828,139829],{"class":36,"line":182},[34,139830,3223],{"class":40},[19,139832,139834],{"id":139833},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[2798,139836,139837],{},[1775,139838,139839],{},"header 盒子必须要有高度",[103,139841,139842,139843,139845,139846],{},"1 号盒子是 ",[31,139844,132927],{}," 标志定位，在正常开发过程中， ",[1165,139847,139848,139849,139852],{},"logo的布局其实是有讲究的，需要进行 ",[31,139850,139851],{},"logoSEO","的优化 （★★★）",[2798,139854,139855,139863,139871,139898],{},[1775,139856,139857,139859,139860,139862],{},[31,139858,132927],{}," 里面首先放一个 ",[31,139861,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[1775,139864,139865,139867,139868,139870],{},[31,139866,10],{}," 里面再放一个链接，可以返回首页的，把 ",[31,139869,132927],{}," 的背景图片给链接即可",[1775,139872,139873,139874],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[2798,139875,139876,139891],{},[1775,139877,139878,139879,139882,139883,139886,139887,139890],{},"方法1：",[31,139880,139881],{},"text-indent"," 移到盒子外面（",[31,139884,139885],{},"text-indent: -9999px",") ，然后 ",[31,139888,139889],{},"overflow:hidden"," ，淘宝的做法",[1775,139892,139893,139894,139897],{},"方法2：直接给 ",[31,139895,139896],{},"font-size: 0;"," 就看不到文字了，京东的做法",[1775,139899,139900,139901,139903,139904,139906],{},"最后给链接一个 ",[31,139902,53046],{}," 属性，这样鼠标放到 ",[31,139905,132927],{}," 上就可以看到提示文字了",[103,139908,139754],{},[24,139910,139911],{"className":128662,"code":133148,"language":128664,"meta":29,"style":29},[31,139912,139913],{"__ignoreMap":29},[34,139914,139915,139917,139919,139921,139923,139925,139927,139929,139931,139933,139935],{"class":36,"line":37},[34,139916,2701],{"class":40},[34,139918,236],{"class":52939},[34,139920,62696],{"class":3617},[34,139922,221],{"class":40},[34,139924,133163],{"class":504},[34,139926,133166],{"class":3617},[34,139928,221],{"class":40},[34,139930,133171],{"class":504},[34,139932,133174],{"class":40},[34,139934,236],{"class":52939},[34,139936,52946],{"class":40},[103,139938,139794],{},[24,139940,139941],{"className":128662,"code":133148,"language":128664,"meta":29,"style":29},[31,139942,139943],{"__ignoreMap":29},[34,139944,139945,139947,139949,139951,139953,139955,139957,139959,139961,139963,139965],{"class":36,"line":37},[34,139946,2701],{"class":40},[34,139948,236],{"class":52939},[34,139950,62696],{"class":3617},[34,139952,221],{"class":40},[34,139954,133163],{"class":504},[34,139956,133166],{"class":3617},[34,139958,221],{"class":40},[34,139960,133171],{"class":504},[34,139962,133174],{"class":40},[34,139964,236],{"class":52939},[34,139966,52946],{"class":40},[103,139968,139969,139970,139972],{},"2 号盒子是 ",[31,139971,132940],{}," 搜索模块定位",[2798,139974,139975,139978,139981,139984],{},[1775,139976,139977],{},"search盒子利用定位的方式放在对应的位置",[1775,139979,139980],{},"search盒子设置绝对定位，header盒子设置相对定位",[1775,139982,139983],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[1775,139985,139986],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[103,139988,139754],{},[24,139990,139991],{"className":127915,"code":133235,"language":127917,"meta":29,"style":29},[31,139992,139993,140015,140019,140029],{"__ignoreMap":29},[34,139994,139995,139997,139999,140001,140003,140005,140007,140009,140011,140013],{"class":36,"line":37},[34,139996,53250],{"class":52939},[34,139998,48],{"class":40},[34,140000,103],{"class":52939},[34,140002,48],{"class":40},[34,140004,10],{"class":52939},[34,140006,48],{"class":40},[34,140008,2798],{"class":52939},[34,140010,48],{"class":40},[34,140012,1775],{"class":52939},[34,140014,17218],{"class":40},[34,140016,140017],{"class":36,"line":165},[34,140018,133264],{"class":161},[34,140020,140021,140023,140025,140027],{"class":36,"line":171},[34,140022,129531],{"class":44},[34,140024,53076],{"class":40},[34,140026,62508],{"class":44},[34,140028,2952],{"class":40},[34,140030,140031],{"class":36,"line":182},[34,140032,3223],{"class":40},[103,140034,139794],{},[24,140036,140037],{"className":127915,"code":133235,"language":127917,"meta":29,"style":29},[31,140038,140039,140061,140065,140075],{"__ignoreMap":29},[34,140040,140041,140043,140045,140047,140049,140051,140053,140055,140057,140059],{"class":36,"line":37},[34,140042,53250],{"class":52939},[34,140044,48],{"class":40},[34,140046,103],{"class":52939},[34,140048,48],{"class":40},[34,140050,10],{"class":52939},[34,140052,48],{"class":40},[34,140054,2798],{"class":52939},[34,140056,48],{"class":40},[34,140058,1775],{"class":52939},[34,140060,17218],{"class":40},[34,140062,140063],{"class":36,"line":165},[34,140064,133264],{"class":161},[34,140066,140067,140069,140071,140073],{"class":36,"line":171},[34,140068,129531],{"class":44},[34,140070,53076],{"class":40},[34,140072,62508],{"class":44},[34,140074,2952],{"class":40},[34,140076,140077],{"class":36,"line":182},[34,140078,3223],{"class":40},[103,140080,140081],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[103,140083,140084,140085,140088],{},"3 号盒子是 ",[31,140086,140087],{},"hotwords"," 热词模块定位",[2798,140090,140091,140094,140097],{},[1775,140092,140093],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[1775,140095,140096],{},"给里面所有的a标签设置 左右10px的外边距",[1775,140098,140099],{},"给第一个a标签设置文字变红色（#c81623）",[103,140101,139754],{},[24,140103,140105],{"className":127915,"code":140104,"language":127917,"meta":29,"style":29},"div {\n  margin: 0 auto;\n}\n",[31,140106,140107,140113,140125],{"__ignoreMap":29},[34,140108,140109,140111],{"class":36,"line":37},[34,140110,53250],{"class":52939},[34,140112,17218],{"class":40},[34,140114,140115,140117,140119,140121,140123],{"class":36,"line":165},[34,140116,72109],{"class":44},[34,140118,53076],{"class":40},[34,140120,177],{"class":44},[34,140122,53195],{"class":44},[34,140124,2952],{"class":40},[34,140126,140127],{"class":36,"line":171},[34,140128,3223],{"class":40},[103,140130,139794],{},[24,140132,140133],{"className":127915,"code":140104,"language":127917,"meta":29,"style":29},[31,140134,140135,140141,140153],{"__ignoreMap":29},[34,140136,140137,140139],{"class":36,"line":37},[34,140138,53250],{"class":52939},[34,140140,17218],{"class":40},[34,140142,140143,140145,140147,140149,140151],{"class":36,"line":165},[34,140144,72109],{"class":44},[34,140146,53076],{"class":40},[34,140148,177],{"class":44},[34,140150,53195],{"class":44},[34,140152,2952],{"class":40},[34,140154,140155],{"class":36,"line":171},[34,140156,3223],{"class":40},[103,140158,140159,140160,140163],{},"4 号盒子是 ",[31,140161,140162],{},"shopcar"," 购物车模块",[2798,140165,140166,140171,140174,140177],{},[1775,140167,124698,140168,140170],{},[31,140169,140162],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[1775,140172,140173],{},"count 统计部分用绝对定位做",[1775,140175,140176],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[1775,140178,140179],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[103,140181,139754],{},[24,140183,140184],{"className":127915,"code":133347,"language":127917,"meta":29,"style":29},[31,140185,140186,140190,140204,140208,140222,140226,140240,140244,140258,140262],{"__ignoreMap":29},[34,140187,140188],{"class":36,"line":37},[34,140189,133354],{"class":161},[34,140191,140192,140194,140196,140198,140200,140202],{"class":36,"line":165},[34,140193,133359],{"class":3617},[34,140195,81444],{"class":40},[34,140197,130275],{"class":44},[34,140199,53076],{"class":40},[34,140201,133368],{"class":44},[34,140203,130845],{"class":40},[34,140205,140206],{"class":36,"line":171},[34,140207,133375],{"class":161},[34,140209,140210,140212,140214,140216,140218,140220],{"class":36,"line":182},[34,140211,133380],{"class":3617},[34,140213,81444],{"class":40},[34,140215,130275],{"class":44},[34,140217,53076],{"class":40},[34,140219,56403],{"class":44},[34,140221,130845],{"class":40},[34,140223,140224],{"class":36,"line":188},[34,140225,133395],{"class":161},[34,140227,140228,140230,140232,140234,140236,140238],{"class":36,"line":518},[34,140229,133400],{"class":3617},[34,140231,81444],{"class":40},[34,140233,130275],{"class":44},[34,140235,53076],{"class":40},[34,140237,56470],{"class":44},[34,140239,130845],{"class":40},[34,140241,140242],{"class":36,"line":524},[34,140243,133415],{"class":161},[34,140245,140246,140248,140250,140252,140254,140256],{"class":36,"line":530},[34,140247,133420],{"class":3617},[34,140249,81444],{"class":40},[34,140251,130275],{"class":44},[34,140253,53076],{"class":40},[34,140255,87869],{"class":44},[34,140257,130845],{"class":40},[34,140259,140260],{"class":36,"line":624},[34,140261,133435],{"class":161},[34,140263,140264,140266,140268,140270,140272,140274],{"class":36,"line":630},[34,140265,133440],{"class":3617},[34,140267,81444],{"class":40},[34,140269,130275],{"class":44},[34,140271,53076],{"class":40},[34,140273,133449],{"class":44},[34,140275,130845],{"class":40},[103,140277,139794],{},[24,140279,140280],{"className":127915,"code":133347,"language":127917,"meta":29,"style":29},[31,140281,140282,140286,140300,140304,140318,140322,140336,140340,140354,140358],{"__ignoreMap":29},[34,140283,140284],{"class":36,"line":37},[34,140285,133354],{"class":161},[34,140287,140288,140290,140292,140294,140296,140298],{"class":36,"line":165},[34,140289,133359],{"class":3617},[34,140291,81444],{"class":40},[34,140293,130275],{"class":44},[34,140295,53076],{"class":40},[34,140297,133368],{"class":44},[34,140299,130845],{"class":40},[34,140301,140302],{"class":36,"line":171},[34,140303,133375],{"class":161},[34,140305,140306,140308,140310,140312,140314,140316],{"class":36,"line":182},[34,140307,133380],{"class":3617},[34,140309,81444],{"class":40},[34,140311,130275],{"class":44},[34,140313,53076],{"class":40},[34,140315,56403],{"class":44},[34,140317,130845],{"class":40},[34,140319,140320],{"class":36,"line":188},[34,140321,133395],{"class":161},[34,140323,140324,140326,140328,140330,140332,140334],{"class":36,"line":518},[34,140325,133400],{"class":3617},[34,140327,81444],{"class":40},[34,140329,130275],{"class":44},[34,140331,53076],{"class":40},[34,140333,56470],{"class":44},[34,140335,130845],{"class":40},[34,140337,140338],{"class":36,"line":524},[34,140339,133415],{"class":161},[34,140341,140342,140344,140346,140348,140350,140352],{"class":36,"line":530},[34,140343,133420],{"class":3617},[34,140345,81444],{"class":40},[34,140347,130275],{"class":44},[34,140349,53076],{"class":40},[34,140351,87869],{"class":44},[34,140353,130845],{"class":40},[34,140355,140356],{"class":36,"line":624},[34,140357,133435],{"class":161},[34,140359,140360,140362,140364,140366,140368,140370],{"class":36,"line":630},[34,140361,133440],{"class":3617},[34,140363,81444],{"class":40},[34,140365,130275],{"class":44},[34,140367,53076],{"class":40},[34,140369,133449],{"class":44},[34,140371,130845],{"class":40},[19,140373,140375,140376,140378],{"id":140374},"_1544-nav导航模块制作","15.4.4 ",[31,140377,55352],{},"导航模块制作",[109,140380],{"style":127771,"src":140381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[103,140383,140384,140386],{},[31,140385,55352],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[103,140388,140389,140390],{},"1 号盒子左侧浮动，",[31,140391,140392],{},"dropdown",[2798,140394,140395,140405,140413,140419,140427,140437,140445,140456],{},[1775,140396,140397,140398,102381,140401,140404],{},"1号盒子有讲究，根据相关性 里面包含 ",[31,140399,140400],{},".dt",[31,140402,140403],{},".dd"," 两个盒子",[1775,140406,140407,140409,140410,140412],{},[31,140408,140400],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[31,140411,140403],{}," 挤到下面去了",[1775,140414,140415,140416,140418],{},"给 ",[31,140417,140403],{}," 盒子设置宽度 和 高度，以及背景颜色",[1775,140420,140415,140421,140423,140424,121600],{},[31,140422,140403],{}," 盒子里面定义 无序列表 （",[31,140425,140426],{},"ul > li > a",[1775,140428,140429,140430,140432,140433,140436],{},"每个 ",[31,140431,1775],{}," 都有一个高度（",[31,140434,140435],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[1775,140438,140415,140439,140441,140442,121600],{},[31,140440,1775],{}," 里面的a设置文字大小（",[31,140443,140444],{},"14px",[1775,140446,140415,140447,140449,140450,140452,140453,140455],{},[31,140448,1775],{}," 设置 ",[31,140451,129076],{},"，当鼠标移入的时候，让",[31,140454,1775],{},"的背景变成白色，让里面的文字变成红色",[1775,140457,140458,140460,140461,140463,140464,140466],{},[31,140459,1775],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[31,140462,1775],{},"的右侧，那么给",[31,140465,1775],{},"设置相对定位",[103,140468,140469],{},"一定要注意相关性",[103,140471,139754],{},[24,140473,140474],{"className":127915,"code":139757,"language":127917,"meta":29,"style":29},[31,140475,140476,140484,140494,140504],{"__ignoreMap":29},[34,140477,140478,140480,140482],{"class":36,"line":37},[34,140479,53250],{"class":52939},[34,140481,138916],{"class":3617},[34,140483,17218],{"class":40},[34,140485,140486,140488,140490,140492],{"class":36,"line":165},[34,140487,138923],{"class":44},[34,140489,53076],{"class":40},[34,140491,9302],{"class":504},[34,140493,2952],{"class":40},[34,140495,140496,140498,140500,140502],{"class":36,"line":171},[34,140497,129531],{"class":44},[34,140499,53076],{"class":40},[34,140501,62508],{"class":44},[34,140503,2952],{"class":40},[34,140505,140506],{"class":36,"line":182},[34,140507,3223],{"class":40},[103,140509,139794],{},[24,140511,140512],{"className":127915,"code":139757,"language":127917,"meta":29,"style":29},[31,140513,140514,140522,140532,140542],{"__ignoreMap":29},[34,140515,140516,140518,140520],{"class":36,"line":37},[34,140517,53250],{"class":52939},[34,140519,138916],{"class":3617},[34,140521,17218],{"class":40},[34,140523,140524,140526,140528,140530],{"class":36,"line":165},[34,140525,138923],{"class":44},[34,140527,53076],{"class":40},[34,140529,9302],{"class":504},[34,140531,2952],{"class":40},[34,140533,140534,140536,140538,140540],{"class":36,"line":171},[34,140535,129531],{"class":44},[34,140537,53076],{"class":40},[34,140539,62508],{"class":44},[34,140541,2952],{"class":40},[34,140543,140544],{"class":36,"line":182},[34,140545,3223],{"class":40},[103,140547,140548],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[103,140550,140551,140552,140555],{},"2 号盒子左侧浮动，",[31,140553,140554],{},"navitems"," 导航栏组",[2798,140557,140558,140563,140572],{},[1775,140559,140560,140561],{},"里面结构是 ",[31,140562,140426],{},[1775,140564,140565,140566,140568,140569,140571],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[31,140567,236],{},"左右的",[31,140570,32525],{},"把两侧撑开",[1775,140573,140574],{},"让文字垂直居中（行高等于高度）",[109,140576],{"style":127771,"src":140577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[103,140579,140580],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[103,140582,139754],{},[24,140584,140586],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},".box {\n  float: left;\n}\n",[31,140587,140588,140594,140604],{"__ignoreMap":29},[34,140589,140590,140592],{"class":36,"line":37},[34,140591,131763],{"class":3617},[34,140593,17218],{"class":40},[34,140595,140596,140598,140600,140602],{"class":36,"line":165},[34,140597,132395],{"class":44},[34,140599,53076],{"class":40},[34,140601,25381],{"class":44},[34,140603,2952],{"class":40},[34,140605,140606],{"class":36,"line":171},[34,140607,3223],{"class":40},[103,140609,139794],{},[24,140611,140612],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,140613,140614,140620,140630],{"__ignoreMap":29},[34,140615,140616,140618],{"class":36,"line":37},[34,140617,131763],{"class":3617},[34,140619,17218],{"class":40},[34,140621,140622,140624,140626,140628],{"class":36,"line":165},[34,140623,132395],{"class":44},[34,140625,53076],{"class":40},[34,140627,25381],{"class":44},[34,140629,2952],{"class":40},[34,140631,140632],{"class":36,"line":171},[34,140633,3223],{"class":40},[103,140635,140636],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[109,140638],{"style":127771,"src":140639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[24,140641,140642],{"className":127915,"code":132072,"language":127917,"meta":29,"style":29},[31,140643,140644,140650,140666],{"__ignoreMap":29},[34,140645,140646,140648],{"class":36,"line":37},[34,140647,53250],{"class":52939},[34,140649,17218],{"class":40},[34,140651,140652,140654,140656,140658,140660,140662,140664],{"class":36,"line":165},[34,140653,72535],{"class":44},[34,140655,53076],{"class":40},[34,140657,394],{"class":44},[34,140659,53131],{"class":55},[34,140661,53160],{"class":44},[34,140663,131307],{"class":44},[34,140665,2952],{"class":40},[34,140667,140668],{"class":36,"line":171},[34,140669,3223],{"class":40},[19,140671,140673],{"id":140672},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[109,140675],{"style":127771,"src":140676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[2798,140678,140679,140684,140689],{},[1775,140680,140681,140683],{},[31,140682,133118],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[1775,140685,140686,140688],{},[31,140687,133118],{}," 里面有一个大的版心",[1775,140690,140691,140692,140695,140696],{},"版心里面包含 1 号盒子，",[31,140693,140694],{},"mod_service"," 是服务模块，mod 是模块的意思",[2798,140697,140698,140703,140716,140732,140737],{},[1775,140699,140415,140700,140702],{},[31,140701,140694],{}," 设置高度（80px）和下边框",[1775,140704,140705,140706,140709,140710,140712,140713,140715],{},"在里面定义 ",[31,140707,140708],{},"ul > li"," ,每个",[31,140711,1775],{}," 宽度是300px 高度是 50px，给每个",[31,140714,1775],{},"设置35px的左内边距",[1775,140717,140718,140719,140721,140722,140724,140725,140727,140728,20056,140730,121600],{},"在每个",[31,140720,1775],{},"里面，放一个 ",[31,140723,24555],{},"（里面放图标），一个",[31,140726,53250],{},"（里面放",[31,140729,53250],{},[31,140731,103],{},[1775,140733,140415,140734,140736],{},[31,140735,24555],{},"设置浮动，让h5与这个div左右排列",[1775,140738,140739],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[103,140741,139754],{},[24,140743,140745],{"className":127915,"code":140744,"language":127917,"meta":29,"style":29},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[31,140746,140747,140753,140765,140777,140804],{"__ignoreMap":29},[34,140748,140749,140751],{"class":36,"line":37},[34,140750,135672],{"class":3617},[34,140752,17218],{"class":40},[34,140754,140755,140757,140759,140761,140763],{"class":36,"line":165},[34,140756,72207],{"class":44},[34,140758,53076],{"class":40},[34,140760,1249],{"class":44},[34,140762,53131],{"class":55},[34,140764,2952],{"class":40},[34,140766,140767,140769,140771,140773,140775],{"class":36,"line":171},[34,140768,72427],{"class":44},[34,140770,53076],{"class":40},[34,140772,1249],{"class":44},[34,140774,53131],{"class":55},[34,140776,2952],{"class":40},[34,140778,140779,140781,140783,140785,140787,140789,140791,140793,140796,140798,140800,140802],{"class":36,"line":182},[34,140780,72250],{"class":44},[34,140782,53076],{"class":40},[34,140784,63365],{"class":44},[34,140786,286],{"class":40},[34,140788,135711],{"class":51},[34,140790,372],{"class":40},[34,140792,63375],{"class":44},[34,140794,140795],{"class":44}," -10",[34,140797,53131],{"class":55},[34,140799,135730],{"class":44},[34,140801,53131],{"class":55},[34,140803,2952],{"class":40},[34,140805,140806],{"class":36,"line":188},[34,140807,3223],{"class":40},[103,140809,139794],{},[24,140811,140812],{"className":127915,"code":140744,"language":127917,"meta":29,"style":29},[31,140813,140814,140820,140832,140844,140870],{"__ignoreMap":29},[34,140815,140816,140818],{"class":36,"line":37},[34,140817,135672],{"class":3617},[34,140819,17218],{"class":40},[34,140821,140822,140824,140826,140828,140830],{"class":36,"line":165},[34,140823,72207],{"class":44},[34,140825,53076],{"class":40},[34,140827,1249],{"class":44},[34,140829,53131],{"class":55},[34,140831,2952],{"class":40},[34,140833,140834,140836,140838,140840,140842],{"class":36,"line":171},[34,140835,72427],{"class":44},[34,140837,53076],{"class":40},[34,140839,1249],{"class":44},[34,140841,53131],{"class":55},[34,140843,2952],{"class":40},[34,140845,140846,140848,140850,140852,140854,140856,140858,140860,140862,140864,140866,140868],{"class":36,"line":182},[34,140847,72250],{"class":44},[34,140849,53076],{"class":40},[34,140851,63365],{"class":44},[34,140853,286],{"class":40},[34,140855,135711],{"class":51},[34,140857,372],{"class":40},[34,140859,63375],{"class":44},[34,140861,140795],{"class":44},[34,140863,53131],{"class":55},[34,140865,135730],{"class":44},[34,140867,53131],{"class":55},[34,140869,2952],{"class":40},[34,140871,140872],{"class":36,"line":188},[34,140873,3223],{"class":40},[103,140875,140876],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[2798,140878,140879,140882,140888,140894,140906],{},[1775,140880,140881],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[1775,140883,140884,140885,121600],{},"里面的布局利用 自定义列表来实现（",[31,140886,140887],{},"dl > dt + dd",[1775,140889,140415,140890,140893],{},[31,140891,140892],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[1775,140895,140415,140896,140899,140900,20056,140902,140905],{},[31,140897,140898],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[31,140901,140898],{},[31,140903,140904],{},"dd","之间有些距离",[1775,140907,140908],{},"最后一个 dl 结构和样式不一样，需要单独设置",[103,140910,139754],{},[24,140912,140913],{"className":127915,"code":140104,"language":127917,"meta":29,"style":29},[31,140914,140915,140921,140933],{"__ignoreMap":29},[34,140916,140917,140919],{"class":36,"line":37},[34,140918,53250],{"class":52939},[34,140920,17218],{"class":40},[34,140922,140923,140925,140927,140929,140931],{"class":36,"line":165},[34,140924,72109],{"class":44},[34,140926,53076],{"class":40},[34,140928,177],{"class":44},[34,140930,53195],{"class":44},[34,140932,2952],{"class":40},[34,140934,140935],{"class":36,"line":171},[34,140936,3223],{"class":40},[103,140938,139794],{},[24,140940,140941],{"className":127915,"code":140104,"language":127917,"meta":29,"style":29},[31,140942,140943,140949,140961],{"__ignoreMap":29},[34,140944,140945,140947],{"class":36,"line":37},[34,140946,53250],{"class":52939},[34,140948,17218],{"class":40},[34,140950,140951,140953,140955,140957,140959],{"class":36,"line":165},[34,140952,72109],{"class":44},[34,140954,53076],{"class":40},[34,140956,177],{"class":44},[34,140958,53195],{"class":44},[34,140960,2952],{"class":40},[34,140962,140963],{"class":36,"line":171},[34,140964,3223],{"class":40},[103,140966,140967],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[2798,140969,140970,140979,140982,140993],{},[1775,140971,140972,140973,140975,140976,140978],{},"分为上下两块，上面是 ",[31,140974,133135],{}," 友情链接，下面是 ",[31,140977,133128],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[1775,140980,140981],{},"把内容分别复制到相应模块中",[1775,140983,140415,140984,140986,140987,140989,140990,140992],{},[31,140985,133135],{}," 设置 15px 的下外边距，给",[31,140988,133135],{}," 里面 的 ",[31,140991,236],{}," 标签设置 左右 3px 的外边距",[1775,140994,140995,140996,140998],{},"给",[31,140997,133128],{}," 设置 20px 的行高",[103,141000,139754],{},[24,141002,141003],{"className":127915,"code":140104,"language":127917,"meta":29,"style":29},[31,141004,141005,141011,141023],{"__ignoreMap":29},[34,141006,141007,141009],{"class":36,"line":37},[34,141008,53250],{"class":52939},[34,141010,17218],{"class":40},[34,141012,141013,141015,141017,141019,141021],{"class":36,"line":165},[34,141014,72109],{"class":44},[34,141016,53076],{"class":40},[34,141018,177],{"class":44},[34,141020,53195],{"class":44},[34,141022,2952],{"class":40},[34,141024,141025],{"class":36,"line":171},[34,141026,3223],{"class":40},[103,141028,139794],{},[24,141030,141031],{"className":127915,"code":140104,"language":127917,"meta":29,"style":29},[31,141032,141033,141039,141051],{"__ignoreMap":29},[34,141034,141035,141037],{"class":36,"line":37},[34,141036,53250],{"class":52939},[34,141038,17218],{"class":40},[34,141040,141041,141043,141045,141047,141049],{"class":36,"line":165},[34,141042,72109],{"class":44},[34,141044,53076],{"class":40},[34,141046,177],{"class":44},[34,141048,53195],{"class":44},[34,141050,2952],{"class":40},[34,141052,141053],{"class":36,"line":171},[34,141054,3223],{"class":40},[103,141056,141057],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1711,141059,141060],{},"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":29,"searchDepth":165,"depth":165,"links":141062},[141063,141064,141065,141072],{"id":139343,"depth":165,"text":139344},{"id":139362,"depth":165,"text":139363},{"id":139389,"depth":165,"text":139390,"children":141066},[141067,141068,141069,141070,141071],{"id":139393,"depth":171,"text":139394},{"id":139406,"depth":171,"text":139407},{"id":139430,"depth":171,"text":139431},{"id":139452,"depth":171,"text":139453},{"id":139524,"depth":171,"text":139525},{"id":139650,"depth":165,"text":139651,"children":141073},[141074,141075,141076,141077,141079],{"id":139654,"depth":171,"text":139655},{"id":139661,"depth":171,"text":139662},{"id":139833,"depth":171,"text":139834},{"id":140374,"depth":171,"text":141078},"15.4.4 nav导航模块制作",{"id":140672,"depth":171,"text":140673},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139335,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141086,"title":141087,"body":141088,"description":1744,"extension":1745,"meta":143490,"navigation":1474,"path":143491,"seo":143492,"stem":143493,"__hash__":143494},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141089,"toc":143467},[141090,141093,141097,141101,141113,141116,141119,141122,141133,141135,141159,141161,141185,141190,141193,141195,141231,141233,141269,141272,141277,141280,141283,141286,141316,141323,141326,141336,141338,141372,141375,141409,141415,141432,141434,141470,141472,141508,141513,141538,141540,141566,141568,141592,141599,141602,141666,141668,141710,141712,141752,141759,141764,141766,141796,141798,141828,141832,141835,141842,141854,141856,141882,141884,141908,141911,141913,141937,141943,141953,141955,141985,141987,142017,142024,142065,142067,142103,142105,142141,142145,142148,142151,142154,142160,142165,142168,142191,142194,142218,142221,142245,142250,142253,142256,142259,142262,142265,142339,142341,142371,142373,142403,142406,142409,142441,142445,142449,142463,142472,142475,142480,142482,142576,142578,142672,142695,142697,142721,142723,142747,142754,142757,142767,142769,142793,142798,142806,142808,142838,142843,142883,142885,142911,142913,142939,142943,142946,142951,142954,142958,142966,142973,142981,142983,143013,143015,143045,143053,143056,143059,143061,143091,143093,143123,143126,143131,143133,143157,143159,143183,143186,143271,143273,143297,143299,143323,143327,143329,143353,143355,143389,143393,143407,143410,143415,143418,143423,143426,143456,143464],[10,141091,141087],{"id":141092},"_16-品优购项目下篇-主体与页面开发",[14,141094,141096],{"id":141095},"_161-项目主体模块制作","16.1 项目主体模块制作",[19,141098,141100],{"id":141099},"_1611-首页制作","16.1.1 首页制作",[103,141102,141103,141105,141106,141108,141109,141112],{},[1165,141104,103421],{}," 主体模块是 ",[1165,141107,75697],{}," 里面专有的，注意需要新的样式文件 ",[1165,141110,141111],{},"index.css，"," 就不要写在common.css中了",[109,141114],{"style":127771,"src":141115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[109,141117],{"style":127771,"src":141118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[103,141120,141121],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[2798,141123,141124,141127,141130],{},[1775,141125,141126],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[1775,141128,141129],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[1775,141131,141132],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[103,141134,139754],{},[24,141136,141137],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,141138,141139,141145,141155],{"__ignoreMap":29},[34,141140,141141,141143],{"class":36,"line":37},[34,141142,131763],{"class":3617},[34,141144,17218],{"class":40},[34,141146,141147,141149,141151,141153],{"class":36,"line":165},[34,141148,132395],{"class":44},[34,141150,53076],{"class":40},[34,141152,25381],{"class":44},[34,141154,2952],{"class":40},[34,141156,141157],{"class":36,"line":171},[34,141158,3223],{"class":40},[103,141160,139794],{},[24,141162,141163],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,141164,141165,141171,141181],{"__ignoreMap":29},[34,141166,141167,141169],{"class":36,"line":37},[34,141168,131763],{"class":3617},[34,141170,17218],{"class":40},[34,141172,141173,141175,141177,141179],{"class":36,"line":165},[34,141174,132395],{"class":44},[34,141176,53076],{"class":40},[34,141178,25381],{"class":44},[34,141180,2952],{"class":40},[34,141182,141183],{"class":36,"line":171},[34,141184,3223],{"class":40},[1772,141186,141187],{},[1775,141188,141189],{},"左侧focus模块制作",[109,141191],{"style":127771,"src":141192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[103,141194,139754],{},[24,141196,141197],{"className":127915,"code":129238,"language":127917,"meta":29,"style":29},[31,141198,141199,141207,141217,141227],{"__ignoreMap":29},[34,141200,141201,141203,141205],{"class":36,"line":37},[34,141202,55460],{"class":52939},[34,141204,63539],{"class":3617},[34,141206,17218],{"class":40},[34,141208,141209,141211,141213,141215],{"class":36,"line":165},[34,141210,129253],{"class":44},[34,141212,53076],{"class":40},[34,141214,56528],{"class":44},[34,141216,2952],{"class":40},[34,141218,141219,141221,141223,141225],{"class":36,"line":171},[34,141220,72437],{"class":44},[34,141222,53076],{"class":40},[34,141224,56376],{"class":44},[34,141226,2952],{"class":40},[34,141228,141229],{"class":36,"line":182},[34,141230,3223],{"class":40},[103,141232,139794],{},[24,141234,141235],{"className":127915,"code":129238,"language":127917,"meta":29,"style":29},[31,141236,141237,141245,141255,141265],{"__ignoreMap":29},[34,141238,141239,141241,141243],{"class":36,"line":37},[34,141240,55460],{"class":52939},[34,141242,63539],{"class":3617},[34,141244,17218],{"class":40},[34,141246,141247,141249,141251,141253],{"class":36,"line":165},[34,141248,129253],{"class":44},[34,141250,53076],{"class":40},[34,141252,56528],{"class":44},[34,141254,2952],{"class":40},[34,141256,141257,141259,141261,141263],{"class":36,"line":171},[34,141258,72437],{"class":44},[34,141260,53076],{"class":40},[34,141262,56376],{"class":44},[34,141264,2952],{"class":40},[34,141266,141267],{"class":36,"line":182},[34,141268,3223],{"class":40},[103,141270,141271],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[1772,141273,141274],{"start":165},[1775,141275,141276],{},"右侧newsflash模块制作",[109,141278],{"style":127771,"src":141279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[103,141281,141282],{},"右侧的模块 分为上中下三个盒子",[103,141284,141285],{},"结构代码：",[24,141287,141288],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,141289,141290],{"__ignoreMap":29},[34,141291,141292,141294,141296,141298,141300,141302,141304,141306,141308,141310,141312,141314],{"class":36,"line":37},[34,141293,2701],{"class":40},[34,141295,109],{"class":52939},[34,141297,56878],{"class":3617},[34,141299,221],{"class":40},[34,141301,135432],{"class":504},[34,141303,56886],{"class":3617},[34,141305,221],{"class":40},[34,141307,135439],{"class":504},[34,141309,135442],{"class":3617},[34,141311,221],{"class":40},[34,141313,135447],{"class":504},[34,141315,52946],{"class":40},[103,141317,141318,141319,141322],{},"1 号盒子为 ",[31,141320,141321],{},"news"," 新闻模块 高度为 165px",[109,141324],{"style":127771,"src":141325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[103,141327,141328,141329,141332,141333],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[31,141330,141331],{},"news-hd","，下面是 ",[31,141334,141335],{},"news-bd",[103,141337,141285],{},[24,141339,141340],{"className":128662,"code":132019,"language":128664,"meta":29,"style":29},[31,141341,141342,141346,141360,141364],{"__ignoreMap":29},[34,141343,141344],{"class":36,"line":37},[34,141345,132026],{"class":161},[34,141347,141348,141350,141352,141354,141356,141358],{"class":36,"line":165},[34,141349,2701],{"class":40},[34,141351,53250],{"class":52939},[34,141353,55125],{"class":3617},[34,141355,221],{"class":40},[34,141357,132039],{"class":504},[34,141359,52946],{"class":40},[34,141361,141362],{"class":36,"line":171},[34,141363,132046],{"class":40},[34,141365,141366,141368,141370],{"class":36,"line":182},[34,141367,53424],{"class":40},[34,141369,53250],{"class":52939},[34,141371,52946],{"class":40},[103,141373,141374],{},"样式代码：",[24,141376,141377],{"className":128662,"code":132019,"language":128664,"meta":29,"style":29},[31,141378,141379,141383,141397,141401],{"__ignoreMap":29},[34,141380,141381],{"class":36,"line":37},[34,141382,132026],{"class":161},[34,141384,141385,141387,141389,141391,141393,141395],{"class":36,"line":165},[34,141386,2701],{"class":40},[34,141388,53250],{"class":52939},[34,141390,55125],{"class":3617},[34,141392,221],{"class":40},[34,141394,132039],{"class":504},[34,141396,52946],{"class":40},[34,141398,141399],{"class":36,"line":171},[34,141400,132046],{"class":40},[34,141402,141403,141405,141407],{"class":36,"line":182},[34,141404,53424],{"class":40},[34,141406,53250],{"class":52939},[34,141408,52946],{"class":40},[103,141410,141411,141412,141414],{},"上面是",[31,141413,141331],{},"，设置高度是 33px，设置下边框",[2798,141416,141417,141423],{},[1775,141418,141419,141420,141422],{},"里面放一个",[31,141421,24555],{}," 标题",[1775,141424,141425,141426,141428,141429,141431],{},"放一个a",[31,141427,104056],{},"，内容是 更多，然后让 ",[31,141430,236],{}," 进行右浮动，三角用伪元素设置字体图标就好",[103,141433,141285],{},[24,141435,141436],{"className":127915,"code":139757,"language":127917,"meta":29,"style":29},[31,141437,141438,141446,141456,141466],{"__ignoreMap":29},[34,141439,141440,141442,141444],{"class":36,"line":37},[34,141441,53250],{"class":52939},[34,141443,138916],{"class":3617},[34,141445,17218],{"class":40},[34,141447,141448,141450,141452,141454],{"class":36,"line":165},[34,141449,138923],{"class":44},[34,141451,53076],{"class":40},[34,141453,9302],{"class":504},[34,141455,2952],{"class":40},[34,141457,141458,141460,141462,141464],{"class":36,"line":171},[34,141459,129531],{"class":44},[34,141461,53076],{"class":40},[34,141463,62508],{"class":44},[34,141465,2952],{"class":40},[34,141467,141468],{"class":36,"line":182},[34,141469,3223],{"class":40},[103,141471,141374],{},[24,141473,141474],{"className":127915,"code":139757,"language":127917,"meta":29,"style":29},[31,141475,141476,141484,141494,141504],{"__ignoreMap":29},[34,141477,141478,141480,141482],{"class":36,"line":37},[34,141479,53250],{"class":52939},[34,141481,138916],{"class":3617},[34,141483,17218],{"class":40},[34,141485,141486,141488,141490,141492],{"class":36,"line":165},[34,141487,138923],{"class":44},[34,141489,53076],{"class":40},[34,141491,9302],{"class":504},[34,141493,2952],{"class":40},[34,141495,141496,141498,141500,141502],{"class":36,"line":171},[34,141497,129531],{"class":44},[34,141499,53076],{"class":40},[34,141501,62508],{"class":44},[34,141503,2952],{"class":40},[34,141505,141506],{"class":36,"line":182},[34,141507,3223],{"class":40},[103,141509,141510,141511],{},"下面是",[31,141512,141335],{},[2798,141514,141515,141523],{},[1775,141516,141517,141518,102381,141520,141522],{},"里面包含 ",[31,141519,2798],{},[31,141521,1775],{}," 还有链接",[1775,141524,140995,141525,141527,141528,141530,141531,141534,141535],{},[31,141526,1775],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[31,141529,132581],{}," 2.设置 ",[31,141532,141533],{},"white-space: nowrap;"," 3. 设置 ",[31,141536,141537],{},"text-overflow: ellipsis;",[103,141539,141285],{},[24,141541,141543],{"className":127915,"code":141542,"language":127917,"meta":29,"style":29},"div {\n  overflow: hidden;\n}\n",[31,141544,141545,141551,141562],{"__ignoreMap":29},[34,141546,141547,141549],{"class":36,"line":37},[34,141548,53250],{"class":52939},[34,141550,17218],{"class":40},[34,141552,141553,141556,141558,141560],{"class":36,"line":165},[34,141554,141555],{"class":44},"  overflow",[34,141557,53076],{"class":40},[34,141559,63353],{"class":44},[34,141561,2952],{"class":40},[34,141563,141564],{"class":36,"line":171},[34,141565,3223],{"class":40},[103,141567,141374],{},[24,141569,141570],{"className":127915,"code":141542,"language":127917,"meta":29,"style":29},[31,141571,141572,141578,141588],{"__ignoreMap":29},[34,141573,141574,141576],{"class":36,"line":37},[34,141575,53250],{"class":52939},[34,141577,17218],{"class":40},[34,141579,141580,141582,141584,141586],{"class":36,"line":165},[34,141581,141555],{"class":44},[34,141583,53076],{"class":40},[34,141585,63353],{"class":44},[34,141587,2952],{"class":40},[34,141589,141590],{"class":36,"line":171},[34,141591,3223],{"class":40},[103,141593,141594,141595,141598],{},"2 号盒子为 ",[31,141596,141597],{},"lifeservice"," 生活服务模块 高度为 209px",[109,141600],{"style":127771,"src":141601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[2798,141603,141604,141607,141617,141641,141652],{},[1775,141605,141606],{},"设置边框（左右下边框）",[1775,141608,141609,141610,141613,141614,141616],{},"里面的内容 是 ",[31,141611,141612],{},"ul > 12*li","，给",[31,141615,1775],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[1775,141618,141619,141620],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[2798,141621,141622,141627,141636],{},[1775,141623,141624,141626],{},[31,141625,141597],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[1775,141628,141629,141630,141632,141633,141635],{},"可以让 ",[31,141631,141597],{}," 里面的 ",[31,141634,2798],{}," 宽度为 252，就可以装的下 4 个 小 li",[1775,141637,141638,141640],{},[31,141639,141597],{}," 盒子 overflow 隐藏多余的部分就可以了",[1775,141642,117830,141643,141645,141646,141648,141649,141651],{},[31,141644,1775],{}," 里面放一个 ",[31,141647,2239],{},"（里面放图标），下面的文本用 ",[31,141650,103],{}," 标签包裹",[1775,141653,140415,141654,141656,141657,141659,141660,140449,141662,141665],{},[31,141655,2239],{}," 设置 24px宽和28px的高（注意 ",[31,141658,2239],{}," 是行内元素， 转成行内块），给 ",[31,141661,1775],{},[31,141663,141664],{},"text-align:center"," 让里面内容居中显示",[103,141667,141285],{},[24,141669,141671],{"className":127915,"code":141670,"language":127917,"meta":29,"style":29},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[31,141672,141673,141691,141696,141706],{"__ignoreMap":29},[34,141674,141675,141677,141679,141681,141683,141685,141687,141689],{"class":36,"line":37},[34,141676,34],{"class":52939},[34,141678,48],{"class":40},[34,141680,236],{"class":52939},[34,141682,48],{"class":40},[34,141684,25198],{"class":52939},[34,141686,48],{"class":40},[34,141688,1165],{"class":52939},[34,141690,17218],{"class":40},[34,141692,141693],{"class":36,"line":165},[34,141694,141695],{"class":161},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[34,141697,141698,141700,141702,141704],{"class":36,"line":171},[34,141699,129531],{"class":44},[34,141701,53076],{"class":40},[34,141703,129593],{"class":44},[34,141705,2952],{"class":40},[34,141707,141708],{"class":36,"line":182},[34,141709,3223],{"class":40},[103,141711,141374],{},[24,141713,141714],{"className":127915,"code":141670,"language":127917,"meta":29,"style":29},[31,141715,141716,141734,141738,141748],{"__ignoreMap":29},[34,141717,141718,141720,141722,141724,141726,141728,141730,141732],{"class":36,"line":37},[34,141719,34],{"class":52939},[34,141721,48],{"class":40},[34,141723,236],{"class":52939},[34,141725,48],{"class":40},[34,141727,25198],{"class":52939},[34,141729,48],{"class":40},[34,141731,1165],{"class":52939},[34,141733,17218],{"class":40},[34,141735,141736],{"class":36,"line":165},[34,141737,141695],{"class":161},[34,141739,141740,141742,141744,141746],{"class":36,"line":171},[34,141741,129531],{"class":44},[34,141743,53076],{"class":40},[34,141745,129593],{"class":44},[34,141747,2952],{"class":40},[34,141749,141750],{"class":36,"line":182},[34,141751,3223],{"class":40},[103,141753,141754,141755,141758],{},"3 号盒子为 ",[31,141756,141757],{},"bargain"," 特价商品",[2798,141760,141761],{},[1775,141762,141763],{},"这个比较简单，直接插入一张图片即可",[103,141765,141285],{},[24,141767,141768],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,141769,141770],{"__ignoreMap":29},[34,141771,141772,141774,141776,141778,141780,141782,141784,141786,141788,141790,141792,141794],{"class":36,"line":37},[34,141773,2701],{"class":40},[34,141775,109],{"class":52939},[34,141777,56878],{"class":3617},[34,141779,221],{"class":40},[34,141781,135432],{"class":504},[34,141783,56886],{"class":3617},[34,141785,221],{"class":40},[34,141787,135439],{"class":504},[34,141789,135442],{"class":3617},[34,141791,221],{"class":40},[34,141793,135447],{"class":504},[34,141795,52946],{"class":40},[103,141797,141374],{},[24,141799,141800],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,141801,141802],{"__ignoreMap":29},[34,141803,141804,141806,141808,141810,141812,141814,141816,141818,141820,141822,141824,141826],{"class":36,"line":37},[34,141805,2701],{"class":40},[34,141807,109],{"class":52939},[34,141809,56878],{"class":3617},[34,141811,221],{"class":40},[34,141813,135432],{"class":504},[34,141815,56886],{"class":3617},[34,141817,221],{"class":40},[34,141819,135439],{"class":504},[34,141821,135442],{"class":3617},[34,141823,221],{"class":40},[34,141825,135447],{"class":504},[34,141827,52946],{"class":40},[19,141829,141831],{"id":141830},"_1612-推荐模块制作","16.1.2 推荐模块制作",[109,141833],{"style":127771,"src":141834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[103,141836,141837,141838,141841],{},"大盒子 ",[31,141839,141840],{},"recom"," 推荐模块 recommend",[2798,141843,141844],{},[1775,141845,141846,141847,141849,141850,141853],{},"给这个 ",[31,141848,141840],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[31,141851,141852],{},"#ebebeb","），设置距离上边 12px",[103,141855,141285],{},[24,141857,141859],{"className":127915,"code":141858,"language":127917,"meta":29,"style":29},"div {\n  background-color: #f0f0f0;\n}\n",[31,141860,141861,141867,141878],{"__ignoreMap":29},[34,141862,141863,141865],{"class":36,"line":37},[34,141864,53250],{"class":52939},[34,141866,17218],{"class":40},[34,141868,141869,141871,141873,141876],{"class":36,"line":165},[34,141870,72517],{"class":44},[34,141872,53076],{"class":40},[34,141874,141875],{"class":44},"#f0f0f0",[34,141877,2952],{"class":40},[34,141879,141880],{"class":36,"line":171},[34,141881,3223],{"class":40},[103,141883,141374],{},[24,141885,141886],{"className":127915,"code":141858,"language":127917,"meta":29,"style":29},[31,141887,141888,141894,141904],{"__ignoreMap":29},[34,141889,141890,141892],{"class":36,"line":37},[34,141891,53250],{"class":52939},[34,141893,17218],{"class":40},[34,141895,141896,141898,141900,141902],{"class":36,"line":165},[34,141897,72517],{"class":44},[34,141899,53076],{"class":40},[34,141901,141875],{"class":44},[34,141903,2952],{"class":40},[34,141905,141906],{"class":36,"line":171},[34,141907,3223],{"class":40},[103,141909,141910],{},"里面包含 2 个盒子， 浮动即可",[103,141912,141285],{},[24,141914,141915],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,141916,141917,141923,141933],{"__ignoreMap":29},[34,141918,141919,141921],{"class":36,"line":37},[34,141920,131763],{"class":3617},[34,141922,17218],{"class":40},[34,141924,141925,141927,141929,141931],{"class":36,"line":165},[34,141926,132395],{"class":44},[34,141928,53076],{"class":40},[34,141930,25381],{"class":44},[34,141932,2952],{"class":40},[34,141934,141935],{"class":36,"line":171},[34,141936,3223],{"class":40},[103,141938,141939,141940],{},"1 号盒子 ",[31,141941,141942],{},"recom_hd",[2798,141944,141945,141948],{},[1775,141946,141947],{},"设置宽度205px，高度163px",[1775,141949,141419,141950,141952],{},[31,141951,109],{},"标签，插入图片即可",[103,141954,141285],{},[24,141956,141957],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,141958,141959],{"__ignoreMap":29},[34,141960,141961,141963,141965,141967,141969,141971,141973,141975,141977,141979,141981,141983],{"class":36,"line":37},[34,141962,2701],{"class":40},[34,141964,109],{"class":52939},[34,141966,56878],{"class":3617},[34,141968,221],{"class":40},[34,141970,135432],{"class":504},[34,141972,56886],{"class":3617},[34,141974,221],{"class":40},[34,141976,135439],{"class":504},[34,141978,135442],{"class":3617},[34,141980,221],{"class":40},[34,141982,135447],{"class":504},[34,141984,52946],{"class":40},[103,141986,141374],{},[24,141988,141989],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,141990,141991],{"__ignoreMap":29},[34,141992,141993,141995,141997,141999,142001,142003,142005,142007,142009,142011,142013,142015],{"class":36,"line":37},[34,141994,2701],{"class":40},[34,141996,109],{"class":52939},[34,141998,56878],{"class":3617},[34,142000,221],{"class":40},[34,142002,135432],{"class":504},[34,142004,56886],{"class":3617},[34,142006,221],{"class":40},[34,142008,135439],{"class":504},[34,142010,135442],{"class":3617},[34,142012,221],{"class":40},[34,142014,135447],{"class":504},[34,142016,52946],{"class":40},[103,142018,142019,142020,142023],{},"2 号盒子 ",[31,142021,142022],{},"recom_bd"," ，注意里面的小竖线",[2798,142025,142026,142037,142040,142045,142050],{},[1775,142027,142028,142029,142031,142032,142034,142035],{},"右侧结构里面放 ",[31,142030,2798],{}," 包含 4个 ",[31,142033,1775],{},"，每个li里面包含一个",[31,142036,109],{},[1775,142038,142039],{},"直接利用切片工具把里面的内容当成一张图片",[1775,142041,140415,142042,142044],{},[31,142043,1775],{}," 设置浮动",[1775,142046,140415,142047,142049],{},[31,142048,109],{}," 设置宽高，宽度 248px，高度 163px",[1775,142051,142052,142053,141613,142056,142058,142059,142061,142062],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[31,142054,142055],{},"top 10px",[31,142057,1775],{},"设置相对定位（注意，最后一个",[31,142060,1775],{},"不用设置伪元素），可以利用 ",[31,142063,142064],{},"nth-child(-n+3){...}",[103,142066,141285],{},[24,142068,142069],{"className":127915,"code":139757,"language":127917,"meta":29,"style":29},[31,142070,142071,142079,142089,142099],{"__ignoreMap":29},[34,142072,142073,142075,142077],{"class":36,"line":37},[34,142074,53250],{"class":52939},[34,142076,138916],{"class":3617},[34,142078,17218],{"class":40},[34,142080,142081,142083,142085,142087],{"class":36,"line":165},[34,142082,138923],{"class":44},[34,142084,53076],{"class":40},[34,142086,9302],{"class":504},[34,142088,2952],{"class":40},[34,142090,142091,142093,142095,142097],{"class":36,"line":171},[34,142092,129531],{"class":44},[34,142094,53076],{"class":40},[34,142096,62508],{"class":44},[34,142098,2952],{"class":40},[34,142100,142101],{"class":36,"line":182},[34,142102,3223],{"class":40},[103,142104,141374],{},[24,142106,142107],{"className":127915,"code":139757,"language":127917,"meta":29,"style":29},[31,142108,142109,142117,142127,142137],{"__ignoreMap":29},[34,142110,142111,142113,142115],{"class":36,"line":37},[34,142112,53250],{"class":52939},[34,142114,138916],{"class":3617},[34,142116,17218],{"class":40},[34,142118,142119,142121,142123,142125],{"class":36,"line":165},[34,142120,138923],{"class":44},[34,142122,53076],{"class":40},[34,142124,9302],{"class":504},[34,142126,2952],{"class":40},[34,142128,142129,142131,142133,142135],{"class":36,"line":171},[34,142130,129531],{"class":44},[34,142132,53076],{"class":40},[34,142134,62508],{"class":44},[34,142136,2952],{"class":40},[34,142138,142139],{"class":36,"line":182},[34,142140,3223],{"class":40},[19,142142,142144],{"id":142143},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[109,142146],{"style":127771,"src":142147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[103,142149,142150],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[103,142152,142153],{},"第一楼是家用电器模块： 里面包含两个盒子",[103,142155,142156,142159],{},[31,142157,142158],{},"box_hd"," 制作",[103,142161,141939,142162,142164],{},[31,142163,142158],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[109,142166],{"style":127771,"src":142167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[2798,142169,142170,142175,142180,142183],{},[1775,142171,142172,142174],{},[31,142173,142158],{}," 给 30px 的高度，2个像素的下边框",[1775,142176,142177,142178],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[31,142179,140426],{},[1775,142181,142182],{},"左侧盒左浮动，右侧盒子右浮动",[1775,142184,142185,142187,142188,142190],{},[31,142186,236],{},"标签之间的距离用左右的",[31,142189,32525],{},"撑开即可",[103,142192,142193],{},"结构代码",[24,142195,142196],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,142197,142198,142204,142214],{"__ignoreMap":29},[34,142199,142200,142202],{"class":36,"line":37},[34,142201,131763],{"class":3617},[34,142203,17218],{"class":40},[34,142205,142206,142208,142210,142212],{"class":36,"line":165},[34,142207,132395],{"class":44},[34,142209,53076],{"class":40},[34,142211,25381],{"class":44},[34,142213,2952],{"class":40},[34,142215,142216],{"class":36,"line":171},[34,142217,3223],{"class":40},[103,142219,142220],{},"样式代码",[24,142222,142223],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,142224,142225,142231,142241],{"__ignoreMap":29},[34,142226,142227,142229],{"class":36,"line":37},[34,142228,131763],{"class":3617},[34,142230,17218],{"class":40},[34,142232,142233,142235,142237,142239],{"class":36,"line":165},[34,142234,132395],{"class":44},[34,142236,53076],{"class":40},[34,142238,25381],{"class":44},[34,142240,2952],{"class":40},[34,142242,142243],{"class":36,"line":171},[34,142244,3223],{"class":40},[103,142246,142247,142159],{},[31,142248,142249],{},"box_bd",[103,142251,142252],{},"2 号盒子 box_bd，不要给高度",[109,142254],{"style":127771,"src":142255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[103,142257,142258],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[103,142260,142261],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[103,142263,142264],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[2798,142266,142267,142279,142295],{},[1775,142268,142269,142271,142272,142275,142276,142278],{},[31,142270,142249],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[31,142273,142274],{},"tab_content","，在",[31,142277,142274],{}," 里面包裹tab选项卡对应的内容",[1775,142280,142281,142282,142285,142286,142288,142289,142291,142292,142294],{},"内容被一个大盒子包裹（",[31,142283,142284],{},"tab_list_item","），里面是 ",[31,142287,2798],{}," 包裹 5个 ",[31,142290,1775],{},"，每个",[31,142293,1775],{},"设置对应的宽度，然后设置浮动",[1775,142296,142297,142298,142300,142301,142303,142304],{},"而这5个",[31,142299,1775],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[31,142302,1775],{},"设置",[2798,142305,142306,142324,142327],{},[1775,142307,142308,142309,142311,142312,142314,142315,142317,142318,142320,142321,142323],{},"第一个小 ",[31,142310,1775],{}," 分为上下结构，上面是 ",[31,142313,2798],{}," 包裹 ",[31,142316,1775],{}," ，",[31,142319,1775],{},"里面包裹 ",[31,142322,236],{},"，下面插入一张图片",[1775,142325,142326],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[1775,142328,142329,142330,142332,142333,142335,142336,142338],{},"后面的小 ",[31,142331,1775],{}," 里面先放一个",[31,142334,236],{},"标签，然后在",[31,142337,236],{},"标签里面插入图片即可",[103,142340,142193],{},[24,142342,142343],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,142344,142345],{"__ignoreMap":29},[34,142346,142347,142349,142351,142353,142355,142357,142359,142361,142363,142365,142367,142369],{"class":36,"line":37},[34,142348,2701],{"class":40},[34,142350,109],{"class":52939},[34,142352,56878],{"class":3617},[34,142354,221],{"class":40},[34,142356,135432],{"class":504},[34,142358,56886],{"class":3617},[34,142360,221],{"class":40},[34,142362,135439],{"class":504},[34,142364,135442],{"class":3617},[34,142366,221],{"class":40},[34,142368,135447],{"class":504},[34,142370,52946],{"class":40},[103,142372,142220],{},[24,142374,142375],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,142376,142377],{"__ignoreMap":29},[34,142378,142379,142381,142383,142385,142387,142389,142391,142393,142395,142397,142399,142401],{"class":36,"line":37},[34,142380,2701],{"class":40},[34,142382,109],{"class":52939},[34,142384,56878],{"class":3617},[34,142386,221],{"class":40},[34,142388,135432],{"class":504},[34,142390,56886],{"class":3617},[34,142392,221],{"class":40},[34,142394,135439],{"class":504},[34,142396,135442],{"class":3617},[34,142398,221],{"class":40},[34,142400,135447],{"class":504},[34,142402,52946],{"class":40},[103,142404,142405],{},"tab栏切换需求！！！！！！介绍：",[109,142407],{"style":127771,"src":142408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[2798,142410,142411,142419,142425,142428],{},[1775,142412,142413,142416,142417],{},[31,142414,142415],{},"tab","栏的布局是 ",[31,142418,140426],{},[1775,142420,142421,142422,142424],{},"有多少个",[31,142423,142415],{},"选项卡，那么对应就有多少个内容",[1775,142426,142427],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[1775,142429,142430,142431,142434,142435,142437,142438,142440],{},"等后面我们学习了",[31,142432,142433],{},"js","之后，我们就会配合",[31,142436,142433],{},"来实现，",[31,142439,142415],{},"栏的切换",[14,142442,142444],{"id":142443},"_162-列表制作","16.2 列表制作",[19,142446,142448],{"id":142447},"_1621-准备工作","16.2.1 准备工作",[2798,142450,142451,142454,142457,142460],{},[1775,142452,142453],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[1775,142455,142456],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[1775,142458,142459],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[1775,142461,142462],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[19,142464,142466,142467,102381,142469,142471],{"id":142465},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[31,142468,132920],{},[31,142470,55352],{}," 修改",[109,142473],{"style":127771,"src":142474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[2798,142476,142477],{},[1775,142478,142479],{},"秒杀盒子 sk（ second kill ） 定位即可",[103,142481,141285],{},[24,142483,142484],{"className":127915,"code":133347,"language":127917,"meta":29,"style":29},[31,142485,142486,142490,142504,142508,142522,142526,142540,142544,142558,142562],{"__ignoreMap":29},[34,142487,142488],{"class":36,"line":37},[34,142489,133354],{"class":161},[34,142491,142492,142494,142496,142498,142500,142502],{"class":36,"line":165},[34,142493,133359],{"class":3617},[34,142495,81444],{"class":40},[34,142497,130275],{"class":44},[34,142499,53076],{"class":40},[34,142501,133368],{"class":44},[34,142503,130845],{"class":40},[34,142505,142506],{"class":36,"line":171},[34,142507,133375],{"class":161},[34,142509,142510,142512,142514,142516,142518,142520],{"class":36,"line":182},[34,142511,133380],{"class":3617},[34,142513,81444],{"class":40},[34,142515,130275],{"class":44},[34,142517,53076],{"class":40},[34,142519,56403],{"class":44},[34,142521,130845],{"class":40},[34,142523,142524],{"class":36,"line":188},[34,142525,133395],{"class":161},[34,142527,142528,142530,142532,142534,142536,142538],{"class":36,"line":518},[34,142529,133400],{"class":3617},[34,142531,81444],{"class":40},[34,142533,130275],{"class":44},[34,142535,53076],{"class":40},[34,142537,56470],{"class":44},[34,142539,130845],{"class":40},[34,142541,142542],{"class":36,"line":524},[34,142543,133415],{"class":161},[34,142545,142546,142548,142550,142552,142554,142556],{"class":36,"line":530},[34,142547,133420],{"class":3617},[34,142549,81444],{"class":40},[34,142551,130275],{"class":44},[34,142553,53076],{"class":40},[34,142555,87869],{"class":44},[34,142557,130845],{"class":40},[34,142559,142560],{"class":36,"line":624},[34,142561,133435],{"class":161},[34,142563,142564,142566,142568,142570,142572,142574],{"class":36,"line":630},[34,142565,133440],{"class":3617},[34,142567,81444],{"class":40},[34,142569,130275],{"class":44},[34,142571,53076],{"class":40},[34,142573,133449],{"class":44},[34,142575,130845],{"class":40},[103,142577,141374],{},[24,142579,142580],{"className":127915,"code":133347,"language":127917,"meta":29,"style":29},[31,142581,142582,142586,142600,142604,142618,142622,142636,142640,142654,142658],{"__ignoreMap":29},[34,142583,142584],{"class":36,"line":37},[34,142585,133354],{"class":161},[34,142587,142588,142590,142592,142594,142596,142598],{"class":36,"line":165},[34,142589,133359],{"class":3617},[34,142591,81444],{"class":40},[34,142593,130275],{"class":44},[34,142595,53076],{"class":40},[34,142597,133368],{"class":44},[34,142599,130845],{"class":40},[34,142601,142602],{"class":36,"line":171},[34,142603,133375],{"class":161},[34,142605,142606,142608,142610,142612,142614,142616],{"class":36,"line":182},[34,142607,133380],{"class":3617},[34,142609,81444],{"class":40},[34,142611,130275],{"class":44},[34,142613,53076],{"class":40},[34,142615,56403],{"class":44},[34,142617,130845],{"class":40},[34,142619,142620],{"class":36,"line":188},[34,142621,133395],{"class":161},[34,142623,142624,142626,142628,142630,142632,142634],{"class":36,"line":518},[34,142625,133400],{"class":3617},[34,142627,81444],{"class":40},[34,142629,130275],{"class":44},[34,142631,53076],{"class":40},[34,142633,56470],{"class":44},[34,142635,130845],{"class":40},[34,142637,142638],{"class":36,"line":524},[34,142639,133415],{"class":161},[34,142641,142642,142644,142646,142648,142650,142652],{"class":36,"line":530},[34,142643,133420],{"class":3617},[34,142645,81444],{"class":40},[34,142647,130275],{"class":44},[34,142649,53076],{"class":40},[34,142651,87869],{"class":44},[34,142653,130845],{"class":40},[34,142655,142656],{"class":36,"line":624},[34,142657,133435],{"class":161},[34,142659,142660,142662,142664,142666,142668,142670],{"class":36,"line":630},[34,142661,133440],{"class":3617},[34,142663,81444],{"class":40},[34,142665,130275],{"class":44},[34,142667,53076],{"class":40},[34,142669,133449],{"class":44},[34,142671,130845],{"class":40},[2798,142673,142674,142685],{},[1775,142675,142676,142677,142680,142681,102381,142683],{},"1 号盒子左侧浮动 ",[31,142678,142679],{},"sk_list"," 里面包含 ",[31,142682,2798],{},[31,142684,1775],{},[1775,142686,142687,142688,142680,142691,102381,142693],{},"2 号盒子左侧浮动 ",[31,142689,142690],{},"sk_con",[31,142692,2798],{},[31,142694,1775],{},[103,142696,141285],{},[24,142698,142699],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,142700,142701,142707,142717],{"__ignoreMap":29},[34,142702,142703,142705],{"class":36,"line":37},[34,142704,131763],{"class":3617},[34,142706,17218],{"class":40},[34,142708,142709,142711,142713,142715],{"class":36,"line":165},[34,142710,132395],{"class":44},[34,142712,53076],{"class":40},[34,142714,25381],{"class":44},[34,142716,2952],{"class":40},[34,142718,142719],{"class":36,"line":171},[34,142720,3223],{"class":40},[103,142722,141374],{},[24,142724,142725],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,142726,142727,142733,142743],{"__ignoreMap":29},[34,142728,142729,142731],{"class":36,"line":37},[34,142730,131763],{"class":3617},[34,142732,17218],{"class":40},[34,142734,142735,142737,142739,142741],{"class":36,"line":165},[34,142736,132395],{"class":44},[34,142738,53076],{"class":40},[34,142740,25381],{"class":44},[34,142742,2952],{"class":40},[34,142744,142745],{"class":36,"line":171},[34,142746,3223],{"class":40},[19,142748,142750,142751],{"id":142749},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[31,142752,142753],{},"sk_container",[109,142755],{"style":127771,"src":142756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[2798,142758,142759,142764],{},[1775,142760,141939,142761,142763],{},[31,142762,142753],{}," 给宽度 1200，不要给高度",[1775,142765,142766],{},"一定不要忘记清除浮动",[103,142768,141285],{},[24,142770,142771],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,142772,142773,142779,142789],{"__ignoreMap":29},[34,142774,142775,142777],{"class":36,"line":37},[34,142776,131763],{"class":3617},[34,142778,17218],{"class":40},[34,142780,142781,142783,142785,142787],{"class":36,"line":165},[34,142782,132395],{"class":44},[34,142784,53076],{"class":40},[34,142786,25381],{"class":44},[34,142788,2952],{"class":40},[34,142790,142791],{"class":36,"line":171},[34,142792,3223],{"class":40},[1772,142794,142795],{},[1775,142796,142797],{},"sk_hd制作",[2798,142799,142800],{},[1775,142801,142019,142802,142805],{},[31,142803,142804],{},"sk_hd"," ，插入图片即可",[103,142807,141285],{},[24,142809,142810],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,142811,142812],{"__ignoreMap":29},[34,142813,142814,142816,142818,142820,142822,142824,142826,142828,142830,142832,142834,142836],{"class":36,"line":37},[34,142815,2701],{"class":40},[34,142817,109],{"class":52939},[34,142819,56878],{"class":3617},[34,142821,221],{"class":40},[34,142823,135432],{"class":504},[34,142825,56886],{"class":3617},[34,142827,221],{"class":40},[34,142829,135439],{"class":504},[34,142831,135442],{"class":3617},[34,142833,221],{"class":40},[34,142835,135447],{"class":504},[34,142837,52946],{"class":40},[1772,142839,142840],{"start":165},[1775,142841,142842],{},"sk_bd制作",[2798,142844,142845],{},[1775,142846,142847,142848,142851,142852,102381,142854,142856],{},"3 号盒子 ",[31,142849,142850],{},"sk_bd"," ，里面包含很多的 ",[31,142853,2798],{},[31,142855,1775],{},[2798,142857,142858,142867],{},[1775,142859,142860,142861,142863,142864,142866],{},"当鼠标移入到 ",[31,142862,1775],{}," 上面的时候显示红色的边框，在这里先给 ",[31,142865,1775],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[1775,142868,142869,142870,142872,142873,142875,142876,142879,142880,142882],{},"由于给每个 ",[31,142871,1775],{}," 都设置了外边距，导致一行的最后一个 ",[31,142874,1775],{}," 掉了下来，在这里我们利用 ",[31,142877,142878],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[31,142881,1775],{},"，去掉外边距就好了",[103,142884,141285],{},[24,142886,142887],{"className":127915,"code":140104,"language":127917,"meta":29,"style":29},[31,142888,142889,142895,142907],{"__ignoreMap":29},[34,142890,142891,142893],{"class":36,"line":37},[34,142892,53250],{"class":52939},[34,142894,17218],{"class":40},[34,142896,142897,142899,142901,142903,142905],{"class":36,"line":165},[34,142898,72109],{"class":44},[34,142900,53076],{"class":40},[34,142902,177],{"class":44},[34,142904,53195],{"class":44},[34,142906,2952],{"class":40},[34,142908,142909],{"class":36,"line":171},[34,142910,3223],{"class":40},[103,142912,141374],{},[24,142914,142915],{"className":127915,"code":140104,"language":127917,"meta":29,"style":29},[31,142916,142917,142923,142935],{"__ignoreMap":29},[34,142918,142919,142921],{"class":36,"line":37},[34,142920,53250],{"class":52939},[34,142922,17218],{"class":40},[34,142924,142925,142927,142929,142931,142933],{"class":36,"line":165},[34,142926,72109],{"class":44},[34,142928,53076],{"class":40},[34,142930,177],{"class":44},[34,142932,53195],{"class":44},[34,142934,2952],{"class":40},[34,142936,142937],{"class":36,"line":171},[34,142938,3223],{"class":40},[14,142940,142942],{"id":142941},"_163-注册页面制作","16.3 注册页面制作",[109,142944],{"style":127771,"src":142945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[103,142947,142948,142950],{},[1165,142949,10675],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[109,142952],{"style":127771,"src":142953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[19,142955,142957],{"id":142956},"_1631-准备工作","16.3.1 准备工作",[2798,142959,142960,142963],{},[1775,142961,142962],{},"创建register.html，引入 base.css，引入favicon图标",[1775,142964,142965],{},"创建register.css ，在html页面进行引入",[19,142967,142969,142970,142972],{"id":142968},"_1632-header-头部实现","16.3.2 ",[31,142971,132920],{}," 头部实现",[2798,142974,142975,142978],{},[1775,142976,142977],{},"整个内容用 版心 进行包裹",[1775,142979,142980],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[103,142982,141285],{},[24,142984,142985],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,142986,142987],{"__ignoreMap":29},[34,142988,142989,142991,142993,142995,142997,142999,143001,143003,143005,143007,143009,143011],{"class":36,"line":37},[34,142990,2701],{"class":40},[34,142992,109],{"class":52939},[34,142994,56878],{"class":3617},[34,142996,221],{"class":40},[34,142998,135432],{"class":504},[34,143000,56886],{"class":3617},[34,143002,221],{"class":40},[34,143004,135439],{"class":504},[34,143006,135442],{"class":3617},[34,143008,221],{"class":40},[34,143010,135447],{"class":504},[34,143012,52946],{"class":40},[103,143014,141374],{},[24,143016,143017],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,143018,143019],{"__ignoreMap":29},[34,143020,143021,143023,143025,143027,143029,143031,143033,143035,143037,143039,143041,143043],{"class":36,"line":37},[34,143022,2701],{"class":40},[34,143024,109],{"class":52939},[34,143026,56878],{"class":3617},[34,143028,221],{"class":40},[34,143030,135432],{"class":504},[34,143032,56886],{"class":3617},[34,143034,221],{"class":40},[34,143036,135439],{"class":504},[34,143038,135442],{"class":3617},[34,143040,221],{"class":40},[34,143042,135447],{"class":504},[34,143044,52946],{"class":40},[19,143046,143048,143049,143052],{"id":143047},"_1633-registerarea-主体模块实现","16.3.3 ",[31,143050,143051],{},"registerarea"," 主体模块实现",[109,143054],{"style":127771,"src":143055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[103,143057,143058],{},"整个大盒子 高度为 522px，设置4个边框",[103,143060,141285],{},[24,143062,143063],{"className":127915,"code":132072,"language":127917,"meta":29,"style":29},[31,143064,143065,143071,143087],{"__ignoreMap":29},[34,143066,143067,143069],{"class":36,"line":37},[34,143068,53250],{"class":52939},[34,143070,17218],{"class":40},[34,143072,143073,143075,143077,143079,143081,143083,143085],{"class":36,"line":165},[34,143074,72535],{"class":44},[34,143076,53076],{"class":40},[34,143078,394],{"class":44},[34,143080,53131],{"class":55},[34,143082,53160],{"class":44},[34,143084,131307],{"class":44},[34,143086,2952],{"class":40},[34,143088,143089],{"class":36,"line":171},[34,143090,3223],{"class":40},[103,143092,141374],{},[24,143094,143095],{"className":127915,"code":132072,"language":127917,"meta":29,"style":29},[31,143096,143097,143103,143119],{"__ignoreMap":29},[34,143098,143099,143101],{"class":36,"line":37},[34,143100,53250],{"class":52939},[34,143102,17218],{"class":40},[34,143104,143105,143107,143109,143111,143113,143115,143117],{"class":36,"line":165},[34,143106,72535],{"class":44},[34,143108,53076],{"class":40},[34,143110,394],{"class":44},[34,143112,53131],{"class":55},[34,143114,53160],{"class":44},[34,143116,131307],{"class":44},[34,143118,2952],{"class":40},[34,143120,143121],{"class":36,"line":171},[34,143122,3223],{"class":40},[103,143124,143125],{},"1号盒子 是一个 h3 标签，放标题",[2798,143127,143128],{},[1775,143129,143130],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[103,143132,141285],{},[24,143134,143135],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,143136,143137,143143,143153],{"__ignoreMap":29},[34,143138,143139,143141],{"class":36,"line":37},[34,143140,131763],{"class":3617},[34,143142,17218],{"class":40},[34,143144,143145,143147,143149,143151],{"class":36,"line":165},[34,143146,132395],{"class":44},[34,143148,53076],{"class":40},[34,143150,25381],{"class":44},[34,143152,2952],{"class":40},[34,143154,143155],{"class":36,"line":171},[34,143156,3223],{"class":40},[103,143158,141374],{},[24,143160,143161],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,143162,143163,143169,143179],{"__ignoreMap":29},[34,143164,143165,143167],{"class":36,"line":37},[34,143166,131763],{"class":3617},[34,143168,17218],{"class":40},[34,143170,143171,143173,143175,143177],{"class":36,"line":165},[34,143172,132395],{"class":44},[34,143174,53076],{"class":40},[34,143176,25381],{"class":44},[34,143178,2952],{"class":40},[34,143180,143181],{"class":36,"line":171},[34,143182,3223],{"class":40},[103,143184,143185],{},"2号盒子 里面放注册的内容",[2798,143187,143188,143191,143200,143214,143227,143230,143233,143251,143265],{},[1775,143189,143190],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[1775,143192,143193,143194,143196,143197,143199],{},"里面的内容利用 ",[31,143195,2798],{}," 包含 ",[31,143198,1775],{}," 来实现的（不需要用表格）",[1775,143201,140429,143202,143204,143205,143207,143208,143210,143211,143213],{},[31,143203,1775],{}," 里面，左侧放 ",[31,143206,35249],{}," 标签， 中间放",[31,143209,55460],{}," 标签， 右侧放 ",[31,143212,34],{}," 提示信息",[1775,143215,143216,143217,143219,143220,143222,143223,143226],{},"左侧 ",[31,143218,35249],{},"里面的文字都是右对齐，我们可以给",[31,143221,35249],{},"设置一个宽度（88px），然后利用",[31,143224,143225],{},"text-align"," 来设置右对齐",[1775,143228,143229],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[1775,143231,143232],{},"右侧 span修饰一下文字颜色",[1775,143234,143235,143236],{},"提示信息的样式优化",[2798,143237,143238,143241,143244],{},[1775,143239,143240],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[1775,143242,143243],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[1775,143245,143246,143247,143250],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[31,143248,143249],{},"vertical-algin"," 来设置 图片与文字对齐方式",[1775,143252,143253,143254],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[2798,143255,143256,143262],{},[1775,143257,143258,143259,143261],{},"设置 ",[31,143260,25198],{}," 的 左右 12px 的内边距，设置一下文字颜色",[1775,143263,143264],{},"分别设置 背景颜色",[1775,143266,143267,143268,143270],{},"同意协议 和 完成注册 都是用 ",[31,143269,1775],{}," 进行包裹",[103,143272,141285],{},[24,143274,143275],{"className":127915,"code":141858,"language":127917,"meta":29,"style":29},[31,143276,143277,143283,143293],{"__ignoreMap":29},[34,143278,143279,143281],{"class":36,"line":37},[34,143280,53250],{"class":52939},[34,143282,17218],{"class":40},[34,143284,143285,143287,143289,143291],{"class":36,"line":165},[34,143286,72517],{"class":44},[34,143288,53076],{"class":40},[34,143290,141875],{"class":44},[34,143292,2952],{"class":40},[34,143294,143295],{"class":36,"line":171},[34,143296,3223],{"class":40},[103,143298,141374],{},[24,143300,143301],{"className":127915,"code":141858,"language":127917,"meta":29,"style":29},[31,143302,143303,143309,143319],{"__ignoreMap":29},[34,143304,143305,143307],{"class":36,"line":37},[34,143306,53250],{"class":52939},[34,143308,17218],{"class":40},[34,143310,143311,143313,143315,143317],{"class":36,"line":165},[34,143312,72517],{"class":44},[34,143314,53076],{"class":40},[34,143316,141875],{"class":44},[34,143318,2952],{"class":40},[34,143320,143321],{"class":36,"line":171},[34,143322,3223],{"class":40},[19,143324,143326],{"id":143325},"_1634-底部实现","16.3.4 底部实现",[103,143328,141285],{},[24,143330,143331],{"className":127915,"code":141858,"language":127917,"meta":29,"style":29},[31,143332,143333,143339,143349],{"__ignoreMap":29},[34,143334,143335,143337],{"class":36,"line":37},[34,143336,53250],{"class":52939},[34,143338,17218],{"class":40},[34,143340,143341,143343,143345,143347],{"class":36,"line":165},[34,143342,72517],{"class":44},[34,143344,53076],{"class":40},[34,143346,141875],{"class":44},[34,143348,2952],{"class":40},[34,143350,143351],{"class":36,"line":171},[34,143352,3223],{"class":40},[103,143354,141374],{},[24,143356,143357],{"className":128662,"code":132019,"language":128664,"meta":29,"style":29},[31,143358,143359,143363,143377,143381],{"__ignoreMap":29},[34,143360,143361],{"class":36,"line":37},[34,143362,132026],{"class":161},[34,143364,143365,143367,143369,143371,143373,143375],{"class":36,"line":165},[34,143366,2701],{"class":40},[34,143368,53250],{"class":52939},[34,143370,55125],{"class":3617},[34,143372,221],{"class":40},[34,143374,132039],{"class":504},[34,143376,52946],{"class":40},[34,143378,143379],{"class":36,"line":171},[34,143380,132046],{"class":40},[34,143382,143383,143385,143387],{"class":36,"line":182},[34,143384,53424],{"class":40},[34,143386,53250],{"class":52939},[34,143388,52946],{"class":40},[14,143390,143392],{"id":143391},"_164-项目总结","16.4 项目总结",[1772,143394,143395,143398,143401,143404],{},[1775,143396,143397],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[1775,143399,143400],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[1775,143402,143403],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[1775,143405,143406],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[109,143408],{"style":127771,"src":143409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[1772,143411,143412],{"start":188},[1775,143413,143414],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[109,143416],{"style":127771,"src":143417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[1772,143419,143420],{"start":518},[1775,143421,143422],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[109,143424],{"style":127771,"src":143425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[24,143427,143428],{"className":128662,"code":138072,"language":128664,"meta":29,"style":29},[31,143429,143430],{"__ignoreMap":29},[34,143431,143432,143434,143436,143438,143440,143442,143444,143446,143448,143450,143452,143454],{"class":36,"line":37},[34,143433,2701],{"class":40},[34,143435,55460],{"class":52939},[34,143437,55463],{"class":3617},[34,143439,221],{"class":40},[34,143441,64338],{"class":504},[34,143443,16566],{"class":3617},[34,143445,221],{"class":40},[34,143447,138093],{"class":504},[34,143449,62659],{"class":3617},[34,143451,221],{"class":40},[34,143453,138100],{"class":504},[34,143455,52946],{"class":40},[1772,143457,143458,143461],{"start":524},[1775,143459,143460],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[1775,143462,143463],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1711,143465,143466],{},"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":29,"searchDepth":165,"depth":165,"links":143468},[143469,143474,143481,143489],{"id":141095,"depth":165,"text":141096,"children":143470},[143471,143472,143473],{"id":141099,"depth":171,"text":141100},{"id":141830,"depth":171,"text":141831},{"id":142143,"depth":171,"text":142144},{"id":142443,"depth":165,"text":142444,"children":143475},[143476,143477,143479],{"id":142447,"depth":171,"text":142448},{"id":142465,"depth":171,"text":143478},"16.2.2 列表页 header 和 nav 修改",{"id":142749,"depth":171,"text":143480},"16.2.3 列表页主体 sk_container",{"id":142941,"depth":165,"text":142942,"children":143482},[143483,143484,143486,143488],{"id":142956,"depth":171,"text":142957},{"id":142968,"depth":171,"text":143485},"16.3.2 header 头部实现",{"id":143047,"depth":171,"text":143487},"16.3.3 registerarea 主体模块实现",{"id":143325,"depth":171,"text":143326},{"id":143391,"depth":165,"text":143392},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141087,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143496,"title":143497,"body":143498,"description":1744,"extension":1745,"meta":143606,"navigation":1474,"path":143607,"seo":143608,"stem":143609,"__hash__":143610},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143499,"toc":143601},[143500,143503,143507,143510,143513,143522,143531,143535,143540,143547,143565,143568,143571,143574,143577,143580,143583,143586,143589,143592,143595,143598],[10,143501,143497],{"id":143502},"_17-web服务器与网站发布",[14,143504,143506],{"id":143505},"_171-web服务器","17.1 Web服务器",[103,143508,143509],{},"把自己网站上传到服务器上，可以让其他人访问",[109,143511],{"style":127771,"src":143512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[103,143514,143515,143518,143519],{},[1165,143516,143517],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[1165,143520,143521],{},"Web 服务器等",[103,143523,143524,143525,102381,143528,27386],{},"根据服务器在网络中所在的位置不同，又可分为 ",[1165,143526,143527],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[1165,143529,143530],{},"远程服务器",[19,143532,143534],{"id":143533},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[103,143536,143537],{},[1165,143538,143539],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[103,143541,143542,143543],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[236,143544,143545],{"href":143545,"rel":143546},"http:\u002F\u002Ffree.3v.do\u002F",[25510],[2798,143548,143549,143552,143555,143562],{},[1775,143550,143551],{},"去免费空间网站注册账号。",[1775,143553,143554],{},"记录下主机名、用户名、密码、域名。",[1775,143556,143557,143558,143561],{},"利用 ",[31,143559,143560],{},"utftp"," 软件 上传网站到远程服务器",[1775,143563,143564],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[103,143566,143567],{},"使用软件上传，对上传软件文件进行解压",[109,143569],{"style":127771,"src":143570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[109,143572],{"style":127771,"src":143573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[103,143575,143576],{},"输入刚刚申请的服务器账号信息：",[109,143578],{"style":127771,"src":143579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[109,143581],{"style":127771,"src":143582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[109,143584],{"style":127771,"src":143585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[109,143587],{"style":127771,"src":143588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[103,143590,143591],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[109,143593],{"style":127771,"src":143594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[103,143596,143597],{},"浏览器输入域名即可访问",[103,143599,143600],{},"首页一定必须是index",{"title":29,"searchDepth":165,"depth":165,"links":143602},[143603],{"id":143505,"depth":165,"text":143506,"children":143604},[143605],{"id":143533,"depth":171,"text":143534},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143497,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143612,"title":143613,"body":143614,"description":1744,"extension":1745,"meta":144541,"navigation":1474,"path":144542,"seo":144543,"stem":144544,"__hash__":144545},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143615,"toc":144524},[143616,143619,143623,143626,143629,143640,143643,143647,143651,143656,143659,143662,143665,143668,143672,143698,143702,143706,143709,143712,143716,143749,143753,143756,143759,143823,143827,143831,143834,143837,143840,143844,143889,143893,143896,143926,143930,143934,143937,143940,143944,143947,144016,144019,144127,144129,144135,144139,144142,144145,144241,144244,144248,144272,144276,144279,144283,144286,144290,144293,144296,144299,144302,144306,144309,144312,144316,144320,144323,144326,144329,144332,144336,144339,144343,144346,144349,144394,144398,144402,144405,144408,144411,144443,144447,144450,144484,144488,144491,144521],[10,143617,143613],{"id":143618},"_18-2d动画与3d转换",[14,143620,143622],{"id":143621},"_181-css3-2d转换","18.1 CSS3 2D转换",[103,143624,143625],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[103,143627,143628],{},"转换（transform）你可以简单理解为变形",[2798,143630,143631,143634,143637],{},[1775,143632,143633],{},"移动：translate",[1775,143635,143636],{},"旋转：rotate",[1775,143638,143639],{},"缩放：scale",[109,143641],{"style":127771,"src":143642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[19,143644,143646],{"id":143645},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[1353,143648,143650],{"id":143649},"_18111-translate介绍","18.1.1.1 translate介绍",[103,143652,143653,143654],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[1165,143655,134574],{},[109,143657],{"style":127771,"src":143658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[103,143660,143661],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[103,143663,143664],{},"对于行内元素无效",[103,143666,143667],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[1353,143669,143671],{"id":143670},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[24,143673,143674],{"className":127915,"code":140104,"language":127917,"meta":29,"style":29},[31,143675,143676,143682,143694],{"__ignoreMap":29},[34,143677,143678,143680],{"class":36,"line":37},[34,143679,53250],{"class":52939},[34,143681,17218],{"class":40},[34,143683,143684,143686,143688,143690,143692],{"class":36,"line":165},[34,143685,72109],{"class":44},[34,143687,53076],{"class":40},[34,143689,177],{"class":44},[34,143691,53195],{"class":44},[34,143693,2952],{"class":40},[34,143695,143696],{"class":36,"line":171},[34,143697,3223],{"class":40},[19,143699,143701],{"id":143700},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[1353,143703,143705],{"id":143704},"_18121-rotate介绍","18.1.2.1 rotate介绍",[103,143707,143708],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[109,143710],{"style":127771,"src":143711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[1353,143713,143715],{"id":143714},"_18122-旋转效果","18.1.2.2 旋转效果",[24,143717,143719],{"className":127915,"code":143718,"language":127917,"meta":29,"style":29},"div {\n  transform: rotate(45deg);\n}\n",[31,143720,143721,143727,143745],{"__ignoreMap":29},[34,143722,143723,143725],{"class":36,"line":37},[34,143724,53250],{"class":52939},[34,143726,17218],{"class":40},[34,143728,143729,143731,143733,143736,143738,143740,143743],{"class":36,"line":165},[34,143730,137899],{"class":44},[34,143732,53076],{"class":40},[34,143734,143735],{"class":44},"rotate",[34,143737,286],{"class":40},[34,143739,2324],{"class":44},[34,143741,143742],{"class":55},"deg",[34,143744,4372],{"class":40},[34,143746,143747],{"class":36,"line":171},[34,143748,3223],{"class":40},[1353,143750,143752],{"id":143751},"_18123-三角做法","18.1.2.3 三角做法",[103,143754,143755],{},"该下标当经过最外层大盒子时会实现向上反转",[109,143757],{"style":127771,"src":143758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[24,143760,143761],{"className":127915,"code":136435,"language":127917,"meta":29,"style":29},[31,143762,143763,143767,143773,143783,143793,143809,143819],{"__ignoreMap":29},[34,143764,143765],{"class":36,"line":37},[34,143766,136442],{"class":161},[34,143768,143769,143771],{"class":36,"line":165},[34,143770,136447],{"class":3617},[34,143772,17218],{"class":40},[34,143774,143775,143777,143779,143781],{"class":36,"line":171},[34,143776,72207],{"class":44},[34,143778,53076],{"class":40},[34,143780,177],{"class":44},[34,143782,2952],{"class":40},[34,143784,143785,143787,143789,143791],{"class":36,"line":182},[34,143786,72427],{"class":44},[34,143788,53076],{"class":40},[34,143790,177],{"class":44},[34,143792,2952],{"class":40},[34,143794,143795,143797,143799,143801,143803,143805,143807],{"class":36,"line":188},[34,143796,72535],{"class":44},[34,143798,53076],{"class":40},[34,143800,410],{"class":44},[34,143802,53131],{"class":55},[34,143804,53160],{"class":44},[34,143806,65630],{"class":44},[34,143808,2952],{"class":40},[34,143810,143811,143813,143815,143817],{"class":36,"line":518},[34,143812,136490],{"class":44},[34,143814,53076],{"class":40},[34,143816,64008],{"class":44},[34,143818,2952],{"class":40},[34,143820,143821],{"class":36,"line":524},[34,143822,3223],{"class":40},[19,143824,143826],{"id":143825},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[1353,143828,143830],{"id":143829},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[103,143832,143833],{},"设置中心点",[109,143835],{"style":127771,"src":143836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[103,143838,143839],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[1353,143841,143843],{"id":143842},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[24,143845,143847],{"className":127915,"code":143846,"language":127917,"meta":29,"style":29},"\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",[31,143848,143849,143854,143860,143875,143880,143885],{"__ignoreMap":29},[34,143850,143851],{"class":36,"line":37},[34,143852,143853],{"class":161},"\u002F* 转换中心点 *\u002F\n",[34,143855,143856,143858],{"class":36,"line":165},[34,143857,53250],{"class":52939},[34,143859,17218],{"class":40},[34,143861,143862,143865,143867,143869,143871,143873],{"class":36,"line":171},[34,143863,143864],{"class":44},"  transform-origin",[34,143866,53076],{"class":40},[34,143868,53231],{"class":44},[34,143870,18790],{"class":44},[34,143872,131778],{"class":40},[34,143874,136588],{"class":161},[34,143876,143877],{"class":36,"line":182},[34,143878,143879],{"class":161},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[34,143881,143882],{"class":36,"line":188},[34,143883,143884],{"class":161},"  \u002F* transform-origin: left top; *\u002F\n",[34,143886,143887],{"class":36,"line":518},[34,143888,3223],{"class":40},[1353,143890,143892],{"id":143891},"_18133-旋转案例","18.1.3.3 旋转案例",[109,143894],{"style":127771,"src":143895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[24,143897,143898],{"className":127915,"code":143718,"language":127917,"meta":29,"style":29},[31,143899,143900,143906,143922],{"__ignoreMap":29},[34,143901,143902,143904],{"class":36,"line":37},[34,143903,53250],{"class":52939},[34,143905,17218],{"class":40},[34,143907,143908,143910,143912,143914,143916,143918,143920],{"class":36,"line":165},[34,143909,137899],{"class":44},[34,143911,53076],{"class":40},[34,143913,143735],{"class":44},[34,143915,286],{"class":40},[34,143917,2324],{"class":44},[34,143919,143742],{"class":55},[34,143921,4372],{"class":40},[34,143923,143924],{"class":36,"line":171},[34,143925,3223],{"class":40},[19,143927,143929],{"id":143928},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[1353,143931,143933],{"id":143932},"_18141-scale介绍","18.1.4.1 scale介绍",[103,143935,143936],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[109,143938],{"style":127771,"src":143939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[1353,143941,143943],{"id":143942},"_18142-分页按钮","18.1.4.2 分页按钮",[109,143945],{"style":127771,"src":143946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[24,143948,143950],{"className":127915,"code":143949,"language":127917,"meta":29,"style":29},"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",[31,143951,143952,143958,143974,143978,143982,143987,143993,144007,144012],{"__ignoreMap":29},[34,143953,143954,143956],{"class":36,"line":37},[34,143955,53250],{"class":52939},[34,143957,17218],{"class":40},[34,143959,143960,143962,143964,143967,143969,143972],{"class":36,"line":165},[34,143961,137899],{"class":44},[34,143963,53076],{"class":40},[34,143965,143966],{"class":44},"scale",[34,143968,286],{"class":40},[34,143970,143971],{"class":44},"1.2",[34,143973,4372],{"class":40},[34,143975,143976],{"class":36,"line":171},[34,143977,3223],{"class":40},[34,143979,143980],{"class":36,"line":182},[34,143981,137376],{"class":40},[34,143983,143984],{"class":36,"line":188},[34,143985,143986],{"class":161},"\u002F* 2D 缩放 *\u002F\n",[34,143988,143989,143991],{"class":36,"line":518},[34,143990,53250],{"class":52939},[34,143992,17218],{"class":40},[34,143994,143995,143997,143999,144001,144003,144005],{"class":36,"line":524},[34,143996,137899],{"class":44},[34,143998,53076],{"class":40},[34,144000,143966],{"class":44},[34,144002,286],{"class":40},[34,144004,143971],{"class":44},[34,144006,4372],{"class":40},[34,144008,144009],{"class":36,"line":530},[34,144010,144011],{"class":161},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[34,144013,144014],{"class":36,"line":624},[34,144015,3223],{"class":40},[103,144017,144018],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[24,144020,144022],{"className":127915,"code":144021,"language":127917,"meta":29,"style":29},"\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",[31,144023,144024,144029,144039,144060,144081,144085,144090,144096,144123],{"__ignoreMap":29},[34,144025,144026],{"class":36,"line":37},[34,144027,144028],{"class":161},"\u002F* 定义动画 *\u002F\n",[34,144030,144031,144034,144037],{"class":36,"line":165},[34,144032,144033],{"class":55},"@keyframes",[34,144035,144036],{"class":51}," move",[34,144038,17218],{"class":40},[34,144040,144041,144044,144046,144048,144050,144053,144055,144057],{"class":36,"line":171},[34,144042,144043],{"class":3617},"  0%",[34,144045,81444],{"class":40},[34,144047,49773],{"class":44},[34,144049,53076],{"class":40},[34,144051,144052],{"class":44},"translateX",[34,144054,286],{"class":40},[34,144056,177],{"class":44},[34,144058,144059],{"class":40},"); }\n",[34,144061,144062,144065,144067,144069,144071,144073,144075,144077,144079],{"class":36,"line":182},[34,144063,144064],{"class":3617},"  100%",[34,144066,81444],{"class":40},[34,144068,49773],{"class":44},[34,144070,53076],{"class":40},[34,144072,144052],{"class":44},[34,144074,286],{"class":40},[34,144076,451],{"class":44},[34,144078,53131],{"class":55},[34,144080,144059],{"class":40},[34,144082,144083],{"class":36,"line":188},[34,144084,3223],{"class":40},[34,144086,144087],{"class":36,"line":518},[34,144088,144089],{"class":161},"\u002F* 调用动画 *\u002F\n",[34,144091,144092,144094],{"class":36,"line":524},[34,144093,53250],{"class":52939},[34,144095,17218],{"class":40},[34,144097,144098,144101,144103,144105,144107,144109,144111,144113,144115,144118,144121],{"class":36,"line":530},[34,144099,144100],{"class":44},"  animation",[34,144102,53076],{"class":40},[34,144104,136601],{"class":44},[34,144106,26764],{"class":44},[34,144108,2490],{"class":55},[34,144110,80317],{"class":44},[34,144112,98],{"class":44},[34,144114,2490],{"class":55},[34,144116,144117],{"class":44}," infinite",[34,144119,144120],{"class":44}," alternate",[34,144122,2952],{"class":40},[34,144124,144125],{"class":36,"line":624},[34,144126,3223],{"class":40},[103,144128,144018],{},[24,144130,144133],{"className":144131,"code":144132,"language":6838},[6836],"\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",[31,144134,144132],{"__ignoreMap":29},[1353,144136,144138],{"id":144137},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[103,144140,144141],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[109,144143],{"style":127771,"src":144144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[24,144146,144147],{"className":127915,"code":144021,"language":127917,"meta":29,"style":29},[31,144148,144149,144153,144161,144179,144199,144203,144207,144213,144237],{"__ignoreMap":29},[34,144150,144151],{"class":36,"line":37},[34,144152,144028],{"class":161},[34,144154,144155,144157,144159],{"class":36,"line":165},[34,144156,144033],{"class":55},[34,144158,144036],{"class":51},[34,144160,17218],{"class":40},[34,144162,144163,144165,144167,144169,144171,144173,144175,144177],{"class":36,"line":171},[34,144164,144043],{"class":3617},[34,144166,81444],{"class":40},[34,144168,49773],{"class":44},[34,144170,53076],{"class":40},[34,144172,144052],{"class":44},[34,144174,286],{"class":40},[34,144176,177],{"class":44},[34,144178,144059],{"class":40},[34,144180,144181,144183,144185,144187,144189,144191,144193,144195,144197],{"class":36,"line":182},[34,144182,144064],{"class":3617},[34,144184,81444],{"class":40},[34,144186,49773],{"class":44},[34,144188,53076],{"class":40},[34,144190,144052],{"class":44},[34,144192,286],{"class":40},[34,144194,451],{"class":44},[34,144196,53131],{"class":55},[34,144198,144059],{"class":40},[34,144200,144201],{"class":36,"line":188},[34,144202,3223],{"class":40},[34,144204,144205],{"class":36,"line":518},[34,144206,144089],{"class":161},[34,144208,144209,144211],{"class":36,"line":524},[34,144210,53250],{"class":52939},[34,144212,17218],{"class":40},[34,144214,144215,144217,144219,144221,144223,144225,144227,144229,144231,144233,144235],{"class":36,"line":530},[34,144216,144100],{"class":44},[34,144218,53076],{"class":40},[34,144220,136601],{"class":44},[34,144222,26764],{"class":44},[34,144224,2490],{"class":55},[34,144226,80317],{"class":44},[34,144228,98],{"class":44},[34,144230,2490],{"class":55},[34,144232,144117],{"class":44},[34,144234,144120],{"class":44},[34,144236,2952],{"class":40},[34,144238,144239],{"class":36,"line":624},[34,144240,3223],{"class":40},[103,144242,144243],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[19,144245,144247],{"id":144246},"_1823-知识点回顾","18.2.3 知识点回顾",[24,144249,144250],{"className":127915,"code":130084,"language":127917,"meta":29,"style":29},[31,144251,144252,144258,144268],{"__ignoreMap":29},[34,144253,144254,144256],{"class":36,"line":37},[34,144255,53250],{"class":52939},[34,144257,17218],{"class":40},[34,144259,144260,144262,144264,144266],{"class":36,"line":165},[34,144261,130097],{"class":44},[34,144263,53076],{"class":40},[34,144265,63375],{"class":44},[34,144267,2952],{"class":40},[34,144269,144270],{"class":36,"line":171},[34,144271,3223],{"class":40},[14,144273,144275],{"id":144274},"_183-3d-转换","18.3 3D 转换",[103,144277,144278],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[19,144280,144282],{"id":144281},"_1831-坐标轴认识","18.3.1 坐标轴认识",[109,144284],{"style":127771,"src":144285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[19,144287,144289],{"id":144288},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[109,144291],{"style":127771,"src":144292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[103,144294,144295],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[103,144297,144298],{},"translate3d的效果需要搭配透视perspective来使用",[109,144300],{"style":127771,"src":144301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[19,144303,144305],{"id":144304},"_1833-透视-perspective","18.3.3 透视 perspective",[109,144307],{"style":127771,"src":144308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[103,144310,144311],{},"透视写在父盒子上，单位为像素",[19,144313,144315],{"id":144314},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[1353,144317,144319],{"id":144318},"_18341-分开解释","18.3.4.1 分开解释",[109,144321],{"style":127771,"src":144322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[109,144324],{"style":127771,"src":144325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[109,144327],{"style":127771,"src":144328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[103,144330,144331],{},"总结来说就是左手原则",[1353,144333,144335],{"id":144334},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[109,144337],{"style":127771,"src":144338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[19,144340,144342],{"id":144341},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[109,144344],{"style":127771,"src":144345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[109,144347],{"style":127771,"src":144348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[24,144350,144352],{"className":127915,"code":144351,"language":127917,"meta":29,"style":29},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[31,144353,144354,144360,144373,144390],{"__ignoreMap":29},[34,144355,144356,144358],{"class":36,"line":37},[34,144357,53250],{"class":52939},[34,144359,17218],{"class":40},[34,144361,144362,144365,144367,144369,144371],{"class":36,"line":165},[34,144363,144364],{"class":44},"  perspective",[34,144366,53076],{"class":40},[34,144368,66713],{"class":44},[34,144370,53131],{"class":55},[34,144372,2952],{"class":40},[34,144374,144375,144377,144379,144382,144384,144386,144388],{"class":36,"line":171},[34,144376,137899],{"class":44},[34,144378,53076],{"class":40},[34,144380,144381],{"class":44},"rotateX",[34,144383,286],{"class":40},[34,144385,2324],{"class":44},[34,144387,143742],{"class":55},[34,144389,4372],{"class":40},[34,144391,144392],{"class":36,"line":182},[34,144393,3223],{"class":40},[19,144395,144397],{"id":144396},"_1836-案例","18.3.6 案例",[1353,144399,144401],{"id":144400},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[109,144403],{"style":127771,"src":144404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[109,144406],{"style":127771,"src":144407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[109,144409],{"style":127771,"src":144410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[24,144412,144414],{"className":127915,"code":144413,"language":127917,"meta":29,"style":29},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[31,144415,144416,144421,144427,144439],{"__ignoreMap":29},[34,144417,144418],{"class":36,"line":37},[34,144419,144420],{"class":161},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[34,144422,144423,144425],{"class":36,"line":165},[34,144424,134912],{"class":3617},[34,144426,17218],{"class":40},[34,144428,144429,144431,144433,144435,144437],{"class":36,"line":171},[34,144430,144364],{"class":44},[34,144432,53076],{"class":40},[34,144434,66713],{"class":44},[34,144436,53131],{"class":55},[34,144438,2952],{"class":40},[34,144440,144441],{"class":36,"line":182},[34,144442,3223],{"class":40},[1353,144444,144446],{"id":144445},"_18362-3d导航栏","18.3.6.2 3D导航栏",[109,144448],{"style":127771,"src":144449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[24,144451,144452],{"className":128662,"code":132019,"language":128664,"meta":29,"style":29},[31,144453,144454,144458,144472,144476],{"__ignoreMap":29},[34,144455,144456],{"class":36,"line":37},[34,144457,132026],{"class":161},[34,144459,144460,144462,144464,144466,144468,144470],{"class":36,"line":165},[34,144461,2701],{"class":40},[34,144463,53250],{"class":52939},[34,144465,55125],{"class":3617},[34,144467,221],{"class":40},[34,144469,132039],{"class":504},[34,144471,52946],{"class":40},[34,144473,144474],{"class":36,"line":171},[34,144475,132046],{"class":40},[34,144477,144478,144480,144482],{"class":36,"line":182},[34,144479,53424],{"class":40},[34,144481,53250],{"class":52939},[34,144483,52946],{"class":40},[1353,144485,144487],{"id":144486},"_18363-旋转木马","18.3.6.3 旋转木马",[109,144489],{"style":127771,"src":144490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[24,144492,144493],{"className":127915,"code":143718,"language":127917,"meta":29,"style":29},[31,144494,144495,144501,144517],{"__ignoreMap":29},[34,144496,144497,144499],{"class":36,"line":37},[34,144498,53250],{"class":52939},[34,144500,17218],{"class":40},[34,144502,144503,144505,144507,144509,144511,144513,144515],{"class":36,"line":165},[34,144504,137899],{"class":44},[34,144506,53076],{"class":40},[34,144508,143735],{"class":44},[34,144510,286],{"class":40},[34,144512,2324],{"class":44},[34,144514,143742],{"class":55},[34,144516,4372],{"class":40},[34,144518,144519],{"class":36,"line":171},[34,144520,3223],{"class":40},[1711,144522,144523],{},"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":29,"searchDepth":165,"depth":165,"links":144525},[144526,144533],{"id":143621,"depth":165,"text":143622,"children":144527},[144528,144529,144530,144531,144532],{"id":143645,"depth":171,"text":143646},{"id":143700,"depth":171,"text":143701},{"id":143825,"depth":171,"text":143826},{"id":143928,"depth":171,"text":143929},{"id":144246,"depth":171,"text":144247},{"id":144274,"depth":165,"text":144275,"children":144534},[144535,144536,144537,144538,144539,144540],{"id":144281,"depth":171,"text":144282},{"id":144288,"depth":171,"text":144289},{"id":144304,"depth":171,"text":144305},{"id":144314,"depth":171,"text":144315},{"id":144341,"depth":171,"text":144342},{"id":144396,"depth":171,"text":144397},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143613,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144547,"title":144548,"body":144549,"description":1744,"extension":1745,"meta":144752,"navigation":1474,"path":144753,"seo":144754,"stem":144755,"__hash__":144756},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144550,"toc":144741},[144551,144554,144558,144561,144564,144568,144571,144574,144577,144581,144584,144588,144591,144595,144598,144602,144616,144620,144645,144648,144651,144668,144672,144676,144679,144682,144686,144689,144692,144710,144714,144717,144731,144735,144738],[10,144552,144548],{"id":144553},"_19-移动端基础-前缀现状与视口",[14,144555,144557],{"id":144556},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[109,144559],{"style":127771,"src":144560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[103,144562,144563],{},"意思就是加个前缀，增加兼容性",[14,144565,144567],{"id":144566},"_192-移动端现状认识","19.2 移动端现状认识",[109,144569],{"style":127771,"src":144570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[103,144572,144573],{},"调试方法：",[109,144575],{"style":127771,"src":144576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144578,144580],{"id":144579},"_193-视口","19.3 视口",[103,144582,144583],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[19,144585,144587],{"id":144586},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[109,144589],{"style":127771,"src":144590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[19,144592,144594],{"id":144593},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[109,144596],{"style":127771,"src":144597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[19,144599,144601],{"id":144600},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[2798,144603,144604,144607,144610,144613],{},[1775,144605,144606],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[1775,144608,144609],{},"理想视口，对设备来讲，是最理想的视口尺寸",[1775,144611,144612],{},"需要手动添写meta视口标签通知浏览器操作",[1775,144614,144615],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[19,144617,144619],{"id":144618},"_1934-meta视口标签","19.3.4 meta视口标签",[24,144621,144623],{"className":128662,"code":144622,"language":128664,"meta":29,"style":29},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[31,144624,144625],{"__ignoreMap":29},[34,144626,144627,144629,144631,144633,144635,144637,144639,144641,144643],{"class":36,"line":37},[34,144628,2701],{"class":40},[34,144630,52983],{"class":52939},[34,144632,16566],{"class":3617},[34,144634,221],{"class":40},[34,144636,53030],{"class":504},[34,144638,53010],{"class":3617},[34,144640,221],{"class":40},[34,144642,53037],{"class":504},[34,144644,52946],{"class":40},[109,144646],{"style":127771,"src":144647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[103,144649,144650],{},"标准视口设置：",[1772,144652,144653,144656,144659,144662,144665],{},[1775,144654,144655],{},"视口宽度和设备保持一致",[1775,144657,144658],{},"视口的默认缩放比例1.0",[1775,144660,144661],{},"不允许用户自行缩放",[1775,144663,144664],{},"最大允许的缩放比例1.0",[1775,144666,144667],{},"最小允许的缩放比例1.0",[19,144669,144671],{"id":144670},"_1935-二倍图","19.3.5 二倍图",[1353,144673,144675],{"id":144674},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[109,144677],{"style":127771,"src":144678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[109,144680],{"style":127771,"src":144681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[1353,144683,144685],{"id":144684},"_19352-多倍图","19.3.5.2 多倍图",[109,144687],{"style":127771,"src":144688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[103,144690,144691],{},"二倍图法，代码如下：",[24,144693,144695],{"className":127915,"code":144694,"language":127917,"meta":29,"style":29},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[31,144696,144697,144702],{"__ignoreMap":29},[34,144698,144699],{"class":36,"line":37},[34,144700,144701],{"class":161},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[34,144703,144704,144707],{"class":36,"line":165},[34,144705,144706],{"class":52939},"background-size",[34,144708,144709],{"class":40},": 50% 50%;\n",[1353,144711,144713],{"id":144712},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[109,144715],{"style":127771,"src":144716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[1772,144718,144719,144722,144725,144728],{},[1775,144720,144721],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[1775,144723,144724],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[1775,144726,144727],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[1775,144729,144730],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[1353,144732,144734],{"id":144733},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[109,144736],{"style":127771,"src":144737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1711,144739,144740],{},"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":29,"searchDepth":165,"depth":165,"links":144742},[144743,144744,144745],{"id":144556,"depth":165,"text":144557},{"id":144566,"depth":165,"text":144567},{"id":144579,"depth":165,"text":144580,"children":144746},[144747,144748,144749,144750,144751],{"id":144586,"depth":171,"text":144587},{"id":144593,"depth":171,"text":144594},{"id":144600,"depth":171,"text":144601},{"id":144618,"depth":171,"text":144619},{"id":144670,"depth":171,"text":144671},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144548,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144758,"title":144759,"body":144760,"description":1744,"extension":1745,"meta":145637,"navigation":1474,"path":145638,"seo":145639,"stem":145640,"__hash__":145641},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144761,"toc":145621},[144762,144765,144769,144776,144779,144786,144789,144794,144797,144801,144805,144812,144815,144818,144822,144825,144828,144831,144834,144837,144841,144844,144848,144850,144853,144856,144859,144862,144864,144867,144869,144899,144901,144931,144935,144938,144942,144945,144962,144965,144968,145044,145046,145049,145052,145055,145058,145060,145063,145066,145070,145092,145095,145098,145102,145105,145111,145114,145118,145121,145124,145128,145131,145134,145137,145141,145144,145147,145150,145153,145157,145160,145164,145171,145174,145177,145180,145183,145193,145196,145199,145206,145209,145213,145216,145219,145223,145226,145229,145232,145277,145280,145283,145286,145288,145417,145419,145457,145460,145463,145465,145583,145585,145619],[10,144763,144759],{"id":144764},"_20-移动端布局实战上篇",[14,144766,144768],{"id":144767},"_201-移动端主流方案","20.1 移动端主流方案",[1772,144770,144771],{},[1775,144772,144773],{},[1165,144774,144775],{},"单独移动端页面（主流）",[109,144777],{"style":127771,"src":144778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[1772,144780,144781],{"start":165},[1775,144782,144783],{},[1165,144784,144785],{},"响应式兼容PC移动端",[109,144787],{"style":127771,"src":144788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[1772,144790,144791],{"start":171},[1775,144792,144793],{},"两种页面选型布局方式",[109,144795],{"style":127771,"src":144796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144798,144800],{"id":144799},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[19,144802,144804],{"id":144803},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[103,144806,144807,144808],{},"官网地址： ",[236,144809,144810],{"href":144810,"rel":144811},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25510],[109,144813],{"style":127771,"src":144814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[109,144816],{"style":127771,"src":144817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[19,144819,144821],{"id":144820},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[109,144823],{"style":127771,"src":144824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[109,144826],{"style":127771,"src":144827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[103,144829,144830],{},"去除高亮：",[103,144832,144833],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[103,144835,144836],{},"-webkit- tap-highlight-color: transparent;",[14,144838,144840],{"id":144839},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[109,144842],{"style":127771,"src":144843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144845,144847],{"id":144846},"_204-流式布局案例","20.4 流式布局案例",[103,144849,1847],{},[103,144851,144852],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[103,144854,144855],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[103,144857,144858],{},"图片格式：",[109,144860],{"style":127771,"src":144861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[103,144863,136958],{},[109,144865],{"style":127771,"src":144866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[103,144868,141285],{},[24,144870,144871],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,144872,144873],{"__ignoreMap":29},[34,144874,144875,144877,144879,144881,144883,144885,144887,144889,144891,144893,144895,144897],{"class":36,"line":37},[34,144876,2701],{"class":40},[34,144878,109],{"class":52939},[34,144880,56878],{"class":3617},[34,144882,221],{"class":40},[34,144884,135432],{"class":504},[34,144886,56886],{"class":3617},[34,144888,221],{"class":40},[34,144890,135439],{"class":504},[34,144892,135442],{"class":3617},[34,144894,221],{"class":40},[34,144896,135447],{"class":504},[34,144898,52946],{"class":40},[103,144900,141374],{},[24,144902,144903],{"className":128662,"code":135417,"language":128664,"meta":29,"style":29},[31,144904,144905],{"__ignoreMap":29},[34,144906,144907,144909,144911,144913,144915,144917,144919,144921,144923,144925,144927,144929],{"class":36,"line":37},[34,144908,2701],{"class":40},[34,144910,109],{"class":52939},[34,144912,56878],{"class":3617},[34,144914,221],{"class":40},[34,144916,135432],{"class":504},[34,144918,56886],{"class":3617},[34,144920,221],{"class":40},[34,144922,135439],{"class":504},[34,144924,135442],{"class":3617},[34,144926,221],{"class":40},[34,144928,135447],{"class":504},[34,144930,52946],{"class":40},[14,144932,144934],{"id":144933},"_205-flex布局","20.5 flex布局",[109,144936],{"style":127771,"src":144937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[19,144939,144941],{"id":144940},"_2051-布局原理","20.5.1 布局原理",[103,144943,144944],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[2798,144946,144947,144950,144953,144956,144959],{},[1775,144948,144949],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[1775,144951,144952],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[1775,144954,144955],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[1775,144957,144958],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[1775,144960,144961],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[103,144963,144964],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[103,144966,144967],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[24,144969,144971],{"className":127915,"code":144970,"language":127917,"meta":29,"style":29},"\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",[31,144972,144973,144978,144985,144995,145007,145018,145029,145040],{"__ignoreMap":29},[34,144974,144975],{"class":36,"line":37},[34,144976,144977],{"class":161},"\u002F* Flex 弹性布局 *\u002F\n",[34,144979,144980,144983],{"class":36,"line":165},[34,144981,144982],{"class":3617},".container",[34,144984,17218],{"class":40},[34,144986,144987,144989,144991,144993],{"class":36,"line":171},[34,144988,129531],{"class":44},[34,144990,53076],{"class":40},[34,144992,53116],{"class":44},[34,144994,2952],{"class":40},[34,144996,144997,145000,145002,145005],{"class":36,"line":182},[34,144998,144999],{"class":44},"  flex-direction",[34,145001,53076],{"class":40},[34,145003,145004],{"class":44},"row",[34,145006,2952],{"class":40},[34,145008,145009,145012,145014,145016],{"class":36,"line":188},[34,145010,145011],{"class":44},"  justify-content",[34,145013,53076],{"class":40},[34,145015,53307],{"class":44},[34,145017,2952],{"class":40},[34,145019,145020,145023,145025,145027],{"class":36,"line":518},[34,145021,145022],{"class":44},"  align-items",[34,145024,53076],{"class":40},[34,145026,53231],{"class":44},[34,145028,2952],{"class":40},[34,145030,145031,145034,145036,145038],{"class":36,"line":524},[34,145032,145033],{"class":44},"  flex-wrap",[34,145035,53076],{"class":40},[34,145037,80247],{"class":44},[34,145039,2952],{"class":40},[34,145041,145042],{"class":36,"line":530},[34,145043,3223],{"class":40},[103,145045,72092],{},[103,145047,145048],{},".form-item .male-label {",[103,145050,145051],{},"   margin-right: 20px;",[103,145053,145054],{},"   display: inline-flex;",[103,145056,145057],{},"   align-items: center;",[103,145059,2737],{},[109,145061],{"style":127771,"src":145062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[109,145064],{"style":127771,"src":145065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[19,145067,145069],{"id":145068},"_2052-常见父项属性","20.5.2 常见父项属性",[1772,145071,145072,145075,145078,145081,145084,145087,145090],{},[1775,145073,145074],{},"flex-direction：设置主轴的方向",[1775,145076,145077],{},"justify-content：设置主轴上的子元素排列方式",[1775,145079,145080],{},"flex-wrap：设置子元素是否换行",[1775,145082,145083],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[1775,145085,145086],{},"align-items：设置侧轴上的子元素排列方式（单行）",[1775,145088,145089],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[1775,145091,145074],{},[109,145093],{"style":127771,"src":145094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[109,145096],{"style":127771,"src":145097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[1772,145099,145100],{"start":165},[1775,145101,145077],{},[109,145103],{"style":127771,"src":145104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[103,145106,145107,145110],{},[31,145108,145109],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[103,145112,145113],{},"跟着主轴走",[1772,145115,145116],{"start":171},[1775,145117,145080],{},[109,145119],{"style":127771,"src":145120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[103,145122,145123],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[1772,145125,145126],{"start":182},[1775,145127,145083],{},[109,145129],{"style":127771,"src":145130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[103,145132,145133],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[103,145135,145136],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[1772,145138,145139],{"start":188},[1775,145140,145086],{},[109,145142],{"style":127771,"src":145143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[103,145145,145146],{},"align-items与align-content之间的区别：",[103,145148,145149],{},"单找items，多找content",[109,145151],{"style":127771,"src":145152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[1772,145154,145155],{"start":518},[1775,145156,145089],{},[109,145158],{"style":127771,"src":145159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[19,145161,145163],{"id":145162},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[1772,145165,145166],{},[1775,145167,145168],{},[1165,145169,145170],{},"flex 属性",[103,145172,145173],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[109,145175],{"style":127771,"src":145176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[103,145178,145179],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[103,145181,145182],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[1772,145184,145185],{"start":165},[1775,145186,145187,15441,145190],{},[1165,145188,145189],{},"align-self",[1165,145191,145192],{},"控制子项自己在侧轴上的排列方式",[109,145194],{"style":127771,"src":145195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[103,145197,145198],{},"单个子盒子在父盒子侧轴上的排列方式",[1772,145200,145201],{"start":171},[1775,145202,145203,145205],{},[1165,145204,74],{}," 属性定义项目的排列顺序",[109,145207],{"style":127771,"src":145208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[19,145210,145212],{"id":145211},"_2054-背景线性渐变","20.5.4 背景线性渐变",[109,145214],{"style":127771,"src":145215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[103,145217,145218],{},"必须要添加浏览器的私有前缀",[19,145220,145222],{"id":145221},"_2055-携程网首页案例","20.5.5 携程网首页案例",[103,145224,145225],{},"学到最重要的知识：",[103,145227,145228],{},"flex处理这样的布局思路",[109,145230],{"style":127771,"src":145231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[24,145233,145235],{"className":127915,"code":145234,"language":127917,"meta":29,"style":29},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[31,145236,145237,145243,145253,145263,145273],{"__ignoreMap":29},[34,145238,145239,145241],{"class":36,"line":37},[34,145240,144982],{"class":3617},[34,145242,17218],{"class":40},[34,145244,145245,145247,145249,145251],{"class":36,"line":165},[34,145246,129531],{"class":44},[34,145248,53076],{"class":40},[34,145250,53116],{"class":44},[34,145252,2952],{"class":40},[34,145254,145255,145257,145259,145261],{"class":36,"line":171},[34,145256,145011],{"class":44},[34,145258,53076],{"class":40},[34,145260,53231],{"class":44},[34,145262,2952],{"class":40},[34,145264,145265,145267,145269,145271],{"class":36,"line":182},[34,145266,145022],{"class":44},[34,145268,53076],{"class":40},[34,145270,53231],{"class":44},[34,145272,2952],{"class":40},[34,145274,145275],{"class":36,"line":188},[34,145276,3223],{"class":40},[103,145278,145279],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[103,145281,145282],{},"使用属性选择器",[109,145284],{"style":127771,"src":145285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[103,145287,70528],{},[24,145289,145291],{"className":128662,"code":145290,"language":128664,"meta":29,"style":29},"\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",[31,145292,145293,145298,145312,145317,145337,145342,145361,145366,145385,145390,145409],{"__ignoreMap":29},[34,145294,145295],{"class":36,"line":37},[34,145296,145297],{"class":161},"\u003C!-- 携程网移动端案例结构 -->\n",[34,145299,145300,145302,145304,145306,145308,145310],{"class":36,"line":165},[34,145301,2701],{"class":40},[34,145303,53250],{"class":52939},[34,145305,55125],{"class":3617},[34,145307,221],{"class":40},[34,145309,93959],{"class":504},[34,145311,52946],{"class":40},[34,145313,145314],{"class":36,"line":171},[34,145315,145316],{"class":161},"  \u003C!-- 搜索栏 -->\n",[34,145318,145319,145321,145323,145325,145327,145330,145333,145335],{"class":36,"line":182},[34,145320,53783],{"class":40},[34,145322,53250],{"class":52939},[34,145324,55125],{"class":3617},[34,145326,221],{"class":40},[34,145328,145329],{"class":504},"\"search-index\"",[34,145331,145332],{"class":40},">...\u003C\u002F",[34,145334,53250],{"class":52939},[34,145336,52946],{"class":40},[34,145338,145339],{"class":36,"line":188},[34,145340,145341],{"class":161},"  \u003C!-- 焦点图 -->\n",[34,145343,145344,145346,145348,145350,145352,145355,145357,145359],{"class":36,"line":518},[34,145345,53783],{"class":40},[34,145347,53250],{"class":52939},[34,145349,55125],{"class":3617},[34,145351,221],{"class":40},[34,145353,145354],{"class":504},"\"focus\"",[34,145356,145332],{"class":40},[34,145358,53250],{"class":52939},[34,145360,52946],{"class":40},[34,145362,145363],{"class":36,"line":524},[34,145364,145365],{"class":161},"  \u003C!-- 主导航 -->\n",[34,145367,145368,145370,145372,145374,145376,145379,145381,145383],{"class":36,"line":530},[34,145369,53783],{"class":40},[34,145371,53250],{"class":52939},[34,145373,55125],{"class":3617},[34,145375,221],{"class":40},[34,145377,145378],{"class":504},"\"local-nav\"",[34,145380,145332],{"class":40},[34,145382,53250],{"class":52939},[34,145384,52946],{"class":40},[34,145386,145387],{"class":36,"line":624},[34,145388,145389],{"class":161},"  \u003C!-- 子导航 -->\n",[34,145391,145392,145394,145396,145398,145400,145403,145405,145407],{"class":36,"line":630},[34,145393,53783],{"class":40},[34,145395,53250],{"class":52939},[34,145397,55125],{"class":3617},[34,145399,221],{"class":40},[34,145401,145402],{"class":504},"\"nav-common\"",[34,145404,145332],{"class":40},[34,145406,53250],{"class":52939},[34,145408,52946],{"class":40},[34,145410,145411,145413,145415],{"class":36,"line":636},[34,145412,53424],{"class":40},[34,145414,53250],{"class":52939},[34,145416,52946],{"class":40},[103,145418,72092],{},[24,145420,145421],{"className":127915,"code":138367,"language":127917,"meta":29,"style":29},[31,145422,145423,145437,145453],{"__ignoreMap":29},[34,145424,145425,145427,145429,145431,145433,145435],{"class":36,"line":37},[34,145426,55460],{"class":52939},[34,145428,2681],{"class":40},[34,145430,104470],{"class":3617},[34,145432,221],{"class":55},[34,145434,64338],{"class":504},[34,145436,138384],{"class":40},[34,145438,145439,145441,145443,145445,145447,145449,145451],{"class":36,"line":165},[34,145440,72535],{"class":44},[34,145442,53076],{"class":40},[34,145444,394],{"class":44},[34,145446,53131],{"class":55},[34,145448,53160],{"class":44},[34,145450,131495],{"class":44},[34,145452,2952],{"class":40},[34,145454,145455],{"class":36,"line":171},[34,145456,3223],{"class":40},[103,145458,145459],{},"总代码和效果展示：",[109,145461],{"style":127771,"src":145462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[103,145464,70528],{},[24,145466,145467],{"className":128662,"code":145290,"language":128664,"meta":29,"style":29},[31,145468,145469,145473,145487,145491,145509,145513,145531,145535,145553,145557,145575],{"__ignoreMap":29},[34,145470,145471],{"class":36,"line":37},[34,145472,145297],{"class":161},[34,145474,145475,145477,145479,145481,145483,145485],{"class":36,"line":165},[34,145476,2701],{"class":40},[34,145478,53250],{"class":52939},[34,145480,55125],{"class":3617},[34,145482,221],{"class":40},[34,145484,93959],{"class":504},[34,145486,52946],{"class":40},[34,145488,145489],{"class":36,"line":171},[34,145490,145316],{"class":161},[34,145492,145493,145495,145497,145499,145501,145503,145505,145507],{"class":36,"line":182},[34,145494,53783],{"class":40},[34,145496,53250],{"class":52939},[34,145498,55125],{"class":3617},[34,145500,221],{"class":40},[34,145502,145329],{"class":504},[34,145504,145332],{"class":40},[34,145506,53250],{"class":52939},[34,145508,52946],{"class":40},[34,145510,145511],{"class":36,"line":188},[34,145512,145341],{"class":161},[34,145514,145515,145517,145519,145521,145523,145525,145527,145529],{"class":36,"line":518},[34,145516,53783],{"class":40},[34,145518,53250],{"class":52939},[34,145520,55125],{"class":3617},[34,145522,221],{"class":40},[34,145524,145354],{"class":504},[34,145526,145332],{"class":40},[34,145528,53250],{"class":52939},[34,145530,52946],{"class":40},[34,145532,145533],{"class":36,"line":524},[34,145534,145365],{"class":161},[34,145536,145537,145539,145541,145543,145545,145547,145549,145551],{"class":36,"line":530},[34,145538,53783],{"class":40},[34,145540,53250],{"class":52939},[34,145542,55125],{"class":3617},[34,145544,221],{"class":40},[34,145546,145378],{"class":504},[34,145548,145332],{"class":40},[34,145550,53250],{"class":52939},[34,145552,52946],{"class":40},[34,145554,145555],{"class":36,"line":624},[34,145556,145389],{"class":161},[34,145558,145559,145561,145563,145565,145567,145569,145571,145573],{"class":36,"line":630},[34,145560,53783],{"class":40},[34,145562,53250],{"class":52939},[34,145564,55125],{"class":3617},[34,145566,221],{"class":40},[34,145568,145402],{"class":504},[34,145570,145332],{"class":40},[34,145572,53250],{"class":52939},[34,145574,52946],{"class":40},[34,145576,145577,145579,145581],{"class":36,"line":636},[34,145578,53424],{"class":40},[34,145580,53250],{"class":52939},[34,145582,52946],{"class":40},[103,145584,72092],{},[24,145586,145587],{"className":128662,"code":132019,"language":128664,"meta":29,"style":29},[31,145588,145589,145593,145607,145611],{"__ignoreMap":29},[34,145590,145591],{"class":36,"line":37},[34,145592,132026],{"class":161},[34,145594,145595,145597,145599,145601,145603,145605],{"class":36,"line":165},[34,145596,2701],{"class":40},[34,145598,53250],{"class":52939},[34,145600,55125],{"class":3617},[34,145602,221],{"class":40},[34,145604,132039],{"class":504},[34,145606,52946],{"class":40},[34,145608,145609],{"class":36,"line":171},[34,145610,132046],{"class":40},[34,145612,145613,145615,145617],{"class":36,"line":182},[34,145614,53424],{"class":40},[34,145616,53250],{"class":52939},[34,145618,52946],{"class":40},[1711,145620,139316],{},{"title":29,"searchDepth":165,"depth":165,"links":145622},[145623,145624,145628,145629,145630],{"id":144767,"depth":165,"text":144768},{"id":144799,"depth":165,"text":144800,"children":145625},[145626,145627],{"id":144803,"depth":171,"text":144804},{"id":144820,"depth":171,"text":144821},{"id":144839,"depth":165,"text":144840},{"id":144846,"depth":165,"text":144847},{"id":144933,"depth":165,"text":144934,"children":145631},[145632,145633,145634,145635,145636],{"id":144940,"depth":171,"text":144941},{"id":145068,"depth":171,"text":145069},{"id":145162,"depth":171,"text":145163},{"id":145211,"depth":171,"text":145212},{"id":145221,"depth":171,"text":145222},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144759,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145643,"title":145644,"body":145645,"description":1744,"extension":1745,"meta":146872,"navigation":1474,"path":146873,"seo":146874,"stem":146875,"__hash__":146876},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145646,"toc":146850},[145647,145650,145654,145658,145661,145664,145668,145673,145676,145679,145682,145685,145688,145745,145748,145753,145756,145759,145763,145774,145778,145781,145784,145791,145796,145800,145803,145809,145812,145816,145819,145826,145829,145832,145839,145842,145849,145852,145855,145862,145865,145868,145870,145887,145891,145894,145897,145900,145904,145907,145910,145913,145916,145919,145922,145924,145927,145930,145992,145995,146105,146112,146118,146121,146124,146128,146131,146135,146140,146143,146150,146153,146159,146164,146167,146170,146173,146176,146179,146182,146185,146188,146244,146246,146272,146276,146279,146282,146285,146293,146296,146299,146303,146359,146362,146366,146372,146383,146386,146391,146394,146397,146403,146406,146409,146412,146415,146418,146421,146424,146427,146452,146458,146461,146464,146467,146470,146473,146476,146481,146484,146487,146490,146498,146501,146508,146511,146514,146516,146540,146542,146545,146548,146551,146554,146557,146560,146563,146597,146600,146603,146637,146644,146647,146650,146653,146656,146659,146662,146669,146672,146675,146678,146681,146688,146691,146694,146701,146704,146707,146711,146714,146717,146720,146723,146726,146729,146732,146735,146737,146761,146763,146787,146791,146802,146805,146808,146811,146814,146817,146820,146823,146826,146829,146832,146835,146838,146841,146844,146847],[10,145648,145644],{"id":145649},"_21-移动端布局实战下篇",[14,145651,145653],{"id":145652},"_211-rem适配布局","21.1 rem适配布局",[19,145655,145657],{"id":145656},"_2111-rem单位","21.1.1 rem单位",[109,145659],{"style":127771,"src":145660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[103,145662,145663],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[19,145665,145667],{"id":145666},"_2112-媒体查询","21.1.2 媒体查询",[1772,145669,145670],{},[1775,145671,145672],{},"参数介绍",[109,145674],{"style":127771,"src":145675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[109,145677],{"style":127771,"src":145678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[109,145680],{"style":127771,"src":145681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[109,145683],{"style":127771,"src":145684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[109,145686],{"style":127771,"src":145687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[24,145689,145691],{"className":127915,"code":145690,"language":127917,"meta":29,"style":29},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[31,145692,145693,145698,145717,145724,145737,145741],{"__ignoreMap":29},[34,145694,145695],{"class":36,"line":37},[34,145696,145697],{"class":161},"\u002F* 媒体查询 *\u002F\n",[34,145699,145700,145703,145705,145708,145710,145713,145715],{"class":36,"line":165},[34,145701,145702],{"class":55},"@media",[34,145704,3313],{"class":40},[34,145706,145707],{"class":44},"max-width",[34,145709,53076],{"class":40},[34,145711,145712],{"class":44},"768",[34,145714,53131],{"class":55},[34,145716,14090],{"class":40},[34,145718,145719,145722],{"class":36,"line":171},[34,145720,145721],{"class":3617},"  .container",[34,145723,17218],{"class":40},[34,145725,145726,145729,145731,145733,145735],{"class":36,"line":182},[34,145727,145728],{"class":44},"    width",[34,145730,53076],{"class":40},[34,145732,451],{"class":44},[34,145734,2131],{"class":55},[34,145736,2952],{"class":40},[34,145738,145739],{"class":36,"line":188},[34,145740,128711],{"class":40},[34,145742,145743],{"class":36,"line":518},[34,145744,3223],{"class":40},[103,145746,145747],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[1772,145749,145750],{"start":165},[1775,145751,145752],{},"引入资源",[109,145754],{"style":127771,"src":145755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[103,145757,145758],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[19,145760,145762],{"id":145761},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[2798,145764,145765,145768,145771],{},[1775,145766,145767],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[1775,145769,145770],{},"媒体查询可以根据不同设备宽度来修改样式",[1775,145772,145773],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145775,145777],{"id":145776},"_212-less基础","21.2 Less基础",[103,145779,145780],{},"css冗余度较高，不利于复用，没有很好的计算能力",[103,145782,145783],{},"Less可以解决该问题，它是css的扩展语言",[103,145785,145786,145787],{},"Less中文网址： ",[236,145788,145789],{"href":145789,"rel":145790},"http:\u002F\u002Flesscss.cn\u002F",[25510],[103,145792,145793],{},[1165,145794,145795],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[19,145797,145799],{"id":145798},"_2121-less安装","21.2.1 less安装",[103,145801,145802],{},"如果使用vscode，则无需进行下方安装步骤",[103,145804,145805],{},[236,145806,145807],{"href":145807,"rel":145808},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25510],[109,145810],{"style":127771,"src":145811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[19,145813,145815],{"id":145814},"_2122-less使用","21.2.2 less使用",[103,145817,145818],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[1772,145820,145821],{},[1775,145822,145823],{},[1165,145824,145825],{},"Less 变量",[109,145827],{"style":127771,"src":145828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[109,145830],{"style":127771,"src":145831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[1772,145833,145834],{"start":165},[1775,145835,145836],{},[1165,145837,145838],{},"Less 编译",[109,145840],{"style":127771,"src":145841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[1772,145843,145844],{"start":171},[1775,145845,145846],{},[1165,145847,145848],{},"Less 嵌套",[109,145850],{"style":127771,"src":145851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[109,145853],{"style":127771,"src":145854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[1772,145856,145857],{"start":182},[1775,145858,145859],{},[1165,145860,145861],{},"Less 运算",[109,145863],{"style":127771,"src":145864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[103,145866,145867],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[103,145869,1847],{},[2798,145871,145872,145875,145878,145881,145884],{},[1775,145873,145874],{},"乘号（*）和除号（\u002F）的写法",[1775,145876,145877],{},"运算符中间左右有个空格隔开 1px + 5",[1775,145879,145880],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[1775,145882,145883],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[1775,145885,145886],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145888,145890],{"id":145889},"_213-rem-适配方案","21.3 rem 适配方案",[103,145892,145893],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[103,145895,145896],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[109,145898],{"style":127771,"src":145899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[19,145901,145903],{"id":145902},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[103,145905,145906],{},"rem + 媒体查询 + less 技术",[109,145908],{"style":127771,"src":145909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[103,145911,145912],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[103,145914,145915],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[109,145917],{"style":127771,"src":145918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[103,145920,145921],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[103,145923,16279],{},[109,145925],{"style":127771,"src":145926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[103,145928,145929],{},"index.html:",[24,145931,145933],{"className":127915,"code":145932,"language":127917,"meta":29,"style":29},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[31,145934,145935,145940,145946,145962,145966,145972,145988],{"__ignoreMap":29},[34,145936,145937],{"class":36,"line":37},[34,145938,145939],{"class":161},"\u002F* rem 适配方案 *\u002F\n",[34,145941,145942,145944],{"class":36,"line":165},[34,145943,52274],{"class":52939},[34,145945,17218],{"class":40},[34,145947,145948,145950,145952,145955,145957,145959],{"class":36,"line":171},[34,145949,72265],{"class":44},[34,145951,53076],{"class":40},[34,145953,145954],{"class":44},"62.5",[34,145956,2131],{"class":55},[34,145958,131778],{"class":40},[34,145960,145961],{"class":161},"\u002F* 1rem = 10px *\u002F\n",[34,145963,145964],{"class":36,"line":182},[34,145965,3223],{"class":40},[34,145967,145968,145970],{"class":36,"line":188},[34,145969,131763],{"class":3617},[34,145971,17218],{"class":40},[34,145973,145974,145976,145978,145980,145983,145985],{"class":36,"line":518},[34,145975,72207],{"class":44},[34,145977,53076],{"class":40},[34,145979,410],{"class":44},[34,145981,145982],{"class":55},"rem",[34,145984,131778],{"class":40},[34,145986,145987],{"class":161},"\u002F* 100px *\u002F\n",[34,145989,145990],{"class":36,"line":524},[34,145991,3223],{"class":40},[103,145993,145994],{},"common.less",[24,145996,145998],{"className":127915,"code":145997,"language":127917,"meta":29,"style":29},"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",[31,145999,146000,146006,146021,146025,146031,146045,146049,146053,146057,146063,146077,146081,146087,146101],{"__ignoreMap":29},[34,146001,146002,146004],{"class":36,"line":37},[34,146003,52274],{"class":52939},[34,146005,17218],{"class":40},[34,146007,146008,146010,146012,146014,146016,146018],{"class":36,"line":165},[34,146009,72265],{"class":44},[34,146011,53076],{"class":40},[34,146013,145954],{"class":44},[34,146015,2131],{"class":55},[34,146017,27713],{"class":40},[34,146019,146020],{"class":161},"\u002F* 10px *\u002F\n",[34,146022,146023],{"class":36,"line":171},[34,146024,3223],{"class":40},[34,146026,146027,146029],{"class":36,"line":182},[34,146028,53250],{"class":52939},[34,146030,17218],{"class":40},[34,146032,146033,146035,146037,146039,146041,146043],{"class":36,"line":188},[34,146034,72207],{"class":44},[34,146036,53076],{"class":40},[34,146038,410],{"class":44},[34,146040,145982],{"class":55},[34,146042,27713],{"class":40},[34,146044,145987],{"class":161},[34,146046,146047],{"class":36,"line":518},[34,146048,3223],{"class":40},[34,146050,146051],{"class":36,"line":524},[34,146052,137376],{"class":40},[34,146054,146055],{"class":36,"line":530},[34,146056,145939],{"class":161},[34,146058,146059,146061],{"class":36,"line":624},[34,146060,52274],{"class":52939},[34,146062,17218],{"class":40},[34,146064,146065,146067,146069,146071,146073,146075],{"class":36,"line":630},[34,146066,72265],{"class":44},[34,146068,53076],{"class":40},[34,146070,145954],{"class":44},[34,146072,2131],{"class":55},[34,146074,131778],{"class":40},[34,146076,145961],{"class":161},[34,146078,146079],{"class":36,"line":636},[34,146080,3223],{"class":40},[34,146082,146083,146085],{"class":36,"line":1513},[34,146084,131763],{"class":3617},[34,146086,17218],{"class":40},[34,146088,146089,146091,146093,146095,146097,146099],{"class":36,"line":1519},[34,146090,72207],{"class":44},[34,146092,53076],{"class":40},[34,146094,410],{"class":44},[34,146096,145982],{"class":55},[34,146098,131778],{"class":40},[34,146100,145987],{"class":161},[34,146102,146103],{"class":36,"line":3283},[34,146104,3223],{"class":40},[103,146106,146107,146108,146111],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25198,146109,146110],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[24,146113,146116],{"className":146114,"code":146115,"language":6838},[6836],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[31,146117,146115],{"__ignoreMap":29},[103,146119,146120],{},"less保存时会自动变成.css文件",[103,146122,146123],{},"好好搞懂上述代码写法",[19,146125,146127],{"id":146126},"_2132-样式导入样式","21.3.2 样式导入样式",[109,146129],{"style":127771,"src":146130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[19,146132,146134],{"id":146133},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[1772,146136,146137],{},[1775,146138,146139],{},"准备工作",[109,146141],{"style":127771,"src":146142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[103,146144,146145,146146],{},"github地址：",[236,146147,146148],{"href":146148,"rel":146149},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25510],[103,146151,146152],{},"下载之后，将index.js文件拖到项目中就可以了",[103,146154,146155,146156],{},"js文件引入到index.html中使用的是",[31,146157,146158],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[1772,146160,146161],{"start":165},[1775,146162,146163],{},"vscode插件",[109,146165],{"style":127771,"src":146166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[103,146168,146169],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[103,146171,146172],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[109,146174],{"style":127771,"src":146175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[103,146177,146178],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[109,146180],{"style":127771,"src":146181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[103,146183,146184],{},"修改成75就可以，alt+z为快捷键",[103,146186,146187],{},"index.css：",[24,146189,146190],{"className":127915,"code":145932,"language":127917,"meta":29,"style":29},[31,146191,146192,146196,146202,146216,146220,146226,146240],{"__ignoreMap":29},[34,146193,146194],{"class":36,"line":37},[34,146195,145939],{"class":161},[34,146197,146198,146200],{"class":36,"line":165},[34,146199,52274],{"class":52939},[34,146201,17218],{"class":40},[34,146203,146204,146206,146208,146210,146212,146214],{"class":36,"line":171},[34,146205,72265],{"class":44},[34,146207,53076],{"class":40},[34,146209,145954],{"class":44},[34,146211,2131],{"class":55},[34,146213,131778],{"class":40},[34,146215,145961],{"class":161},[34,146217,146218],{"class":36,"line":182},[34,146219,3223],{"class":40},[34,146221,146222,146224],{"class":36,"line":188},[34,146223,131763],{"class":3617},[34,146225,17218],{"class":40},[34,146227,146228,146230,146232,146234,146236,146238],{"class":36,"line":518},[34,146229,72207],{"class":44},[34,146231,53076],{"class":40},[34,146233,410],{"class":44},[34,146235,145982],{"class":55},[34,146237,131778],{"class":40},[34,146239,145987],{"class":161},[34,146241,146242],{"class":36,"line":524},[34,146243,3223],{"class":40},[103,146245,145929],{},[24,146247,146248],{"className":127915,"code":128319,"language":127917,"meta":29,"style":29},[31,146249,146250,146256,146268],{"__ignoreMap":29},[34,146251,146252,146254],{"class":36,"line":37},[34,146253,53439],{"class":52939},[34,146255,17218],{"class":40},[34,146257,146258,146260,146262,146264,146266],{"class":36,"line":165},[34,146259,72265],{"class":44},[34,146261,53076],{"class":40},[34,146263,2396],{"class":44},[34,146265,53131],{"class":55},[34,146267,2952],{"class":40},[34,146269,146270],{"class":36,"line":171},[34,146271,3223],{"class":40},[14,146273,146275],{"id":146274},"_214-响应式开发","21.4 响应式开发",[103,146277,146278],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[109,146280],{"style":127771,"src":146281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[103,146283,146284],{},"做法：",[2798,146286,146287,146290],{},[1775,146288,146289],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[1775,146291,146292],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[109,146294],{"style":127771,"src":146295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[103,146297,146298],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[19,146300,146302],{"id":146301},"_2141-简单代码示范","21.4.1 简单代码示范",[24,146304,146305],{"className":127915,"code":145932,"language":127917,"meta":29,"style":29},[31,146306,146307,146311,146317,146331,146335,146341,146355],{"__ignoreMap":29},[34,146308,146309],{"class":36,"line":37},[34,146310,145939],{"class":161},[34,146312,146313,146315],{"class":36,"line":165},[34,146314,52274],{"class":52939},[34,146316,17218],{"class":40},[34,146318,146319,146321,146323,146325,146327,146329],{"class":36,"line":171},[34,146320,72265],{"class":44},[34,146322,53076],{"class":40},[34,146324,145954],{"class":44},[34,146326,2131],{"class":55},[34,146328,131778],{"class":40},[34,146330,145961],{"class":161},[34,146332,146333],{"class":36,"line":182},[34,146334,3223],{"class":40},[34,146336,146337,146339],{"class":36,"line":188},[34,146338,131763],{"class":3617},[34,146340,17218],{"class":40},[34,146342,146343,146345,146347,146349,146351,146353],{"class":36,"line":518},[34,146344,72207],{"class":44},[34,146346,53076],{"class":40},[34,146348,410],{"class":44},[34,146350,145982],{"class":55},[34,146352,131778],{"class":40},[34,146354,145987],{"class":161},[34,146356,146357],{"class":36,"line":524},[34,146358,3223],{"class":40},[103,146360,146361],{},"父盒子一般命名为container",[19,146363,146365],{"id":146364},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[103,146367,146368,146369],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[1165,146370,146371],{},"使得 Web 开发更加快捷",[2798,146373,146374],{},[1775,146375,146376,146377],{},"官网：",[1165,146378,146379],{},[236,146380,146381],{"href":146381,"rel":146382},"http:\u002F\u002Fgetbootstrap.com\u002F",[25510],[103,146384,146385],{},"可以直接去官网拿现成的东西",[1772,146387,146388],{},[1775,146389,146390],{},"Bootstrap的使用",[103,146392,146393],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[103,146395,146396],{},"Bootstrap 使用四步曲：",[103,146398,146399,146402],{},[1165,146400,146401],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[109,146404],{"style":127771,"src":146405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[103,146407,146408],{},"打开Bootstrap官网，然后下载",[109,146410],{"style":127771,"src":146411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[109,146413],{"style":127771,"src":146414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[103,146416,146417],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[103,146419,146420],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[103,146422,146423],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[109,146425],{"style":127771,"src":146426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[24,146428,146430],{"className":127915,"code":146429,"language":127917,"meta":29,"style":29},".center {\n  color: red;\n}\n",[31,146431,146432,146438,146448],{"__ignoreMap":29},[34,146433,146434,146436],{"class":36,"line":37},[34,146435,128206],{"class":3617},[34,146437,17218],{"class":40},[34,146439,146440,146442,146444,146446],{"class":36,"line":165},[34,146441,72544],{"class":44},[34,146443,53076],{"class":40},[34,146445,59060],{"class":44},[34,146447,2952],{"class":40},[34,146449,146450],{"class":36,"line":171},[34,146451,3223],{"class":40},[103,146453,146454,146457],{},[31,146455,146456],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[109,146459],{"style":127771,"src":146460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[109,146462],{"style":127771,"src":146463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[109,146465],{"style":127771,"src":146466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[103,146468,146469],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[109,146471],{"style":127771,"src":146472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[103,146474,146475],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[1772,146477,146478],{"start":165},[1775,146479,146480],{},"布局容器",[109,146482],{"style":127771,"src":146483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[103,146485,146486],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[103,146488,146489],{},"container-fluid用于移动式布局比较方便",[1772,146491,146492],{"start":171},[1775,146493,146494,146495],{},"bootstrap ",[1165,146496,146497],{},"栅格系统原理",[109,146499],{"style":127771,"src":146500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[1772,146502,146503],{"start":182},[1775,146504,146505],{},[1165,146506,146507],{},"栅格选项参数",[109,146509],{"style":127771,"src":146510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[103,146512,146513],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[103,146515,16279],{},[24,146517,146518],{"className":127915,"code":146429,"language":127917,"meta":29,"style":29},[31,146519,146520,146526,146536],{"__ignoreMap":29},[34,146521,146522,146524],{"class":36,"line":37},[34,146523,128206],{"class":3617},[34,146525,17218],{"class":40},[34,146527,146528,146530,146532,146534],{"class":36,"line":165},[34,146529,72544],{"class":44},[34,146531,53076],{"class":40},[34,146533,59060],{"class":44},[34,146535,2952],{"class":40},[34,146537,146538],{"class":36,"line":171},[34,146539,3223],{"class":40},[103,146541,136958],{},[109,146543],{"style":127771,"src":146544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[103,146546,146547],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[103,146549,146550],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[103,146552,146553],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[103,146555,146556],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[103,146558,146559],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[103,146561,146562],{},"汇总展示说明：",[24,146564,146565],{"className":128662,"code":132019,"language":128664,"meta":29,"style":29},[31,146566,146567,146571,146585,146589],{"__ignoreMap":29},[34,146568,146569],{"class":36,"line":37},[34,146570,132026],{"class":161},[34,146572,146573,146575,146577,146579,146581,146583],{"class":36,"line":165},[34,146574,2701],{"class":40},[34,146576,53250],{"class":52939},[34,146578,55125],{"class":3617},[34,146580,221],{"class":40},[34,146582,132039],{"class":504},[34,146584,52946],{"class":40},[34,146586,146587],{"class":36,"line":171},[34,146588,132046],{"class":40},[34,146590,146591,146593,146595],{"class":36,"line":182},[34,146592,53424],{"class":40},[34,146594,53250],{"class":52939},[34,146596,52946],{"class":40},[109,146598],{"style":127771,"src":146599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[103,146601,146602],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[24,146604,146605],{"className":128662,"code":132019,"language":128664,"meta":29,"style":29},[31,146606,146607,146611,146625,146629],{"__ignoreMap":29},[34,146608,146609],{"class":36,"line":37},[34,146610,132026],{"class":161},[34,146612,146613,146615,146617,146619,146621,146623],{"class":36,"line":165},[34,146614,2701],{"class":40},[34,146616,53250],{"class":52939},[34,146618,55125],{"class":3617},[34,146620,221],{"class":40},[34,146622,132039],{"class":504},[34,146624,52946],{"class":40},[34,146626,146627],{"class":36,"line":171},[34,146628,132046],{"class":40},[34,146630,146631,146633,146635],{"class":36,"line":182},[34,146632,53424],{"class":40},[34,146634,53250],{"class":52939},[34,146636,52946],{"class":40},[1772,146638,146639],{"start":188},[1775,146640,146641],{},[1165,146642,146643],{},"列嵌套",[109,146645],{"style":127771,"src":146646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[103,146648,146649],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[103,146651,146652],{},"没加row内部这样：",[109,146654],{"style":127771,"src":146655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[103,146657,146658],{},"加上row之后内部为：",[109,146660],{"style":127771,"src":146661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[1772,146663,146664],{"start":518},[1775,146665,146666],{},[1165,146667,146668],{},"列偏移",[109,146670],{"style":127771,"src":146671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[103,146673,146674],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[103,146676,146677],{},"要加偏移量，即偏移份数",[103,146679,146680],{},"偏移的份数=12-两个盒子的份数",[1772,146682,146683],{"start":524},[1775,146684,146685],{},[1165,146686,146687],{},"列排序",[109,146689],{"style":127771,"src":146690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[103,146692,146693],{},"pull拉左；push推右",[1772,146695,146696],{"start":530},[1775,146697,146698],{},[1165,146699,146700],{},"响应式工具",[109,146702],{"style":127771,"src":146703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[103,146705,146706],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[19,146708,146710],{"id":146709},"_2143-响应式小项目","21.4.3 响应式小项目",[103,146712,146713],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[103,146715,146716],{},"ul {",[103,146718,146719],{},"list-style: none;",[103,146721,146722],{},"margin:0;",[103,146724,146725],{},"padding:0; }",[109,146727],{"style":127771,"src":146728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[109,146730],{"style":127771,"src":146731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[103,146733,146734],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[103,146736,70528],{},[24,146738,146739],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,146740,146741,146747,146757],{"__ignoreMap":29},[34,146742,146743,146745],{"class":36,"line":37},[34,146744,131763],{"class":3617},[34,146746,17218],{"class":40},[34,146748,146749,146751,146753,146755],{"class":36,"line":165},[34,146750,132395],{"class":44},[34,146752,53076],{"class":40},[34,146754,25381],{"class":44},[34,146756,2952],{"class":40},[34,146758,146759],{"class":36,"line":171},[34,146760,3223],{"class":40},[103,146762,72092],{},[24,146764,146765],{"className":127915,"code":140585,"language":127917,"meta":29,"style":29},[31,146766,146767,146773,146783],{"__ignoreMap":29},[34,146768,146769,146771],{"class":36,"line":37},[34,146770,131763],{"class":3617},[34,146772,17218],{"class":40},[34,146774,146775,146777,146779,146781],{"class":36,"line":165},[34,146776,132395],{"class":44},[34,146778,53076],{"class":40},[34,146780,25381],{"class":44},[34,146782,2952],{"class":40},[34,146784,146785],{"class":36,"line":171},[34,146786,3223],{"class":40},[14,146788,146790],{"id":146789},"_215-swiper-插件使用","21.5 swiper 插件使用",[2798,146792,146793,146796,146799],{},[1775,146794,146795],{},"下载需要的css和js文件html页面中 引入相关文件",[1775,146797,146798],{},"官网找到类似案例，复制html结构，css样式 js 语法",[1775,146800,146801],{},"根据需求定制修改模块",[109,146803],{"style":127771,"src":146804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[103,146806,146807],{},"解压后将这两部分放到项目中",[109,146809],{"style":127771,"src":146810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[103,146812,146813],{},"这个插件可以帮助我们实现轮播图效果",[103,146815,146816],{},"用法：",[109,146818],{"style":127771,"src":146819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[103,146821,146822],{},"找到自己喜欢的",[109,146824],{"style":127771,"src":146825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[103,146827,146828],{},"右键，查看网页源代码",[109,146830],{"style":127771,"src":146831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[103,146833,146834],{},"复制人家的结构内容",[103,146836,146837],{},"然后去看API文档：",[109,146839],{"style":127771,"src":146840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[103,146842,146843],{},"可以看看如何修改样式",[103,146845,146846],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1711,146848,146849],{},"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":29,"searchDepth":165,"depth":165,"links":146851},[146852,146857,146861,146866,146871],{"id":145652,"depth":165,"text":145653,"children":146853},[146854,146855,146856],{"id":145656,"depth":171,"text":145657},{"id":145666,"depth":171,"text":145667},{"id":145761,"depth":171,"text":145762},{"id":145776,"depth":165,"text":145777,"children":146858},[146859,146860],{"id":145798,"depth":171,"text":145799},{"id":145814,"depth":171,"text":145815},{"id":145889,"depth":165,"text":145890,"children":146862},[146863,146864,146865],{"id":145902,"depth":171,"text":145903},{"id":146126,"depth":171,"text":146127},{"id":146133,"depth":171,"text":146134},{"id":146274,"depth":165,"text":146275,"children":146867},[146868,146869,146870],{"id":146301,"depth":171,"text":146302},{"id":146364,"depth":171,"text":146365},{"id":146709,"depth":171,"text":146710},{"id":146789,"depth":165,"text":146790},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145644,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146878,"title":146879,"body":146880,"description":1744,"extension":1745,"meta":147100,"navigation":1474,"path":147101,"seo":147102,"stem":147103,"__hash__":147104},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146881,"toc":147096},[146882,146885,146889,146892,146907,146912,146915,146920,146955,146960,146972,146977,146990,146995,147012,147017,147037,147042,147060,147063,147066,147069,147072,147076,147079,147082,147085,147088,147091,147094],[10,146883,146879],{"id":146884},"_22-代码提交与新型相对单位",[14,146886,146888],{"id":146887},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[103,146890,146891],{},"法1：",[1772,146893,146894,146901,146904],{},[1775,146895,146896,146897],{},"登录网站注册：",[236,146898,146899],{"href":146899,"rel":146900},"https:\u002F\u002Fgitee.com\u002F",[25510],[1775,146902,146903],{},"码云创建新的仓库",[1775,146905,146906],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[2798,146908,146909],{},[1775,146910,146911],{},"在网站根目录右键-- Git Bash Here",[109,146913],{"style":127771,"src":146914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[2798,146916,146917],{},[1775,146918,146919],{},"如果是第一次利用git提交，请配置好全局选项",[24,146921,146923],{"className":118659,"code":146922,"language":118661,"meta":29,"style":29},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[31,146924,146925,146941],{"__ignoreMap":29},[34,146926,146927,146930,146932,146935,146938],{"class":36,"line":37},[34,146928,146929],{"class":3617},"git",[34,146931,121082],{"class":504},[34,146933,146934],{"class":44}," --global",[34,146936,146937],{"class":504}," user.name",[34,146939,146940],{"class":504}," \"你的名字\"\n",[34,146942,146943,146945,146947,146949,146952],{"class":36,"line":165},[34,146944,146929],{"class":3617},[34,146946,121082],{"class":504},[34,146948,146934],{"class":44},[34,146950,146951],{"class":504}," user.email",[34,146953,146954],{"class":504}," \"你的邮箱\"\n",[2798,146956,146957],{},[1775,146958,146959],{},"初始化仓库",[24,146961,146963],{"className":118659,"code":146962,"language":118661,"meta":29,"style":29},"git init\n",[31,146964,146965],{"__ignoreMap":29},[34,146966,146967,146969],{"class":36,"line":37},[34,146968,146929],{"class":3617},[34,146970,146971],{"class":504}," init\n",[2798,146973,146974],{},[1775,146975,146976],{},"把本地文件放到暂存区",[24,146978,146980],{"className":118659,"code":146979,"language":118661,"meta":29,"style":29},"git add .\n",[31,146981,146982],{"__ignoreMap":29},[34,146983,146984,146986,146988],{"class":36,"line":37},[34,146985,146929],{"class":3617},[34,146987,6860],{"class":504},[34,146989,30387],{"class":504},[2798,146991,146992],{},[1775,146993,146994],{},"把本地文件放到本地仓库里面",[24,146996,146998],{"className":118659,"code":146997,"language":118661,"meta":29,"style":29},"git commit -m \"first commit\"\n",[31,146999,147000],{"__ignoreMap":29},[34,147001,147002,147004,147007,147009],{"class":36,"line":37},[34,147003,146929],{"class":3617},[34,147005,147006],{"class":504}," commit",[34,147008,102245],{"class":44},[34,147010,147011],{"class":504}," \"first commit\"\n",[2798,147013,147014],{},[1775,147015,147016],{},"链接远程仓库",[24,147018,147020],{"className":118659,"code":147019,"language":118661,"meta":29,"style":29},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[31,147021,147022],{"__ignoreMap":29},[34,147023,147024,147026,147029,147031,147034],{"class":36,"line":37},[34,147025,146929],{"class":3617},[34,147027,147028],{"class":504}," remote",[34,147030,6860],{"class":504},[34,147032,147033],{"class":504}," origin",[34,147035,147036],{"class":504}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[2798,147038,147039],{},[1775,147040,147041],{},"把本地仓库的文件推送到远程仓库 push",[24,147043,147045],{"className":118659,"code":147044,"language":118661,"meta":29,"style":29},"git push -u origin master\n",[31,147046,147047],{"__ignoreMap":29},[34,147048,147049,147051,147053,147055,147057],{"class":36,"line":37},[34,147050,146929],{"class":3617},[34,147052,30662],{"class":504},[34,147054,29936],{"class":44},[34,147056,147033],{"class":504},[34,147058,147059],{"class":504}," master\n",[109,147061],{"style":127771,"src":147062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[103,147064,147065],{},"上方方法暂未实现，后边学完git后在整",[103,147067,147068],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[109,147070],{"style":127771,"src":147071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147073,147075],{"id":147074},"_222-新型相对单位","22.2 新型相对单位",[109,147077],{"style":127771,"src":147078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[109,147080],{"style":127771,"src":147081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[103,147083,147084],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[103,147086,147087],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[109,147089],{"style":127771,"src":147090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[103,147092,147093],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1711,147095,25603],{},{"title":29,"searchDepth":165,"depth":165,"links":147097},[147098,147099],{"id":146887,"depth":165,"text":146888},{"id":147074,"depth":165,"text":147075},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146879,"description":1744},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147106,"title":147107,"body":147108,"description":147112,"extension":1745,"meta":147113,"navigation":1474,"path":147114,"seo":147115,"stem":147116,"__hash__":147117},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147109,"toc":147110},[],{"title":29,"searchDepth":165,"depth":165,"links":147111},[],"自己正经开始学编程的第一门语言！",{"category":94475},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147107,"description":147112},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147119,"title":147120,"body":147121,"description":1744,"extension":1745,"meta":148268,"navigation":1474,"path":148269,"seo":148270,"stem":148271,"__hash__":148272},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147122,"toc":148244},[147123,147126,147130,147133,147136,147161,147164,147170,147174,147177,147204,147207,147247,147250,147262,147265,147271,147275,147279,147306,147323,147330,147334,147337,147363,147366,147370,147373,147413,147416,147433,147439,147443,147448,147492,147495,147513,147516,147584,147588,147595,147598,147613,147616,147625,147628,147639,147642,147651,147654,147671,147674,147689,147693,147697,147700,147702,147722,147726,147729,147732,147743,147746,147752,147756,147762,147789,147792,147804,147807,147818,147821,147827,147831,147837,147887,147890,147932,147935,147968,147971,148005,148009,148012,148032,148035,148071,148074,148087,148091,148095,148101,148104,148117,148121,148124,148130,148133,148137,148140,148143,148192,148196,148212,148218,148225,148231,148241],[10,147124,147120],{"id":147125},"_1-python环境与第一个程序",[14,147127,147129],{"id":147128},"_11-什么是python","1.1 什么是Python",[103,147131,147132],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[103,147134,147135],{},"理解 Python 时抓住三个关键词：",[1772,147137,147138,147141,147144],{},[1775,147139,147140],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[1775,147142,147143],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[1775,147145,147146,147147,2021,147150,2021,147153,2021,147156,2021,147158,30031],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[31,147148,147149],{},"os",[31,147151,147152],{},"sys",[31,147154,147155],{},"json",[31,147157,59499],{},[31,147159,147160],{},"datetime",[103,147162,147163],{},"Python 程序的运行链路：",[24,147165,147168],{"className":147166,"code":147167,"language":6838,"meta":29},[6836],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[31,147169,147167],{"__ignoreMap":29},[14,147171,147173],{"id":147172},"_12-python解释器","1.2 Python解释器",[103,147175,147176],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[24,147178,147180],{"className":25467,"code":147179,"language":25469,"meta":29,"style":29},"python --version\npython3 --version\npython\npython3\n",[31,147181,147182,147188,147194,147199],{"__ignoreMap":29},[34,147183,147184,147186],{"class":36,"line":37},[34,147185,28],{"class":3617},[34,147187,27939],{"class":44},[34,147189,147190,147192],{"class":36,"line":165},[34,147191,102242],{"class":3617},[34,147193,27939],{"class":44},[34,147195,147196],{"class":36,"line":171},[34,147197,147198],{"class":3617},"python\n",[34,147200,147201],{"class":36,"line":182},[34,147202,147203],{"class":3617},"python3\n",[103,147205,147206],{},"进入交互模式后，可以直接输入表达式：",[24,147208,147210],{"className":26,"code":147209,"language":28,"meta":29,"style":29},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[31,147211,147212,147223,147228,147242],{"__ignoreMap":29},[34,147213,147214,147217,147219,147221],{"class":36,"line":37},[34,147215,147216],{"class":55},">>>",[34,147218,26764],{"class":44},[34,147220,47205],{"class":55},[34,147222,49362],{"class":44},[34,147224,147225],{"class":36,"line":165},[34,147226,147227],{"class":44},"3\n",[34,147229,147230,147232,147235,147237,147240],{"class":36,"line":171},[34,147231,147216],{"class":55},[34,147233,147234],{"class":44}," print",[34,147236,286],{"class":40},[34,147238,147239],{"class":504},"\"hello python\"",[34,147241,101],{"class":40},[34,147243,147244],{"class":36,"line":182},[34,147245,147246],{"class":40},"hello python\n",[103,147248,147249],{},"退出交互模式：",[24,147251,147253],{"className":26,"code":147252,"language":28,"meta":29,"style":29},"exit()\n",[31,147254,147255],{"__ignoreMap":29},[34,147256,147257,147260],{"class":36,"line":37},[34,147258,147259],{"class":44},"exit",[34,147261,3630],{"class":40},[103,147263,147264],{},"或使用快捷键：",[24,147266,147269],{"className":147267,"code":147268,"language":6838,"meta":29},[6836],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[31,147270,147268],{"__ignoreMap":29},[14,147272,147274],{"id":147273},"_13-安装python","1.3 安装Python",[19,147276,147278],{"id":147277},"_131-windows安装","1.3.1 Windows安装",[1772,147280,147281,147288,147291,147297,147303],{},[1775,147282,147283,147284],{},"打开 Python 官网：",[236,147285,147286],{"href":147286,"rel":147287},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25510],[1775,147289,147290],{},"下载 Windows Installer。",[1775,147292,147293,147294,30031],{},"安装时勾选 ",[31,147295,147296],{},"Add Python to PATH",[1775,147298,147299,147300,30031],{},"点击 ",[31,147301,147302],{},"Install Now",[1775,147304,147305],{},"安装完成后打开命令提示符验证：",[24,147307,147309],{"className":25467,"code":147308,"language":25469,"meta":29,"style":29},"python --version\npip --version\n",[31,147310,147311,147317],{"__ignoreMap":29},[34,147312,147313,147315],{"class":36,"line":37},[34,147314,28],{"class":3617},[34,147316,27939],{"class":44},[34,147318,147319,147321],{"class":36,"line":165},[34,147320,25476],{"class":3617},[34,147322,27939],{"class":44},[103,147324,147325,147326,147329],{},"如果提示 ",[31,147327,147328],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[19,147331,147333],{"id":147332},"_132-macos安装","1.3.2 macOS安装",[103,147335,147336],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[24,147338,147340],{"className":25467,"code":147339,"language":25469,"meta":29,"style":29},"brew install python\npython3 --version\npip3 --version\n",[31,147341,147342,147351,147357],{"__ignoreMap":29},[34,147343,147344,147347,147349],{"class":36,"line":37},[34,147345,147346],{"class":3617},"brew",[34,147348,25479],{"class":504},[34,147350,125681],{"class":504},[34,147352,147353,147355],{"class":36,"line":165},[34,147354,102242],{"class":3617},[34,147356,27939],{"class":44},[34,147358,147359,147361],{"class":36,"line":171},[34,147360,121063],{"class":3617},[34,147362,27939],{"class":44},[103,147364,147365],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[19,147367,147369],{"id":147368},"_133-linux安装","1.3.3 Linux安装",[103,147371,147372],{},"Ubuntu\u002FDebian：",[24,147374,147376],{"className":25467,"code":147375,"language":25469,"meta":29,"style":29},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[31,147377,147378,147386,147401,147407],{"__ignoreMap":29},[34,147379,147380,147382,147384],{"class":36,"line":37},[34,147381,26222],{"class":3617},[34,147383,118680],{"class":504},[34,147385,27888],{"class":504},[34,147387,147388,147390,147392,147394,147396,147398],{"class":36,"line":165},[34,147389,26222],{"class":3617},[34,147391,118680],{"class":504},[34,147393,25479],{"class":504},[34,147395,105766],{"class":504},[34,147397,102161],{"class":504},[34,147399,147400],{"class":504}," python3-venv\n",[34,147402,147403,147405],{"class":36,"line":171},[34,147404,102242],{"class":3617},[34,147406,27939],{"class":44},[34,147408,147409,147411],{"class":36,"line":182},[34,147410,121063],{"class":3617},[34,147412,27939],{"class":44},[103,147414,147415],{},"Fedora：",[24,147417,147419],{"className":25467,"code":147418,"language":25469,"meta":29,"style":29},"sudo dnf install python3 python3-pip\n",[31,147420,147421],{"__ignoreMap":29},[34,147422,147423,147425,147427,147429,147431],{"class":36,"line":37},[34,147424,26222],{"class":3617},[34,147426,27961],{"class":504},[34,147428,25479],{"class":504},[34,147430,105766],{"class":504},[34,147432,121128],{"class":504},[103,147434,147435,147436,147438],{},"Linux 上通常使用 ",[31,147437,102242],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147440,147442],{"id":147441},"_14-pip包管理器","1.4 pip包管理器",[103,147444,147445,147447],{},[31,147446,25476],{}," 用来安装第三方库。",[24,147449,147451],{"className":25467,"code":147450,"language":25469,"meta":29,"style":29},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[31,147452,147453,147462,147471,147479,147485],{"__ignoreMap":29},[34,147454,147455,147457,147459],{"class":36,"line":37},[34,147456,25476],{"class":3617},[34,147458,25479],{"class":504},[34,147460,147461],{"class":504}," requests\n",[34,147463,147464,147466,147469],{"class":36,"line":165},[34,147465,25476],{"class":3617},[34,147467,147468],{"class":504}," uninstall",[34,147470,147461],{"class":504},[34,147472,147473,147475,147477],{"class":36,"line":171},[34,147474,25476],{"class":3617},[34,147476,118937],{"class":504},[34,147478,147461],{"class":504},[34,147480,147481,147483],{"class":36,"line":182},[34,147482,25476],{"class":3617},[34,147484,120318],{"class":504},[34,147486,147487,147489],{"class":36,"line":188},[34,147488,25476],{"class":3617},[34,147490,147491],{"class":504}," freeze\n",[103,147493,147494],{},"国内网络较慢时可以临时使用镜像：",[24,147496,147498],{"className":25467,"code":147497,"language":25469,"meta":29,"style":29},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[31,147499,147500],{"__ignoreMap":29},[34,147501,147502,147504,147506,147509,147511],{"class":36,"line":37},[34,147503,25476],{"class":3617},[34,147505,25479],{"class":504},[34,147507,147508],{"class":504}," requests",[34,147510,28076],{"class":44},[34,147512,121091],{"class":504},[103,147514,147515],{},"常见第三方库：",[1948,147517,147518,147527],{},[1951,147519,147520],{},[1954,147521,147522,147525],{},[1957,147523,147524],{},"库",[1957,147526,104059],{},[1994,147528,147529,147537,147544,147552,147560,147568,147576],{},[1954,147530,147531,147534],{},[1999,147532,147533],{},"requests",[1999,147535,147536],{},"网络请求",[1954,147538,147539,147541],{},[1999,147540,101989],{},[1999,147542,147543],{},"数值计算",[1954,147545,147546,147549],{},[1999,147547,147548],{},"pandas",[1999,147550,147551],{},"表格数据处理",[1954,147553,147554,147557],{},[1999,147555,147556],{},"matplotlib",[1999,147558,147559],{},"绘图",[1954,147561,147562,147565],{},[1999,147563,147564],{},"pyecharts",[1999,147566,147567],{},"ECharts 图表",[1954,147569,147570,147573],{},[1999,147571,147572],{},"flask",[1999,147574,147575],{},"Web 后端",[1954,147577,147578,147581],{},[1999,147579,147580],{},"pytest",[1999,147582,147583],{},"自动化测试",[14,147585,147587],{"id":147586},"_15-虚拟环境","1.5 虚拟环境",[103,147589,147590,147591,147594],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[31,147592,147593],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[103,147596,147597],{},"创建虚拟环境：",[24,147599,147601],{"className":25467,"code":147600,"language":25469,"meta":29,"style":29},"python -m venv .venv\n",[31,147602,147603],{"__ignoreMap":29},[34,147604,147605,147607,147609,147611],{"class":36,"line":37},[34,147606,28],{"class":3617},[34,147608,102245],{"class":44},[34,147610,102248],{"class":504},[34,147612,102251],{"class":504},[103,147614,147615],{},"Windows 激活：",[24,147617,147619],{"className":25467,"code":147618,"language":25469,"meta":29,"style":29},".venv\\Scripts\\activate\n",[31,147620,147621],{"__ignoreMap":29},[34,147622,147623],{"class":36,"line":37},[34,147624,147618],{"class":3617},[103,147626,147627],{},"macOS\u002FLinux 激活：",[24,147629,147631],{"className":25467,"code":147630,"language":25469,"meta":29,"style":29},"source .venv\u002Fbin\u002Factivate\n",[31,147632,147633],{"__ignoreMap":29},[34,147634,147635,147637],{"class":36,"line":37},[34,147636,102256],{"class":44},[34,147638,102259],{"class":504},[103,147640,147641],{},"退出虚拟环境：",[24,147643,147645],{"className":25467,"code":147644,"language":25469,"meta":29,"style":29},"deactivate\n",[31,147646,147647],{"__ignoreMap":29},[34,147648,147649],{"class":36,"line":37},[34,147650,147644],{"class":3617},[103,147652,147653],{},"保存依赖：",[24,147655,147657],{"className":25467,"code":147656,"language":25469,"meta":29,"style":29},"pip freeze > requirements.txt\n",[31,147658,147659],{"__ignoreMap":29},[34,147660,147661,147663,147666,147668],{"class":36,"line":37},[34,147662,25476],{"class":3617},[34,147664,147665],{"class":504}," freeze",[34,147667,27868],{"class":55},[34,147669,147670],{"class":504}," requirements.txt\n",[103,147672,147673],{},"安装依赖：",[24,147675,147677],{"className":25467,"code":147676,"language":25469,"meta":29,"style":29},"pip install -r requirements.txt\n",[31,147678,147679],{"__ignoreMap":29},[34,147680,147681,147683,147685,147687],{"class":36,"line":37},[34,147682,25476],{"class":3617},[34,147684,25479],{"class":504},[34,147686,121002],{"class":44},[34,147688,147670],{"class":504},[14,147690,147692],{"id":147691},"_16-开发工具","1.6 开发工具",[19,147694,147696],{"id":147695},"_161-pycharm","1.6.1 PyCharm",[103,147698,147699],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[103,147701,123425],{},[1772,147703,147704,147707,147710,147716,147719],{},[1775,147705,147706],{},"New Project：创建项目。",[1775,147708,147709],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[1775,147711,147712,147713,127346],{},"New Python File：创建 ",[31,147714,147715],{},".py",[1775,147717,147718],{},"Run：运行当前文件。",[1775,147720,147721],{},"Debug：断点调试。",[19,147723,147725],{"id":147724},"_162-vs-code","1.6.2 VS Code",[103,147727,147728],{},"VS Code 轻量，适合后续多语言开发。",[103,147730,147731],{},"建议安装插件：",[1772,147733,147734,147737,147740],{},[1775,147735,147736],{},"Python。",[1775,147738,147739],{},"Pylance。",[1775,147741,147742],{},"Jupyter。",[103,147744,147745],{},"选择解释器：",[24,147747,147750],{"className":147748,"code":147749,"language":6838,"meta":29},[6836],"Ctrl + Shift + P -> Python: Select Interpreter\n",[31,147751,147749],{"__ignoreMap":29},[14,147753,147755],{"id":147754},"_17-第一个python程序","1.7 第一个Python程序",[103,147757,147758,147759,26264],{},"创建文件 ",[31,147760,147761],{},"hello.py",[24,147763,147765],{"className":26,"code":147764,"language":28,"meta":29,"style":29},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[31,147766,147767,147778],{"__ignoreMap":29},[34,147768,147769,147771,147773,147776],{"class":36,"line":37},[34,147770,723],{"class":44},[34,147772,286],{"class":40},[34,147774,147775],{"class":504},"\"Hello World\"",[34,147777,101],{"class":40},[34,147779,147780,147782,147784,147787],{"class":36,"line":165},[34,147781,723],{"class":44},[34,147783,286],{"class":40},[34,147785,147786],{"class":504},"\"你好，Python\"",[34,147788,101],{"class":40},[103,147790,147791],{},"在终端运行：",[24,147793,147795],{"className":25467,"code":147794,"language":25469,"meta":29,"style":29},"python hello.py\n",[31,147796,147797],{"__ignoreMap":29},[34,147798,147799,147801],{"class":36,"line":37},[34,147800,28],{"class":3617},[34,147802,147803],{"class":504}," hello.py\n",[103,147805,147806],{},"或：",[24,147808,147810],{"className":25467,"code":147809,"language":25469,"meta":29,"style":29},"python3 hello.py\n",[31,147811,147812],{"__ignoreMap":29},[34,147813,147814,147816],{"class":36,"line":37},[34,147815,102242],{"class":3617},[34,147817,147803],{"class":504},[103,147819,147820],{},"输出：",[24,147822,147825],{"className":147823,"code":147824,"language":6838,"meta":29},[6836],"Hello World\n你好，Python\n",[31,147826,147824],{"__ignoreMap":29},[14,147828,147830],{"id":147829},"_18-print函数","1.8 print函数",[103,147832,147833,147836],{},[31,147834,147835],{},"print()"," 用来输出内容。",[24,147838,147840],{"className":26,"code":147839,"language":28,"meta":29,"style":29},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[31,147841,147842,147852,147862,147872],{"__ignoreMap":29},[34,147843,147844,147846,147848,147850],{"class":36,"line":37},[34,147845,723],{"class":44},[34,147847,286],{"class":40},[34,147849,7494],{"class":504},[34,147851,101],{"class":40},[34,147853,147854,147856,147858,147860],{"class":36,"line":165},[34,147855,723],{"class":44},[34,147857,286],{"class":40},[34,147859,451],{"class":44},[34,147861,101],{"class":40},[34,147863,147864,147866,147868,147870],{"class":36,"line":171},[34,147865,723],{"class":44},[34,147867,286],{"class":40},[34,147869,1864],{"class":44},[34,147871,101],{"class":40},[34,147873,147874,147876,147878,147881,147883,147885],{"class":36,"line":182},[34,147875,723],{"class":44},[34,147877,286],{"class":40},[34,147879,147880],{"class":504},"\"年龄:\"",[34,147882,48],{"class":40},[34,147884,2445],{"class":44},[34,147886,101],{"class":40},[103,147888,147889],{},"多个内容用逗号隔开，默认中间加空格：",[24,147891,147893],{"className":26,"code":147892,"language":28,"meta":29,"style":29},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[31,147894,147895,147905,147915],{"__ignoreMap":29},[34,147896,147897,147900,147902],{"class":36,"line":37},[34,147898,147899],{"class":40},"name ",[34,147901,221],{"class":55},[34,147903,147904],{"class":504}," \"张三\"\n",[34,147906,147907,147910,147912],{"class":36,"line":165},[34,147908,147909],{"class":40},"age ",[34,147911,221],{"class":55},[34,147913,147914],{"class":44}," 18\n",[34,147916,147917,147919,147921,147924,147927,147929],{"class":36,"line":171},[34,147918,723],{"class":44},[34,147920,286],{"class":40},[34,147922,147923],{"class":504},"\"姓名:\"",[34,147925,147926],{"class":40},", name, ",[34,147928,147880],{"class":504},[34,147930,147931],{"class":40},", age)\n",[103,147933,147934],{},"修改分隔符：",[24,147936,147938],{"className":26,"code":147937,"language":28,"meta":29,"style":29},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[31,147939,147940],{"__ignoreMap":29},[34,147941,147942,147944,147946,147949,147951,147953,147955,147957,147959,147962,147964,147966],{"class":36,"line":37},[34,147943,723],{"class":44},[34,147945,286],{"class":40},[34,147947,147948],{"class":504},"\"2024\"",[34,147950,48],{"class":40},[34,147952,55955],{"class":504},[34,147954,48],{"class":40},[34,147956,55955],{"class":504},[34,147958,48],{"class":40},[34,147960,147961],{"class":51},"sep",[34,147963,221],{"class":55},[34,147965,34124],{"class":504},[34,147967,101],{"class":40},[103,147969,147970],{},"修改结尾符：",[24,147972,147974],{"className":26,"code":147973,"language":28,"meta":29,"style":29},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[31,147975,147976,147994],{"__ignoreMap":29},[34,147977,147978,147980,147982,147984,147986,147988,147990,147992],{"class":36,"line":37},[34,147979,723],{"class":44},[34,147981,286],{"class":40},[34,147983,7494],{"class":504},[34,147985,48],{"class":40},[34,147987,47440],{"class":51},[34,147989,221],{"class":55},[34,147991,6011],{"class":504},[34,147993,101],{"class":40},[34,147995,147996,147998,148000,148003],{"class":36,"line":165},[34,147997,723],{"class":44},[34,147999,286],{"class":40},[34,148001,148002],{"class":504},"\"python\"",[34,148004,101],{"class":40},[14,148006,148008],{"id":148007},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[103,148010,148011],{},"交互运行适合临时验证：",[24,148013,148015],{"className":26,"code":148014,"language":28,"meta":29,"style":29},">>> 10 * 3\n30\n",[31,148016,148017,148027],{"__ignoreMap":29},[34,148018,148019,148021,148023,148025],{"class":36,"line":37},[34,148020,147216],{"class":55},[34,148022,3692],{"class":44},[34,148024,8168],{"class":55},[34,148026,121399],{"class":44},[34,148028,148029],{"class":36,"line":165},[34,148030,148031],{"class":44},"30\n",[103,148033,148034],{},"脚本运行适合保存程序：",[24,148036,148038],{"className":26,"code":148037,"language":28,"meta":29,"style":29},"price = 8\ncount = 5\nprint(price * count)\n",[31,148039,148040,148050,148059],{"__ignoreMap":29},[34,148041,148042,148045,148047],{"class":36,"line":37},[34,148043,148044],{"class":40},"price ",[34,148046,221],{"class":55},[34,148048,148049],{"class":44}," 8\n",[34,148051,148052,148055,148057],{"class":36,"line":165},[34,148053,148054],{"class":40},"count ",[34,148056,221],{"class":55},[34,148058,56066],{"class":44},[34,148060,148061,148063,148066,148068],{"class":36,"line":171},[34,148062,723],{"class":44},[34,148064,148065],{"class":40},"(price ",[34,148067,2252],{"class":55},[34,148069,148070],{"class":40}," count)\n",[103,148072,148073],{},"实际学习中推荐：",[1772,148075,148076,148079,148084],{},[1775,148077,148078],{},"临时试一个语法，用交互模式。",[1775,148080,148081,148082,127346],{},"写完整练习，用 ",[31,148083,147715],{},[1775,148085,148086],{},"写项目，用独立目录和虚拟环境。",[14,148088,148090],{"id":148089},"_110-常见错误","1.10 常见错误",[19,148092,148094],{"id":148093},"_1101-命令找不到","1.10.1 命令找不到",[24,148096,148099],{"className":148097,"code":148098,"language":6838,"meta":29},[6836],"python: command not found\n",[31,148100,148098],{"__ignoreMap":29},[103,148102,148103],{},"原因：",[1772,148105,148106,148109,148112],{},[1775,148107,148108],{},"没安装 Python。",[1775,148110,148111],{},"PATH 没配置。",[1775,148113,148114,148115,30031],{},"Linux\u002FmacOS 应该使用 ",[31,148116,102242],{},[19,148118,148120],{"id":148119},"_1102-文件名冲突","1.10.2 文件名冲突",[103,148122,148123],{},"不要把文件命名为：",[24,148125,148128],{"className":148126,"code":148127,"language":6838,"meta":29},[6836],"random.py\njson.py\ntime.py\nrequests.py\n",[31,148129,148127],{"__ignoreMap":29},[103,148131,148132],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[19,148134,148136],{"id":148135},"_1103-中文乱码","1.10.3 中文乱码",[103,148138,148139],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[103,148141,148142],{},"如果读写文件出现乱码，要明确指定编码：",[24,148144,148146],{"className":26,"code":148145,"language":28,"meta":29,"style":29},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[31,148147,148148,148182],{"__ignoreMap":29},[34,148149,148150,148152,148155,148157,148160,148162,148165,148167,148170,148172,148175,148177,148179],{"class":36,"line":37},[34,148151,109196],{"class":55},[34,148153,148154],{"class":44}," open",[34,148156,286],{"class":40},[34,148158,148159],{"class":504},"\"data.txt\"",[34,148161,48],{"class":40},[34,148163,148164],{"class":504},"\"r\"",[34,148166,48],{"class":40},[34,148168,148169],{"class":51},"encoding",[34,148171,221],{"class":55},[34,148173,148174],{"class":504},"\"utf-8\"",[34,148176,372],{"class":40},[34,148178,33025],{"class":55},[34,148180,148181],{"class":40}," f:\n",[34,148183,148184,148187,148189],{"class":36,"line":165},[34,148185,148186],{"class":40},"    content ",[34,148188,221],{"class":55},[34,148190,148191],{"class":40}," f.read()\n",[14,148193,148195],{"id":148194},"_111-本章练习","1.11 本章练习",[1772,148197,148198,148201,148207],{},[1775,148199,148200],{},"安装 Python，并在终端输出版本号。",[1775,148202,148203,148204,148206],{},"新建 ",[31,148205,147761],{},"，输出自己的姓名、年龄、学习目标。",[1775,148208,105729,148209,148211],{},[31,148210,147835],{}," 输出下面格式：",[24,148213,148216],{"className":148214,"code":148215,"language":6838,"meta":29},[6836],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[31,148217,148215],{"__ignoreMap":29},[1772,148219,148220],{"start":182},[1775,148221,105729,148222,148224],{},[31,148223,147961],{}," 输出日期：",[24,148226,148229],{"className":148227,"code":148228,"language":6838,"meta":29},[6836],"2024-10-10\n",[31,148230,148228],{"__ignoreMap":29},[1772,148232,148233],{"start":188},[1775,148234,105729,148235,148237,148238,148240],{},[31,148236,47440],{}," 让两次 ",[31,148239,147835],{}," 输出在同一行。",[1711,148242,148243],{},"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":29,"searchDepth":165,"depth":165,"links":148245},[148246,148247,148248,148253,148254,148255,148259,148260,148261,148262,148267],{"id":147128,"depth":165,"text":147129},{"id":147172,"depth":165,"text":147173},{"id":147273,"depth":165,"text":147274,"children":148249},[148250,148251,148252],{"id":147277,"depth":171,"text":147278},{"id":147332,"depth":171,"text":147333},{"id":147368,"depth":171,"text":147369},{"id":147441,"depth":165,"text":147442},{"id":147586,"depth":165,"text":147587},{"id":147691,"depth":165,"text":147692,"children":148256},[148257,148258],{"id":147695,"depth":171,"text":147696},{"id":147724,"depth":171,"text":147725},{"id":147754,"depth":165,"text":147755},{"id":147829,"depth":165,"text":147830},{"id":148007,"depth":165,"text":148008},{"id":148089,"depth":165,"text":148090,"children":148263},[148264,148265,148266],{"id":148093,"depth":171,"text":148094},{"id":148119,"depth":171,"text":148120},{"id":148135,"depth":171,"text":148136},{"id":148194,"depth":165,"text":148195},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147120,"description":1744},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148274,"title":148275,"body":148276,"description":1744,"extension":1745,"meta":150680,"navigation":1474,"path":150681,"seo":150682,"stem":150683,"__hash__":150684},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148277,"toc":150665},[148278,148281,148285,148288,148291,148308,148311,148353,148356,148360,148363,148366,148403,148406,148440,148443,148535,148539,148553,148556,148583,148586,148590,148693,148700,148703,148720,148724,148731,148920,148923,148996,149000,149003,149087,149090,149122,149126,149330,149333,149337,149343,149445,149448,149704,149708,149711,149714,149728,149730,149916,149920,150282,150288,150292,150295,150419,150422,150601,150604,150608,150641,150645,150662],[10,148279,148275],{"id":148280},"_10-json与pyecharts折线图",[14,148282,148284],{"id":148283},"_101-数据可视化","10.1 数据可视化",[103,148286,148287],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[103,148289,148290],{},"常见图表：",[1772,148292,148293,148296,148299,148302,148305],{},[1775,148294,148295],{},"折线图：看趋势。",[1775,148297,148298],{},"柱状图：看分类对比。",[1775,148300,148301],{},"饼图：看占比。",[1775,148303,148304],{},"地图：看地域分布。",[1775,148306,148307],{},"散点图：看两个变量之间的关系。",[103,148309,148310],{},"Python 可视化常用库：",[1948,148312,148313,148321],{},[1951,148314,148315],{},[1954,148316,148317,148319],{},[1957,148318,147524],{},[1957,148320,25385],{},[1994,148322,148323,148330,148338,148345],{},[1954,148324,148325,148327],{},[1999,148326,147556],{},[1999,148328,148329],{},"基础、经典、可定制",[1954,148331,148332,148335],{},[1999,148333,148334],{},"seaborn",[1999,148336,148337],{},"统计图表更美观",[1954,148339,148340,148342],{},[1999,148341,147564],{},[1999,148343,148344],{},"生成交互式网页图表",[1954,148346,148347,148350],{},[1999,148348,148349],{},"plotly",[1999,148351,148352],{},"交互图表能力强",[103,148354,148355],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148357,148359],{"id":148358},"_102-json回顾","10.2 JSON回顾",[103,148361,148362],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[103,148364,148365],{},"Python 字典：",[24,148367,148369],{"className":26,"code":148368,"language":28,"meta":29,"style":29},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[31,148370,148371,148379,148390,148399],{"__ignoreMap":29},[34,148372,148373,148375,148377],{"class":36,"line":37},[34,148374,103021],{"class":40},[34,148376,221],{"class":55},[34,148378,17218],{"class":40},[34,148380,148381,148384,148386,148388],{"class":36,"line":165},[34,148382,148383],{"class":504},"    \"name\"",[34,148385,53076],{"class":40},[34,148387,70908],{"class":504},[34,148389,33108],{"class":40},[34,148391,148392,148395,148397],{"class":36,"line":171},[34,148393,148394],{"class":504},"    \"value\"",[34,148396,53076],{"class":40},[34,148398,98821],{"class":44},[34,148400,148401],{"class":36,"line":182},[34,148402,3223],{"class":40},[103,148404,148405],{},"JSON 字符串：",[24,148407,148410],{"className":148408,"code":148409,"language":147155,"meta":29,"style":29},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[31,148411,148412,148416,148427,148436],{"__ignoreMap":29},[34,148413,148414],{"class":36,"line":37},[34,148415,3204],{"class":40},[34,148417,148418,148421,148423,148425],{"class":36,"line":165},[34,148419,148420],{"class":44},"  \"name\"",[34,148422,53076],{"class":40},[34,148424,70908],{"class":504},[34,148426,33108],{"class":40},[34,148428,148429,148432,148434],{"class":36,"line":171},[34,148430,148431],{"class":44},"  \"value\"",[34,148433,53076],{"class":40},[34,148435,98821],{"class":44},[34,148437,148438],{"class":36,"line":182},[34,148439,3223],{"class":40},[103,148441,148442],{},"Python 与 JSON 的转换：",[24,148444,148446],{"className":26,"code":148445,"language":28,"meta":29,"style":29},"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",[31,148447,148448,148455,148459,148484,148488,148507,148514,148518,148528],{"__ignoreMap":29},[34,148449,148450,148452],{"class":36,"line":37},[34,148451,32036],{"class":55},[34,148453,148454],{"class":40}," json\n",[34,148456,148457],{"class":36,"line":165},[34,148458,1475],{"emptyLinePlaceholder":1474},[34,148460,148461,148463,148465,148467,148469,148471,148473,148475,148478,148480,148482],{"class":36,"line":171},[34,148462,103021],{"class":40},[34,148464,221],{"class":55},[34,148466,6100],{"class":40},[34,148468,64318],{"class":504},[34,148470,53076],{"class":40},[34,148472,70908],{"class":504},[34,148474,48],{"class":40},[34,148476,148477],{"class":504},"\"value\"",[34,148479,53076],{"class":40},[34,148481,451],{"class":44},[34,148483,3223],{"class":40},[34,148485,148486],{"class":36,"line":182},[34,148487,1475],{"emptyLinePlaceholder":1474},[34,148489,148490,148493,148495,148498,148501,148503,148505],{"class":36,"line":188},[34,148491,148492],{"class":40},"json_text ",[34,148494,221],{"class":55},[34,148496,148497],{"class":40}," json.dumps(data, ",[34,148499,148500],{"class":51},"ensure_ascii",[34,148502,221],{"class":55},[34,148504,35628],{"class":44},[34,148506,101],{"class":40},[34,148508,148509,148511],{"class":36,"line":518},[34,148510,723],{"class":44},[34,148512,148513],{"class":40},"(json_text)\n",[34,148515,148516],{"class":36,"line":524},[34,148517,1475],{"emptyLinePlaceholder":1474},[34,148519,148520,148523,148525],{"class":36,"line":530},[34,148521,148522],{"class":40},"new_data ",[34,148524,221],{"class":55},[34,148526,148527],{"class":40}," json.loads(json_text)\n",[34,148529,148530,148532],{"class":36,"line":624},[34,148531,723],{"class":44},[34,148533,148534],{"class":40},"(new_data)\n",[14,148536,148538],{"id":148537},"_103-安装pyecharts","10.3 安装pyecharts",[24,148540,148542],{"className":25467,"code":148541,"language":25469,"meta":29,"style":29},"pip install pyecharts\n",[31,148543,148544],{"__ignoreMap":29},[34,148545,148546,148548,148550],{"class":36,"line":37},[34,148547,25476],{"class":3617},[34,148549,25479],{"class":504},[34,148551,148552],{"class":504}," pyecharts\n",[103,148554,148555],{},"验证：",[24,148557,148559],{"className":26,"code":148558,"language":28,"meta":29,"style":29},"import pyecharts\n\nprint(pyecharts.__version__)\n",[31,148560,148561,148567,148571],{"__ignoreMap":29},[34,148562,148563,148565],{"class":36,"line":37},[34,148564,32036],{"class":55},[34,148566,148552],{"class":40},[34,148568,148569],{"class":36,"line":165},[34,148570,1475],{"emptyLinePlaceholder":1474},[34,148572,148573,148575,148578,148581],{"class":36,"line":171},[34,148574,723],{"class":44},[34,148576,148577],{"class":40},"(pyecharts.",[34,148579,148580],{"class":44},"__version__",[34,148582,101],{"class":40},[103,148584,148585],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148587,148589],{"id":148588},"_104-第一个折线图","10.4 第一个折线图",[24,148591,148593],{"className":26,"code":148592,"language":28,"meta":29,"style":29},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[31,148594,148595,148607,148611,148621,148651,148683],{"__ignoreMap":29},[34,148596,148597,148599,148602,148604],{"class":36,"line":37},[34,148598,32379],{"class":55},[34,148600,148601],{"class":40}," pyecharts.charts ",[34,148603,32036],{"class":55},[34,148605,148606],{"class":40}," Line\n",[34,148608,148609],{"class":36,"line":165},[34,148610,1475],{"emptyLinePlaceholder":1474},[34,148612,148613,148616,148618],{"class":36,"line":171},[34,148614,148615],{"class":40},"line ",[34,148617,221],{"class":55},[34,148619,148620],{"class":40}," Line()\n",[34,148622,148623,148626,148629,148631,148634,148636,148639,148641,148644,148646,148649],{"class":36,"line":182},[34,148624,148625],{"class":40},"line.add_xaxis([",[34,148627,148628],{"class":504},"\"周一\"",[34,148630,48],{"class":40},[34,148632,148633],{"class":504},"\"周二\"",[34,148635,48],{"class":40},[34,148637,148638],{"class":504},"\"周三\"",[34,148640,48],{"class":40},[34,148642,148643],{"class":504},"\"周四\"",[34,148645,48],{"class":40},[34,148647,148648],{"class":504},"\"周五\"",[34,148650,1077],{"class":40},[34,148652,148653,148656,148659,148661,148663,148665,148667,148669,148671,148673,148676,148678,148681],{"class":36,"line":188},[34,148654,148655],{"class":40},"line.add_yaxis(",[34,148657,148658],{"class":504},"\"销售额\"",[34,148660,79155],{"class":40},[34,148662,451],{"class":44},[34,148664,48],{"class":40},[34,148666,2610],{"class":44},[34,148668,48],{"class":40},[34,148670,2653],{"class":44},[34,148672,48],{"class":40},[34,148674,148675],{"class":44},"150",[34,148677,48],{"class":40},[34,148679,148680],{"class":44},"180",[34,148682,1077],{"class":40},[34,148684,148685,148688,148691],{"class":36,"line":518},[34,148686,148687],{"class":40},"line.render(",[34,148689,148690],{"class":504},"\"line.html\"",[34,148692,101],{"class":40},[103,148694,148695,148696,148699],{},"运行后会生成 ",[31,148697,148698],{},"line.html","，用浏览器打开即可看到图表。",[103,148701,148702],{},"核心步骤：",[1772,148704,148705,148708,148711,148714,148717],{},[1775,148706,148707],{},"导入图表类。",[1775,148709,148710],{},"创建图表对象。",[1775,148712,148713],{},"添加 x 轴数据。",[1775,148715,148716],{},"添加 y 轴数据。",[1775,148718,148719],{},"渲染为 HTML。",[14,148721,148723],{"id":148722},"_105-全局配置","10.5 全局配置",[103,148725,148726,148727,148730],{},"常用配置在 ",[31,148728,148729],{},"pyecharts.options"," 中。",[24,148732,148734],{"className":26,"code":148733,"language":28,"meta":29,"style":29},"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",[31,148735,148736,148753,148763,148767,148775,148799,148827,148832,148851,148870,148888,148908,148912],{"__ignoreMap":29},[34,148737,148738,148740,148743,148745,148748,148750],{"class":36,"line":37},[34,148739,32379],{"class":55},[34,148741,148742],{"class":40}," pyecharts ",[34,148744,32036],{"class":55},[34,148746,148747],{"class":40}," options ",[34,148749,33025],{"class":55},[34,148751,148752],{"class":40}," opts\n",[34,148754,148755,148757,148759,148761],{"class":36,"line":165},[34,148756,32379],{"class":55},[34,148758,148601],{"class":40},[34,148760,32036],{"class":55},[34,148762,148606],{"class":40},[34,148764,148765],{"class":36,"line":171},[34,148766,1475],{"emptyLinePlaceholder":1474},[34,148768,148769,148771,148773],{"class":36,"line":182},[34,148770,148615],{"class":40},[34,148772,221],{"class":55},[34,148774,148620],{"class":40},[34,148776,148777,148779,148781,148783,148785,148787,148789,148791,148793,148795,148797],{"class":36,"line":188},[34,148778,148625],{"class":40},[34,148780,148628],{"class":504},[34,148782,48],{"class":40},[34,148784,148633],{"class":504},[34,148786,48],{"class":40},[34,148788,148638],{"class":504},[34,148790,48],{"class":40},[34,148792,148643],{"class":504},[34,148794,48],{"class":40},[34,148796,148648],{"class":504},[34,148798,1077],{"class":40},[34,148800,148801,148803,148805,148807,148809,148811,148813,148815,148817,148819,148821,148823,148825],{"class":36,"line":518},[34,148802,148655],{"class":40},[34,148804,148658],{"class":504},[34,148806,79155],{"class":40},[34,148808,451],{"class":44},[34,148810,48],{"class":40},[34,148812,2610],{"class":44},[34,148814,48],{"class":40},[34,148816,2653],{"class":44},[34,148818,48],{"class":40},[34,148820,148675],{"class":44},[34,148822,48],{"class":40},[34,148824,148680],{"class":44},[34,148826,1077],{"class":40},[34,148828,148829],{"class":36,"line":524},[34,148830,148831],{"class":40},"line.set_global_opts(\n",[34,148833,148834,148837,148839,148842,148844,148846,148849],{"class":36,"line":530},[34,148835,148836],{"class":51},"    title_opts",[34,148838,221],{"class":55},[34,148840,148841],{"class":40},"opts.TitleOpts(",[34,148843,53046],{"class":51},[34,148845,221],{"class":55},[34,148847,148848],{"class":504},"\"一周销售额\"",[34,148850,39688],{"class":40},[34,148852,148853,148856,148858,148861,148863,148865,148868],{"class":36,"line":624},[34,148854,148855],{"class":51},"    xaxis_opts",[34,148857,221],{"class":55},[34,148859,148860],{"class":40},"opts.AxisOpts(",[34,148862,81447],{"class":51},[34,148864,221],{"class":55},[34,148866,148867],{"class":504},"\"日期\"",[34,148869,39688],{"class":40},[34,148871,148872,148875,148877,148879,148881,148883,148886],{"class":36,"line":630},[34,148873,148874],{"class":51},"    yaxis_opts",[34,148876,221],{"class":55},[34,148878,148860],{"class":40},[34,148880,81447],{"class":51},[34,148882,221],{"class":55},[34,148884,148885],{"class":504},"\"金额\"",[34,148887,39688],{"class":40},[34,148889,148890,148893,148895,148898,148901,148903,148906],{"class":36,"line":636},[34,148891,148892],{"class":51},"    tooltip_opts",[34,148894,221],{"class":55},[34,148896,148897],{"class":40},"opts.TooltipOpts(",[34,148899,148900],{"class":51},"trigger",[34,148902,221],{"class":55},[34,148904,148905],{"class":504},"\"axis\"",[34,148907,39688],{"class":40},[34,148909,148910],{"class":36,"line":1513},[34,148911,101],{"class":40},[34,148913,148914,148916,148918],{"class":36,"line":1519},[34,148915,148687],{"class":40},[34,148917,148690],{"class":504},[34,148919,101],{"class":40},[103,148921,148922],{},"常见全局配置：",[1948,148924,148925,148934],{},[1951,148926,148927],{},[1954,148928,148929,148932],{},[1957,148930,148931],{},"配置",[1957,148933,104059],{},[1994,148935,148936,148946,148956,148966,148976,148986],{},[1954,148937,148938,148943],{},[1999,148939,148940],{},[31,148941,148942],{},"TitleOpts",[1999,148944,148945],{},"标题",[1954,148947,148948,148953],{},[1999,148949,148950],{},[31,148951,148952],{},"LegendOpts",[1999,148954,148955],{},"图例",[1954,148957,148958,148963],{},[1999,148959,148960],{},[31,148961,148962],{},"TooltipOpts",[1999,148964,148965],{},"提示框",[1954,148967,148968,148973],{},[1999,148969,148970],{},[31,148971,148972],{},"AxisOpts",[1999,148974,148975],{},"坐标轴",[1954,148977,148978,148983],{},[1999,148979,148980],{},[31,148981,148982],{},"VisualMapOpts",[1999,148984,148985],{},"视觉映射",[1954,148987,148988,148993],{},[1999,148989,148990],{},[31,148991,148992],{},"DataZoomOpts",[1999,148994,148995],{},"区域缩放",[14,148997,148999],{"id":148998},"_106-系列配置","10.6 系列配置",[103,149001,149002],{},"系列配置作用于某一组数据。",[24,149004,149006],{"className":26,"code":149005,"language":28,"meta":29,"style":29},"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",[31,149007,149008,149013,149024,149053,149064,149083],{"__ignoreMap":29},[34,149009,149010],{"class":36,"line":37},[34,149011,149012],{"class":40},"line.add_yaxis(\n",[34,149014,149015,149018,149020,149022],{"class":36,"line":165},[34,149016,149017],{"class":51},"    series_name",[34,149019,221],{"class":55},[34,149021,148658],{"class":504},[34,149023,33108],{"class":40},[34,149025,149026,149029,149031,149033,149035,149037,149039,149041,149043,149045,149047,149049,149051],{"class":36,"line":171},[34,149027,149028],{"class":51},"    y_axis",[34,149030,221],{"class":55},[34,149032,2681],{"class":40},[34,149034,451],{"class":44},[34,149036,48],{"class":40},[34,149038,2610],{"class":44},[34,149040,48],{"class":40},[34,149042,2653],{"class":44},[34,149044,48],{"class":40},[34,149046,148675],{"class":44},[34,149048,48],{"class":40},[34,149050,148680],{"class":44},[34,149052,89472],{"class":40},[34,149054,149055,149058,149060,149062],{"class":36,"line":182},[34,149056,149057],{"class":51},"    is_smooth",[34,149059,221],{"class":55},[34,149061,33118],{"class":44},[34,149063,33108],{"class":40},[34,149065,149066,149069,149071,149074,149077,149079,149081],{"class":36,"line":188},[34,149067,149068],{"class":51},"    label_opts",[34,149070,221],{"class":55},[34,149072,149073],{"class":40},"opts.LabelOpts(",[34,149075,149076],{"class":51},"is_show",[34,149078,221],{"class":55},[34,149080,33118],{"class":44},[34,149082,39688],{"class":40},[34,149084,149085],{"class":36,"line":518},[34,149086,101],{"class":40},[103,149088,149089],{},"常用参数：",[1772,149091,149092,149098,149104,149110,149116],{},[1775,149093,149094,149097],{},[31,149095,149096],{},"series_name","：系列名称。",[1775,149099,149100,149103],{},[31,149101,149102],{},"y_axis","：y 轴数据。",[1775,149105,149106,149109],{},[31,149107,149108],{},"is_smooth","：是否平滑曲线。",[1775,149111,149112,149115],{},[31,149113,149114],{},"label_opts","：标签配置。",[1775,149117,149118,149121],{},[31,149119,149120],{},"symbol_size","：标记点大小。",[14,149123,149125],{"id":149124},"_107-多条折线","10.7 多条折线",[24,149127,149129],{"className":26,"code":149128,"language":28,"meta":29,"style":29},"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",[31,149130,149131,149145,149155,149159,149188,149192,149200,149205,149243,149280,149284,149301,149317,149321],{"__ignoreMap":29},[34,149132,149133,149135,149137,149139,149141,149143],{"class":36,"line":37},[34,149134,32379],{"class":55},[34,149136,148742],{"class":40},[34,149138,32036],{"class":55},[34,149140,148747],{"class":40},[34,149142,33025],{"class":55},[34,149144,148752],{"class":40},[34,149146,149147,149149,149151,149153],{"class":36,"line":165},[34,149148,32379],{"class":55},[34,149150,148601],{"class":40},[34,149152,32036],{"class":55},[34,149154,148606],{"class":40},[34,149156,149157],{"class":36,"line":171},[34,149158,1475],{"emptyLinePlaceholder":1474},[34,149160,149161,149164,149166,149168,149170,149172,149174,149176,149178,149180,149182,149184,149186],{"class":36,"line":182},[34,149162,149163],{"class":40},"dates ",[34,149165,221],{"class":55},[34,149167,53865],{"class":40},[34,149169,148628],{"class":504},[34,149171,48],{"class":40},[34,149173,148633],{"class":504},[34,149175,48],{"class":40},[34,149177,148638],{"class":504},[34,149179,48],{"class":40},[34,149181,148643],{"class":504},[34,149183,48],{"class":40},[34,149185,148648],{"class":504},[34,149187,34887],{"class":40},[34,149189,149190],{"class":36,"line":188},[34,149191,1475],{"emptyLinePlaceholder":1474},[34,149193,149194,149196,149198],{"class":36,"line":518},[34,149195,148615],{"class":40},[34,149197,221],{"class":55},[34,149199,148620],{"class":40},[34,149201,149202],{"class":36,"line":524},[34,149203,149204],{"class":40},"line.add_xaxis(dates)\n",[34,149206,149207,149209,149212,149214,149216,149218,149221,149223,149225,149227,149229,149231,149233,149235,149237,149239,149241],{"class":36,"line":530},[34,149208,148655],{"class":40},[34,149210,149211],{"class":504},"\"线上销售\"",[34,149213,79155],{"class":40},[34,149215,451],{"class":44},[34,149217,48],{"class":40},[34,149219,149220],{"class":44},"130",[34,149222,48],{"class":40},[34,149224,2610],{"class":44},[34,149226,48],{"class":40},[34,149228,22694],{"class":44},[34,149230,48],{"class":40},[34,149232,3376],{"class":44},[34,149234,113565],{"class":40},[34,149236,149108],{"class":51},[34,149238,221],{"class":55},[34,149240,33118],{"class":44},[34,149242,101],{"class":40},[34,149244,149245,149247,149250,149252,149254,149256,149258,149260,149262,149264,149266,149268,149270,149272,149274,149276,149278],{"class":36,"line":624},[34,149246,148655],{"class":40},[34,149248,149249],{"class":504},"\"线下销售\"",[34,149251,79155],{"class":40},[34,149253,2407],{"class":44},[34,149255,48],{"class":40},[34,149257,2653],{"class":44},[34,149259,48],{"class":40},[34,149261,451],{"class":44},[34,149263,48],{"class":40},[34,149265,2610],{"class":44},[34,149267,48],{"class":40},[34,149269,148675],{"class":44},[34,149271,113565],{"class":40},[34,149273,149108],{"class":51},[34,149275,221],{"class":55},[34,149277,33118],{"class":44},[34,149279,101],{"class":40},[34,149281,149282],{"class":36,"line":630},[34,149283,148831],{"class":40},[34,149285,149286,149288,149290,149292,149294,149296,149299],{"class":36,"line":636},[34,149287,148836],{"class":51},[34,149289,221],{"class":55},[34,149291,148841],{"class":40},[34,149293,53046],{"class":51},[34,149295,221],{"class":55},[34,149297,149298],{"class":504},"\"线上线下销售趋势\"",[34,149300,39688],{"class":40},[34,149302,149303,149305,149307,149309,149311,149313,149315],{"class":36,"line":1513},[34,149304,148892],{"class":51},[34,149306,221],{"class":55},[34,149308,148897],{"class":40},[34,149310,148900],{"class":51},[34,149312,221],{"class":55},[34,149314,148905],{"class":504},[34,149316,39688],{"class":40},[34,149318,149319],{"class":36,"line":1519},[34,149320,101],{"class":40},[34,149322,149323,149325,149328],{"class":36,"line":3283},[34,149324,148687],{"class":40},[34,149326,149327],{"class":504},"\"sales.html\"",[34,149329,101],{"class":40},[103,149331,149332],{},"多条折线适合比较不同指标或不同地区。",[14,149334,149336],{"id":149335},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[103,149338,149339,149340,26264],{},"假设 ",[31,149341,149342],{},"sales.json",[24,149344,149346],{"className":148408,"code":149345,"language":147155,"meta":29,"style":29},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[31,149347,149348,149353,149385,149413,149441],{"__ignoreMap":29},[34,149349,149350],{"class":36,"line":37},[34,149351,149352],{"class":40},"[\n",[34,149354,149355,149358,149361,149363,149365,149367,149370,149372,149374,149376,149379,149381,149383],{"class":36,"line":165},[34,149356,149357],{"class":40},"  {",[34,149359,149360],{"class":44},"\"date\"",[34,149362,53076],{"class":40},[34,149364,148628],{"class":504},[34,149366,48],{"class":40},[34,149368,149369],{"class":44},"\"online\"",[34,149371,53076],{"class":40},[34,149373,451],{"class":44},[34,149375,48],{"class":40},[34,149377,149378],{"class":44},"\"offline\"",[34,149380,53076],{"class":40},[34,149382,2407],{"class":44},[34,149384,6581],{"class":40},[34,149386,149387,149389,149391,149393,149395,149397,149399,149401,149403,149405,149407,149409,149411],{"class":36,"line":171},[34,149388,149357],{"class":40},[34,149390,149360],{"class":44},[34,149392,53076],{"class":40},[34,149394,148633],{"class":504},[34,149396,48],{"class":40},[34,149398,149369],{"class":44},[34,149400,53076],{"class":40},[34,149402,149220],{"class":44},[34,149404,48],{"class":40},[34,149406,149378],{"class":44},[34,149408,53076],{"class":40},[34,149410,2653],{"class":44},[34,149412,6581],{"class":40},[34,149414,149415,149417,149419,149421,149423,149425,149427,149429,149431,149433,149435,149437,149439],{"class":36,"line":182},[34,149416,149357],{"class":40},[34,149418,149360],{"class":44},[34,149420,53076],{"class":40},[34,149422,148638],{"class":504},[34,149424,48],{"class":40},[34,149426,149369],{"class":44},[34,149428,53076],{"class":40},[34,149430,2610],{"class":44},[34,149432,48],{"class":40},[34,149434,149378],{"class":44},[34,149436,53076],{"class":40},[34,149438,451],{"class":44},[34,149440,3223],{"class":40},[34,149442,149443],{"class":36,"line":188},[34,149444,34887],{"class":40},[103,149446,149447],{},"读取并绘图：",[24,149449,149451],{"className":26,"code":149450,"language":28,"meta":29,"style":29},"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",[31,149452,149453,149459,149473,149483,149487,149519,149532,149536,149544,149553,149562,149566,149578,149587,149596,149605,149609,149617,149621,149638,149655,149659,149676,149692,149696],{"__ignoreMap":29},[34,149454,149455,149457],{"class":36,"line":37},[34,149456,32036],{"class":55},[34,149458,148454],{"class":40},[34,149460,149461,149463,149465,149467,149469,149471],{"class":36,"line":165},[34,149462,32379],{"class":55},[34,149464,148742],{"class":40},[34,149466,32036],{"class":55},[34,149468,148747],{"class":40},[34,149470,33025],{"class":55},[34,149472,148752],{"class":40},[34,149474,149475,149477,149479,149481],{"class":36,"line":171},[34,149476,32379],{"class":55},[34,149478,148601],{"class":40},[34,149480,32036],{"class":55},[34,149482,148606],{"class":40},[34,149484,149485],{"class":36,"line":182},[34,149486,1475],{"emptyLinePlaceholder":1474},[34,149488,149489,149491,149493,149495,149498,149500,149502,149504,149506,149508,149510,149512,149514,149517],{"class":36,"line":188},[34,149490,109196],{"class":55},[34,149492,148154],{"class":44},[34,149494,286],{"class":40},[34,149496,149497],{"class":504},"\"sales.json\"",[34,149499,48],{"class":40},[34,149501,148164],{"class":504},[34,149503,48],{"class":40},[34,149505,148169],{"class":51},[34,149507,221],{"class":55},[34,149509,148174],{"class":504},[34,149511,372],{"class":40},[34,149513,33025],{"class":55},[34,149515,149516],{"class":51}," file",[34,149518,5392],{"class":40},[34,149520,149521,149523,149525,149528,149530],{"class":36,"line":518},[34,149522,102784],{"class":40},[34,149524,221],{"class":55},[34,149526,149527],{"class":40}," json.load(",[34,149529,46993],{"class":51},[34,149531,101],{"class":40},[34,149533,149534],{"class":36,"line":524},[34,149535,1475],{"emptyLinePlaceholder":1474},[34,149537,149538,149540,149542],{"class":36,"line":530},[34,149539,149163],{"class":40},[34,149541,221],{"class":55},[34,149543,53477],{"class":40},[34,149545,149546,149549,149551],{"class":36,"line":624},[34,149547,149548],{"class":40},"online_sales ",[34,149550,221],{"class":55},[34,149552,53477],{"class":40},[34,149554,149555,149558,149560],{"class":36,"line":630},[34,149556,149557],{"class":40},"offline_sales ",[34,149559,221],{"class":55},[34,149561,53477],{"class":40},[34,149563,149564],{"class":36,"line":636},[34,149565,1475],{"emptyLinePlaceholder":1474},[34,149567,149568,149570,149573,149575],{"class":36,"line":1513},[34,149569,4678],{"class":55},[34,149571,149572],{"class":40}," item ",[34,149574,27689],{"class":55},[34,149576,149577],{"class":40}," data:\n",[34,149579,149580,149583,149585],{"class":36,"line":1519},[34,149581,149582],{"class":40},"    dates.append(item[",[34,149584,149360],{"class":504},[34,149586,1077],{"class":40},[34,149588,149589,149592,149594],{"class":36,"line":3283},[34,149590,149591],{"class":40},"    online_sales.append(item[",[34,149593,149369],{"class":504},[34,149595,1077],{"class":40},[34,149597,149598,149601,149603],{"class":36,"line":3297},[34,149599,149600],{"class":40},"    offline_sales.append(item[",[34,149602,149378],{"class":504},[34,149604,1077],{"class":40},[34,149606,149607],{"class":36,"line":3302},[34,149608,1475],{"emptyLinePlaceholder":1474},[34,149610,149611,149613,149615],{"class":36,"line":3308},[34,149612,148615],{"class":40},[34,149614,221],{"class":55},[34,149616,148620],{"class":40},[34,149618,149619],{"class":36,"line":3328},[34,149620,149204],{"class":40},[34,149622,149623,149625,149627,149630,149632,149634,149636],{"class":36,"line":3333},[34,149624,148655],{"class":40},[34,149626,149211],{"class":504},[34,149628,149629],{"class":40},", online_sales, ",[34,149631,149108],{"class":51},[34,149633,221],{"class":55},[34,149635,33118],{"class":44},[34,149637,101],{"class":40},[34,149639,149640,149642,149644,149647,149649,149651,149653],{"class":36,"line":3347},[34,149641,148655],{"class":40},[34,149643,149249],{"class":504},[34,149645,149646],{"class":40},", offline_sales, ",[34,149648,149108],{"class":51},[34,149650,221],{"class":55},[34,149652,33118],{"class":44},[34,149654,101],{"class":40},[34,149656,149657],{"class":36,"line":3352},[34,149658,148831],{"class":40},[34,149660,149661,149663,149665,149667,149669,149671,149674],{"class":36,"line":3381},[34,149662,148836],{"class":51},[34,149664,221],{"class":55},[34,149666,148841],{"class":40},[34,149668,53046],{"class":51},[34,149670,221],{"class":55},[34,149672,149673],{"class":504},"\"销售趋势\"",[34,149675,39688],{"class":40},[34,149677,149678,149680,149682,149684,149686,149688,149690],{"class":36,"line":3386},[34,149679,148892],{"class":51},[34,149681,221],{"class":55},[34,149683,148897],{"class":40},[34,149685,148900],{"class":51},[34,149687,221],{"class":55},[34,149689,148905],{"class":504},[34,149691,39688],{"class":40},[34,149693,149694],{"class":36,"line":3403},[34,149695,101],{"class":40},[34,149697,149698,149700,149702],{"class":36,"line":3408},[34,149699,148687],{"class":40},[34,149701,149327],{"class":504},[34,149703,101],{"class":40},[14,149705,149707],{"id":149706},"_109-数据清洗","10.9 数据清洗",[103,149709,149710],{},"真实数据经常不整齐，需要清洗。",[103,149712,149713],{},"常见问题：",[1772,149715,149716,149719,149722,149725],{},[1775,149717,149718],{},"数字是字符串。",[1775,149720,149721],{},"字段缺失。",[1775,149723,149724],{},"空值。",[1775,149726,149727],{},"日期格式不统一。",[103,149729,16781],{},[24,149731,149733],{"className":26,"code":149732,"language":28,"meta":29,"style":29},"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",[31,149734,149735,149744,149767,149787,149808,149812,149816,149824,149833,149837,149848,149862,149871,149876,149880,149888,149898,149902,149909],{"__ignoreMap":29},[34,149736,149737,149740,149742],{"class":36,"line":37},[34,149738,149739],{"class":40},"raw_data ",[34,149741,221],{"class":55},[34,149743,57086],{"class":40},[34,149745,149746,149749,149751,149753,149755,149757,149760,149762,149765],{"class":36,"line":165},[34,149747,149748],{"class":40},"    {",[34,149750,149360],{"class":504},[34,149752,53076],{"class":40},[34,149754,148628],{"class":504},[34,149756,48],{"class":40},[34,149758,149759],{"class":504},"\"sales\"",[34,149761,53076],{"class":40},[34,149763,149764],{"class":504},"\"100\"",[34,149766,6581],{"class":40},[34,149768,149769,149771,149773,149775,149777,149779,149781,149783,149785],{"class":36,"line":171},[34,149770,149748],{"class":40},[34,149772,149360],{"class":504},[34,149774,53076],{"class":40},[34,149776,148633],{"class":504},[34,149778,48],{"class":40},[34,149780,149759],{"class":504},[34,149782,53076],{"class":40},[34,149784,9302],{"class":504},[34,149786,6581],{"class":40},[34,149788,149789,149791,149793,149795,149797,149799,149801,149803,149806],{"class":36,"line":182},[34,149790,149748],{"class":40},[34,149792,149360],{"class":504},[34,149794,53076],{"class":40},[34,149796,148638],{"class":504},[34,149798,48],{"class":40},[34,149800,149759],{"class":504},[34,149802,53076],{"class":40},[34,149804,149805],{"class":504},"\"120\"",[34,149807,6581],{"class":40},[34,149809,149810],{"class":36,"line":188},[34,149811,34887],{"class":40},[34,149813,149814],{"class":36,"line":518},[34,149815,1475],{"emptyLinePlaceholder":1474},[34,149817,149818,149820,149822],{"class":36,"line":524},[34,149819,149163],{"class":40},[34,149821,221],{"class":55},[34,149823,53477],{"class":40},[34,149825,149826,149829,149831],{"class":36,"line":530},[34,149827,149828],{"class":40},"sales ",[34,149830,221],{"class":55},[34,149832,53477],{"class":40},[34,149834,149835],{"class":36,"line":624},[34,149836,1475],{"emptyLinePlaceholder":1474},[34,149838,149839,149841,149843,149845],{"class":36,"line":630},[34,149840,4678],{"class":55},[34,149842,149572],{"class":40},[34,149844,27689],{"class":55},[34,149846,149847],{"class":40}," raw_data:\n",[34,149849,149850,149853,149855,149858,149860],{"class":36,"line":636},[34,149851,149852],{"class":40},"    value ",[34,149854,221],{"class":55},[34,149856,149857],{"class":40}," item.get(",[34,149859,149759],{"class":504},[34,149861,101],{"class":40},[34,149863,149864,149866,149868],{"class":36,"line":1513},[34,149865,4754],{"class":55},[34,149867,40571],{"class":55},[34,149869,149870],{"class":40}," value:\n",[34,149872,149873],{"class":36,"line":1519},[34,149874,149875],{"class":55},"        continue\n",[34,149877,149878],{"class":36,"line":3283},[34,149879,1475],{"emptyLinePlaceholder":1474},[34,149881,149882,149884,149886],{"class":36,"line":3297},[34,149883,149582],{"class":40},[34,149885,149360],{"class":504},[34,149887,1077],{"class":40},[34,149889,149890,149893,149895],{"class":36,"line":3302},[34,149891,149892],{"class":40},"    sales.append(",[34,149894,571],{"class":44},[34,149896,149897],{"class":40},"(value))\n",[34,149899,149900],{"class":36,"line":3308},[34,149901,1475],{"emptyLinePlaceholder":1474},[34,149903,149904,149906],{"class":36,"line":3328},[34,149905,723],{"class":44},[34,149907,149908],{"class":40},"(dates)\n",[34,149910,149911,149913],{"class":36,"line":3333},[34,149912,723],{"class":44},[34,149914,149915],{"class":40},"(sales)\n",[14,149917,149919],{"id":149918},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[24,149921,149923],{"className":26,"code":149922,"language":28,"meta":29,"style":29},"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",[31,149924,149925,149939,149949,149953,149961,149982,150004,150026,150048,150070,150074,150078,150100,150121,150125,150133,150137,150141,150151,150160,150170,150186,150190,150194,150211,150227,150243,150259,150269,150273],{"__ignoreMap":29},[34,149926,149927,149929,149931,149933,149935,149937],{"class":36,"line":37},[34,149928,32379],{"class":55},[34,149930,148742],{"class":40},[34,149932,32036],{"class":55},[34,149934,148747],{"class":40},[34,149936,33025],{"class":55},[34,149938,148752],{"class":40},[34,149940,149941,149943,149945,149947],{"class":36,"line":165},[34,149942,32379],{"class":55},[34,149944,148601],{"class":40},[34,149946,32036],{"class":55},[34,149948,148606],{"class":40},[34,149950,149951],{"class":36,"line":171},[34,149952,1475],{"emptyLinePlaceholder":1474},[34,149954,149955,149957,149959],{"class":36,"line":182},[34,149956,149828],{"class":40},[34,149958,221],{"class":55},[34,149960,57086],{"class":40},[34,149962,149963,149965,149967,149969,149972,149974,149976,149978,149980],{"class":36,"line":188},[34,149964,149748],{"class":40},[34,149966,149360],{"class":504},[34,149968,53076],{"class":40},[34,149970,149971],{"class":504},"\"2024-10-01\"",[34,149973,48],{"class":40},[34,149975,85720],{"class":504},[34,149977,53076],{"class":40},[34,149979,93659],{"class":44},[34,149981,6581],{"class":40},[34,149983,149984,149986,149988,149990,149993,149995,149997,149999,150002],{"class":36,"line":518},[34,149985,149748],{"class":40},[34,149987,149360],{"class":504},[34,149989,53076],{"class":40},[34,149991,149992],{"class":504},"\"2024-10-02\"",[34,149994,48],{"class":40},[34,149996,85720],{"class":504},[34,149998,53076],{"class":40},[34,150000,150001],{"class":44},"1800",[34,150003,6581],{"class":40},[34,150005,150006,150008,150010,150012,150015,150017,150019,150021,150024],{"class":36,"line":524},[34,150007,149748],{"class":40},[34,150009,149360],{"class":504},[34,150011,53076],{"class":40},[34,150013,150014],{"class":504},"\"2024-10-03\"",[34,150016,48],{"class":40},[34,150018,85720],{"class":504},[34,150020,53076],{"class":40},[34,150022,150023],{"class":44},"1500",[34,150025,6581],{"class":40},[34,150027,150028,150030,150032,150034,150037,150039,150041,150043,150046],{"class":36,"line":530},[34,150029,149748],{"class":40},[34,150031,149360],{"class":504},[34,150033,53076],{"class":40},[34,150035,150036],{"class":504},"\"2024-10-04\"",[34,150038,48],{"class":40},[34,150040,85720],{"class":504},[34,150042,53076],{"class":40},[34,150044,150045],{"class":44},"2100",[34,150047,6581],{"class":40},[34,150049,150050,150052,150054,150056,150059,150061,150063,150065,150068],{"class":36,"line":624},[34,150051,149748],{"class":40},[34,150053,149360],{"class":504},[34,150055,53076],{"class":40},[34,150057,150058],{"class":504},"\"2024-10-05\"",[34,150060,48],{"class":40},[34,150062,85720],{"class":504},[34,150064,53076],{"class":40},[34,150066,150067],{"class":44},"2600",[34,150069,6581],{"class":40},[34,150071,150072],{"class":36,"line":630},[34,150073,34887],{"class":40},[34,150075,150076],{"class":36,"line":636},[34,150077,1475],{"emptyLinePlaceholder":1474},[34,150079,150080,150082,150084,150087,150089,150091,150093,150095,150097],{"class":36,"line":1513},[34,150081,149163],{"class":40},[34,150083,221],{"class":55},[34,150085,150086],{"class":40}," [item[",[34,150088,149360],{"class":504},[34,150090,6095],{"class":40},[34,150092,4678],{"class":55},[34,150094,149572],{"class":40},[34,150096,27689],{"class":55},[34,150098,150099],{"class":40}," sales]\n",[34,150101,150102,150105,150107,150109,150111,150113,150115,150117,150119],{"class":36,"line":1519},[34,150103,150104],{"class":40},"amounts ",[34,150106,221],{"class":55},[34,150108,150086],{"class":40},[34,150110,85720],{"class":504},[34,150112,6095],{"class":40},[34,150114,4678],{"class":55},[34,150116,149572],{"class":40},[34,150118,27689],{"class":55},[34,150120,150099],{"class":40},[34,150122,150123],{"class":36,"line":3283},[34,150124,1475],{"emptyLinePlaceholder":1474},[34,150126,150127,150129,150131],{"class":36,"line":3297},[34,150128,148615],{"class":40},[34,150130,221],{"class":55},[34,150132,148620],{"class":40},[34,150134,150135],{"class":36,"line":3302},[34,150136,149204],{"class":40},[34,150138,150139],{"class":36,"line":3308},[34,150140,149012],{"class":40},[34,150142,150143,150145,150147,150149],{"class":36,"line":3328},[34,150144,149017],{"class":51},[34,150146,221],{"class":55},[34,150148,148658],{"class":504},[34,150150,33108],{"class":40},[34,150152,150153,150155,150157],{"class":36,"line":3333},[34,150154,149028],{"class":51},[34,150156,221],{"class":55},[34,150158,150159],{"class":40},"amounts,\n",[34,150161,150162,150164,150166,150168],{"class":36,"line":3347},[34,150163,149057],{"class":51},[34,150165,221],{"class":55},[34,150167,33118],{"class":44},[34,150169,33108],{"class":40},[34,150171,150172,150174,150176,150178,150180,150182,150184],{"class":36,"line":3352},[34,150173,149068],{"class":51},[34,150175,221],{"class":55},[34,150177,149073],{"class":40},[34,150179,149076],{"class":51},[34,150181,221],{"class":55},[34,150183,33118],{"class":44},[34,150185,39688],{"class":40},[34,150187,150188],{"class":36,"line":3381},[34,150189,101],{"class":40},[34,150191,150192],{"class":36,"line":3386},[34,150193,148831],{"class":40},[34,150195,150196,150198,150200,150202,150204,150206,150209],{"class":36,"line":3403},[34,150197,148836],{"class":51},[34,150199,221],{"class":55},[34,150201,148841],{"class":40},[34,150203,53046],{"class":51},[34,150205,221],{"class":55},[34,150207,150208],{"class":504},"\"每日销售额\"",[34,150210,39688],{"class":40},[34,150212,150213,150215,150217,150219,150221,150223,150225],{"class":36,"line":3408},[34,150214,148855],{"class":51},[34,150216,221],{"class":55},[34,150218,148860],{"class":40},[34,150220,81447],{"class":51},[34,150222,221],{"class":55},[34,150224,148867],{"class":504},[34,150226,39688],{"class":40},[34,150228,150229,150231,150233,150235,150237,150239,150241],{"class":36,"line":3413},[34,150230,148874],{"class":51},[34,150232,221],{"class":55},[34,150234,148860],{"class":40},[34,150236,81447],{"class":51},[34,150238,221],{"class":55},[34,150240,148885],{"class":504},[34,150242,39688],{"class":40},[34,150244,150245,150247,150249,150251,150253,150255,150257],{"class":36,"line":3418},[34,150246,148892],{"class":51},[34,150248,221],{"class":55},[34,150250,148897],{"class":40},[34,150252,148900],{"class":51},[34,150254,221],{"class":55},[34,150256,148905],{"class":504},[34,150258,39688],{"class":40},[34,150260,150261,150264,150266],{"class":36,"line":3432},[34,150262,150263],{"class":51},"    datazoom_opts",[34,150265,221],{"class":55},[34,150267,150268],{"class":40},"[opts.DataZoomOpts()],\n",[34,150270,150271],{"class":36,"line":3437},[34,150272,101],{"class":40},[34,150274,150275,150277,150280],{"class":36,"line":4230},[34,150276,148687],{"class":40},[34,150278,150279],{"class":504},"\"daily_sales.html\"",[34,150281,101],{"class":40},[103,150283,150284,150287],{},[31,150285,150286],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150289,150291],{"id":150290},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[103,150293,150294],{},"如果数据结构如下：",[24,150296,150298],{"className":26,"code":150297,"language":28,"meta":29,"style":29},"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",[31,150299,150300,150308,150316,150338,150359,150364,150371,150391,150411,150415],{"__ignoreMap":29},[34,150301,150302,150304,150306],{"class":36,"line":37},[34,150303,103021],{"class":40},[34,150305,221],{"class":55},[34,150307,17218],{"class":40},[34,150309,150310,150313],{"class":36,"line":165},[34,150311,150312],{"class":504},"    \"北京\"",[34,150314,150315],{"class":40},": [\n",[34,150317,150318,150320,150322,150324,150327,150329,150332,150334,150336],{"class":36,"line":171},[34,150319,6568],{"class":40},[34,150321,149360],{"class":504},[34,150323,53076],{"class":40},[34,150325,150326],{"class":504},"\"2024-01-01\"",[34,150328,48],{"class":40},[34,150330,150331],{"class":504},"\"confirm\"",[34,150333,53076],{"class":40},[34,150335,410],{"class":44},[34,150337,6581],{"class":40},[34,150339,150340,150342,150344,150346,150349,150351,150353,150355,150357],{"class":36,"line":182},[34,150341,6568],{"class":40},[34,150343,149360],{"class":504},[34,150345,53076],{"class":40},[34,150347,150348],{"class":504},"\"2024-01-02\"",[34,150350,48],{"class":40},[34,150352,150331],{"class":504},[34,150354,53076],{"class":40},[34,150356,2293],{"class":44},[34,150358,6581],{"class":40},[34,150360,150361],{"class":36,"line":188},[34,150362,150363],{"class":40},"    ],\n",[34,150365,150366,150369],{"class":36,"line":518},[34,150367,150368],{"class":504},"    \"上海\"",[34,150370,150315],{"class":40},[34,150372,150373,150375,150377,150379,150381,150383,150385,150387,150389],{"class":36,"line":524},[34,150374,6568],{"class":40},[34,150376,149360],{"class":504},[34,150378,53076],{"class":40},[34,150380,150326],{"class":504},[34,150382,48],{"class":40},[34,150384,150331],{"class":504},[34,150386,53076],{"class":40},[34,150388,2195],{"class":44},[34,150390,6581],{"class":40},[34,150392,150393,150395,150397,150399,150401,150403,150405,150407,150409],{"class":36,"line":530},[34,150394,6568],{"class":40},[34,150396,149360],{"class":504},[34,150398,53076],{"class":40},[34,150400,150348],{"class":504},[34,150402,48],{"class":40},[34,150404,150331],{"class":504},[34,150406,53076],{"class":40},[34,150408,2318],{"class":44},[34,150410,6581],{"class":40},[34,150412,150413],{"class":36,"line":624},[34,150414,150363],{"class":40},[34,150416,150417],{"class":36,"line":630},[34,150418,3223],{"class":40},[103,150420,150421],{},"绘制多地区趋势：",[24,150423,150425],{"className":26,"code":150424,"language":28,"meta":29,"style":29},"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",[31,150426,150427,150441,150451,150455,150480,150484,150492,150496,150500,150512,150534,150547,150551,150555,150572,150588,150592],{"__ignoreMap":29},[34,150428,150429,150431,150433,150435,150437,150439],{"class":36,"line":37},[34,150430,32379],{"class":55},[34,150432,148742],{"class":40},[34,150434,32036],{"class":55},[34,150436,148747],{"class":40},[34,150438,33025],{"class":55},[34,150440,148752],{"class":40},[34,150442,150443,150445,150447,150449],{"class":36,"line":165},[34,150444,32379],{"class":55},[34,150446,148601],{"class":40},[34,150448,32036],{"class":55},[34,150450,148606],{"class":40},[34,150452,150453],{"class":36,"line":171},[34,150454,1475],{"emptyLinePlaceholder":1474},[34,150456,150457,150459,150461,150463,150465,150467,150469,150471,150473,150476,150478],{"class":36,"line":182},[34,150458,149163],{"class":40},[34,150460,221],{"class":55},[34,150462,150086],{"class":40},[34,150464,149360],{"class":504},[34,150466,6095],{"class":40},[34,150468,4678],{"class":55},[34,150470,149572],{"class":40},[34,150472,27689],{"class":55},[34,150474,150475],{"class":40}," data[",[34,150477,70908],{"class":504},[34,150479,79164],{"class":40},[34,150481,150482],{"class":36,"line":188},[34,150483,1475],{"emptyLinePlaceholder":1474},[34,150485,150486,150488,150490],{"class":36,"line":518},[34,150487,148615],{"class":40},[34,150489,221],{"class":55},[34,150491,148620],{"class":40},[34,150493,150494],{"class":36,"line":524},[34,150495,149204],{"class":40},[34,150497,150498],{"class":36,"line":530},[34,150499,1475],{"emptyLinePlaceholder":1474},[34,150501,150502,150504,150507,150509],{"class":36,"line":624},[34,150503,4678],{"class":55},[34,150505,150506],{"class":40}," city, records ",[34,150508,27689],{"class":55},[34,150510,150511],{"class":40}," data.items():\n",[34,150513,150514,150517,150519,150521,150523,150525,150527,150529,150531],{"class":36,"line":630},[34,150515,150516],{"class":40},"    values ",[34,150518,221],{"class":55},[34,150520,150086],{"class":40},[34,150522,150331],{"class":504},[34,150524,6095],{"class":40},[34,150526,4678],{"class":55},[34,150528,149572],{"class":40},[34,150530,27689],{"class":55},[34,150532,150533],{"class":40}," records]\n",[34,150535,150536,150539,150541,150543,150545],{"class":36,"line":636},[34,150537,150538],{"class":40},"    line.add_yaxis(city, values, ",[34,150540,149108],{"class":51},[34,150542,221],{"class":55},[34,150544,33118],{"class":44},[34,150546,101],{"class":40},[34,150548,150549],{"class":36,"line":1513},[34,150550,1475],{"emptyLinePlaceholder":1474},[34,150552,150553],{"class":36,"line":1519},[34,150554,148831],{"class":40},[34,150556,150557,150559,150561,150563,150565,150567,150570],{"class":36,"line":3283},[34,150558,148836],{"class":51},[34,150560,221],{"class":55},[34,150562,148841],{"class":40},[34,150564,53046],{"class":51},[34,150566,221],{"class":55},[34,150568,150569],{"class":504},"\"多地区趋势图\"",[34,150571,39688],{"class":40},[34,150573,150574,150576,150578,150580,150582,150584,150586],{"class":36,"line":3297},[34,150575,148892],{"class":51},[34,150577,221],{"class":55},[34,150579,148897],{"class":40},[34,150581,148900],{"class":51},[34,150583,221],{"class":55},[34,150585,148905],{"class":504},[34,150587,39688],{"class":40},[34,150589,150590],{"class":36,"line":3302},[34,150591,101],{"class":40},[34,150593,150594,150596,150599],{"class":36,"line":3308},[34,150595,148687],{"class":40},[34,150597,150598],{"class":504},"\"trend.html\"",[34,150600,101],{"class":40},[103,150602,150603],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150605,150607],{"id":150606},"_1012-易错点","10.12 易错点",[1772,150609,150610,150616,150622,150632,150638],{},[1775,150611,150612,150615],{},[31,150613,150614],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[1775,150617,150618,150621],{},[31,150619,150620],{},"render()"," 生成的是 HTML，不是图片。",[1775,150623,150624,150625,150628,150629,30031],{},"JSON 字符串用 ",[31,150626,150627],{},"json.loads()","，JSON 文件用 ",[31,150630,150631],{},"json.load()",[1775,150633,150634,150635,30031],{},"中文 JSON 保存时加 ",[31,150636,150637],{},"ensure_ascii=False",[1775,150639,150640],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150642,150644],{"id":150643},"_1013-本章练习","10.13 本章练习",[1772,150646,150647,150650,150653,150656,150659],{},[1775,150648,150649],{},"安装 pyecharts 并生成第一个折线图。",[1775,150651,150652],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[1775,150654,150655],{},"绘制两条折线，对比线上和线下销售额。",[1775,150657,150658],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[1775,150660,150661],{},"对含有空值的销售数据进行清洗后再绘图。",[1711,150663,150664],{},"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":29,"searchDepth":165,"depth":165,"links":150666},[150667,150668,150669,150670,150671,150672,150673,150674,150675,150676,150677,150678,150679],{"id":148283,"depth":165,"text":148284},{"id":148358,"depth":165,"text":148359},{"id":148537,"depth":165,"text":148538},{"id":148588,"depth":165,"text":148589},{"id":148722,"depth":165,"text":148723},{"id":148998,"depth":165,"text":148999},{"id":149124,"depth":165,"text":149125},{"id":149335,"depth":165,"text":149336},{"id":149706,"depth":165,"text":149707},{"id":149918,"depth":165,"text":149919},{"id":150290,"depth":165,"text":150291},{"id":150606,"depth":165,"text":150607},{"id":150643,"depth":165,"text":150644},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148275,"description":1744},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150686,"title":150687,"body":150688,"description":1744,"extension":1745,"meta":153048,"navigation":1474,"path":153049,"seo":153050,"stem":153051,"__hash__":153052},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150689,"toc":153025},[150690,150693,150697,150700,150703,150779,150782,150873,150876,150880,150883,150927,150940,150944,150947,151014,151017,151021,151024,151108,151116,151120,151125,151266,151269,151280,151286,151292,151406,151410,151413,151416,151669,151672,151676,151679,151783,151786,151790,151941,151945,151952,152065,152069,152072,152178,152181,152185,152188,152219,152222,152327,152330,152334,152338,152348,152416,152420,152427,152491,152494,152498,152504,152600,152609,152613,152937,152946,152950,152978,152982,153022],[10,150691,150687],{"id":150692},"_11-面向对象基础",[14,150694,150696],{"id":150695},"_111-什么是面向对象","11.1 什么是面向对象",[103,150698,150699],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[103,150701,150702],{},"面向过程：",[24,150704,150706],{"className":26,"code":150705,"language":28,"meta":29,"style":29},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[31,150707,150708,150717,150725,150729,150739,150770,150774],{"__ignoreMap":29},[34,150709,150710,150712,150714],{"class":36,"line":37},[34,150711,147899],{"class":40},[34,150713,221],{"class":55},[34,150715,150716],{"class":504}," \"小明\"\n",[34,150718,150719,150721,150723],{"class":36,"line":165},[34,150720,147909],{"class":40},[34,150722,221],{"class":55},[34,150724,147914],{"class":44},[34,150726,150727],{"class":36,"line":171},[34,150728,1475],{"emptyLinePlaceholder":1474},[34,150730,150731,150733,150736],{"class":36,"line":182},[34,150732,33588],{"class":55},[34,150734,150735],{"class":3617}," introduce",[34,150737,150738],{"class":40},"(name, age):\n",[34,150740,150741,150743,150745,150747,150750,150752,150754,150756,150759,150761,150763,150765,150768],{"class":36,"line":188},[34,150742,32941],{"class":44},[34,150744,286],{"class":40},[34,150746,1867],{"class":55},[34,150748,150749],{"class":504},"\"我叫",[34,150751,2687],{"class":44},[34,150753,81447],{"class":40},[34,150755,2737],{"class":44},[34,150757,150758],{"class":504},"，今年",[34,150760,2687],{"class":44},[34,150762,71860],{"class":40},[34,150764,2737],{"class":44},[34,150766,150767],{"class":504},"岁\"",[34,150769,101],{"class":40},[34,150771,150772],{"class":36,"line":518},[34,150773,1475],{"emptyLinePlaceholder":1474},[34,150775,150776],{"class":36,"line":524},[34,150777,150778],{"class":40},"introduce(name, age)\n",[103,150780,150781],{},"面向对象：",[24,150783,150785],{"className":26,"code":150784,"language":28,"meta":29,"style":29},"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",[31,150786,150787,150795,150803,150832,150836,150840,150850,150859,150868],{"__ignoreMap":29},[34,150788,150789,150791,150793],{"class":36,"line":37},[34,150790,16340],{"class":55},[34,150792,9548],{"class":3617},[34,150794,5392],{"class":40},[34,150796,150797,150799,150801],{"class":36,"line":165},[34,150798,32443],{"class":55},[34,150800,150735],{"class":3617},[34,150802,32449],{"class":40},[34,150804,150805,150807,150809,150811,150813,150816,150818,150820,150822,150824,150826,150828,150830],{"class":36,"line":171},[34,150806,34092],{"class":44},[34,150808,286],{"class":40},[34,150810,1867],{"class":55},[34,150812,150749],{"class":504},[34,150814,150815],{"class":44},"{self",[34,150817,81938],{"class":40},[34,150819,2737],{"class":44},[34,150821,150758],{"class":504},[34,150823,150815],{"class":44},[34,150825,81950],{"class":40},[34,150827,2737],{"class":44},[34,150829,150767],{"class":504},[34,150831,101],{"class":40},[34,150833,150834],{"class":36,"line":182},[34,150835,1475],{"emptyLinePlaceholder":1474},[34,150837,150838],{"class":36,"line":188},[34,150839,1475],{"emptyLinePlaceholder":1474},[34,150841,150842,150845,150847],{"class":36,"line":518},[34,150843,150844],{"class":40},"student ",[34,150846,221],{"class":55},[34,150848,150849],{"class":40}," Student()\n",[34,150851,150852,150855,150857],{"class":36,"line":524},[34,150853,150854],{"class":40},"student.name ",[34,150856,221],{"class":55},[34,150858,150716],{"class":504},[34,150860,150861,150864,150866],{"class":36,"line":530},[34,150862,150863],{"class":40},"student.age ",[34,150865,221],{"class":55},[34,150867,147914],{"class":44},[34,150869,150870],{"class":36,"line":624},[34,150871,150872],{"class":40},"student.introduce()\n",[103,150874,150875],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150877,150879],{"id":150878},"_112-类和对象","11.2 类和对象",[103,150881,150882],{},"类是模板，对象是根据模板创建出来的具体实例。",[24,150884,150886],{"className":26,"code":150885,"language":28,"meta":29,"style":29},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[31,150887,150888,150896,150901,150905,150909,150918],{"__ignoreMap":29},[34,150889,150890,150892,150894],{"class":36,"line":37},[34,150891,16340],{"class":55},[34,150893,9548],{"class":3617},[34,150895,5392],{"class":40},[34,150897,150898],{"class":36,"line":165},[34,150899,150900],{"class":55},"    pass\n",[34,150902,150903],{"class":36,"line":171},[34,150904,1475],{"emptyLinePlaceholder":1474},[34,150906,150907],{"class":36,"line":182},[34,150908,1475],{"emptyLinePlaceholder":1474},[34,150910,150911,150914,150916],{"class":36,"line":188},[34,150912,150913],{"class":40},"student1 ",[34,150915,221],{"class":55},[34,150917,150849],{"class":40},[34,150919,150920,150923,150925],{"class":36,"line":518},[34,150921,150922],{"class":40},"student2 ",[34,150924,221],{"class":55},[34,150926,150849],{"class":40},[103,150928,150929,150932,150933,102381,150936,150939],{},[31,150930,150931],{},"Student"," 是类，",[31,150934,150935],{},"student1",[31,150937,150938],{},"student2"," 是对象。",[14,150941,150943],{"id":150942},"_113-属性","11.3 属性",[103,150945,150946],{},"属性是对象保存的数据。",[24,150948,150950],{"className":26,"code":150949,"language":28,"meta":29,"style":29},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[31,150951,150952,150960,150964,150968,150972,150980,150988,150996,151000,151007],{"__ignoreMap":29},[34,150953,150954,150956,150958],{"class":36,"line":37},[34,150955,16340],{"class":55},[34,150957,9548],{"class":3617},[34,150959,5392],{"class":40},[34,150961,150962],{"class":36,"line":165},[34,150963,150900],{"class":55},[34,150965,150966],{"class":36,"line":171},[34,150967,1475],{"emptyLinePlaceholder":1474},[34,150969,150970],{"class":36,"line":182},[34,150971,1475],{"emptyLinePlaceholder":1474},[34,150973,150974,150976,150978],{"class":36,"line":188},[34,150975,150844],{"class":40},[34,150977,221],{"class":55},[34,150979,150849],{"class":40},[34,150981,150982,150984,150986],{"class":36,"line":518},[34,150983,150854],{"class":40},[34,150985,221],{"class":55},[34,150987,150716],{"class":504},[34,150989,150990,150992,150994],{"class":36,"line":524},[34,150991,150863],{"class":40},[34,150993,221],{"class":55},[34,150995,147914],{"class":44},[34,150997,150998],{"class":36,"line":530},[34,150999,1475],{"emptyLinePlaceholder":1474},[34,151001,151002,151004],{"class":36,"line":624},[34,151003,723],{"class":44},[34,151005,151006],{"class":40},"(student.name)\n",[34,151008,151009,151011],{"class":36,"line":630},[34,151010,723],{"class":44},[34,151012,151013],{"class":40},"(student.age)\n",[103,151015,151016],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151018,151020],{"id":151019},"_114-方法","11.4 方法",[103,151022,151023],{},"类中的函数叫方法。",[24,151025,151026],{"className":26,"code":150784,"language":28,"meta":29,"style":29},[31,151027,151028,151036,151044,151072,151076,151080,151088,151096,151104],{"__ignoreMap":29},[34,151029,151030,151032,151034],{"class":36,"line":37},[34,151031,16340],{"class":55},[34,151033,9548],{"class":3617},[34,151035,5392],{"class":40},[34,151037,151038,151040,151042],{"class":36,"line":165},[34,151039,32443],{"class":55},[34,151041,150735],{"class":3617},[34,151043,32449],{"class":40},[34,151045,151046,151048,151050,151052,151054,151056,151058,151060,151062,151064,151066,151068,151070],{"class":36,"line":171},[34,151047,34092],{"class":44},[34,151049,286],{"class":40},[34,151051,1867],{"class":55},[34,151053,150749],{"class":504},[34,151055,150815],{"class":44},[34,151057,81938],{"class":40},[34,151059,2737],{"class":44},[34,151061,150758],{"class":504},[34,151063,150815],{"class":44},[34,151065,81950],{"class":40},[34,151067,2737],{"class":44},[34,151069,150767],{"class":504},[34,151071,101],{"class":40},[34,151073,151074],{"class":36,"line":182},[34,151075,1475],{"emptyLinePlaceholder":1474},[34,151077,151078],{"class":36,"line":188},[34,151079,1475],{"emptyLinePlaceholder":1474},[34,151081,151082,151084,151086],{"class":36,"line":518},[34,151083,150844],{"class":40},[34,151085,221],{"class":55},[34,151087,150849],{"class":40},[34,151089,151090,151092,151094],{"class":36,"line":524},[34,151091,150854],{"class":40},[34,151093,221],{"class":55},[34,151095,150716],{"class":504},[34,151097,151098,151100,151102],{"class":36,"line":530},[34,151099,150863],{"class":40},[34,151101,221],{"class":55},[34,151103,147914],{"class":44},[34,151105,151106],{"class":36,"line":624},[34,151107,150872],{"class":40},[103,151109,151110,151112,151113,151115],{},[31,151111,32465],{}," 表示当前对象。调用方法时不需要手动传入 ",[31,151114,32465],{},"，Python 会自动传。",[14,151117,151119],{"id":151118},"_115-构造方法__init__","11.5 构造方法__init__",[103,151121,151122,151124],{},[31,151123,32471],{}," 在对象创建时自动执行，用于初始化属性。",[24,151126,151128],{"className":26,"code":151127,"language":28,"meta":29,"style":29},"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",[31,151129,151130,151138,151147,151159,151171,151182,151186,151194,151232,151236,151240,151262],{"__ignoreMap":29},[34,151131,151132,151134,151136],{"class":36,"line":37},[34,151133,16340],{"class":55},[34,151135,9548],{"class":3617},[34,151137,5392],{"class":40},[34,151139,151140,151142,151144],{"class":36,"line":165},[34,151141,32443],{"class":55},[34,151143,32446],{"class":44},[34,151145,151146],{"class":40},"(self, name, age, score):\n",[34,151148,151149,151151,151154,151156],{"class":36,"line":171},[34,151150,32487],{"class":44},[34,151152,151153],{"class":40},".name ",[34,151155,221],{"class":55},[34,151157,151158],{"class":40}," name\n",[34,151160,151161,151163,151166,151168],{"class":36,"line":182},[34,151162,32487],{"class":44},[34,151164,151165],{"class":40},".age ",[34,151167,221],{"class":55},[34,151169,151170],{"class":40}," age\n",[34,151172,151173,151175,151178,151180],{"class":36,"line":188},[34,151174,32487],{"class":44},[34,151176,151177],{"class":40},".score ",[34,151179,221],{"class":55},[34,151181,3237],{"class":40},[34,151183,151184],{"class":36,"line":518},[34,151185,1475],{"emptyLinePlaceholder":1474},[34,151187,151188,151190,151192],{"class":36,"line":524},[34,151189,32443],{"class":55},[34,151191,150735],{"class":3617},[34,151193,32449],{"class":40},[34,151195,151196,151198,151200,151202,151204,151206,151208,151210,151212,151214,151216,151218,151221,151223,151226,151228,151230],{"class":36,"line":530},[34,151197,34092],{"class":44},[34,151199,286],{"class":40},[34,151201,1867],{"class":55},[34,151203,150749],{"class":504},[34,151205,150815],{"class":44},[34,151207,81938],{"class":40},[34,151209,2737],{"class":44},[34,151211,150758],{"class":504},[34,151213,150815],{"class":44},[34,151215,81950],{"class":40},[34,151217,2737],{"class":44},[34,151219,151220],{"class":504},"岁，成绩",[34,151222,150815],{"class":44},[34,151224,151225],{"class":40},".score",[34,151227,2737],{"class":44},[34,151229,2058],{"class":504},[34,151231,101],{"class":40},[34,151233,151234],{"class":36,"line":624},[34,151235,1475],{"emptyLinePlaceholder":1474},[34,151237,151238],{"class":36,"line":630},[34,151239,1475],{"emptyLinePlaceholder":1474},[34,151241,151242,151244,151246,151249,151252,151254,151256,151258,151260],{"class":36,"line":636},[34,151243,150844],{"class":40},[34,151245,221],{"class":55},[34,151247,151248],{"class":40}," Student(",[34,151250,151251],{"class":504},"\"小明\"",[34,151253,48],{"class":40},[34,151255,2445],{"class":44},[34,151257,48],{"class":40},[34,151259,2780],{"class":44},[34,151261,101],{"class":40},[34,151263,151264],{"class":36,"line":1513},[34,151265,150872],{"class":40},[103,151267,151268],{},"构造方法的好处：",[1772,151270,151271,151274,151277],{},[1775,151272,151273],{},"创建对象时必须提供必要数据。",[1775,151275,151276],{},"属性初始化集中，不容易漏。",[1775,151278,151279],{},"对象状态更完整。",[14,151281,151283,151284],{"id":151282},"_116-str","11.6 ",[1165,151285,2961],{},[103,151287,151288,151289,30031],{},"直接打印对象时，默认输出不直观。可以定义 ",[31,151290,151291],{},"__str__",[24,151293,151295],{"className":26,"code":151294,"language":28,"meta":29,"style":29},"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",[31,151296,151297,151305,151314,151324,151334,151338,151347,151375,151379,151383,151399],{"__ignoreMap":29},[34,151298,151299,151301,151303],{"class":36,"line":37},[34,151300,16340],{"class":55},[34,151302,9548],{"class":3617},[34,151304,5392],{"class":40},[34,151306,151307,151309,151311],{"class":36,"line":165},[34,151308,32443],{"class":55},[34,151310,32446],{"class":44},[34,151312,151313],{"class":40},"(self, name, age):\n",[34,151315,151316,151318,151320,151322],{"class":36,"line":171},[34,151317,32487],{"class":44},[34,151319,151153],{"class":40},[34,151321,221],{"class":55},[34,151323,151158],{"class":40},[34,151325,151326,151328,151330,151332],{"class":36,"line":182},[34,151327,32487],{"class":44},[34,151329,151165],{"class":40},[34,151331,221],{"class":55},[34,151333,151170],{"class":40},[34,151335,151336],{"class":36,"line":188},[34,151337,1475],{"emptyLinePlaceholder":1474},[34,151339,151340,151342,151345],{"class":36,"line":518},[34,151341,32443],{"class":55},[34,151343,151344],{"class":44}," __str__",[34,151346,32449],{"class":40},[34,151348,151349,151351,151354,151357,151359,151361,151363,151366,151368,151370,151372],{"class":36,"line":524},[34,151350,16398],{"class":55},[34,151352,151353],{"class":55}," f",[34,151355,151356],{"class":504},"\"Student(name=",[34,151358,150815],{"class":44},[34,151360,81938],{"class":40},[34,151362,2737],{"class":44},[34,151364,151365],{"class":504},", age=",[34,151367,150815],{"class":44},[34,151369,81950],{"class":40},[34,151371,2737],{"class":44},[34,151373,151374],{"class":504},")\"\n",[34,151376,151377],{"class":36,"line":530},[34,151378,1475],{"emptyLinePlaceholder":1474},[34,151380,151381],{"class":36,"line":624},[34,151382,1475],{"emptyLinePlaceholder":1474},[34,151384,151385,151387,151389,151391,151393,151395,151397],{"class":36,"line":630},[34,151386,150844],{"class":40},[34,151388,221],{"class":55},[34,151390,151248],{"class":40},[34,151392,151251],{"class":504},[34,151394,48],{"class":40},[34,151396,2445],{"class":44},[34,151398,101],{"class":40},[34,151400,151401,151403],{"class":36,"line":636},[34,151402,723],{"class":44},[34,151404,151405],{"class":40},"(student)\n",[14,151407,151409],{"id":151408},"_117-封装","11.7 封装",[103,151411,151412],{},"封装就是把数据和方法放到类中，并控制访问方式。",[103,151414,151415],{},"Python 中以双下划线开头的属性通常视为私有属性。",[24,151417,151419],{"className":26,"code":151418,"language":28,"meta":29,"style":29},"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",[31,151420,151421,151430,151439,151451,151463,151467,151476,151485,151489,151499,151512,151523,151528,151539,151543,151552,151564,151575,151579,151592,151603,151607,151618,151622,151626,151644,151653,151662],{"__ignoreMap":29},[34,151422,151423,151425,151428],{"class":36,"line":37},[34,151424,16340],{"class":55},[34,151426,151427],{"class":3617}," Account",[34,151429,5392],{"class":40},[34,151431,151432,151434,151436],{"class":36,"line":165},[34,151433,32443],{"class":55},[34,151435,32446],{"class":44},[34,151437,151438],{"class":40},"(self, owner, balance):\n",[34,151440,151441,151443,151446,151448],{"class":36,"line":171},[34,151442,32487],{"class":44},[34,151444,151445],{"class":40},".owner ",[34,151447,221],{"class":55},[34,151449,151450],{"class":40}," owner\n",[34,151452,151453,151455,151458,151460],{"class":36,"line":182},[34,151454,32487],{"class":44},[34,151456,151457],{"class":40},".__balance ",[34,151459,221],{"class":55},[34,151461,151462],{"class":40}," balance\n",[34,151464,151465],{"class":36,"line":188},[34,151466,1475],{"emptyLinePlaceholder":1474},[34,151468,151469,151471,151474],{"class":36,"line":518},[34,151470,32443],{"class":55},[34,151472,151473],{"class":3617}," get_balance",[34,151475,32449],{"class":40},[34,151477,151478,151480,151482],{"class":36,"line":524},[34,151479,16398],{"class":55},[34,151481,40514],{"class":44},[34,151483,151484],{"class":40},".__balance\n",[34,151486,151487],{"class":36,"line":530},[34,151488,1475],{"emptyLinePlaceholder":1474},[34,151490,151491,151493,151496],{"class":36,"line":624},[34,151492,32443],{"class":55},[34,151494,151495],{"class":3617}," deposit",[34,151497,151498],{"class":40},"(self, money):\n",[34,151500,151501,151503,151506,151508,151510],{"class":36,"line":630},[34,151502,4150],{"class":55},[34,151504,151505],{"class":40}," money ",[34,151507,3246],{"class":55},[34,151509,98],{"class":44},[34,151511,5392],{"class":40},[34,151513,151514,151516,151518,151521],{"class":36,"line":636},[34,151515,36291],{"class":44},[34,151517,286],{"class":40},[34,151519,151520],{"class":504},"\"存款金额必须大于0\"",[34,151522,101],{"class":40},[34,151524,151525],{"class":36,"line":1513},[34,151526,151527],{"class":55},"            return\n",[34,151529,151530,151532,151534,151536],{"class":36,"line":1519},[34,151531,32487],{"class":44},[34,151533,151457],{"class":40},[34,151535,11127],{"class":55},[34,151537,151538],{"class":40}," money\n",[34,151540,151541],{"class":36,"line":3283},[34,151542,1475],{"emptyLinePlaceholder":1474},[34,151544,151545,151547,151550],{"class":36,"line":3297},[34,151546,32443],{"class":55},[34,151548,151549],{"class":3617}," withdraw",[34,151551,151498],{"class":40},[34,151553,151554,151556,151558,151560,151562],{"class":36,"line":3302},[34,151555,4150],{"class":55},[34,151557,151505],{"class":40},[34,151559,3246],{"class":55},[34,151561,98],{"class":44},[34,151563,5392],{"class":40},[34,151565,151566,151568,151570,151573],{"class":36,"line":3308},[34,151567,36291],{"class":44},[34,151569,286],{"class":40},[34,151571,151572],{"class":504},"\"取款金额必须大于0\"",[34,151574,101],{"class":40},[34,151576,151577],{"class":36,"line":3328},[34,151578,151527],{"class":55},[34,151580,151581,151583,151585,151587,151589],{"class":36,"line":3333},[34,151582,4150],{"class":55},[34,151584,151505],{"class":40},[34,151586,2751],{"class":55},[34,151588,40514],{"class":44},[34,151590,151591],{"class":40},".__balance:\n",[34,151593,151594,151596,151598,151601],{"class":36,"line":3347},[34,151595,36291],{"class":44},[34,151597,286],{"class":40},[34,151599,151600],{"class":504},"\"余额不足\"",[34,151602,101],{"class":40},[34,151604,151605],{"class":36,"line":3352},[34,151606,151527],{"class":55},[34,151608,151609,151611,151613,151616],{"class":36,"line":3381},[34,151610,32487],{"class":44},[34,151612,151457],{"class":40},[34,151614,151615],{"class":55},"-=",[34,151617,151538],{"class":40},[34,151619,151620],{"class":36,"line":3386},[34,151621,1475],{"emptyLinePlaceholder":1474},[34,151623,151624],{"class":36,"line":3403},[34,151625,1475],{"emptyLinePlaceholder":1474},[34,151627,151628,151631,151633,151636,151638,151640,151642],{"class":36,"line":3408},[34,151629,151630],{"class":40},"account ",[34,151632,221],{"class":55},[34,151634,151635],{"class":40}," Account(",[34,151637,151251],{"class":504},[34,151639,48],{"class":40},[34,151641,8060],{"class":44},[34,151643,101],{"class":40},[34,151645,151646,151649,151651],{"class":36,"line":3413},[34,151647,151648],{"class":40},"account.deposit(",[34,151650,3376],{"class":44},[34,151652,101],{"class":40},[34,151654,151655,151658,151660],{"class":36,"line":3418},[34,151656,151657],{"class":40},"account.withdraw(",[34,151659,451],{"class":44},[34,151661,101],{"class":40},[34,151663,151664,151666],{"class":36,"line":3432},[34,151665,723],{"class":44},[34,151667,151668],{"class":40},"(account.get_balance())\n",[103,151670,151671],{},"封装的意义是避免外部随意修改内部状态。",[14,151673,151675],{"id":151674},"_118-继承","11.8 继承",[103,151677,151678],{},"继承可以让子类复用父类的属性和方法。",[24,151680,151682],{"className":26,"code":151681,"language":28,"meta":29,"style":29},"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",[31,151683,151684,151693,151702,151713,151717,151721,151735,151744,151755,151759,151763,151773,151778],{"__ignoreMap":29},[34,151685,151686,151688,151691],{"class":36,"line":37},[34,151687,16340],{"class":55},[34,151689,151690],{"class":3617}," Animal",[34,151692,5392],{"class":40},[34,151694,151695,151697,151700],{"class":36,"line":165},[34,151696,32443],{"class":55},[34,151698,151699],{"class":3617}," eat",[34,151701,32449],{"class":40},[34,151703,151704,151706,151708,151711],{"class":36,"line":171},[34,151705,34092],{"class":44},[34,151707,286],{"class":40},[34,151709,151710],{"class":504},"\"吃东西\"",[34,151712,101],{"class":40},[34,151714,151715],{"class":36,"line":182},[34,151716,1475],{"emptyLinePlaceholder":1474},[34,151718,151719],{"class":36,"line":188},[34,151720,1475],{"emptyLinePlaceholder":1474},[34,151722,151723,151725,151728,151730,151733],{"class":36,"line":518},[34,151724,16340],{"class":55},[34,151726,151727],{"class":3617}," Dog",[34,151729,286],{"class":40},[34,151731,151732],{"class":3617},"Animal",[34,151734,32428],{"class":40},[34,151736,151737,151739,151742],{"class":36,"line":524},[34,151738,32443],{"class":55},[34,151740,151741],{"class":3617}," bark",[34,151743,32449],{"class":40},[34,151745,151746,151748,151750,151753],{"class":36,"line":530},[34,151747,34092],{"class":44},[34,151749,286],{"class":40},[34,151751,151752],{"class":504},"\"汪汪\"",[34,151754,101],{"class":40},[34,151756,151757],{"class":36,"line":624},[34,151758,1475],{"emptyLinePlaceholder":1474},[34,151760,151761],{"class":36,"line":630},[34,151762,1475],{"emptyLinePlaceholder":1474},[34,151764,151765,151768,151770],{"class":36,"line":636},[34,151766,151767],{"class":40},"dog ",[34,151769,221],{"class":55},[34,151771,151772],{"class":40}," Dog()\n",[34,151774,151775],{"class":36,"line":1513},[34,151776,151777],{"class":40},"dog.eat()\n",[34,151779,151780],{"class":36,"line":1519},[34,151781,151782],{"class":40},"dog.bark()\n",[103,151784,151785],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151787,151789],{"id":151788},"_119-方法重写","11.9 方法重写",[24,151791,151793],{"className":26,"code":151792,"language":28,"meta":29,"style":29},"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",[31,151794,151795,151803,151812,151823,151827,151831,151843,151851,151861,151865,151869,151882,151890,151901,151905,151909,151917,151927,151931,151936],{"__ignoreMap":29},[34,151796,151797,151799,151801],{"class":36,"line":37},[34,151798,16340],{"class":55},[34,151800,151690],{"class":3617},[34,151802,5392],{"class":40},[34,151804,151805,151807,151810],{"class":36,"line":165},[34,151806,32443],{"class":55},[34,151808,151809],{"class":3617}," speak",[34,151811,32449],{"class":40},[34,151813,151814,151816,151818,151821],{"class":36,"line":171},[34,151815,34092],{"class":44},[34,151817,286],{"class":40},[34,151819,151820],{"class":504},"\"动物叫\"",[34,151822,101],{"class":40},[34,151824,151825],{"class":36,"line":182},[34,151826,1475],{"emptyLinePlaceholder":1474},[34,151828,151829],{"class":36,"line":188},[34,151830,1475],{"emptyLinePlaceholder":1474},[34,151832,151833,151835,151837,151839,151841],{"class":36,"line":518},[34,151834,16340],{"class":55},[34,151836,151727],{"class":3617},[34,151838,286],{"class":40},[34,151840,151732],{"class":3617},[34,151842,32428],{"class":40},[34,151844,151845,151847,151849],{"class":36,"line":524},[34,151846,32443],{"class":55},[34,151848,151809],{"class":3617},[34,151850,32449],{"class":40},[34,151852,151853,151855,151857,151859],{"class":36,"line":530},[34,151854,34092],{"class":44},[34,151856,286],{"class":40},[34,151858,151752],{"class":504},[34,151860,101],{"class":40},[34,151862,151863],{"class":36,"line":624},[34,151864,1475],{"emptyLinePlaceholder":1474},[34,151866,151867],{"class":36,"line":630},[34,151868,1475],{"emptyLinePlaceholder":1474},[34,151870,151871,151873,151876,151878,151880],{"class":36,"line":636},[34,151872,16340],{"class":55},[34,151874,151875],{"class":3617}," Cat",[34,151877,286],{"class":40},[34,151879,151732],{"class":3617},[34,151881,32428],{"class":40},[34,151883,151884,151886,151888],{"class":36,"line":1513},[34,151885,32443],{"class":55},[34,151887,151809],{"class":3617},[34,151889,32449],{"class":40},[34,151891,151892,151894,151896,151899],{"class":36,"line":1519},[34,151893,34092],{"class":44},[34,151895,286],{"class":40},[34,151897,151898],{"class":504},"\"喵喵\"",[34,151900,101],{"class":40},[34,151902,151903],{"class":36,"line":3283},[34,151904,1475],{"emptyLinePlaceholder":1474},[34,151906,151907],{"class":36,"line":3297},[34,151908,1475],{"emptyLinePlaceholder":1474},[34,151910,151911,151913,151915],{"class":36,"line":3302},[34,151912,151767],{"class":40},[34,151914,221],{"class":55},[34,151916,151772],{"class":40},[34,151918,151919,151922,151924],{"class":36,"line":3308},[34,151920,151921],{"class":40},"cat ",[34,151923,221],{"class":55},[34,151925,151926],{"class":40}," Cat()\n",[34,151928,151929],{"class":36,"line":3328},[34,151930,1475],{"emptyLinePlaceholder":1474},[34,151932,151933],{"class":36,"line":3333},[34,151934,151935],{"class":40},"dog.speak()\n",[34,151937,151938],{"class":36,"line":3347},[34,151939,151940],{"class":40},"cat.speak()\n",[14,151942,151944],{"id":151943},"_1110-super","11.10 super",[103,151946,151947,151948,151951],{},"子类可以通过 ",[31,151949,151950],{},"super()"," 调用父类方法。",[24,151953,151955],{"className":26,"code":151954,"language":28,"meta":29,"style":29},"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",[31,151956,151957,151965,151974,151984,151988,151992,152004,152013,152024,152034,152038,152042,152058],{"__ignoreMap":29},[34,151958,151959,151961,151963],{"class":36,"line":37},[34,151960,16340],{"class":55},[34,151962,17215],{"class":3617},[34,151964,5392],{"class":40},[34,151966,151967,151969,151971],{"class":36,"line":165},[34,151968,32443],{"class":55},[34,151970,32446],{"class":44},[34,151972,151973],{"class":40},"(self, name):\n",[34,151975,151976,151978,151980,151982],{"class":36,"line":171},[34,151977,32487],{"class":44},[34,151979,151153],{"class":40},[34,151981,221],{"class":55},[34,151983,151158],{"class":40},[34,151985,151986],{"class":36,"line":182},[34,151987,1475],{"emptyLinePlaceholder":1474},[34,151989,151990],{"class":36,"line":188},[34,151991,1475],{"emptyLinePlaceholder":1474},[34,151993,151994,151996,151998,152000,152002],{"class":36,"line":518},[34,151995,16340],{"class":55},[34,151997,9548],{"class":3617},[34,151999,286],{"class":40},[34,152001,20692],{"class":3617},[34,152003,32428],{"class":40},[34,152005,152006,152008,152010],{"class":36,"line":524},[34,152007,32443],{"class":55},[34,152009,32446],{"class":44},[34,152011,152012],{"class":40},"(self, name, score):\n",[34,152014,152015,152017,152019,152021],{"class":36,"line":530},[34,152016,32459],{"class":44},[34,152018,18907],{"class":40},[34,152020,32471],{"class":44},[34,152022,152023],{"class":40},"(name)\n",[34,152025,152026,152028,152030,152032],{"class":36,"line":624},[34,152027,32487],{"class":44},[34,152029,151177],{"class":40},[34,152031,221],{"class":55},[34,152033,3237],{"class":40},[34,152035,152036],{"class":36,"line":630},[34,152037,1475],{"emptyLinePlaceholder":1474},[34,152039,152040],{"class":36,"line":636},[34,152041,1475],{"emptyLinePlaceholder":1474},[34,152043,152044,152046,152048,152050,152052,152054,152056],{"class":36,"line":1513},[34,152045,150844],{"class":40},[34,152047,221],{"class":55},[34,152049,151248],{"class":40},[34,152051,151251],{"class":504},[34,152053,48],{"class":40},[34,152055,2780],{"class":44},[34,152057,101],{"class":40},[34,152059,152060,152062],{"class":36,"line":1519},[34,152061,723],{"class":44},[34,152063,152064],{"class":40},"(student.name, student.score)\n",[14,152066,152068],{"id":152067},"_1111-多态","11.11 多态",[103,152070,152071],{},"多态指不同对象响应同一个方法，表现出不同结果。",[24,152073,152075],{"className":26,"code":152074,"language":28,"meta":29,"style":29},"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",[31,152076,152077,152085,152093,152103,152107,152111,152119,152127,152137,152141,152145,152155,152160,152164,152168,152173],{"__ignoreMap":29},[34,152078,152079,152081,152083],{"class":36,"line":37},[34,152080,16340],{"class":55},[34,152082,151727],{"class":3617},[34,152084,5392],{"class":40},[34,152086,152087,152089,152091],{"class":36,"line":165},[34,152088,32443],{"class":55},[34,152090,151809],{"class":3617},[34,152092,32449],{"class":40},[34,152094,152095,152097,152099,152101],{"class":36,"line":171},[34,152096,34092],{"class":44},[34,152098,286],{"class":40},[34,152100,151752],{"class":504},[34,152102,101],{"class":40},[34,152104,152105],{"class":36,"line":182},[34,152106,1475],{"emptyLinePlaceholder":1474},[34,152108,152109],{"class":36,"line":188},[34,152110,1475],{"emptyLinePlaceholder":1474},[34,152112,152113,152115,152117],{"class":36,"line":518},[34,152114,16340],{"class":55},[34,152116,151875],{"class":3617},[34,152118,5392],{"class":40},[34,152120,152121,152123,152125],{"class":36,"line":524},[34,152122,32443],{"class":55},[34,152124,151809],{"class":3617},[34,152126,32449],{"class":40},[34,152128,152129,152131,152133,152135],{"class":36,"line":530},[34,152130,34092],{"class":44},[34,152132,286],{"class":40},[34,152134,151898],{"class":504},[34,152136,101],{"class":40},[34,152138,152139],{"class":36,"line":624},[34,152140,1475],{"emptyLinePlaceholder":1474},[34,152142,152143],{"class":36,"line":630},[34,152144,1475],{"emptyLinePlaceholder":1474},[34,152146,152147,152149,152152],{"class":36,"line":636},[34,152148,33588],{"class":55},[34,152150,152151],{"class":3617}," make_sound",[34,152153,152154],{"class":40},"(animal):\n",[34,152156,152157],{"class":36,"line":1513},[34,152158,152159],{"class":40},"    animal.speak()\n",[34,152161,152162],{"class":36,"line":1519},[34,152163,1475],{"emptyLinePlaceholder":1474},[34,152165,152166],{"class":36,"line":3283},[34,152167,1475],{"emptyLinePlaceholder":1474},[34,152169,152170],{"class":36,"line":3297},[34,152171,152172],{"class":40},"make_sound(Dog())\n",[34,152174,152175],{"class":36,"line":3302},[34,152176,152177],{"class":40},"make_sound(Cat())\n",[103,152179,152180],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152182,152184],{"id":152183},"_1112-类属性和实例属性","11.12 类属性和实例属性",[103,152186,152187],{},"实例属性属于对象：",[24,152189,152191],{"className":26,"code":152190,"language":28,"meta":29,"style":29},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[31,152192,152193,152201,152209],{"__ignoreMap":29},[34,152194,152195,152197,152199],{"class":36,"line":37},[34,152196,16340],{"class":55},[34,152198,9548],{"class":3617},[34,152200,5392],{"class":40},[34,152202,152203,152205,152207],{"class":36,"line":165},[34,152204,32443],{"class":55},[34,152206,32446],{"class":44},[34,152208,151973],{"class":40},[34,152210,152211,152213,152215,152217],{"class":36,"line":171},[34,152212,32487],{"class":44},[34,152214,151153],{"class":40},[34,152216,221],{"class":55},[34,152218,151158],{"class":40},[103,152220,152221],{},"类属性属于类，所有对象共享：",[24,152223,152225],{"className":26,"code":152224,"language":28,"meta":29,"style":29},"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",[31,152226,152227,152235,152245,152249,152257,152267,152271,152275,152288,152302,152306,152313,152320],{"__ignoreMap":29},[34,152228,152229,152231,152233],{"class":36,"line":37},[34,152230,16340],{"class":55},[34,152232,9548],{"class":3617},[34,152234,5392],{"class":40},[34,152236,152237,152240,152242],{"class":36,"line":165},[34,152238,152239],{"class":40},"    school ",[34,152241,221],{"class":55},[34,152243,152244],{"class":504}," \"黑马学校\"\n",[34,152246,152247],{"class":36,"line":171},[34,152248,1475],{"emptyLinePlaceholder":1474},[34,152250,152251,152253,152255],{"class":36,"line":182},[34,152252,32443],{"class":55},[34,152254,32446],{"class":44},[34,152256,151973],{"class":40},[34,152258,152259,152261,152263,152265],{"class":36,"line":188},[34,152260,32487],{"class":44},[34,152262,151153],{"class":40},[34,152264,221],{"class":55},[34,152266,151158],{"class":40},[34,152268,152269],{"class":36,"line":518},[34,152270,1475],{"emptyLinePlaceholder":1474},[34,152272,152273],{"class":36,"line":524},[34,152274,1475],{"emptyLinePlaceholder":1474},[34,152276,152277,152280,152282,152284,152286],{"class":36,"line":530},[34,152278,152279],{"class":40},"s1 ",[34,152281,221],{"class":55},[34,152283,151248],{"class":40},[34,152285,151251],{"class":504},[34,152287,101],{"class":40},[34,152289,152290,152293,152295,152297,152300],{"class":36,"line":624},[34,152291,152292],{"class":40},"s2 ",[34,152294,221],{"class":55},[34,152296,151248],{"class":40},[34,152298,152299],{"class":504},"\"小红\"",[34,152301,101],{"class":40},[34,152303,152304],{"class":36,"line":630},[34,152305,1475],{"emptyLinePlaceholder":1474},[34,152307,152308,152310],{"class":36,"line":636},[34,152309,723],{"class":44},[34,152311,152312],{"class":40},"(s1.school)\n",[34,152314,152315,152317],{"class":36,"line":1513},[34,152316,723],{"class":44},[34,152318,152319],{"class":40},"(s2.school)\n",[34,152321,152322,152324],{"class":36,"line":1519},[34,152323,723],{"class":44},[34,152325,152326],{"class":40},"(Student.school)\n",[103,152328,152329],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152331,152333],{"id":152332},"_1113-类方法和静态方法","11.13 类方法和静态方法",[19,152335,152337],{"id":152336},"_11131-类方法","11.13.1 类方法",[103,152339,152340,152341,152344,152345,30031],{},"类方法使用 ",[31,152342,152343],{},"@classmethod","，第一个参数通常是 ",[31,152346,152347],{},"cls",[24,152349,152351],{"className":26,"code":152350,"language":28,"meta":29,"style":29},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[31,152352,152353,152361,152369,152373,152381,152391,152401,152405,152409],{"__ignoreMap":29},[34,152354,152355,152357,152359],{"class":36,"line":37},[34,152356,16340],{"class":55},[34,152358,9548],{"class":3617},[34,152360,5392],{"class":40},[34,152362,152363,152365,152367],{"class":36,"line":165},[34,152364,152239],{"class":40},[34,152366,221],{"class":55},[34,152368,152244],{"class":504},[34,152370,152371],{"class":36,"line":171},[34,152372,1475],{"emptyLinePlaceholder":1474},[34,152374,152375,152378],{"class":36,"line":182},[34,152376,152377],{"class":3617},"    @",[34,152379,152380],{"class":44},"classmethod\n",[34,152382,152383,152385,152388],{"class":36,"line":188},[34,152384,32443],{"class":55},[34,152386,152387],{"class":3617}," get_school",[34,152389,152390],{"class":40},"(cls):\n",[34,152392,152393,152395,152398],{"class":36,"line":518},[34,152394,16398],{"class":55},[34,152396,152397],{"class":44}," cls",[34,152399,152400],{"class":40},".school\n",[34,152402,152403],{"class":36,"line":524},[34,152404,1475],{"emptyLinePlaceholder":1474},[34,152406,152407],{"class":36,"line":530},[34,152408,1475],{"emptyLinePlaceholder":1474},[34,152410,152411,152413],{"class":36,"line":624},[34,152412,723],{"class":44},[34,152414,152415],{"class":40},"(Student.get_school())\n",[19,152417,152419],{"id":152418},"_11132-静态方法","11.13.2 静态方法",[103,152421,152422,152423,152426],{},"静态方法使用 ",[31,152424,152425],{},"@staticmethod","，不需要访问实例和类。",[24,152428,152430],{"className":26,"code":152429,"language":28,"meta":29,"style":29},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[31,152431,152432,152441,152448,152457,152468,152472,152476],{"__ignoreMap":29},[34,152433,152434,152436,152439],{"class":36,"line":37},[34,152435,16340],{"class":55},[34,152437,152438],{"class":3617}," MathUtils",[34,152440,5392],{"class":40},[34,152442,152443,152445],{"class":36,"line":165},[34,152444,152377],{"class":3617},[34,152446,152447],{"class":44},"staticmethod\n",[34,152449,152450,152452,152454],{"class":36,"line":171},[34,152451,32443],{"class":55},[34,152453,6860],{"class":3617},[34,152455,152456],{"class":40},"(a, b):\n",[34,152458,152459,152461,152463,152465],{"class":36,"line":182},[34,152460,16398],{"class":55},[34,152462,12519],{"class":40},[34,152464,2277],{"class":55},[34,152466,152467],{"class":40}," b\n",[34,152469,152470],{"class":36,"line":188},[34,152471,1475],{"emptyLinePlaceholder":1474},[34,152473,152474],{"class":36,"line":518},[34,152475,1475],{"emptyLinePlaceholder":1474},[34,152477,152478,152480,152483,152485,152487,152489],{"class":36,"line":524},[34,152479,723],{"class":44},[34,152481,152482],{"class":40},"(MathUtils.add(",[34,152484,394],{"class":44},[34,152486,48],{"class":40},[34,152488,332],{"class":44},[34,152490,296],{"class":40},[103,152492,152493],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152495,152497],{"id":152496},"_1114-dataclass","11.14 dataclass",[103,152499,152500,152503],{},[31,152501,152502],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[24,152505,152507],{"className":26,"code":152506,"language":28,"meta":29,"style":29},"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",[31,152508,152509,152521,152525,152529,152534,152542,152550,152558,152566,152570,152574,152594],{"__ignoreMap":29},[34,152510,152511,152513,152516,152518],{"class":36,"line":37},[34,152512,32379],{"class":55},[34,152514,152515],{"class":40}," dataclasses ",[34,152517,32036],{"class":55},[34,152519,152520],{"class":40}," dataclass\n",[34,152522,152523],{"class":36,"line":165},[34,152524,1475],{"emptyLinePlaceholder":1474},[34,152526,152527],{"class":36,"line":171},[34,152528,1475],{"emptyLinePlaceholder":1474},[34,152530,152531],{"class":36,"line":182},[34,152532,152533],{"class":3617},"@dataclass\n",[34,152535,152536,152538,152540],{"class":36,"line":188},[34,152537,16340],{"class":55},[34,152539,9548],{"class":3617},[34,152541,5392],{"class":40},[34,152543,152544,152547],{"class":36,"line":518},[34,152545,152546],{"class":40},"    name: ",[34,152548,152549],{"class":44},"str\n",[34,152551,152552,152555],{"class":36,"line":524},[34,152553,152554],{"class":40},"    age: ",[34,152556,152557],{"class":44},"int\n",[34,152559,152560,152563],{"class":36,"line":530},[34,152561,152562],{"class":40},"    score: ",[34,152564,152565],{"class":44},"float\n",[34,152567,152568],{"class":36,"line":624},[34,152569,1475],{"emptyLinePlaceholder":1474},[34,152571,152572],{"class":36,"line":630},[34,152573,1475],{"emptyLinePlaceholder":1474},[34,152575,152576,152578,152580,152582,152584,152586,152588,152590,152592],{"class":36,"line":636},[34,152577,150844],{"class":40},[34,152579,221],{"class":55},[34,152581,151248],{"class":40},[34,152583,151251],{"class":504},[34,152585,48],{"class":40},[34,152587,2445],{"class":44},[34,152589,48],{"class":40},[34,152591,2780],{"class":44},[34,152593,101],{"class":40},[34,152595,152596,152598],{"class":36,"line":1513},[34,152597,723],{"class":44},[34,152599,151405],{"class":40},[103,152601,152602,152603,2021,152605,152608],{},"它会自动生成 ",[31,152604,32471],{},[31,152606,152607],{},"__repr__"," 等方法。适合数据模型类。",[14,152610,152612],{"id":152611},"_1115-小案例学生类","11.15 小案例：学生类",[24,152614,152616],{"className":26,"code":152615,"language":28,"meta":29,"style":29},"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",[31,152617,152618,152626,152635,152647,152657,152667,152677,152681,152690,152703,152707,152716,152722,152734,152746,152758,152770,152774,152778,152784,152794,152803,152813,152821,152829,152838,152842,152846,152854,152890,152894,152898,152923,152930],{"__ignoreMap":29},[34,152619,152620,152622,152624],{"class":36,"line":37},[34,152621,16340],{"class":55},[34,152623,9548],{"class":3617},[34,152625,5392],{"class":40},[34,152627,152628,152630,152632],{"class":36,"line":165},[34,152629,32443],{"class":55},[34,152631,32446],{"class":44},[34,152633,152634],{"class":40},"(self, student_id, name, age, score):\n",[34,152636,152637,152639,152642,152644],{"class":36,"line":171},[34,152638,32487],{"class":44},[34,152640,152641],{"class":40},".student_id ",[34,152643,221],{"class":55},[34,152645,152646],{"class":40}," student_id\n",[34,152648,152649,152651,152653,152655],{"class":36,"line":182},[34,152650,32487],{"class":44},[34,152652,151153],{"class":40},[34,152654,221],{"class":55},[34,152656,151158],{"class":40},[34,152658,152659,152661,152663,152665],{"class":36,"line":188},[34,152660,32487],{"class":44},[34,152662,151165],{"class":40},[34,152664,221],{"class":55},[34,152666,151170],{"class":40},[34,152668,152669,152671,152673,152675],{"class":36,"line":518},[34,152670,32487],{"class":44},[34,152672,151177],{"class":40},[34,152674,221],{"class":55},[34,152676,3237],{"class":40},[34,152678,152679],{"class":36,"line":524},[34,152680,1475],{"emptyLinePlaceholder":1474},[34,152682,152683,152685,152688],{"class":36,"line":530},[34,152684,32443],{"class":55},[34,152686,152687],{"class":3617}," is_passed",[34,152689,32449],{"class":40},[34,152691,152692,152694,152696,152698,152700],{"class":36,"line":624},[34,152693,16398],{"class":55},[34,152695,40514],{"class":44},[34,152697,151177],{"class":40},[34,152699,3364],{"class":55},[34,152701,152702],{"class":44}," 60\n",[34,152704,152705],{"class":36,"line":630},[34,152706,1475],{"emptyLinePlaceholder":1474},[34,152708,152709,152711,152714],{"class":36,"line":636},[34,152710,32443],{"class":55},[34,152712,152713],{"class":3617}," to_dict",[34,152715,32449],{"class":40},[34,152717,152718,152720],{"class":36,"line":1513},[34,152719,16398],{"class":55},[34,152721,17218],{"class":40},[34,152723,152724,152727,152729,152731],{"class":36,"line":1519},[34,152725,152726],{"class":504},"            \"student_id\"",[34,152728,53076],{"class":40},[34,152730,32465],{"class":44},[34,152732,152733],{"class":40},".student_id,\n",[34,152735,152736,152739,152741,152743],{"class":36,"line":3283},[34,152737,152738],{"class":504},"            \"name\"",[34,152740,53076],{"class":40},[34,152742,32465],{"class":44},[34,152744,152745],{"class":40},".name,\n",[34,152747,152748,152751,152753,152755],{"class":36,"line":3297},[34,152749,152750],{"class":504},"            \"age\"",[34,152752,53076],{"class":40},[34,152754,32465],{"class":44},[34,152756,152757],{"class":40},".age,\n",[34,152759,152760,152763,152765,152767],{"class":36,"line":3302},[34,152761,152762],{"class":504},"            \"score\"",[34,152764,53076],{"class":40},[34,152766,32465],{"class":44},[34,152768,152769],{"class":40},".score,\n",[34,152771,152772],{"class":36,"line":3308},[34,152773,4182],{"class":40},[34,152775,152776],{"class":36,"line":3328},[34,152777,1475],{"emptyLinePlaceholder":1474},[34,152779,152780,152782],{"class":36,"line":3333},[34,152781,152377],{"class":3617},[34,152783,152380],{"class":44},[34,152785,152786,152788,152791],{"class":36,"line":3347},[34,152787,32443],{"class":55},[34,152789,152790],{"class":3617}," from_dict",[34,152792,152793],{"class":40},"(cls, data):\n",[34,152795,152796,152798,152800],{"class":36,"line":3352},[34,152797,16398],{"class":55},[34,152799,152397],{"class":44},[34,152801,152802],{"class":40},"(\n",[34,152804,152805,152808,152811],{"class":36,"line":3381},[34,152806,152807],{"class":40},"            data[",[34,152809,152810],{"class":504},"\"student_id\"",[34,152812,89472],{"class":40},[34,152814,152815,152817,152819],{"class":36,"line":3386},[34,152816,152807],{"class":40},[34,152818,64318],{"class":504},[34,152820,89472],{"class":40},[34,152822,152823,152825,152827],{"class":36,"line":3403},[34,152824,152807],{"class":40},[34,152826,70763],{"class":504},[34,152828,89472],{"class":40},[34,152830,152831,152833,152836],{"class":36,"line":3408},[34,152832,152807],{"class":40},[34,152834,152835],{"class":504},"\"score\"",[34,152837,89472],{"class":40},[34,152839,152840],{"class":36,"line":3413},[34,152841,39767],{"class":40},[34,152843,152844],{"class":36,"line":3418},[34,152845,1475],{"emptyLinePlaceholder":1474},[34,152847,152848,152850,152852],{"class":36,"line":3432},[34,152849,32443],{"class":55},[34,152851,151344],{"class":44},[34,152853,32449],{"class":40},[34,152855,152856,152858,152860,152862,152864,152867,152869,152872,152874,152876,152878,152880,152882,152884,152886,152888],{"class":36,"line":3437},[34,152857,16398],{"class":55},[34,152859,151353],{"class":55},[34,152861,2058],{"class":504},[34,152863,150815],{"class":44},[34,152865,152866],{"class":40},".student_id",[34,152868,2737],{"class":44},[34,152870,152871],{"class":44}," {self",[34,152873,81938],{"class":40},[34,152875,2737],{"class":44},[34,152877,152871],{"class":44},[34,152879,81950],{"class":40},[34,152881,2737],{"class":44},[34,152883,152871],{"class":44},[34,152885,151225],{"class":40},[34,152887,2737],{"class":44},[34,152889,26779],{"class":504},[34,152891,152892],{"class":36,"line":4230},[34,152893,1475],{"emptyLinePlaceholder":1474},[34,152895,152896],{"class":36,"line":4244},[34,152897,1475],{"emptyLinePlaceholder":1474},[34,152899,152900,152902,152904,152906,152909,152911,152913,152915,152917,152919,152921],{"class":36,"line":4252},[34,152901,150844],{"class":40},[34,152903,221],{"class":55},[34,152905,151248],{"class":40},[34,152907,152908],{"class":504},"\"001\"",[34,152910,48],{"class":40},[34,152912,151251],{"class":504},[34,152914,48],{"class":40},[34,152916,2445],{"class":44},[34,152918,48],{"class":40},[34,152920,2780],{"class":44},[34,152922,101],{"class":40},[34,152924,152925,152927],{"class":36,"line":4257},[34,152926,723],{"class":44},[34,152928,152929],{"class":40},"(student.is_passed())\n",[34,152931,152932,152934],{"class":36,"line":4263},[34,152933,723],{"class":44},[34,152935,152936],{"class":40},"(student.to_dict())\n",[103,152938,152939,102381,152942,152945],{},[31,152940,152941],{},"to_dict()",[31,152943,152944],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152947,152949],{"id":152948},"_1116-易错点","11.16 易错点",[1772,152951,152952,152958,152964,152969,152972,152975],{},[1775,152953,152954,152955,30031],{},"类名推荐使用大驼峰，如 ",[31,152956,152957],{},"StudentManager",[1775,152959,152960,152961,152963],{},"方法第一个参数必须写 ",[31,152962,32465],{},"，调用时不用传。",[1775,152965,152966,152968],{},[31,152967,32471],{}," 不是普通方法，它在创建对象时自动执行。",[1775,152970,152971],{},"私有属性不是绝对安全，只是约定和名称改写。",[1775,152973,152974],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[1775,152976,152977],{},"类中方法太多时，说明职责可能过重。",[14,152979,152981],{"id":152980},"_1117-本章练习","11.17 本章练习",[1772,152983,152984,152990,152996,153001,153014],{},[1775,152985,152986,152987,152989],{},"定义 ",[31,152988,150931],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[1775,152991,152986,152992,152995],{},[31,152993,152994],{},"Account"," 类，实现存款、取款、查询余额。",[1775,152997,152986,152998,153000],{},[31,152999,18872],{}," 类，计算圆的周长和面积。",[1775,153002,152986,153003,2021,153006,153009,153010,153013],{},[31,153004,153005],{},"Dog",[31,153007,153008],{},"Cat"," 类，并用同一个函数调用它们的 ",[31,153011,153012],{},"speak()"," 方法。",[1775,153015,105729,153016,153018,153019,30031],{},[31,153017,152502],{}," 定义一个商品类 ",[31,153020,153021],{},"Product",[1711,153023,153024],{},"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":29,"searchDepth":165,"depth":165,"links":153026},[153027,153028,153029,153030,153031,153032,153034,153035,153036,153037,153038,153039,153040,153044,153045,153046,153047],{"id":150695,"depth":165,"text":150696},{"id":150878,"depth":165,"text":150879},{"id":150942,"depth":165,"text":150943},{"id":151019,"depth":165,"text":151020},{"id":151118,"depth":165,"text":151119},{"id":151282,"depth":165,"text":153033},"11.6 str",{"id":151408,"depth":165,"text":151409},{"id":151674,"depth":165,"text":151675},{"id":151788,"depth":165,"text":151789},{"id":151943,"depth":165,"text":151944},{"id":152067,"depth":165,"text":152068},{"id":152183,"depth":165,"text":152184},{"id":152332,"depth":165,"text":152333,"children":153041},[153042,153043],{"id":152336,"depth":171,"text":152337},{"id":152418,"depth":171,"text":152419},{"id":152496,"depth":165,"text":152497},{"id":152611,"depth":165,"text":152612},{"id":152948,"depth":165,"text":152949},{"id":152980,"depth":165,"text":152981},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150687,"description":1744},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153054,"title":153055,"body":153056,"description":1744,"extension":1745,"meta":156369,"navigation":1474,"path":156370,"seo":156371,"stem":156372,"__hash__":156373},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153057,"toc":156345},[153058,153061,153065,153068,153071,153100,153103,153111,153115,153119,153122,153145,153148,153154,153158,154604,154607,154628,154632,154635,154647,154650,154834,154837,154963,154966,154970,154974,155110,155114,155200,155204,155286,155290,155327,155331,155520,155524,155527,155757,155761,155764,155945,155948,155952,155955,155961,155964,155990,155994,155997,156011,156014,156039,156042,156056,156059,156076,156079,156096,156099,156116,156120,156146,156150,156173,156177,156180,156182,156188,156190,156211,156214,156220,156226,156230,156233,156309,156312,156316,156342],[10,153059,153055],{"id":153060},"_12-综合案例与复习路线",[14,153062,153064],{"id":153063},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[103,153066,153067],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[103,153069,153070],{},"一个合格的入门综合项目最好覆盖：",[1772,153072,153073,153076,153079,153082,153085,153088,153091,153094,153097],{},[1775,153074,153075],{},"输入输出。",[1775,153077,153078],{},"判断和循环。",[1775,153080,153081],{},"函数拆分。",[1775,153083,153084],{},"列表、字典等容器。",[1775,153086,153087],{},"文件持久化。",[1775,153089,153090],{},"异常处理。",[1775,153092,153093],{},"模块拆分。",[1775,153095,153096],{},"可选：面向对象。",[1775,153098,153099],{},"可选：数据可视化。",[103,153101,153102],{},"本章整理两个方向：",[1772,153104,153105,153108],{},[1775,153106,153107],{},"学生管理系统。",[1775,153109,153110],{},"销售数据统计和可视化。",[14,153112,153114],{"id":153113},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[19,153116,153118],{"id":153117},"_1221-需求","12.2.1 需求",[103,153120,153121],{},"实现一个命令行学生管理系统：",[1772,153123,153124,153127,153130,153133,153136,153139,153142],{},[1775,153125,153126],{},"添加学生。",[1775,153128,153129],{},"删除学生。",[1775,153131,153132],{},"修改学生。",[1775,153134,153135],{},"查询学生。",[1775,153137,153138],{},"显示所有学生。",[1775,153140,153141],{},"保存到 JSON 文件。",[1775,153143,153144],{},"程序启动时自动读取 JSON 文件。",[103,153146,153147],{},"学生字段：",[24,153149,153152],{"className":153150,"code":153151,"language":6838,"meta":29},[6836],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[31,153153,153151],{"__ignoreMap":29},[14,153155,153157],{"id":153156},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[24,153159,153161],{"className":26,"code":153160,"language":28,"meta":29,"style":29},"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",[31,153162,153163,153169,153179,153183,153197,153201,153205,153214,153226,153232,153236,153242,153273,153283,153290,153301,153307,153311,153315,153325,153356,153382,153386,153390,153399,153410,153421,153432,153443,153454,153465,153476,153480,153484,153494,153506,153522,153529,153536,153540,153544,153554,153562,153569,153582,153592,153603,153607,153611,153620,153628,153634,153646,153654,153665,153669,153673,153682,153698,153702,153709,153720,153725,153729,153745,153760,153775,153779,153784,153792,153800,153808,153816,153820,153825,153836,153840,153844,153853,153868,153878,153882,153894,153905,153909,153913,153918,153922,153933,153937,153941,153950,153965,153973,153977,153989,153999,154003,154007,154022,154035,154048,154052,154065,154077,154089,154093,154097,154108,154112,154116,154125,154140,154148,154152,154164,154174,154178,154182,154187,154191,154195,154205,154211,154233,154252,154271,154290,154295,154299,154303,154312,154320,154331,154335,154339,154365,154375,154380,154384,154388,154396,154406,154410,154418,154423,154439,154443,154457,154462,154476,154481,154494,154499,154512,154517,154530,154535,154548,154559,154563,154569,154580,154584,154588,154600],{"__ignoreMap":29},[34,153164,153165,153167],{"class":36,"line":37},[34,153166,32036],{"class":55},[34,153168,148454],{"class":40},[34,153170,153171,153173,153175,153177],{"class":36,"line":165},[34,153172,32379],{"class":55},[34,153174,109674],{"class":40},[34,153176,32036],{"class":55},[34,153178,109679],{"class":40},[34,153180,153181],{"class":36,"line":171},[34,153182,1475],{"emptyLinePlaceholder":1474},[34,153184,153185,153188,153190,153192,153195],{"class":36,"line":182},[34,153186,153187],{"class":44},"DATA_FILE",[34,153189,56],{"class":55},[34,153191,109908],{"class":40},[34,153193,153194],{"class":504},"\"students.json\"",[34,153196,101],{"class":40},[34,153198,153199],{"class":36,"line":188},[34,153200,1475],{"emptyLinePlaceholder":1474},[34,153202,153203],{"class":36,"line":518},[34,153204,1475],{"emptyLinePlaceholder":1474},[34,153206,153207,153209,153212],{"class":36,"line":524},[34,153208,33588],{"class":55},[34,153210,153211],{"class":3617}," load_students",[34,153213,33594],{"class":40},[34,153215,153216,153218,153220,153223],{"class":36,"line":530},[34,153217,4754],{"class":55},[34,153219,40571],{"class":55},[34,153221,153222],{"class":44}," DATA_FILE",[34,153224,153225],{"class":40},".exists():\n",[34,153227,153228,153230],{"class":36,"line":624},[34,153229,16398],{"class":55},[34,153231,53477],{"class":40},[34,153233,153234],{"class":36,"line":630},[34,153235,1475],{"emptyLinePlaceholder":1474},[34,153237,153238,153240],{"class":36,"line":636},[34,153239,127147],{"class":55},[34,153241,5392],{"class":40},[34,153243,153244,153247,153249,153251,153253,153255,153257,153259,153261,153263,153265,153267,153269,153271],{"class":36,"line":1513},[34,153245,153246],{"class":55},"        with",[34,153248,148154],{"class":44},[34,153250,286],{"class":40},[34,153252,153187],{"class":44},[34,153254,48],{"class":40},[34,153256,148164],{"class":504},[34,153258,48],{"class":40},[34,153260,148169],{"class":51},[34,153262,221],{"class":55},[34,153264,148174],{"class":504},[34,153266,372],{"class":40},[34,153268,33025],{"class":55},[34,153270,149516],{"class":51},[34,153272,5392],{"class":40},[34,153274,153275,153277,153279,153281],{"class":36,"line":1519},[34,153276,17378],{"class":55},[34,153278,149527],{"class":40},[34,153280,46993],{"class":51},[34,153282,101],{"class":40},[34,153284,153285,153287],{"class":36,"line":3283},[34,153286,127175],{"class":55},[34,153288,153289],{"class":40}," json.JSONDecodeError:\n",[34,153291,153292,153294,153296,153299],{"class":36,"line":3297},[34,153293,34092],{"class":44},[34,153295,286],{"class":40},[34,153297,153298],{"class":504},"\"数据文件格式错误，已使用空数据启动\"",[34,153300,101],{"class":40},[34,153302,153303,153305],{"class":36,"line":3302},[34,153304,16398],{"class":55},[34,153306,53477],{"class":40},[34,153308,153309],{"class":36,"line":3308},[34,153310,1475],{"emptyLinePlaceholder":1474},[34,153312,153313],{"class":36,"line":3328},[34,153314,1475],{"emptyLinePlaceholder":1474},[34,153316,153317,153319,153322],{"class":36,"line":3333},[34,153318,33588],{"class":55},[34,153320,153321],{"class":3617}," save_students",[34,153323,153324],{"class":40},"(students):\n",[34,153326,153327,153329,153331,153333,153335,153337,153340,153342,153344,153346,153348,153350,153352,153354],{"class":36,"line":3347},[34,153328,35819],{"class":55},[34,153330,148154],{"class":44},[34,153332,286],{"class":40},[34,153334,153187],{"class":44},[34,153336,48],{"class":40},[34,153338,153339],{"class":504},"\"w\"",[34,153341,48],{"class":40},[34,153343,148169],{"class":51},[34,153345,221],{"class":55},[34,153347,148174],{"class":504},[34,153349,372],{"class":40},[34,153351,33025],{"class":55},[34,153353,149516],{"class":51},[34,153355,5392],{"class":40},[34,153357,153358,153361,153363,153365,153367,153369,153371,153373,153376,153378,153380],{"class":36,"line":3352},[34,153359,153360],{"class":40},"        json.dump(students, ",[34,153362,46993],{"class":51},[34,153364,48],{"class":40},[34,153366,148500],{"class":51},[34,153368,221],{"class":55},[34,153370,35628],{"class":44},[34,153372,48],{"class":40},[34,153374,153375],{"class":51},"indent",[34,153377,221],{"class":55},[34,153379,332],{"class":44},[34,153381,101],{"class":40},[34,153383,153384],{"class":36,"line":3381},[34,153385,1475],{"emptyLinePlaceholder":1474},[34,153387,153388],{"class":36,"line":3386},[34,153389,1475],{"emptyLinePlaceholder":1474},[34,153391,153392,153394,153397],{"class":36,"line":3403},[34,153393,33588],{"class":55},[34,153395,153396],{"class":3617}," show_menu",[34,153398,33594],{"class":40},[34,153400,153401,153403,153405,153408],{"class":36,"line":3408},[34,153402,32941],{"class":44},[34,153404,286],{"class":40},[34,153406,153407],{"class":504},"\"====== 学生管理系统 ======\"",[34,153409,101],{"class":40},[34,153411,153412,153414,153416,153419],{"class":36,"line":3413},[34,153413,32941],{"class":44},[34,153415,286],{"class":40},[34,153417,153418],{"class":504},"\"1. 添加学生\"",[34,153420,101],{"class":40},[34,153422,153423,153425,153427,153430],{"class":36,"line":3418},[34,153424,32941],{"class":44},[34,153426,286],{"class":40},[34,153428,153429],{"class":504},"\"2. 删除学生\"",[34,153431,101],{"class":40},[34,153433,153434,153436,153438,153441],{"class":36,"line":3432},[34,153435,32941],{"class":44},[34,153437,286],{"class":40},[34,153439,153440],{"class":504},"\"3. 修改学生\"",[34,153442,101],{"class":40},[34,153444,153445,153447,153449,153452],{"class":36,"line":3437},[34,153446,32941],{"class":44},[34,153448,286],{"class":40},[34,153450,153451],{"class":504},"\"4. 查询学生\"",[34,153453,101],{"class":40},[34,153455,153456,153458,153460,153463],{"class":36,"line":4230},[34,153457,32941],{"class":44},[34,153459,286],{"class":40},[34,153461,153462],{"class":504},"\"5. 显示所有学生\"",[34,153464,101],{"class":40},[34,153466,153467,153469,153471,153474],{"class":36,"line":4244},[34,153468,32941],{"class":44},[34,153470,286],{"class":40},[34,153472,153473],{"class":504},"\"0. 退出系统\"",[34,153475,101],{"class":40},[34,153477,153478],{"class":36,"line":4252},[34,153479,1475],{"emptyLinePlaceholder":1474},[34,153481,153482],{"class":36,"line":4257},[34,153483,1475],{"emptyLinePlaceholder":1474},[34,153485,153486,153488,153491],{"class":36,"line":4263},[34,153487,33588],{"class":55},[34,153489,153490],{"class":3617}," find_student",[34,153492,153493],{"class":40},"(students, student_id):\n",[34,153495,153496,153498,153501,153503],{"class":36,"line":4269},[34,153497,4854],{"class":55},[34,153499,153500],{"class":40}," student ",[34,153502,27689],{"class":55},[34,153504,153505],{"class":40}," students:\n",[34,153507,153508,153510,153513,153515,153517,153519],{"class":36,"line":4274},[34,153509,4150],{"class":55},[34,153511,153512],{"class":40}," student[",[34,153514,152810],{"class":504},[34,153516,6095],{"class":40},[34,153518,4602],{"class":55},[34,153520,153521],{"class":40}," student_id:\n",[34,153523,153524,153526],{"class":36,"line":9598},[34,153525,17378],{"class":55},[34,153527,153528],{"class":40}," student\n",[34,153530,153531,153533],{"class":36,"line":9622},[34,153532,5743],{"class":55},[34,153534,153535],{"class":44}," None\n",[34,153537,153538],{"class":36,"line":9627},[34,153539,1475],{"emptyLinePlaceholder":1474},[34,153541,153542],{"class":36,"line":9633},[34,153543,1475],{"emptyLinePlaceholder":1474},[34,153545,153546,153548,153551],{"class":36,"line":9660},[34,153547,33588],{"class":55},[34,153549,153550],{"class":3617}," input_int",[34,153552,153553],{"class":40},"(prompt):\n",[34,153555,153556,153558,153560],{"class":36,"line":9665},[34,153557,3905],{"class":55},[34,153559,69],{"class":44},[34,153561,5392],{"class":40},[34,153563,153564,153567],{"class":36,"line":9671},[34,153565,153566],{"class":55},"        try",[34,153568,5392],{"class":40},[34,153570,153571,153573,153575,153577,153579],{"class":36,"line":9683},[34,153572,17378],{"class":55},[34,153574,4036],{"class":44},[34,153576,286],{"class":40},[34,153578,55460],{"class":44},[34,153580,153581],{"class":40},"(prompt))\n",[34,153583,153584,153587,153590],{"class":36,"line":9695},[34,153585,153586],{"class":55},"        except",[34,153588,153589],{"class":44}," ValueError",[34,153591,5392],{"class":40},[34,153593,153594,153596,153598,153601],{"class":36,"line":9707},[34,153595,36291],{"class":44},[34,153597,286],{"class":40},[34,153599,153600],{"class":504},"\"请输入整数\"",[34,153602,101],{"class":40},[34,153604,153605],{"class":36,"line":11366},[34,153606,1475],{"emptyLinePlaceholder":1474},[34,153608,153609],{"class":36,"line":11391},[34,153610,1475],{"emptyLinePlaceholder":1474},[34,153612,153613,153615,153618],{"class":36,"line":11414},[34,153614,33588],{"class":55},[34,153616,153617],{"class":3617}," input_float",[34,153619,153553],{"class":40},[34,153621,153622,153624,153626],{"class":36,"line":11438},[34,153623,3905],{"class":55},[34,153625,69],{"class":44},[34,153627,5392],{"class":40},[34,153629,153630,153632],{"class":36,"line":11443},[34,153631,153566],{"class":55},[34,153633,5392],{"class":40},[34,153635,153636,153638,153640,153642,153644],{"class":36,"line":11448},[34,153637,17378],{"class":55},[34,153639,111160],{"class":44},[34,153641,286],{"class":40},[34,153643,55460],{"class":44},[34,153645,153581],{"class":40},[34,153647,153648,153650,153652],{"class":36,"line":11453},[34,153649,153586],{"class":55},[34,153651,153589],{"class":44},[34,153653,5392],{"class":40},[34,153655,153656,153658,153660,153663],{"class":36,"line":11462},[34,153657,36291],{"class":44},[34,153659,286],{"class":40},[34,153661,153662],{"class":504},"\"请输入数字\"",[34,153664,101],{"class":40},[34,153666,153667],{"class":36,"line":11467},[34,153668,1475],{"emptyLinePlaceholder":1474},[34,153670,153671],{"class":36,"line":11473},[34,153672,1475],{"emptyLinePlaceholder":1474},[34,153674,153675,153677,153680],{"class":36,"line":11494},[34,153676,33588],{"class":55},[34,153678,153679],{"class":3617}," add_student",[34,153681,153324],{"class":40},[34,153683,153684,153687,153689,153691,153693,153696],{"class":36,"line":11500},[34,153685,153686],{"class":40},"    student_id ",[34,153688,221],{"class":55},[34,153690,62244],{"class":44},[34,153692,286],{"class":40},[34,153694,153695],{"class":504},"\"请输入学号:\"",[34,153697,101],{"class":40},[34,153699,153700],{"class":36,"line":11514},[34,153701,1475],{"emptyLinePlaceholder":1474},[34,153703,153704,153706],{"class":36,"line":11520},[34,153705,4754],{"class":55},[34,153707,153708],{"class":40}," find_student(students, student_id):\n",[34,153710,153711,153713,153715,153718],{"class":36,"line":11547},[34,153712,34092],{"class":44},[34,153714,286],{"class":40},[34,153716,153717],{"class":504},"\"学号已存在\"",[34,153719,101],{"class":40},[34,153721,153722],{"class":36,"line":11556},[34,153723,153724],{"class":55},"        return\n",[34,153726,153727],{"class":36,"line":11562},[34,153728,1475],{"emptyLinePlaceholder":1474},[34,153730,153731,153734,153736,153738,153740,153743],{"class":36,"line":11570},[34,153732,153733],{"class":40},"    name ",[34,153735,221],{"class":55},[34,153737,62244],{"class":44},[34,153739,286],{"class":40},[34,153741,153742],{"class":504},"\"请输入姓名:\"",[34,153744,101],{"class":40},[34,153746,153747,153750,153752,153755,153758],{"class":36,"line":11575},[34,153748,153749],{"class":40},"    age ",[34,153751,221],{"class":55},[34,153753,153754],{"class":40}," input_int(",[34,153756,153757],{"class":504},"\"请输入年龄:\"",[34,153759,101],{"class":40},[34,153761,153762,153765,153767,153770,153773],{"class":36,"line":18250},[34,153763,153764],{"class":40},"    score ",[34,153766,221],{"class":55},[34,153768,153769],{"class":40}," input_float(",[34,153771,153772],{"class":504},"\"请输入成绩:\"",[34,153774,101],{"class":40},[34,153776,153777],{"class":36,"line":18256},[34,153778,1475],{"emptyLinePlaceholder":1474},[34,153780,153781],{"class":36,"line":18279},[34,153782,153783],{"class":40},"    students.append({\n",[34,153785,153786,153789],{"class":36,"line":18285},[34,153787,153788],{"class":504},"        \"student_id\"",[34,153790,153791],{"class":40},": student_id,\n",[34,153793,153794,153797],{"class":36,"line":18308},[34,153795,153796],{"class":504},"        \"name\"",[34,153798,153799],{"class":40},": name,\n",[34,153801,153802,153805],{"class":36,"line":18322},[34,153803,153804],{"class":504},"        \"age\"",[34,153806,153807],{"class":40},": age,\n",[34,153809,153810,153813],{"class":36,"line":18342},[34,153811,153812],{"class":504},"        \"score\"",[34,153814,153815],{"class":40},": score,\n",[34,153817,153818],{"class":36,"line":18348},[34,153819,35102],{"class":40},[34,153821,153822],{"class":36,"line":18359},[34,153823,153824],{"class":40},"    save_students(students)\n",[34,153826,153827,153829,153831,153834],{"class":36,"line":18382},[34,153828,32941],{"class":44},[34,153830,286],{"class":40},[34,153832,153833],{"class":504},"\"添加成功\"",[34,153835,101],{"class":40},[34,153837,153838],{"class":36,"line":18404},[34,153839,1475],{"emptyLinePlaceholder":1474},[34,153841,153842],{"class":36,"line":18409},[34,153843,1475],{"emptyLinePlaceholder":1474},[34,153845,153846,153848,153851],{"class":36,"line":18415},[34,153847,33588],{"class":55},[34,153849,153850],{"class":3617}," delete_student",[34,153852,153324],{"class":40},[34,153854,153855,153857,153859,153861,153863,153866],{"class":36,"line":18429},[34,153856,153686],{"class":40},[34,153858,221],{"class":55},[34,153860,62244],{"class":44},[34,153862,286],{"class":40},[34,153864,153865],{"class":504},"\"请输入要删除的学号:\"",[34,153867,101],{"class":40},[34,153869,153870,153873,153875],{"class":36,"line":18442},[34,153871,153872],{"class":40},"    student ",[34,153874,221],{"class":55},[34,153876,153877],{"class":40}," find_student(students, student_id)\n",[34,153879,153880],{"class":36,"line":18447},[34,153881,1475],{"emptyLinePlaceholder":1474},[34,153883,153884,153886,153888,153890,153892],{"class":36,"line":18461},[34,153885,4754],{"class":55},[34,153887,153500],{"class":40},[34,153889,40568],{"class":55},[34,153891,59],{"class":44},[34,153893,5392],{"class":40},[34,153895,153896,153898,153900,153903],{"class":36,"line":18466},[34,153897,34092],{"class":44},[34,153899,286],{"class":40},[34,153901,153902],{"class":504},"\"学生不存在\"",[34,153904,101],{"class":40},[34,153906,153907],{"class":36,"line":18472},[34,153908,153724],{"class":55},[34,153910,153911],{"class":36,"line":18477},[34,153912,1475],{"emptyLinePlaceholder":1474},[34,153914,153915],{"class":36,"line":18491},[34,153916,153917],{"class":40},"    students.remove(student)\n",[34,153919,153920],{"class":36,"line":18496},[34,153921,153824],{"class":40},[34,153923,153924,153926,153928,153931],{"class":36,"line":18501},[34,153925,32941],{"class":44},[34,153927,286],{"class":40},[34,153929,153930],{"class":504},"\"删除成功\"",[34,153932,101],{"class":40},[34,153934,153935],{"class":36,"line":18515},[34,153936,1475],{"emptyLinePlaceholder":1474},[34,153938,153939],{"class":36,"line":18527},[34,153940,1475],{"emptyLinePlaceholder":1474},[34,153942,153943,153945,153948],{"class":36,"line":18532},[34,153944,33588],{"class":55},[34,153946,153947],{"class":3617}," update_student",[34,153949,153324],{"class":40},[34,153951,153952,153954,153956,153958,153960,153963],{"class":36,"line":18545},[34,153953,153686],{"class":40},[34,153955,221],{"class":55},[34,153957,62244],{"class":44},[34,153959,286],{"class":40},[34,153961,153962],{"class":504},"\"请输入要修改的学号:\"",[34,153964,101],{"class":40},[34,153966,153967,153969,153971],{"class":36,"line":18550},[34,153968,153872],{"class":40},[34,153970,221],{"class":55},[34,153972,153877],{"class":40},[34,153974,153975],{"class":36,"line":18555},[34,153976,1475],{"emptyLinePlaceholder":1474},[34,153978,153979,153981,153983,153985,153987],{"class":36,"line":18560},[34,153980,4754],{"class":55},[34,153982,153500],{"class":40},[34,153984,40568],{"class":55},[34,153986,59],{"class":44},[34,153988,5392],{"class":40},[34,153990,153991,153993,153995,153997],{"class":36,"line":18573},[34,153992,34092],{"class":44},[34,153994,286],{"class":40},[34,153996,153902],{"class":504},[34,153998,101],{"class":40},[34,154000,154001],{"class":36,"line":18578},[34,154002,153724],{"class":55},[34,154004,154005],{"class":36,"line":34274},[34,154006,1475],{"emptyLinePlaceholder":1474},[34,154008,154009,154011,154013,154015,154017,154020],{"class":36,"line":34280},[34,154010,153733],{"class":40},[34,154012,221],{"class":55},[34,154014,62244],{"class":44},[34,154016,286],{"class":40},[34,154018,154019],{"class":504},"\"请输入新姓名:\"",[34,154021,101],{"class":40},[34,154023,154024,154026,154028,154030,154033],{"class":36,"line":34286},[34,154025,153749],{"class":40},[34,154027,221],{"class":55},[34,154029,153754],{"class":40},[34,154031,154032],{"class":504},"\"请输入新年龄:\"",[34,154034,101],{"class":40},[34,154036,154037,154039,154041,154043,154046],{"class":36,"line":34292},[34,154038,153764],{"class":40},[34,154040,221],{"class":55},[34,154042,153769],{"class":40},[34,154044,154045],{"class":504},"\"请输入新成绩:\"",[34,154047,101],{"class":40},[34,154049,154050],{"class":36,"line":34298},[34,154051,1475],{"emptyLinePlaceholder":1474},[34,154053,154054,154057,154059,154061,154063],{"class":36,"line":34309},[34,154055,154056],{"class":40},"    student[",[34,154058,64318],{"class":504},[34,154060,6095],{"class":40},[34,154062,221],{"class":55},[34,154064,151158],{"class":40},[34,154066,154067,154069,154071,154073,154075],{"class":36,"line":34315},[34,154068,154056],{"class":40},[34,154070,70763],{"class":504},[34,154072,6095],{"class":40},[34,154074,221],{"class":55},[34,154076,151170],{"class":40},[34,154078,154079,154081,154083,154085,154087],{"class":36,"line":34335},[34,154080,154056],{"class":40},[34,154082,152835],{"class":504},[34,154084,6095],{"class":40},[34,154086,221],{"class":55},[34,154088,3237],{"class":40},[34,154090,154091],{"class":36,"line":34341},[34,154092,1475],{"emptyLinePlaceholder":1474},[34,154094,154095],{"class":36,"line":34352},[34,154096,153824],{"class":40},[34,154098,154099,154101,154103,154106],{"class":36,"line":34358},[34,154100,32941],{"class":44},[34,154102,286],{"class":40},[34,154104,154105],{"class":504},"\"修改成功\"",[34,154107,101],{"class":40},[34,154109,154110],{"class":36,"line":34364},[34,154111,1475],{"emptyLinePlaceholder":1474},[34,154113,154114],{"class":36,"line":34370},[34,154115,1475],{"emptyLinePlaceholder":1474},[34,154117,154118,154120,154123],{"class":36,"line":34376},[34,154119,33588],{"class":55},[34,154121,154122],{"class":3617}," query_student",[34,154124,153324],{"class":40},[34,154126,154127,154129,154131,154133,154135,154138],{"class":36,"line":34382},[34,154128,153686],{"class":40},[34,154130,221],{"class":55},[34,154132,62244],{"class":44},[34,154134,286],{"class":40},[34,154136,154137],{"class":504},"\"请输入要查询的学号:\"",[34,154139,101],{"class":40},[34,154141,154142,154144,154146],{"class":36,"line":34388},[34,154143,153872],{"class":40},[34,154145,221],{"class":55},[34,154147,153877],{"class":40},[34,154149,154150],{"class":36,"line":34394},[34,154151,1475],{"emptyLinePlaceholder":1474},[34,154153,154154,154156,154158,154160,154162],{"class":36,"line":34414},[34,154155,4754],{"class":55},[34,154157,153500],{"class":40},[34,154159,40568],{"class":55},[34,154161,59],{"class":44},[34,154163,5392],{"class":40},[34,154165,154166,154168,154170,154172],{"class":36,"line":34420},[34,154167,34092],{"class":44},[34,154169,286],{"class":40},[34,154171,153902],{"class":504},[34,154173,101],{"class":40},[34,154175,154176],{"class":36,"line":34436},[34,154177,153724],{"class":55},[34,154179,154180],{"class":36,"line":34442},[34,154181,1475],{"emptyLinePlaceholder":1474},[34,154183,154184],{"class":36,"line":34456},[34,154185,154186],{"class":40},"    print_student(student)\n",[34,154188,154189],{"class":36,"line":34462},[34,154190,1475],{"emptyLinePlaceholder":1474},[34,154192,154193],{"class":36,"line":34477},[34,154194,1475],{"emptyLinePlaceholder":1474},[34,154196,154197,154199,154202],{"class":36,"line":34483},[34,154198,33588],{"class":55},[34,154200,154201],{"class":3617}," print_student",[34,154203,154204],{"class":40},"(student):\n",[34,154206,154207,154209],{"class":36,"line":34492},[34,154208,32941],{"class":44},[34,154210,152802],{"class":40},[34,154212,154213,154216,154218,154220,154223,154226,154228,154231],{"class":36,"line":34498},[34,154214,154215],{"class":55},"        f",[34,154217,2058],{"class":504},[34,154219,2687],{"class":44},[34,154221,154222],{"class":40},"student[",[34,154224,154225],{"class":504},"'student_id'",[34,154227,2731],{"class":40},[34,154229,154230],{"class":44},"}\\t",[34,154232,26779],{"class":504},[34,154234,154235,154237,154239,154241,154243,154246,154248,154250],{"class":36,"line":34507},[34,154236,154215],{"class":55},[34,154238,2058],{"class":504},[34,154240,2687],{"class":44},[34,154242,154222],{"class":40},[34,154244,154245],{"class":504},"'name'",[34,154247,2731],{"class":40},[34,154249,154230],{"class":44},[34,154251,26779],{"class":504},[34,154253,154254,154256,154258,154260,154262,154265,154267,154269],{"class":36,"line":34513},[34,154255,154215],{"class":55},[34,154257,2058],{"class":504},[34,154259,2687],{"class":44},[34,154261,154222],{"class":40},[34,154263,154264],{"class":504},"'age'",[34,154266,2731],{"class":40},[34,154268,154230],{"class":44},[34,154270,26779],{"class":504},[34,154272,154273,154275,154277,154279,154281,154284,154286,154288],{"class":36,"line":34519},[34,154274,154215],{"class":55},[34,154276,2058],{"class":504},[34,154278,2687],{"class":44},[34,154280,154222],{"class":40},[34,154282,154283],{"class":504},"'score'",[34,154285,2731],{"class":40},[34,154287,2737],{"class":44},[34,154289,26779],{"class":504},[34,154291,154292],{"class":36,"line":34528},[34,154293,154294],{"class":40},"    )\n",[34,154296,154297],{"class":36,"line":34534},[34,154298,1475],{"emptyLinePlaceholder":1474},[34,154300,154301],{"class":36,"line":34545},[34,154302,1475],{"emptyLinePlaceholder":1474},[34,154304,154305,154307,154310],{"class":36,"line":34551},[34,154306,33588],{"class":55},[34,154308,154309],{"class":3617}," show_all_students",[34,154311,153324],{"class":40},[34,154313,154314,154316,154318],{"class":36,"line":34570},[34,154315,4754],{"class":55},[34,154317,40571],{"class":55},[34,154319,153505],{"class":40},[34,154321,154322,154324,154326,154329],{"class":36,"line":34576},[34,154323,34092],{"class":44},[34,154325,286],{"class":40},[34,154327,154328],{"class":504},"\"暂无学生\"",[34,154330,101],{"class":40},[34,154332,154333],{"class":36,"line":34587},[34,154334,153724],{"class":55},[34,154336,154337],{"class":36,"line":34593},[34,154338,1475],{"emptyLinePlaceholder":1474},[34,154340,154341,154343,154345,154348,154350,154353,154355,154358,154360,154363],{"class":36,"line":34613},[34,154342,32941],{"class":44},[34,154344,286],{"class":40},[34,154346,154347],{"class":504},"\"学号",[34,154349,2892],{"class":44},[34,154351,154352],{"class":504},"姓名",[34,154354,2892],{"class":44},[34,154356,154357],{"class":504},"年龄",[34,154359,2892],{"class":44},[34,154361,154362],{"class":504},"成绩\"",[34,154364,101],{"class":40},[34,154366,154367,154369,154371,154373],{"class":36,"line":34629},[34,154368,4854],{"class":55},[34,154370,153500],{"class":40},[34,154372,27689],{"class":55},[34,154374,153505],{"class":40},[34,154376,154377],{"class":36,"line":34635},[34,154378,154379],{"class":40},"        print_student(student)\n",[34,154381,154382],{"class":36,"line":34649},[34,154383,1475],{"emptyLinePlaceholder":1474},[34,154385,154386],{"class":36,"line":34655},[34,154387,1475],{"emptyLinePlaceholder":1474},[34,154389,154390,154392,154394],{"class":36,"line":34661},[34,154391,33588],{"class":55},[34,154393,3627],{"class":3617},[34,154395,33594],{"class":40},[34,154397,154398,154401,154403],{"class":36,"line":34672},[34,154399,154400],{"class":40},"    students ",[34,154402,221],{"class":55},[34,154404,154405],{"class":40}," load_students()\n",[34,154407,154408],{"class":36,"line":34678},[34,154409,1475],{"emptyLinePlaceholder":1474},[34,154411,154412,154414,154416],{"class":36,"line":34684},[34,154413,3905],{"class":55},[34,154415,69],{"class":44},[34,154417,5392],{"class":40},[34,154419,154420],{"class":36,"line":34694},[34,154421,154422],{"class":40},"        show_menu()\n",[34,154424,154425,154428,154430,154432,154434,154437],{"class":36,"line":34700},[34,154426,154427],{"class":40},"        choice ",[34,154429,221],{"class":55},[34,154431,62244],{"class":44},[34,154433,286],{"class":40},[34,154435,154436],{"class":504},"\"请输入操作:\"",[34,154438,101],{"class":40},[34,154440,154441],{"class":36,"line":34711},[34,154442,1475],{"emptyLinePlaceholder":1474},[34,154444,154445,154447,154450,154452,154455],{"class":36,"line":34717},[34,154446,4150],{"class":55},[34,154448,154449],{"class":40}," choice ",[34,154451,4602],{"class":55},[34,154453,154454],{"class":504}," \"1\"",[34,154456,5392],{"class":40},[34,154458,154459],{"class":36,"line":34727},[34,154460,154461],{"class":40},"            add_student(students)\n",[34,154463,154464,154467,154469,154471,154474],{"class":36,"line":34732},[34,154465,154466],{"class":55},"        elif",[34,154468,154449],{"class":40},[34,154470,4602],{"class":55},[34,154472,154473],{"class":504}," \"2\"",[34,154475,5392],{"class":40},[34,154477,154478],{"class":36,"line":34738},[34,154479,154480],{"class":40},"            delete_student(students)\n",[34,154482,154483,154485,154487,154489,154492],{"class":36,"line":34787},[34,154484,154466],{"class":55},[34,154486,154449],{"class":40},[34,154488,4602],{"class":55},[34,154490,154491],{"class":504}," \"3\"",[34,154493,5392],{"class":40},[34,154495,154496],{"class":36,"line":34834},[34,154497,154498],{"class":40},"            update_student(students)\n",[34,154500,154501,154503,154505,154507,154510],{"class":36,"line":34839},[34,154502,154466],{"class":55},[34,154504,154449],{"class":40},[34,154506,4602],{"class":55},[34,154508,154509],{"class":504}," \"4\"",[34,154511,5392],{"class":40},[34,154513,154514],{"class":36,"line":34845},[34,154515,154516],{"class":40},"            query_student(students)\n",[34,154518,154519,154521,154523,154525,154528],{"class":36,"line":34864},[34,154520,154466],{"class":55},[34,154522,154449],{"class":40},[34,154524,4602],{"class":55},[34,154526,154527],{"class":504}," \"5\"",[34,154529,5392],{"class":40},[34,154531,154532],{"class":36,"line":34870},[34,154533,154534],{"class":40},"            show_all_students(students)\n",[34,154536,154537,154539,154541,154543,154546],{"class":36,"line":34890},[34,154538,154466],{"class":55},[34,154540,154449],{"class":40},[34,154542,4602],{"class":55},[34,154544,154545],{"class":504}," \"0\"",[34,154547,5392],{"class":40},[34,154549,154550,154552,154554,154557],{"class":36,"line":34896},[34,154551,36291],{"class":44},[34,154553,286],{"class":40},[34,154555,154556],{"class":504},"\"退出系统\"",[34,154558,101],{"class":40},[34,154560,154561],{"class":36,"line":34902},[34,154562,116461],{"class":55},[34,154564,154565,154567],{"class":36,"line":34912},[34,154566,4187],{"class":55},[34,154568,5392],{"class":40},[34,154570,154571,154573,154575,154578],{"class":36,"line":34917},[34,154572,36291],{"class":44},[34,154574,286],{"class":40},[34,154576,154577],{"class":504},"\"输入错误\"",[34,154579,101],{"class":40},[34,154581,154582],{"class":36,"line":34923},[34,154583,1475],{"emptyLinePlaceholder":1474},[34,154585,154586],{"class":36,"line":34939},[34,154587,1475],{"emptyLinePlaceholder":1474},[34,154589,154590,154592,154594,154596,154598],{"class":36,"line":34984},[34,154591,3189],{"class":55},[34,154593,32862],{"class":44},[34,154595,102922],{"class":55},[34,154597,102925],{"class":504},[34,154599,5392],{"class":40},[34,154601,154602],{"class":36,"line":34990},[34,154603,102932],{"class":40},[103,154605,154606],{},"这个项目串联了：",[1772,154608,154609,154612,154615,154618,154621,154623],{},[1775,154610,154611],{},"菜单循环。",[1775,154613,154614],{},"函数封装。",[1775,154616,154617],{},"列表字典。",[1775,154619,154620],{},"JSON 读写。",[1775,154622,153090],{},[1775,154624,154625,30031],{},[31,154626,154627],{},"if __name__ == \"__main__\"",[14,154629,154631],{"id":154630},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[103,154633,154634],{},"可以进一步拆成两个类：",[1772,154636,154637,154642],{},[1775,154638,154639,154641],{},[31,154640,150931],{},"：表示单个学生。",[1775,154643,154644,154646],{},[31,154645,152957],{},"：负责学生增删改查和文件保存。",[103,154648,154649],{},"示意代码：",[24,154651,154653],{"className":26,"code":154652,"language":28,"meta":29,"style":29},"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",[31,154654,154655,154665,154669,154673,154677,154685,154692,154698,154704,154710,154714,154722,154728,154738,154748,154758,154768,154772,154776,154782,154790,154798,154806,154814,154822,154830],{"__ignoreMap":29},[34,154656,154657,154659,154661,154663],{"class":36,"line":37},[34,154658,32379],{"class":55},[34,154660,152515],{"class":40},[34,154662,32036],{"class":55},[34,154664,152520],{"class":40},[34,154666,154667],{"class":36,"line":165},[34,154668,1475],{"emptyLinePlaceholder":1474},[34,154670,154671],{"class":36,"line":171},[34,154672,1475],{"emptyLinePlaceholder":1474},[34,154674,154675],{"class":36,"line":182},[34,154676,152533],{"class":3617},[34,154678,154679,154681,154683],{"class":36,"line":188},[34,154680,16340],{"class":55},[34,154682,9548],{"class":3617},[34,154684,5392],{"class":40},[34,154686,154687,154690],{"class":36,"line":518},[34,154688,154689],{"class":40},"    student_id: ",[34,154691,152549],{"class":44},[34,154693,154694,154696],{"class":36,"line":524},[34,154695,152546],{"class":40},[34,154697,152549],{"class":44},[34,154699,154700,154702],{"class":36,"line":530},[34,154701,152554],{"class":40},[34,154703,152557],{"class":44},[34,154705,154706,154708],{"class":36,"line":624},[34,154707,152562],{"class":40},[34,154709,152565],{"class":44},[34,154711,154712],{"class":36,"line":630},[34,154713,1475],{"emptyLinePlaceholder":1474},[34,154715,154716,154718,154720],{"class":36,"line":636},[34,154717,32443],{"class":55},[34,154719,152713],{"class":3617},[34,154721,32449],{"class":40},[34,154723,154724,154726],{"class":36,"line":1513},[34,154725,16398],{"class":55},[34,154727,17218],{"class":40},[34,154729,154730,154732,154734,154736],{"class":36,"line":1519},[34,154731,152726],{"class":504},[34,154733,53076],{"class":40},[34,154735,32465],{"class":44},[34,154737,152733],{"class":40},[34,154739,154740,154742,154744,154746],{"class":36,"line":3283},[34,154741,152738],{"class":504},[34,154743,53076],{"class":40},[34,154745,32465],{"class":44},[34,154747,152745],{"class":40},[34,154749,154750,154752,154754,154756],{"class":36,"line":3297},[34,154751,152750],{"class":504},[34,154753,53076],{"class":40},[34,154755,32465],{"class":44},[34,154757,152757],{"class":40},[34,154759,154760,154762,154764,154766],{"class":36,"line":3302},[34,154761,152762],{"class":504},[34,154763,53076],{"class":40},[34,154765,32465],{"class":44},[34,154767,152769],{"class":40},[34,154769,154770],{"class":36,"line":3308},[34,154771,4182],{"class":40},[34,154773,154774],{"class":36,"line":3328},[34,154775,1475],{"emptyLinePlaceholder":1474},[34,154777,154778,154780],{"class":36,"line":3333},[34,154779,152377],{"class":3617},[34,154781,152380],{"class":44},[34,154783,154784,154786,154788],{"class":36,"line":3347},[34,154785,32443],{"class":55},[34,154787,152790],{"class":3617},[34,154789,152793],{"class":40},[34,154791,154792,154794,154796],{"class":36,"line":3352},[34,154793,16398],{"class":55},[34,154795,152397],{"class":44},[34,154797,152802],{"class":40},[34,154799,154800,154802,154804],{"class":36,"line":3381},[34,154801,152807],{"class":40},[34,154803,152810],{"class":504},[34,154805,89472],{"class":40},[34,154807,154808,154810,154812],{"class":36,"line":3386},[34,154809,152807],{"class":40},[34,154811,64318],{"class":504},[34,154813,89472],{"class":40},[34,154815,154816,154818,154820],{"class":36,"line":3403},[34,154817,152807],{"class":40},[34,154819,70763],{"class":504},[34,154821,89472],{"class":40},[34,154823,154824,154826,154828],{"class":36,"line":3408},[34,154825,152807],{"class":40},[34,154827,152835],{"class":504},[34,154829,89472],{"class":40},[34,154831,154832],{"class":36,"line":3413},[34,154833,39767],{"class":40},[103,154835,154836],{},"管理器示意：",[24,154838,154840],{"className":26,"code":154839,"language":28,"meta":29,"style":29},"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",[31,154841,154842,154851,154859,154870,154874,154884,154897,154908,154915,154921,154925,154934,154943,154949,154956],{"__ignoreMap":29},[34,154843,154844,154846,154849],{"class":36,"line":37},[34,154845,16340],{"class":55},[34,154847,154848],{"class":3617}," StudentManager",[34,154850,5392],{"class":40},[34,154852,154853,154855,154857],{"class":36,"line":165},[34,154854,32443],{"class":55},[34,154856,32446],{"class":44},[34,154858,32449],{"class":40},[34,154860,154861,154863,154866,154868],{"class":36,"line":171},[34,154862,32487],{"class":44},[34,154864,154865],{"class":40},".students ",[34,154867,221],{"class":55},[34,154869,53477],{"class":40},[34,154871,154872],{"class":36,"line":182},[34,154873,1475],{"emptyLinePlaceholder":1474},[34,154875,154876,154878,154881],{"class":36,"line":188},[34,154877,32443],{"class":55},[34,154879,154880],{"class":3617}," find_by_id",[34,154882,154883],{"class":40},"(self, student_id):\n",[34,154885,154886,154888,154890,154892,154894],{"class":36,"line":518},[34,154887,5056],{"class":55},[34,154889,153500],{"class":40},[34,154891,27689],{"class":55},[34,154893,40514],{"class":44},[34,154895,154896],{"class":40},".students:\n",[34,154898,154899,154901,154904,154906],{"class":36,"line":524},[34,154900,6294],{"class":55},[34,154902,154903],{"class":40}," student.student_id ",[34,154905,4602],{"class":55},[34,154907,153521],{"class":40},[34,154909,154910,154913],{"class":36,"line":530},[34,154911,154912],{"class":55},"                return",[34,154914,153528],{"class":40},[34,154916,154917,154919],{"class":36,"line":624},[34,154918,16398],{"class":55},[34,154920,153535],{"class":44},[34,154922,154923],{"class":36,"line":630},[34,154924,1475],{"emptyLinePlaceholder":1474},[34,154926,154927,154929,154931],{"class":36,"line":636},[34,154928,32443],{"class":55},[34,154930,6860],{"class":3617},[34,154932,154933],{"class":40},"(self, student):\n",[34,154935,154936,154938,154940],{"class":36,"line":1513},[34,154937,4150],{"class":55},[34,154939,40514],{"class":44},[34,154941,154942],{"class":40},".find_by_id(student.student_id):\n",[34,154944,154945,154947],{"class":36,"line":1519},[34,154946,17378],{"class":55},[34,154948,127170],{"class":44},[34,154950,154951,154953],{"class":36,"line":3283},[34,154952,32487],{"class":44},[34,154954,154955],{"class":40},".students.append(student)\n",[34,154957,154958,154960],{"class":36,"line":3297},[34,154959,16398],{"class":55},[34,154961,154962],{"class":44}," True\n",[103,154964,154965],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154967,154969],{"id":154968},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[19,154971,154973],{"id":154972},"_1251-数据结构","12.5.1 数据结构",[24,154975,154977],{"className":26,"code":154976,"language":28,"meta":29,"style":29},"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",[31,154978,154979,154987,155018,155048,155077,155106],{"__ignoreMap":29},[34,154980,154981,154983,154985],{"class":36,"line":37},[34,154982,149828],{"class":40},[34,154984,221],{"class":55},[34,154986,57086],{"class":40},[34,154988,154989,154991,154993,154995,154997,154999,155002,155004,155007,155009,155011,155013,155016],{"class":36,"line":165},[34,154990,149748],{"class":40},[34,154992,149360],{"class":504},[34,154994,53076],{"class":40},[34,154996,149971],{"class":504},[34,154998,48],{"class":40},[34,155000,155001],{"class":504},"\"category\"",[34,155003,53076],{"class":40},[34,155005,155006],{"class":504},"\"手机\"",[34,155008,48],{"class":40},[34,155010,85720],{"class":504},[34,155012,53076],{"class":40},[34,155014,155015],{"class":44},"12000",[34,155017,6581],{"class":40},[34,155019,155020,155022,155024,155026,155028,155030,155032,155034,155037,155039,155041,155043,155046],{"class":36,"line":171},[34,155021,149748],{"class":40},[34,155023,149360],{"class":504},[34,155025,53076],{"class":40},[34,155027,149971],{"class":504},[34,155029,48],{"class":40},[34,155031,155001],{"class":504},[34,155033,53076],{"class":40},[34,155035,155036],{"class":504},"\"电脑\"",[34,155038,48],{"class":40},[34,155040,85720],{"class":504},[34,155042,53076],{"class":40},[34,155044,155045],{"class":44},"18000",[34,155047,6581],{"class":40},[34,155049,155050,155052,155054,155056,155058,155060,155062,155064,155066,155068,155070,155072,155075],{"class":36,"line":182},[34,155051,149748],{"class":40},[34,155053,149360],{"class":504},[34,155055,53076],{"class":40},[34,155057,149992],{"class":504},[34,155059,48],{"class":40},[34,155061,155001],{"class":504},[34,155063,53076],{"class":40},[34,155065,155006],{"class":504},[34,155067,48],{"class":40},[34,155069,85720],{"class":504},[34,155071,53076],{"class":40},[34,155073,155074],{"class":44},"15000",[34,155076,6581],{"class":40},[34,155078,155079,155081,155083,155085,155087,155089,155091,155093,155095,155097,155099,155101,155104],{"class":36,"line":188},[34,155080,149748],{"class":40},[34,155082,149360],{"class":504},[34,155084,53076],{"class":40},[34,155086,149992],{"class":504},[34,155088,48],{"class":40},[34,155090,155001],{"class":504},[34,155092,53076],{"class":40},[34,155094,155036],{"class":504},[34,155096,48],{"class":40},[34,155098,85720],{"class":504},[34,155100,53076],{"class":40},[34,155102,155103],{"class":44},"16000",[34,155105,6581],{"class":40},[34,155107,155108],{"class":36,"line":518},[34,155109,34887],{"class":40},[19,155111,155113],{"id":155112},"_1252-按日期统计","12.5.2 按日期统计",[24,155115,155117],{"className":26,"code":155116,"language":28,"meta":29,"style":29},"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",[31,155118,155119,155128,155132,155143,155157,155170,155189,155193],{"__ignoreMap":29},[34,155120,155121,155124,155126],{"class":36,"line":37},[34,155122,155123],{"class":40},"daily_total ",[34,155125,221],{"class":55},[34,155127,89504],{"class":40},[34,155129,155130],{"class":36,"line":165},[34,155131,1475],{"emptyLinePlaceholder":1474},[34,155133,155134,155136,155138,155140],{"class":36,"line":171},[34,155135,4678],{"class":55},[34,155137,149572],{"class":40},[34,155139,27689],{"class":55},[34,155141,155142],{"class":40}," sales:\n",[34,155144,155145,155148,155150,155153,155155],{"class":36,"line":182},[34,155146,155147],{"class":40},"    date ",[34,155149,221],{"class":55},[34,155151,155152],{"class":40}," item[",[34,155154,149360],{"class":504},[34,155156,34887],{"class":40},[34,155158,155159,155162,155164,155166,155168],{"class":36,"line":188},[34,155160,155161],{"class":40},"    amount ",[34,155163,221],{"class":55},[34,155165,155152],{"class":40},[34,155167,85720],{"class":504},[34,155169,34887],{"class":40},[34,155171,155172,155175,155177,155180,155182,155184,155186],{"class":36,"line":518},[34,155173,155174],{"class":40},"    daily_total[date] ",[34,155176,221],{"class":55},[34,155178,155179],{"class":40}," daily_total.get(date, ",[34,155181,177],{"class":44},[34,155183,372],{"class":40},[34,155185,2277],{"class":55},[34,155187,155188],{"class":40}," amount\n",[34,155190,155191],{"class":36,"line":524},[34,155192,1475],{"emptyLinePlaceholder":1474},[34,155194,155195,155197],{"class":36,"line":530},[34,155196,723],{"class":44},[34,155198,155199],{"class":40},"(daily_total)\n",[19,155201,155203],{"id":155202},"_1253-按类别统计","12.5.3 按类别统计",[24,155205,155207],{"className":26,"code":155206,"language":28,"meta":29,"style":29},"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",[31,155208,155209,155218,155222,155232,155245,155257,155275,155279],{"__ignoreMap":29},[34,155210,155211,155214,155216],{"class":36,"line":37},[34,155212,155213],{"class":40},"category_total ",[34,155215,221],{"class":55},[34,155217,89504],{"class":40},[34,155219,155220],{"class":36,"line":165},[34,155221,1475],{"emptyLinePlaceholder":1474},[34,155223,155224,155226,155228,155230],{"class":36,"line":171},[34,155225,4678],{"class":55},[34,155227,149572],{"class":40},[34,155229,27689],{"class":55},[34,155231,155142],{"class":40},[34,155233,155234,155237,155239,155241,155243],{"class":36,"line":182},[34,155235,155236],{"class":40},"    category ",[34,155238,221],{"class":55},[34,155240,155152],{"class":40},[34,155242,155001],{"class":504},[34,155244,34887],{"class":40},[34,155246,155247,155249,155251,155253,155255],{"class":36,"line":188},[34,155248,155161],{"class":40},[34,155250,221],{"class":55},[34,155252,155152],{"class":40},[34,155254,85720],{"class":504},[34,155256,34887],{"class":40},[34,155258,155259,155262,155264,155267,155269,155271,155273],{"class":36,"line":518},[34,155260,155261],{"class":40},"    category_total[category] ",[34,155263,221],{"class":55},[34,155265,155266],{"class":40}," category_total.get(category, ",[34,155268,177],{"class":44},[34,155270,372],{"class":40},[34,155272,2277],{"class":55},[34,155274,155188],{"class":40},[34,155276,155277],{"class":36,"line":524},[34,155278,1475],{"emptyLinePlaceholder":1474},[34,155280,155281,155283],{"class":36,"line":530},[34,155282,723],{"class":44},[34,155284,155285],{"class":40},"(category_total)\n",[19,155287,155289],{"id":155288},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[24,155291,155293],{"className":26,"code":155292,"language":28,"meta":29,"style":29},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[31,155294,155295,155320],{"__ignoreMap":29},[34,155296,155297,155300,155302,155304,155307,155310,155313,155316,155318],{"class":36,"line":37},[34,155298,155299],{"class":40},"top_date, top_amount ",[34,155301,221],{"class":55},[34,155303,7601],{"class":44},[34,155305,155306],{"class":40},"(daily_total.items(), ",[34,155308,155309],{"class":51},"key",[34,155311,155312],{"class":55},"=lambda",[34,155314,155315],{"class":40}," item: item[",[34,155317,394],{"class":44},[34,155319,1077],{"class":40},[34,155321,155322,155324],{"class":36,"line":165},[34,155323,723],{"class":44},[34,155325,155326],{"class":40},"(top_date, top_amount)\n",[14,155328,155330],{"id":155329},"_126-绘制柱状图","12.6 绘制柱状图",[24,155332,155334],{"className":26,"code":155333,"language":28,"meta":29,"style":29},"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",[31,155335,155336,155350,155361,155365,155373,155385,155397,155408,155412,155416,155426,155437,155451,155456,155473,155490,155506,155510],{"__ignoreMap":29},[34,155337,155338,155340,155342,155344,155346,155348],{"class":36,"line":37},[34,155339,32379],{"class":55},[34,155341,148742],{"class":40},[34,155343,32036],{"class":55},[34,155345,148747],{"class":40},[34,155347,33025],{"class":55},[34,155349,148752],{"class":40},[34,155351,155352,155354,155356,155358],{"class":36,"line":165},[34,155353,32379],{"class":55},[34,155355,148601],{"class":40},[34,155357,32036],{"class":55},[34,155359,155360],{"class":40}," Bar\n",[34,155362,155363],{"class":36,"line":171},[34,155364,1475],{"emptyLinePlaceholder":1474},[34,155366,155367,155369,155371],{"class":36,"line":182},[34,155368,155213],{"class":40},[34,155370,221],{"class":55},[34,155372,17218],{"class":40},[34,155374,155375,155378,155380,155383],{"class":36,"line":188},[34,155376,155377],{"class":504},"    \"手机\"",[34,155379,53076],{"class":40},[34,155381,155382],{"class":44},"27000",[34,155384,33108],{"class":40},[34,155386,155387,155390,155392,155395],{"class":36,"line":518},[34,155388,155389],{"class":504},"    \"电脑\"",[34,155391,53076],{"class":40},[34,155393,155394],{"class":44},"34000",[34,155396,33108],{"class":40},[34,155398,155399,155402,155404,155406],{"class":36,"line":524},[34,155400,155401],{"class":504},"    \"耳机\"",[34,155403,53076],{"class":40},[34,155405,125762],{"class":44},[34,155407,33108],{"class":40},[34,155409,155410],{"class":36,"line":530},[34,155411,3223],{"class":40},[34,155413,155414],{"class":36,"line":624},[34,155415,1475],{"emptyLinePlaceholder":1474},[34,155417,155418,155421,155423],{"class":36,"line":630},[34,155419,155420],{"class":40},"bar ",[34,155422,221],{"class":55},[34,155424,155425],{"class":40}," Bar()\n",[34,155427,155428,155431,155434],{"class":36,"line":636},[34,155429,155430],{"class":40},"bar.add_xaxis(",[34,155432,155433],{"class":44},"list",[34,155435,155436],{"class":40},"(category_total.keys()))\n",[34,155438,155439,155442,155444,155446,155448],{"class":36,"line":1513},[34,155440,155441],{"class":40},"bar.add_yaxis(",[34,155443,148658],{"class":504},[34,155445,48],{"class":40},[34,155447,155433],{"class":44},[34,155449,155450],{"class":40},"(category_total.values()))\n",[34,155452,155453],{"class":36,"line":1519},[34,155454,155455],{"class":40},"bar.set_global_opts(\n",[34,155457,155458,155460,155462,155464,155466,155468,155471],{"class":36,"line":3283},[34,155459,148836],{"class":51},[34,155461,221],{"class":55},[34,155463,148841],{"class":40},[34,155465,53046],{"class":51},[34,155467,221],{"class":55},[34,155469,155470],{"class":504},"\"品类销售额\"",[34,155472,39688],{"class":40},[34,155474,155475,155477,155479,155481,155483,155485,155488],{"class":36,"line":3297},[34,155476,148855],{"class":51},[34,155478,221],{"class":55},[34,155480,148860],{"class":40},[34,155482,81447],{"class":51},[34,155484,221],{"class":55},[34,155486,155487],{"class":504},"\"品类\"",[34,155489,39688],{"class":40},[34,155491,155492,155494,155496,155498,155500,155502,155504],{"class":36,"line":3302},[34,155493,148874],{"class":51},[34,155495,221],{"class":55},[34,155497,148860],{"class":40},[34,155499,81447],{"class":51},[34,155501,221],{"class":55},[34,155503,148658],{"class":504},[34,155505,39688],{"class":40},[34,155507,155508],{"class":36,"line":3308},[34,155509,101],{"class":40},[34,155511,155512,155515,155518],{"class":36,"line":3328},[34,155513,155514],{"class":40},"bar.render(",[34,155516,155517],{"class":504},"\"category_sales.html\"",[34,155519,101],{"class":40},[14,155521,155523],{"id":155522},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[103,155525,155526],{},"时间线适合展示不同日期、月份、年份的数据变化。",[24,155528,155530],{"className":26,"code":155529,"language":28,"meta":29,"style":29},"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",[31,155531,155532,155546,155557,155561,155569,155593,155616,155641,155645,155649,155659,155663,155674,155683,155693,155707,155738,155743,155747],{"__ignoreMap":29},[34,155533,155534,155536,155538,155540,155542,155544],{"class":36,"line":37},[34,155535,32379],{"class":55},[34,155537,148742],{"class":40},[34,155539,32036],{"class":55},[34,155541,148747],{"class":40},[34,155543,33025],{"class":55},[34,155545,148752],{"class":40},[34,155547,155548,155550,155552,155554],{"class":36,"line":165},[34,155549,32379],{"class":55},[34,155551,148601],{"class":40},[34,155553,32036],{"class":55},[34,155555,155556],{"class":40}," Bar, Timeline\n",[34,155558,155559],{"class":36,"line":171},[34,155560,1475],{"emptyLinePlaceholder":1474},[34,155562,155563,155565,155567],{"class":36,"line":182},[34,155564,103021],{"class":40},[34,155566,221],{"class":55},[34,155568,17218],{"class":40},[34,155570,155571,155574,155577,155579,155581,155583,155585,155587,155589,155591],{"class":36,"line":188},[34,155572,155573],{"class":504},"    \"2024-10-01\"",[34,155575,155576],{"class":40},": {",[34,155578,155006],{"class":504},[34,155580,53076],{"class":40},[34,155582,155015],{"class":44},[34,155584,48],{"class":40},[34,155586,155036],{"class":504},[34,155588,53076],{"class":40},[34,155590,155045],{"class":44},[34,155592,6581],{"class":40},[34,155594,155595,155598,155600,155602,155604,155606,155608,155610,155612,155614],{"class":36,"line":518},[34,155596,155597],{"class":504},"    \"2024-10-02\"",[34,155599,155576],{"class":40},[34,155601,155006],{"class":504},[34,155603,53076],{"class":40},[34,155605,155074],{"class":44},[34,155607,48],{"class":40},[34,155609,155036],{"class":504},[34,155611,53076],{"class":40},[34,155613,155103],{"class":44},[34,155615,6581],{"class":40},[34,155617,155618,155621,155623,155625,155627,155630,155632,155634,155636,155639],{"class":36,"line":524},[34,155619,155620],{"class":504},"    \"2024-10-03\"",[34,155622,155576],{"class":40},[34,155624,155006],{"class":504},[34,155626,53076],{"class":40},[34,155628,155629],{"class":44},"17000",[34,155631,48],{"class":40},[34,155633,155036],{"class":504},[34,155635,53076],{"class":40},[34,155637,155638],{"class":44},"19000",[34,155640,6581],{"class":40},[34,155642,155643],{"class":36,"line":530},[34,155644,3223],{"class":40},[34,155646,155647],{"class":36,"line":624},[34,155648,1475],{"emptyLinePlaceholder":1474},[34,155650,155651,155654,155656],{"class":36,"line":630},[34,155652,155653],{"class":40},"timeline ",[34,155655,221],{"class":55},[34,155657,155658],{"class":40}," Timeline()\n",[34,155660,155661],{"class":36,"line":636},[34,155662,1475],{"emptyLinePlaceholder":1474},[34,155664,155665,155667,155670,155672],{"class":36,"line":1513},[34,155666,4678],{"class":55},[34,155668,155669],{"class":40}," date, category_data ",[34,155671,27689],{"class":55},[34,155673,150511],{"class":40},[34,155675,155676,155679,155681],{"class":36,"line":1519},[34,155677,155678],{"class":40},"    bar ",[34,155680,221],{"class":55},[34,155682,155425],{"class":40},[34,155684,155685,155688,155690],{"class":36,"line":3283},[34,155686,155687],{"class":40},"    bar.add_xaxis(",[34,155689,155433],{"class":44},[34,155691,155692],{"class":40},"(category_data.keys()))\n",[34,155694,155695,155698,155700,155702,155704],{"class":36,"line":3297},[34,155696,155697],{"class":40},"    bar.add_yaxis(",[34,155699,148658],{"class":504},[34,155701,48],{"class":40},[34,155703,155433],{"class":44},[34,155705,155706],{"class":40},"(category_data.values()))\n",[34,155708,155709,155712,155715,155717,155719,155721,155723,155725,155727,155729,155731,155733,155736],{"class":36,"line":3302},[34,155710,155711],{"class":40},"    bar.set_global_opts(",[34,155713,155714],{"class":51},"title_opts",[34,155716,221],{"class":55},[34,155718,148841],{"class":40},[34,155720,53046],{"class":51},[34,155722,221],{"class":55},[34,155724,1867],{"class":55},[34,155726,2058],{"class":504},[34,155728,2687],{"class":44},[34,155730,75565],{"class":40},[34,155732,2737],{"class":44},[34,155734,155735],{"class":504},"销售额\"",[34,155737,296],{"class":40},[34,155739,155740],{"class":36,"line":3308},[34,155741,155742],{"class":40},"    timeline.add(bar, date)\n",[34,155744,155745],{"class":36,"line":3328},[34,155746,1475],{"emptyLinePlaceholder":1474},[34,155748,155749,155752,155755],{"class":36,"line":3333},[34,155750,155751],{"class":40},"timeline.render(",[34,155753,155754],{"class":504},"\"timeline_sales.html\"",[34,155756,101],{"class":40},[14,155758,155760],{"id":155759},"_128-绘制地图","12.8 绘制地图",[103,155762,155763],{},"地图适合展示地区数据。",[24,155765,155767],{"className":26,"code":155766,"language":28,"meta":29,"style":29},"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",[31,155768,155769,155783,155794,155798,155806,155819,155831,155844,155857,155861,155865,155875,155890,155895,155912,155931,155935],{"__ignoreMap":29},[34,155770,155771,155773,155775,155777,155779,155781],{"class":36,"line":37},[34,155772,32379],{"class":55},[34,155774,148742],{"class":40},[34,155776,32036],{"class":55},[34,155778,148747],{"class":40},[34,155780,33025],{"class":55},[34,155782,148752],{"class":40},[34,155784,155785,155787,155789,155791],{"class":36,"line":165},[34,155786,32379],{"class":55},[34,155788,148601],{"class":40},[34,155790,32036],{"class":55},[34,155792,155793],{"class":40}," Map\n",[34,155795,155796],{"class":36,"line":171},[34,155797,1475],{"emptyLinePlaceholder":1474},[34,155799,155800,155802,155804],{"class":36,"line":182},[34,155801,103021],{"class":40},[34,155803,221],{"class":55},[34,155805,57086],{"class":40},[34,155807,155808,155811,155813,155815,155817],{"class":36,"line":188},[34,155809,155810],{"class":40},"    (",[34,155812,70908],{"class":504},[34,155814,48],{"class":40},[34,155816,2610],{"class":44},[34,155818,39688],{"class":40},[34,155820,155821,155823,155825,155827,155829],{"class":36,"line":518},[34,155822,155810],{"class":40},[34,155824,70928],{"class":504},[34,155826,48],{"class":40},[34,155828,148675],{"class":44},[34,155830,39688],{"class":40},[34,155832,155833,155835,155838,155840,155842],{"class":36,"line":524},[34,155834,155810],{"class":40},[34,155836,155837],{"class":504},"\"广东\"",[34,155839,48],{"class":40},[34,155841,3376],{"class":44},[34,155843,39688],{"class":40},[34,155845,155846,155848,155851,155853,155855],{"class":36,"line":530},[34,155847,155810],{"class":40},[34,155849,155850],{"class":504},"\"浙江\"",[34,155852,48],{"class":40},[34,155854,148680],{"class":44},[34,155856,39688],{"class":40},[34,155858,155859],{"class":36,"line":624},[34,155860,34887],{"class":40},[34,155862,155863],{"class":36,"line":630},[34,155864,1475],{"emptyLinePlaceholder":1474},[34,155866,155867,155870,155872],{"class":36,"line":636},[34,155868,155869],{"class":40},"map_chart ",[34,155871,221],{"class":55},[34,155873,155874],{"class":40}," Map()\n",[34,155876,155877,155880,155882,155885,155888],{"class":36,"line":1513},[34,155878,155879],{"class":40},"map_chart.add(",[34,155881,148658],{"class":504},[34,155883,155884],{"class":40},", data, ",[34,155886,155887],{"class":504},"\"china\"",[34,155889,101],{"class":40},[34,155891,155892],{"class":36,"line":1519},[34,155893,155894],{"class":40},"map_chart.set_global_opts(\n",[34,155896,155897,155899,155901,155903,155905,155907,155910],{"class":36,"line":3283},[34,155898,148836],{"class":51},[34,155900,221],{"class":55},[34,155902,148841],{"class":40},[34,155904,53046],{"class":51},[34,155906,221],{"class":55},[34,155908,155909],{"class":504},"\"地区销售额\"",[34,155911,39688],{"class":40},[34,155913,155914,155917,155919,155922,155925,155927,155929],{"class":36,"line":3297},[34,155915,155916],{"class":51},"    visualmap_opts",[34,155918,221],{"class":55},[34,155920,155921],{"class":40},"opts.VisualMapOpts(",[34,155923,155924],{"class":51},"max_",[34,155926,221],{"class":55},[34,155928,3376],{"class":44},[34,155930,39688],{"class":40},[34,155932,155933],{"class":36,"line":3302},[34,155934,101],{"class":40},[34,155936,155937,155940,155943],{"class":36,"line":3308},[34,155938,155939],{"class":40},"map_chart.render(",[34,155941,155942],{"class":504},"\"map_sales.html\"",[34,155944,101],{"class":40},[103,155946,155947],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155949,155951],{"id":155950},"_129-项目拆分建议","12.9 项目拆分建议",[103,155953,155954],{},"当代码超过一个文件时，可以这样组织：",[24,155956,155959],{"className":155957,"code":155958,"language":6838,"meta":29},[6836],"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",[31,155960,155958],{"__ignoreMap":29},[103,155962,155963],{},"职责：",[1772,155965,155966,155972,155978,155984],{},[1775,155967,155968,155971],{},[31,155969,155970],{},"main.py","：程序入口。",[1775,155973,155974,155977],{},[31,155975,155976],{},"file_utils.py","：读写 JSON。",[1775,155979,155980,155983],{},[31,155981,155982],{},"sales_service.py","：统计销售数据。",[1775,155985,155986,155989],{},[31,155987,155988],{},"chart_builder.py","：生成图表。",[14,155991,155993],{"id":155992},"_1210-python基础复习清单","12.10 Python基础复习清单",[103,155995,155996],{},"语法基础：",[1772,155998,155999,156002,156005,156008],{},[1775,156000,156001],{},"会写变量、注释、输入输出。",[1775,156003,156004],{},"会使用 int、float、str、bool。",[1775,156006,156007],{},"会做类型转换。",[1775,156009,156010],{},"会使用 f-string 格式化输出。",[103,156012,156013],{},"流程控制：",[1772,156015,156016,156022,156028,156036],{},[1775,156017,156018,156019,30031],{},"会写 ",[31,156020,156021],{},"if elif else",[1775,156023,156018,156024,102381,156026,30031],{},[31,156025,110026],{},[31,156027,4678],{},[1775,156029,156030,156031,102381,156033,30031],{},"理解 ",[31,156032,3707],{},[31,156034,156035],{},"continue",[1775,156037,156038],{},"能写嵌套循环。",[103,156040,156041],{},"函数：",[1772,156043,156044,156047,156050,156053],{},[1775,156045,156046],{},"会定义和调用函数。",[1775,156048,156049],{},"理解参数和返回值。",[1775,156051,156052],{},"知道局部变量和全局变量。",[1775,156054,156055],{},"会使用默认参数、关键字参数、不定长参数。",[103,156057,156058],{},"容器：",[1772,156060,156061,156064,156067,156070,156073],{},[1775,156062,156063],{},"会使用列表增删改查。",[1775,156065,156066],{},"会遍历列表、字典。",[1775,156068,156069],{},"会使用切片。",[1775,156071,156072],{},"会用集合去重。",[1775,156074,156075],{},"会处理列表嵌套字典。",[103,156077,156078],{},"文件和模块：",[1772,156080,156081,156084,156087,156090,156093],{},[1775,156082,156083],{},"会读写文本文件。",[1775,156085,156086],{},"会读写 JSON。",[1775,156088,156089],{},"会捕获常见异常。",[1775,156091,156092],{},"会导入模块和第三方包。",[1775,156094,156095],{},"会创建简单包结构。",[103,156097,156098],{},"项目能力：",[1772,156100,156101,156104,156107,156110,156113],{},[1775,156102,156103],{},"能把代码拆成函数。",[1775,156105,156106],{},"能把数据保存到文件。",[1775,156108,156109],{},"能处理用户输入错误。",[1775,156111,156112],{},"能写一个完整菜单程序。",[1775,156114,156115],{},"能用 pyecharts 生成图表。",[14,156117,156119],{"id":156118},"_1211-推荐练习顺序","12.11 推荐练习顺序",[1772,156121,156122,156125,156128,156131,156134,156137,156140,156143],{},[1775,156123,156124],{},"猜数字游戏。",[1775,156126,156127],{},"ATM 菜单程序。",[1775,156129,156130],{},"学生成绩统计。",[1775,156132,156133],{},"学生管理系统函数版。",[1775,156135,156136],{},"学生管理系统文件持久化版。",[1775,156138,156139],{},"学生管理系统面向对象版。",[1775,156141,156142],{},"销售数据统计。",[1775,156144,156145],{},"销售数据可视化。",[14,156147,156149],{"id":156148},"_1212-常见学习误区","12.12 常见学习误区",[1772,156151,156152,156155,156158,156161,156164,156167,156170],{},[1775,156153,156154],{},"只看视频不敲代码。",[1775,156156,156157],{},"一报错就复制错误去搜，不先读报错位置。",[1775,156159,156160],{},"变量名随便写，后续自己看不懂。",[1775,156162,156163],{},"所有代码都写在一个文件一个函数里。",[1775,156165,156166],{},"不保存练习代码，复习时没有材料。",[1775,156168,156169],{},"还没掌握列表字典就急着学框架。",[1775,156171,156172],{},"不会读官方文档，只依赖教程。",[14,156174,156176],{"id":156175},"_1213-如何读报错","12.13 如何读报错",[103,156178,156179],{},"报错通常从下往上看最后几行。",[103,156181,16781],{},[24,156183,156186],{"className":156184,"code":156185,"language":6838,"meta":29},[6836],"ValueError: invalid literal for int() with base 10: 'abc'\n",[31,156187,156185],{"__ignoreMap":29},[103,156189,26245],{},[1772,156191,156192,156198,156208],{},[1775,156193,156194,156195,30031],{},"异常类型是 ",[31,156196,156197],{},"ValueError",[1775,156199,108708,156200,156203,156204,156207],{},[31,156201,156202],{},"int()"," 无法把 ",[31,156205,156206],{},"'abc'"," 转成整数。",[1775,156209,156210],{},"应该检查输入内容或增加异常处理。",[103,156212,156213],{},"再看文件名和行号：",[24,156215,156218],{"className":156216,"code":156217,"language":6838,"meta":29},[6836],"File \"main.py\", line 10, in \u003Cmodule>\n",[31,156219,156217],{"__ignoreMap":29},[103,156221,156222,156223,156225],{},"表示错误发生在 ",[31,156224,155970],{}," 第 10 行。",[14,156227,156229],{"id":156228},"_1214-后续学习方向","12.14 后续学习方向",[103,156231,156232],{},"Python 基础完成后，可以按兴趣选择方向：",[1772,156234,156235,156247,156256,156268,156279,156288,156298],{},[1775,156236,156237,156238,2021,156241,2021,156244,30031],{},"自动化办公：",[31,156239,156240],{},"openpyxl",[31,156242,156243],{},"python-docx",[31,156245,156246],{},"pdfplumber",[1775,156248,156249,156250,2021,156252,2021,156254,30031],{},"数据分析：",[31,156251,101989],{},[31,156253,147548],{},[31,156255,147556],{},[1775,156257,156258,156259,2021,156262,2021,156265,30031],{},"Web 后端：",[31,156260,156261],{},"Flask",[31,156263,156264],{},"FastAPI",[31,156266,156267],{},"Django",[1775,156269,156270,156271,2021,156273,2021,156276,30031],{},"爬虫：",[31,156272,147533],{},[31,156274,156275],{},"BeautifulSoup",[31,156277,156278],{},"Scrapy",[1775,156280,156281,156282,2021,156284,156287],{},"测试开发：",[31,156283,147580],{},[31,156285,156286],{},"selenium","、接口测试。",[1775,156289,156290,156291,2021,156293,2021,156295,30031],{},"人工智能：",[31,156292,101989],{},[31,156294,147548],{},[31,156296,156297],{},"pytorch",[1775,156299,156300,156301,2021,156303,2021,156306,30031],{},"运维脚本：",[31,156302,147149],{},[31,156304,156305],{},"subprocess",[31,156307,156308],{},"paramiko",[103,156310,156311],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156313,156315],{"id":156314},"_1215-结课练习","12.15 结课练习",[1772,156317,156318,156321,156324,156327,156330,156333,156336,156339],{},[1775,156319,156320],{},"完成函数版学生管理系统。",[1775,156322,156323],{},"给学生管理系统增加 JSON 持久化。",[1775,156325,156326],{},"给学生管理系统增加异常处理。",[1775,156328,156329],{},"把学生管理系统改成面向对象版。",[1775,156331,156332],{},"使用 pyecharts 绘制学生成绩柱状图。",[1775,156334,156335],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[1775,156337,156338],{},"按品类统计销售额并绘制柱状图。",[1775,156340,156341],{},"写一份自己的 Python 学习路线图。",[1711,156343,156344],{},"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":29,"searchDepth":165,"depth":165,"links":156346},[156347,156348,156351,156352,156353,156359,156360,156361,156362,156363,156364,156365,156366,156367,156368],{"id":153063,"depth":165,"text":153064},{"id":153113,"depth":165,"text":153114,"children":156349},[156350],{"id":153117,"depth":171,"text":153118},{"id":153156,"depth":165,"text":153157},{"id":154630,"depth":165,"text":154631},{"id":154968,"depth":165,"text":154969,"children":156354},[156355,156356,156357,156358],{"id":154972,"depth":171,"text":154973},{"id":155112,"depth":171,"text":155113},{"id":155202,"depth":171,"text":155203},{"id":155288,"depth":171,"text":155289},{"id":155329,"depth":165,"text":155330},{"id":155522,"depth":165,"text":155523},{"id":155759,"depth":165,"text":155760},{"id":155950,"depth":165,"text":155951},{"id":155992,"depth":165,"text":155993},{"id":156118,"depth":165,"text":156119},{"id":156148,"depth":165,"text":156149},{"id":156175,"depth":165,"text":156176},{"id":156228,"depth":165,"text":156229},{"id":156314,"depth":165,"text":156315},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153055,"description":1744},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156375,"title":156376,"body":156377,"description":1744,"extension":1745,"meta":158846,"navigation":1474,"path":158847,"seo":158848,"stem":158849,"__hash__":158850},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156378,"toc":158821},[156379,156382,156386,156389,156392,156412,156415,156438,156441,156444,156466,156469,156491,156495,156498,156538,156541,156662,156666,156669,156709,156712,156736,156739,156743,156746,156760,156793,156796,156831,156834,156857,156860,156893,156896,156898,156904,156979,156982,156988,157005,157045,157049,157052,157098,157100,157138,157141,157176,157179,157214,157217,157249,157252,157271,157275,157279,157392,157394,157469,157473,157519,157522,157548,157557,157561,157564,157627,157635,157663,157667,157707,157772,157776,157779,157818,157821,157866,157869,157930,157934,157961,157964,157992,157995,157999,158003,158068,158071,158109,158112,158144,158148,158247,158251,158254,158327,158330,158378,158382,158388,158428,158431,158478,158481,158530,158534,158536,158550,158552,158733,158737,158764,158784,158791,158795,158812,158818],[10,156380,156376],{"id":156381},"_2-基础语法变量与字符串",[14,156383,156385],{"id":156384},"_21-注释","2.1 注释",[103,156387,156388],{},"注释是给人看的说明文字，不会被 Python 执行。",[103,156390,156391],{},"单行注释：",[24,156393,156395],{"className":26,"code":156394,"language":28,"meta":29,"style":29},"# 这是单行注释\nprint(\"hello\")\n",[31,156396,156397,156402],{"__ignoreMap":29},[34,156398,156399],{"class":36,"line":37},[34,156400,156401],{"class":161},"# 这是单行注释\n",[34,156403,156404,156406,156408,156410],{"class":36,"line":165},[34,156405,723],{"class":44},[34,156407,286],{"class":40},[34,156409,7494],{"class":504},[34,156411,101],{"class":40},[103,156413,156414],{},"多行说明常用三引号：",[24,156416,156418],{"className":26,"code":156417,"language":28,"meta":29,"style":29},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[31,156419,156420,156424,156429,156434],{"__ignoreMap":29},[34,156421,156422],{"class":36,"line":37},[34,156423,505],{"class":504},[34,156425,156426],{"class":36,"line":165},[34,156427,156428],{"class":504},"这是多行说明。\n",[34,156430,156431],{"class":36,"line":171},[34,156432,156433],{"class":504},"常用于文件顶部说明、函数说明等。\n",[34,156435,156436],{"class":36,"line":182},[34,156437,505],{"class":504},[103,156439,156440],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[103,156442,156443],{},"不好：",[24,156445,156447],{"className":26,"code":156446,"language":28,"meta":29,"style":29},"# age 加 1\nage = age + 1\n",[31,156448,156449,156454],{"__ignoreMap":29},[34,156450,156451],{"class":36,"line":37},[34,156452,156453],{"class":161},"# age 加 1\n",[34,156455,156456,156458,156460,156462,156464],{"class":36,"line":165},[34,156457,147909],{"class":40},[34,156459,221],{"class":55},[34,156461,17353],{"class":40},[34,156463,2277],{"class":55},[34,156465,57338],{"class":44},[103,156467,156468],{},"较好：",[24,156470,156472],{"className":26,"code":156471,"language":28,"meta":29,"style":29},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[31,156473,156474,156479],{"__ignoreMap":29},[34,156475,156476],{"class":36,"line":37},[34,156477,156478],{"class":161},"# 用户过完生日后，年龄增加一岁\n",[34,156480,156481,156483,156485,156487,156489],{"class":36,"line":165},[34,156482,147909],{"class":40},[34,156484,221],{"class":55},[34,156486,17353],{"class":40},[34,156488,2277],{"class":55},[34,156490,57338],{"class":44},[14,156492,156494],{"id":156493},"_22-字面量","2.2 字面量",[103,156496,156497],{},"字面量就是代码中直接写出来的数据。",[24,156499,156501],{"className":26,"code":156500,"language":28,"meta":29,"style":29},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[31,156502,156503,156510,156517,156524,156531],{"__ignoreMap":29},[34,156504,156505,156507],{"class":36,"line":37},[34,156506,451],{"class":44},[34,156508,156509],{"class":161},"          # 整数\n",[34,156511,156512,156514],{"class":36,"line":165},[34,156513,1864],{"class":44},[34,156515,156516],{"class":161},"         # 小数\n",[34,156518,156519,156521],{"class":36,"line":171},[34,156520,7494],{"class":504},[34,156522,156523],{"class":161},"      # 字符串\n",[34,156525,156526,156528],{"class":36,"line":182},[34,156527,33118],{"class":44},[34,156529,156530],{"class":161},"         # 布尔值\n",[34,156532,156533,156535],{"class":36,"line":188},[34,156534,492],{"class":44},[34,156536,156537],{"class":161},"         # 空值\n",[103,156539,156540],{},"常见字面量类型：",[1948,156542,156543,156553],{},[1951,156544,156545],{},[1954,156546,156547,156549,156551],{},[1957,156548,25382],{},[1957,156550,29138],{},[1957,156552,27515],{},[1994,156554,156555,156566,156577,156588,156600,156612,156624,156637,156649],{},[1954,156556,156557,156559,156563],{},[1999,156558,571],{},[1999,156560,156561],{},[31,156562,451],{},[1999,156564,156565],{},"整数",[1954,156567,156568,156570,156574],{},[1999,156569,989],{},[1999,156571,156572],{},[31,156573,1864],{},[1999,156575,156576],{},"浮点数",[1954,156578,156579,156581,156585],{},[1999,156580,2961],{},[1999,156582,156583],{},[31,156584,7494],{},[1999,156586,156587],{},"字符串",[1954,156589,156590,156592,156598],{},[1999,156591,3013],{},[1999,156593,156594,2021,156596],{},[31,156595,33118],{},[31,156597,35628],{},[1999,156599,67654],{},[1954,156601,156602,156605,156609],{},[1999,156603,156604],{},"NoneType",[1999,156606,156607],{},[31,156608,492],{},[1999,156610,156611],{},"空值",[1954,156613,156614,156616,156621],{},[1999,156615,155433],{},[1999,156617,156618],{},[31,156619,156620],{},"[1, 2, 3]",[1999,156622,156623],{},"列表",[1954,156625,156626,156629,156634],{},[1999,156627,156628],{},"tuple",[1999,156630,156631],{},[31,156632,156633],{},"(1, 2, 3)",[1999,156635,156636],{},"元组",[1954,156638,156639,156641,156646],{},[1999,156640,115909],{},[1999,156642,156643],{},[31,156644,156645],{},"{\"name\": \"张三\"}",[1999,156647,156648],{},"字典",[1954,156650,156651,156654,156659],{},[1999,156652,156653],{},"set",[1999,156655,156656],{},[31,156657,156658],{},"{1, 2, 3}",[1999,156660,156661],{},"集合",[14,156663,156665],{"id":156664},"_23-变量","2.3 变量",[103,156667,156668],{},"变量是保存数据的名字。",[24,156670,156672],{"className":26,"code":156671,"language":28,"meta":29,"style":29},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[31,156673,156674,156682,156690,156700],{"__ignoreMap":29},[34,156675,156676,156678,156680],{"class":36,"line":37},[34,156677,147899],{"class":40},[34,156679,221],{"class":55},[34,156681,150716],{"class":504},[34,156683,156684,156686,156688],{"class":36,"line":165},[34,156685,147909],{"class":40},[34,156687,221],{"class":55},[34,156689,147914],{"class":44},[34,156691,156692,156695,156697],{"class":36,"line":171},[34,156693,156694],{"class":40},"height ",[34,156696,221],{"class":55},[34,156698,156699],{"class":44}," 1.75\n",[34,156701,156702,156705,156707],{"class":36,"line":182},[34,156703,156704],{"class":40},"is_student ",[34,156706,221],{"class":55},[34,156708,154962],{"class":44},[103,156710,156711],{},"Python 的变量不需要提前声明类型：",[24,156713,156715],{"className":26,"code":156714,"language":28,"meta":29,"style":29},"score = 100\nscore = \"满分\"\n",[31,156716,156717,156727],{"__ignoreMap":29},[34,156718,156719,156722,156724],{"class":36,"line":37},[34,156720,156721],{"class":40},"score ",[34,156723,221],{"class":55},[34,156725,156726],{"class":44}," 100\n",[34,156728,156729,156731,156733],{"class":36,"line":165},[34,156730,156721],{"class":40},[34,156732,221],{"class":55},[34,156734,156735],{"class":504}," \"满分\"\n",[103,156737,156738],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156740,156742],{"id":156741},"_24-变量命名规则","2.4 变量命名规则",[103,156744,156745],{},"硬性规则：",[1772,156747,156748,156751,156754,156757],{},[1775,156749,156750],{},"只能由字母、数字、下划线组成。",[1775,156752,156753],{},"不能以数字开头。",[1775,156755,156756],{},"不能使用 Python 关键字。",[1775,156758,156759],{},"区分大小写。",[24,156761,156763],{"className":26,"code":156762,"language":28,"meta":29,"style":29},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[31,156764,156765,156774,156783],{"__ignoreMap":29},[34,156766,156767,156770,156772],{"class":36,"line":37},[34,156768,156769],{"class":40},"user_name ",[34,156771,221],{"class":55},[34,156773,147904],{"class":504},[34,156775,156776,156779,156781],{"class":36,"line":165},[34,156777,156778],{"class":40},"age2 ",[34,156780,221],{"class":55},[34,156782,147914],{"class":44},[34,156784,156785,156788,156790],{"class":36,"line":171},[34,156786,156787],{"class":40},"_token ",[34,156789,221],{"class":55},[34,156791,156792],{"class":504}," \"abc\"\n",[103,156794,156795],{},"错误写法：",[24,156797,156799],{"className":26,"code":156798,"language":28,"meta":29,"style":29},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[31,156800,156801,156810,156822],{"__ignoreMap":29},[34,156802,156803,156806,156808],{"class":36,"line":37},[34,156804,156805],{"class":1204},"2age",[34,156807,56],{"class":55},[34,156809,147914],{"class":44},[34,156811,156812,156814,156816,156818,156820],{"class":36,"line":165},[34,156813,132947],{"class":40},[34,156815,2327],{"class":55},[34,156817,147899],{"class":40},[34,156819,221],{"class":55},[34,156821,147904],{"class":504},[34,156823,156824,156826,156828],{"class":36,"line":171},[34,156825,16340],{"class":55},[34,156827,56],{"class":55},[34,156829,156830],{"class":504}," \"一班\"\n",[103,156832,156833],{},"查看关键字：",[24,156835,156837],{"className":26,"code":156836,"language":28,"meta":29,"style":29},"import keyword\n\nprint(keyword.kwlist)\n",[31,156838,156839,156846,156850],{"__ignoreMap":29},[34,156840,156841,156843],{"class":36,"line":37},[34,156842,32036],{"class":55},[34,156844,156845],{"class":40}," keyword\n",[34,156847,156848],{"class":36,"line":165},[34,156849,1475],{"emptyLinePlaceholder":1474},[34,156851,156852,156854],{"class":36,"line":171},[34,156853,723],{"class":44},[34,156855,156856],{"class":40},"(keyword.kwlist)\n",[103,156858,156859],{},"推荐命名风格：",[24,156861,156863],{"className":26,"code":156862,"language":28,"meta":29,"style":29},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[31,156864,156865,156874,156884],{"__ignoreMap":29},[34,156866,156867,156870,156872],{"class":36,"line":37},[34,156868,156869],{"class":40},"student_name ",[34,156871,221],{"class":55},[34,156873,150716],{"class":504},[34,156875,156876,156879,156881],{"class":36,"line":165},[34,156877,156878],{"class":40},"total_price ",[34,156880,221],{"class":55},[34,156882,156883],{"class":44}," 99.8\n",[34,156885,156886,156889,156891],{"class":36,"line":171},[34,156887,156888],{"class":40},"is_finished ",[34,156890,221],{"class":55},[34,156892,127170],{"class":44},[103,156894,156895],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156897,52371],{"id":52370},[103,156899,105729,156900,156903],{},[31,156901,156902],{},"type()"," 查看数据类型：",[24,156905,156907],{"className":26,"code":156906,"language":28,"meta":29,"style":29},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[31,156908,156909,156923,156937,156951,156965],{"__ignoreMap":29},[34,156910,156911,156913,156915,156917,156919,156921],{"class":36,"line":37},[34,156912,723],{"class":44},[34,156914,286],{"class":40},[34,156916,104470],{"class":44},[34,156918,286],{"class":40},[34,156920,451],{"class":44},[34,156922,296],{"class":40},[34,156924,156925,156927,156929,156931,156933,156935],{"class":36,"line":165},[34,156926,723],{"class":44},[34,156928,286],{"class":40},[34,156930,104470],{"class":44},[34,156932,286],{"class":40},[34,156934,1864],{"class":44},[34,156936,296],{"class":40},[34,156938,156939,156941,156943,156945,156947,156949],{"class":36,"line":171},[34,156940,723],{"class":44},[34,156942,286],{"class":40},[34,156944,104470],{"class":44},[34,156946,286],{"class":40},[34,156948,7494],{"class":504},[34,156950,296],{"class":40},[34,156952,156953,156955,156957,156959,156961,156963],{"class":36,"line":182},[34,156954,723],{"class":44},[34,156956,286],{"class":40},[34,156958,104470],{"class":44},[34,156960,286],{"class":40},[34,156962,33118],{"class":44},[34,156964,296],{"class":40},[34,156966,156967,156969,156971,156973,156975,156977],{"class":36,"line":188},[34,156968,723],{"class":44},[34,156970,286],{"class":40},[34,156972,104470],{"class":44},[34,156974,286],{"class":40},[34,156976,492],{"class":44},[34,156978,296],{"class":40},[103,156980,156981],{},"输出类似：",[24,156983,156986],{"className":156984,"code":156985,"language":6838,"meta":29},[6836],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[31,156987,156985],{"__ignoreMap":29},[103,156989,10675,156990,108646,156992,156994,156995,156997,156998,23146,157000,156997,157002,157004],{},[31,156991,3013],{},[31,156993,571],{}," 的子类，",[31,156996,33118],{}," 可以当作 ",[31,156999,394],{},[31,157001,35628],{},[31,157003,177],{},"，但业务代码中不要滥用。",[24,157006,157008],{"className":26,"code":157007,"language":28,"meta":29,"style":29},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[31,157009,157010,157028],{"__ignoreMap":29},[34,157011,157012,157014,157016,157018,157020,157022,157025],{"class":36,"line":37},[34,157013,723],{"class":44},[34,157015,286],{"class":40},[34,157017,33118],{"class":44},[34,157019,47205],{"class":55},[34,157021,26764],{"class":44},[34,157023,157024],{"class":40},")   ",[34,157026,157027],{"class":161},"# 2\n",[34,157029,157030,157032,157034,157036,157038,157040,157042],{"class":36,"line":165},[34,157031,723],{"class":44},[34,157033,286],{"class":40},[34,157035,35628],{"class":44},[34,157037,47205],{"class":55},[34,157039,26764],{"class":44},[34,157041,47447],{"class":40},[34,157043,157044],{"class":161},"# 1\n",[14,157046,157048],{"id":157047},"_26-类型转换","2.6 类型转换",[103,157050,157051],{},"常用转换函数：",[24,157053,157055],{"className":26,"code":157054,"language":28,"meta":29,"style":29},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[31,157056,157057,157067,157078,157088],{"__ignoreMap":29},[34,157058,157059,157061,157063,157065],{"class":36,"line":37},[34,157060,571],{"class":44},[34,157062,286],{"class":40},[34,157064,55955],{"class":504},[34,157066,101],{"class":40},[34,157068,157069,157071,157073,157076],{"class":36,"line":165},[34,157070,989],{"class":44},[34,157072,286],{"class":40},[34,157074,157075],{"class":504},"\"3.14\"",[34,157077,101],{"class":40},[34,157079,157080,157082,157084,157086],{"class":36,"line":171},[34,157081,2961],{"class":44},[34,157083,286],{"class":40},[34,157085,451],{"class":44},[34,157087,101],{"class":40},[34,157089,157090,157092,157094,157096],{"class":36,"line":182},[34,157091,3013],{"class":44},[34,157093,286],{"class":40},[34,157095,394],{"class":44},[34,157097,101],{"class":40},[103,157099,16781],{},[24,157101,157103],{"className":26,"code":157102,"language":28,"meta":29,"style":29},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[31,157104,157105,157114,157125],{"__ignoreMap":29},[34,157106,157107,157109,157111],{"class":36,"line":37},[34,157108,147909],{"class":40},[34,157110,221],{"class":55},[34,157112,157113],{"class":504}," \"18\"\n",[34,157115,157116,157118,157120,157122],{"class":36,"line":165},[34,157117,147909],{"class":40},[34,157119,221],{"class":55},[34,157121,4036],{"class":44},[34,157123,157124],{"class":40},"(age)\n",[34,157126,157127,157129,157132,157134,157136],{"class":36,"line":171},[34,157128,723],{"class":44},[34,157130,157131],{"class":40},"(age ",[34,157133,2277],{"class":55},[34,157135,26764],{"class":44},[34,157137,101],{"class":40},[103,157139,157140],{},"输入得到的内容永远是字符串：",[24,157142,157144],{"className":26,"code":157143,"language":28,"meta":29,"style":29},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[31,157145,157146,157162],{"__ignoreMap":29},[34,157147,157148,157151,157153,157155,157157,157160],{"class":36,"line":37},[34,157149,157150],{"class":40},"num ",[34,157152,221],{"class":55},[34,157154,62244],{"class":44},[34,157156,286],{"class":40},[34,157158,157159],{"class":504},"\"请输入数字:\"",[34,157161,101],{"class":40},[34,157163,157164,157166,157168,157170,157173],{"class":36,"line":165},[34,157165,723],{"class":44},[34,157167,286],{"class":40},[34,157169,104470],{"class":44},[34,157171,157172],{"class":40},"(num))  ",[34,157174,157175],{"class":161},"# str\n",[103,157177,157178],{},"如果要做数学运算，必须转换：",[24,157180,157182],{"className":26,"code":157181,"language":28,"meta":29,"style":29},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[31,157183,157184,157202],{"__ignoreMap":29},[34,157185,157186,157188,157190,157192,157194,157196,157198,157200],{"class":36,"line":37},[34,157187,157150],{"class":40},[34,157189,221],{"class":55},[34,157191,4036],{"class":44},[34,157193,286],{"class":40},[34,157195,55460],{"class":44},[34,157197,286],{"class":40},[34,157199,157159],{"class":504},[34,157201,296],{"class":40},[34,157203,157204,157206,157208,157210,157212],{"class":36,"line":165},[34,157205,723],{"class":44},[34,157207,47258],{"class":40},[34,157209,2277],{"class":55},[34,157211,3692],{"class":44},[34,157213,101],{"class":40},[103,157215,157216],{},"常见错误：",[24,157218,157220],{"className":26,"code":157219,"language":28,"meta":29,"style":29},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[31,157221,157222,157235],{"__ignoreMap":29},[34,157223,157224,157226,157228,157230,157232],{"class":36,"line":37},[34,157225,571],{"class":44},[34,157227,286],{"class":40},[34,157229,157075],{"class":504},[34,157231,157024],{"class":40},[34,157233,157234],{"class":161},"# 错误\n",[34,157236,157237,157239,157241,157244,157247],{"class":36,"line":165},[34,157238,571],{"class":44},[34,157240,286],{"class":40},[34,157242,157243],{"class":504},"\"abc\"",[34,157245,157246],{"class":40},")    ",[34,157248,157234],{"class":161},[103,157250,157251],{},"正确写法：",[24,157253,157255],{"className":26,"code":157254,"language":28,"meta":29,"style":29},"num = float(\"3.14\")\n",[31,157256,157257],{"__ignoreMap":29},[34,157258,157259,157261,157263,157265,157267,157269],{"class":36,"line":37},[34,157260,157150],{"class":40},[34,157262,221],{"class":55},[34,157264,111160],{"class":44},[34,157266,286],{"class":40},[34,157268,157075],{"class":504},[34,157270,101],{"class":40},[14,157272,157274],{"id":157273},"_27-运算符","2.7 运算符",[19,157276,157278],{"id":157277},"_271-算术运算符","2.7.1 算术运算符",[1948,157280,157281,157292],{},[1951,157282,157283],{},[1954,157284,157285,157288,157290],{},[1957,157286,157287],{},"运算符",[1957,157289,27515],{},[1957,157291,29138],{},[1994,157293,157294,157308,157322,157336,157350,157364,157378],{},[1954,157295,157296,157300,157303],{},[1999,157297,157298],{},[31,157299,2277],{},[1999,157301,157302],{},"加法",[1999,157304,157305],{},[31,157306,157307],{},"1 + 2",[1954,157309,157310,157314,157317],{},[1999,157311,157312],{},[31,157313,2327],{},[1999,157315,157316],{},"减法",[1999,157318,157319],{},[31,157320,157321],{},"5 - 3",[1954,157323,157324,157328,157331],{},[1999,157325,157326],{},[31,157327,2252],{},[1999,157329,157330],{},"乘法",[1999,157332,157333],{},[31,157334,157335],{},"2 * 3",[1954,157337,157338,157342,157345],{},[1999,157339,157340],{},[31,157341,2379],{},[1999,157343,157344],{},"除法，结果是浮点数",[1999,157346,157347],{},[31,157348,157349],{},"5 \u002F 2",[1954,157351,157352,157356,157359],{},[1999,157353,157354],{},[31,157355,34970],{},[1999,157357,157358],{},"整除",[1999,157360,157361],{},[31,157362,157363],{},"5 \u002F\u002F 2",[1954,157365,157366,157370,157373],{},[1999,157367,157368],{},[31,157369,2131],{},[1999,157371,157372],{},"取余",[1999,157374,157375],{},[31,157376,157377],{},"5 % 2",[1954,157379,157380,157384,157387],{},[1999,157381,157382],{},[31,157383,12311],{},[1999,157385,157386],{},"幂运算",[1999,157388,157389],{},[31,157390,157391],{},"2 ** 3",[103,157393,16781],{},[24,157395,157397],{"className":26,"code":157396,"language":28,"meta":29,"style":29},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[31,157398,157399,157417,157434,157451],{"__ignoreMap":29},[34,157400,157401,157403,157405,157407,157410,157412,157414],{"class":36,"line":37},[34,157402,723],{"class":44},[34,157404,286],{"class":40},[34,157406,224],{"class":44},[34,157408,157409],{"class":55}," \u002F",[34,157411,16401],{"class":44},[34,157413,157024],{"class":40},[34,157415,157416],{"class":161},"# 2.5\n",[34,157418,157419,157421,157423,157425,157428,157430,157432],{"class":36,"line":165},[34,157420,723],{"class":44},[34,157422,286],{"class":40},[34,157424,224],{"class":44},[34,157426,157427],{"class":55}," \u002F\u002F",[34,157429,16401],{"class":44},[34,157431,47447],{"class":40},[34,157433,157027],{"class":161},[34,157435,157436,157438,157440,157442,157445,157447,157449],{"class":36,"line":171},[34,157437,723],{"class":44},[34,157439,286],{"class":40},[34,157441,224],{"class":44},[34,157443,157444],{"class":55}," %",[34,157446,16401],{"class":44},[34,157448,157024],{"class":40},[34,157450,157044],{"class":161},[34,157452,157453,157455,157457,157459,157462,157464,157466],{"class":36,"line":182},[34,157454,723],{"class":44},[34,157456,286],{"class":40},[34,157458,332],{"class":44},[34,157460,157461],{"class":55}," **",[34,157463,79707],{"class":44},[34,157465,47447],{"class":40},[34,157467,157468],{"class":161},"# 8\n",[19,157470,157472],{"id":157471},"_272-赋值运算符","2.7.2 赋值运算符",[24,157474,157476],{"className":26,"code":157475,"language":28,"meta":29,"style":29},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[31,157477,157478,157486,157494,157502,157510],{"__ignoreMap":29},[34,157479,157480,157482,157484],{"class":36,"line":37},[34,157481,157150],{"class":40},[34,157483,221],{"class":55},[34,157485,60067],{"class":44},[34,157487,157488,157490,157492],{"class":36,"line":165},[34,157489,157150],{"class":40},[34,157491,11127],{"class":55},[34,157493,56066],{"class":44},[34,157495,157496,157498,157500],{"class":36,"line":171},[34,157497,157150],{"class":40},[34,157499,151615],{"class":55},[34,157501,49362],{"class":44},[34,157503,157504,157506,157508],{"class":36,"line":182},[34,157505,157150],{"class":40},[34,157507,138511],{"class":55},[34,157509,121399],{"class":44},[34,157511,157512,157514,157517],{"class":36,"line":188},[34,157513,157150],{"class":40},[34,157515,157516],{"class":55},"\u002F=",[34,157518,49362],{"class":44},[103,157520,157521],{},"等价关系：",[24,157523,157525],{"className":26,"code":157524,"language":28,"meta":29,"style":29},"num += 1\nnum = num + 1\n",[31,157526,157527,157535],{"__ignoreMap":29},[34,157528,157529,157531,157533],{"class":36,"line":37},[34,157530,157150],{"class":40},[34,157532,11127],{"class":55},[34,157534,57338],{"class":44},[34,157536,157537,157539,157541,157544,157546],{"class":36,"line":165},[34,157538,157150],{"class":40},[34,157540,221],{"class":55},[34,157542,157543],{"class":40}," num ",[34,157545,2277],{"class":55},[34,157547,57338],{"class":44},[103,157549,157550,157551,102381,157554,30031],{},"Python 没有 ",[31,157552,157553],{},"num++",[31,157555,157556],{},"num--",[19,157558,157560],{"id":157559},"_273-比较运算符","2.7.3 比较运算符",[103,157562,157563],{},"比较运算结果是布尔值。",[24,157565,157567],{"className":26,"code":157566,"language":28,"meta":29,"style":29},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[31,157568,157569,157583,157598,157612],{"__ignoreMap":29},[34,157570,157571,157573,157575,157577,157579,157581],{"class":36,"line":37},[34,157572,723],{"class":44},[34,157574,286],{"class":40},[34,157576,410],{"class":44},[34,157578,27868],{"class":55},[34,157580,3802],{"class":44},[34,157582,101],{"class":40},[34,157584,157585,157587,157589,157591,157594,157596],{"class":36,"line":165},[34,157586,723],{"class":44},[34,157588,286],{"class":40},[34,157590,410],{"class":44},[34,157592,157593],{"class":55}," >=",[34,157595,3692],{"class":44},[34,157597,101],{"class":40},[34,157599,157600,157602,157604,157606,157608,157610],{"class":36,"line":171},[34,157601,723],{"class":44},[34,157603,286],{"class":40},[34,157605,410],{"class":44},[34,157607,102922],{"class":55},[34,157609,3737],{"class":44},[34,157611,101],{"class":40},[34,157613,157614,157616,157618,157620,157623,157625],{"class":36,"line":182},[34,157615,723],{"class":44},[34,157617,286],{"class":40},[34,157619,410],{"class":44},[34,157621,157622],{"class":55}," !=",[34,157624,3737],{"class":44},[34,157626,101],{"class":40},[103,157628,157629,157630,157632,157633,30031],{},"注意：判断相等用 ",[31,157631,4602],{},"，赋值用 ",[31,157634,221],{},[24,157636,157638],{"className":26,"code":157637,"language":28,"meta":29,"style":29},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[31,157639,157640,157652],{"__ignoreMap":29},[34,157641,157642,157644,157646,157649],{"class":36,"line":37},[34,157643,147909],{"class":40},[34,157645,221],{"class":55},[34,157647,157648],{"class":44}," 18",[34,157650,157651],{"class":161},"       # 赋值\n",[34,157653,157654,157656,157658,157660],{"class":36,"line":165},[34,157655,147909],{"class":40},[34,157657,4602],{"class":55},[34,157659,157648],{"class":44},[34,157661,157662],{"class":161},"      # 判断是否相等\n",[19,157664,157666],{"id":157665},"_274-逻辑运算符","2.7.4 逻辑运算符",[1948,157668,157669,157677],{},[1951,157670,157671],{},[1954,157672,157673,157675],{},[1957,157674,157287],{},[1957,157676,27515],{},[1994,157678,157679,157688,157697],{},[1954,157680,157681,157685],{},[1999,157682,157683],{},[31,157684,32105],{},[1999,157686,157687],{},"并且",[1954,157689,157690,157694],{},[1999,157691,157692],{},[31,157693,116453],{},[1999,157695,157696],{},"或者",[1954,157698,157699,157704],{},[1999,157700,157701],{},[31,157702,157703],{},"not",[1999,157705,157706],{},"取反",[24,157708,157710],{"className":26,"code":157709,"language":28,"meta":29,"style":29},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[31,157711,157712,157720,157729,157733,157748,157762],{"__ignoreMap":29},[34,157713,157714,157716,157718],{"class":36,"line":37},[34,157715,147909],{"class":40},[34,157717,221],{"class":55},[34,157719,89701],{"class":44},[34,157721,157722,157725,157727],{"class":36,"line":165},[34,157723,157724],{"class":40},"has_ticket ",[34,157726,221],{"class":55},[34,157728,154962],{"class":44},[34,157730,157731],{"class":36,"line":171},[34,157732,1475],{"emptyLinePlaceholder":1474},[34,157734,157735,157737,157739,157741,157743,157745],{"class":36,"line":182},[34,157736,723],{"class":44},[34,157738,157131],{"class":40},[34,157740,3364],{"class":55},[34,157742,157648],{"class":44},[34,157744,121792],{"class":55},[34,157746,157747],{"class":40}," has_ticket)\n",[34,157749,157750,157752,157754,157756,157758,157760],{"class":36,"line":188},[34,157751,723],{"class":44},[34,157753,157131],{"class":40},[34,157755,2701],{"class":55},[34,157757,157648],{"class":44},[34,157759,115564],{"class":55},[34,157761,157747],{"class":40},[34,157763,157764,157766,157768,157770],{"class":36,"line":518},[34,157765,723],{"class":44},[34,157767,286],{"class":40},[34,157769,157703],{"class":55},[34,157771,157747],{"class":40},[14,157773,157775],{"id":157774},"_28-字符串定义","2.8 字符串定义",[103,157777,157778],{},"三种常见写法：",[24,157780,157782],{"className":26,"code":157781,"language":28,"meta":29,"style":29},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[31,157783,157784,157794,157803,157813],{"__ignoreMap":29},[34,157785,157786,157789,157791],{"class":36,"line":37},[34,157787,157788],{"class":40},"name1 ",[34,157790,221],{"class":55},[34,157792,157793],{"class":504}," '小明'\n",[34,157795,157796,157799,157801],{"class":36,"line":165},[34,157797,157798],{"class":40},"name2 ",[34,157800,221],{"class":55},[34,157802,150716],{"class":504},[34,157804,157805,157808,157810],{"class":36,"line":171},[34,157806,157807],{"class":40},"text ",[34,157809,221],{"class":55},[34,157811,157812],{"class":504}," \"\"\"这是多行字符串\n",[34,157814,157815],{"class":36,"line":182},[34,157816,157817],{"class":504},"可以换行\"\"\"\n",[103,157819,157820],{},"字符串中包含引号：",[24,157822,157824],{"className":26,"code":157823,"language":28,"meta":29,"style":29},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[31,157825,157826,157836,157846],{"__ignoreMap":29},[34,157827,157828,157831,157833],{"class":36,"line":37},[34,157829,157830],{"class":40},"msg ",[34,157832,221],{"class":55},[34,157834,157835],{"class":504}," \"他说:'你好'\"\n",[34,157837,157838,157841,157843],{"class":36,"line":165},[34,157839,157840],{"class":40},"msg2 ",[34,157842,221],{"class":55},[34,157844,157845],{"class":504}," '他说:\"你好\"'\n",[34,157847,157848,157851,157853,157856,157859,157862,157864],{"class":36,"line":171},[34,157849,157850],{"class":40},"msg3 ",[34,157852,221],{"class":55},[34,157854,157855],{"class":504}," \"他说:",[34,157857,157858],{"class":44},"\\\"",[34,157860,157861],{"class":504},"你好",[34,157863,157858],{"class":44},[34,157865,26779],{"class":504},[103,157867,157868],{},"常见转义字符：",[1948,157870,157871,157880],{},[1951,157872,157873],{},[1954,157874,157875,157878],{},[1957,157876,157877],{},"写法",[1957,157879,102063],{},[1994,157881,157882,157892,157901,157911,157920],{},[1954,157883,157884,157889],{},[1999,157885,157886],{},[31,157887,157888],{},"\\n",[1999,157890,157891],{},"换行",[1954,157893,157894,157898],{},[1999,157895,157896],{},[31,157897,2892],{},[1999,157899,157900],{},"制表符",[1954,157902,157903,157908],{},[1999,157904,157905],{},[31,157906,157907],{},"\\\\",[1999,157909,157910],{},"反斜杠",[1954,157912,157913,157917],{},[1999,157914,157915],{},[31,157916,157858],{},[1999,157918,157919],{},"双引号",[1954,157921,157922,157927],{},[1999,157923,157924],{},[31,157925,157926],{},"\\'",[1999,157928,157929],{},"单引号",[14,157931,157933],{"id":157932},"_29-字符串拼接","2.9 字符串拼接",[24,157935,157937],{"className":26,"code":157936,"language":28,"meta":29,"style":29},"name = \"小明\"\nprint(\"你好，\" + name)\n",[31,157938,157939,157947],{"__ignoreMap":29},[34,157940,157941,157943,157945],{"class":36,"line":37},[34,157942,147899],{"class":40},[34,157944,221],{"class":55},[34,157946,150716],{"class":504},[34,157948,157949,157951,157953,157956,157958],{"class":36,"line":165},[34,157950,723],{"class":44},[34,157952,286],{"class":40},[34,157954,157955],{"class":504},"\"你好，\"",[34,157957,47205],{"class":55},[34,157959,157960],{"class":40}," name)\n",[103,157962,157963],{},"字符串只能和字符串拼接：",[24,157965,157967],{"className":26,"code":157966,"language":28,"meta":29,"style":29},"age = 18\nprint(\"年龄:\" + str(age))\n",[31,157968,157969,157977],{"__ignoreMap":29},[34,157970,157971,157973,157975],{"class":36,"line":37},[34,157972,147909],{"class":40},[34,157974,221],{"class":55},[34,157976,147914],{"class":44},[34,157978,157979,157981,157983,157985,157987,157989],{"class":36,"line":165},[34,157980,723],{"class":44},[34,157982,286],{"class":40},[34,157984,147880],{"class":504},[34,157986,47205],{"class":55},[34,157988,75558],{"class":44},[34,157990,157991],{"class":40},"(age))\n",[103,157993,157994],{},"更推荐使用格式化字符串。",[14,157996,157998],{"id":157997},"_210-字符串格式化","2.10 字符串格式化",[19,158000,158002],{"id":158001},"_2101-百分号格式化","2.10.1 百分号格式化",[24,158004,158006],{"className":26,"code":158005,"language":28,"meta":29,"style":29},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[31,158007,158008,158016,158024,158033,158037],{"__ignoreMap":29},[34,158009,158010,158012,158014],{"class":36,"line":37},[34,158011,147899],{"class":40},[34,158013,221],{"class":55},[34,158015,150716],{"class":504},[34,158017,158018,158020,158022],{"class":36,"line":165},[34,158019,147909],{"class":40},[34,158021,221],{"class":55},[34,158023,147914],{"class":44},[34,158025,158026,158028,158030],{"class":36,"line":171},[34,158027,156721],{"class":40},[34,158029,221],{"class":55},[34,158031,158032],{"class":44}," 95.5\n",[34,158034,158035],{"class":36,"line":182},[34,158036,1475],{"emptyLinePlaceholder":1474},[34,158038,158039,158041,158043,158046,158049,158052,158055,158058,158061,158063,158065],{"class":36,"line":188},[34,158040,723],{"class":44},[34,158042,286],{"class":40},[34,158044,158045],{"class":504},"\"姓名:",[34,158047,158048],{"class":44},"%s",[34,158050,158051],{"class":504}," 年龄:",[34,158053,158054],{"class":44},"%d",[34,158056,158057],{"class":504}," 分数:",[34,158059,158060],{"class":44},"%.1f",[34,158062,2058],{"class":504},[34,158064,157444],{"class":55},[34,158066,158067],{"class":40}," (name, age, score))\n",[103,158069,158070],{},"常用占位符：",[1948,158072,158073,158082],{},[1951,158074,158075],{},[1954,158076,158077,158080],{},[1957,158078,158079],{},"占位符",[1957,158081,27515],{},[1994,158083,158084,158092,158100],{},[1954,158085,158086,158090],{},[1999,158087,158088],{},[31,158089,158048],{},[1999,158091,156587],{},[1954,158093,158094,158098],{},[1999,158095,158096],{},[31,158097,158054],{},[1999,158099,156565],{},[1954,158101,158102,158107],{},[1999,158103,158104],{},[31,158105,158106],{},"%f",[1999,158108,156576],{},[103,158110,158111],{},"精度控制：",[24,158113,158115],{"className":26,"code":158114,"language":28,"meta":29,"style":29},"price = 12.3456\nprint(\"%.2f\" % price)\n",[31,158116,158117,158126],{"__ignoreMap":29},[34,158118,158119,158121,158123],{"class":36,"line":37},[34,158120,148044],{"class":40},[34,158122,221],{"class":55},[34,158124,158125],{"class":44}," 12.3456\n",[34,158127,158128,158130,158132,158134,158137,158139,158141],{"class":36,"line":165},[34,158129,723],{"class":44},[34,158131,286],{"class":40},[34,158133,2058],{"class":504},[34,158135,158136],{"class":44},"%.2f",[34,158138,2058],{"class":504},[34,158140,157444],{"class":55},[34,158142,158143],{"class":40}," price)\n",[19,158145,158147],{"id":158146},"_2102-format方法","2.10.2 format方法",[24,158149,158151],{"className":26,"code":158150,"language":28,"meta":29,"style":29},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[31,158152,158153,158161,158169,158173,158192,158212],{"__ignoreMap":29},[34,158154,158155,158157,158159],{"class":36,"line":37},[34,158156,147899],{"class":40},[34,158158,221],{"class":55},[34,158160,150716],{"class":504},[34,158162,158163,158165,158167],{"class":36,"line":165},[34,158164,147909],{"class":40},[34,158166,221],{"class":55},[34,158168,147914],{"class":44},[34,158170,158171],{"class":36,"line":171},[34,158172,1475],{"emptyLinePlaceholder":1474},[34,158174,158175,158177,158179,158181,158183,158185,158187,158189],{"class":36,"line":182},[34,158176,723],{"class":44},[34,158178,286],{"class":40},[34,158180,158045],{"class":504},[34,158182,34100],{"class":44},[34,158184,158051],{"class":504},[34,158186,34100],{"class":44},[34,158188,2058],{"class":504},[34,158190,158191],{"class":40},".format(name, age))\n",[34,158193,158194,158196,158198,158200,158203,158205,158208,158210],{"class":36,"line":188},[34,158195,723],{"class":44},[34,158197,286],{"class":40},[34,158199,158045],{"class":504},[34,158201,158202],{"class":44},"{0}",[34,158204,158051],{"class":504},[34,158206,158207],{"class":44},"{1}",[34,158209,2058],{"class":504},[34,158211,158191],{"class":40},[34,158213,158214,158216,158218,158220,158223,158225,158228,158230,158233,158235,158237,158240,158242,158244],{"class":36,"line":518},[34,158215,723],{"class":44},[34,158217,286],{"class":40},[34,158219,158045],{"class":504},[34,158221,158222],{"class":44},"{name}",[34,158224,158051],{"class":504},[34,158226,158227],{"class":44},"{age}",[34,158229,2058],{"class":504},[34,158231,158232],{"class":40},".format(",[34,158234,81447],{"class":51},[34,158236,221],{"class":55},[34,158238,158239],{"class":40},"name, ",[34,158241,71860],{"class":51},[34,158243,221],{"class":55},[34,158245,158246],{"class":40},"age))\n",[19,158248,158250],{"id":158249},"_2103-f-string","2.10.3 f-string",[103,158252,158253],{},"推荐写法：",[24,158255,158257],{"className":26,"code":158256,"language":28,"meta":29,"style":29},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[31,158258,158259,158267,158275,158283,158287],{"__ignoreMap":29},[34,158260,158261,158263,158265],{"class":36,"line":37},[34,158262,147899],{"class":40},[34,158264,221],{"class":55},[34,158266,150716],{"class":504},[34,158268,158269,158271,158273],{"class":36,"line":165},[34,158270,147909],{"class":40},[34,158272,221],{"class":55},[34,158274,147914],{"class":44},[34,158276,158277,158279,158281],{"class":36,"line":171},[34,158278,156721],{"class":40},[34,158280,221],{"class":55},[34,158282,158032],{"class":44},[34,158284,158285],{"class":36,"line":182},[34,158286,1475],{"emptyLinePlaceholder":1474},[34,158288,158289,158291,158293,158295,158297,158299,158301,158303,158305,158307,158309,158311,158313,158315,158318,158321,158323,158325],{"class":36,"line":188},[34,158290,723],{"class":44},[34,158292,286],{"class":40},[34,158294,1867],{"class":55},[34,158296,158045],{"class":504},[34,158298,2687],{"class":44},[34,158300,81447],{"class":40},[34,158302,2737],{"class":44},[34,158304,158051],{"class":504},[34,158306,2687],{"class":44},[34,158308,71860],{"class":40},[34,158310,2737],{"class":44},[34,158312,158057],{"class":504},[34,158314,2687],{"class":44},[34,158316,158317],{"class":40},"score",[34,158319,158320],{"class":55},":.1f",[34,158322,2737],{"class":44},[34,158324,2058],{"class":504},[34,158326,101],{"class":40},[103,158328,158329],{},"表达式也可以放进去：",[24,158331,158333],{"className":26,"code":158332,"language":28,"meta":29,"style":29},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[31,158334,158335,158343,158351],{"__ignoreMap":29},[34,158336,158337,158339,158341],{"class":36,"line":37},[34,158338,148044],{"class":40},[34,158340,221],{"class":55},[34,158342,148049],{"class":44},[34,158344,158345,158347,158349],{"class":36,"line":165},[34,158346,148054],{"class":40},[34,158348,221],{"class":55},[34,158350,56066],{"class":44},[34,158352,158353,158355,158357,158359,158362,158364,158366,158368,158371,158373,158376],{"class":36,"line":171},[34,158354,723],{"class":44},[34,158356,286],{"class":40},[34,158358,1867],{"class":55},[34,158360,158361],{"class":504},"\"总价:",[34,158363,2687],{"class":44},[34,158365,148044],{"class":40},[34,158367,2252],{"class":55},[34,158369,158370],{"class":40}," count",[34,158372,2737],{"class":44},[34,158374,158375],{"class":504},"元\"",[34,158377,101],{"class":40},[14,158379,158381],{"id":158380},"_211-input输入","2.11 input输入",[103,158383,158384,158387],{},[31,158385,158386],{},"input()"," 会暂停程序，等待用户输入。",[24,158389,158391],{"className":26,"code":158390,"language":28,"meta":29,"style":29},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[31,158392,158393,158407],{"__ignoreMap":29},[34,158394,158395,158397,158399,158401,158403,158405],{"class":36,"line":37},[34,158396,147899],{"class":40},[34,158398,221],{"class":55},[34,158400,62244],{"class":44},[34,158402,286],{"class":40},[34,158404,153742],{"class":504},[34,158406,101],{"class":40},[34,158408,158409,158411,158413,158415,158418,158420,158422,158424,158426],{"class":36,"line":165},[34,158410,723],{"class":44},[34,158412,286],{"class":40},[34,158414,1867],{"class":55},[34,158416,158417],{"class":504},"\"你好，",[34,158419,2687],{"class":44},[34,158421,81447],{"class":40},[34,158423,2737],{"class":44},[34,158425,2058],{"class":504},[34,158427,101],{"class":40},[103,158429,158430],{},"输入整数：",[24,158432,158434],{"className":26,"code":158433,"language":28,"meta":29,"style":29},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[31,158435,158436,158454],{"__ignoreMap":29},[34,158437,158438,158440,158442,158444,158446,158448,158450,158452],{"class":36,"line":37},[34,158439,147909],{"class":40},[34,158441,221],{"class":55},[34,158443,4036],{"class":44},[34,158445,286],{"class":40},[34,158447,55460],{"class":44},[34,158449,286],{"class":40},[34,158451,153757],{"class":504},[34,158453,296],{"class":40},[34,158455,158456,158458,158460,158462,158465,158467,158469,158471,158474,158476],{"class":36,"line":165},[34,158457,723],{"class":44},[34,158459,286],{"class":40},[34,158461,1867],{"class":55},[34,158463,158464],{"class":504},"\"明年你",[34,158466,2687],{"class":44},[34,158468,147909],{"class":40},[34,158470,2277],{"class":55},[34,158472,158473],{"class":44}," 1}",[34,158475,150767],{"class":504},[34,158477,101],{"class":40},[103,158479,158480],{},"输入小数：",[24,158482,158484],{"className":26,"code":158483,"language":28,"meta":29,"style":29},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[31,158485,158486,158505],{"__ignoreMap":29},[34,158487,158488,158490,158492,158494,158496,158498,158500,158503],{"class":36,"line":37},[34,158489,156694],{"class":40},[34,158491,221],{"class":55},[34,158493,111160],{"class":44},[34,158495,286],{"class":40},[34,158497,55460],{"class":44},[34,158499,286],{"class":40},[34,158501,158502],{"class":504},"\"请输入身高:\"",[34,158504,296],{"class":40},[34,158506,158507,158509,158511,158513,158516,158518,158520,158523,158525,158528],{"class":36,"line":165},[34,158508,723],{"class":44},[34,158510,286],{"class":40},[34,158512,1867],{"class":55},[34,158514,158515],{"class":504},"\"身高:",[34,158517,2687],{"class":44},[34,158519,26627],{"class":40},[34,158521,158522],{"class":55},":.2f",[34,158524,2737],{"class":44},[34,158526,158527],{"class":504},"米\"",[34,158529,101],{"class":40},[14,158531,158533],{"id":158532},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[103,158535,124655],{},[1772,158537,158538,158541,158544,158547],{},[1775,158539,158540],{},"输入商品单价。",[1775,158542,158543],{},"输入购买数量。",[1775,158545,158546],{},"输入折扣，例如 0.8 表示八折。",[1775,158548,158549],{},"输出最终金额，保留两位小数。",[103,158551,11685],{},[24,158553,158555],{"className":26,"code":158554,"language":28,"meta":29,"style":29},"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",[31,158556,158557,158576,158595,158615,158619,158639,158643,158666,158687,158709],{"__ignoreMap":29},[34,158558,158559,158561,158563,158565,158567,158569,158571,158574],{"class":36,"line":37},[34,158560,148044],{"class":40},[34,158562,221],{"class":55},[34,158564,111160],{"class":44},[34,158566,286],{"class":40},[34,158568,55460],{"class":44},[34,158570,286],{"class":40},[34,158572,158573],{"class":504},"\"请输入商品单价:\"",[34,158575,296],{"class":40},[34,158577,158578,158580,158582,158584,158586,158588,158590,158593],{"class":36,"line":165},[34,158579,148054],{"class":40},[34,158581,221],{"class":55},[34,158583,4036],{"class":44},[34,158585,286],{"class":40},[34,158587,55460],{"class":44},[34,158589,286],{"class":40},[34,158591,158592],{"class":504},"\"请输入购买数量:\"",[34,158594,296],{"class":40},[34,158596,158597,158600,158602,158604,158606,158608,158610,158613],{"class":36,"line":171},[34,158598,158599],{"class":40},"discount ",[34,158601,221],{"class":55},[34,158603,111160],{"class":44},[34,158605,286],{"class":40},[34,158607,55460],{"class":44},[34,158609,286],{"class":40},[34,158611,158612],{"class":504},"\"请输入折扣:\"",[34,158614,296],{"class":40},[34,158616,158617],{"class":36,"line":182},[34,158618,1475],{"emptyLinePlaceholder":1474},[34,158620,158621,158624,158626,158629,158631,158634,158636],{"class":36,"line":188},[34,158622,158623],{"class":40},"total ",[34,158625,221],{"class":55},[34,158627,158628],{"class":40}," price ",[34,158630,2252],{"class":55},[34,158632,158633],{"class":40}," count ",[34,158635,2252],{"class":55},[34,158637,158638],{"class":40}," discount\n",[34,158640,158641],{"class":36,"line":518},[34,158642,1475],{"emptyLinePlaceholder":1474},[34,158644,158645,158647,158649,158651,158654,158656,158658,158660,158662,158664],{"class":36,"line":524},[34,158646,723],{"class":44},[34,158648,286],{"class":40},[34,158650,1867],{"class":55},[34,158652,158653],{"class":504},"\"商品单价:",[34,158655,2687],{"class":44},[34,158657,81452],{"class":40},[34,158659,158522],{"class":55},[34,158661,2737],{"class":44},[34,158663,2058],{"class":504},[34,158665,101],{"class":40},[34,158667,158668,158670,158672,158674,158677,158679,158681,158683,158685],{"class":36,"line":530},[34,158669,723],{"class":44},[34,158671,286],{"class":40},[34,158673,1867],{"class":55},[34,158675,158676],{"class":504},"\"购买数量:",[34,158678,2687],{"class":44},[34,158680,86070],{"class":40},[34,158682,2737],{"class":44},[34,158684,2058],{"class":504},[34,158686,101],{"class":40},[34,158688,158689,158691,158693,158695,158698,158700,158703,158705,158707],{"class":36,"line":624},[34,158690,723],{"class":44},[34,158692,286],{"class":40},[34,158694,1867],{"class":55},[34,158696,158697],{"class":504},"\"折扣:",[34,158699,2687],{"class":44},[34,158701,158702],{"class":40},"discount",[34,158704,2737],{"class":44},[34,158706,2058],{"class":504},[34,158708,101],{"class":40},[34,158710,158711,158713,158715,158717,158720,158722,158725,158727,158729,158731],{"class":36,"line":630},[34,158712,723],{"class":44},[34,158714,286],{"class":40},[34,158716,1867],{"class":55},[34,158718,158719],{"class":504},"\"应付金额:",[34,158721,2687],{"class":44},[34,158723,158724],{"class":40},"total",[34,158726,158522],{"class":55},[34,158728,2737],{"class":44},[34,158730,158375],{"class":504},[34,158732,101],{"class":40},[14,158734,158736],{"id":158735},"_213-易错点","2.13 易错点",[1772,158738,158739,158744,158750,158758,158761],{},[1775,158740,158741,158743],{},[31,158742,158386],{}," 的结果是字符串，做运算前要转换。",[1775,158745,158746,158747,30031],{},"字符串拼接时，数字要先 ",[31,158748,158749],{},"str()",[1775,158751,158752,158754,158755,158757],{},[31,158753,221],{}," 是赋值，",[31,158756,4602],{}," 是比较。",[1775,158759,158760],{},"Python 没有自增自减运算符。",[1775,158762,158763],{},"浮点数计算可能有精度误差：",[24,158765,158767],{"className":26,"code":158766,"language":28,"meta":29,"style":29},"print(0.1 + 0.2)\n",[31,158768,158769],{"__ignoreMap":29},[34,158770,158771,158773,158775,158777,158779,158782],{"class":36,"line":37},[34,158772,723],{"class":44},[34,158774,286],{"class":40},[34,158776,87846],{"class":44},[34,158778,47205],{"class":55},[34,158780,158781],{"class":44}," 0.2",[34,158783,101],{"class":40},[103,158785,158786,158787,158790],{},"金额计算如果要求严格，可以后续学习 ",[31,158788,158789],{},"decimal"," 模块。",[14,158792,158794],{"id":158793},"_214-本章练习","2.14 本章练习",[1772,158796,158797,158800,158803,158806,158809],{},[1775,158798,158799],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[1775,158801,158802],{},"输入圆的半径，计算面积，保留两位小数。",[1775,158804,158805],{},"输入工资和奖金，计算总收入。",[1775,158807,158808],{},"输入摄氏温度，转换为华氏温度。",[1775,158810,158811],{},"写一个 BMI 计算程序：",[24,158813,158816],{"className":158814,"code":158815,"language":6838,"meta":29},[6836],"BMI = 体重kg \u002F 身高m ** 2\n",[31,158817,158815],{"__ignoreMap":29},[1711,158819,158820],{},"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":29,"searchDepth":165,"depth":165,"links":158822},[158823,158824,158825,158826,158827,158828,158829,158835,158836,158837,158842,158843,158844,158845],{"id":156384,"depth":165,"text":156385},{"id":156493,"depth":165,"text":156494},{"id":156664,"depth":165,"text":156665},{"id":156741,"depth":165,"text":156742},{"id":52370,"depth":165,"text":52371},{"id":157047,"depth":165,"text":157048},{"id":157273,"depth":165,"text":157274,"children":158830},[158831,158832,158833,158834],{"id":157277,"depth":171,"text":157278},{"id":157471,"depth":171,"text":157472},{"id":157559,"depth":171,"text":157560},{"id":157665,"depth":171,"text":157666},{"id":157774,"depth":165,"text":157775},{"id":157932,"depth":165,"text":157933},{"id":157997,"depth":165,"text":157998,"children":158838},[158839,158840,158841],{"id":158001,"depth":171,"text":158002},{"id":158146,"depth":171,"text":158147},{"id":158249,"depth":171,"text":158250},{"id":158380,"depth":165,"text":158381},{"id":158532,"depth":165,"text":158533},{"id":158735,"depth":165,"text":158736},{"id":158793,"depth":165,"text":158794},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156376,"description":1744},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158852,"title":158853,"body":158854,"description":1744,"extension":1745,"meta":160490,"navigation":1474,"path":160491,"seo":160492,"stem":160493,"__hash__":160494},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158855,"toc":160471},[158856,158859,158863,158866,158881,158884,158912,158916,158966,158968,158984,158987,159013,159016,159020,159087,159090,159106,159110,159113,159231,159234,159241,159290,159296,159300,159303,159416,159419,159423,159427,159430,159480,159484,159487,159537,159541,159544,159582,159586,159589,159635,159638,159673,159677,159682,159685,159731,159733,159800,159804,159810,159921,159930,159934,159936,159947,159949,160115,160119,160121,160135,160137,160351,160355,160374,160391,160394,160440,160444,160468],[10,158857,158853],{"id":158858},"_3-判断语句",[14,158860,158862],{"id":158861},"_31-布尔值","3.1 布尔值",[103,158864,158865],{},"判断语句依赖布尔值：",[24,158867,158869],{"className":26,"code":158868,"language":28,"meta":29,"style":29},"True\nFalse\n",[31,158870,158871,158876],{"__ignoreMap":29},[34,158872,158873],{"class":36,"line":37},[34,158874,158875],{"class":44},"True\n",[34,158877,158878],{"class":36,"line":165},[34,158879,158880],{"class":44},"False\n",[103,158882,158883],{},"比较表达式会产生布尔值：",[24,158885,158887],{"className":26,"code":158886,"language":28,"meta":29,"style":29},"age = 18\nprint(age >= 18)  # True\n",[31,158888,158889,158897],{"__ignoreMap":29},[34,158890,158891,158893,158895],{"class":36,"line":37},[34,158892,147909],{"class":40},[34,158894,221],{"class":55},[34,158896,147914],{"class":44},[34,158898,158899,158901,158903,158905,158907,158909],{"class":36,"line":165},[34,158900,723],{"class":44},[34,158902,157131],{"class":40},[34,158904,3364],{"class":55},[34,158906,157648],{"class":44},[34,158908,47447],{"class":40},[34,158910,158911],{"class":161},"# True\n",[14,158913,158915],{"id":158914},"_32-if基础语法","3.2 if基础语法",[24,158917,158919],{"className":26,"code":158918,"language":28,"meta":29,"style":29},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[31,158920,158921,158939,158943,158955],{"__ignoreMap":29},[34,158922,158923,158925,158927,158929,158931,158933,158935,158937],{"class":36,"line":37},[34,158924,147909],{"class":40},[34,158926,221],{"class":55},[34,158928,4036],{"class":44},[34,158930,286],{"class":40},[34,158932,55460],{"class":44},[34,158934,286],{"class":40},[34,158936,153757],{"class":504},[34,158938,296],{"class":40},[34,158940,158941],{"class":36,"line":165},[34,158942,1475],{"emptyLinePlaceholder":1474},[34,158944,158945,158947,158949,158951,158953],{"class":36,"line":171},[34,158946,3189],{"class":55},[34,158948,17353],{"class":40},[34,158950,3364],{"class":55},[34,158952,157648],{"class":44},[34,158954,5392],{"class":40},[34,158956,158957,158959,158961,158964],{"class":36,"line":182},[34,158958,32941],{"class":44},[34,158960,286],{"class":40},[34,158962,158963],{"class":504},"\"可以进入网吧\"",[34,158965,101],{"class":40},[103,158967,10675],{},[1772,158969,158970,158975,158978,158981],{},[1775,158971,158972,158974],{},[31,158973,3189],{}," 后面是条件表达式。",[1775,158976,158977],{},"条件后面必须写冒号。",[1775,158979,158980],{},"条件成立时执行缩进代码块。",[1775,158982,158983],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[103,158985,158986],{},"错误示例：",[24,158988,158990],{"className":26,"code":158989,"language":28,"meta":29,"style":29},"if age >= 18\n    print(\"可以进入\")\n",[31,158991,158992,159002],{"__ignoreMap":29},[34,158993,158994,158996,158998,159000],{"class":36,"line":37},[34,158995,3189],{"class":55},[34,158997,17353],{"class":40},[34,158999,3364],{"class":55},[34,159001,147914],{"class":44},[34,159003,159004,159006,159008,159011],{"class":36,"line":165},[34,159005,32941],{"class":44},[34,159007,286],{"class":40},[34,159009,159010],{"class":504},"\"可以进入\"",[34,159012,101],{"class":40},[103,159014,159015],{},"缺少冒号。",[14,159017,159019],{"id":159018},"_33-if-else","3.3 if else",[24,159021,159023],{"className":26,"code":159022,"language":28,"meta":29,"style":29},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[31,159024,159025,159043,159047,159059,159070,159076],{"__ignoreMap":29},[34,159026,159027,159029,159031,159033,159035,159037,159039,159041],{"class":36,"line":37},[34,159028,147909],{"class":40},[34,159030,221],{"class":55},[34,159032,4036],{"class":44},[34,159034,286],{"class":40},[34,159036,55460],{"class":44},[34,159038,286],{"class":40},[34,159040,153757],{"class":504},[34,159042,296],{"class":40},[34,159044,159045],{"class":36,"line":165},[34,159046,1475],{"emptyLinePlaceholder":1474},[34,159048,159049,159051,159053,159055,159057],{"class":36,"line":171},[34,159050,3189],{"class":55},[34,159052,17353],{"class":40},[34,159054,3364],{"class":55},[34,159056,157648],{"class":44},[34,159058,5392],{"class":40},[34,159060,159061,159063,159065,159068],{"class":36,"line":182},[34,159062,32941],{"class":44},[34,159064,286],{"class":40},[34,159066,159067],{"class":504},"\"成年人\"",[34,159069,101],{"class":40},[34,159071,159072,159074],{"class":36,"line":188},[34,159073,3355],{"class":55},[34,159075,5392],{"class":40},[34,159077,159078,159080,159082,159085],{"class":36,"line":518},[34,159079,32941],{"class":44},[34,159081,286],{"class":40},[34,159083,159084],{"class":504},"\"未成年人\"",[34,159086,101],{"class":40},[103,159088,159089],{},"执行逻辑：",[1772,159091,159092,159098,159103],{},[1775,159093,159094,159095,159097],{},"条件成立，执行 ",[31,159096,3189],{}," 代码块。",[1775,159099,159100,159101,159097],{},"条件不成立，执行 ",[31,159102,3355],{},[1775,159104,159105],{},"两个代码块只会执行其中一个。",[14,159107,159109],{"id":159108},"_34-if-elif-else","3.4 if elif else",[103,159111,159112],{},"多条件判断：",[24,159114,159116],{"className":26,"code":159115,"language":28,"meta":29,"style":29},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[31,159117,159118,159136,159140,159154,159165,159179,159190,159203,159214,159220],{"__ignoreMap":29},[34,159119,159120,159122,159124,159126,159128,159130,159132,159134],{"class":36,"line":37},[34,159121,156721],{"class":40},[34,159123,221],{"class":55},[34,159125,4036],{"class":44},[34,159127,286],{"class":40},[34,159129,55460],{"class":44},[34,159131,286],{"class":40},[34,159133,153772],{"class":504},[34,159135,296],{"class":40},[34,159137,159138],{"class":36,"line":165},[34,159139,1475],{"emptyLinePlaceholder":1474},[34,159141,159142,159144,159147,159149,159152],{"class":36,"line":171},[34,159143,3189],{"class":55},[34,159145,159146],{"class":40}," score ",[34,159148,3364],{"class":55},[34,159150,159151],{"class":44}," 90",[34,159153,5392],{"class":40},[34,159155,159156,159158,159160,159163],{"class":36,"line":182},[34,159157,32941],{"class":44},[34,159159,286],{"class":40},[34,159161,159162],{"class":504},"\"优秀\"",[34,159164,101],{"class":40},[34,159166,159167,159170,159172,159174,159177],{"class":36,"line":188},[34,159168,159169],{"class":55},"elif",[34,159171,159146],{"class":40},[34,159173,3364],{"class":55},[34,159175,159176],{"class":44}," 80",[34,159178,5392],{"class":40},[34,159180,159181,159183,159185,159188],{"class":36,"line":518},[34,159182,32941],{"class":44},[34,159184,286],{"class":40},[34,159186,159187],{"class":504},"\"良好\"",[34,159189,101],{"class":40},[34,159191,159192,159194,159196,159198,159201],{"class":36,"line":524},[34,159193,159169],{"class":55},[34,159195,159146],{"class":40},[34,159197,3364],{"class":55},[34,159199,159200],{"class":44}," 60",[34,159202,5392],{"class":40},[34,159204,159205,159207,159209,159212],{"class":36,"line":530},[34,159206,32941],{"class":44},[34,159208,286],{"class":40},[34,159210,159211],{"class":504},"\"及格\"",[34,159213,101],{"class":40},[34,159215,159216,159218],{"class":36,"line":624},[34,159217,3355],{"class":55},[34,159219,5392],{"class":40},[34,159221,159222,159224,159226,159229],{"class":36,"line":630},[34,159223,32941],{"class":44},[34,159225,286],{"class":40},[34,159227,159228],{"class":504},"\"不及格\"",[34,159230,101],{"class":40},[103,159232,159233],{},"注意判断顺序很重要。",[103,159235,159236,159237,159240],{},"如果把 ",[31,159238,159239],{},"score >= 60"," 放在最前面：",[24,159242,159244],{"className":26,"code":159243,"language":28,"meta":29,"style":29},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[31,159245,159246,159258,159268,159280],{"__ignoreMap":29},[34,159247,159248,159250,159252,159254,159256],{"class":36,"line":37},[34,159249,3189],{"class":55},[34,159251,159146],{"class":40},[34,159253,3364],{"class":55},[34,159255,159200],{"class":44},[34,159257,5392],{"class":40},[34,159259,159260,159262,159264,159266],{"class":36,"line":165},[34,159261,32941],{"class":44},[34,159263,286],{"class":40},[34,159265,159211],{"class":504},[34,159267,101],{"class":40},[34,159269,159270,159272,159274,159276,159278],{"class":36,"line":171},[34,159271,159169],{"class":55},[34,159273,159146],{"class":40},[34,159275,3364],{"class":55},[34,159277,159151],{"class":44},[34,159279,5392],{"class":40},[34,159281,159282,159284,159286,159288],{"class":36,"line":182},[34,159283,32941],{"class":44},[34,159285,286],{"class":40},[34,159287,159162],{"class":504},[34,159289,101],{"class":40},[103,159291,159292,159293,159295],{},"成绩 95 会先满足 ",[31,159294,159239],{},"，后面的优秀分支就不会执行。",[14,159297,159299],{"id":159298},"_35-判断语句嵌套","3.5 判断语句嵌套",[103,159301,159302],{},"嵌套判断就是在一个判断内部再写判断。",[24,159304,159306],{"className":26,"code":159305,"language":28,"meta":29,"style":29},"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",[31,159307,159308,159326,159341,159345,159357,159371,159381,159388,159399,159405],{"__ignoreMap":29},[34,159309,159310,159312,159314,159316,159318,159320,159322,159324],{"class":36,"line":37},[34,159311,147909],{"class":40},[34,159313,221],{"class":55},[34,159315,4036],{"class":44},[34,159317,286],{"class":40},[34,159319,55460],{"class":44},[34,159321,286],{"class":40},[34,159323,153757],{"class":504},[34,159325,296],{"class":40},[34,159327,159328,159330,159332,159334,159336,159339],{"class":36,"line":165},[34,159329,157724],{"class":40},[34,159331,221],{"class":55},[34,159333,62244],{"class":44},[34,159335,286],{"class":40},[34,159337,159338],{"class":504},"\"是否有票(y\u002Fn):\"",[34,159340,101],{"class":40},[34,159342,159343],{"class":36,"line":171},[34,159344,1475],{"emptyLinePlaceholder":1474},[34,159346,159347,159349,159351,159353,159355],{"class":36,"line":182},[34,159348,3189],{"class":55},[34,159350,17353],{"class":40},[34,159352,3364],{"class":55},[34,159354,157648],{"class":44},[34,159356,5392],{"class":40},[34,159358,159359,159361,159364,159366,159369],{"class":36,"line":188},[34,159360,4754],{"class":55},[34,159362,159363],{"class":40}," has_ticket ",[34,159365,4602],{"class":55},[34,159367,159368],{"class":504}," \"y\"",[34,159370,5392],{"class":40},[34,159372,159373,159375,159377,159379],{"class":36,"line":518},[34,159374,34092],{"class":44},[34,159376,286],{"class":40},[34,159378,159010],{"class":504},[34,159380,101],{"class":40},[34,159382,159383,159386],{"class":36,"line":524},[34,159384,159385],{"class":55},"    else",[34,159387,5392],{"class":40},[34,159389,159390,159392,159394,159397],{"class":36,"line":530},[34,159391,34092],{"class":44},[34,159393,286],{"class":40},[34,159395,159396],{"class":504},"\"请先买票\"",[34,159398,101],{"class":40},[34,159400,159401,159403],{"class":36,"line":624},[34,159402,3355],{"class":55},[34,159404,5392],{"class":40},[34,159406,159407,159409,159411,159414],{"class":36,"line":630},[34,159408,32941],{"class":44},[34,159410,286],{"class":40},[34,159412,159413],{"class":504},"\"未成年人禁止进入\"",[34,159415,101],{"class":40},[103,159417,159418],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159420,159422],{"id":159421},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[19,159424,159426],{"id":159425},"_361-and","3.6.1 and",[103,159428,159429],{},"两个条件都成立才成立。",[24,159431,159433],{"className":26,"code":159432,"language":28,"meta":29,"style":29},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[31,159434,159435,159443,159451,159455,159470],{"__ignoreMap":29},[34,159436,159437,159439,159441],{"class":36,"line":37},[34,159438,147909],{"class":40},[34,159440,221],{"class":55},[34,159442,89701],{"class":44},[34,159444,159445,159447,159449],{"class":36,"line":165},[34,159446,157724],{"class":40},[34,159448,221],{"class":55},[34,159450,154962],{"class":44},[34,159452,159453],{"class":36,"line":171},[34,159454,1475],{"emptyLinePlaceholder":1474},[34,159456,159457,159459,159461,159463,159465,159467],{"class":36,"line":182},[34,159458,3189],{"class":55},[34,159460,17353],{"class":40},[34,159462,3364],{"class":55},[34,159464,157648],{"class":44},[34,159466,121792],{"class":55},[34,159468,159469],{"class":40}," has_ticket:\n",[34,159471,159472,159474,159476,159478],{"class":36,"line":188},[34,159473,32941],{"class":44},[34,159475,286],{"class":40},[34,159477,159010],{"class":504},[34,159479,101],{"class":40},[19,159481,159483],{"id":159482},"_362-or","3.6.2 or",[103,159485,159486],{},"只要一个条件成立就成立。",[24,159488,159490],{"className":26,"code":159489,"language":28,"meta":29,"style":29},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[31,159491,159492,159501,159510,159514,159526],{"__ignoreMap":29},[34,159493,159494,159497,159499],{"class":36,"line":37},[34,159495,159496],{"class":40},"is_vip ",[34,159498,221],{"class":55},[34,159500,127170],{"class":44},[34,159502,159503,159506,159508],{"class":36,"line":165},[34,159504,159505],{"class":40},"coupon ",[34,159507,221],{"class":55},[34,159509,154962],{"class":44},[34,159511,159512],{"class":36,"line":171},[34,159513,1475],{"emptyLinePlaceholder":1474},[34,159515,159516,159518,159521,159523],{"class":36,"line":182},[34,159517,3189],{"class":55},[34,159519,159520],{"class":40}," is_vip ",[34,159522,116453],{"class":55},[34,159524,159525],{"class":40}," coupon:\n",[34,159527,159528,159530,159532,159535],{"class":36,"line":188},[34,159529,32941],{"class":44},[34,159531,286],{"class":40},[34,159533,159534],{"class":504},"\"可以享受优惠\"",[34,159536,101],{"class":40},[19,159538,159540],{"id":159539},"_363-not","3.6.3 not",[103,159542,159543],{},"取反。",[24,159545,159547],{"className":26,"code":159546,"language":28,"meta":29,"style":29},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[31,159548,159549,159558,159562,159571],{"__ignoreMap":29},[34,159550,159551,159554,159556],{"class":36,"line":37},[34,159552,159553],{"class":40},"is_closed ",[34,159555,221],{"class":55},[34,159557,127170],{"class":44},[34,159559,159560],{"class":36,"line":165},[34,159561,1475],{"emptyLinePlaceholder":1474},[34,159563,159564,159566,159568],{"class":36,"line":171},[34,159565,3189],{"class":55},[34,159567,40571],{"class":55},[34,159569,159570],{"class":40}," is_closed:\n",[34,159572,159573,159575,159577,159580],{"class":36,"line":182},[34,159574,32941],{"class":44},[34,159576,286],{"class":40},[34,159578,159579],{"class":504},"\"店铺营业中\"",[34,159581,101],{"class":40},[14,159583,159585],{"id":159584},"_37-链式比较","3.7 链式比较",[103,159587,159588],{},"Python 支持链式比较：",[24,159590,159592],{"className":26,"code":159591,"language":28,"meta":29,"style":29},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[31,159593,159594,159603,159607,159624],{"__ignoreMap":29},[34,159595,159596,159598,159600],{"class":36,"line":37},[34,159597,156721],{"class":40},[34,159599,221],{"class":55},[34,159601,159602],{"class":44}," 85\n",[34,159604,159605],{"class":36,"line":165},[34,159606,1475],{"emptyLinePlaceholder":1474},[34,159608,159609,159611,159613,159616,159618,159620,159622],{"class":36,"line":171},[34,159610,3189],{"class":55},[34,159612,98],{"class":44},[34,159614,159615],{"class":55}," \u003C=",[34,159617,159146],{"class":40},[34,159619,3246],{"class":55},[34,159621,7404],{"class":44},[34,159623,5392],{"class":40},[34,159625,159626,159628,159630,159633],{"class":36,"line":182},[34,159627,32941],{"class":44},[34,159629,286],{"class":40},[34,159631,159632],{"class":504},"\"成绩合法\"",[34,159634,101],{"class":40},[103,159636,159637],{},"等价于：",[24,159639,159641],{"className":26,"code":159640,"language":28,"meta":29,"style":29},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[31,159642,159643,159663],{"__ignoreMap":29},[34,159644,159645,159647,159649,159651,159653,159655,159657,159659,159661],{"class":36,"line":37},[34,159646,3189],{"class":55},[34,159648,159146],{"class":40},[34,159650,3364],{"class":55},[34,159652,98],{"class":44},[34,159654,121792],{"class":55},[34,159656,159146],{"class":40},[34,159658,3246],{"class":55},[34,159660,7404],{"class":44},[34,159662,5392],{"class":40},[34,159664,159665,159667,159669,159671],{"class":36,"line":165},[34,159666,32941],{"class":44},[34,159668,286],{"class":40},[34,159670,159632],{"class":504},[34,159672,101],{"class":40},[14,159674,159676],{"id":159675},"_38-真值和假值","3.8 真值和假值",[103,159678,117830,159679,159681],{},[31,159680,3189],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[103,159683,159684],{},"假值：",[24,159686,159688],{"className":26,"code":159687,"language":28,"meta":29,"style":29},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[31,159689,159690,159694,159699,159703,159707,159712,159716,159720,159725],{"__ignoreMap":29},[34,159691,159692],{"class":36,"line":37},[34,159693,158880],{"class":44},[34,159695,159696],{"class":36,"line":165},[34,159697,159698],{"class":44},"None\n",[34,159700,159701],{"class":36,"line":171},[34,159702,4738],{"class":44},[34,159704,159705],{"class":36,"line":182},[34,159706,33983],{"class":44},[34,159708,159709],{"class":36,"line":188},[34,159710,159711],{"class":504},"\"\"\n",[34,159713,159714],{"class":36,"line":518},[34,159715,33998],{"class":40},[34,159717,159718],{"class":36,"line":524},[34,159719,3630],{"class":40},[34,159721,159722],{"class":36,"line":530},[34,159723,159724],{"class":40},"{}\n",[34,159726,159727,159729],{"class":36,"line":624},[34,159728,156653],{"class":44},[34,159730,3630],{"class":40},[103,159732,16781],{},[24,159734,159736],{"className":26,"code":159735,"language":28,"meta":29,"style":29},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[31,159737,159738,159752,159756,159763,159783,159789],{"__ignoreMap":29},[34,159739,159740,159742,159744,159746,159748,159750],{"class":36,"line":37},[34,159741,147899],{"class":40},[34,159743,221],{"class":55},[34,159745,62244],{"class":44},[34,159747,286],{"class":40},[34,159749,153742],{"class":504},[34,159751,101],{"class":40},[34,159753,159754],{"class":36,"line":165},[34,159755,1475],{"emptyLinePlaceholder":1474},[34,159757,159758,159760],{"class":36,"line":171},[34,159759,3189],{"class":55},[34,159761,159762],{"class":40}," name:\n",[34,159764,159765,159767,159769,159771,159773,159775,159777,159779,159781],{"class":36,"line":182},[34,159766,32941],{"class":44},[34,159768,286],{"class":40},[34,159770,1867],{"class":55},[34,159772,158417],{"class":504},[34,159774,2687],{"class":44},[34,159776,81447],{"class":40},[34,159778,2737],{"class":44},[34,159780,2058],{"class":504},[34,159782,101],{"class":40},[34,159784,159785,159787],{"class":36,"line":188},[34,159786,3355],{"class":55},[34,159788,5392],{"class":40},[34,159790,159791,159793,159795,159798],{"class":36,"line":518},[34,159792,32941],{"class":44},[34,159794,286],{"class":40},[34,159796,159797],{"class":504},"\"姓名不能为空\"",[34,159799,101],{"class":40},[14,159801,159803],{"id":159802},"_39-match语句","3.9 match语句",[103,159805,159806,159807,159809],{},"Python 3.10 开始支持 ",[31,159808,72904],{},"。它适合处理固定选项。",[24,159811,159813],{"className":26,"code":159812,"language":28,"meta":29,"style":29},"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",[31,159814,159815,159831,159835,159842,159852,159863,159872,159883,159892,159903,159910],{"__ignoreMap":29},[34,159816,159817,159820,159822,159824,159826,159829],{"class":36,"line":37},[34,159818,159819],{"class":40},"command ",[34,159821,221],{"class":55},[34,159823,62244],{"class":44},[34,159825,286],{"class":40},[34,159827,159828],{"class":504},"\"请输入命令:\"",[34,159830,101],{"class":40},[34,159832,159833],{"class":36,"line":165},[34,159834,1475],{"emptyLinePlaceholder":1474},[34,159836,159837,159839],{"class":36,"line":171},[34,159838,72904],{"class":55},[34,159840,159841],{"class":40}," command:\n",[34,159843,159844,159847,159850],{"class":36,"line":182},[34,159845,159846],{"class":55},"    case",[34,159848,159849],{"class":504}," \"start\"",[34,159851,5392],{"class":40},[34,159853,159854,159856,159858,159861],{"class":36,"line":188},[34,159855,34092],{"class":44},[34,159857,286],{"class":40},[34,159859,159860],{"class":504},"\"启动\"",[34,159862,101],{"class":40},[34,159864,159865,159867,159870],{"class":36,"line":518},[34,159866,159846],{"class":55},[34,159868,159869],{"class":504}," \"stop\"",[34,159871,5392],{"class":40},[34,159873,159874,159876,159878,159881],{"class":36,"line":524},[34,159875,34092],{"class":44},[34,159877,286],{"class":40},[34,159879,159880],{"class":504},"\"停止\"",[34,159882,101],{"class":40},[34,159884,159885,159887,159890],{"class":36,"line":530},[34,159886,159846],{"class":55},[34,159888,159889],{"class":504}," \"restart\"",[34,159891,5392],{"class":40},[34,159893,159894,159896,159898,159901],{"class":36,"line":624},[34,159895,34092],{"class":44},[34,159897,286],{"class":40},[34,159899,159900],{"class":504},"\"重启\"",[34,159902,101],{"class":40},[34,159904,159905,159907],{"class":36,"line":630},[34,159906,159846],{"class":55},[34,159908,159909],{"class":40}," _:\n",[34,159911,159912,159914,159916,159919],{"class":36,"line":636},[34,159913,34092],{"class":44},[34,159915,286],{"class":40},[34,159917,159918],{"class":504},"\"未知命令\"",[34,159920,101],{"class":40},[103,159922,159923,159924,159926,159927,159929],{},"入门阶段掌握 ",[31,159925,156021],{}," 更重要，",[31,159928,72904],{}," 可以作为补充。",[14,159931,159933],{"id":159932},"_310-小案例成绩等级","3.10 小案例：成绩等级",[103,159935,124655],{},[1772,159937,159938,159941,159944],{},[1775,159939,159940],{},"输入成绩。",[1775,159942,159943],{},"判断成绩是否合法。",[1775,159945,159946],{},"输出等级。",[103,159948,11685],{},[24,159950,159952],{"className":26,"code":159951,"language":28,"meta":29,"style":29},"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",[31,159953,159954,159972,159976,159994,160005,160017,160028,160040,160051,160064,160075,160087,160098,160104],{"__ignoreMap":29},[34,159955,159956,159958,159960,159962,159964,159966,159968,159970],{"class":36,"line":37},[34,159957,156721],{"class":40},[34,159959,221],{"class":55},[34,159961,111160],{"class":44},[34,159963,286],{"class":40},[34,159965,55460],{"class":44},[34,159967,286],{"class":40},[34,159969,153772],{"class":504},[34,159971,296],{"class":40},[34,159973,159974],{"class":36,"line":165},[34,159975,1475],{"emptyLinePlaceholder":1474},[34,159977,159978,159980,159982,159984,159986,159988,159990,159992],{"class":36,"line":171},[34,159979,3189],{"class":55},[34,159981,40571],{"class":55},[34,159983,98],{"class":44},[34,159985,159615],{"class":55},[34,159987,159146],{"class":40},[34,159989,3246],{"class":55},[34,159991,7404],{"class":44},[34,159993,5392],{"class":40},[34,159995,159996,159998,160000,160003],{"class":36,"line":182},[34,159997,32941],{"class":44},[34,159999,286],{"class":40},[34,160001,160002],{"class":504},"\"成绩不合法\"",[34,160004,101],{"class":40},[34,160006,160007,160009,160011,160013,160015],{"class":36,"line":188},[34,160008,159169],{"class":55},[34,160010,159146],{"class":40},[34,160012,3364],{"class":55},[34,160014,159151],{"class":44},[34,160016,5392],{"class":40},[34,160018,160019,160021,160023,160026],{"class":36,"line":518},[34,160020,32941],{"class":44},[34,160022,286],{"class":40},[34,160024,160025],{"class":504},"\"等级:A\"",[34,160027,101],{"class":40},[34,160029,160030,160032,160034,160036,160038],{"class":36,"line":524},[34,160031,159169],{"class":55},[34,160033,159146],{"class":40},[34,160035,3364],{"class":55},[34,160037,159176],{"class":44},[34,160039,5392],{"class":40},[34,160041,160042,160044,160046,160049],{"class":36,"line":530},[34,160043,32941],{"class":44},[34,160045,286],{"class":40},[34,160047,160048],{"class":504},"\"等级:B\"",[34,160050,101],{"class":40},[34,160052,160053,160055,160057,160059,160062],{"class":36,"line":624},[34,160054,159169],{"class":55},[34,160056,159146],{"class":40},[34,160058,3364],{"class":55},[34,160060,160061],{"class":44}," 70",[34,160063,5392],{"class":40},[34,160065,160066,160068,160070,160073],{"class":36,"line":630},[34,160067,32941],{"class":44},[34,160069,286],{"class":40},[34,160071,160072],{"class":504},"\"等级:C\"",[34,160074,101],{"class":40},[34,160076,160077,160079,160081,160083,160085],{"class":36,"line":636},[34,160078,159169],{"class":55},[34,160080,159146],{"class":40},[34,160082,3364],{"class":55},[34,160084,159200],{"class":44},[34,160086,5392],{"class":40},[34,160088,160089,160091,160093,160096],{"class":36,"line":1513},[34,160090,32941],{"class":44},[34,160092,286],{"class":40},[34,160094,160095],{"class":504},"\"等级:D\"",[34,160097,101],{"class":40},[34,160099,160100,160102],{"class":36,"line":1519},[34,160101,3355],{"class":55},[34,160103,5392],{"class":40},[34,160105,160106,160108,160110,160113],{"class":36,"line":3283},[34,160107,32941],{"class":44},[34,160109,286],{"class":40},[34,160111,160112],{"class":504},"\"等级:E\"",[34,160114,101],{"class":40},[14,160116,160118],{"id":160117},"_311-小案例会员折扣","3.11 小案例：会员折扣",[103,160120,124655],{},[1772,160122,160123,160126,160129,160132],{},[1775,160124,160125],{},"输入消费金额。",[1775,160127,160128],{},"输入会员等级，普通、银卡、金卡。",[1775,160130,160131],{},"普通不打折，银卡 9 折，金卡 8 折。",[1775,160133,160134],{},"满 500 再减 50。",[103,160136,11685],{},[24,160138,160140],{"className":26,"code":160139,"language":28,"meta":29,"style":29},"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",[31,160141,160142,160162,160178,160182,160190,160194,160208,160218,160231,160240,160253,160261,160267,160278,160282,160296,160300,160314,160324,160328],{"__ignoreMap":29},[34,160143,160144,160147,160149,160151,160153,160155,160157,160160],{"class":36,"line":37},[34,160145,160146],{"class":40},"amount ",[34,160148,221],{"class":55},[34,160150,111160],{"class":44},[34,160152,286],{"class":40},[34,160154,55460],{"class":44},[34,160156,286],{"class":40},[34,160158,160159],{"class":504},"\"请输入消费金额:\"",[34,160161,296],{"class":40},[34,160163,160164,160167,160169,160171,160173,160176],{"class":36,"line":165},[34,160165,160166],{"class":40},"level ",[34,160168,221],{"class":55},[34,160170,62244],{"class":44},[34,160172,286],{"class":40},[34,160174,160175],{"class":504},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[34,160177,101],{"class":40},[34,160179,160180],{"class":36,"line":171},[34,160181,1475],{"emptyLinePlaceholder":1474},[34,160183,160184,160186,160188],{"class":36,"line":182},[34,160185,158599],{"class":40},[34,160187,221],{"class":55},[34,160189,57338],{"class":44},[34,160191,160192],{"class":36,"line":188},[34,160193,1475],{"emptyLinePlaceholder":1474},[34,160195,160196,160198,160201,160203,160206],{"class":36,"line":518},[34,160197,3189],{"class":55},[34,160199,160200],{"class":40}," level ",[34,160202,4602],{"class":55},[34,160204,160205],{"class":504}," \"银卡\"",[34,160207,5392],{"class":40},[34,160209,160210,160213,160215],{"class":36,"line":524},[34,160211,160212],{"class":40},"    discount ",[34,160214,221],{"class":55},[34,160216,160217],{"class":44}," 0.9\n",[34,160219,160220,160222,160224,160226,160229],{"class":36,"line":530},[34,160221,159169],{"class":55},[34,160223,160200],{"class":40},[34,160225,4602],{"class":55},[34,160227,160228],{"class":504}," \"金卡\"",[34,160230,5392],{"class":40},[34,160232,160233,160235,160237],{"class":36,"line":624},[34,160234,160212],{"class":40},[34,160236,221],{"class":55},[34,160238,160239],{"class":44}," 0.8\n",[34,160241,160242,160244,160246,160248,160251],{"class":36,"line":630},[34,160243,159169],{"class":55},[34,160245,160200],{"class":40},[34,160247,4602],{"class":55},[34,160249,160250],{"class":504}," \"普通\"",[34,160252,5392],{"class":40},[34,160254,160255,160257,160259],{"class":36,"line":636},[34,160256,160212],{"class":40},[34,160258,221],{"class":55},[34,160260,57338],{"class":44},[34,160262,160263,160265],{"class":36,"line":1513},[34,160264,3355],{"class":55},[34,160266,5392],{"class":40},[34,160268,160269,160271,160273,160276],{"class":36,"line":1519},[34,160270,32941],{"class":44},[34,160272,286],{"class":40},[34,160274,160275],{"class":504},"\"会员等级输入错误，按普通会员计算\"",[34,160277,101],{"class":40},[34,160279,160280],{"class":36,"line":3283},[34,160281,1475],{"emptyLinePlaceholder":1474},[34,160283,160284,160287,160289,160292,160294],{"class":36,"line":3297},[34,160285,160286],{"class":40},"pay ",[34,160288,221],{"class":55},[34,160290,160291],{"class":40}," amount ",[34,160293,2252],{"class":55},[34,160295,158638],{"class":40},[34,160297,160298],{"class":36,"line":3302},[34,160299,1475],{"emptyLinePlaceholder":1474},[34,160301,160302,160304,160307,160309,160312],{"class":36,"line":3308},[34,160303,3189],{"class":55},[34,160305,160306],{"class":40}," pay ",[34,160308,3364],{"class":55},[34,160310,160311],{"class":44}," 500",[34,160313,5392],{"class":40},[34,160315,160316,160319,160321],{"class":36,"line":3328},[34,160317,160318],{"class":40},"    pay ",[34,160320,151615],{"class":55},[34,160322,160323],{"class":44}," 50\n",[34,160325,160326],{"class":36,"line":3333},[34,160327,1475],{"emptyLinePlaceholder":1474},[34,160329,160330,160332,160334,160336,160338,160340,160343,160345,160347,160349],{"class":36,"line":3347},[34,160331,723],{"class":44},[34,160333,286],{"class":40},[34,160335,1867],{"class":55},[34,160337,158719],{"class":504},[34,160339,2687],{"class":44},[34,160341,160342],{"class":40},"pay",[34,160344,158522],{"class":55},[34,160346,2737],{"class":44},[34,160348,158375],{"class":504},[34,160350,101],{"class":40},[14,160352,160354],{"id":160353},"_312-易错点","3.12 易错点",[1772,160356,160357,160360,160363,160366,160371],{},[1775,160358,160359],{},"冒号不能漏。",[1775,160361,160362],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[1775,160364,160365],{},"多分支判断要注意顺序。",[1775,160367,160368,160369,30031],{},"判断相等用 ",[31,160370,4602],{},[1775,160372,160373],{},"字符串比较区分大小写：",[24,160375,160377],{"className":26,"code":160376,"language":28,"meta":29,"style":29},"\"Y\" == \"y\"  # False\n",[31,160378,160379],{"__ignoreMap":29},[34,160380,160381,160384,160386,160388],{"class":36,"line":37},[34,160382,160383],{"class":504},"\"Y\"",[34,160385,102922],{"class":55},[34,160387,159368],{"class":504},[34,160389,160390],{"class":161},"  # False\n",[103,160392,160393],{},"可转换后再判断：",[24,160395,160397],{"className":26,"code":160396,"language":28,"meta":29,"style":29},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[31,160398,160399,160416,160429],{"__ignoreMap":29},[34,160400,160401,160404,160406,160408,160410,160413],{"class":36,"line":37},[34,160402,160403],{"class":40},"answer ",[34,160405,221],{"class":55},[34,160407,62244],{"class":44},[34,160409,286],{"class":40},[34,160411,160412],{"class":504},"\"是否继续(y\u002Fn):\"",[34,160414,160415],{"class":40},").lower()\n",[34,160417,160418,160420,160423,160425,160427],{"class":36,"line":165},[34,160419,3189],{"class":55},[34,160421,160422],{"class":40}," answer ",[34,160424,4602],{"class":55},[34,160426,159368],{"class":504},[34,160428,5392],{"class":40},[34,160430,160431,160433,160435,160438],{"class":36,"line":171},[34,160432,32941],{"class":44},[34,160434,286],{"class":40},[34,160436,160437],{"class":504},"\"继续\"",[34,160439,101],{"class":40},[14,160441,160443],{"id":160442},"_313-本章练习","3.13 本章练习",[1772,160445,160446,160449,160452,160455,160465],{},[1775,160447,160448],{},"输入年龄，判断是否成年。",[1775,160450,160451],{},"输入年份，判断是否为闰年。",[1775,160453,160454],{},"输入三个数字，输出最大值。",[1775,160456,160457,160458,160461,160462,160464],{},"写登录判断：用户名是 ",[31,160459,160460],{},"admin"," 且密码是 ",[31,160463,16730],{}," 才登录成功。",[1775,160466,160467],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1711,160469,160470],{},"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":29,"searchDepth":165,"depth":165,"links":160472},[160473,160474,160475,160476,160477,160478,160483,160484,160485,160486,160487,160488,160489],{"id":158861,"depth":165,"text":158862},{"id":158914,"depth":165,"text":158915},{"id":159018,"depth":165,"text":159019},{"id":159108,"depth":165,"text":159109},{"id":159298,"depth":165,"text":159299},{"id":159421,"depth":165,"text":159422,"children":160479},[160480,160481,160482],{"id":159425,"depth":171,"text":159426},{"id":159482,"depth":171,"text":159483},{"id":159539,"depth":171,"text":159540},{"id":159584,"depth":165,"text":159585},{"id":159675,"depth":165,"text":159676},{"id":159802,"depth":165,"text":159803},{"id":159932,"depth":165,"text":159933},{"id":160117,"depth":165,"text":160118},{"id":160353,"depth":165,"text":160354},{"id":160442,"depth":165,"text":160443},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158853,"description":1744},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160496,"title":160497,"body":160498,"description":1744,"extension":1745,"meta":162267,"navigation":1474,"path":162268,"seo":162269,"stem":162270,"__hash__":162271},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160499,"toc":162247},[160500,160503,160507,160513,160516,160533,160537,160539,160556,160558,160603,160605,160622,160626,160629,160695,160698,160716,160720,160881,160890,160894,160898,160903,160950,160952,160958,160962,160967,161014,161016,161022,161026,161031,161067,161070,161117,161121,161127,161185,161190,161221,161226,161230,161285,161288,161360,161363,161422,161426,161429,161504,161507,161511,161617,161620,161646,161650,161662,161731,161734,161826,161830,161832,161843,161845,161975,161979,162181,162189,162193,162223,162227,162244],[10,160501,160497],{"id":160502},"_4-循环语句",[14,160504,160506],{"id":160505},"_41-为什么需要循环","4.1 为什么需要循环",[103,160508,160509,160510,160512],{},"如果要输出 1 到 100，不应该写 100 行 ",[31,160511,147835],{},"，而应该用循环。",[103,160514,160515],{},"循环适合处理重复任务：",[1772,160517,160518,160521,160524,160527,160530],{},[1775,160519,160520],{},"重复输出。",[1775,160522,160523],{},"重复输入。",[1775,160525,160526],{},"遍历数据。",[1775,160528,160529],{},"持续执行菜单。",[1775,160531,160532],{},"批量处理文件或数据。",[14,160534,160536],{"id":160535},"_42-while循环","4.2 while循环",[103,160538,6832],{},[24,160540,160542],{"className":26,"code":160541,"language":28,"meta":29,"style":29},"while 条件:\n    循环体\n",[31,160543,160544,160551],{"__ignoreMap":29},[34,160545,160546,160548],{"class":36,"line":37},[34,160547,110026],{"class":55},[34,160549,160550],{"class":40}," 条件:\n",[34,160552,160553],{"class":36,"line":165},[34,160554,160555],{"class":40},"    循环体\n",[103,160557,16781],{},[24,160559,160561],{"className":26,"code":160560,"language":28,"meta":29,"style":29},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[31,160562,160563,160571,160575,160587,160594],{"__ignoreMap":29},[34,160564,160565,160567,160569],{"class":36,"line":37},[34,160566,101511],{"class":40},[34,160568,221],{"class":55},[34,160570,57338],{"class":44},[34,160572,160573],{"class":36,"line":165},[34,160574,1475],{"emptyLinePlaceholder":1474},[34,160576,160577,160579,160581,160583,160585],{"class":36,"line":171},[34,160578,110026],{"class":55},[34,160580,11088],{"class":40},[34,160582,3246],{"class":55},[34,160584,3802],{"class":44},[34,160586,5392],{"class":40},[34,160588,160589,160591],{"class":36,"line":182},[34,160590,32941],{"class":44},[34,160592,160593],{"class":40},"(i)\n",[34,160595,160596,160599,160601],{"class":36,"line":188},[34,160597,160598],{"class":40},"    i ",[34,160600,11127],{"class":55},[34,160602,57338],{"class":44},[103,160604,82566],{},[1772,160606,160607,160613,160616,160619],{},[1775,160608,160609,160610,30031],{},"判断条件 ",[31,160611,160612],{},"i \u003C= 5",[1775,160614,160615],{},"条件成立，执行循环体。",[1775,160617,160618],{},"执行完后回到条件判断。",[1775,160620,160621],{},"条件不成立，退出循环。",[14,160623,160625],{"id":160624},"_43-while累加","4.3 while累加",[103,160627,160628],{},"计算 1 到 100 的和：",[24,160630,160632],{"className":26,"code":160631,"language":28,"meta":29,"style":29},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[31,160633,160634,160642,160650,160654,160666,160676,160684,160688],{"__ignoreMap":29},[34,160635,160636,160638,160640],{"class":36,"line":37},[34,160637,101511],{"class":40},[34,160639,221],{"class":55},[34,160641,57338],{"class":44},[34,160643,160644,160646,160648],{"class":36,"line":165},[34,160645,158623],{"class":40},[34,160647,221],{"class":55},[34,160649,48972],{"class":44},[34,160651,160652],{"class":36,"line":171},[34,160653,1475],{"emptyLinePlaceholder":1474},[34,160655,160656,160658,160660,160662,160664],{"class":36,"line":182},[34,160657,110026],{"class":55},[34,160659,11088],{"class":40},[34,160661,3246],{"class":55},[34,160663,7404],{"class":44},[34,160665,5392],{"class":40},[34,160667,160668,160671,160673],{"class":36,"line":188},[34,160669,160670],{"class":40},"    total ",[34,160672,11127],{"class":55},[34,160674,160675],{"class":40}," i\n",[34,160677,160678,160680,160682],{"class":36,"line":518},[34,160679,160598],{"class":40},[34,160681,11127],{"class":55},[34,160683,57338],{"class":44},[34,160685,160686],{"class":36,"line":524},[34,160687,1475],{"emptyLinePlaceholder":1474},[34,160689,160690,160692],{"class":36,"line":530},[34,160691,723],{"class":44},[34,160693,160694],{"class":40},"(total)\n",[103,160696,160697],{},"核心思想：",[1772,160699,160700,160705,160710],{},[1775,160701,160702,160704],{},[31,160703,2239],{}," 控制循环次数。",[1775,160706,160707,160709],{},[31,160708,158724],{}," 保存累加结果。",[1775,160711,160712,160713,160715],{},"每轮循环都要更新 ",[31,160714,2239],{},"，否则可能死循环。",[14,160717,160719],{"id":160718},"_44-while猜数字","4.4 while猜数字",[24,160721,160723],{"className":26,"code":160722,"language":28,"meta":29,"style":29},"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",[31,160724,160725,160731,160735,160752,160760,160764,160772,160792,160801,160805,160817,160828,160838,160849,160855,160877],{"__ignoreMap":29},[34,160726,160727,160729],{"class":36,"line":37},[34,160728,32036],{"class":55},[34,160730,46967],{"class":40},[34,160732,160733],{"class":36,"line":165},[34,160734,1475],{"emptyLinePlaceholder":1474},[34,160736,160737,160739,160741,160744,160746,160748,160750],{"class":36,"line":171},[34,160738,160403],{"class":40},[34,160740,221],{"class":55},[34,160742,160743],{"class":40}," random.randint(",[34,160745,394],{"class":44},[34,160747,48],{"class":40},[34,160749,451],{"class":44},[34,160751,101],{"class":40},[34,160753,160754,160756,160758],{"class":36,"line":182},[34,160755,148054],{"class":40},[34,160757,221],{"class":55},[34,160759,48972],{"class":44},[34,160761,160762],{"class":36,"line":188},[34,160763,1475],{"emptyLinePlaceholder":1474},[34,160765,160766,160768,160770],{"class":36,"line":518},[34,160767,110026],{"class":55},[34,160769,69],{"class":44},[34,160771,5392],{"class":40},[34,160773,160774,160777,160779,160781,160783,160785,160787,160790],{"class":36,"line":524},[34,160775,160776],{"class":40},"    guess ",[34,160778,221],{"class":55},[34,160780,4036],{"class":44},[34,160782,286],{"class":40},[34,160784,55460],{"class":44},[34,160786,286],{"class":40},[34,160788,160789],{"class":504},"\"请输入1到100之间的数字:\"",[34,160791,296],{"class":40},[34,160793,160794,160797,160799],{"class":36,"line":530},[34,160795,160796],{"class":40},"    count ",[34,160798,11127],{"class":55},[34,160800,57338],{"class":44},[34,160802,160803],{"class":36,"line":624},[34,160804,1475],{"emptyLinePlaceholder":1474},[34,160806,160807,160809,160812,160814],{"class":36,"line":630},[34,160808,4754],{"class":55},[34,160810,160811],{"class":40}," guess ",[34,160813,2751],{"class":55},[34,160815,160816],{"class":40}," answer:\n",[34,160818,160819,160821,160823,160826],{"class":36,"line":636},[34,160820,34092],{"class":44},[34,160822,286],{"class":40},[34,160824,160825],{"class":504},"\"猜大了\"",[34,160827,101],{"class":40},[34,160829,160830,160832,160834,160836],{"class":36,"line":1513},[34,160831,40933],{"class":55},[34,160833,160811],{"class":40},[34,160835,2701],{"class":55},[34,160837,160816],{"class":40},[34,160839,160840,160842,160844,160847],{"class":36,"line":1519},[34,160841,34092],{"class":44},[34,160843,286],{"class":40},[34,160845,160846],{"class":504},"\"猜小了\"",[34,160848,101],{"class":40},[34,160850,160851,160853],{"class":36,"line":3283},[34,160852,159385],{"class":55},[34,160854,5392],{"class":40},[34,160856,160857,160859,160861,160863,160866,160868,160870,160872,160875],{"class":36,"line":3297},[34,160858,34092],{"class":44},[34,160860,286],{"class":40},[34,160862,1867],{"class":55},[34,160864,160865],{"class":504},"\"猜对了，一共猜了",[34,160867,2687],{"class":44},[34,160869,86070],{"class":40},[34,160871,2737],{"class":44},[34,160873,160874],{"class":504},"次\"",[34,160876,101],{"class":40},[34,160878,160879],{"class":36,"line":3302},[34,160880,33268],{"class":55},[103,160882,160883,160886,160887,160889],{},[31,160884,160885],{},"while True"," 表示无限循环，通常配合 ",[31,160888,3707],{}," 使用。",[14,160891,160893],{"id":160892},"_45-break和continue","4.5 break和continue",[19,160895,160897],{"id":160896},"_451-break","4.5.1 break",[103,160899,160900,160902],{},[31,160901,3707],{}," 直接结束整个循环。",[24,160904,160906],{"className":26,"code":160905,"language":28,"meta":29,"style":29},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[31,160907,160908,160928,160940,160944],{"__ignoreMap":29},[34,160909,160910,160912,160914,160916,160918,160920,160922,160924,160926],{"class":36,"line":37},[34,160911,4678],{"class":55},[34,160913,11088],{"class":40},[34,160915,27689],{"class":55},[34,160917,34084],{"class":44},[34,160919,286],{"class":40},[34,160921,394],{"class":44},[34,160923,48],{"class":40},[34,160925,1115],{"class":44},[34,160927,32428],{"class":40},[34,160929,160930,160932,160934,160936,160938],{"class":36,"line":165},[34,160931,4754],{"class":55},[34,160933,11088],{"class":40},[34,160935,4602],{"class":55},[34,160937,79707],{"class":44},[34,160939,5392],{"class":40},[34,160941,160942],{"class":36,"line":171},[34,160943,33268],{"class":55},[34,160945,160946,160948],{"class":36,"line":182},[34,160947,32941],{"class":44},[34,160949,160593],{"class":40},[103,160951,147820],{},[24,160953,160956],{"className":160954,"code":160955,"language":6838,"meta":29},[6836],"1\n2\n",[31,160957,160955],{"__ignoreMap":29},[19,160959,160961],{"id":160960},"_452-continue","4.5.2 continue",[103,160963,160964,160966],{},[31,160965,156035],{}," 跳过本轮剩余代码，进入下一轮循环。",[24,160968,160970],{"className":26,"code":160969,"language":28,"meta":29,"style":29},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[31,160971,160972,160992,161004,161008],{"__ignoreMap":29},[34,160973,160974,160976,160978,160980,160982,160984,160986,160988,160990],{"class":36,"line":37},[34,160975,4678],{"class":55},[34,160977,11088],{"class":40},[34,160979,27689],{"class":55},[34,160981,34084],{"class":44},[34,160983,286],{"class":40},[34,160985,394],{"class":44},[34,160987,48],{"class":40},[34,160989,1115],{"class":44},[34,160991,32428],{"class":40},[34,160993,160994,160996,160998,161000,161002],{"class":36,"line":165},[34,160995,4754],{"class":55},[34,160997,11088],{"class":40},[34,160999,4602],{"class":55},[34,161001,79707],{"class":44},[34,161003,5392],{"class":40},[34,161005,161006],{"class":36,"line":171},[34,161007,149875],{"class":55},[34,161009,161010,161012],{"class":36,"line":182},[34,161011,32941],{"class":44},[34,161013,160593],{"class":40},[103,161015,147820],{},[24,161017,161020],{"className":161018,"code":161019,"language":6838,"meta":29},[6836],"1\n2\n4\n5\n",[31,161021,161019],{"__ignoreMap":29},[14,161023,161025],{"id":161024},"_46-for循环","4.6 for循环",[103,161027,161028,161030],{},[31,161029,4678],{}," 常用于遍历序列。",[24,161032,161034],{"className":26,"code":161033,"language":28,"meta":29,"style":29},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[31,161035,161036,161045,161049,161060],{"__ignoreMap":29},[34,161037,161038,161040,161042],{"class":36,"line":37},[34,161039,147899],{"class":40},[34,161041,221],{"class":55},[34,161043,161044],{"class":504}," \"python\"\n",[34,161046,161047],{"class":36,"line":165},[34,161048,1475],{"emptyLinePlaceholder":1474},[34,161050,161051,161053,161056,161058],{"class":36,"line":171},[34,161052,4678],{"class":55},[34,161054,161055],{"class":40}," ch ",[34,161057,27689],{"class":55},[34,161059,159762],{"class":40},[34,161061,161062,161064],{"class":36,"line":182},[34,161063,32941],{"class":44},[34,161065,161066],{"class":40},"(ch)\n",[103,161068,161069],{},"遍历列表：",[24,161071,161073],{"className":26,"code":161072,"language":28,"meta":29,"style":29},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[31,161074,161075,161097,161101,161111],{"__ignoreMap":29},[34,161076,161077,161080,161082,161084,161086,161088,161090,161092,161095],{"class":36,"line":37},[34,161078,161079],{"class":40},"students ",[34,161081,221],{"class":55},[34,161083,53865],{"class":40},[34,161085,151251],{"class":504},[34,161087,48],{"class":40},[34,161089,152299],{"class":504},[34,161091,48],{"class":40},[34,161093,161094],{"class":504},"\"小刚\"",[34,161096,34887],{"class":40},[34,161098,161099],{"class":36,"line":165},[34,161100,1475],{"emptyLinePlaceholder":1474},[34,161102,161103,161105,161107,161109],{"class":36,"line":171},[34,161104,4678],{"class":55},[34,161106,153500],{"class":40},[34,161108,27689],{"class":55},[34,161110,153505],{"class":40},[34,161112,161113,161115],{"class":36,"line":182},[34,161114,32941],{"class":44},[34,161116,151405],{"class":40},[14,161118,161120],{"id":161119},"_47-range函数","4.7 range函数",[103,161122,161123,161126],{},[31,161124,161125],{},"range()"," 用于生成整数序列。",[24,161128,161130],{"className":26,"code":161129,"language":28,"meta":29,"style":29},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[31,161131,161132,161146,161164],{"__ignoreMap":29},[34,161133,161134,161136,161138,161140,161143],{"class":36,"line":37},[34,161135,35057],{"class":44},[34,161137,286],{"class":40},[34,161139,224],{"class":44},[34,161141,161142],{"class":40},")          ",[34,161144,161145],{"class":161},"# 0,1,2,3,4\n",[34,161147,161148,161150,161152,161154,161156,161158,161161],{"class":36,"line":165},[34,161149,35057],{"class":44},[34,161151,286],{"class":40},[34,161153,394],{"class":44},[34,161155,48],{"class":40},[34,161157,224],{"class":44},[34,161159,161160],{"class":40},")       ",[34,161162,161163],{"class":161},"# 1,2,3,4\n",[34,161165,161166,161168,161170,161172,161174,161176,161178,161180,161182],{"class":36,"line":171},[34,161167,35057],{"class":44},[34,161169,286],{"class":40},[34,161171,394],{"class":44},[34,161173,48],{"class":40},[34,161175,410],{"class":44},[34,161177,48],{"class":40},[34,161179,332],{"class":44},[34,161181,157024],{"class":40},[34,161183,161184],{"class":161},"# 1,3,5,7,9\n",[103,161186,161187,161188,26264],{},"配合 ",[31,161189,4678],{},[24,161191,161193],{"className":26,"code":161192,"language":28,"meta":29,"style":29},"for i in range(1, 6):\n    print(i)\n",[31,161194,161195,161215],{"__ignoreMap":29},[34,161196,161197,161199,161201,161203,161205,161207,161209,161211,161213],{"class":36,"line":37},[34,161198,4678],{"class":55},[34,161200,11088],{"class":40},[34,161202,27689],{"class":55},[34,161204,34084],{"class":44},[34,161206,286],{"class":40},[34,161208,394],{"class":44},[34,161210,48],{"class":40},[34,161212,1115],{"class":44},[34,161214,32428],{"class":40},[34,161216,161217,161219],{"class":36,"line":165},[34,161218,32941],{"class":44},[34,161220,160593],{"class":40},[103,161222,10675,161223,161225],{},[31,161224,35057],{}," 的结束值不包含在内。",[14,161227,161229],{"id":161228},"_48-for循环求和","4.8 for循环求和",[24,161231,161233],{"className":26,"code":161232,"language":28,"meta":29,"style":29},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[31,161234,161235,161243,161247,161267,161275,161279],{"__ignoreMap":29},[34,161236,161237,161239,161241],{"class":36,"line":37},[34,161238,158623],{"class":40},[34,161240,221],{"class":55},[34,161242,48972],{"class":44},[34,161244,161245],{"class":36,"line":165},[34,161246,1475],{"emptyLinePlaceholder":1474},[34,161248,161249,161251,161253,161255,161257,161259,161261,161263,161265],{"class":36,"line":171},[34,161250,4678],{"class":55},[34,161252,11088],{"class":40},[34,161254,27689],{"class":55},[34,161256,34084],{"class":44},[34,161258,286],{"class":40},[34,161260,394],{"class":44},[34,161262,48],{"class":40},[34,161264,2140],{"class":44},[34,161266,32428],{"class":40},[34,161268,161269,161271,161273],{"class":36,"line":182},[34,161270,160670],{"class":40},[34,161272,11127],{"class":55},[34,161274,160675],{"class":40},[34,161276,161277],{"class":36,"line":188},[34,161278,1475],{"emptyLinePlaceholder":1474},[34,161280,161281,161283],{"class":36,"line":518},[34,161282,723],{"class":44},[34,161284,160694],{"class":40},[103,161286,161287],{},"求偶数和：",[24,161289,161291],{"className":26,"code":161290,"language":28,"meta":29,"style":29},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[31,161292,161293,161301,161305,161325,161341,161350,161354],{"__ignoreMap":29},[34,161294,161295,161297,161299],{"class":36,"line":37},[34,161296,158623],{"class":40},[34,161298,221],{"class":55},[34,161300,48972],{"class":44},[34,161302,161303],{"class":36,"line":165},[34,161304,1475],{"emptyLinePlaceholder":1474},[34,161306,161307,161309,161311,161313,161315,161317,161319,161321,161323],{"class":36,"line":171},[34,161308,4678],{"class":55},[34,161310,11088],{"class":40},[34,161312,27689],{"class":55},[34,161314,34084],{"class":44},[34,161316,286],{"class":40},[34,161318,394],{"class":44},[34,161320,48],{"class":40},[34,161322,2140],{"class":44},[34,161324,32428],{"class":40},[34,161326,161327,161329,161331,161333,161335,161337,161339],{"class":36,"line":182},[34,161328,4754],{"class":55},[34,161330,11088],{"class":40},[34,161332,2131],{"class":55},[34,161334,16401],{"class":44},[34,161336,102922],{"class":55},[34,161338,98],{"class":44},[34,161340,5392],{"class":40},[34,161342,161343,161346,161348],{"class":36,"line":188},[34,161344,161345],{"class":40},"        total ",[34,161347,11127],{"class":55},[34,161349,160675],{"class":40},[34,161351,161352],{"class":36,"line":518},[34,161353,1475],{"emptyLinePlaceholder":1474},[34,161355,161356,161358],{"class":36,"line":524},[34,161357,723],{"class":44},[34,161359,160694],{"class":40},[103,161361,161362],{},"也可以：",[24,161364,161366],{"className":26,"code":161365,"language":28,"meta":29,"style":29},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[31,161367,161368,161376,161380,161404,161412,161416],{"__ignoreMap":29},[34,161369,161370,161372,161374],{"class":36,"line":37},[34,161371,158623],{"class":40},[34,161373,221],{"class":55},[34,161375,48972],{"class":44},[34,161377,161378],{"class":36,"line":165},[34,161379,1475],{"emptyLinePlaceholder":1474},[34,161381,161382,161384,161386,161388,161390,161392,161394,161396,161398,161400,161402],{"class":36,"line":171},[34,161383,4678],{"class":55},[34,161385,11088],{"class":40},[34,161387,27689],{"class":55},[34,161389,34084],{"class":44},[34,161391,286],{"class":40},[34,161393,332],{"class":44},[34,161395,48],{"class":40},[34,161397,2140],{"class":44},[34,161399,48],{"class":40},[34,161401,332],{"class":44},[34,161403,32428],{"class":40},[34,161405,161406,161408,161410],{"class":36,"line":182},[34,161407,160670],{"class":40},[34,161409,11127],{"class":55},[34,161411,160675],{"class":40},[34,161413,161414],{"class":36,"line":188},[34,161415,1475],{"emptyLinePlaceholder":1474},[34,161417,161418,161420],{"class":36,"line":518},[34,161419,723],{"class":44},[34,161421,160694],{"class":40},[14,161423,161425],{"id":161424},"_49-循环嵌套","4.9 循环嵌套",[103,161427,161428],{},"嵌套循环就是循环里面再写循环。",[24,161430,161432],{"className":26,"code":161431,"language":28,"meta":29,"style":29},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[31,161433,161434,161454,161474],{"__ignoreMap":29},[34,161435,161436,161438,161440,161442,161444,161446,161448,161450,161452],{"class":36,"line":37},[34,161437,4678],{"class":55},[34,161439,11088],{"class":40},[34,161441,27689],{"class":55},[34,161443,34084],{"class":44},[34,161445,286],{"class":40},[34,161447,394],{"class":44},[34,161449,48],{"class":40},[34,161451,247],{"class":44},[34,161453,32428],{"class":40},[34,161455,161456,161458,161460,161462,161464,161466,161468,161470,161472],{"class":36,"line":165},[34,161457,4854],{"class":55},[34,161459,11150],{"class":40},[34,161461,27689],{"class":55},[34,161463,34084],{"class":44},[34,161465,286],{"class":40},[34,161467,394],{"class":44},[34,161469,48],{"class":40},[34,161471,247],{"class":44},[34,161473,32428],{"class":40},[34,161475,161476,161478,161480,161482,161485,161487,161489,161491,161494,161496,161498,161500,161502],{"class":36,"line":171},[34,161477,34092],{"class":44},[34,161479,286],{"class":40},[34,161481,1867],{"class":55},[34,161483,161484],{"class":504},"\"i=",[34,161486,2687],{"class":44},[34,161488,2239],{"class":40},[34,161490,2737],{"class":44},[34,161492,161493],{"class":504},", j=",[34,161495,2687],{"class":44},[34,161497,2264],{"class":40},[34,161499,2737],{"class":44},[34,161501,2058],{"class":504},[34,161503,101],{"class":40},[103,161505,161506],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161508,161510],{"id":161509},"_410-九九乘法表","4.10 九九乘法表",[24,161512,161514],{"className":26,"code":161513,"language":28,"meta":29,"style":29},"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",[31,161515,161516,161536,161559,161611],{"__ignoreMap":29},[34,161517,161518,161520,161522,161524,161526,161528,161530,161532,161534],{"class":36,"line":37},[34,161519,4678],{"class":55},[34,161521,11088],{"class":40},[34,161523,27689],{"class":55},[34,161525,34084],{"class":44},[34,161527,286],{"class":40},[34,161529,394],{"class":44},[34,161531,48],{"class":40},[34,161533,410],{"class":44},[34,161535,32428],{"class":40},[34,161537,161538,161540,161542,161544,161546,161548,161550,161553,161555,161557],{"class":36,"line":165},[34,161539,4854],{"class":55},[34,161541,11150],{"class":40},[34,161543,27689],{"class":55},[34,161545,34084],{"class":44},[34,161547,286],{"class":40},[34,161549,394],{"class":44},[34,161551,161552],{"class":40},", i ",[34,161554,2277],{"class":55},[34,161556,26764],{"class":44},[34,161558,32428],{"class":40},[34,161560,161561,161563,161565,161567,161569,161571,161573,161575,161577,161579,161581,161583,161585,161587,161589,161591,161593,161595,161597,161599,161601,161603,161605,161607,161609],{"class":36,"line":171},[34,161562,34092],{"class":44},[34,161564,286],{"class":40},[34,161566,1867],{"class":55},[34,161568,2058],{"class":504},[34,161570,2687],{"class":44},[34,161572,2264],{"class":40},[34,161574,2737],{"class":44},[34,161576,2252],{"class":504},[34,161578,2687],{"class":44},[34,161580,2239],{"class":40},[34,161582,2737],{"class":44},[34,161584,221],{"class":504},[34,161586,2687],{"class":44},[34,161588,101511],{"class":40},[34,161590,2252],{"class":55},[34,161592,5063],{"class":40},[34,161594,2737],{"class":44},[34,161596,2058],{"class":504},[34,161598,48],{"class":40},[34,161600,47440],{"class":51},[34,161602,221],{"class":55},[34,161604,2058],{"class":504},[34,161606,2892],{"class":44},[34,161608,2058],{"class":504},[34,161610,101],{"class":40},[34,161612,161613,161615],{"class":36,"line":182},[34,161614,32941],{"class":44},[34,161616,3630],{"class":40},[103,161618,161619],{},"关键点：",[1772,161621,161622,161628,161634,161640],{},[1775,161623,161624,161625,161627],{},"外层 ",[31,161626,2239],{}," 控制行。",[1775,161629,161630,161631,161633],{},"内层 ",[31,161632,2264],{}," 控制列。",[1775,161635,161636,161637,161639],{},"每行结束后用 ",[31,161638,147835],{}," 换行。",[1775,161641,161642,161645],{},[31,161643,161644],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161647,161649],{"id":161648},"_411-循环else","4.11 循环else",[103,161651,161652,161653,161655,161656,161658,161659,161661],{},"Python 的循环可以带 ",[31,161654,3355],{},"。当循环正常结束时执行 ",[31,161657,3355],{},"，如果被 ",[31,161660,3707],{}," 打断，则不执行。",[24,161663,161665],{"className":26,"code":161664,"language":28,"meta":29,"style":29},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[31,161666,161667,161687,161699,161710,161714,161720],{"__ignoreMap":29},[34,161668,161669,161671,161673,161675,161677,161679,161681,161683,161685],{"class":36,"line":37},[34,161670,4678],{"class":55},[34,161672,11088],{"class":40},[34,161674,27689],{"class":55},[34,161676,34084],{"class":44},[34,161678,286],{"class":40},[34,161680,394],{"class":44},[34,161682,48],{"class":40},[34,161684,1115],{"class":44},[34,161686,32428],{"class":40},[34,161688,161689,161691,161693,161695,161697],{"class":36,"line":165},[34,161690,4754],{"class":55},[34,161692,11088],{"class":40},[34,161694,4602],{"class":55},[34,161696,3692],{"class":44},[34,161698,5392],{"class":40},[34,161700,161701,161703,161705,161708],{"class":36,"line":171},[34,161702,34092],{"class":44},[34,161704,286],{"class":40},[34,161706,161707],{"class":504},"\"找到了\"",[34,161709,101],{"class":40},[34,161711,161712],{"class":36,"line":182},[34,161713,33268],{"class":55},[34,161715,161716,161718],{"class":36,"line":188},[34,161717,3355],{"class":55},[34,161719,5392],{"class":40},[34,161721,161722,161724,161726,161729],{"class":36,"line":518},[34,161723,32941],{"class":44},[34,161725,286],{"class":40},[34,161727,161728],{"class":504},"\"没找到\"",[34,161730,101],{"class":40},[103,161732,161733],{},"常用于搜索。",[24,161735,161737],{"className":26,"code":161736,"language":28,"meta":29,"style":29},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[31,161738,161739,161760,161769,161773,161785,161796,161806,161810,161816],{"__ignoreMap":29},[34,161740,161741,161744,161746,161748,161750,161752,161754,161756,161758],{"class":36,"line":37},[34,161742,161743],{"class":40},"names ",[34,161745,221],{"class":55},[34,161747,53865],{"class":40},[34,161749,151251],{"class":504},[34,161751,48],{"class":40},[34,161753,152299],{"class":504},[34,161755,48],{"class":40},[34,161757,161094],{"class":504},[34,161759,34887],{"class":40},[34,161761,161762,161764,161766],{"class":36,"line":165},[34,161763,112941],{"class":40},[34,161765,221],{"class":55},[34,161767,161768],{"class":504}," \"小李\"\n",[34,161770,161771],{"class":36,"line":171},[34,161772,1475],{"emptyLinePlaceholder":1474},[34,161774,161775,161777,161780,161782],{"class":36,"line":182},[34,161776,4678],{"class":55},[34,161778,161779],{"class":40}," name ",[34,161781,27689],{"class":55},[34,161783,161784],{"class":40}," names:\n",[34,161786,161787,161789,161791,161793],{"class":36,"line":188},[34,161788,4754],{"class":55},[34,161790,161779],{"class":40},[34,161792,4602],{"class":55},[34,161794,161795],{"class":40}," target:\n",[34,161797,161798,161800,161802,161804],{"class":36,"line":518},[34,161799,34092],{"class":44},[34,161801,286],{"class":40},[34,161803,161707],{"class":504},[34,161805,101],{"class":40},[34,161807,161808],{"class":36,"line":524},[34,161809,33268],{"class":55},[34,161811,161812,161814],{"class":36,"line":530},[34,161813,3355],{"class":55},[34,161815,5392],{"class":40},[34,161817,161818,161820,161822,161824],{"class":36,"line":624},[34,161819,32941],{"class":44},[34,161821,286],{"class":40},[34,161823,161728],{"class":504},[34,161825,101],{"class":40},[14,161827,161829],{"id":161828},"_412-小案例登录重试","4.12 小案例：登录重试",[103,161831,124655],{},[1772,161833,161834,161837,161840],{},[1775,161835,161836],{},"用户最多输入 3 次密码。",[1775,161838,161839],{},"密码正确则登录成功。",[1775,161841,161842],{},"3 次都错误则锁定账号。",[103,161844,11685],{},[24,161846,161848],{"className":26,"code":161847,"language":28,"meta":29,"style":29},"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",[31,161849,161850,161860,161864,161880,161896,161900,161912,161923,161927,161933,161958,161964],{"__ignoreMap":29},[34,161851,161852,161855,161857],{"class":36,"line":37},[34,161853,161854],{"class":40},"password ",[34,161856,221],{"class":55},[34,161858,161859],{"class":504}," \"123456\"\n",[34,161861,161862],{"class":36,"line":165},[34,161863,1475],{"emptyLinePlaceholder":1474},[34,161865,161866,161868,161870,161872,161874,161876,161878],{"class":36,"line":171},[34,161867,4678],{"class":55},[34,161869,11088],{"class":40},[34,161871,27689],{"class":55},[34,161873,34084],{"class":44},[34,161875,286],{"class":40},[34,161877,337],{"class":44},[34,161879,32428],{"class":40},[34,161881,161882,161885,161887,161889,161891,161894],{"class":36,"line":182},[34,161883,161884],{"class":40},"    user_password ",[34,161886,221],{"class":55},[34,161888,62244],{"class":44},[34,161890,286],{"class":40},[34,161892,161893],{"class":504},"\"请输入密码:\"",[34,161895,101],{"class":40},[34,161897,161898],{"class":36,"line":188},[34,161899,1475],{"emptyLinePlaceholder":1474},[34,161901,161902,161904,161907,161909],{"class":36,"line":518},[34,161903,4754],{"class":55},[34,161905,161906],{"class":40}," user_password ",[34,161908,4602],{"class":55},[34,161910,161911],{"class":40}," password:\n",[34,161913,161914,161916,161918,161921],{"class":36,"line":524},[34,161915,34092],{"class":44},[34,161917,286],{"class":40},[34,161919,161920],{"class":504},"\"登录成功\"",[34,161922,101],{"class":40},[34,161924,161925],{"class":36,"line":530},[34,161926,33268],{"class":55},[34,161928,161929,161931],{"class":36,"line":624},[34,161930,159385],{"class":55},[34,161932,5392],{"class":40},[34,161934,161935,161937,161939,161941,161944,161947,161949,161951,161953,161956],{"class":36,"line":630},[34,161936,34092],{"class":44},[34,161938,286],{"class":40},[34,161940,1867],{"class":55},[34,161942,161943],{"class":504},"\"密码错误，还剩",[34,161945,161946],{"class":44},"{2",[34,161948,53910],{"class":55},[34,161950,4685],{"class":40},[34,161952,2737],{"class":44},[34,161954,161955],{"class":504},"次机会\"",[34,161957,101],{"class":40},[34,161959,161960,161962],{"class":36,"line":636},[34,161961,3355],{"class":55},[34,161963,5392],{"class":40},[34,161965,161966,161968,161970,161973],{"class":36,"line":1513},[34,161967,32941],{"class":44},[34,161969,286],{"class":40},[34,161971,161972],{"class":504},"\"账号已锁定\"",[34,161974,101],{"class":40},[14,161976,161978],{"id":161977},"_413-小案例菜单程序","4.13 小案例：菜单程序",[24,161980,161982],{"className":26,"code":161981,"language":28,"meta":29,"style":29},"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",[31,161983,161984,161992,162003,162014,162025,162036,162047,162051,162066,162070,162082,162093,162105,162116,162128,162139,162151,162161,162165,162171],{"__ignoreMap":29},[34,161985,161986,161988,161990],{"class":36,"line":37},[34,161987,110026],{"class":55},[34,161989,69],{"class":44},[34,161991,5392],{"class":40},[34,161993,161994,161996,161998,162001],{"class":36,"line":165},[34,161995,32941],{"class":44},[34,161997,286],{"class":40},[34,161999,162000],{"class":504},"\"====== 菜单 ======\"",[34,162002,101],{"class":40},[34,162004,162005,162007,162009,162012],{"class":36,"line":171},[34,162006,32941],{"class":44},[34,162008,286],{"class":40},[34,162010,162011],{"class":504},"\"1. 查询余额\"",[34,162013,101],{"class":40},[34,162015,162016,162018,162020,162023],{"class":36,"line":182},[34,162017,32941],{"class":44},[34,162019,286],{"class":40},[34,162021,162022],{"class":504},"\"2. 存款\"",[34,162024,101],{"class":40},[34,162026,162027,162029,162031,162034],{"class":36,"line":188},[34,162028,32941],{"class":44},[34,162030,286],{"class":40},[34,162032,162033],{"class":504},"\"3. 取款\"",[34,162035,101],{"class":40},[34,162037,162038,162040,162042,162045],{"class":36,"line":518},[34,162039,32941],{"class":44},[34,162041,286],{"class":40},[34,162043,162044],{"class":504},"\"0. 退出\"",[34,162046,101],{"class":40},[34,162048,162049],{"class":36,"line":524},[34,162050,1475],{"emptyLinePlaceholder":1474},[34,162052,162053,162056,162058,162060,162062,162064],{"class":36,"line":530},[34,162054,162055],{"class":40},"    choice ",[34,162057,221],{"class":55},[34,162059,62244],{"class":44},[34,162061,286],{"class":40},[34,162063,154436],{"class":504},[34,162065,101],{"class":40},[34,162067,162068],{"class":36,"line":624},[34,162069,1475],{"emptyLinePlaceholder":1474},[34,162071,162072,162074,162076,162078,162080],{"class":36,"line":630},[34,162073,4754],{"class":55},[34,162075,154449],{"class":40},[34,162077,4602],{"class":55},[34,162079,154454],{"class":504},[34,162081,5392],{"class":40},[34,162083,162084,162086,162088,162091],{"class":36,"line":636},[34,162085,34092],{"class":44},[34,162087,286],{"class":40},[34,162089,162090],{"class":504},"\"余额为1000元\"",[34,162092,101],{"class":40},[34,162094,162095,162097,162099,162101,162103],{"class":36,"line":1513},[34,162096,40933],{"class":55},[34,162098,154449],{"class":40},[34,162100,4602],{"class":55},[34,162102,154473],{"class":504},[34,162104,5392],{"class":40},[34,162106,162107,162109,162111,162114],{"class":36,"line":1519},[34,162108,34092],{"class":44},[34,162110,286],{"class":40},[34,162112,162113],{"class":504},"\"存款功能\"",[34,162115,101],{"class":40},[34,162117,162118,162120,162122,162124,162126],{"class":36,"line":3283},[34,162119,40933],{"class":55},[34,162121,154449],{"class":40},[34,162123,4602],{"class":55},[34,162125,154491],{"class":504},[34,162127,5392],{"class":40},[34,162129,162130,162132,162134,162137],{"class":36,"line":3297},[34,162131,34092],{"class":44},[34,162133,286],{"class":40},[34,162135,162136],{"class":504},"\"取款功能\"",[34,162138,101],{"class":40},[34,162140,162141,162143,162145,162147,162149],{"class":36,"line":3302},[34,162142,40933],{"class":55},[34,162144,154449],{"class":40},[34,162146,4602],{"class":55},[34,162148,154545],{"class":504},[34,162150,5392],{"class":40},[34,162152,162153,162155,162157,162159],{"class":36,"line":3308},[34,162154,34092],{"class":44},[34,162156,286],{"class":40},[34,162158,154556],{"class":504},[34,162160,101],{"class":40},[34,162162,162163],{"class":36,"line":3328},[34,162164,33268],{"class":55},[34,162166,162167,162169],{"class":36,"line":3333},[34,162168,159385],{"class":55},[34,162170,5392],{"class":40},[34,162172,162173,162175,162177,162179],{"class":36,"line":3347},[34,162174,34092],{"class":44},[34,162176,286],{"class":40},[34,162178,154577],{"class":504},[34,162180,101],{"class":40},[103,162182,162183,162184,162186,162187,30031],{},"菜单类程序通常使用 ",[31,162185,160885],{},"，用户选择退出时 ",[31,162188,3707],{},[14,162190,162192],{"id":162191},"_414-易错点","4.14 易错点",[1772,162194,162195,162200,162206,162214,162220],{},[1775,162196,162197,162199],{},[31,162198,110026],{}," 循环必须更新控制变量。",[1775,162201,162202,162205],{},[31,162203,162204],{},"range(1, 10)"," 不包含 10。",[1775,162207,162208,162210,162211,162213],{},[31,162209,3707],{}," 结束整个循环，",[31,162212,156035],{}," 只跳过本轮。",[1775,162215,162216,162217,162219],{},"嵌套循环中，",[31,162218,3707],{}," 只跳出当前所在的一层循环。",[1775,162221,162222],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162224,162226],{"id":162225},"_415-本章练习","4.15 本章练习",[1772,162228,162229,162232,162235,162238,162241],{},[1775,162230,162231],{},"输出 1 到 100。",[1775,162233,162234],{},"计算 1 到 100 的偶数和。",[1775,162236,162237],{},"输出 100 以内能被 3 和 5 同时整除的数。",[1775,162239,162240],{},"编写猜数字游戏，限制最多猜 7 次。",[1775,162242,162243],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1711,162245,162246],{},"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":29,"searchDepth":165,"depth":165,"links":162248},[162249,162250,162251,162252,162253,162257,162258,162259,162260,162261,162262,162263,162264,162265,162266],{"id":160505,"depth":165,"text":160506},{"id":160535,"depth":165,"text":160536},{"id":160624,"depth":165,"text":160625},{"id":160718,"depth":165,"text":160719},{"id":160892,"depth":165,"text":160893,"children":162254},[162255,162256],{"id":160896,"depth":171,"text":160897},{"id":160960,"depth":171,"text":160961},{"id":161024,"depth":165,"text":161025},{"id":161119,"depth":165,"text":161120},{"id":161228,"depth":165,"text":161229},{"id":161424,"depth":165,"text":161425},{"id":161509,"depth":165,"text":161510},{"id":161648,"depth":165,"text":161649},{"id":161828,"depth":165,"text":161829},{"id":161977,"depth":165,"text":161978},{"id":162191,"depth":165,"text":162192},{"id":162225,"depth":165,"text":162226},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160497,"description":1744},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162273,"title":162274,"body":162275,"description":1744,"extension":1745,"meta":164280,"navigation":1474,"path":164281,"seo":164282,"stem":164283,"__hash__":164284},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162276,"toc":164260},[162277,162280,162284,162287,162290,162304,162307,162321,162325,162327,162346,162348,162395,162397,162411,162415,162489,162492,162496,162499,162558,162566,162569,162622,162625,162629,162634,162689,162697,162747,162751,162756,162764,162863,162869,162873,162878,162881,162892,162933,162946,162950,162953,162989,162992,163005,163008,163068,163072,163076,163079,163130,163134,163137,163184,163190,163256,163259,163263,163266,163382,163385,163389,163392,163498,163502,163505,163543,163546,163588,163591,163651,163654,163658,164122,164125,164129,164156,164162,164223,164227,164257],[10,162278,162274],{"id":162279},"_5-函数基础",[14,162281,162283],{"id":162282},"_51-为什么需要函数","5.1 为什么需要函数",[103,162285,162286],{},"函数用于封装一段可以重复使用的代码。",[103,162288,162289],{},"不使用函数的问题：",[1772,162291,162292,162295,162298,162301],{},[1775,162293,162294],{},"重复代码多。",[1775,162296,162297],{},"修改逻辑时容易漏改。",[1775,162299,162300],{},"主流程不清晰。",[1775,162302,162303],{},"程序越写越长，难以维护。",[103,162305,162306],{},"使用函数后的好处：",[1772,162308,162309,162312,162315,162318],{},[1775,162310,162311],{},"提高复用性。",[1775,162313,162314],{},"提高可读性。",[1775,162316,162317],{},"便于调试。",[1775,162319,162320],{},"便于分工。",[14,162322,162324],{"id":162323},"_52-函数定义","5.2 函数定义",[103,162326,6832],{},[24,162328,162330],{"className":26,"code":162329,"language":28,"meta":29,"style":29},"def 函数名():\n    函数体\n",[31,162331,162332,162341],{"__ignoreMap":29},[34,162333,162334,162336,162339],{"class":36,"line":37},[34,162335,33588],{"class":55},[34,162337,162338],{"class":3617}," 函数名",[34,162340,33594],{"class":40},[34,162342,162343],{"class":36,"line":165},[34,162344,162345],{"class":40},"    函数体\n",[103,162347,16781],{},[24,162349,162351],{"className":26,"code":162350,"language":28,"meta":29,"style":29},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[31,162352,162353,162362,162372,162382,162386,162390],{"__ignoreMap":29},[34,162354,162355,162357,162360],{"class":36,"line":37},[34,162356,33588],{"class":55},[34,162358,162359],{"class":3617}," say_hello",[34,162361,33594],{"class":40},[34,162363,162364,162366,162368,162370],{"class":36,"line":165},[34,162365,32941],{"class":44},[34,162367,286],{"class":40},[34,162369,7494],{"class":504},[34,162371,101],{"class":40},[34,162373,162374,162376,162378,162380],{"class":36,"line":171},[34,162375,32941],{"class":44},[34,162377,286],{"class":40},[34,162379,148002],{"class":504},[34,162381,101],{"class":40},[34,162383,162384],{"class":36,"line":182},[34,162385,1475],{"emptyLinePlaceholder":1474},[34,162387,162388],{"class":36,"line":188},[34,162389,1475],{"emptyLinePlaceholder":1474},[34,162391,162392],{"class":36,"line":518},[34,162393,162394],{"class":40},"say_hello()\n",[103,162396,10675],{},[1772,162398,162399,162402,162405,162408],{},[1775,162400,162401],{},"函数必须先定义，再调用。",[1775,162403,162404],{},"函数名遵循变量命名规则。",[1775,162406,162407],{},"函数体需要缩进。",[1775,162409,162410],{},"函数不调用就不会执行。",[14,162412,162414],{"id":162413},"_53-函数调用","5.3 函数调用",[24,162416,162418],{"className":26,"code":162417,"language":28,"meta":29,"style":29},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[31,162419,162420,162429,162440,162451,162462,162472,162476,162480,162485],{"__ignoreMap":29},[34,162421,162422,162424,162427],{"class":36,"line":37},[34,162423,33588],{"class":55},[34,162425,162426],{"class":3617}," print_menu",[34,162428,33594],{"class":40},[34,162430,162431,162433,162435,162438],{"class":36,"line":165},[34,162432,32941],{"class":44},[34,162434,286],{"class":40},[34,162436,162437],{"class":504},"\"1. 查询\"",[34,162439,101],{"class":40},[34,162441,162442,162444,162446,162449],{"class":36,"line":171},[34,162443,32941],{"class":44},[34,162445,286],{"class":40},[34,162447,162448],{"class":504},"\"2. 添加\"",[34,162450,101],{"class":40},[34,162452,162453,162455,162457,162460],{"class":36,"line":182},[34,162454,32941],{"class":44},[34,162456,286],{"class":40},[34,162458,162459],{"class":504},"\"3. 删除\"",[34,162461,101],{"class":40},[34,162463,162464,162466,162468,162470],{"class":36,"line":188},[34,162465,32941],{"class":44},[34,162467,286],{"class":40},[34,162469,162044],{"class":504},[34,162471,101],{"class":40},[34,162473,162474],{"class":36,"line":518},[34,162475,1475],{"emptyLinePlaceholder":1474},[34,162477,162478],{"class":36,"line":524},[34,162479,1475],{"emptyLinePlaceholder":1474},[34,162481,162482],{"class":36,"line":530},[34,162483,162484],{"class":40},"print_menu()\n",[34,162486,162487],{"class":36,"line":624},[34,162488,162484],{"class":40},[103,162490,162491],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162493,162495],{"id":162494},"_54-参数","5.4 参数",[103,162497,162498],{},"参数用于向函数传递数据。",[24,162500,162502],{"className":26,"code":162501,"language":28,"meta":29,"style":29},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[31,162503,162504,162513,162533,162537,162541,162550],{"__ignoreMap":29},[34,162505,162506,162508,162510],{"class":36,"line":37},[34,162507,33588],{"class":55},[34,162509,162359],{"class":3617},[34,162511,162512],{"class":40},"(name):\n",[34,162514,162515,162517,162519,162521,162523,162525,162527,162529,162531],{"class":36,"line":165},[34,162516,32941],{"class":44},[34,162518,286],{"class":40},[34,162520,1867],{"class":55},[34,162522,158417],{"class":504},[34,162524,2687],{"class":44},[34,162526,81447],{"class":40},[34,162528,2737],{"class":44},[34,162530,2058],{"class":504},[34,162532,101],{"class":40},[34,162534,162535],{"class":36,"line":171},[34,162536,1475],{"emptyLinePlaceholder":1474},[34,162538,162539],{"class":36,"line":182},[34,162540,1475],{"emptyLinePlaceholder":1474},[34,162542,162543,162546,162548],{"class":36,"line":188},[34,162544,162545],{"class":40},"say_hello(",[34,162547,151251],{"class":504},[34,162549,101],{"class":40},[34,162551,162552,162554,162556],{"class":36,"line":518},[34,162553,162545],{"class":40},[34,162555,152299],{"class":504},[34,162557,101],{"class":40},[103,162559,162560,162562,162563,162565],{},[31,162561,81447],{}," 是形参，",[31,162564,151251],{}," 是实参。",[103,162567,162568],{},"多个参数：",[24,162570,162572],{"className":26,"code":162571,"language":28,"meta":29,"style":29},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[31,162573,162574,162582,162595,162601,162605,162609],{"__ignoreMap":29},[34,162575,162576,162578,162580],{"class":36,"line":37},[34,162577,33588],{"class":55},[34,162579,6860],{"class":3617},[34,162581,152456],{"class":40},[34,162583,162584,162587,162589,162591,162593],{"class":36,"line":165},[34,162585,162586],{"class":40},"    result ",[34,162588,221],{"class":55},[34,162590,12519],{"class":40},[34,162592,2277],{"class":55},[34,162594,152467],{"class":40},[34,162596,162597,162599],{"class":36,"line":171},[34,162598,32941],{"class":44},[34,162600,78223],{"class":40},[34,162602,162603],{"class":36,"line":182},[34,162604,1475],{"emptyLinePlaceholder":1474},[34,162606,162607],{"class":36,"line":188},[34,162608,1475],{"emptyLinePlaceholder":1474},[34,162610,162611,162614,162616,162618,162620],{"class":36,"line":518},[34,162612,162613],{"class":40},"add(",[34,162615,410],{"class":44},[34,162617,48],{"class":40},[34,162619,1249],{"class":44},[34,162621,101],{"class":40},[103,162623,162624],{},"调用时参数数量必须匹配。",[14,162626,162628],{"id":162627},"_55-返回值","5.5 返回值",[103,162630,162631,162633],{},[31,162632,18692],{}," 用于把函数内部的结果返回给调用者。",[24,162635,162637],{"className":26,"code":162636,"language":28,"meta":29,"style":29},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[31,162638,162639,162647,162657,162661,162665,162683],{"__ignoreMap":29},[34,162640,162641,162643,162645],{"class":36,"line":37},[34,162642,33588],{"class":55},[34,162644,6860],{"class":3617},[34,162646,152456],{"class":40},[34,162648,162649,162651,162653,162655],{"class":36,"line":165},[34,162650,5743],{"class":55},[34,162652,12519],{"class":40},[34,162654,2277],{"class":55},[34,162656,152467],{"class":40},[34,162658,162659],{"class":36,"line":171},[34,162660,1475],{"emptyLinePlaceholder":1474},[34,162662,162663],{"class":36,"line":182},[34,162664,1475],{"emptyLinePlaceholder":1474},[34,162666,162667,162670,162672,162675,162677,162679,162681],{"class":36,"line":188},[34,162668,162669],{"class":40},"result ",[34,162671,221],{"class":55},[34,162673,162674],{"class":40}," add(",[34,162676,410],{"class":44},[34,162678,48],{"class":40},[34,162680,1249],{"class":44},[34,162682,101],{"class":40},[34,162684,162685,162687],{"class":36,"line":518},[34,162686,723],{"class":44},[34,162688,78223],{"class":40},[103,162690,162691,162692,162694,162695,30031],{},"如果函数没有写 ",[31,162693,18692],{},"，默认返回 ",[31,162696,492],{},[24,162698,162700],{"className":26,"code":162699,"language":28,"meta":29,"style":29},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[31,162701,162702,162710,162720,162724,162728,162737],{"__ignoreMap":29},[34,162703,162704,162706,162708],{"class":36,"line":37},[34,162705,33588],{"class":55},[34,162707,162359],{"class":3617},[34,162709,33594],{"class":40},[34,162711,162712,162714,162716,162718],{"class":36,"line":165},[34,162713,32941],{"class":44},[34,162715,286],{"class":40},[34,162717,7494],{"class":504},[34,162719,101],{"class":40},[34,162721,162722],{"class":36,"line":171},[34,162723,1475],{"emptyLinePlaceholder":1474},[34,162725,162726],{"class":36,"line":182},[34,162727,1475],{"emptyLinePlaceholder":1474},[34,162729,162730,162732,162734],{"class":36,"line":188},[34,162731,162669],{"class":40},[34,162733,221],{"class":55},[34,162735,162736],{"class":40}," say_hello()\n",[34,162738,162739,162741,162744],{"class":36,"line":518},[34,162740,723],{"class":44},[34,162742,162743],{"class":40},"(result)  ",[34,162745,162746],{"class":161},"# None\n",[14,162748,162750],{"id":162749},"_56-return的作用","5.6 return的作用",[103,162752,162753,162755],{},[31,162754,18692],{}," 有两个作用：",[1772,162757,162758,162761],{},[1775,162759,162760],{},"返回结果。",[1775,162762,162763],{},"结束函数。",[24,162765,162767],{"className":26,"code":162766,"language":28,"meta":29,"style":29},"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",[31,162768,162769,162779,162791,162798,162802,162814,162821,162825,162832,162836,162840,162851],{"__ignoreMap":29},[34,162770,162771,162773,162776],{"class":36,"line":37},[34,162772,33588],{"class":55},[34,162774,162775],{"class":3617}," check_age",[34,162777,162778],{"class":40},"(age):\n",[34,162780,162781,162783,162785,162787,162789],{"class":36,"line":165},[34,162782,4754],{"class":55},[34,162784,17353],{"class":40},[34,162786,2701],{"class":55},[34,162788,98],{"class":44},[34,162790,5392],{"class":40},[34,162792,162793,162795],{"class":36,"line":171},[34,162794,16398],{"class":55},[34,162796,162797],{"class":504}," \"年龄不合法\"\n",[34,162799,162800],{"class":36,"line":182},[34,162801,1475],{"emptyLinePlaceholder":1474},[34,162803,162804,162806,162808,162810,162812],{"class":36,"line":188},[34,162805,4754],{"class":55},[34,162807,17353],{"class":40},[34,162809,3364],{"class":55},[34,162811,157648],{"class":44},[34,162813,5392],{"class":40},[34,162815,162816,162818],{"class":36,"line":518},[34,162817,16398],{"class":55},[34,162819,162820],{"class":504}," \"成年人\"\n",[34,162822,162823],{"class":36,"line":524},[34,162824,1475],{"emptyLinePlaceholder":1474},[34,162826,162827,162829],{"class":36,"line":530},[34,162828,5743],{"class":55},[34,162830,162831],{"class":504}," \"未成年人\"\n",[34,162833,162834],{"class":36,"line":624},[34,162835,1475],{"emptyLinePlaceholder":1474},[34,162837,162838],{"class":36,"line":630},[34,162839,1475],{"emptyLinePlaceholder":1474},[34,162841,162842,162844,162847,162849],{"class":36,"line":636},[34,162843,723],{"class":44},[34,162845,162846],{"class":40},"(check_age(",[34,162848,1249],{"class":44},[34,162850,296],{"class":40},[34,162852,162853,162855,162857,162859,162861],{"class":36,"line":1513},[34,162854,723],{"class":44},[34,162856,162846],{"class":40},[34,162858,2327],{"class":55},[34,162860,394],{"class":44},[34,162862,296],{"class":40},[103,162864,162865,162866,162868],{},"函数执行到 ",[31,162867,18692],{}," 后，后面的代码不会继续执行。",[14,162870,162872],{"id":162871},"_57-none","5.7 None",[103,162874,162875,162877],{},[31,162876,492],{}," 表示空值或没有结果。",[103,162879,162880],{},"常见使用场景：",[1772,162882,162883,162886,162889],{},[1775,162884,162885],{},"函数没有返回值。",[1775,162887,162888],{},"变量暂时没有具体值。",[1775,162890,162891],{},"表示查询不到结果。",[24,162893,162895],{"className":26,"code":162894,"language":28,"meta":29,"style":29},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[31,162896,162897,162905,162909,162922],{"__ignoreMap":29},[34,162898,162899,162901,162903],{"class":36,"line":37},[34,162900,162669],{"class":40},[34,162902,221],{"class":55},[34,162904,153535],{"class":44},[34,162906,162907],{"class":36,"line":165},[34,162908,1475],{"emptyLinePlaceholder":1474},[34,162910,162911,162913,162916,162918,162920],{"class":36,"line":171},[34,162912,3189],{"class":55},[34,162914,162915],{"class":40}," result ",[34,162917,40568],{"class":55},[34,162919,59],{"class":44},[34,162921,5392],{"class":40},[34,162923,162924,162926,162928,162931],{"class":36,"line":182},[34,162925,32941],{"class":44},[34,162927,286],{"class":40},[34,162929,162930],{"class":504},"\"没有数据\"",[34,162932,101],{"class":40},[103,162934,162935,162936,162938,162939,162942,162943,30031],{},"判断 ",[31,162937,492],{}," 推荐使用 ",[31,162940,162941],{},"is None","，不要写成 ",[31,162944,162945],{},"== None",[14,162947,162949],{"id":162948},"_58-函数文档字符串","5.8 函数文档字符串",[103,162951,162952],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[24,162954,162956],{"className":26,"code":162955,"language":28,"meta":29,"style":29},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[31,162957,162958,162968,162973],{"__ignoreMap":29},[34,162959,162960,162962,162965],{"class":36,"line":37},[34,162961,33588],{"class":55},[34,162963,162964],{"class":3617}," calculate_bmi",[34,162966,162967],{"class":40},"(weight, height):\n",[34,162969,162970],{"class":36,"line":165},[34,162971,162972],{"class":504},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[34,162974,162975,162977,162980,162982,162985,162987],{"class":36,"line":171},[34,162976,5743],{"class":55},[34,162978,162979],{"class":40}," weight ",[34,162981,2379],{"class":55},[34,162983,162984],{"class":40}," height ",[34,162986,12311],{"class":55},[34,162988,49362],{"class":44},[103,162990,162991],{},"查看说明：",[24,162993,162995],{"className":26,"code":162994,"language":28,"meta":29,"style":29},"help(calculate_bmi)\n",[31,162996,162997],{"__ignoreMap":29},[34,162998,162999,163002],{"class":36,"line":37},[34,163000,163001],{"class":44},"help",[34,163003,163004],{"class":40},"(calculate_bmi)\n",[103,163006,163007],{},"较完整的写法：",[24,163009,163011],{"className":26,"code":163010,"language":28,"meta":29,"style":29},"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",[31,163012,163013,163021,163026,163031,163035,163040,163045,163050,163054],{"__ignoreMap":29},[34,163014,163015,163017,163019],{"class":36,"line":37},[34,163016,33588],{"class":55},[34,163018,162964],{"class":3617},[34,163020,162967],{"class":40},[34,163022,163023],{"class":36,"line":165},[34,163024,163025],{"class":504},"    \"\"\"\n",[34,163027,163028],{"class":36,"line":171},[34,163029,163030],{"class":504},"    计算BMI。\n",[34,163032,163033],{"class":36,"line":182},[34,163034,1475],{"emptyLinePlaceholder":1474},[34,163036,163037],{"class":36,"line":188},[34,163038,163039],{"class":504},"    :param weight: 体重，单位kg\n",[34,163041,163042],{"class":36,"line":518},[34,163043,163044],{"class":504},"    :param height: 身高，单位m\n",[34,163046,163047],{"class":36,"line":524},[34,163048,163049],{"class":504},"    :return: BMI数值\n",[34,163051,163052],{"class":36,"line":530},[34,163053,163025],{"class":504},[34,163055,163056,163058,163060,163062,163064,163066],{"class":36,"line":624},[34,163057,5743],{"class":55},[34,163059,162979],{"class":40},[34,163061,2379],{"class":55},[34,163063,162984],{"class":40},[34,163065,12311],{"class":55},[34,163067,49362],{"class":44},[14,163069,163071],{"id":163070},"_59-变量作用域","5.9 变量作用域",[19,163073,163075],{"id":163074},"_591-局部变量","5.9.1 局部变量",[103,163077,163078],{},"在函数内部定义的变量，只能在函数内部使用。",[24,163080,163082],{"className":26,"code":163081,"language":28,"meta":29,"style":29},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[31,163083,163084,163093,163101,163107,163111,163115,163120],{"__ignoreMap":29},[34,163085,163086,163088,163091],{"class":36,"line":37},[34,163087,33588],{"class":55},[34,163089,163090],{"class":3617}," test",[34,163092,33594],{"class":40},[34,163094,163095,163097,163099],{"class":36,"line":165},[34,163096,47232],{"class":40},[34,163098,221],{"class":55},[34,163100,60067],{"class":44},[34,163102,163103,163105],{"class":36,"line":171},[34,163104,32941],{"class":44},[34,163106,1831],{"class":40},[34,163108,163109],{"class":36,"line":182},[34,163110,1475],{"emptyLinePlaceholder":1474},[34,163112,163113],{"class":36,"line":188},[34,163114,1475],{"emptyLinePlaceholder":1474},[34,163116,163117],{"class":36,"line":518},[34,163118,163119],{"class":40},"test()\n",[34,163121,163122,163124,163127],{"class":36,"line":524},[34,163123,723],{"class":44},[34,163125,163126],{"class":40},"(num)  ",[34,163128,163129],{"class":161},"# 报错\n",[19,163131,163133],{"id":163132},"_592-全局变量","5.9.2 全局变量",[103,163135,163136],{},"在函数外部定义的变量，可以在函数内部读取。",[24,163138,163140],{"className":26,"code":163139,"language":28,"meta":29,"style":29},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[31,163141,163142,163150,163154,163158,163166,163172,163176,163180],{"__ignoreMap":29},[34,163143,163144,163146,163148],{"class":36,"line":37},[34,163145,147899],{"class":40},[34,163147,221],{"class":55},[34,163149,150716],{"class":504},[34,163151,163152],{"class":36,"line":165},[34,163153,1475],{"emptyLinePlaceholder":1474},[34,163155,163156],{"class":36,"line":171},[34,163157,1475],{"emptyLinePlaceholder":1474},[34,163159,163160,163162,163164],{"class":36,"line":182},[34,163161,33588],{"class":55},[34,163163,162359],{"class":3617},[34,163165,33594],{"class":40},[34,163167,163168,163170],{"class":36,"line":188},[34,163169,32941],{"class":44},[34,163171,152023],{"class":40},[34,163173,163174],{"class":36,"line":518},[34,163175,1475],{"emptyLinePlaceholder":1474},[34,163177,163178],{"class":36,"line":524},[34,163179,1475],{"emptyLinePlaceholder":1474},[34,163181,163182],{"class":36,"line":530},[34,163183,162394],{"class":40},[103,163185,163186,163187,30031],{},"如果要在函数内部修改全局变量，需要 ",[31,163188,163189],{},"global",[24,163191,163193],{"className":26,"code":163192,"language":28,"meta":29,"style":29},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[31,163194,163195,163203,163207,163211,163220,163228,163236,163240,163244,163249],{"__ignoreMap":29},[34,163196,163197,163199,163201],{"class":36,"line":37},[34,163198,148054],{"class":40},[34,163200,221],{"class":55},[34,163202,48972],{"class":44},[34,163204,163205],{"class":36,"line":165},[34,163206,1475],{"emptyLinePlaceholder":1474},[34,163208,163209],{"class":36,"line":171},[34,163210,1475],{"emptyLinePlaceholder":1474},[34,163212,163213,163215,163218],{"class":36,"line":182},[34,163214,33588],{"class":55},[34,163216,163217],{"class":3617}," add_count",[34,163219,33594],{"class":40},[34,163221,163222,163225],{"class":36,"line":188},[34,163223,163224],{"class":55},"    global",[34,163226,163227],{"class":40}," count\n",[34,163229,163230,163232,163234],{"class":36,"line":518},[34,163231,160796],{"class":40},[34,163233,11127],{"class":55},[34,163235,57338],{"class":44},[34,163237,163238],{"class":36,"line":524},[34,163239,1475],{"emptyLinePlaceholder":1474},[34,163241,163242],{"class":36,"line":530},[34,163243,1475],{"emptyLinePlaceholder":1474},[34,163245,163246],{"class":36,"line":624},[34,163247,163248],{"class":40},"add_count()\n",[34,163250,163251,163253],{"class":36,"line":630},[34,163252,723],{"class":44},[34,163254,163255],{"class":40},"(count)\n",[103,163257,163258],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163260,163262],{"id":163261},"_510-函数嵌套调用","5.10 函数嵌套调用",[103,163264,163265],{},"一个函数中可以调用另一个函数。",[24,163267,163269],{"className":26,"code":163268,"language":28,"meta":29,"style":29},"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",[31,163270,163271,163280,163294,163298,163302,163311,163316,163336,163357,163361,163365,163369],{"__ignoreMap":29},[34,163272,163273,163275,163278],{"class":36,"line":37},[34,163274,33588],{"class":55},[34,163276,163277],{"class":3617}," print_line",[34,163279,33594],{"class":40},[34,163281,163282,163284,163286,163288,163290,163292],{"class":36,"line":165},[34,163283,32941],{"class":44},[34,163285,286],{"class":40},[34,163287,34124],{"class":504},[34,163289,8168],{"class":55},[34,163291,80302],{"class":44},[34,163293,101],{"class":40},[34,163295,163296],{"class":36,"line":171},[34,163297,1475],{"emptyLinePlaceholder":1474},[34,163299,163300],{"class":36,"line":182},[34,163301,1475],{"emptyLinePlaceholder":1474},[34,163303,163304,163306,163309],{"class":36,"line":188},[34,163305,33588],{"class":55},[34,163307,163308],{"class":3617}," print_info",[34,163310,150738],{"class":40},[34,163312,163313],{"class":36,"line":518},[34,163314,163315],{"class":40},"    print_line()\n",[34,163317,163318,163320,163322,163324,163326,163328,163330,163332,163334],{"class":36,"line":524},[34,163319,32941],{"class":44},[34,163321,286],{"class":40},[34,163323,1867],{"class":55},[34,163325,158045],{"class":504},[34,163327,2687],{"class":44},[34,163329,81447],{"class":40},[34,163331,2737],{"class":44},[34,163333,2058],{"class":504},[34,163335,101],{"class":40},[34,163337,163338,163340,163342,163344,163347,163349,163351,163353,163355],{"class":36,"line":530},[34,163339,32941],{"class":44},[34,163341,286],{"class":40},[34,163343,1867],{"class":55},[34,163345,163346],{"class":504},"\"年龄:",[34,163348,2687],{"class":44},[34,163350,71860],{"class":40},[34,163352,2737],{"class":44},[34,163354,2058],{"class":504},[34,163356,101],{"class":40},[34,163358,163359],{"class":36,"line":624},[34,163360,163315],{"class":40},[34,163362,163363],{"class":36,"line":630},[34,163364,1475],{"emptyLinePlaceholder":1474},[34,163366,163367],{"class":36,"line":636},[34,163368,1475],{"emptyLinePlaceholder":1474},[34,163370,163371,163374,163376,163378,163380],{"class":36,"line":1513},[34,163372,163373],{"class":40},"print_info(",[34,163375,151251],{"class":504},[34,163377,48],{"class":40},[34,163379,2445],{"class":44},[34,163381,101],{"class":40},[103,163383,163384],{},"这种方式可以把小功能组合成大功能。",[14,163386,163388],{"id":163387},"_511-参数检查","5.11 参数检查",[103,163390,163391],{},"函数内部可以检查参数是否合法。",[24,163393,163395],{"className":26,"code":163394,"language":28,"meta":29,"style":29},"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",[31,163396,163397,163406,163418,163424,163434,163438,163442,163459,163463,163475,163486,163492],{"__ignoreMap":29},[34,163398,163399,163401,163404],{"class":36,"line":37},[34,163400,33588],{"class":55},[34,163402,163403],{"class":3617}," divide",[34,163405,152456],{"class":40},[34,163407,163408,163410,163412,163414,163416],{"class":36,"line":165},[34,163409,4754],{"class":55},[34,163411,12532],{"class":40},[34,163413,4602],{"class":55},[34,163415,98],{"class":44},[34,163417,5392],{"class":40},[34,163419,163420,163422],{"class":36,"line":171},[34,163421,16398],{"class":55},[34,163423,153535],{"class":44},[34,163425,163426,163428,163430,163432],{"class":36,"line":182},[34,163427,5743],{"class":55},[34,163429,12519],{"class":40},[34,163431,2379],{"class":55},[34,163433,152467],{"class":40},[34,163435,163436],{"class":36,"line":188},[34,163437,1475],{"emptyLinePlaceholder":1474},[34,163439,163440],{"class":36,"line":518},[34,163441,1475],{"emptyLinePlaceholder":1474},[34,163443,163444,163446,163448,163451,163453,163455,163457],{"class":36,"line":524},[34,163445,162669],{"class":40},[34,163447,221],{"class":55},[34,163449,163450],{"class":40}," divide(",[34,163452,410],{"class":44},[34,163454,48],{"class":40},[34,163456,177],{"class":44},[34,163458,101],{"class":40},[34,163460,163461],{"class":36,"line":530},[34,163462,1475],{"emptyLinePlaceholder":1474},[34,163464,163465,163467,163469,163471,163473],{"class":36,"line":624},[34,163466,3189],{"class":55},[34,163468,162915],{"class":40},[34,163470,40568],{"class":55},[34,163472,59],{"class":44},[34,163474,5392],{"class":40},[34,163476,163477,163479,163481,163484],{"class":36,"line":630},[34,163478,32941],{"class":44},[34,163480,286],{"class":40},[34,163482,163483],{"class":504},"\"除数不能为0\"",[34,163485,101],{"class":40},[34,163487,163488,163490],{"class":36,"line":636},[34,163489,3355],{"class":55},[34,163491,5392],{"class":40},[34,163493,163494,163496],{"class":36,"line":1513},[34,163495,32941],{"class":44},[34,163497,78223],{"class":40},[14,163499,163501],{"id":163500},"_512-类型提示","5.12 类型提示",[103,163503,163504],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[24,163506,163508],{"className":26,"code":163507,"language":28,"meta":29,"style":29},"def add(a: int, b: int) -> int:\n    return a + b\n",[31,163509,163510,163533],{"__ignoreMap":29},[34,163511,163512,163514,163516,163519,163521,163524,163526,163529,163531],{"class":36,"line":37},[34,163513,33588],{"class":55},[34,163515,6860],{"class":3617},[34,163517,163518],{"class":40},"(a: ",[34,163520,571],{"class":44},[34,163522,163523],{"class":40},", b: ",[34,163525,571],{"class":44},[34,163527,163528],{"class":40},") -> ",[34,163530,571],{"class":44},[34,163532,5392],{"class":40},[34,163534,163535,163537,163539,163541],{"class":36,"line":165},[34,163536,5743],{"class":55},[34,163538,12519],{"class":40},[34,163540,2277],{"class":55},[34,163542,152467],{"class":40},[103,163544,163545],{},"字符串参数：",[24,163547,163549],{"className":26,"code":163548,"language":28,"meta":29,"style":29},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[31,163550,163551,163568],{"__ignoreMap":29},[34,163552,163553,163555,163557,163560,163562,163564,163566],{"class":36,"line":37},[34,163554,33588],{"class":55},[34,163556,162359],{"class":3617},[34,163558,163559],{"class":40},"(name: ",[34,163561,2961],{"class":44},[34,163563,163528],{"class":40},[34,163565,492],{"class":44},[34,163567,5392],{"class":40},[34,163569,163570,163572,163574,163576,163578,163580,163582,163584,163586],{"class":36,"line":165},[34,163571,32941],{"class":44},[34,163573,286],{"class":40},[34,163575,1867],{"class":55},[34,163577,158417],{"class":504},[34,163579,2687],{"class":44},[34,163581,81447],{"class":40},[34,163583,2737],{"class":44},[34,163585,2058],{"class":504},[34,163587,101],{"class":40},[103,163589,163590],{},"列表参数：",[24,163592,163594],{"className":26,"code":163593,"language":28,"meta":29,"style":29},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[31,163595,163596,163615,163623,163635,163644],{"__ignoreMap":29},[34,163597,163598,163600,163603,163606,163608,163611,163613],{"class":36,"line":37},[34,163599,33588],{"class":55},[34,163601,163602],{"class":3617}," get_total",[34,163604,163605],{"class":40},"(numbers: list[",[34,163607,571],{"class":44},[34,163609,163610],{"class":40},"]) -> ",[34,163612,571],{"class":44},[34,163614,5392],{"class":40},[34,163616,163617,163619,163621],{"class":36,"line":165},[34,163618,160670],{"class":40},[34,163620,221],{"class":55},[34,163622,48972],{"class":44},[34,163624,163625,163627,163630,163632],{"class":36,"line":171},[34,163626,4854],{"class":55},[34,163628,163629],{"class":40}," number ",[34,163631,27689],{"class":55},[34,163633,163634],{"class":40}," numbers:\n",[34,163636,163637,163639,163641],{"class":36,"line":182},[34,163638,161345],{"class":40},[34,163640,11127],{"class":55},[34,163642,163643],{"class":40}," number\n",[34,163645,163646,163648],{"class":36,"line":188},[34,163647,5743],{"class":55},[34,163649,163650],{"class":40}," total\n",[103,163652,163653],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163655,163657],{"id":163656},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[24,163659,163661],{"className":26,"code":163660,"language":28,"meta":29,"style":29},"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",[31,163662,163663,163673,163677,163681,163689,163700,163710,163720,163730,163740,163744,163748,163757,163779,163783,163787,163796,163802,163822,163834,163845,163849,163858,163869,163874,163878,163882,163891,163897,163916,163928,163938,163942,163953,163963,163967,163975,163986,163990,163994,163998,164006,164011,164025,164029,164041,164046,164058,164063,164075,164080,164092,164102,164106,164112],{"__ignoreMap":29},[34,163664,163665,163668,163670],{"class":36,"line":37},[34,163666,163667],{"class":40},"balance ",[34,163669,221],{"class":55},[34,163671,163672],{"class":44}," 1000\n",[34,163674,163675],{"class":36,"line":165},[34,163676,1475],{"emptyLinePlaceholder":1474},[34,163678,163679],{"class":36,"line":171},[34,163680,1475],{"emptyLinePlaceholder":1474},[34,163682,163683,163685,163687],{"class":36,"line":182},[34,163684,33588],{"class":55},[34,163686,153396],{"class":3617},[34,163688,33594],{"class":40},[34,163690,163691,163693,163695,163698],{"class":36,"line":188},[34,163692,32941],{"class":44},[34,163694,286],{"class":40},[34,163696,163697],{"class":504},"\"====== ATM ======\"",[34,163699,101],{"class":40},[34,163701,163702,163704,163706,163708],{"class":36,"line":518},[34,163703,32941],{"class":44},[34,163705,286],{"class":40},[34,163707,162011],{"class":504},[34,163709,101],{"class":40},[34,163711,163712,163714,163716,163718],{"class":36,"line":524},[34,163713,32941],{"class":44},[34,163715,286],{"class":40},[34,163717,162022],{"class":504},[34,163719,101],{"class":40},[34,163721,163722,163724,163726,163728],{"class":36,"line":530},[34,163723,32941],{"class":44},[34,163725,286],{"class":40},[34,163727,162033],{"class":504},[34,163729,101],{"class":40},[34,163731,163732,163734,163736,163738],{"class":36,"line":624},[34,163733,32941],{"class":44},[34,163735,286],{"class":40},[34,163737,162044],{"class":504},[34,163739,101],{"class":40},[34,163741,163742],{"class":36,"line":630},[34,163743,1475],{"emptyLinePlaceholder":1474},[34,163745,163746],{"class":36,"line":636},[34,163747,1475],{"emptyLinePlaceholder":1474},[34,163749,163750,163752,163755],{"class":36,"line":1513},[34,163751,33588],{"class":55},[34,163753,163754],{"class":3617}," show_balance",[34,163756,33594],{"class":40},[34,163758,163759,163761,163763,163765,163768,163770,163773,163775,163777],{"class":36,"line":1519},[34,163760,32941],{"class":44},[34,163762,286],{"class":40},[34,163764,1867],{"class":55},[34,163766,163767],{"class":504},"\"当前余额:",[34,163769,2687],{"class":44},[34,163771,163772],{"class":40},"balance",[34,163774,2737],{"class":44},[34,163776,158375],{"class":504},[34,163778,101],{"class":40},[34,163780,163781],{"class":36,"line":3283},[34,163782,1475],{"emptyLinePlaceholder":1474},[34,163784,163785],{"class":36,"line":3297},[34,163786,1475],{"emptyLinePlaceholder":1474},[34,163788,163789,163791,163794],{"class":36,"line":3302},[34,163790,33588],{"class":55},[34,163792,163793],{"class":3617}," save_money",[34,163795,33594],{"class":40},[34,163797,163798,163800],{"class":36,"line":3308},[34,163799,163224],{"class":55},[34,163801,151462],{"class":40},[34,163803,163804,163807,163809,163811,163813,163815,163817,163820],{"class":36,"line":3328},[34,163805,163806],{"class":40},"    money ",[34,163808,221],{"class":55},[34,163810,111160],{"class":44},[34,163812,286],{"class":40},[34,163814,55460],{"class":44},[34,163816,286],{"class":40},[34,163818,163819],{"class":504},"\"请输入存款金额:\"",[34,163821,296],{"class":40},[34,163823,163824,163826,163828,163830,163832],{"class":36,"line":3333},[34,163825,4754],{"class":55},[34,163827,151505],{"class":40},[34,163829,3246],{"class":55},[34,163831,98],{"class":44},[34,163833,5392],{"class":40},[34,163835,163836,163838,163840,163843],{"class":36,"line":3347},[34,163837,34092],{"class":44},[34,163839,286],{"class":40},[34,163841,163842],{"class":504},"\"金额必须大于0\"",[34,163844,101],{"class":40},[34,163846,163847],{"class":36,"line":3352},[34,163848,153724],{"class":55},[34,163850,163851,163854,163856],{"class":36,"line":3381},[34,163852,163853],{"class":40},"    balance ",[34,163855,11127],{"class":55},[34,163857,151538],{"class":40},[34,163859,163860,163862,163864,163867],{"class":36,"line":3386},[34,163861,32941],{"class":44},[34,163863,286],{"class":40},[34,163865,163866],{"class":504},"\"存款成功\"",[34,163868,101],{"class":40},[34,163870,163871],{"class":36,"line":3403},[34,163872,163873],{"class":40},"    show_balance()\n",[34,163875,163876],{"class":36,"line":3408},[34,163877,1475],{"emptyLinePlaceholder":1474},[34,163879,163880],{"class":36,"line":3413},[34,163881,1475],{"emptyLinePlaceholder":1474},[34,163883,163884,163886,163889],{"class":36,"line":3418},[34,163885,33588],{"class":55},[34,163887,163888],{"class":3617}," withdraw_money",[34,163890,33594],{"class":40},[34,163892,163893,163895],{"class":36,"line":3432},[34,163894,163224],{"class":55},[34,163896,151462],{"class":40},[34,163898,163899,163901,163903,163905,163907,163909,163911,163914],{"class":36,"line":3437},[34,163900,163806],{"class":40},[34,163902,221],{"class":55},[34,163904,111160],{"class":44},[34,163906,286],{"class":40},[34,163908,55460],{"class":44},[34,163910,286],{"class":40},[34,163912,163913],{"class":504},"\"请输入取款金额:\"",[34,163915,296],{"class":40},[34,163917,163918,163920,163922,163924,163926],{"class":36,"line":4230},[34,163919,4754],{"class":55},[34,163921,151505],{"class":40},[34,163923,3246],{"class":55},[34,163925,98],{"class":44},[34,163927,5392],{"class":40},[34,163929,163930,163932,163934,163936],{"class":36,"line":4244},[34,163931,34092],{"class":44},[34,163933,286],{"class":40},[34,163935,163842],{"class":504},[34,163937,101],{"class":40},[34,163939,163940],{"class":36,"line":4252},[34,163941,153724],{"class":55},[34,163943,163944,163946,163948,163950],{"class":36,"line":4257},[34,163945,4754],{"class":55},[34,163947,151505],{"class":40},[34,163949,2751],{"class":55},[34,163951,163952],{"class":40}," balance:\n",[34,163954,163955,163957,163959,163961],{"class":36,"line":4263},[34,163956,34092],{"class":44},[34,163958,286],{"class":40},[34,163960,151600],{"class":504},[34,163962,101],{"class":40},[34,163964,163965],{"class":36,"line":4269},[34,163966,153724],{"class":55},[34,163968,163969,163971,163973],{"class":36,"line":4274},[34,163970,163853],{"class":40},[34,163972,151615],{"class":55},[34,163974,151538],{"class":40},[34,163976,163977,163979,163981,163984],{"class":36,"line":9598},[34,163978,32941],{"class":44},[34,163980,286],{"class":40},[34,163982,163983],{"class":504},"\"取款成功\"",[34,163985,101],{"class":40},[34,163987,163988],{"class":36,"line":9622},[34,163989,163873],{"class":40},[34,163991,163992],{"class":36,"line":9627},[34,163993,1475],{"emptyLinePlaceholder":1474},[34,163995,163996],{"class":36,"line":9633},[34,163997,1475],{"emptyLinePlaceholder":1474},[34,163999,164000,164002,164004],{"class":36,"line":9660},[34,164001,110026],{"class":55},[34,164003,69],{"class":44},[34,164005,5392],{"class":40},[34,164007,164008],{"class":36,"line":9665},[34,164009,164010],{"class":40},"    show_menu()\n",[34,164012,164013,164015,164017,164019,164021,164023],{"class":36,"line":9671},[34,164014,162055],{"class":40},[34,164016,221],{"class":55},[34,164018,62244],{"class":44},[34,164020,286],{"class":40},[34,164022,154436],{"class":504},[34,164024,101],{"class":40},[34,164026,164027],{"class":36,"line":9683},[34,164028,1475],{"emptyLinePlaceholder":1474},[34,164030,164031,164033,164035,164037,164039],{"class":36,"line":9695},[34,164032,4754],{"class":55},[34,164034,154449],{"class":40},[34,164036,4602],{"class":55},[34,164038,154454],{"class":504},[34,164040,5392],{"class":40},[34,164042,164043],{"class":36,"line":9707},[34,164044,164045],{"class":40},"        show_balance()\n",[34,164047,164048,164050,164052,164054,164056],{"class":36,"line":11366},[34,164049,40933],{"class":55},[34,164051,154449],{"class":40},[34,164053,4602],{"class":55},[34,164055,154473],{"class":504},[34,164057,5392],{"class":40},[34,164059,164060],{"class":36,"line":11391},[34,164061,164062],{"class":40},"        save_money()\n",[34,164064,164065,164067,164069,164071,164073],{"class":36,"line":11414},[34,164066,40933],{"class":55},[34,164068,154449],{"class":40},[34,164070,4602],{"class":55},[34,164072,154491],{"class":504},[34,164074,5392],{"class":40},[34,164076,164077],{"class":36,"line":11438},[34,164078,164079],{"class":40},"        withdraw_money()\n",[34,164081,164082,164084,164086,164088,164090],{"class":36,"line":11443},[34,164083,40933],{"class":55},[34,164085,154449],{"class":40},[34,164087,4602],{"class":55},[34,164089,154545],{"class":504},[34,164091,5392],{"class":40},[34,164093,164094,164096,164098,164100],{"class":36,"line":11448},[34,164095,34092],{"class":44},[34,164097,286],{"class":40},[34,164099,154556],{"class":504},[34,164101,101],{"class":40},[34,164103,164104],{"class":36,"line":11453},[34,164105,33268],{"class":55},[34,164107,164108,164110],{"class":36,"line":11462},[34,164109,159385],{"class":55},[34,164111,5392],{"class":40},[34,164113,164114,164116,164118,164120],{"class":36,"line":11467},[34,164115,34092],{"class":44},[34,164117,286],{"class":40},[34,164119,154577],{"class":504},[34,164121,101],{"class":40},[103,164123,164124],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164126,164128],{"id":164127},"_514-易错点","5.14 易错点",[1772,164130,164131,164134,164137,164142,164147,164150],{},[1775,164132,164133],{},"函数定义后必须调用才会执行。",[1775,164135,164136],{},"函数名后面有括号才是调用。",[1775,164138,164139,164141],{},[31,164140,18692],{}," 后面的代码不会执行。",[1775,164143,164144,164145,30031],{},"没有返回值的函数默认返回 ",[31,164146,492],{},[1775,164148,164149],{},"局部变量不能在函数外部访问。",[1775,164151,164152,164153,164155],{},"不要滥用 ",[31,164154,163189],{},"，更好的方式是让函数返回新值。",[103,164157,164158,164159,164161],{},"例如不用 ",[31,164160,163189],{}," 改写存款：",[24,164163,164165],{"className":26,"code":164164,"language":28,"meta":29,"style":29},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[31,164166,164167,164176,164187,164191,164195,164203,164216],{"__ignoreMap":29},[34,164168,164169,164171,164173],{"class":36,"line":37},[34,164170,33588],{"class":55},[34,164172,163793],{"class":3617},[34,164174,164175],{"class":40},"(balance, money):\n",[34,164177,164178,164180,164183,164185],{"class":36,"line":165},[34,164179,5743],{"class":55},[34,164181,164182],{"class":40}," balance ",[34,164184,2277],{"class":55},[34,164186,151538],{"class":40},[34,164188,164189],{"class":36,"line":171},[34,164190,1475],{"emptyLinePlaceholder":1474},[34,164192,164193],{"class":36,"line":182},[34,164194,1475],{"emptyLinePlaceholder":1474},[34,164196,164197,164199,164201],{"class":36,"line":188},[34,164198,163667],{"class":40},[34,164200,221],{"class":55},[34,164202,163672],{"class":44},[34,164204,164205,164207,164209,164212,164214],{"class":36,"line":518},[34,164206,163667],{"class":40},[34,164208,221],{"class":55},[34,164210,164211],{"class":40}," save_money(balance, ",[34,164213,3376],{"class":44},[34,164215,101],{"class":40},[34,164217,164218,164220],{"class":36,"line":524},[34,164219,723],{"class":44},[34,164221,164222],{"class":40},"(balance)\n",[14,164224,164226],{"id":164225},"_515-本章练习","5.15 本章练习",[1772,164228,164229,164236,164242,164248,164254],{},[1775,164230,164231,164232,164235],{},"定义函数 ",[31,164233,164234],{},"print_student(name, age)","，输出学生信息。",[1775,164237,164231,164238,164241],{},[31,164239,164240],{},"get_max(a, b, c)","，返回三个数中的最大值。",[1775,164243,164231,164244,164247],{},[31,164245,164246],{},"is_even(num)","，判断一个数是否为偶数。",[1775,164249,164231,164250,164253],{},[31,164251,164252],{},"calculate_bmi(weight, height)","，返回 BMI。",[1775,164255,164256],{},"把第 4 章的菜单程序拆分成多个函数。",[1711,164258,164259],{},"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":29,"searchDepth":165,"depth":165,"links":164261},[164262,164263,164264,164265,164266,164267,164268,164269,164270,164274,164275,164276,164277,164278,164279],{"id":162282,"depth":165,"text":162283},{"id":162323,"depth":165,"text":162324},{"id":162413,"depth":165,"text":162414},{"id":162494,"depth":165,"text":162495},{"id":162627,"depth":165,"text":162628},{"id":162749,"depth":165,"text":162750},{"id":162871,"depth":165,"text":162872},{"id":162948,"depth":165,"text":162949},{"id":163070,"depth":165,"text":163071,"children":164271},[164272,164273],{"id":163074,"depth":171,"text":163075},{"id":163132,"depth":171,"text":163133},{"id":163261,"depth":165,"text":163262},{"id":163387,"depth":165,"text":163388},{"id":163500,"depth":165,"text":163501},{"id":163656,"depth":165,"text":163657},{"id":164127,"depth":165,"text":164128},{"id":164225,"depth":165,"text":164226},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162274,"description":1744},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164286,"title":164287,"body":164288,"description":1744,"extension":1745,"meta":167332,"navigation":1474,"path":167333,"seo":167334,"stem":167335,"__hash__":167336},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164289,"toc":167313},[164290,164293,164297,164300,164303,164407,164410,164414,164417,164497,164500,164504,164507,164567,164570,164606,164609,164624,164628,164701,164704,164759,164762,164832,164835,164919,164929,164987,164991,165036,165039,165065,165068,165174,165178,165181,165223,165226,165290,165293,165297,165300,165361,165364,165394,165397,165435,165439,165442,165451,165454,165578,165581,165622,165626,165629,165640,165680,165683,165698,165703,165706,165773,165776,165866,165870,165873,165921,165924,165951,165953,165983,165986,166006,166009,166040,166043,166076,166080,166083,166107,166110,166134,166137,166161,166165,166168,166298,166301,166381,166384,166459,166463,166466,166516,166519,166561,166564,166588,166590,166614,166617,166672,166675,166741,166745,166748,166751,166789,166792,166845,166848,166894,166897,166930,166933,166937,167256,167260,167289,167293,167310],[10,164291,164287],{"id":164292},"_6-数据容器",[14,164294,164296],{"id":164295},"_61-什么是数据容器","6.1 什么是数据容器",[103,164298,164299],{},"数据容器用于一次保存多个数据。",[103,164301,164302],{},"常见容器：",[1948,164304,164305,164322],{},[1951,164306,164307],{},[1954,164308,164309,164311,164314,164317,164320],{},[1957,164310,27417],{},[1957,164312,164313],{},"是否有序",[1957,164315,164316],{},"是否可变",[1957,164318,164319],{},"是否允许重复",[1957,164321,29138],{},[1994,164323,164324,164342,164358,164373,164390],{},[1954,164325,164326,164329,164332,164335,164338],{},[1999,164327,164328],{},"list列表",[1999,164330,164331],{},"有序",[1999,164333,164334],{},"可变",[1999,164336,164337],{},"允许",[1999,164339,164340],{},[31,164341,156620],{},[1954,164343,164344,164347,164349,164352,164354],{},[1999,164345,164346],{},"tuple元组",[1999,164348,164331],{},[1999,164350,164351],{},"不可变",[1999,164353,164337],{},[1999,164355,164356],{},[31,164357,156633],{},[1954,164359,164360,164363,164365,164367,164369],{},[1999,164361,164362],{},"str字符串",[1999,164364,164331],{},[1999,164366,164351],{},[1999,164368,164337],{},[1999,164370,164371],{},[31,164372,157243],{},[1954,164374,164375,164378,164381,164383,164386],{},[1999,164376,164377],{},"set集合",[1999,164379,164380],{},"无序",[1999,164382,164334],{},[1999,164384,164385],{},"不允许",[1999,164387,164388],{},[31,164389,156658],{},[1954,164391,164392,164395,164397,164399,164402],{},[1999,164393,164394],{},"dict字典",[1999,164396,164331],{},[1999,164398,164334],{},[1999,164400,164401],{},"key不允许重复",[1999,164403,164404],{},[31,164405,164406],{},"{\"name\": \"小明\"}",[103,164408,164409],{},"Python 3.7 之后，字典保持插入顺序。",[14,164411,164413],{"id":164412},"_62-列表list","6.2 列表list",[103,164415,164416],{},"列表用于保存一组有顺序的数据。",[24,164418,164420],{"className":26,"code":164419,"language":28,"meta":29,"style":29},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[31,164421,164422,164442,164467,164488],{"__ignoreMap":29},[34,164423,164424,164426,164428,164430,164432,164434,164436,164438,164440],{"class":36,"line":37},[34,164425,161743],{"class":40},[34,164427,221],{"class":55},[34,164429,53865],{"class":40},[34,164431,151251],{"class":504},[34,164433,48],{"class":40},[34,164435,152299],{"class":504},[34,164437,48],{"class":40},[34,164439,161094],{"class":504},[34,164441,34887],{"class":40},[34,164443,164444,164447,164449,164451,164453,164455,164457,164459,164461,164463,164465],{"class":36,"line":165},[34,164445,164446],{"class":40},"numbers ",[34,164448,221],{"class":55},[34,164450,53865],{"class":40},[34,164452,394],{"class":44},[34,164454,48],{"class":40},[34,164456,332],{"class":44},[34,164458,48],{"class":40},[34,164460,337],{"class":44},[34,164462,48],{"class":40},[34,164464,247],{"class":44},[34,164466,34887],{"class":40},[34,164468,164469,164472,164474,164476,164478,164480,164482,164484,164486],{"class":36,"line":171},[34,164470,164471],{"class":40},"mixed ",[34,164473,221],{"class":55},[34,164475,53865],{"class":40},[34,164477,151251],{"class":504},[34,164479,48],{"class":40},[34,164481,2445],{"class":44},[34,164483,48],{"class":40},[34,164485,33118],{"class":44},[34,164487,34887],{"class":40},[34,164489,164490,164493,164495],{"class":36,"line":182},[34,164491,164492],{"class":40},"empty ",[34,164494,221],{"class":55},[34,164496,53477],{"class":40},[103,164498,164499],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164501,164503],{"id":164502},"_63-列表索引","6.3 列表索引",[103,164505,164506],{},"正向索引从 0 开始：",[24,164508,164510],{"className":26,"code":164509,"language":28,"meta":29,"style":29},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[31,164511,164512,164532,164536,164547,164557],{"__ignoreMap":29},[34,164513,164514,164516,164518,164520,164522,164524,164526,164528,164530],{"class":36,"line":37},[34,164515,161743],{"class":40},[34,164517,221],{"class":55},[34,164519,53865],{"class":40},[34,164521,151251],{"class":504},[34,164523,48],{"class":40},[34,164525,152299],{"class":504},[34,164527,48],{"class":40},[34,164529,161094],{"class":504},[34,164531,34887],{"class":40},[34,164533,164534],{"class":36,"line":165},[34,164535,1475],{"emptyLinePlaceholder":1474},[34,164537,164538,164540,164543,164545],{"class":36,"line":171},[34,164539,723],{"class":44},[34,164541,164542],{"class":40},"(names[",[34,164544,177],{"class":44},[34,164546,1077],{"class":40},[34,164548,164549,164551,164553,164555],{"class":36,"line":182},[34,164550,723],{"class":44},[34,164552,164542],{"class":40},[34,164554,394],{"class":44},[34,164556,1077],{"class":40},[34,164558,164559,164561,164563,164565],{"class":36,"line":188},[34,164560,723],{"class":44},[34,164562,164542],{"class":40},[34,164564,332],{"class":44},[34,164566,1077],{"class":40},[103,164568,164569],{},"反向索引从 -1 开始：",[24,164571,164573],{"className":26,"code":164572,"language":28,"meta":29,"style":29},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[31,164574,164575,164591],{"__ignoreMap":29},[34,164576,164577,164579,164581,164583,164585,164588],{"class":36,"line":37},[34,164578,723],{"class":44},[34,164580,164542],{"class":40},[34,164582,2327],{"class":55},[34,164584,394],{"class":44},[34,164586,164587],{"class":40},"])  ",[34,164589,164590],{"class":161},"# 小刚\n",[34,164592,164593,164595,164597,164599,164601,164603],{"class":36,"line":165},[34,164594,723],{"class":44},[34,164596,164542],{"class":40},[34,164598,2327],{"class":55},[34,164600,332],{"class":44},[34,164602,164587],{"class":40},[34,164604,164605],{"class":161},"# 小红\n",[103,164607,164608],{},"索引越界会报错：",[24,164610,164612],{"className":26,"code":164611,"language":28,"meta":29,"style":29},"print(names[3])\n",[31,164613,164614],{"__ignoreMap":29},[34,164615,164616,164618,164620,164622],{"class":36,"line":37},[34,164617,723],{"class":44},[34,164619,164542],{"class":40},[34,164621,337],{"class":44},[34,164623,1077],{"class":40},[14,164625,164627],{"id":164626},"_64-列表常用方法","6.4 列表常用方法",[24,164629,164631],{"className":26,"code":164630,"language":28,"meta":29,"style":29},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[31,164632,164633,164649,164653,164662,164676,164690,164694],{"__ignoreMap":29},[34,164634,164635,164637,164639,164641,164643,164645,164647],{"class":36,"line":37},[34,164636,161743],{"class":40},[34,164638,221],{"class":55},[34,164640,53865],{"class":40},[34,164642,151251],{"class":504},[34,164644,48],{"class":40},[34,164646,152299],{"class":504},[34,164648,34887],{"class":40},[34,164650,164651],{"class":36,"line":165},[34,164652,1475],{"emptyLinePlaceholder":1474},[34,164654,164655,164658,164660],{"class":36,"line":171},[34,164656,164657],{"class":40},"names.append(",[34,164659,161094],{"class":504},[34,164661,101],{"class":40},[34,164663,164664,164667,164669,164671,164674],{"class":36,"line":182},[34,164665,164666],{"class":40},"names.insert(",[34,164668,394],{"class":44},[34,164670,48],{"class":40},[34,164672,164673],{"class":504},"\"小李\"",[34,164675,101],{"class":40},[34,164677,164678,164681,164683,164685,164688],{"class":36,"line":188},[34,164679,164680],{"class":40},"names.extend([",[34,164682,10333],{"class":504},[34,164684,48],{"class":40},[34,164686,164687],{"class":504},"\"小赵\"",[34,164689,1077],{"class":40},[34,164691,164692],{"class":36,"line":518},[34,164693,1475],{"emptyLinePlaceholder":1474},[34,164695,164696,164698],{"class":36,"line":524},[34,164697,723],{"class":44},[34,164699,164700],{"class":40},"(names)\n",[103,164702,164703],{},"删除元素：",[24,164705,164707],{"className":26,"code":164706,"language":28,"meta":29,"style":29},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[31,164708,164709,164718,164728,164742,164754],{"__ignoreMap":29},[34,164710,164711,164714,164716],{"class":36,"line":37},[34,164712,164713],{"class":40},"names.remove(",[34,164715,152299],{"class":504},[34,164717,101],{"class":40},[34,164719,164720,164723,164725],{"class":36,"line":165},[34,164721,164722],{"class":40},"last ",[34,164724,221],{"class":55},[34,164726,164727],{"class":40}," names.pop()\n",[34,164729,164730,164733,164735,164738,164740],{"class":36,"line":171},[34,164731,164732],{"class":40},"first ",[34,164734,221],{"class":55},[34,164736,164737],{"class":40}," names.pop(",[34,164739,177],{"class":44},[34,164741,101],{"class":40},[34,164743,164744,164747,164750,164752],{"class":36,"line":182},[34,164745,164746],{"class":55},"del",[34,164748,164749],{"class":40}," names[",[34,164751,177],{"class":44},[34,164753,34887],{"class":40},[34,164755,164756],{"class":36,"line":188},[34,164757,164758],{"class":40},"names.clear()\n",[103,164760,164761],{},"查询和统计：",[24,164763,164765],{"className":26,"code":164764,"language":28,"meta":29,"style":29},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[31,164766,164767,164795,164799,164810,164821],{"__ignoreMap":29},[34,164768,164769,164771,164773,164775,164777,164779,164781,164783,164785,164787,164789,164791,164793],{"class":36,"line":37},[34,164770,164446],{"class":40},[34,164772,221],{"class":55},[34,164774,53865],{"class":40},[34,164776,394],{"class":44},[34,164778,48],{"class":40},[34,164780,332],{"class":44},[34,164782,48],{"class":40},[34,164784,337],{"class":44},[34,164786,48],{"class":40},[34,164788,332],{"class":44},[34,164790,48],{"class":40},[34,164792,247],{"class":44},[34,164794,34887],{"class":40},[34,164796,164797],{"class":36,"line":165},[34,164798,1475],{"emptyLinePlaceholder":1474},[34,164800,164801,164803,164806,164808],{"class":36,"line":171},[34,164802,723],{"class":44},[34,164804,164805],{"class":40},"(numbers.index(",[34,164807,337],{"class":44},[34,164809,296],{"class":40},[34,164811,164812,164814,164817,164819],{"class":36,"line":182},[34,164813,723],{"class":44},[34,164815,164816],{"class":40},"(numbers.count(",[34,164818,332],{"class":44},[34,164820,296],{"class":40},[34,164822,164823,164825,164827,164829],{"class":36,"line":188},[34,164824,723],{"class":44},[34,164826,286],{"class":40},[34,164828,9008],{"class":44},[34,164830,164831],{"class":40},"(numbers))\n",[103,164833,164834],{},"排序：",[24,164836,164838],{"className":26,"code":164837,"language":28,"meta":29,"style":29},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[31,164839,164840,164864,164868,164873,164880,164884,164898,164904,164908,164913],{"__ignoreMap":29},[34,164841,164842,164844,164846,164848,164850,164852,164854,164856,164858,164860,164862],{"class":36,"line":37},[34,164843,164446],{"class":40},[34,164845,221],{"class":55},[34,164847,53865],{"class":40},[34,164849,337],{"class":44},[34,164851,48],{"class":40},[34,164853,394],{"class":44},[34,164855,48],{"class":40},[34,164857,224],{"class":44},[34,164859,48],{"class":40},[34,164861,332],{"class":44},[34,164863,34887],{"class":40},[34,164865,164866],{"class":36,"line":165},[34,164867,1475],{"emptyLinePlaceholder":1474},[34,164869,164870],{"class":36,"line":171},[34,164871,164872],{"class":40},"numbers.sort()\n",[34,164874,164875,164877],{"class":36,"line":182},[34,164876,723],{"class":44},[34,164878,164879],{"class":40},"(numbers)\n",[34,164881,164882],{"class":36,"line":188},[34,164883,1475],{"emptyLinePlaceholder":1474},[34,164885,164886,164889,164892,164894,164896],{"class":36,"line":518},[34,164887,164888],{"class":40},"numbers.sort(",[34,164890,164891],{"class":51},"reverse",[34,164893,221],{"class":55},[34,164895,33118],{"class":44},[34,164897,101],{"class":40},[34,164899,164900,164902],{"class":36,"line":524},[34,164901,723],{"class":44},[34,164903,164879],{"class":40},[34,164905,164906],{"class":36,"line":530},[34,164907,1475],{"emptyLinePlaceholder":1474},[34,164909,164910],{"class":36,"line":624},[34,164911,164912],{"class":40},"numbers.reverse()\n",[34,164914,164915,164917],{"class":36,"line":630},[34,164916,723],{"class":44},[34,164918,164879],{"class":40},[103,164920,164921,164924,164925,164928],{},[31,164922,164923],{},"sort()"," 会修改原列表，",[31,164926,164927],{},"sorted()"," 返回新列表。",[24,164930,164932],{"className":26,"code":164931,"language":28,"meta":29,"style":29},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[31,164933,164934,164958,164970,164974,164980],{"__ignoreMap":29},[34,164935,164936,164938,164940,164942,164944,164946,164948,164950,164952,164954,164956],{"class":36,"line":37},[34,164937,164446],{"class":40},[34,164939,221],{"class":55},[34,164941,53865],{"class":40},[34,164943,337],{"class":44},[34,164945,48],{"class":40},[34,164947,394],{"class":44},[34,164949,48],{"class":40},[34,164951,224],{"class":44},[34,164953,48],{"class":40},[34,164955,332],{"class":44},[34,164957,34887],{"class":40},[34,164959,164960,164963,164965,164968],{"class":36,"line":165},[34,164961,164962],{"class":40},"new_numbers ",[34,164964,221],{"class":55},[34,164966,164967],{"class":44}," sorted",[34,164969,164879],{"class":40},[34,164971,164972],{"class":36,"line":171},[34,164973,1475],{"emptyLinePlaceholder":1474},[34,164975,164976,164978],{"class":36,"line":182},[34,164977,723],{"class":44},[34,164979,164879],{"class":40},[34,164981,164982,164984],{"class":36,"line":188},[34,164983,723],{"class":44},[34,164985,164986],{"class":40},"(new_numbers)\n",[14,164988,164990],{"id":164989},"_65-列表遍历","6.5 列表遍历",[24,164992,164994],{"className":26,"code":164993,"language":28,"meta":29,"style":29},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[31,164995,164996,165016,165020,165030],{"__ignoreMap":29},[34,164997,164998,165000,165002,165004,165006,165008,165010,165012,165014],{"class":36,"line":37},[34,164999,161743],{"class":40},[34,165001,221],{"class":55},[34,165003,53865],{"class":40},[34,165005,151251],{"class":504},[34,165007,48],{"class":40},[34,165009,152299],{"class":504},[34,165011,48],{"class":40},[34,165013,161094],{"class":504},[34,165015,34887],{"class":40},[34,165017,165018],{"class":36,"line":165},[34,165019,1475],{"emptyLinePlaceholder":1474},[34,165021,165022,165024,165026,165028],{"class":36,"line":171},[34,165023,4678],{"class":55},[34,165025,161779],{"class":40},[34,165027,27689],{"class":55},[34,165029,161784],{"class":40},[34,165031,165032,165034],{"class":36,"line":182},[34,165033,32941],{"class":44},[34,165035,152023],{"class":40},[103,165037,165038],{},"需要索引时：",[24,165040,165042],{"className":26,"code":165041,"language":28,"meta":29,"style":29},"for index, name in enumerate(names):\n    print(index, name)\n",[31,165043,165044,165058],{"__ignoreMap":29},[34,165045,165046,165048,165051,165053,165055],{"class":36,"line":37},[34,165047,4678],{"class":55},[34,165049,165050],{"class":40}," index, name ",[34,165052,27689],{"class":55},[34,165054,33247],{"class":44},[34,165056,165057],{"class":40},"(names):\n",[34,165059,165060,165062],{"class":36,"line":165},[34,165061,32941],{"class":44},[34,165063,165064],{"class":40},"(index, name)\n",[103,165066,165067],{},"统计总分：",[24,165069,165071],{"className":26,"code":165070,"language":28,"meta":29,"style":29},"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",[31,165072,165073,165098,165106,165110,165121,165129,165133,165150],{"__ignoreMap":29},[34,165074,165075,165078,165080,165082,165084,165086,165088,165090,165092,165094,165096],{"class":36,"line":37},[34,165076,165077],{"class":40},"scores ",[34,165079,221],{"class":55},[34,165081,53865],{"class":40},[34,165083,2653],{"class":44},[34,165085,48],{"class":40},[34,165087,2529],{"class":44},[34,165089,48],{"class":40},[34,165091,2061],{"class":44},[34,165093,48],{"class":40},[34,165095,2356],{"class":44},[34,165097,34887],{"class":40},[34,165099,165100,165102,165104],{"class":36,"line":165},[34,165101,158623],{"class":40},[34,165103,221],{"class":55},[34,165105,48972],{"class":44},[34,165107,165108],{"class":36,"line":171},[34,165109,1475],{"emptyLinePlaceholder":1474},[34,165111,165112,165114,165116,165118],{"class":36,"line":182},[34,165113,4678],{"class":55},[34,165115,159146],{"class":40},[34,165117,27689],{"class":55},[34,165119,165120],{"class":40}," scores:\n",[34,165122,165123,165125,165127],{"class":36,"line":188},[34,165124,160670],{"class":40},[34,165126,11127],{"class":55},[34,165128,3237],{"class":40},[34,165130,165131],{"class":36,"line":518},[34,165132,1475],{"emptyLinePlaceholder":1474},[34,165134,165135,165138,165140,165143,165145,165147],{"class":36,"line":524},[34,165136,165137],{"class":40},"avg ",[34,165139,221],{"class":55},[34,165141,165142],{"class":40}," total ",[34,165144,2379],{"class":55},[34,165146,8981],{"class":44},[34,165148,165149],{"class":40},"(scores)\n",[34,165151,165152,165154,165156,165158,165161,165163,165166,165168,165170,165172],{"class":36,"line":530},[34,165153,723],{"class":44},[34,165155,286],{"class":40},[34,165157,1867],{"class":55},[34,165159,165160],{"class":504},"\"平均分:",[34,165162,2687],{"class":44},[34,165164,165165],{"class":40},"avg",[34,165167,158522],{"class":55},[34,165169,2737],{"class":44},[34,165171,2058],{"class":504},[34,165173,101],{"class":40},[14,165175,165177],{"id":165176},"_66-元组tuple","6.6 元组tuple",[103,165179,165180],{},"元组和列表类似，但不可修改。",[24,165182,165184],{"className":26,"code":165183,"language":28,"meta":29,"style":29},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[31,165185,165186,165203],{"__ignoreMap":29},[34,165187,165188,165191,165193,165195,165197,165199,165201],{"class":36,"line":37},[34,165189,165190],{"class":40},"point ",[34,165192,221],{"class":55},[34,165194,3313],{"class":40},[34,165196,410],{"class":44},[34,165198,48],{"class":40},[34,165200,1249],{"class":44},[34,165202,101],{"class":40},[34,165204,165205,165207,165209,165211,165213,165215,165217,165219,165221],{"class":36,"line":165},[34,165206,117677],{"class":40},[34,165208,221],{"class":55},[34,165210,3313],{"class":40},[34,165212,151251],{"class":504},[34,165214,48],{"class":40},[34,165216,2445],{"class":44},[34,165218,48],{"class":40},[34,165220,70908],{"class":504},[34,165222,101],{"class":40},[103,165224,165225],{},"单元素元组必须加逗号：",[24,165227,165229],{"className":26,"code":165228,"language":28,"meta":29,"style":29},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[31,165230,165231,165245,165258,165262,165276],{"__ignoreMap":29},[34,165232,165233,165236,165238,165240,165242],{"class":36,"line":37},[34,165234,165235],{"class":40},"t1 ",[34,165237,221],{"class":55},[34,165239,3313],{"class":40},[34,165241,410],{"class":44},[34,165243,165244],{"class":40},",)\n",[34,165246,165247,165250,165252,165254,165256],{"class":36,"line":165},[34,165248,165249],{"class":40},"t2 ",[34,165251,221],{"class":55},[34,165253,3313],{"class":40},[34,165255,410],{"class":44},[34,165257,101],{"class":40},[34,165259,165260],{"class":36,"line":171},[34,165261,1475],{"emptyLinePlaceholder":1474},[34,165263,165264,165266,165268,165270,165273],{"class":36,"line":182},[34,165265,723],{"class":44},[34,165267,286],{"class":40},[34,165269,104470],{"class":44},[34,165271,165272],{"class":40},"(t1))  ",[34,165274,165275],{"class":161},"# tuple\n",[34,165277,165278,165280,165282,165284,165287],{"class":36,"line":188},[34,165279,723],{"class":44},[34,165281,286],{"class":40},[34,165283,104470],{"class":44},[34,165285,165286],{"class":40},"(t2))  ",[34,165288,165289],{"class":161},"# int\n",[103,165291,165292],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165294,165296],{"id":165295},"_67-字符串str","6.7 字符串str",[103,165298,165299],{},"字符串也是序列，可以索引、切片和遍历。",[24,165301,165303],{"className":26,"code":165302,"language":28,"meta":29,"style":29},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[31,165304,165305,165313,165317,165328,165340,165344,165355],{"__ignoreMap":29},[34,165306,165307,165309,165311],{"class":36,"line":37},[34,165308,157807],{"class":40},[34,165310,221],{"class":55},[34,165312,161044],{"class":504},[34,165314,165315],{"class":36,"line":165},[34,165316,1475],{"emptyLinePlaceholder":1474},[34,165318,165319,165321,165324,165326],{"class":36,"line":171},[34,165320,723],{"class":44},[34,165322,165323],{"class":40},"(text[",[34,165325,177],{"class":44},[34,165327,1077],{"class":40},[34,165329,165330,165332,165334,165336,165338],{"class":36,"line":182},[34,165331,723],{"class":44},[34,165333,165323],{"class":40},[34,165335,2327],{"class":55},[34,165337,394],{"class":44},[34,165339,1077],{"class":40},[34,165341,165342],{"class":36,"line":188},[34,165343,1475],{"emptyLinePlaceholder":1474},[34,165345,165346,165348,165350,165352],{"class":36,"line":518},[34,165347,4678],{"class":55},[34,165349,161055],{"class":40},[34,165351,27689],{"class":55},[34,165353,165354],{"class":40}," text:\n",[34,165356,165357,165359],{"class":36,"line":524},[34,165358,32941],{"class":44},[34,165360,161066],{"class":40},[103,165362,165363],{},"字符串不可变：",[24,165365,165367],{"className":26,"code":165366,"language":28,"meta":29,"style":29},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[31,165368,165369,165377],{"__ignoreMap":29},[34,165370,165371,165373,165375],{"class":36,"line":37},[34,165372,157807],{"class":40},[34,165374,221],{"class":55},[34,165376,161044],{"class":504},[34,165378,165379,165382,165384,165386,165388,165391],{"class":36,"line":165},[34,165380,165381],{"class":40},"text[",[34,165383,177],{"class":44},[34,165385,6095],{"class":40},[34,165387,221],{"class":55},[34,165389,165390],{"class":504}," \"P\"",[34,165392,165393],{"class":161},"  # 报错\n",[103,165395,165396],{},"如果要得到新字符串：",[24,165398,165400],{"className":26,"code":165399,"language":28,"meta":29,"style":29},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[31,165401,165402,165410,165428],{"__ignoreMap":29},[34,165403,165404,165406,165408],{"class":36,"line":37},[34,165405,157807],{"class":40},[34,165407,221],{"class":55},[34,165409,161044],{"class":504},[34,165411,165412,165414,165416,165418,165420,165423,165425],{"class":36,"line":165},[34,165413,157807],{"class":40},[34,165415,221],{"class":55},[34,165417,165390],{"class":504},[34,165419,47205],{"class":55},[34,165421,165422],{"class":40}," text[",[34,165424,394],{"class":44},[34,165426,165427],{"class":40},":]\n",[34,165429,165430,165432],{"class":36,"line":171},[34,165431,723],{"class":44},[34,165433,165434],{"class":40},"(text)\n",[14,165436,165438],{"id":165437},"_68-切片","6.8 切片",[103,165440,165441],{},"切片用于从序列中取一部分。",[24,165443,165445],{"className":26,"code":165444,"language":28,"meta":29,"style":29},"序列[开始:结束:步长]\n",[31,165446,165447],{"__ignoreMap":29},[34,165448,165449],{"class":36,"line":37},[34,165450,165444],{"class":40},[103,165452,165453],{},"结束位置不包含。",[24,165455,165457],{"className":26,"code":165456,"language":28,"meta":29,"style":29},"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",[31,165458,165459,165496,165500,165519,165534,165548,165562],{"__ignoreMap":29},[34,165460,165461,165464,165466,165468,165470,165472,165474,165476,165478,165480,165482,165484,165486,165488,165490,165492,165494],{"class":36,"line":37},[34,165462,165463],{"class":40},"nums ",[34,165465,221],{"class":55},[34,165467,53865],{"class":40},[34,165469,177],{"class":44},[34,165471,48],{"class":40},[34,165473,394],{"class":44},[34,165475,48],{"class":40},[34,165477,332],{"class":44},[34,165479,48],{"class":40},[34,165481,337],{"class":44},[34,165483,48],{"class":40},[34,165485,247],{"class":44},[34,165487,48],{"class":40},[34,165489,224],{"class":44},[34,165491,48],{"class":40},[34,165493,1115],{"class":44},[34,165495,34887],{"class":40},[34,165497,165498],{"class":36,"line":165},[34,165499,1475],{"emptyLinePlaceholder":1474},[34,165501,165502,165504,165507,165509,165511,165513,165516],{"class":36,"line":171},[34,165503,723],{"class":44},[34,165505,165506],{"class":40},"(nums[",[34,165508,394],{"class":44},[34,165510,2650],{"class":40},[34,165512,247],{"class":44},[34,165514,165515],{"class":40},"])    ",[34,165517,165518],{"class":161},"# [1, 2, 3]\n",[34,165520,165521,165523,165526,165528,165531],{"class":36,"line":182},[34,165522,723],{"class":44},[34,165524,165525],{"class":40},"(nums[:",[34,165527,337],{"class":44},[34,165529,165530],{"class":40},"])     ",[34,165532,165533],{"class":161},"# [0, 1, 2]\n",[34,165535,165536,165538,165540,165542,165545],{"class":36,"line":188},[34,165537,723],{"class":44},[34,165539,165506],{"class":40},[34,165541,337],{"class":44},[34,165543,165544],{"class":40},":])     ",[34,165546,165547],{"class":161},"# [3, 4, 5, 6]\n",[34,165549,165550,165552,165555,165557,165559],{"class":36,"line":518},[34,165551,723],{"class":44},[34,165553,165554],{"class":40},"(nums[::",[34,165556,332],{"class":44},[34,165558,165515],{"class":40},[34,165560,165561],{"class":161},"# [0, 2, 4, 6]\n",[34,165563,165564,165566,165568,165570,165572,165575],{"class":36,"line":524},[34,165565,723],{"class":44},[34,165567,165554],{"class":40},[34,165569,2327],{"class":55},[34,165571,394],{"class":44},[34,165573,165574],{"class":40},"])   ",[34,165576,165577],{"class":161},"# 反转\n",[103,165579,165580],{},"字符串切片：",[24,165582,165584],{"className":26,"code":165583,"language":28,"meta":29,"style":29},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[31,165585,165586,165595,165609],{"__ignoreMap":29},[34,165587,165588,165590,165592],{"class":36,"line":37},[34,165589,157807],{"class":40},[34,165591,221],{"class":55},[34,165593,165594],{"class":504}," \"abcdef\"\n",[34,165596,165597,165599,165601,165603,165605,165607],{"class":36,"line":165},[34,165598,723],{"class":44},[34,165600,165323],{"class":40},[34,165602,394],{"class":44},[34,165604,2650],{"class":40},[34,165606,247],{"class":44},[34,165608,1077],{"class":40},[34,165610,165611,165613,165616,165618,165620],{"class":36,"line":171},[34,165612,723],{"class":44},[34,165614,165615],{"class":40},"(text[::",[34,165617,2327],{"class":55},[34,165619,394],{"class":44},[34,165621,1077],{"class":40},[14,165623,165625],{"id":165624},"_69-集合set","6.9 集合set",[103,165627,165628],{},"集合特点：",[1772,165630,165631,165634,165637],{},[1775,165632,165633],{},"无序。",[1775,165635,165636],{},"元素不重复。",[1775,165638,165639],{},"可以做交集、并集、差集。",[24,165641,165643],{"className":26,"code":165642,"language":28,"meta":29,"style":29},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[31,165644,165645,165673],{"__ignoreMap":29},[34,165646,165647,165649,165651,165653,165655,165657,165659,165661,165663,165665,165667,165669,165671],{"class":36,"line":37},[34,165648,165463],{"class":40},[34,165650,221],{"class":55},[34,165652,6100],{"class":40},[34,165654,394],{"class":44},[34,165656,48],{"class":40},[34,165658,332],{"class":44},[34,165660,48],{"class":40},[34,165662,337],{"class":44},[34,165664,48],{"class":40},[34,165666,337],{"class":44},[34,165668,48],{"class":40},[34,165670,247],{"class":44},[34,165672,3223],{"class":40},[34,165674,165675,165677],{"class":36,"line":165},[34,165676,723],{"class":44},[34,165678,165679],{"class":40},"(nums)\n",[103,165681,165682],{},"创建空集合：",[24,165684,165686],{"className":26,"code":165685,"language":28,"meta":29,"style":29},"s = set()\n",[31,165687,165688],{"__ignoreMap":29},[34,165689,165690,165692,165694,165696],{"class":36,"line":37},[34,165691,12229],{"class":40},[34,165693,221],{"class":55},[34,165695,121085],{"class":44},[34,165697,3630],{"class":40},[103,165699,10675,165700,165702],{},[31,165701,34100],{}," 是空字典，不是空集合。",[103,165704,165705],{},"集合常用操作：",[24,165707,165709],{"className":26,"code":165708,"language":28,"meta":29,"style":29},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[31,165710,165711,165731,165735,165744,165753,165762],{"__ignoreMap":29},[34,165712,165713,165715,165717,165719,165721,165723,165725,165727,165729],{"class":36,"line":37},[34,165714,12229],{"class":40},[34,165716,221],{"class":55},[34,165718,6100],{"class":40},[34,165720,394],{"class":44},[34,165722,48],{"class":40},[34,165724,332],{"class":44},[34,165726,48],{"class":40},[34,165728,337],{"class":44},[34,165730,3223],{"class":40},[34,165732,165733],{"class":36,"line":165},[34,165734,1475],{"emptyLinePlaceholder":1474},[34,165736,165737,165740,165742],{"class":36,"line":171},[34,165738,165739],{"class":40},"s.add(",[34,165741,247],{"class":44},[34,165743,101],{"class":40},[34,165745,165746,165749,165751],{"class":36,"line":182},[34,165747,165748],{"class":40},"s.remove(",[34,165750,332],{"class":44},[34,165752,101],{"class":40},[34,165754,165755,165758,165760],{"class":36,"line":188},[34,165756,165757],{"class":40},"s.discard(",[34,165759,410],{"class":44},[34,165761,101],{"class":40},[34,165763,165764,165766,165768,165770],{"class":36,"line":518},[34,165765,723],{"class":44},[34,165767,286],{"class":40},[34,165769,9008],{"class":44},[34,165771,165772],{"class":40},"(s))\n",[103,165774,165775],{},"交并差：",[24,165777,165779],{"className":26,"code":165778,"language":28,"meta":29,"style":29},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[31,165780,165781,165801,165821,165825,165840,165853],{"__ignoreMap":29},[34,165782,165783,165785,165787,165789,165791,165793,165795,165797,165799],{"class":36,"line":37},[34,165784,12569],{"class":40},[34,165786,221],{"class":55},[34,165788,6100],{"class":40},[34,165790,394],{"class":44},[34,165792,48],{"class":40},[34,165794,332],{"class":44},[34,165796,48],{"class":40},[34,165798,337],{"class":44},[34,165800,3223],{"class":40},[34,165802,165803,165805,165807,165809,165811,165813,165815,165817,165819],{"class":36,"line":165},[34,165804,12595],{"class":40},[34,165806,221],{"class":55},[34,165808,6100],{"class":40},[34,165810,337],{"class":44},[34,165812,48],{"class":40},[34,165814,247],{"class":44},[34,165816,48],{"class":40},[34,165818,224],{"class":44},[34,165820,3223],{"class":40},[34,165822,165823],{"class":36,"line":171},[34,165824,1475],{"emptyLinePlaceholder":1474},[34,165826,165827,165829,165832,165834,165837],{"class":36,"line":182},[34,165828,723],{"class":44},[34,165830,165831],{"class":40},"(a ",[34,165833,2155],{"class":55},[34,165835,165836],{"class":40}," b)  ",[34,165838,165839],{"class":161},"# 交集\n",[34,165841,165842,165844,165846,165848,165850],{"class":36,"line":188},[34,165843,723],{"class":44},[34,165845,165831],{"class":40},[34,165847,2712],{"class":55},[34,165849,165836],{"class":40},[34,165851,165852],{"class":161},"# 并集\n",[34,165854,165855,165857,165859,165861,165863],{"class":36,"line":518},[34,165856,723],{"class":44},[34,165858,165831],{"class":40},[34,165860,2327],{"class":55},[34,165862,165836],{"class":40},[34,165864,165865],{"class":161},"# 差集\n",[14,165867,165869],{"id":165868},"_610-字典dict","6.10 字典dict",[103,165871,165872],{},"字典通过 key-value 保存数据。",[24,165874,165876],{"className":26,"code":165875,"language":28,"meta":29,"style":29},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[31,165877,165878,165886,165896,165907,165917],{"__ignoreMap":29},[34,165879,165880,165882,165884],{"class":36,"line":37},[34,165881,150844],{"class":40},[34,165883,221],{"class":55},[34,165885,17218],{"class":40},[34,165887,165888,165890,165892,165894],{"class":36,"line":165},[34,165889,148383],{"class":504},[34,165891,53076],{"class":40},[34,165893,151251],{"class":504},[34,165895,33108],{"class":40},[34,165897,165898,165901,165903,165905],{"class":36,"line":171},[34,165899,165900],{"class":504},"    \"age\"",[34,165902,53076],{"class":40},[34,165904,2445],{"class":44},[34,165906,33108],{"class":40},[34,165908,165909,165912,165914],{"class":36,"line":182},[34,165910,165911],{"class":504},"    \"score\"",[34,165913,53076],{"class":40},[34,165915,165916],{"class":44},"95\n",[34,165918,165919],{"class":36,"line":188},[34,165920,3223],{"class":40},[103,165922,165923],{},"获取值：",[24,165925,165927],{"className":26,"code":165926,"language":28,"meta":29,"style":29},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[31,165928,165929,165940],{"__ignoreMap":29},[34,165930,165931,165933,165936,165938],{"class":36,"line":37},[34,165932,723],{"class":44},[34,165934,165935],{"class":40},"(student[",[34,165937,64318],{"class":504},[34,165939,1077],{"class":40},[34,165941,165942,165944,165947,165949],{"class":36,"line":165},[34,165943,723],{"class":44},[34,165945,165946],{"class":40},"(student.get(",[34,165948,64318],{"class":504},[34,165950,296],{"class":40},[103,165952,17034],{},[24,165954,165956],{"className":26,"code":165955,"language":28,"meta":29,"style":29},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[31,165957,165958,165971],{"__ignoreMap":29},[34,165959,165960,165962,165965,165968],{"class":36,"line":37},[34,165961,154222],{"class":40},[34,165963,165964],{"class":504},"\"address\"",[34,165966,165967],{"class":40},"]     ",[34,165969,165970],{"class":161},"# key不存在会报错\n",[34,165972,165973,165976,165978,165980],{"class":36,"line":165},[34,165974,165975],{"class":40},"student.get(",[34,165977,165964],{"class":504},[34,165979,372],{"class":40},[34,165981,165982],{"class":161},"# key不存在返回None\n",[103,165984,165985],{},"设置默认值：",[24,165987,165989],{"className":26,"code":165988,"language":28,"meta":29,"style":29},"print(student.get(\"address\", \"未知\"))\n",[31,165990,165991],{"__ignoreMap":29},[34,165992,165993,165995,165997,165999,166001,166004],{"class":36,"line":37},[34,165994,723],{"class":44},[34,165996,165946],{"class":40},[34,165998,165964],{"class":504},[34,166000,48],{"class":40},[34,166002,166003],{"class":504},"\"未知\"",[34,166005,296],{"class":40},[103,166007,166008],{},"新增和修改：",[24,166010,166012],{"className":26,"code":166011,"language":28,"meta":29,"style":29},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[31,166013,166014,166027],{"__ignoreMap":29},[34,166015,166016,166018,166020,166022,166024],{"class":36,"line":37},[34,166017,154222],{"class":40},[34,166019,70763],{"class":504},[34,166021,6095],{"class":40},[34,166023,221],{"class":55},[34,166025,166026],{"class":44}," 19\n",[34,166028,166029,166031,166033,166035,166037],{"class":36,"line":165},[34,166030,154222],{"class":40},[34,166032,165964],{"class":504},[34,166034,6095],{"class":40},[34,166036,221],{"class":55},[34,166038,166039],{"class":504}," \"北京\"\n",[103,166041,166042],{},"删除：",[24,166044,166046],{"className":26,"code":166045,"language":28,"meta":29,"style":29},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[31,166047,166048,166061,166071],{"__ignoreMap":29},[34,166049,166050,166052,166054,166057,166059],{"class":36,"line":37},[34,166051,156721],{"class":40},[34,166053,221],{"class":55},[34,166055,166056],{"class":40}," student.pop(",[34,166058,152835],{"class":504},[34,166060,101],{"class":40},[34,166062,166063,166065,166067,166069],{"class":36,"line":165},[34,166064,164746],{"class":55},[34,166066,153512],{"class":40},[34,166068,70763],{"class":504},[34,166070,34887],{"class":40},[34,166072,166073],{"class":36,"line":171},[34,166074,166075],{"class":40},"student.clear()\n",[14,166077,166079],{"id":166078},"_611-字典遍历","6.11 字典遍历",[103,166081,166082],{},"遍历 key：",[24,166084,166086],{"className":26,"code":166085,"language":28,"meta":29,"style":29},"for key in student:\n    print(key, student[key])\n",[31,166087,166088,166100],{"__ignoreMap":29},[34,166089,166090,166092,166095,166097],{"class":36,"line":37},[34,166091,4678],{"class":55},[34,166093,166094],{"class":40}," key ",[34,166096,27689],{"class":55},[34,166098,166099],{"class":40}," student:\n",[34,166101,166102,166104],{"class":36,"line":165},[34,166103,32941],{"class":44},[34,166105,166106],{"class":40},"(key, student[key])\n",[103,166108,166109],{},"遍历 value：",[24,166111,166113],{"className":26,"code":166112,"language":28,"meta":29,"style":29},"for value in student.values():\n    print(value)\n",[31,166114,166115,166127],{"__ignoreMap":29},[34,166116,166117,166119,166122,166124],{"class":36,"line":37},[34,166118,4678],{"class":55},[34,166120,166121],{"class":40}," value ",[34,166123,27689],{"class":55},[34,166125,166126],{"class":40}," student.values():\n",[34,166128,166129,166131],{"class":36,"line":165},[34,166130,32941],{"class":44},[34,166132,166133],{"class":40},"(value)\n",[103,166135,166136],{},"遍历 key 和 value：",[24,166138,166140],{"className":26,"code":166139,"language":28,"meta":29,"style":29},"for key, value in student.items():\n    print(key, value)\n",[31,166141,166142,166154],{"__ignoreMap":29},[34,166143,166144,166146,166149,166151],{"class":36,"line":37},[34,166145,4678],{"class":55},[34,166147,166148],{"class":40}," key, value ",[34,166150,27689],{"class":55},[34,166152,166153],{"class":40}," student.items():\n",[34,166155,166156,166158],{"class":36,"line":165},[34,166157,32941],{"class":44},[34,166159,166160],{"class":40},"(key, value)\n",[14,166162,166164],{"id":166163},"_612-嵌套容器","6.12 嵌套容器",[103,166166,166167],{},"列表中保存字典，是项目中最常见的结构之一。",[24,166169,166171],{"className":26,"code":166170,"language":28,"meta":29,"style":29},"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",[31,166172,166173,166181,166209,166237,166265,166269,166273,166283],{"__ignoreMap":29},[34,166174,166175,166177,166179],{"class":36,"line":37},[34,166176,161079],{"class":40},[34,166178,221],{"class":55},[34,166180,57086],{"class":40},[34,166182,166183,166185,166187,166189,166191,166193,166195,166197,166199,166201,166203,166205,166207],{"class":36,"line":165},[34,166184,149748],{"class":40},[34,166186,64318],{"class":504},[34,166188,53076],{"class":40},[34,166190,151251],{"class":504},[34,166192,48],{"class":40},[34,166194,70763],{"class":504},[34,166196,53076],{"class":40},[34,166198,2445],{"class":44},[34,166200,48],{"class":40},[34,166202,152835],{"class":504},[34,166204,53076],{"class":40},[34,166206,2780],{"class":44},[34,166208,6581],{"class":40},[34,166210,166211,166213,166215,166217,166219,166221,166223,166225,166227,166229,166231,166233,166235],{"class":36,"line":171},[34,166212,149748],{"class":40},[34,166214,64318],{"class":504},[34,166216,53076],{"class":40},[34,166218,152299],{"class":504},[34,166220,48],{"class":40},[34,166222,70763],{"class":504},[34,166224,53076],{"class":40},[34,166226,2420],{"class":44},[34,166228,48],{"class":40},[34,166230,152835],{"class":504},[34,166232,53076],{"class":40},[34,166234,2604],{"class":44},[34,166236,6581],{"class":40},[34,166238,166239,166241,166243,166245,166247,166249,166251,166253,166255,166257,166259,166261,166263],{"class":36,"line":182},[34,166240,149748],{"class":40},[34,166242,64318],{"class":504},[34,166244,53076],{"class":40},[34,166246,161094],{"class":504},[34,166248,48],{"class":40},[34,166250,70763],{"class":504},[34,166252,53076],{"class":40},[34,166254,2470],{"class":44},[34,166256,48],{"class":40},[34,166258,152835],{"class":504},[34,166260,53076],{"class":40},[34,166262,2206],{"class":44},[34,166264,6581],{"class":40},[34,166266,166267],{"class":36,"line":188},[34,166268,34887],{"class":40},[34,166270,166271],{"class":36,"line":518},[34,166272,1475],{"emptyLinePlaceholder":1474},[34,166274,166275,166277,166279,166281],{"class":36,"line":524},[34,166276,4678],{"class":55},[34,166278,153500],{"class":40},[34,166280,27689],{"class":55},[34,166282,153505],{"class":40},[34,166284,166285,166287,166289,166291,166294,166296],{"class":36,"line":530},[34,166286,32941],{"class":44},[34,166288,165935],{"class":40},[34,166290,64318],{"class":504},[34,166292,166293],{"class":40},"], student[",[34,166295,152835],{"class":504},[34,166297,1077],{"class":40},[103,166299,166300],{},"统计平均分：",[24,166302,166304],{"className":26,"code":166303,"language":28,"meta":29,"style":29},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[31,166305,166306,166314,166318,166328,166340,166344,166359],{"__ignoreMap":29},[34,166307,166308,166310,166312],{"class":36,"line":37},[34,166309,158623],{"class":40},[34,166311,221],{"class":55},[34,166313,48972],{"class":44},[34,166315,166316],{"class":36,"line":165},[34,166317,1475],{"emptyLinePlaceholder":1474},[34,166319,166320,166322,166324,166326],{"class":36,"line":171},[34,166321,4678],{"class":55},[34,166323,153500],{"class":40},[34,166325,27689],{"class":55},[34,166327,153505],{"class":40},[34,166329,166330,166332,166334,166336,166338],{"class":36,"line":182},[34,166331,160670],{"class":40},[34,166333,11127],{"class":55},[34,166335,153512],{"class":40},[34,166337,152835],{"class":504},[34,166339,34887],{"class":40},[34,166341,166342],{"class":36,"line":188},[34,166343,1475],{"emptyLinePlaceholder":1474},[34,166345,166346,166348,166350,166352,166354,166356],{"class":36,"line":518},[34,166347,165137],{"class":40},[34,166349,221],{"class":55},[34,166351,165142],{"class":40},[34,166353,2379],{"class":55},[34,166355,8981],{"class":44},[34,166357,166358],{"class":40},"(students)\n",[34,166360,166361,166363,166365,166367,166369,166371,166373,166375,166377,166379],{"class":36,"line":524},[34,166362,723],{"class":44},[34,166364,286],{"class":40},[34,166366,1867],{"class":55},[34,166368,165160],{"class":504},[34,166370,2687],{"class":44},[34,166372,165165],{"class":40},[34,166374,158522],{"class":55},[34,166376,2737],{"class":44},[34,166378,2058],{"class":504},[34,166380,101],{"class":40},[103,166382,166383],{},"查找学生：",[24,166385,166387],{"className":26,"code":166386,"language":28,"meta":29,"style":29},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[31,166388,166389,166404,166408,166418,166432,166438,166442,166448],{"__ignoreMap":29},[34,166390,166391,166393,166395,166397,166399,166402],{"class":36,"line":37},[34,166392,112941],{"class":40},[34,166394,221],{"class":55},[34,166396,62244],{"class":44},[34,166398,286],{"class":40},[34,166400,166401],{"class":504},"\"请输入学生姓名:\"",[34,166403,101],{"class":40},[34,166405,166406],{"class":36,"line":165},[34,166407,1475],{"emptyLinePlaceholder":1474},[34,166409,166410,166412,166414,166416],{"class":36,"line":171},[34,166411,4678],{"class":55},[34,166413,153500],{"class":40},[34,166415,27689],{"class":55},[34,166417,153505],{"class":40},[34,166419,166420,166422,166424,166426,166428,166430],{"class":36,"line":182},[34,166421,4754],{"class":55},[34,166423,153512],{"class":40},[34,166425,64318],{"class":504},[34,166427,6095],{"class":40},[34,166429,4602],{"class":55},[34,166431,161795],{"class":40},[34,166433,166434,166436],{"class":36,"line":188},[34,166435,34092],{"class":44},[34,166437,151405],{"class":40},[34,166439,166440],{"class":36,"line":518},[34,166441,33268],{"class":55},[34,166443,166444,166446],{"class":36,"line":524},[34,166445,3355],{"class":55},[34,166447,5392],{"class":40},[34,166449,166450,166452,166454,166457],{"class":36,"line":530},[34,166451,32941],{"class":44},[34,166453,286],{"class":40},[34,166455,166456],{"class":504},"\"没有找到\"",[34,166458,101],{"class":40},[14,166460,166462],{"id":166461},"_613-容器通用操作","6.13 容器通用操作",[103,166464,166465],{},"长度：",[24,166467,166469],{"className":26,"code":166468,"language":28,"meta":29,"style":29},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[31,166470,166471,166490,166500],{"__ignoreMap":29},[34,166472,166473,166475,166478,166480,166482,166484,166486,166488],{"class":36,"line":37},[34,166474,9008],{"class":44},[34,166476,166477],{"class":40},"([",[34,166479,394],{"class":44},[34,166481,48],{"class":40},[34,166483,332],{"class":44},[34,166485,48],{"class":40},[34,166487,337],{"class":44},[34,166489,1077],{"class":40},[34,166491,166492,166494,166496,166498],{"class":36,"line":165},[34,166493,9008],{"class":44},[34,166495,286],{"class":40},[34,166497,157243],{"class":504},[34,166499,101],{"class":40},[34,166501,166502,166504,166507,166509,166511,166513],{"class":36,"line":171},[34,166503,9008],{"class":44},[34,166505,166506],{"class":40},"({",[34,166508,64318],{"class":504},[34,166510,53076],{"class":40},[34,166512,151251],{"class":504},[34,166514,166515],{"class":40},"})\n",[103,166517,166518],{},"最大最小：",[24,166520,166522],{"className":26,"code":166521,"language":28,"meta":29,"style":29},"max([1, 2, 3])\nmin([1, 2, 3])\n",[31,166523,166524,166542],{"__ignoreMap":29},[34,166525,166526,166528,166530,166532,166534,166536,166538,166540],{"class":36,"line":37},[34,166527,7665],{"class":44},[34,166529,166477],{"class":40},[34,166531,394],{"class":44},[34,166533,48],{"class":40},[34,166535,332],{"class":44},[34,166537,48],{"class":40},[34,166539,337],{"class":44},[34,166541,1077],{"class":40},[34,166543,166544,166547,166549,166551,166553,166555,166557,166559],{"class":36,"line":165},[34,166545,166546],{"class":44},"min",[34,166548,166477],{"class":40},[34,166550,394],{"class":44},[34,166552,48],{"class":40},[34,166554,332],{"class":44},[34,166556,48],{"class":40},[34,166558,337],{"class":44},[34,166560,1077],{"class":40},[103,166562,166563],{},"求和：",[24,166565,166567],{"className":26,"code":166566,"language":28,"meta":29,"style":29},"sum([1, 2, 3])\n",[31,166568,166569],{"__ignoreMap":29},[34,166570,166571,166574,166576,166578,166580,166582,166584,166586],{"class":36,"line":37},[34,166572,166573],{"class":44},"sum",[34,166575,166477],{"class":40},[34,166577,394],{"class":44},[34,166579,48],{"class":40},[34,166581,332],{"class":44},[34,166583,48],{"class":40},[34,166585,337],{"class":44},[34,166587,1077],{"class":40},[103,166589,164834],{},[24,166591,166593],{"className":26,"code":166592,"language":28,"meta":29,"style":29},"sorted([3, 1, 2])\n",[31,166594,166595],{"__ignoreMap":29},[34,166596,166597,166600,166602,166604,166606,166608,166610,166612],{"class":36,"line":37},[34,166598,166599],{"class":44},"sorted",[34,166601,166477],{"class":40},[34,166603,337],{"class":44},[34,166605,48],{"class":40},[34,166607,394],{"class":44},[34,166609,48],{"class":40},[34,166611,332],{"class":44},[34,166613,1077],{"class":40},[103,166615,166616],{},"类型转换：",[24,166618,166620],{"className":26,"code":166619,"language":28,"meta":29,"style":29},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[31,166621,166622,166632,166650],{"__ignoreMap":29},[34,166623,166624,166626,166628,166630],{"class":36,"line":37},[34,166625,155433],{"class":44},[34,166627,286],{"class":40},[34,166629,157243],{"class":504},[34,166631,101],{"class":40},[34,166633,166634,166636,166638,166640,166642,166644,166646,166648],{"class":36,"line":165},[34,166635,156628],{"class":44},[34,166637,166477],{"class":40},[34,166639,394],{"class":44},[34,166641,48],{"class":40},[34,166643,332],{"class":44},[34,166645,48],{"class":40},[34,166647,337],{"class":44},[34,166649,1077],{"class":40},[34,166651,166652,166654,166656,166658,166660,166662,166664,166666,166668,166670],{"class":36,"line":171},[34,166653,156653],{"class":44},[34,166655,166477],{"class":40},[34,166657,394],{"class":44},[34,166659,48],{"class":40},[34,166661,394],{"class":44},[34,166663,48],{"class":40},[34,166665,332],{"class":44},[34,166667,48],{"class":40},[34,166669,337],{"class":44},[34,166671,1077],{"class":40},[103,166673,166674],{},"成员判断：",[24,166676,166678],{"className":26,"code":166677,"language":28,"meta":29,"style":29},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[31,166679,166680,166697,166721],{"__ignoreMap":29},[34,166681,166682,166684,166686,166689,166692,166695],{"class":36,"line":37},[34,166683,723],{"class":44},[34,166685,286],{"class":40},[34,166687,166688],{"class":504},"\"a\"",[34,166690,166691],{"class":55}," in",[34,166693,166694],{"class":504}," \"abc\"",[34,166696,101],{"class":40},[34,166698,166699,166701,166703,166705,166707,166709,166711,166713,166715,166717,166719],{"class":36,"line":165},[34,166700,723],{"class":44},[34,166702,286],{"class":40},[34,166704,394],{"class":44},[34,166706,166691],{"class":55},[34,166708,53865],{"class":40},[34,166710,394],{"class":44},[34,166712,48],{"class":40},[34,166714,332],{"class":44},[34,166716,48],{"class":40},[34,166718,337],{"class":44},[34,166720,1077],{"class":40},[34,166722,166723,166725,166727,166729,166731,166733,166735,166737,166739],{"class":36,"line":171},[34,166724,723],{"class":44},[34,166726,286],{"class":40},[34,166728,64318],{"class":504},[34,166730,166691],{"class":55},[34,166732,6100],{"class":40},[34,166734,64318],{"class":504},[34,166736,53076],{"class":40},[34,166738,151251],{"class":504},[34,166740,166515],{"class":40},[14,166742,166744],{"id":166743},"_614-推导式","6.14 推导式",[103,166746,166747],{},"推导式用于快速生成容器。",[103,166749,166750],{},"列表推导式：",[24,166752,166754],{"className":26,"code":166753,"language":28,"meta":29,"style":29},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[31,166755,166756,166783],{"__ignoreMap":29},[34,166757,166758,166760,166762,166765,166767,166769,166771,166773,166775,166777,166779,166781],{"class":36,"line":37},[34,166759,165463],{"class":40},[34,166761,221],{"class":55},[34,166763,166764],{"class":40}," [i ",[34,166766,4678],{"class":55},[34,166768,11088],{"class":40},[34,166770,27689],{"class":55},[34,166772,34084],{"class":44},[34,166774,286],{"class":40},[34,166776,394],{"class":44},[34,166778,48],{"class":40},[34,166780,1115],{"class":44},[34,166782,98663],{"class":40},[34,166784,166785,166787],{"class":36,"line":165},[34,166786,723],{"class":44},[34,166788,165679],{"class":40},[103,166790,166791],{},"带条件：",[24,166793,166795],{"className":26,"code":166794,"language":28,"meta":29,"style":29},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[31,166796,166797,166838],{"__ignoreMap":29},[34,166798,166799,166802,166804,166806,166808,166810,166812,166814,166816,166818,166820,166822,166824,166826,166828,166830,166832,166834,166836],{"class":36,"line":37},[34,166800,166801],{"class":40},"even_nums ",[34,166803,221],{"class":55},[34,166805,166764],{"class":40},[34,166807,4678],{"class":55},[34,166809,11088],{"class":40},[34,166811,27689],{"class":55},[34,166813,34084],{"class":44},[34,166815,286],{"class":40},[34,166817,394],{"class":44},[34,166819,48],{"class":40},[34,166821,2140],{"class":44},[34,166823,372],{"class":40},[34,166825,3189],{"class":55},[34,166827,11088],{"class":40},[34,166829,2131],{"class":55},[34,166831,16401],{"class":44},[34,166833,102922],{"class":55},[34,166835,98],{"class":44},[34,166837,34887],{"class":40},[34,166839,166840,166842],{"class":36,"line":165},[34,166841,723],{"class":44},[34,166843,166844],{"class":40},"(even_nums)\n",[103,166846,166847],{},"字典推导式：",[24,166849,166851],{"className":26,"code":166850,"language":28,"meta":29,"style":29},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[31,166852,166853,166887],{"__ignoreMap":29},[34,166854,166855,166858,166860,166863,166865,166867,166870,166872,166874,166876,166878,166880,166882,166884],{"class":36,"line":37},[34,166856,166857],{"class":40},"squares ",[34,166859,221],{"class":55},[34,166861,166862],{"class":40}," {i: i ",[34,166864,12311],{"class":55},[34,166866,16401],{"class":44},[34,166868,166869],{"class":55}," for",[34,166871,11088],{"class":40},[34,166873,27689],{"class":55},[34,166875,34084],{"class":44},[34,166877,286],{"class":40},[34,166879,394],{"class":44},[34,166881,48],{"class":40},[34,166883,1115],{"class":44},[34,166885,166886],{"class":40},")}\n",[34,166888,166889,166891],{"class":36,"line":165},[34,166890,723],{"class":44},[34,166892,166893],{"class":40},"(squares)\n",[103,166895,166896],{},"集合推导式：",[24,166898,166900],{"className":26,"code":166899,"language":28,"meta":29,"style":29},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[31,166901,166902,166923],{"__ignoreMap":29},[34,166903,166904,166907,166909,166912,166914,166916,166918,166921],{"class":36,"line":37},[34,166905,166906],{"class":40},"chars ",[34,166908,221],{"class":55},[34,166910,166911],{"class":40}," {ch ",[34,166913,4678],{"class":55},[34,166915,161055],{"class":40},[34,166917,27689],{"class":55},[34,166919,166920],{"class":504}," \"hello\"",[34,166922,3223],{"class":40},[34,166924,166925,166927],{"class":36,"line":165},[34,166926,723],{"class":44},[34,166928,166929],{"class":40},"(chars)\n",[103,166931,166932],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166934,166936],{"id":166935},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[24,166938,166940],{"className":26,"code":166939,"language":28,"meta":29,"style":29},"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",[31,166941,166942,166950,166970,166990,167010,167030,167034,167038,167046,167060,167069,167073,167083,167095,167099,167119,167128,167132,167148,167153,167157,167171,167175,167197,167233],{"__ignoreMap":29},[34,166943,166944,166946,166948],{"class":36,"line":37},[34,166945,161079],{"class":40},[34,166947,221],{"class":55},[34,166949,57086],{"class":40},[34,166951,166952,166954,166956,166958,166960,166962,166964,166966,166968],{"class":36,"line":165},[34,166953,149748],{"class":40},[34,166955,64318],{"class":504},[34,166957,53076],{"class":40},[34,166959,151251],{"class":504},[34,166961,48],{"class":40},[34,166963,152835],{"class":504},[34,166965,53076],{"class":40},[34,166967,2780],{"class":44},[34,166969,6581],{"class":40},[34,166971,166972,166974,166976,166978,166980,166982,166984,166986,166988],{"class":36,"line":171},[34,166973,149748],{"class":40},[34,166975,64318],{"class":504},[34,166977,53076],{"class":40},[34,166979,152299],{"class":504},[34,166981,48],{"class":40},[34,166983,152835],{"class":504},[34,166985,53076],{"class":40},[34,166987,2604],{"class":44},[34,166989,6581],{"class":40},[34,166991,166992,166994,166996,166998,167000,167002,167004,167006,167008],{"class":36,"line":182},[34,166993,149748],{"class":40},[34,166995,64318],{"class":504},[34,166997,53076],{"class":40},[34,166999,161094],{"class":504},[34,167001,48],{"class":40},[34,167003,152835],{"class":504},[34,167005,53076],{"class":40},[34,167007,2206],{"class":44},[34,167009,6581],{"class":40},[34,167011,167012,167014,167016,167018,167020,167022,167024,167026,167028],{"class":36,"line":188},[34,167013,149748],{"class":40},[34,167015,64318],{"class":504},[34,167017,53076],{"class":40},[34,167019,164673],{"class":504},[34,167021,48],{"class":40},[34,167023,152835],{"class":504},[34,167025,53076],{"class":40},[34,167027,2673],{"class":44},[34,167029,6581],{"class":40},[34,167031,167032],{"class":36,"line":518},[34,167033,34887],{"class":40},[34,167035,167036],{"class":36,"line":524},[34,167037,1475],{"emptyLinePlaceholder":1474},[34,167039,167040,167042,167044],{"class":36,"line":530},[34,167041,158623],{"class":40},[34,167043,221],{"class":55},[34,167045,48972],{"class":44},[34,167047,167048,167051,167053,167056,167058],{"class":36,"line":624},[34,167049,167050],{"class":40},"max_student ",[34,167052,221],{"class":55},[34,167054,167055],{"class":40}," students[",[34,167057,177],{"class":44},[34,167059,34887],{"class":40},[34,167061,167062,167065,167067],{"class":36,"line":630},[34,167063,167064],{"class":40},"passed ",[34,167066,221],{"class":55},[34,167068,53477],{"class":40},[34,167070,167071],{"class":36,"line":636},[34,167072,1475],{"emptyLinePlaceholder":1474},[34,167074,167075,167077,167079,167081],{"class":36,"line":1513},[34,167076,4678],{"class":55},[34,167078,153500],{"class":40},[34,167080,27689],{"class":55},[34,167082,153505],{"class":40},[34,167084,167085,167087,167089,167091,167093],{"class":36,"line":1519},[34,167086,160670],{"class":40},[34,167088,11127],{"class":55},[34,167090,153512],{"class":40},[34,167092,152835],{"class":504},[34,167094,34887],{"class":40},[34,167096,167097],{"class":36,"line":3283},[34,167098,1475],{"emptyLinePlaceholder":1474},[34,167100,167101,167103,167105,167107,167109,167111,167114,167116],{"class":36,"line":3297},[34,167102,4754],{"class":55},[34,167104,153512],{"class":40},[34,167106,152835],{"class":504},[34,167108,6095],{"class":40},[34,167110,2751],{"class":55},[34,167112,167113],{"class":40}," max_student[",[34,167115,152835],{"class":504},[34,167117,167118],{"class":40},"]:\n",[34,167120,167121,167124,167126],{"class":36,"line":3302},[34,167122,167123],{"class":40},"        max_student ",[34,167125,221],{"class":55},[34,167127,153528],{"class":40},[34,167129,167130],{"class":36,"line":3308},[34,167131,1475],{"emptyLinePlaceholder":1474},[34,167133,167134,167136,167138,167140,167142,167144,167146],{"class":36,"line":3328},[34,167135,4754],{"class":55},[34,167137,153512],{"class":40},[34,167139,152835],{"class":504},[34,167141,6095],{"class":40},[34,167143,3364],{"class":55},[34,167145,159200],{"class":44},[34,167147,5392],{"class":40},[34,167149,167150],{"class":36,"line":3333},[34,167151,167152],{"class":40},"        passed.append(student)\n",[34,167154,167155],{"class":36,"line":3347},[34,167156,1475],{"emptyLinePlaceholder":1474},[34,167158,167159,167161,167163,167165,167167,167169],{"class":36,"line":3352},[34,167160,165137],{"class":40},[34,167162,221],{"class":55},[34,167164,165142],{"class":40},[34,167166,2379],{"class":55},[34,167168,8981],{"class":44},[34,167170,166358],{"class":40},[34,167172,167173],{"class":36,"line":3381},[34,167174,1475],{"emptyLinePlaceholder":1474},[34,167176,167177,167179,167181,167183,167185,167187,167189,167191,167193,167195],{"class":36,"line":3386},[34,167178,723],{"class":44},[34,167180,286],{"class":40},[34,167182,1867],{"class":55},[34,167184,165160],{"class":504},[34,167186,2687],{"class":44},[34,167188,165165],{"class":40},[34,167190,158522],{"class":55},[34,167192,2737],{"class":44},[34,167194,2058],{"class":504},[34,167196,101],{"class":40},[34,167198,167199,167201,167203,167205,167208,167210,167213,167215,167217,167219,167221,167223,167225,167227,167229,167231],{"class":36,"line":3403},[34,167200,723],{"class":44},[34,167202,286],{"class":40},[34,167204,1867],{"class":55},[34,167206,167207],{"class":504},"\"最高分学生:",[34,167209,2687],{"class":44},[34,167211,167212],{"class":40},"max_student[",[34,167214,154245],{"class":504},[34,167216,2731],{"class":40},[34,167218,2737],{"class":44},[34,167220,6100],{"class":44},[34,167222,167212],{"class":40},[34,167224,154283],{"class":504},[34,167226,2731],{"class":40},[34,167228,2737],{"class":44},[34,167230,2058],{"class":504},[34,167232,101],{"class":40},[34,167234,167235,167237,167239,167241,167244,167247,167250,167252,167254],{"class":36,"line":3408},[34,167236,723],{"class":44},[34,167238,286],{"class":40},[34,167240,1867],{"class":55},[34,167242,167243],{"class":504},"\"及格人数:",[34,167245,167246],{"class":44},"{len",[34,167248,167249],{"class":40},"(passed)",[34,167251,2737],{"class":44},[34,167253,2058],{"class":504},[34,167255,101],{"class":40},[14,167257,167259],{"id":167258},"_616-易错点","6.16 易错点",[1772,167261,167262,167265,167268,167271,167277,167286],{},[1775,167263,167264],{},"列表可变，元组和字符串不可变。",[1775,167266,167267],{},"切片结束位置不包含。",[1775,167269,167270],{},"字典通过 key 取值，不是通过索引。",[1775,167272,167273,167274,30031],{},"空集合要用 ",[31,167275,167276],{},"set()",[1775,167278,105729,167279,167282,167283,30031],{},[31,167280,167281],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[31,167284,167285],{},"get()",[1775,167287,167288],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167290,167292],{"id":167291},"_617-本章练习","6.17 本章练习",[1772,167294,167295,167298,167301,167304,167307],{},[1775,167296,167297],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[1775,167299,167300],{},"输入一句话，统计每个字符出现次数。",[1775,167302,167303],{},"使用集合去除列表中的重复元素。",[1775,167305,167306],{},"使用字典保存一个学生的信息，并实现修改成绩。",[1775,167308,167309],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1711,167311,167312],{},"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":29,"searchDepth":165,"depth":165,"links":167314},[167315,167316,167317,167318,167319,167320,167321,167322,167323,167324,167325,167326,167327,167328,167329,167330,167331],{"id":164295,"depth":165,"text":164296},{"id":164412,"depth":165,"text":164413},{"id":164502,"depth":165,"text":164503},{"id":164626,"depth":165,"text":164627},{"id":164989,"depth":165,"text":164990},{"id":165176,"depth":165,"text":165177},{"id":165295,"depth":165,"text":165296},{"id":165437,"depth":165,"text":165438},{"id":165624,"depth":165,"text":165625},{"id":165868,"depth":165,"text":165869},{"id":166078,"depth":165,"text":166079},{"id":166163,"depth":165,"text":166164},{"id":166461,"depth":165,"text":166462},{"id":166743,"depth":165,"text":166744},{"id":166935,"depth":165,"text":166936},{"id":167258,"depth":165,"text":167259},{"id":167291,"depth":165,"text":167292},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164287,"description":1744},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167338,"title":167339,"body":167340,"description":1744,"extension":1745,"meta":169512,"navigation":1474,"path":169513,"seo":169514,"stem":169515,"__hash__":169516},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167341,"toc":169487},[167342,167345,167349,167352,167432,167435,167456,167459,167463,167466,167528,167531,167548,167552,167555,167600,167602,167610,167614,167617,167699,167702,167705,167730,167733,167756,167760,167763,167765,167827,167830,167832,167883,167887,167891,167897,168002,168006,168012,168083,168087,168090,168158,168161,168241,168245,168251,168287,168290,168293,168403,168409,168413,168416,168488,168491,168495,168499,168504,168566,168570,168575,168643,168647,168652,168768,168772,168775,168855,168858,168862,168865,168969,168971,168986,168989,168993,169131,169139,169143,169145,169156,169158,169416,169420,169452,169456,169484],[10,167343,167339],{"id":167344},"_7-函数进阶",[14,167346,167348],{"id":167347},"_71-多返回值","7.1 多返回值",[103,167350,167351],{},"Python 函数可以返回多个值，本质上返回的是元组。",[24,167353,167355],{"className":26,"code":167354,"language":28,"meta":29,"style":29},"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",[31,167356,167357,167366,167374,167382,167391,167398,167402,167406,167415,167421],{"__ignoreMap":29},[34,167358,167359,167361,167364],{"class":36,"line":37},[34,167360,33588],{"class":55},[34,167362,167363],{"class":3617}," get_info",[34,167365,33594],{"class":40},[34,167367,167368,167370,167372],{"class":36,"line":165},[34,167369,153733],{"class":40},[34,167371,221],{"class":55},[34,167373,150716],{"class":504},[34,167375,167376,167378,167380],{"class":36,"line":171},[34,167377,153749],{"class":40},[34,167379,221],{"class":55},[34,167381,147914],{"class":44},[34,167383,167384,167386,167388],{"class":36,"line":182},[34,167385,153764],{"class":40},[34,167387,221],{"class":55},[34,167389,167390],{"class":44}," 95\n",[34,167392,167393,167395],{"class":36,"line":188},[34,167394,5743],{"class":55},[34,167396,167397],{"class":40}," name, age, score\n",[34,167399,167400],{"class":36,"line":518},[34,167401,1475],{"emptyLinePlaceholder":1474},[34,167403,167404],{"class":36,"line":524},[34,167405,1475],{"emptyLinePlaceholder":1474},[34,167407,167408,167410,167412],{"class":36,"line":530},[34,167409,162669],{"class":40},[34,167411,221],{"class":55},[34,167413,167414],{"class":40}," get_info()\n",[34,167416,167417,167419],{"class":36,"line":624},[34,167418,723],{"class":44},[34,167420,78223],{"class":40},[34,167422,167423,167425,167427,167429],{"class":36,"line":630},[34,167424,723],{"class":44},[34,167426,286],{"class":40},[34,167428,104470],{"class":44},[34,167430,167431],{"class":40},"(result))\n",[103,167433,167434],{},"可以直接解包：",[24,167436,167438],{"className":26,"code":167437,"language":28,"meta":29,"style":29},"name, age, score = get_info()\nprint(name, age, score)\n",[31,167439,167440,167449],{"__ignoreMap":29},[34,167441,167442,167445,167447],{"class":36,"line":37},[34,167443,167444],{"class":40},"name, age, score ",[34,167446,221],{"class":55},[34,167448,167414],{"class":40},[34,167450,167451,167453],{"class":36,"line":165},[34,167452,723],{"class":44},[34,167454,167455],{"class":40},"(name, age, score)\n",[103,167457,167458],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167460,167462],{"id":167461},"_72-位置参数","7.2 位置参数",[103,167464,167465],{},"位置参数按顺序传递。",[24,167467,167469],{"className":26,"code":167468,"language":28,"meta":29,"style":29},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[31,167470,167471,167479,167507,167511,167515],{"__ignoreMap":29},[34,167472,167473,167475,167477],{"class":36,"line":37},[34,167474,33588],{"class":55},[34,167476,150735],{"class":3617},[34,167478,150738],{"class":40},[34,167480,167481,167483,167485,167487,167489,167491,167493,167495,167497,167499,167501,167503,167505],{"class":36,"line":165},[34,167482,32941],{"class":44},[34,167484,286],{"class":40},[34,167486,1867],{"class":55},[34,167488,150749],{"class":504},[34,167490,2687],{"class":44},[34,167492,81447],{"class":40},[34,167494,2737],{"class":44},[34,167496,150758],{"class":504},[34,167498,2687],{"class":44},[34,167500,71860],{"class":40},[34,167502,2737],{"class":44},[34,167504,150767],{"class":504},[34,167506,101],{"class":40},[34,167508,167509],{"class":36,"line":171},[34,167510,1475],{"emptyLinePlaceholder":1474},[34,167512,167513],{"class":36,"line":182},[34,167514,1475],{"emptyLinePlaceholder":1474},[34,167516,167517,167520,167522,167524,167526],{"class":36,"line":188},[34,167518,167519],{"class":40},"introduce(",[34,167521,151251],{"class":504},[34,167523,48],{"class":40},[34,167525,2445],{"class":44},[34,167527,101],{"class":40},[103,167529,167530],{},"顺序错了就会得到错误含义：",[24,167532,167534],{"className":26,"code":167533,"language":28,"meta":29,"style":29},"introduce(18, \"小明\")\n",[31,167535,167536],{"__ignoreMap":29},[34,167537,167538,167540,167542,167544,167546],{"class":36,"line":37},[34,167539,167519],{"class":40},[34,167541,2445],{"class":44},[34,167543,48],{"class":40},[34,167545,151251],{"class":504},[34,167547,101],{"class":40},[14,167549,167551],{"id":167550},"_73-关键字参数","7.3 关键字参数",[103,167553,167554],{},"关键字参数按参数名传递。",[24,167556,167558],{"className":26,"code":167557,"language":28,"meta":29,"style":29},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[31,167559,167560,167580],{"__ignoreMap":29},[34,167561,167562,167564,167566,167568,167570,167572,167574,167576,167578],{"class":36,"line":37},[34,167563,167519],{"class":40},[34,167565,81447],{"class":51},[34,167567,221],{"class":55},[34,167569,151251],{"class":504},[34,167571,48],{"class":40},[34,167573,71860],{"class":51},[34,167575,221],{"class":55},[34,167577,2445],{"class":44},[34,167579,101],{"class":40},[34,167581,167582,167584,167586,167588,167590,167592,167594,167596,167598],{"class":36,"line":165},[34,167583,167519],{"class":40},[34,167585,71860],{"class":51},[34,167587,221],{"class":55},[34,167589,2445],{"class":44},[34,167591,48],{"class":40},[34,167593,81447],{"class":51},[34,167595,221],{"class":55},[34,167597,151251],{"class":504},[34,167599,101],{"class":40},[103,167601,119297],{},[1772,167603,167604,167607],{},[1775,167605,167606],{},"顺序不容易错。",[1775,167608,167609],{},"调用时可读性更强。",[14,167611,167613],{"id":167612},"_74-默认参数","7.4 默认参数",[103,167615,167616],{},"默认参数给参数设置默认值。",[24,167618,167620],{"className":26,"code":167619,"language":28,"meta":29,"style":29},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[31,167621,167622,167638,167668,167672,167676,167686],{"__ignoreMap":29},[34,167623,167624,167626,167628,167631,167633,167636],{"class":36,"line":37},[34,167625,33588],{"class":55},[34,167627,123456],{"class":3617},[34,167629,167630],{"class":40},"(host, port",[34,167632,221],{"class":55},[34,167634,167635],{"class":44},"3306",[34,167637,32428],{"class":40},[34,167639,167640,167642,167644,167646,167649,167651,167653,167655,167657,167659,167662,167664,167666],{"class":36,"line":165},[34,167641,32941],{"class":44},[34,167643,286],{"class":40},[34,167645,1867],{"class":55},[34,167647,167648],{"class":504},"\"连接",[34,167650,2687],{"class":44},[34,167652,29041],{"class":40},[34,167654,2737],{"class":44},[34,167656,2650],{"class":504},[34,167658,2687],{"class":44},[34,167660,167661],{"class":40},"port",[34,167663,2737],{"class":44},[34,167665,2058],{"class":504},[34,167667,101],{"class":40},[34,167669,167670],{"class":36,"line":171},[34,167671,1475],{"emptyLinePlaceholder":1474},[34,167673,167674],{"class":36,"line":182},[34,167675,1475],{"emptyLinePlaceholder":1474},[34,167677,167678,167681,167684],{"class":36,"line":188},[34,167679,167680],{"class":40},"connect(",[34,167682,167683],{"class":504},"\"localhost\"",[34,167685,101],{"class":40},[34,167687,167688,167690,167692,167694,167697],{"class":36,"line":518},[34,167689,167680],{"class":40},[34,167691,167683],{"class":504},[34,167693,48],{"class":40},[34,167695,167696],{"class":44},"6379",[34,167698,101],{"class":40},[103,167700,167701],{},"注意：默认参数必须放在非默认参数后面。",[103,167703,167704],{},"错误：",[24,167706,167708],{"className":26,"code":167707,"language":28,"meta":29,"style":29},"def connect(port=3306, host):\n    pass\n",[31,167709,167710,167726],{"__ignoreMap":29},[34,167711,167712,167714,167716,167719,167721,167723],{"class":36,"line":37},[34,167713,33588],{"class":55},[34,167715,123456],{"class":3617},[34,167717,167718],{"class":40},"(port",[34,167720,221],{"class":55},[34,167722,167635],{"class":44},[34,167724,167725],{"class":40},", host):\n",[34,167727,167728],{"class":36,"line":165},[34,167729,150900],{"class":55},[103,167731,167732],{},"正确：",[24,167734,167736],{"className":26,"code":167735,"language":28,"meta":29,"style":29},"def connect(host, port=3306):\n    pass\n",[31,167737,167738,167752],{"__ignoreMap":29},[34,167739,167740,167742,167744,167746,167748,167750],{"class":36,"line":37},[34,167741,33588],{"class":55},[34,167743,123456],{"class":3617},[34,167745,167630],{"class":40},[34,167747,221],{"class":55},[34,167749,167635],{"class":44},[34,167751,32428],{"class":40},[34,167753,167754],{"class":36,"line":165},[34,167755,150900],{"class":55},[14,167757,167759],{"id":167758},"_75-默认参数的坑","7.5 默认参数的坑",[103,167761,167762],{},"不要使用可变对象作为默认参数。",[103,167764,158986],{},[24,167766,167768],{"className":26,"code":167767,"language":28,"meta":29,"style":29},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[31,167769,167770,167785,167790,167797,167801,167805,167816],{"__ignoreMap":29},[34,167771,167772,167774,167777,167780,167782],{"class":36,"line":37},[34,167773,33588],{"class":55},[34,167775,167776],{"class":3617}," add_item",[34,167778,167779],{"class":40},"(item, items",[34,167781,221],{"class":55},[34,167783,167784],{"class":40},"[]):\n",[34,167786,167787],{"class":36,"line":165},[34,167788,167789],{"class":40},"    items.append(item)\n",[34,167791,167792,167794],{"class":36,"line":171},[34,167793,5743],{"class":55},[34,167795,167796],{"class":40}," items\n",[34,167798,167799],{"class":36,"line":182},[34,167800,1475],{"emptyLinePlaceholder":1474},[34,167802,167803],{"class":36,"line":188},[34,167804,1475],{"emptyLinePlaceholder":1474},[34,167806,167807,167809,167812,167814],{"class":36,"line":518},[34,167808,723],{"class":44},[34,167810,167811],{"class":40},"(add_item(",[34,167813,166688],{"class":504},[34,167815,296],{"class":40},[34,167817,167818,167820,167822,167825],{"class":36,"line":524},[34,167819,723],{"class":44},[34,167821,167811],{"class":40},[34,167823,167824],{"class":504},"\"b\"",[34,167826,296],{"class":40},[103,167828,167829],{},"第二次调用会复用第一次的列表。",[103,167831,157251],{},[24,167833,167835],{"className":26,"code":167834,"language":28,"meta":29,"style":29},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[31,167836,167837,167851,167864,167873,167877],{"__ignoreMap":29},[34,167838,167839,167841,167843,167845,167847,167849],{"class":36,"line":37},[34,167840,33588],{"class":55},[34,167842,167776],{"class":3617},[34,167844,167779],{"class":40},[34,167846,221],{"class":55},[34,167848,492],{"class":44},[34,167850,32428],{"class":40},[34,167852,167853,167855,167858,167860,167862],{"class":36,"line":165},[34,167854,4754],{"class":55},[34,167856,167857],{"class":40}," items ",[34,167859,40568],{"class":55},[34,167861,59],{"class":44},[34,167863,5392],{"class":40},[34,167865,167866,167869,167871],{"class":36,"line":171},[34,167867,167868],{"class":40},"        items ",[34,167870,221],{"class":55},[34,167872,53477],{"class":40},[34,167874,167875],{"class":36,"line":182},[34,167876,167789],{"class":40},[34,167878,167879,167881],{"class":36,"line":188},[34,167880,5743],{"class":55},[34,167882,167796],{"class":40},[14,167884,167886],{"id":167885},"_76-不定长参数","7.6 不定长参数",[19,167888,167890],{"id":167889},"_761-args","7.6.1 *args",[103,167892,167893,167896],{},[31,167894,167895],{},"*args"," 接收任意数量的位置参数，得到元组。",[24,167898,167900],{"className":26,"code":167899,"language":28,"meta":29,"style":29},"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",[31,167901,167902,167915,167923,167934,167943,167949,167953,167957,167976],{"__ignoreMap":29},[34,167903,167904,167906,167908,167910,167912],{"class":36,"line":37},[34,167905,33588],{"class":55},[34,167907,6860],{"class":3617},[34,167909,286],{"class":40},[34,167911,2252],{"class":55},[34,167913,167914],{"class":40},"args):\n",[34,167916,167917,167919,167921],{"class":36,"line":165},[34,167918,160670],{"class":40},[34,167920,221],{"class":55},[34,167922,48972],{"class":44},[34,167924,167925,167927,167929,167931],{"class":36,"line":171},[34,167926,4854],{"class":55},[34,167928,157543],{"class":40},[34,167930,27689],{"class":55},[34,167932,167933],{"class":40}," args:\n",[34,167935,167936,167938,167940],{"class":36,"line":182},[34,167937,161345],{"class":40},[34,167939,11127],{"class":55},[34,167941,167942],{"class":40}," num\n",[34,167944,167945,167947],{"class":36,"line":188},[34,167946,5743],{"class":55},[34,167948,163650],{"class":40},[34,167950,167951],{"class":36,"line":518},[34,167952,1475],{"emptyLinePlaceholder":1474},[34,167954,167955],{"class":36,"line":524},[34,167956,1475],{"emptyLinePlaceholder":1474},[34,167958,167959,167961,167964,167966,167968,167970,167972,167974],{"class":36,"line":530},[34,167960,723],{"class":44},[34,167962,167963],{"class":40},"(add(",[34,167965,394],{"class":44},[34,167967,48],{"class":40},[34,167969,332],{"class":44},[34,167971,48],{"class":40},[34,167973,337],{"class":44},[34,167975,296],{"class":40},[34,167977,167978,167980,167982,167984,167986,167988,167990,167992,167994,167996,167998,168000],{"class":36,"line":624},[34,167979,723],{"class":44},[34,167981,167963],{"class":40},[34,167983,394],{"class":44},[34,167985,48],{"class":40},[34,167987,332],{"class":44},[34,167989,48],{"class":40},[34,167991,337],{"class":44},[34,167993,48],{"class":40},[34,167995,247],{"class":44},[34,167997,48],{"class":40},[34,167999,224],{"class":44},[34,168001,296],{"class":40},[19,168003,168005],{"id":168004},"_762-kwargs","7.6.2 **kwargs",[103,168007,168008,168011],{},[31,168009,168010],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[24,168013,168015],{"className":26,"code":168014,"language":28,"meta":29,"style":29},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[31,168016,168017,168030,168041,168047,168051,168055],{"__ignoreMap":29},[34,168018,168019,168021,168023,168025,168027],{"class":36,"line":37},[34,168020,33588],{"class":55},[34,168022,163308],{"class":3617},[34,168024,286],{"class":40},[34,168026,12311],{"class":55},[34,168028,168029],{"class":40},"kwargs):\n",[34,168031,168032,168034,168036,168038],{"class":36,"line":165},[34,168033,4854],{"class":55},[34,168035,166148],{"class":40},[34,168037,27689],{"class":55},[34,168039,168040],{"class":40}," kwargs.items():\n",[34,168042,168043,168045],{"class":36,"line":171},[34,168044,34092],{"class":44},[34,168046,166160],{"class":40},[34,168048,168049],{"class":36,"line":182},[34,168050,1475],{"emptyLinePlaceholder":1474},[34,168052,168053],{"class":36,"line":188},[34,168054,1475],{"emptyLinePlaceholder":1474},[34,168056,168057,168059,168061,168063,168065,168067,168069,168071,168073,168075,168077,168079,168081],{"class":36,"line":518},[34,168058,163373],{"class":40},[34,168060,81447],{"class":51},[34,168062,221],{"class":55},[34,168064,151251],{"class":504},[34,168066,48],{"class":40},[34,168068,71860],{"class":51},[34,168070,221],{"class":55},[34,168072,2445],{"class":44},[34,168074,48],{"class":40},[34,168076,71911],{"class":51},[34,168078,221],{"class":55},[34,168080,70908],{"class":504},[34,168082,101],{"class":40},[14,168084,168086],{"id":168085},"_77-参数解包","7.7 参数解包",[103,168088,168089],{},"列表或元组解包为位置参数：",[24,168091,168093],{"className":26,"code":168092,"language":28,"meta":29,"style":29},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[31,168094,168095,168104,168119,168123,168127,168147],{"__ignoreMap":29},[34,168096,168097,168099,168101],{"class":36,"line":37},[34,168098,33588],{"class":55},[34,168100,6860],{"class":3617},[34,168102,168103],{"class":40},"(a, b, c):\n",[34,168105,168106,168108,168110,168112,168114,168116],{"class":36,"line":165},[34,168107,5743],{"class":55},[34,168109,12519],{"class":40},[34,168111,2277],{"class":55},[34,168113,12532],{"class":40},[34,168115,2277],{"class":55},[34,168117,168118],{"class":40}," c\n",[34,168120,168121],{"class":36,"line":171},[34,168122,1475],{"emptyLinePlaceholder":1474},[34,168124,168125],{"class":36,"line":182},[34,168126,1475],{"emptyLinePlaceholder":1474},[34,168128,168129,168131,168133,168135,168137,168139,168141,168143,168145],{"class":36,"line":188},[34,168130,165463],{"class":40},[34,168132,221],{"class":55},[34,168134,53865],{"class":40},[34,168136,394],{"class":44},[34,168138,48],{"class":40},[34,168140,332],{"class":44},[34,168142,48],{"class":40},[34,168144,337],{"class":44},[34,168146,34887],{"class":40},[34,168148,168149,168151,168153,168155],{"class":36,"line":518},[34,168150,723],{"class":44},[34,168152,167963],{"class":40},[34,168154,2252],{"class":55},[34,168156,168157],{"class":40},"nums))\n",[103,168159,168160],{},"字典解包为关键字参数：",[24,168162,168164],{"className":26,"code":168163,"language":28,"meta":29,"style":29},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[31,168165,168166,168174,168200,168204,168208,168232],{"__ignoreMap":29},[34,168167,168168,168170,168172],{"class":36,"line":37},[34,168169,33588],{"class":55},[34,168171,150735],{"class":3617},[34,168173,150738],{"class":40},[34,168175,168176,168178,168180,168182,168184,168186,168188,168190,168192,168194,168196,168198],{"class":36,"line":165},[34,168177,32941],{"class":44},[34,168179,286],{"class":40},[34,168181,1867],{"class":55},[34,168183,2058],{"class":504},[34,168185,2687],{"class":44},[34,168187,81447],{"class":40},[34,168189,2737],{"class":44},[34,168191,6100],{"class":44},[34,168193,71860],{"class":40},[34,168195,2737],{"class":44},[34,168197,2058],{"class":504},[34,168199,101],{"class":40},[34,168201,168202],{"class":36,"line":171},[34,168203,1475],{"emptyLinePlaceholder":1474},[34,168205,168206],{"class":36,"line":182},[34,168207,1475],{"emptyLinePlaceholder":1474},[34,168209,168210,168212,168214,168216,168218,168220,168222,168224,168226,168228,168230],{"class":36,"line":188},[34,168211,117677],{"class":40},[34,168213,221],{"class":55},[34,168215,6100],{"class":40},[34,168217,64318],{"class":504},[34,168219,53076],{"class":40},[34,168221,151251],{"class":504},[34,168223,48],{"class":40},[34,168225,70763],{"class":504},[34,168227,53076],{"class":40},[34,168229,2445],{"class":44},[34,168231,3223],{"class":40},[34,168233,168234,168236,168238],{"class":36,"line":518},[34,168235,167519],{"class":40},[34,168237,12311],{"class":55},[34,168239,168240],{"class":40},"info)\n",[14,168242,168244],{"id":168243},"_78-匿名函数lambda","7.8 匿名函数lambda",[103,168246,168247,168250],{},[31,168248,168249],{},"lambda"," 用于定义简单匿名函数。",[24,168252,168254],{"className":26,"code":168253,"language":28,"meta":29,"style":29},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[31,168255,168256,168273],{"__ignoreMap":29},[34,168257,168258,168261,168263,168266,168269,168271],{"class":36,"line":37},[34,168259,168260],{"class":40},"add ",[34,168262,221],{"class":55},[34,168264,168265],{"class":55}," lambda",[34,168267,168268],{"class":40}," a, b: a ",[34,168270,2277],{"class":55},[34,168272,152467],{"class":40},[34,168274,168275,168277,168279,168281,168283,168285],{"class":36,"line":165},[34,168276,723],{"class":44},[34,168278,167963],{"class":40},[34,168280,394],{"class":44},[34,168282,48],{"class":40},[34,168284,332],{"class":44},[34,168286,296],{"class":40},[103,168288,168289],{},"常和排序、过滤等函数一起使用。",[103,168291,168292],{},"按分数排序：",[24,168294,168296],{"className":26,"code":168295,"language":28,"meta":29,"style":29},"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",[31,168297,168298,168306,168326,168346,168366,168370,168374,168397],{"__ignoreMap":29},[34,168299,168300,168302,168304],{"class":36,"line":37},[34,168301,161079],{"class":40},[34,168303,221],{"class":55},[34,168305,57086],{"class":40},[34,168307,168308,168310,168312,168314,168316,168318,168320,168322,168324],{"class":36,"line":165},[34,168309,149748],{"class":40},[34,168311,64318],{"class":504},[34,168313,53076],{"class":40},[34,168315,151251],{"class":504},[34,168317,48],{"class":40},[34,168319,152835],{"class":504},[34,168321,53076],{"class":40},[34,168323,2780],{"class":44},[34,168325,6581],{"class":40},[34,168327,168328,168330,168332,168334,168336,168338,168340,168342,168344],{"class":36,"line":171},[34,168329,149748],{"class":40},[34,168331,64318],{"class":504},[34,168333,53076],{"class":40},[34,168335,152299],{"class":504},[34,168337,48],{"class":40},[34,168339,152835],{"class":504},[34,168341,53076],{"class":40},[34,168343,2604],{"class":44},[34,168345,6581],{"class":40},[34,168347,168348,168350,168352,168354,168356,168358,168360,168362,168364],{"class":36,"line":182},[34,168349,149748],{"class":40},[34,168351,64318],{"class":504},[34,168353,53076],{"class":40},[34,168355,161094],{"class":504},[34,168357,48],{"class":40},[34,168359,152835],{"class":504},[34,168361,53076],{"class":40},[34,168363,2206],{"class":44},[34,168365,6581],{"class":40},[34,168367,168368],{"class":36,"line":188},[34,168369,34887],{"class":40},[34,168371,168372],{"class":36,"line":518},[34,168373,1475],{"emptyLinePlaceholder":1474},[34,168375,168376,168379,168381,168383,168385,168387,168389,168391,168393,168395],{"class":36,"line":524},[34,168377,168378],{"class":40},"students.sort(",[34,168380,155309],{"class":51},[34,168382,155312],{"class":55},[34,168384,155315],{"class":40},[34,168386,152835],{"class":504},[34,168388,113565],{"class":40},[34,168390,164891],{"class":51},[34,168392,221],{"class":55},[34,168394,33118],{"class":44},[34,168396,101],{"class":40},[34,168398,168399,168401],{"class":36,"line":530},[34,168400,723],{"class":44},[34,168402,166358],{"class":40},[103,168404,168405,168406,168408],{},"如果逻辑复杂，不要硬写 ",[31,168407,168249],{},"，定义普通函数更清晰。",[14,168410,168412],{"id":168411},"_79-函数作为参数","7.9 函数作为参数",[103,168414,168415],{},"函数可以作为参数传给另一个函数。",[24,168417,168419],{"className":26,"code":168418,"language":28,"meta":29,"style":29},"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",[31,168420,168421,168429,168439,168443,168447,168457,168464,168468,168472],{"__ignoreMap":29},[34,168422,168423,168425,168427],{"class":36,"line":37},[34,168424,33588],{"class":55},[34,168426,6860],{"class":3617},[34,168428,152456],{"class":40},[34,168430,168431,168433,168435,168437],{"class":36,"line":165},[34,168432,5743],{"class":55},[34,168434,12519],{"class":40},[34,168436,2277],{"class":55},[34,168438,152467],{"class":40},[34,168440,168441],{"class":36,"line":171},[34,168442,1475],{"emptyLinePlaceholder":1474},[34,168444,168445],{"class":36,"line":182},[34,168446,1475],{"emptyLinePlaceholder":1474},[34,168448,168449,168451,168454],{"class":36,"line":188},[34,168450,33588],{"class":55},[34,168452,168453],{"class":3617}," calculate",[34,168455,168456],{"class":40},"(a, b, func):\n",[34,168458,168459,168461],{"class":36,"line":518},[34,168460,5743],{"class":55},[34,168462,168463],{"class":40}," func(a, b)\n",[34,168465,168466],{"class":36,"line":524},[34,168467,1475],{"emptyLinePlaceholder":1474},[34,168469,168470],{"class":36,"line":530},[34,168471,1475],{"emptyLinePlaceholder":1474},[34,168473,168474,168476,168479,168481,168483,168485],{"class":36,"line":624},[34,168475,723],{"class":44},[34,168477,168478],{"class":40},"(calculate(",[34,168480,410],{"class":44},[34,168482,48],{"class":40},[34,168484,1249],{"class":44},[34,168486,168487],{"class":40},", add))\n",[103,168489,168490],{},"这种思想在排序、回调、框架中经常出现。",[14,168492,168494],{"id":168493},"_710-mapfiltersorted","7.10 map、filter、sorted",[19,168496,168498],{"id":168497},"_7101-map","7.10.1 map",[103,168500,168501,168503],{},[31,168502,75683],{}," 对每个元素执行函数。",[24,168505,168507],{"className":26,"code":168506,"language":28,"meta":29,"style":29},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[31,168508,168509,168533,168556],{"__ignoreMap":29},[34,168510,168511,168513,168515,168517,168519,168521,168523,168525,168527,168529,168531],{"class":36,"line":37},[34,168512,165463],{"class":40},[34,168514,221],{"class":55},[34,168516,53865],{"class":40},[34,168518,394],{"class":44},[34,168520,48],{"class":40},[34,168522,332],{"class":44},[34,168524,48],{"class":40},[34,168526,337],{"class":44},[34,168528,48],{"class":40},[34,168530,247],{"class":44},[34,168532,34887],{"class":40},[34,168534,168535,168537,168539,168542,168544,168546,168549,168551,168553],{"class":36,"line":165},[34,168536,162669],{"class":40},[34,168538,221],{"class":55},[34,168540,168541],{"class":44}," map",[34,168543,286],{"class":40},[34,168545,168249],{"class":55},[34,168547,168548],{"class":40}," x: x ",[34,168550,2252],{"class":55},[34,168552,16401],{"class":44},[34,168554,168555],{"class":40},", nums)\n",[34,168557,168558,168560,168562,168564],{"class":36,"line":171},[34,168559,723],{"class":44},[34,168561,286],{"class":40},[34,168563,155433],{"class":44},[34,168565,167431],{"class":40},[19,168567,168569],{"id":168568},"_7102-filter","7.10.2 filter",[103,168571,168572,168574],{},[31,168573,81688],{}," 保留满足条件的元素。",[24,168576,168578],{"className":26,"code":168577,"language":28,"meta":29,"style":29},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[31,168579,168580,168608,168633],{"__ignoreMap":29},[34,168581,168582,168584,168586,168588,168590,168592,168594,168596,168598,168600,168602,168604,168606],{"class":36,"line":37},[34,168583,165463],{"class":40},[34,168585,221],{"class":55},[34,168587,53865],{"class":40},[34,168589,394],{"class":44},[34,168591,48],{"class":40},[34,168593,332],{"class":44},[34,168595,48],{"class":40},[34,168597,337],{"class":44},[34,168599,48],{"class":40},[34,168601,247],{"class":44},[34,168603,48],{"class":40},[34,168605,224],{"class":44},[34,168607,34887],{"class":40},[34,168609,168610,168612,168614,168617,168619,168621,168623,168625,168627,168629,168631],{"class":36,"line":165},[34,168611,162669],{"class":40},[34,168613,221],{"class":55},[34,168615,168616],{"class":44}," filter",[34,168618,286],{"class":40},[34,168620,168249],{"class":55},[34,168622,168548],{"class":40},[34,168624,2131],{"class":55},[34,168626,16401],{"class":44},[34,168628,102922],{"class":55},[34,168630,98],{"class":44},[34,168632,168555],{"class":40},[34,168634,168635,168637,168639,168641],{"class":36,"line":171},[34,168636,723],{"class":44},[34,168638,286],{"class":40},[34,168640,155433],{"class":44},[34,168642,167431],{"class":40},[19,168644,168646],{"id":168645},"_7103-sorted","7.10.3 sorted",[103,168648,168649,168651],{},[31,168650,166599],{}," 返回排序后的新列表。",[24,168653,168655],{"className":26,"code":168654,"language":28,"meta":29,"style":29},"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",[31,168656,168657,168665,168685,168705,168725,168729,168733,168762],{"__ignoreMap":29},[34,168658,168659,168661,168663],{"class":36,"line":37},[34,168660,161079],{"class":40},[34,168662,221],{"class":55},[34,168664,57086],{"class":40},[34,168666,168667,168669,168671,168673,168675,168677,168679,168681,168683],{"class":36,"line":165},[34,168668,149748],{"class":40},[34,168670,64318],{"class":504},[34,168672,53076],{"class":40},[34,168674,151251],{"class":504},[34,168676,48],{"class":40},[34,168678,152835],{"class":504},[34,168680,53076],{"class":40},[34,168682,2780],{"class":44},[34,168684,6581],{"class":40},[34,168686,168687,168689,168691,168693,168695,168697,168699,168701,168703],{"class":36,"line":171},[34,168688,149748],{"class":40},[34,168690,64318],{"class":504},[34,168692,53076],{"class":40},[34,168694,152299],{"class":504},[34,168696,48],{"class":40},[34,168698,152835],{"class":504},[34,168700,53076],{"class":40},[34,168702,2604],{"class":44},[34,168704,6581],{"class":40},[34,168706,168707,168709,168711,168713,168715,168717,168719,168721,168723],{"class":36,"line":182},[34,168708,149748],{"class":40},[34,168710,64318],{"class":504},[34,168712,53076],{"class":40},[34,168714,161094],{"class":504},[34,168716,48],{"class":40},[34,168718,152835],{"class":504},[34,168720,53076],{"class":40},[34,168722,2206],{"class":44},[34,168724,6581],{"class":40},[34,168726,168727],{"class":36,"line":188},[34,168728,34887],{"class":40},[34,168730,168731],{"class":36,"line":518},[34,168732,1475],{"emptyLinePlaceholder":1474},[34,168734,168735,168737,168739,168741,168744,168746,168748,168750,168752,168754,168756,168758,168760],{"class":36,"line":524},[34,168736,162669],{"class":40},[34,168738,221],{"class":55},[34,168740,164967],{"class":44},[34,168742,168743],{"class":40},"(students, ",[34,168745,155309],{"class":51},[34,168747,155312],{"class":55},[34,168749,155315],{"class":40},[34,168751,152835],{"class":504},[34,168753,113565],{"class":40},[34,168755,164891],{"class":51},[34,168757,221],{"class":55},[34,168759,33118],{"class":44},[34,168761,101],{"class":40},[34,168763,168764,168766],{"class":36,"line":530},[34,168765,723],{"class":44},[34,168767,78223],{"class":40},[14,168769,168771],{"id":168770},"_711-闭包入门","7.11 闭包入门",[103,168773,168774],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[24,168776,168778],{"className":26,"code":168777,"language":28,"meta":29,"style":29},"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",[31,168779,168780,168790,168800,168811,168815,168822,168826,168830,168844],{"__ignoreMap":29},[34,168781,168782,168784,168787],{"class":36,"line":37},[34,168783,33588],{"class":55},[34,168785,168786],{"class":3617}," outer",[34,168788,168789],{"class":40},"(base):\n",[34,168791,168792,168794,168797],{"class":36,"line":165},[34,168793,32443],{"class":55},[34,168795,168796],{"class":3617}," inner",[34,168798,168799],{"class":40},"(num):\n",[34,168801,168802,168804,168807,168809],{"class":36,"line":171},[34,168803,16398],{"class":55},[34,168805,168806],{"class":40}," base ",[34,168808,2277],{"class":55},[34,168810,167942],{"class":40},[34,168812,168813],{"class":36,"line":182},[34,168814,1475],{"emptyLinePlaceholder":1474},[34,168816,168817,168819],{"class":36,"line":188},[34,168818,5743],{"class":55},[34,168820,168821],{"class":40}," inner\n",[34,168823,168824],{"class":36,"line":518},[34,168825,1475],{"emptyLinePlaceholder":1474},[34,168827,168828],{"class":36,"line":524},[34,168829,1475],{"emptyLinePlaceholder":1474},[34,168831,168832,168835,168837,168840,168842],{"class":36,"line":530},[34,168833,168834],{"class":40},"add_10 ",[34,168836,221],{"class":55},[34,168838,168839],{"class":40}," outer(",[34,168841,410],{"class":44},[34,168843,101],{"class":40},[34,168845,168846,168848,168851,168853],{"class":36,"line":624},[34,168847,723],{"class":44},[34,168849,168850],{"class":40},"(add_10(",[34,168852,224],{"class":44},[34,168854,296],{"class":40},[103,168856,168857],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168859,168861],{"id":168860},"_712-装饰器入门","7.12 装饰器入门",[103,168863,168864],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[24,168866,168868],{"className":26,"code":168867,"language":28,"meta":29,"style":29},"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",[31,168869,168870,168879,168888,168899,168904,168915,168919,168926,168930,168934,168939,168947,168957,168961,168965],{"__ignoreMap":29},[34,168871,168872,168874,168876],{"class":36,"line":37},[34,168873,33588],{"class":55},[34,168875,88827],{"class":3617},[34,168877,168878],{"class":40},"(func):\n",[34,168880,168881,168883,168886],{"class":36,"line":165},[34,168882,32443],{"class":55},[34,168884,168885],{"class":3617}," wrapper",[34,168887,33594],{"class":40},[34,168889,168890,168892,168894,168897],{"class":36,"line":171},[34,168891,34092],{"class":44},[34,168893,286],{"class":40},[34,168895,168896],{"class":504},"\"函数开始执行\"",[34,168898,101],{"class":40},[34,168900,168901],{"class":36,"line":182},[34,168902,168903],{"class":40},"        func()\n",[34,168905,168906,168908,168910,168913],{"class":36,"line":188},[34,168907,34092],{"class":44},[34,168909,286],{"class":40},[34,168911,168912],{"class":504},"\"函数执行结束\"",[34,168914,101],{"class":40},[34,168916,168917],{"class":36,"line":518},[34,168918,1475],{"emptyLinePlaceholder":1474},[34,168920,168921,168923],{"class":36,"line":524},[34,168922,5743],{"class":55},[34,168924,168925],{"class":40}," wrapper\n",[34,168927,168928],{"class":36,"line":530},[34,168929,1475],{"emptyLinePlaceholder":1474},[34,168931,168932],{"class":36,"line":624},[34,168933,1475],{"emptyLinePlaceholder":1474},[34,168935,168936],{"class":36,"line":630},[34,168937,168938],{"class":3617},"@log\n",[34,168940,168941,168943,168945],{"class":36,"line":636},[34,168942,33588],{"class":55},[34,168944,162359],{"class":3617},[34,168946,33594],{"class":40},[34,168948,168949,168951,168953,168955],{"class":36,"line":1513},[34,168950,32941],{"class":44},[34,168952,286],{"class":40},[34,168954,7494],{"class":504},[34,168956,101],{"class":40},[34,168958,168959],{"class":36,"line":1519},[34,168960,1475],{"emptyLinePlaceholder":1474},[34,168962,168963],{"class":36,"line":3283},[34,168964,1475],{"emptyLinePlaceholder":1474},[34,168966,168967],{"class":36,"line":3297},[34,168968,162394],{"class":40},[103,168970,159637],{},[24,168972,168974],{"className":26,"code":168973,"language":28,"meta":29,"style":29},"say_hello = log(say_hello)\n",[31,168975,168976],{"__ignoreMap":29},[34,168977,168978,168981,168983],{"class":36,"line":37},[34,168979,168980],{"class":40},"say_hello ",[34,168982,221],{"class":55},[34,168984,168985],{"class":40}," log(say_hello)\n",[103,168987,168988],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168990,168992],{"id":168991},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[24,168994,168996],{"className":26,"code":168995,"language":28,"meta":29,"style":29},"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",[31,168997,168998,169006,169023,169033,169052,169062,169069,169073,169079,169083,169087,169091,169099,169109,169113,169117],{"__ignoreMap":29},[34,168999,169000,169002,169004],{"class":36,"line":37},[34,169001,33588],{"class":55},[34,169003,88827],{"class":3617},[34,169005,168878],{"class":40},[34,169007,169008,169010,169012,169014,169016,169019,169021],{"class":36,"line":165},[34,169009,32443],{"class":55},[34,169011,168885],{"class":3617},[34,169013,286],{"class":40},[34,169015,2252],{"class":55},[34,169017,169018],{"class":40},"args, ",[34,169020,12311],{"class":55},[34,169022,168029],{"class":40},[34,169024,169025,169027,169029,169031],{"class":36,"line":171},[34,169026,34092],{"class":44},[34,169028,286],{"class":40},[34,169030,168896],{"class":504},[34,169032,101],{"class":40},[34,169034,169035,169038,169040,169043,169045,169047,169049],{"class":36,"line":182},[34,169036,169037],{"class":40},"        result ",[34,169039,221],{"class":55},[34,169041,169042],{"class":40}," func(",[34,169044,2252],{"class":55},[34,169046,169018],{"class":40},[34,169048,12311],{"class":55},[34,169050,169051],{"class":40},"kwargs)\n",[34,169053,169054,169056,169058,169060],{"class":36,"line":188},[34,169055,34092],{"class":44},[34,169057,286],{"class":40},[34,169059,168912],{"class":504},[34,169061,101],{"class":40},[34,169063,169064,169066],{"class":36,"line":518},[34,169065,16398],{"class":55},[34,169067,169068],{"class":40}," result\n",[34,169070,169071],{"class":36,"line":524},[34,169072,1475],{"emptyLinePlaceholder":1474},[34,169074,169075,169077],{"class":36,"line":530},[34,169076,5743],{"class":55},[34,169078,168925],{"class":40},[34,169080,169081],{"class":36,"line":624},[34,169082,1475],{"emptyLinePlaceholder":1474},[34,169084,169085],{"class":36,"line":630},[34,169086,1475],{"emptyLinePlaceholder":1474},[34,169088,169089],{"class":36,"line":636},[34,169090,168938],{"class":3617},[34,169092,169093,169095,169097],{"class":36,"line":1513},[34,169094,33588],{"class":55},[34,169096,6860],{"class":3617},[34,169098,152456],{"class":40},[34,169100,169101,169103,169105,169107],{"class":36,"line":1519},[34,169102,5743],{"class":55},[34,169104,12519],{"class":40},[34,169106,2277],{"class":55},[34,169108,152467],{"class":40},[34,169110,169111],{"class":36,"line":3283},[34,169112,1475],{"emptyLinePlaceholder":1474},[34,169114,169115],{"class":36,"line":3297},[34,169116,1475],{"emptyLinePlaceholder":1474},[34,169118,169119,169121,169123,169125,169127,169129],{"class":36,"line":3302},[34,169120,723],{"class":44},[34,169122,167963],{"class":40},[34,169124,410],{"class":44},[34,169126,48],{"class":40},[34,169128,1249],{"class":44},[34,169130,296],{"class":40},[103,169132,169133,169134,102381,169136,169138],{},"这个写法使用 ",[31,169135,167895],{},[31,169137,168010],{}," 接收原函数的所有参数。",[14,169140,169142],{"id":169141},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[103,169144,124655],{},[1772,169146,169147,169150,169153],{},[1775,169148,169149],{},"给定一组学生数据。",[1775,169151,169152],{},"封装函数，根据传入规则筛选学生。",[1775,169154,169155],{},"筛选及格、优秀、未成年学生。",[103,169157,11685],{},[24,169159,169161],{"className":26,"code":169160,"language":28,"meta":29,"style":29},"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",[31,169162,169163,169171,169199,169227,169255,169259,169263,169267,169277,169285,169295,169302,169307,169313,169317,169321,169345,169368,169391,169395,169402,169409],{"__ignoreMap":29},[34,169164,169165,169167,169169],{"class":36,"line":37},[34,169166,161079],{"class":40},[34,169168,221],{"class":55},[34,169170,57086],{"class":40},[34,169172,169173,169175,169177,169179,169181,169183,169185,169187,169189,169191,169193,169195,169197],{"class":36,"line":165},[34,169174,149748],{"class":40},[34,169176,64318],{"class":504},[34,169178,53076],{"class":40},[34,169180,151251],{"class":504},[34,169182,48],{"class":40},[34,169184,70763],{"class":504},[34,169186,53076],{"class":40},[34,169188,2445],{"class":44},[34,169190,48],{"class":40},[34,169192,152835],{"class":504},[34,169194,53076],{"class":40},[34,169196,2780],{"class":44},[34,169198,6581],{"class":40},[34,169200,169201,169203,169205,169207,169209,169211,169213,169215,169217,169219,169221,169223,169225],{"class":36,"line":171},[34,169202,149748],{"class":40},[34,169204,64318],{"class":504},[34,169206,53076],{"class":40},[34,169208,152299],{"class":504},[34,169210,48],{"class":40},[34,169212,70763],{"class":504},[34,169214,53076],{"class":40},[34,169216,2420],{"class":44},[34,169218,48],{"class":40},[34,169220,152835],{"class":504},[34,169222,53076],{"class":40},[34,169224,2604],{"class":44},[34,169226,6581],{"class":40},[34,169228,169229,169231,169233,169235,169237,169239,169241,169243,169245,169247,169249,169251,169253],{"class":36,"line":182},[34,169230,149748],{"class":40},[34,169232,64318],{"class":504},[34,169234,53076],{"class":40},[34,169236,161094],{"class":504},[34,169238,48],{"class":40},[34,169240,70763],{"class":504},[34,169242,53076],{"class":40},[34,169244,2470],{"class":44},[34,169246,48],{"class":40},[34,169248,152835],{"class":504},[34,169250,53076],{"class":40},[34,169252,2673],{"class":44},[34,169254,6581],{"class":40},[34,169256,169257],{"class":36,"line":188},[34,169258,34887],{"class":40},[34,169260,169261],{"class":36,"line":518},[34,169262,1475],{"emptyLinePlaceholder":1474},[34,169264,169265],{"class":36,"line":524},[34,169266,1475],{"emptyLinePlaceholder":1474},[34,169268,169269,169271,169274],{"class":36,"line":530},[34,169270,33588],{"class":55},[34,169272,169273],{"class":3617}," filter_students",[34,169275,169276],{"class":40},"(students, condition):\n",[34,169278,169279,169281,169283],{"class":36,"line":624},[34,169280,162586],{"class":40},[34,169282,221],{"class":55},[34,169284,53477],{"class":40},[34,169286,169287,169289,169291,169293],{"class":36,"line":630},[34,169288,4854],{"class":55},[34,169290,153500],{"class":40},[34,169292,27689],{"class":55},[34,169294,153505],{"class":40},[34,169296,169297,169299],{"class":36,"line":636},[34,169298,4150],{"class":55},[34,169300,169301],{"class":40}," condition(student):\n",[34,169303,169304],{"class":36,"line":1513},[34,169305,169306],{"class":40},"            result.append(student)\n",[34,169308,169309,169311],{"class":36,"line":1519},[34,169310,5743],{"class":55},[34,169312,169068],{"class":40},[34,169314,169315],{"class":36,"line":3283},[34,169316,1475],{"emptyLinePlaceholder":1474},[34,169318,169319],{"class":36,"line":3297},[34,169320,1475],{"emptyLinePlaceholder":1474},[34,169322,169323,169325,169327,169330,169332,169335,169337,169339,169341,169343],{"class":36,"line":3302},[34,169324,167064],{"class":40},[34,169326,221],{"class":55},[34,169328,169329],{"class":40}," filter_students(students, ",[34,169331,168249],{"class":55},[34,169333,169334],{"class":40}," s: s[",[34,169336,152835],{"class":504},[34,169338,6095],{"class":40},[34,169340,3364],{"class":55},[34,169342,159200],{"class":44},[34,169344,101],{"class":40},[34,169346,169347,169350,169352,169354,169356,169358,169360,169362,169364,169366],{"class":36,"line":3308},[34,169348,169349],{"class":40},"excellent ",[34,169351,221],{"class":55},[34,169353,169329],{"class":40},[34,169355,168249],{"class":55},[34,169357,169334],{"class":40},[34,169359,152835],{"class":504},[34,169361,6095],{"class":40},[34,169363,3364],{"class":55},[34,169365,159151],{"class":44},[34,169367,101],{"class":40},[34,169369,169370,169373,169375,169377,169379,169381,169383,169385,169387,169389],{"class":36,"line":3328},[34,169371,169372],{"class":40},"under_age ",[34,169374,221],{"class":55},[34,169376,169329],{"class":40},[34,169378,168249],{"class":55},[34,169380,169334],{"class":40},[34,169382,70763],{"class":504},[34,169384,6095],{"class":40},[34,169386,2701],{"class":55},[34,169388,157648],{"class":44},[34,169390,101],{"class":40},[34,169392,169393],{"class":36,"line":3333},[34,169394,1475],{"emptyLinePlaceholder":1474},[34,169396,169397,169399],{"class":36,"line":3347},[34,169398,723],{"class":44},[34,169400,169401],{"class":40},"(passed)\n",[34,169403,169404,169406],{"class":36,"line":3352},[34,169405,723],{"class":44},[34,169407,169408],{"class":40},"(excellent)\n",[34,169410,169411,169413],{"class":36,"line":3381},[34,169412,723],{"class":44},[34,169414,169415],{"class":40},"(under_age)\n",[14,169417,169419],{"id":169418},"_715-易错点","7.15 易错点",[1772,169421,169422,169425,169433,169438,169449],{},[1775,169423,169424],{},"默认参数不要写可变对象。",[1775,169426,169427,169429,169430,169432],{},[31,169428,167895],{}," 是元组，",[31,169431,168010],{}," 是字典。",[1775,169434,169435,169437],{},[31,169436,168249],{}," 只适合简单表达式。",[1775,169439,169440,102381,169442,169444,169445,169448],{},[31,169441,75683],{},[31,169443,81688],{}," 的结果是迭代器，常用 ",[31,169446,169447],{},"list()"," 转换查看。",[1775,169450,169451],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169453,169455],{"id":169454},"_716-本章练习","7.16 本章练习",[1772,169457,169458,169465,169471,169476,169481],{},[1775,169459,169460,169461,169464],{},"写函数 ",[31,169462,169463],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[1775,169466,169460,169467,169470],{},[31,169468,169469],{},"print_user(**kwargs)","，输出用户所有字段。",[1775,169472,105729,169473,169475],{},[31,169474,168249],{}," 对学生列表按年龄排序。",[1775,169477,105729,169478,169480],{},[31,169479,81688],{}," 找出成绩不及格的学生。",[1775,169482,169483],{},"写一个装饰器，统计函数执行前后的提示信息。",[1711,169485,169486],{},"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":29,"searchDepth":165,"depth":165,"links":169488},[169489,169490,169491,169492,169493,169494,169498,169499,169500,169501,169506,169507,169508,169509,169510,169511],{"id":167347,"depth":165,"text":167348},{"id":167461,"depth":165,"text":167462},{"id":167550,"depth":165,"text":167551},{"id":167612,"depth":165,"text":167613},{"id":167758,"depth":165,"text":167759},{"id":167885,"depth":165,"text":167886,"children":169495},[169496,169497],{"id":167889,"depth":171,"text":167890},{"id":168004,"depth":171,"text":168005},{"id":168085,"depth":165,"text":168086},{"id":168243,"depth":165,"text":168244},{"id":168411,"depth":165,"text":168412},{"id":168493,"depth":165,"text":168494,"children":169502},[169503,169504,169505],{"id":168497,"depth":171,"text":168498},{"id":168568,"depth":171,"text":168569},{"id":168645,"depth":171,"text":168646},{"id":168770,"depth":165,"text":168771},{"id":168860,"depth":165,"text":168861},{"id":168991,"depth":165,"text":168992},{"id":169141,"depth":165,"text":169142},{"id":169418,"depth":165,"text":169419},{"id":169454,"depth":165,"text":169455},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167339,"description":1744},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169518,"title":169519,"body":169520,"description":1744,"extension":1745,"meta":172039,"navigation":1474,"path":172040,"seo":172041,"stem":172042,"__hash__":172043},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169521,"toc":172014},[169522,169525,169529,169532,169535,169566,169570,169574,169577,169604,169608,169611,169662,169665,169680,169683,169718,169722,169724,169748,169751,169811,169815,169819,169822,169879,169882,169902,169906,169909,169972,169976,169979,170035,170042,170066,170070,170073,170136,170140,170145,170196,170199,170203,170208,170275,170278,170360,170364,170369,170420,170423,170427,170430,170433,170441,170444,170490,170493,170539,170543,170549,170593,170596,170642,170645,170685,170688,170749,170753,170756,170846,170849,170991,170994,171061,171065,171068,171071,171212,171215,171293,171296,171472,171476,171478,171489,171491,171690,171694,171938,171942,171976,171980,172011],[10,169523,169519],{"id":169524},"_8-文件操作",[14,169526,169528],{"id":169527},"_81-文件操作的意义","8.1 文件操作的意义",[103,169530,169531],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[103,169533,169534],{},"常见文件类型：",[1772,169536,169537,169543,169549,169555,169561],{},[1775,169538,169539,169542],{},[31,169540,169541],{},".txt","：普通文本。",[1775,169544,169545,169548],{},[31,169546,169547],{},".csv","：表格文本。",[1775,169550,169551,169554],{},[31,169552,169553],{},".json","：结构化数据。",[1775,169556,169557,169560],{},[31,169558,169559],{},".log","：日志文件。",[1775,169562,169563,169565],{},[31,169564,147715],{},"：Python 源代码。",[14,169567,169569],{"id":169568},"_82-路径","8.2 路径",[19,169571,169573],{"id":169572},"_821-相对路径","8.2.1 相对路径",[103,169575,169576],{},"相对当前运行目录：",[24,169578,169580],{"className":26,"code":169579,"language":28,"meta":29,"style":29},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[31,169581,169582],{"__ignoreMap":29},[34,169583,169584,169586,169588,169590,169592,169594,169596,169598,169600,169602],{"class":36,"line":37},[34,169585,88551],{"class":44},[34,169587,286],{"class":40},[34,169589,148159],{"class":504},[34,169591,48],{"class":40},[34,169593,148164],{"class":504},[34,169595,48],{"class":40},[34,169597,148169],{"class":51},[34,169599,221],{"class":55},[34,169601,148174],{"class":504},[34,169603,101],{"class":40},[19,169605,169607],{"id":169606},"_822-绝对路径","8.2.2 绝对路径",[103,169609,169610],{},"从根目录或盘符开始：",[24,169612,169614],{"className":26,"code":169613,"language":28,"meta":29,"style":29},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[31,169615,169616,169639],{"__ignoreMap":29},[34,169617,169618,169620,169622,169625,169627,169629,169631,169633,169635,169637],{"class":36,"line":37},[34,169619,88551],{"class":44},[34,169621,286],{"class":40},[34,169623,169624],{"class":504},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[34,169626,48],{"class":40},[34,169628,148164],{"class":504},[34,169630,48],{"class":40},[34,169632,148169],{"class":51},[34,169634,221],{"class":55},[34,169636,148174],{"class":504},[34,169638,101],{"class":40},[34,169640,169641,169643,169645,169648,169650,169652,169654,169656,169658,169660],{"class":36,"line":165},[34,169642,88551],{"class":44},[34,169644,286],{"class":40},[34,169646,169647],{"class":504},"\"D:\u002Fdata\u002Fdata.txt\"",[34,169649,48],{"class":40},[34,169651,148164],{"class":504},[34,169653,48],{"class":40},[34,169655,148169],{"class":51},[34,169657,221],{"class":55},[34,169659,148174],{"class":504},[34,169661,101],{"class":40},[103,169663,169664],{},"Windows 路径建议写成：",[24,169666,169668],{"className":26,"code":169667,"language":28,"meta":29,"style":29},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[31,169669,169670],{"__ignoreMap":29},[34,169671,169672,169675,169677],{"class":36,"line":37},[34,169673,169674],{"class":40},"path ",[34,169676,221],{"class":55},[34,169678,169679],{"class":504}," \"D:\u002Fdata\u002Fdata.txt\"\n",[103,169681,169682],{},"或原始字符串：",[24,169684,169686],{"className":26,"code":169685,"language":28,"meta":29,"style":29},"path = r\"D:\\data\\data.txt\"\n",[31,169687,169688],{"__ignoreMap":29},[34,169689,169690,169692,169694,169696,169698,169701,169704,169707,169709,169711,169713,169716],{"class":36,"line":37},[34,169691,169674],{"class":40},[34,169693,221],{"class":55},[34,169695,18767],{"class":55},[34,169697,2058],{"class":504},[34,169699,169700],{"class":49616},"D:",[34,169702,169703],{"class":44},"\\d",[34,169705,169706],{"class":49616},"ata",[34,169708,169703],{"class":44},[34,169710,169706],{"class":49616},[34,169712,2353],{"class":44},[34,169714,169715],{"class":49616},"txt",[34,169717,26779],{"class":504},[14,169719,169721],{"id":169720},"_83-open函数","8.3 open函数",[103,169723,6832],{},[24,169725,169727],{"className":26,"code":169726,"language":28,"meta":29,"style":29},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[31,169728,169729],{"__ignoreMap":29},[34,169730,169731,169733,169735,169737,169740,169742,169744,169746],{"class":36,"line":37},[34,169732,46993],{"class":51},[34,169734,56],{"class":55},[34,169736,148154],{"class":44},[34,169738,169739],{"class":40},"(文件路径, 打开模式, ",[34,169741,148169],{"class":51},[34,169743,221],{"class":55},[34,169745,148174],{"class":504},[34,169747,101],{"class":40},[103,169749,169750],{},"常见模式：",[1948,169752,169753,169762],{},[1951,169754,169755],{},[1954,169756,169757,169760],{},[1957,169758,169759],{},"模式",[1957,169761,27515],{},[1994,169763,169764,169773,169782,169791,169801],{},[1954,169765,169766,169770],{},[1999,169767,169768],{},[31,169769,2465],{},[1999,169771,169772],{},"只读，文件不存在会报错",[1954,169774,169775,169779],{},[1999,169776,169777],{},[31,169778,2588],{},[1999,169780,169781],{},"只写，文件不存在会创建，存在会清空",[1954,169783,169784,169788],{},[1999,169785,169786],{},[31,169787,236],{},[1999,169789,169790],{},"追加，文件不存在会创建",[1954,169792,169793,169798],{},[1999,169794,169795],{},[31,169796,169797],{},"rb",[1999,169799,169800],{},"二进制只读",[1954,169802,169803,169808],{},[1999,169804,169805],{},[31,169806,169807],{},"wb",[1999,169809,169810],{},"二进制只写",[14,169812,169814],{"id":169813},"_84-读取文件","8.4 读取文件",[19,169816,169818],{"id":169817},"_841-read","8.4.1 read",[103,169820,169821],{},"一次读取全部内容：",[24,169823,169825],{"className":26,"code":169824,"language":28,"meta":29,"style":29},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[31,169826,169827,169853,169865,169872],{"__ignoreMap":29},[34,169828,169829,169831,169833,169835,169837,169839,169841,169843,169845,169847,169849,169851],{"class":36,"line":37},[34,169830,46993],{"class":51},[34,169832,56],{"class":55},[34,169834,148154],{"class":44},[34,169836,286],{"class":40},[34,169838,148159],{"class":504},[34,169840,48],{"class":40},[34,169842,148164],{"class":504},[34,169844,48],{"class":40},[34,169846,148169],{"class":51},[34,169848,221],{"class":55},[34,169850,148174],{"class":504},[34,169852,101],{"class":40},[34,169854,169855,169858,169860,169862],{"class":36,"line":165},[34,169856,169857],{"class":40},"content ",[34,169859,221],{"class":55},[34,169861,149516],{"class":51},[34,169863,169864],{"class":40},".read()\n",[34,169866,169867,169869],{"class":36,"line":171},[34,169868,723],{"class":44},[34,169870,169871],{"class":40},"(content)\n",[34,169873,169874,169876],{"class":36,"line":182},[34,169875,46993],{"class":51},[34,169877,169878],{"class":40},".close()\n",[103,169880,169881],{},"可以指定读取字符数：",[24,169883,169885],{"className":26,"code":169884,"language":28,"meta":29,"style":29},"content = file.read(10)\n",[31,169886,169887],{"__ignoreMap":29},[34,169888,169889,169891,169893,169895,169898,169900],{"class":36,"line":37},[34,169890,169857],{"class":40},[34,169892,221],{"class":55},[34,169894,149516],{"class":51},[34,169896,169897],{"class":40},".read(",[34,169899,410],{"class":44},[34,169901,101],{"class":40},[19,169903,169905],{"id":169904},"_842-readline","8.4.2 readline",[103,169907,169908],{},"一次读取一行：",[24,169910,169912],{"className":26,"code":169911,"language":28,"meta":29,"style":29},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[31,169913,169914,169940,169944,169955,169962,169966],{"__ignoreMap":29},[34,169915,169916,169918,169920,169922,169924,169926,169928,169930,169932,169934,169936,169938],{"class":36,"line":37},[34,169917,46993],{"class":51},[34,169919,56],{"class":55},[34,169921,148154],{"class":44},[34,169923,286],{"class":40},[34,169925,148159],{"class":504},[34,169927,48],{"class":40},[34,169929,148164],{"class":504},[34,169931,48],{"class":40},[34,169933,148169],{"class":51},[34,169935,221],{"class":55},[34,169937,148174],{"class":504},[34,169939,101],{"class":40},[34,169941,169942],{"class":36,"line":165},[34,169943,1475],{"emptyLinePlaceholder":1474},[34,169945,169946,169948,169950,169952],{"class":36,"line":171},[34,169947,148615],{"class":40},[34,169949,221],{"class":55},[34,169951,149516],{"class":51},[34,169953,169954],{"class":40},".readline()\n",[34,169956,169957,169959],{"class":36,"line":182},[34,169958,723],{"class":44},[34,169960,169961],{"class":40},"(line)\n",[34,169963,169964],{"class":36,"line":188},[34,169965,1475],{"emptyLinePlaceholder":1474},[34,169967,169968,169970],{"class":36,"line":518},[34,169969,46993],{"class":51},[34,169971,169878],{"class":40},[19,169973,169975],{"id":169974},"_843-readlines","8.4.3 readlines",[103,169977,169978],{},"读取所有行，返回列表：",[24,169980,169982],{"className":26,"code":169981,"language":28,"meta":29,"style":29},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[31,169983,169984,170010,170022,170029],{"__ignoreMap":29},[34,169985,169986,169988,169990,169992,169994,169996,169998,170000,170002,170004,170006,170008],{"class":36,"line":37},[34,169987,46993],{"class":51},[34,169989,56],{"class":55},[34,169991,148154],{"class":44},[34,169993,286],{"class":40},[34,169995,148159],{"class":504},[34,169997,48],{"class":40},[34,169999,148164],{"class":504},[34,170001,48],{"class":40},[34,170003,148169],{"class":51},[34,170005,221],{"class":55},[34,170007,148174],{"class":504},[34,170009,101],{"class":40},[34,170011,170012,170015,170017,170019],{"class":36,"line":165},[34,170013,170014],{"class":40},"lines ",[34,170016,221],{"class":55},[34,170018,149516],{"class":51},[34,170020,170021],{"class":40},".readlines()\n",[34,170023,170024,170026],{"class":36,"line":171},[34,170025,723],{"class":44},[34,170027,170028],{"class":40},"(lines)\n",[34,170030,170031,170033],{"class":36,"line":182},[34,170032,46993],{"class":51},[34,170034,169878],{"class":40},[103,170036,170037,170038,170041],{},"每一行通常带有换行符，可以用 ",[31,170039,170040],{},"strip()"," 去掉：",[24,170043,170045],{"className":26,"code":170044,"language":28,"meta":29,"style":29},"for line in lines:\n    print(line.strip())\n",[31,170046,170047,170059],{"__ignoreMap":29},[34,170048,170049,170051,170054,170056],{"class":36,"line":37},[34,170050,4678],{"class":55},[34,170052,170053],{"class":40}," line ",[34,170055,27689],{"class":55},[34,170057,170058],{"class":40}," lines:\n",[34,170060,170061,170063],{"class":36,"line":165},[34,170062,32941],{"class":44},[34,170064,170065],{"class":40},"(line.strip())\n",[19,170067,170069],{"id":170068},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[103,170071,170072],{},"推荐读取大文件时使用：",[24,170074,170076],{"className":26,"code":170075,"language":28,"meta":29,"style":29},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[31,170077,170078,170104,170108,170120,170126,170130],{"__ignoreMap":29},[34,170079,170080,170082,170084,170086,170088,170090,170092,170094,170096,170098,170100,170102],{"class":36,"line":37},[34,170081,46993],{"class":51},[34,170083,56],{"class":55},[34,170085,148154],{"class":44},[34,170087,286],{"class":40},[34,170089,148159],{"class":504},[34,170091,48],{"class":40},[34,170093,148164],{"class":504},[34,170095,48],{"class":40},[34,170097,148169],{"class":51},[34,170099,221],{"class":55},[34,170101,148174],{"class":504},[34,170103,101],{"class":40},[34,170105,170106],{"class":36,"line":165},[34,170107,1475],{"emptyLinePlaceholder":1474},[34,170109,170110,170112,170114,170116,170118],{"class":36,"line":171},[34,170111,4678],{"class":55},[34,170113,170053],{"class":40},[34,170115,27689],{"class":55},[34,170117,149516],{"class":51},[34,170119,5392],{"class":40},[34,170121,170122,170124],{"class":36,"line":182},[34,170123,32941],{"class":44},[34,170125,170065],{"class":40},[34,170127,170128],{"class":36,"line":188},[34,170129,1475],{"emptyLinePlaceholder":1474},[34,170131,170132,170134],{"class":36,"line":518},[34,170133,46993],{"class":51},[34,170135,169878],{"class":40},[14,170137,170139],{"id":170138},"_85-with语句","8.5 with语句",[103,170141,170142,170144],{},[31,170143,109196],{}," 会自动关闭文件，推荐使用。",[24,170146,170148],{"className":26,"code":170147,"language":28,"meta":29,"style":29},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[31,170149,170150,170180,170190],{"__ignoreMap":29},[34,170151,170152,170154,170156,170158,170160,170162,170164,170166,170168,170170,170172,170174,170176,170178],{"class":36,"line":37},[34,170153,109196],{"class":55},[34,170155,148154],{"class":44},[34,170157,286],{"class":40},[34,170159,148159],{"class":504},[34,170161,48],{"class":40},[34,170163,148164],{"class":504},[34,170165,48],{"class":40},[34,170167,148169],{"class":51},[34,170169,221],{"class":55},[34,170171,148174],{"class":504},[34,170173,372],{"class":40},[34,170175,33025],{"class":55},[34,170177,149516],{"class":51},[34,170179,5392],{"class":40},[34,170181,170182,170184,170186,170188],{"class":36,"line":165},[34,170183,148186],{"class":40},[34,170185,221],{"class":55},[34,170187,149516],{"class":51},[34,170189,169864],{"class":40},[34,170191,170192,170194],{"class":36,"line":171},[34,170193,32941],{"class":44},[34,170195,169871],{"class":40},[103,170197,170198],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170200,170202],{"id":170201},"_86-写入文件","8.6 写入文件",[103,170204,170205,170207],{},[31,170206,2588],{}," 模式会清空原文件。",[24,170209,170211],{"className":26,"code":170210,"language":28,"meta":29,"style":29},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[31,170212,170213,170243,170260],{"__ignoreMap":29},[34,170214,170215,170217,170219,170221,170223,170225,170227,170229,170231,170233,170235,170237,170239,170241],{"class":36,"line":37},[34,170216,109196],{"class":55},[34,170218,148154],{"class":44},[34,170220,286],{"class":40},[34,170222,148159],{"class":504},[34,170224,48],{"class":40},[34,170226,153339],{"class":504},[34,170228,48],{"class":40},[34,170230,148169],{"class":51},[34,170232,221],{"class":55},[34,170234,148174],{"class":504},[34,170236,372],{"class":40},[34,170238,33025],{"class":55},[34,170240,149516],{"class":51},[34,170242,5392],{"class":40},[34,170244,170245,170248,170251,170254,170256,170258],{"class":36,"line":165},[34,170246,170247],{"class":51},"    file",[34,170249,170250],{"class":40},".write(",[34,170252,170253],{"class":504},"\"hello",[34,170255,157888],{"class":44},[34,170257,2058],{"class":504},[34,170259,101],{"class":40},[34,170261,170262,170264,170266,170269,170271,170273],{"class":36,"line":171},[34,170263,170247],{"class":51},[34,170265,170250],{"class":40},[34,170267,170268],{"class":504},"\"python",[34,170270,157888],{"class":44},[34,170272,2058],{"class":504},[34,170274,101],{"class":40},[103,170276,170277],{},"写入多行：",[24,170279,170281],{"className":26,"code":170280,"language":28,"meta":29,"style":29},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[31,170282,170283,170318,170322,170353],{"__ignoreMap":29},[34,170284,170285,170287,170289,170291,170294,170296,170298,170300,170303,170305,170307,170309,170312,170314,170316],{"class":36,"line":37},[34,170286,170014],{"class":40},[34,170288,221],{"class":55},[34,170290,53865],{"class":40},[34,170292,170293],{"class":504},"\"小明,18",[34,170295,157888],{"class":44},[34,170297,2058],{"class":504},[34,170299,48],{"class":40},[34,170301,170302],{"class":504},"\"小红,17",[34,170304,157888],{"class":44},[34,170306,2058],{"class":504},[34,170308,48],{"class":40},[34,170310,170311],{"class":504},"\"小刚,19",[34,170313,157888],{"class":44},[34,170315,2058],{"class":504},[34,170317,34887],{"class":40},[34,170319,170320],{"class":36,"line":165},[34,170321,1475],{"emptyLinePlaceholder":1474},[34,170323,170324,170326,170328,170330,170333,170335,170337,170339,170341,170343,170345,170347,170349,170351],{"class":36,"line":171},[34,170325,109196],{"class":55},[34,170327,148154],{"class":44},[34,170329,286],{"class":40},[34,170331,170332],{"class":504},"\"students.txt\"",[34,170334,48],{"class":40},[34,170336,153339],{"class":504},[34,170338,48],{"class":40},[34,170340,148169],{"class":51},[34,170342,221],{"class":55},[34,170344,148174],{"class":504},[34,170346,372],{"class":40},[34,170348,33025],{"class":55},[34,170350,149516],{"class":51},[34,170352,5392],{"class":40},[34,170354,170355,170357],{"class":36,"line":182},[34,170356,170247],{"class":51},[34,170358,170359],{"class":40},".writelines(lines)\n",[14,170361,170363],{"id":170362},"_87-追加文件","8.7 追加文件",[103,170365,170366,170368],{},[31,170367,236],{}," 模式不会清空原内容，而是在末尾追加。",[24,170370,170372],{"className":26,"code":170371,"language":28,"meta":29,"style":29},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[31,170373,170374,170405],{"__ignoreMap":29},[34,170375,170376,170378,170380,170382,170385,170387,170389,170391,170393,170395,170397,170399,170401,170403],{"class":36,"line":37},[34,170377,109196],{"class":55},[34,170379,148154],{"class":44},[34,170381,286],{"class":40},[34,170383,170384],{"class":504},"\"log.txt\"",[34,170386,48],{"class":40},[34,170388,166688],{"class":504},[34,170390,48],{"class":40},[34,170392,148169],{"class":51},[34,170394,221],{"class":55},[34,170396,148174],{"class":504},[34,170398,372],{"class":40},[34,170400,33025],{"class":55},[34,170402,149516],{"class":51},[34,170404,5392],{"class":40},[34,170406,170407,170409,170411,170414,170416,170418],{"class":36,"line":165},[34,170408,170247],{"class":51},[34,170410,170250],{"class":40},[34,170412,170413],{"class":504},"\"程序启动",[34,170415,157888],{"class":44},[34,170417,2058],{"class":504},[34,170419,101],{"class":40},[103,170421,170422],{},"日志类文件常用追加模式。",[14,170424,170426],{"id":170425},"_88-文件编码","8.8 文件编码",[103,170428,170429],{},"编码决定文字如何保存为字节。",[103,170431,170432],{},"常见编码：",[1772,170434,170435,170438],{},[1775,170436,170437],{},"UTF-8：推荐。",[1775,170439,170440],{},"GBK：部分 Windows 中文文件常见。",[103,170442,170443],{},"读取文件乱码时，可以尝试：",[24,170445,170447],{"className":26,"code":170446,"language":28,"meta":29,"style":29},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[31,170448,170449,170480],{"__ignoreMap":29},[34,170450,170451,170453,170455,170457,170459,170461,170463,170465,170467,170469,170472,170474,170476,170478],{"class":36,"line":37},[34,170452,109196],{"class":55},[34,170454,148154],{"class":44},[34,170456,286],{"class":40},[34,170458,148159],{"class":504},[34,170460,48],{"class":40},[34,170462,148164],{"class":504},[34,170464,48],{"class":40},[34,170466,148169],{"class":51},[34,170468,221],{"class":55},[34,170470,170471],{"class":504},"\"gbk\"",[34,170473,372],{"class":40},[34,170475,33025],{"class":55},[34,170477,149516],{"class":51},[34,170479,5392],{"class":40},[34,170481,170482,170484,170486,170488],{"class":36,"line":165},[34,170483,148186],{"class":40},[34,170485,221],{"class":55},[34,170487,149516],{"class":51},[34,170489,169864],{"class":40},[103,170491,170492],{},"写文件时建议统一 UTF-8：",[24,170494,170496],{"className":26,"code":170495,"language":28,"meta":29,"style":29},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[31,170497,170498,170528],{"__ignoreMap":29},[34,170499,170500,170502,170504,170506,170508,170510,170512,170514,170516,170518,170520,170522,170524,170526],{"class":36,"line":37},[34,170501,109196],{"class":55},[34,170503,148154],{"class":44},[34,170505,286],{"class":40},[34,170507,148159],{"class":504},[34,170509,48],{"class":40},[34,170511,153339],{"class":504},[34,170513,48],{"class":40},[34,170515,148169],{"class":51},[34,170517,221],{"class":55},[34,170519,148174],{"class":504},[34,170521,372],{"class":40},[34,170523,33025],{"class":55},[34,170525,149516],{"class":51},[34,170527,5392],{"class":40},[34,170529,170530,170532,170534,170537],{"class":36,"line":165},[34,170531,170247],{"class":51},[34,170533,170250],{"class":40},[34,170535,170536],{"class":504},"\"中文内容\"",[34,170538,101],{"class":40},[14,170540,170542],{"id":170541},"_89-pathlib","8.9 pathlib",[103,170544,170545,170548],{},[31,170546,170547],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[24,170550,170552],{"className":26,"code":170551,"language":28,"meta":29,"style":29},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[31,170553,170554,170564,170568,170586],{"__ignoreMap":29},[34,170555,170556,170558,170560,170562],{"class":36,"line":37},[34,170557,32379],{"class":55},[34,170559,109674],{"class":40},[34,170561,32036],{"class":55},[34,170563,109679],{"class":40},[34,170565,170566],{"class":36,"line":165},[34,170567,1475],{"emptyLinePlaceholder":1474},[34,170569,170570,170572,170574,170576,170579,170581,170583],{"class":36,"line":171},[34,170571,169674],{"class":40},[34,170573,221],{"class":55},[34,170575,109908],{"class":40},[34,170577,170578],{"class":504},"\"data\"",[34,170580,372],{"class":40},[34,170582,2379],{"class":55},[34,170584,170585],{"class":504}," \"students.txt\"\n",[34,170587,170588,170590],{"class":36,"line":182},[34,170589,723],{"class":44},[34,170591,170592],{"class":40},"(path)\n",[103,170594,170595],{},"创建目录：",[24,170597,170599],{"className":26,"code":170598,"language":28,"meta":29,"style":29},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[31,170600,170601,170611,170615,170628],{"__ignoreMap":29},[34,170602,170603,170605,170607,170609],{"class":36,"line":37},[34,170604,32379],{"class":55},[34,170606,109674],{"class":40},[34,170608,32036],{"class":55},[34,170610,109679],{"class":40},[34,170612,170613],{"class":36,"line":165},[34,170614,1475],{"emptyLinePlaceholder":1474},[34,170616,170617,170620,170622,170624,170626],{"class":36,"line":171},[34,170618,170619],{"class":40},"data_dir ",[34,170621,221],{"class":55},[34,170623,109908],{"class":40},[34,170625,170578],{"class":504},[34,170627,101],{"class":40},[34,170629,170630,170633,170636,170638,170640],{"class":36,"line":182},[34,170631,170632],{"class":40},"data_dir.mkdir(",[34,170634,170635],{"class":51},"exist_ok",[34,170637,221],{"class":55},[34,170639,33118],{"class":44},[34,170641,101],{"class":40},[103,170643,170644],{},"判断文件是否存在：",[24,170646,170648],{"className":26,"code":170647,"language":28,"meta":29,"style":29},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[31,170649,170650,170663,170667,170674],{"__ignoreMap":29},[34,170651,170652,170654,170656,170658,170661],{"class":36,"line":37},[34,170653,169674],{"class":40},[34,170655,221],{"class":55},[34,170657,109908],{"class":40},[34,170659,170660],{"class":504},"\"data\u002Fstudents.txt\"",[34,170662,101],{"class":40},[34,170664,170665],{"class":36,"line":165},[34,170666,1475],{"emptyLinePlaceholder":1474},[34,170668,170669,170671],{"class":36,"line":171},[34,170670,3189],{"class":55},[34,170672,170673],{"class":40}," path.exists():\n",[34,170675,170676,170678,170680,170683],{"class":36,"line":182},[34,170677,32941],{"class":44},[34,170679,286],{"class":40},[34,170681,170682],{"class":504},"\"文件存在\"",[34,170684,101],{"class":40},[103,170686,170687],{},"读写文本：",[24,170689,170691],{"className":26,"code":170690,"language":28,"meta":29,"style":29},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[31,170692,170693,170705,170709,170726,170743],{"__ignoreMap":29},[34,170694,170695,170697,170699,170701,170703],{"class":36,"line":37},[34,170696,169674],{"class":40},[34,170698,221],{"class":55},[34,170700,109908],{"class":40},[34,170702,148159],{"class":504},[34,170704,101],{"class":40},[34,170706,170707],{"class":36,"line":165},[34,170708,1475],{"emptyLinePlaceholder":1474},[34,170710,170711,170714,170716,170718,170720,170722,170724],{"class":36,"line":171},[34,170712,170713],{"class":40},"path.write_text(",[34,170715,147239],{"class":504},[34,170717,48],{"class":40},[34,170719,148169],{"class":51},[34,170721,221],{"class":55},[34,170723,148174],{"class":504},[34,170725,101],{"class":40},[34,170727,170728,170730,170732,170735,170737,170739,170741],{"class":36,"line":182},[34,170729,169857],{"class":40},[34,170731,221],{"class":55},[34,170733,170734],{"class":40}," path.read_text(",[34,170736,148169],{"class":51},[34,170738,221],{"class":55},[34,170740,148174],{"class":504},[34,170742,101],{"class":40},[34,170744,170745,170747],{"class":36,"line":188},[34,170746,723],{"class":44},[34,170748,169871],{"class":40},[14,170750,170752],{"id":170751},"_810-json文件","8.10 JSON文件",[103,170754,170755],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[24,170757,170759],{"className":26,"code":170758,"language":28,"meta":29,"style":29},"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",[31,170760,170761,170767,170771,170779,170789,170799,170807,170811,170815,170840],{"__ignoreMap":29},[34,170762,170763,170765],{"class":36,"line":37},[34,170764,32036],{"class":55},[34,170766,148454],{"class":40},[34,170768,170769],{"class":36,"line":165},[34,170770,1475],{"emptyLinePlaceholder":1474},[34,170772,170773,170775,170777],{"class":36,"line":171},[34,170774,150844],{"class":40},[34,170776,221],{"class":55},[34,170778,17218],{"class":40},[34,170780,170781,170783,170785,170787],{"class":36,"line":182},[34,170782,148383],{"class":504},[34,170784,53076],{"class":40},[34,170786,151251],{"class":504},[34,170788,33108],{"class":40},[34,170790,170791,170793,170795,170797],{"class":36,"line":188},[34,170792,165900],{"class":504},[34,170794,53076],{"class":40},[34,170796,2445],{"class":44},[34,170798,33108],{"class":40},[34,170800,170801,170803,170805],{"class":36,"line":518},[34,170802,165911],{"class":504},[34,170804,53076],{"class":40},[34,170806,165916],{"class":44},[34,170808,170809],{"class":36,"line":524},[34,170810,3223],{"class":40},[34,170812,170813],{"class":36,"line":530},[34,170814,1475],{"emptyLinePlaceholder":1474},[34,170816,170817,170819,170821,170824,170826,170828,170830,170832,170834,170836,170838],{"class":36,"line":624},[34,170818,157807],{"class":40},[34,170820,221],{"class":55},[34,170822,170823],{"class":40}," json.dumps(student, ",[34,170825,148500],{"class":51},[34,170827,221],{"class":55},[34,170829,35628],{"class":44},[34,170831,48],{"class":40},[34,170833,153375],{"class":51},[34,170835,221],{"class":55},[34,170837,332],{"class":44},[34,170839,101],{"class":40},[34,170841,170842,170844],{"class":36,"line":630},[34,170843,723],{"class":44},[34,170845,165434],{"class":40},[103,170847,170848],{},"写入 JSON 文件：",[24,170850,170852],{"className":26,"code":170851,"language":28,"meta":29,"style":29},"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",[31,170853,170854,170860,170864,170872,170900,170928,170932,170936,170966],{"__ignoreMap":29},[34,170855,170856,170858],{"class":36,"line":37},[34,170857,32036],{"class":55},[34,170859,148454],{"class":40},[34,170861,170862],{"class":36,"line":165},[34,170863,1475],{"emptyLinePlaceholder":1474},[34,170865,170866,170868,170870],{"class":36,"line":171},[34,170867,161079],{"class":40},[34,170869,221],{"class":55},[34,170871,57086],{"class":40},[34,170873,170874,170876,170878,170880,170882,170884,170886,170888,170890,170892,170894,170896,170898],{"class":36,"line":182},[34,170875,149748],{"class":40},[34,170877,64318],{"class":504},[34,170879,53076],{"class":40},[34,170881,151251],{"class":504},[34,170883,48],{"class":40},[34,170885,70763],{"class":504},[34,170887,53076],{"class":40},[34,170889,2445],{"class":44},[34,170891,48],{"class":40},[34,170893,152835],{"class":504},[34,170895,53076],{"class":40},[34,170897,2780],{"class":44},[34,170899,6581],{"class":40},[34,170901,170902,170904,170906,170908,170910,170912,170914,170916,170918,170920,170922,170924,170926],{"class":36,"line":188},[34,170903,149748],{"class":40},[34,170905,64318],{"class":504},[34,170907,53076],{"class":40},[34,170909,152299],{"class":504},[34,170911,48],{"class":40},[34,170913,70763],{"class":504},[34,170915,53076],{"class":40},[34,170917,2420],{"class":44},[34,170919,48],{"class":40},[34,170921,152835],{"class":504},[34,170923,53076],{"class":40},[34,170925,2604],{"class":44},[34,170927,6581],{"class":40},[34,170929,170930],{"class":36,"line":518},[34,170931,34887],{"class":40},[34,170933,170934],{"class":36,"line":524},[34,170935,1475],{"emptyLinePlaceholder":1474},[34,170937,170938,170940,170942,170944,170946,170948,170950,170952,170954,170956,170958,170960,170962,170964],{"class":36,"line":530},[34,170939,109196],{"class":55},[34,170941,148154],{"class":44},[34,170943,286],{"class":40},[34,170945,153194],{"class":504},[34,170947,48],{"class":40},[34,170949,153339],{"class":504},[34,170951,48],{"class":40},[34,170953,148169],{"class":51},[34,170955,221],{"class":55},[34,170957,148174],{"class":504},[34,170959,372],{"class":40},[34,170961,33025],{"class":55},[34,170963,149516],{"class":51},[34,170965,5392],{"class":40},[34,170967,170968,170971,170973,170975,170977,170979,170981,170983,170985,170987,170989],{"class":36,"line":624},[34,170969,170970],{"class":40},"    json.dump(students, ",[34,170972,46993],{"class":51},[34,170974,48],{"class":40},[34,170976,148500],{"class":51},[34,170978,221],{"class":55},[34,170980,35628],{"class":44},[34,170982,48],{"class":40},[34,170984,153375],{"class":51},[34,170986,221],{"class":55},[34,170988,332],{"class":44},[34,170990,101],{"class":40},[103,170992,170993],{},"读取 JSON 文件：",[24,170995,170997],{"className":26,"code":170996,"language":28,"meta":29,"style":29},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[31,170998,170999,171005,171009,171039,171051,171055],{"__ignoreMap":29},[34,171000,171001,171003],{"class":36,"line":37},[34,171002,32036],{"class":55},[34,171004,148454],{"class":40},[34,171006,171007],{"class":36,"line":165},[34,171008,1475],{"emptyLinePlaceholder":1474},[34,171010,171011,171013,171015,171017,171019,171021,171023,171025,171027,171029,171031,171033,171035,171037],{"class":36,"line":171},[34,171012,109196],{"class":55},[34,171014,148154],{"class":44},[34,171016,286],{"class":40},[34,171018,153194],{"class":504},[34,171020,48],{"class":40},[34,171022,148164],{"class":504},[34,171024,48],{"class":40},[34,171026,148169],{"class":51},[34,171028,221],{"class":55},[34,171030,148174],{"class":504},[34,171032,372],{"class":40},[34,171034,33025],{"class":55},[34,171036,149516],{"class":51},[34,171038,5392],{"class":40},[34,171040,171041,171043,171045,171047,171049],{"class":36,"line":182},[34,171042,154400],{"class":40},[34,171044,221],{"class":55},[34,171046,149527],{"class":40},[34,171048,46993],{"class":51},[34,171050,101],{"class":40},[34,171052,171053],{"class":36,"line":188},[34,171054,1475],{"emptyLinePlaceholder":1474},[34,171056,171057,171059],{"class":36,"line":518},[34,171058,723],{"class":44},[34,171060,166358],{"class":40},[14,171062,171064],{"id":171063},"_811-csv文件","8.11 CSV文件",[103,171066,171067],{},"CSV 是逗号分隔值，常用于表格数据。",[103,171069,171070],{},"写入 CSV：",[24,171072,171074],{"className":26,"code":171073,"language":28,"meta":29,"style":29},"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",[31,171075,171076,171083,171087,171095,171113,171129,171145,171149,171153,171193,171207],{"__ignoreMap":29},[34,171077,171078,171080],{"class":36,"line":37},[34,171079,32036],{"class":55},[34,171081,171082],{"class":40}," csv\n",[34,171084,171085],{"class":36,"line":165},[34,171086,1475],{"emptyLinePlaceholder":1474},[34,171088,171089,171091,171093],{"class":36,"line":171},[34,171090,161079],{"class":40},[34,171092,221],{"class":55},[34,171094,57086],{"class":40},[34,171096,171097,171100,171102,171104,171106,171108,171111],{"class":36,"line":182},[34,171098,171099],{"class":40},"    [",[34,171101,74738],{"class":504},[34,171103,48],{"class":40},[34,171105,74771],{"class":504},[34,171107,48],{"class":40},[34,171109,171110],{"class":504},"\"成绩\"",[34,171112,89472],{"class":40},[34,171114,171115,171117,171119,171121,171123,171125,171127],{"class":36,"line":188},[34,171116,171099],{"class":40},[34,171118,151251],{"class":504},[34,171120,48],{"class":40},[34,171122,2445],{"class":44},[34,171124,48],{"class":40},[34,171126,2780],{"class":44},[34,171128,89472],{"class":40},[34,171130,171131,171133,171135,171137,171139,171141,171143],{"class":36,"line":518},[34,171132,171099],{"class":40},[34,171134,152299],{"class":504},[34,171136,48],{"class":40},[34,171138,2420],{"class":44},[34,171140,48],{"class":40},[34,171142,2604],{"class":44},[34,171144,89472],{"class":40},[34,171146,171147],{"class":36,"line":524},[34,171148,34887],{"class":40},[34,171150,171151],{"class":36,"line":530},[34,171152,1475],{"emptyLinePlaceholder":1474},[34,171154,171155,171157,171159,171161,171164,171166,171168,171170,171172,171174,171176,171178,171181,171183,171185,171187,171189,171191],{"class":36,"line":624},[34,171156,109196],{"class":55},[34,171158,148154],{"class":44},[34,171160,286],{"class":40},[34,171162,171163],{"class":504},"\"students.csv\"",[34,171165,48],{"class":40},[34,171167,153339],{"class":504},[34,171169,48],{"class":40},[34,171171,148169],{"class":51},[34,171173,221],{"class":55},[34,171175,148174],{"class":504},[34,171177,48],{"class":40},[34,171179,171180],{"class":51},"newline",[34,171182,221],{"class":55},[34,171184,9302],{"class":504},[34,171186,372],{"class":40},[34,171188,33025],{"class":55},[34,171190,149516],{"class":51},[34,171192,5392],{"class":40},[34,171194,171195,171198,171200,171203,171205],{"class":36,"line":630},[34,171196,171197],{"class":40},"    writer ",[34,171199,221],{"class":55},[34,171201,171202],{"class":40}," csv.writer(",[34,171204,46993],{"class":51},[34,171206,101],{"class":40},[34,171208,171209],{"class":36,"line":636},[34,171210,171211],{"class":40},"    writer.writerows(students)\n",[103,171213,171214],{},"读取 CSV：",[24,171216,171218],{"className":26,"code":171217,"language":28,"meta":29,"style":29},"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",[31,171219,171220,171226,171230,171260,171274,171286],{"__ignoreMap":29},[34,171221,171222,171224],{"class":36,"line":37},[34,171223,32036],{"class":55},[34,171225,171082],{"class":40},[34,171227,171228],{"class":36,"line":165},[34,171229,1475],{"emptyLinePlaceholder":1474},[34,171231,171232,171234,171236,171238,171240,171242,171244,171246,171248,171250,171252,171254,171256,171258],{"class":36,"line":171},[34,171233,109196],{"class":55},[34,171235,148154],{"class":44},[34,171237,286],{"class":40},[34,171239,171163],{"class":504},[34,171241,48],{"class":40},[34,171243,148164],{"class":504},[34,171245,48],{"class":40},[34,171247,148169],{"class":51},[34,171249,221],{"class":55},[34,171251,148174],{"class":504},[34,171253,372],{"class":40},[34,171255,33025],{"class":55},[34,171257,149516],{"class":51},[34,171259,5392],{"class":40},[34,171261,171262,171265,171267,171270,171272],{"class":36,"line":182},[34,171263,171264],{"class":40},"    reader ",[34,171266,221],{"class":55},[34,171268,171269],{"class":40}," csv.reader(",[34,171271,46993],{"class":51},[34,171273,101],{"class":40},[34,171275,171276,171278,171281,171283],{"class":36,"line":188},[34,171277,4854],{"class":55},[34,171279,171280],{"class":40}," row ",[34,171282,27689],{"class":55},[34,171284,171285],{"class":40}," reader:\n",[34,171287,171288,171290],{"class":36,"line":518},[34,171289,34092],{"class":44},[34,171291,171292],{"class":40},"(row)\n",[103,171294,171295],{},"使用字典写入：",[24,171297,171299],{"className":26,"code":171298,"language":28,"meta":29,"style":29},"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",[31,171300,171301,171307,171311,171319,171347,171375,171379,171383,171421,171442,171463,171468],{"__ignoreMap":29},[34,171302,171303,171305],{"class":36,"line":37},[34,171304,32036],{"class":55},[34,171306,171082],{"class":40},[34,171308,171309],{"class":36,"line":165},[34,171310,1475],{"emptyLinePlaceholder":1474},[34,171312,171313,171315,171317],{"class":36,"line":171},[34,171314,161079],{"class":40},[34,171316,221],{"class":55},[34,171318,57086],{"class":40},[34,171320,171321,171323,171325,171327,171329,171331,171333,171335,171337,171339,171341,171343,171345],{"class":36,"line":182},[34,171322,149748],{"class":40},[34,171324,64318],{"class":504},[34,171326,53076],{"class":40},[34,171328,151251],{"class":504},[34,171330,48],{"class":40},[34,171332,70763],{"class":504},[34,171334,53076],{"class":40},[34,171336,2445],{"class":44},[34,171338,48],{"class":40},[34,171340,152835],{"class":504},[34,171342,53076],{"class":40},[34,171344,2780],{"class":44},[34,171346,6581],{"class":40},[34,171348,171349,171351,171353,171355,171357,171359,171361,171363,171365,171367,171369,171371,171373],{"class":36,"line":188},[34,171350,149748],{"class":40},[34,171352,64318],{"class":504},[34,171354,53076],{"class":40},[34,171356,152299],{"class":504},[34,171358,48],{"class":40},[34,171360,70763],{"class":504},[34,171362,53076],{"class":40},[34,171364,2420],{"class":44},[34,171366,48],{"class":40},[34,171368,152835],{"class":504},[34,171370,53076],{"class":40},[34,171372,2604],{"class":44},[34,171374,6581],{"class":40},[34,171376,171377],{"class":36,"line":518},[34,171378,34887],{"class":40},[34,171380,171381],{"class":36,"line":524},[34,171382,1475],{"emptyLinePlaceholder":1474},[34,171384,171385,171387,171389,171391,171393,171395,171397,171399,171401,171403,171405,171407,171409,171411,171413,171415,171417,171419],{"class":36,"line":530},[34,171386,109196],{"class":55},[34,171388,148154],{"class":44},[34,171390,286],{"class":40},[34,171392,171163],{"class":504},[34,171394,48],{"class":40},[34,171396,153339],{"class":504},[34,171398,48],{"class":40},[34,171400,148169],{"class":51},[34,171402,221],{"class":55},[34,171404,148174],{"class":504},[34,171406,48],{"class":40},[34,171408,171180],{"class":51},[34,171410,221],{"class":55},[34,171412,9302],{"class":504},[34,171414,372],{"class":40},[34,171416,33025],{"class":55},[34,171418,149516],{"class":51},[34,171420,5392],{"class":40},[34,171422,171423,171426,171428,171430,171432,171434,171436,171438,171440],{"class":36,"line":624},[34,171424,171425],{"class":40},"    fieldnames ",[34,171427,221],{"class":55},[34,171429,53865],{"class":40},[34,171431,64318],{"class":504},[34,171433,48],{"class":40},[34,171435,70763],{"class":504},[34,171437,48],{"class":40},[34,171439,152835],{"class":504},[34,171441,34887],{"class":40},[34,171443,171444,171446,171448,171451,171453,171455,171458,171460],{"class":36,"line":630},[34,171445,171197],{"class":40},[34,171447,221],{"class":55},[34,171449,171450],{"class":40}," csv.DictWriter(",[34,171452,46993],{"class":51},[34,171454,48],{"class":40},[34,171456,171457],{"class":51},"fieldnames",[34,171459,221],{"class":55},[34,171461,171462],{"class":40},"fieldnames)\n",[34,171464,171465],{"class":36,"line":636},[34,171466,171467],{"class":40},"    writer.writeheader()\n",[34,171469,171470],{"class":36,"line":1513},[34,171471,171211],{"class":40},[14,171473,171475],{"id":171474},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[103,171477,124655],{},[1772,171479,171480,171483,171486],{},[1775,171481,171482],{},"读取文本文件。",[1775,171484,171485],{},"统计每个单词出现次数。",[1775,171487,171488],{},"输出出现次数最多的前 10 个单词。",[103,171490,11685],{},[24,171492,171494],{"className":26,"code":171493,"language":28,"meta":29,"style":29},"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",[31,171495,171496,171506,171510,171523,171539,171543,171553,171562,171566,171578,171598,171607,171611,171629,171633,171663,171667,171683],{"__ignoreMap":29},[34,171497,171498,171500,171502,171504],{"class":36,"line":37},[34,171499,32379],{"class":55},[34,171501,109674],{"class":40},[34,171503,32036],{"class":55},[34,171505,109679],{"class":40},[34,171507,171508],{"class":36,"line":165},[34,171509,1475],{"emptyLinePlaceholder":1474},[34,171511,171512,171514,171516,171518,171521],{"class":36,"line":171},[34,171513,169674],{"class":40},[34,171515,221],{"class":55},[34,171517,109908],{"class":40},[34,171519,171520],{"class":504},"\"article.txt\"",[34,171522,101],{"class":40},[34,171524,171525,171527,171529,171531,171533,171535,171537],{"class":36,"line":182},[34,171526,169857],{"class":40},[34,171528,221],{"class":55},[34,171530,170734],{"class":40},[34,171532,148169],{"class":51},[34,171534,221],{"class":55},[34,171536,148174],{"class":504},[34,171538,101],{"class":40},[34,171540,171541],{"class":36,"line":188},[34,171542,1475],{"emptyLinePlaceholder":1474},[34,171544,171545,171548,171550],{"class":36,"line":518},[34,171546,171547],{"class":40},"words ",[34,171549,221],{"class":55},[34,171551,171552],{"class":40}," content.lower().split()\n",[34,171554,171555,171558,171560],{"class":36,"line":524},[34,171556,171557],{"class":40},"counter ",[34,171559,221],{"class":55},[34,171561,89504],{"class":40},[34,171563,171564],{"class":36,"line":530},[34,171565,1475],{"emptyLinePlaceholder":1474},[34,171567,171568,171570,171573,171575],{"class":36,"line":624},[34,171569,4678],{"class":55},[34,171571,171572],{"class":40}," word ",[34,171574,27689],{"class":55},[34,171576,171577],{"class":40}," words:\n",[34,171579,171580,171583,171585,171588,171591,171593,171596],{"class":36,"line":630},[34,171581,171582],{"class":40},"    word ",[34,171584,221],{"class":55},[34,171586,171587],{"class":40}," word.strip(",[34,171589,171590],{"class":504},"\".,!?;:",[34,171592,157858],{"class":44},[34,171594,171595],{"class":504},"'()[]\"",[34,171597,101],{"class":40},[34,171599,171600,171602,171604],{"class":36,"line":636},[34,171601,4754],{"class":55},[34,171603,40571],{"class":55},[34,171605,171606],{"class":40}," word:\n",[34,171608,171609],{"class":36,"line":1513},[34,171610,149875],{"class":55},[34,171612,171613,171616,171618,171621,171623,171625,171627],{"class":36,"line":1519},[34,171614,171615],{"class":40},"    counter[word] ",[34,171617,221],{"class":55},[34,171619,171620],{"class":40}," counter.get(word, ",[34,171622,177],{"class":44},[34,171624,372],{"class":40},[34,171626,2277],{"class":55},[34,171628,57338],{"class":44},[34,171630,171631],{"class":36,"line":3283},[34,171632,1475],{"emptyLinePlaceholder":1474},[34,171634,171635,171638,171640,171642,171645,171647,171649,171651,171653,171655,171657,171659,171661],{"class":36,"line":3297},[34,171636,171637],{"class":40},"items ",[34,171639,221],{"class":55},[34,171641,164967],{"class":44},[34,171643,171644],{"class":40},"(counter.items(), ",[34,171646,155309],{"class":51},[34,171648,155312],{"class":55},[34,171650,155315],{"class":40},[34,171652,394],{"class":44},[34,171654,113565],{"class":40},[34,171656,164891],{"class":51},[34,171658,221],{"class":55},[34,171660,33118],{"class":44},[34,171662,101],{"class":40},[34,171664,171665],{"class":36,"line":3302},[34,171666,1475],{"emptyLinePlaceholder":1474},[34,171668,171669,171671,171674,171676,171679,171681],{"class":36,"line":3308},[34,171670,4678],{"class":55},[34,171672,171673],{"class":40}," word, count ",[34,171675,27689],{"class":55},[34,171677,171678],{"class":40}," items[:",[34,171680,410],{"class":44},[34,171682,167118],{"class":40},[34,171684,171685,171687],{"class":36,"line":3328},[34,171686,32941],{"class":44},[34,171688,171689],{"class":40},"(word, count)\n",[14,171691,171693],{"id":171692},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[24,171695,171697],{"className":26,"code":171696,"language":28,"meta":29,"style":29},"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",[31,171698,171699,171705,171715,171719,171731,171735,171739,171747,171757,171763,171767,171797,171807,171811,171815,171823,171853,171877,171881,171885,171893,171922,171927],{"__ignoreMap":29},[34,171700,171701,171703],{"class":36,"line":37},[34,171702,32036],{"class":55},[34,171704,148454],{"class":40},[34,171706,171707,171709,171711,171713],{"class":36,"line":165},[34,171708,32379],{"class":55},[34,171710,109674],{"class":40},[34,171712,32036],{"class":55},[34,171714,109679],{"class":40},[34,171716,171717],{"class":36,"line":171},[34,171718,1475],{"emptyLinePlaceholder":1474},[34,171720,171721,171723,171725,171727,171729],{"class":36,"line":182},[34,171722,153187],{"class":44},[34,171724,56],{"class":55},[34,171726,109908],{"class":40},[34,171728,153194],{"class":504},[34,171730,101],{"class":40},[34,171732,171733],{"class":36,"line":188},[34,171734,1475],{"emptyLinePlaceholder":1474},[34,171736,171737],{"class":36,"line":518},[34,171738,1475],{"emptyLinePlaceholder":1474},[34,171740,171741,171743,171745],{"class":36,"line":524},[34,171742,33588],{"class":55},[34,171744,153211],{"class":3617},[34,171746,33594],{"class":40},[34,171748,171749,171751,171753,171755],{"class":36,"line":530},[34,171750,4754],{"class":55},[34,171752,40571],{"class":55},[34,171754,153222],{"class":44},[34,171756,153225],{"class":40},[34,171758,171759,171761],{"class":36,"line":624},[34,171760,16398],{"class":55},[34,171762,53477],{"class":40},[34,171764,171765],{"class":36,"line":630},[34,171766,1475],{"emptyLinePlaceholder":1474},[34,171768,171769,171771,171773,171775,171777,171779,171781,171783,171785,171787,171789,171791,171793,171795],{"class":36,"line":636},[34,171770,35819],{"class":55},[34,171772,148154],{"class":44},[34,171774,286],{"class":40},[34,171776,153187],{"class":44},[34,171778,48],{"class":40},[34,171780,148164],{"class":504},[34,171782,48],{"class":40},[34,171784,148169],{"class":51},[34,171786,221],{"class":55},[34,171788,148174],{"class":504},[34,171790,372],{"class":40},[34,171792,33025],{"class":55},[34,171794,149516],{"class":51},[34,171796,5392],{"class":40},[34,171798,171799,171801,171803,171805],{"class":36,"line":1513},[34,171800,16398],{"class":55},[34,171802,149527],{"class":40},[34,171804,46993],{"class":51},[34,171806,101],{"class":40},[34,171808,171809],{"class":36,"line":1519},[34,171810,1475],{"emptyLinePlaceholder":1474},[34,171812,171813],{"class":36,"line":3283},[34,171814,1475],{"emptyLinePlaceholder":1474},[34,171816,171817,171819,171821],{"class":36,"line":3297},[34,171818,33588],{"class":55},[34,171820,153321],{"class":3617},[34,171822,153324],{"class":40},[34,171824,171825,171827,171829,171831,171833,171835,171837,171839,171841,171843,171845,171847,171849,171851],{"class":36,"line":3302},[34,171826,35819],{"class":55},[34,171828,148154],{"class":44},[34,171830,286],{"class":40},[34,171832,153187],{"class":44},[34,171834,48],{"class":40},[34,171836,153339],{"class":504},[34,171838,48],{"class":40},[34,171840,148169],{"class":51},[34,171842,221],{"class":55},[34,171844,148174],{"class":504},[34,171846,372],{"class":40},[34,171848,33025],{"class":55},[34,171850,149516],{"class":51},[34,171852,5392],{"class":40},[34,171854,171855,171857,171859,171861,171863,171865,171867,171869,171871,171873,171875],{"class":36,"line":3308},[34,171856,153360],{"class":40},[34,171858,46993],{"class":51},[34,171860,48],{"class":40},[34,171862,148500],{"class":51},[34,171864,221],{"class":55},[34,171866,35628],{"class":44},[34,171868,48],{"class":40},[34,171870,153375],{"class":51},[34,171872,221],{"class":55},[34,171874,332],{"class":44},[34,171876,101],{"class":40},[34,171878,171879],{"class":36,"line":3328},[34,171880,1475],{"emptyLinePlaceholder":1474},[34,171882,171883],{"class":36,"line":3333},[34,171884,1475],{"emptyLinePlaceholder":1474},[34,171886,171887,171889,171891],{"class":36,"line":3347},[34,171888,161079],{"class":40},[34,171890,221],{"class":55},[34,171892,154405],{"class":40},[34,171894,171895,171898,171900,171902,171904,171906,171908,171910,171912,171914,171916,171918,171920],{"class":36,"line":3352},[34,171896,171897],{"class":40},"students.append({",[34,171899,64318],{"class":504},[34,171901,53076],{"class":40},[34,171903,151251],{"class":504},[34,171905,48],{"class":40},[34,171907,70763],{"class":504},[34,171909,53076],{"class":40},[34,171911,2445],{"class":44},[34,171913,48],{"class":40},[34,171915,152835],{"class":504},[34,171917,53076],{"class":40},[34,171919,2780],{"class":44},[34,171921,166515],{"class":40},[34,171923,171924],{"class":36,"line":3381},[34,171925,171926],{"class":40},"save_students(students)\n",[34,171928,171929,171931,171933,171936],{"class":36,"line":3386},[34,171930,723],{"class":44},[34,171932,286],{"class":40},[34,171934,171935],{"class":504},"\"保存成功\"",[34,171937,101],{"class":40},[14,171939,171941],{"id":171940},"_814-易错点","8.14 易错点",[1772,171943,171944,171948,171954,171959,171966,171973],{},[1775,171945,171946,170207],{},[31,171947,2588],{},[1775,171949,171950,171951,30031],{},"读写中文要指定 ",[31,171952,171953],{},"encoding=\"utf-8\"",[1775,171955,171956,171957,30031],{},"打开文件后要关闭，推荐使用 ",[31,171958,109196],{},[1775,171960,171961,171962,171965],{},"读取大文件不要直接 ",[31,171963,171964],{},"read()"," 全部内容。",[1775,171967,171968,171969,171972],{},"Windows 写 CSV 时建议加 ",[31,171970,171971],{},"newline=\"\"","，避免空行。",[1775,171974,171975],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171977,171979],{"id":171978},"_815-本章练习","8.15 本章练习",[1772,171981,171982,171989,171994,171997,172000],{},[1775,171983,171984,171985,171988],{},"写入一个 ",[31,171986,171987],{},"students.txt","，每行保存一个学生姓名。",[1775,171990,105718,171991,171993],{},[31,171992,171987],{}," 并输出所有学生。",[1775,171995,171996],{},"把学生列表保存为 JSON 文件。",[1775,171998,171999],{},"从 JSON 文件读取学生数据，计算平均分。",[1775,172001,172002,172003,172006,172007,172010],{},"写一个日志函数 ",[31,172004,172005],{},"write_log(message)","，每次调用向 ",[31,172008,172009],{},"app.log"," 追加一行。",[1711,172012,172013],{},"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":29,"searchDepth":165,"depth":165,"links":172015},[172016,172017,172021,172022,172028,172029,172030,172031,172032,172033,172034,172035,172036,172037,172038],{"id":169527,"depth":165,"text":169528},{"id":169568,"depth":165,"text":169569,"children":172018},[172019,172020],{"id":169572,"depth":171,"text":169573},{"id":169606,"depth":171,"text":169607},{"id":169720,"depth":165,"text":169721},{"id":169813,"depth":165,"text":169814,"children":172023},[172024,172025,172026,172027],{"id":169817,"depth":171,"text":169818},{"id":169904,"depth":171,"text":169905},{"id":169974,"depth":171,"text":169975},{"id":170068,"depth":171,"text":170069},{"id":170138,"depth":165,"text":170139},{"id":170201,"depth":165,"text":170202},{"id":170362,"depth":165,"text":170363},{"id":170425,"depth":165,"text":170426},{"id":170541,"depth":165,"text":170542},{"id":170751,"depth":165,"text":170752},{"id":171063,"depth":165,"text":171064},{"id":171474,"depth":165,"text":171475},{"id":171692,"depth":165,"text":171693},{"id":171940,"depth":165,"text":171941},{"id":171978,"depth":165,"text":171979},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169519,"description":1744},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172045,"title":172046,"body":172047,"description":1744,"extension":1745,"meta":174233,"navigation":1474,"path":174234,"seo":174235,"stem":174236,"__hash__":174237},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172048,"toc":174200},[172049,172052,172056,172059,172062,172154,172156,172175,172180,172184,172187,172190,172219,172226,172229,172233,172236,172265,172267,172319,172325,172378,172382,172480,172483,172550,172554,172611,172613,172619,172623,172628,172634,172725,172730,172734,172737,172815,172818,172856,172860,172978,172981,172985,172988,173033,173036,173040,173045,173051,173101,173104,173135,173139,173143,173173,173177,173212,173216,173251,173291,173295,173311,173314,173318,173322,173401,173405,173446,173450,173505,173509,173543,173547,173577,173586,173593,173599,173656,173659,173667,173670,173674,173681,173684,173690,173693,173710,173715,173719,173725,173738,173741,173778,173781,173792,173795,173809,173812,173826,173830,173837,173870,173873,173875,173881,173884,173888,173890,173896,173901,174074,174078,174141,174145,174169,174173,174197],[10,172050,172046],{"id":172051},"_9-异常模块与包",[14,172053,172055],{"id":172054},"_91-什么是异常","9.1 什么是异常",[103,172057,172058],{},"异常是程序运行过程中出现的错误。",[103,172060,172061],{},"常见异常：",[1948,172063,172064,172073],{},[1951,172065,172066],{},[1954,172067,172068,172071],{},[1957,172069,172070],{},"异常",[1957,172072,27515],{},[1994,172074,172075,172085,172095,172104,172114,172124,172134,172144],{},[1954,172076,172077,172082],{},[1999,172078,172079],{},[31,172080,172081],{},"NameError",[1999,172083,172084],{},"使用了未定义变量",[1954,172086,172087,172092],{},[1999,172088,172089],{},[31,172090,172091],{},"TypeError",[1999,172093,172094],{},"类型不匹配",[1954,172096,172097,172101],{},[1999,172098,172099],{},[31,172100,156197],{},[1999,172102,172103],{},"值不合法",[1954,172105,172106,172111],{},[1999,172107,172108],{},[31,172109,172110],{},"IndexError",[1999,172112,172113],{},"列表索引越界",[1954,172115,172116,172121],{},[1999,172117,172118],{},[31,172119,172120],{},"KeyError",[1999,172122,172123],{},"字典 key 不存在",[1954,172125,172126,172131],{},[1999,172127,172128],{},[31,172129,172130],{},"FileNotFoundError",[1999,172132,172133],{},"文件不存在",[1954,172135,172136,172141],{},[1999,172137,172138],{},[31,172139,172140],{},"ZeroDivisionError",[1999,172142,172143],{},"除数为 0",[1954,172145,172146,172151],{},[1999,172147,172148],{},[31,172149,172150],{},"ImportError",[1999,172152,172153],{},"导入失败",[103,172155,16781],{},[24,172157,172159],{"className":26,"code":172158,"language":28,"meta":29,"style":29},"num = int(\"abc\")\n",[31,172160,172161],{"__ignoreMap":29},[34,172162,172163,172165,172167,172169,172171,172173],{"class":36,"line":37},[34,172164,157150],{"class":40},[34,172166,221],{"class":55},[34,172168,4036],{"class":44},[34,172170,286],{"class":40},[34,172172,157243],{"class":504},[34,172174,101],{"class":40},[103,172176,172177,172178,30031],{},"会触发 ",[31,172179,156197],{},[14,172181,172183],{"id":172182},"_92-为什么要处理异常","9.2 为什么要处理异常",[103,172185,172186],{},"如果不处理异常，程序会直接终止。",[103,172188,172189],{},"例如用户输入年龄：",[24,172191,172193],{"className":26,"code":172192,"language":28,"meta":29,"style":29},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[31,172194,172195,172213],{"__ignoreMap":29},[34,172196,172197,172199,172201,172203,172205,172207,172209,172211],{"class":36,"line":37},[34,172198,147909],{"class":40},[34,172200,221],{"class":55},[34,172202,4036],{"class":44},[34,172204,286],{"class":40},[34,172206,55460],{"class":44},[34,172208,286],{"class":40},[34,172210,153757],{"class":504},[34,172212,296],{"class":40},[34,172214,172215,172217],{"class":36,"line":165},[34,172216,723],{"class":44},[34,172218,157124],{"class":40},[103,172220,172221,172222,172225],{},"用户输入 ",[31,172223,172224],{},"abc","，程序就会报错退出。",[103,172227,172228],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172230,172232],{"id":172231},"_93-try-except","9.3 try except",[103,172234,172235],{},"基础语法：",[24,172237,172239],{"className":26,"code":172238,"language":28,"meta":29,"style":29},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[31,172240,172241,172248,172253,172260],{"__ignoreMap":29},[34,172242,172243,172246],{"class":36,"line":37},[34,172244,172245],{"class":55},"try",[34,172247,5392],{"class":40},[34,172249,172250],{"class":36,"line":165},[34,172251,172252],{"class":40},"    可能出错的代码\n",[34,172254,172255,172258],{"class":36,"line":171},[34,172256,172257],{"class":55},"except",[34,172259,5392],{"class":40},[34,172261,172262],{"class":36,"line":182},[34,172263,172264],{"class":40},"    出错后的处理代码\n",[103,172266,16781],{},[24,172268,172270],{"className":26,"code":172269,"language":28,"meta":29,"style":29},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[31,172271,172272,172278,172296,172302,172308],{"__ignoreMap":29},[34,172273,172274,172276],{"class":36,"line":37},[34,172275,172245],{"class":55},[34,172277,5392],{"class":40},[34,172279,172280,172282,172284,172286,172288,172290,172292,172294],{"class":36,"line":165},[34,172281,153749],{"class":40},[34,172283,221],{"class":55},[34,172285,4036],{"class":44},[34,172287,286],{"class":40},[34,172289,55460],{"class":44},[34,172291,286],{"class":40},[34,172293,153757],{"class":504},[34,172295,296],{"class":40},[34,172297,172298,172300],{"class":36,"line":171},[34,172299,32941],{"class":44},[34,172301,157124],{"class":40},[34,172303,172304,172306],{"class":36,"line":182},[34,172305,172257],{"class":55},[34,172307,5392],{"class":40},[34,172309,172310,172312,172314,172317],{"class":36,"line":188},[34,172311,32941],{"class":44},[34,172313,286],{"class":40},[34,172315,172316],{"class":504},"\"年龄必须是数字\"",[34,172318,101],{"class":40},[103,172320,172321,172322,172324],{},"不建议裸写 ",[31,172323,172257],{},"，最好指定异常类型。",[24,172326,172328],{"className":26,"code":172327,"language":28,"meta":29,"style":29},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[31,172329,172330,172336,172354,172360,172368],{"__ignoreMap":29},[34,172331,172332,172334],{"class":36,"line":37},[34,172333,172245],{"class":55},[34,172335,5392],{"class":40},[34,172337,172338,172340,172342,172344,172346,172348,172350,172352],{"class":36,"line":165},[34,172339,153749],{"class":40},[34,172341,221],{"class":55},[34,172343,4036],{"class":44},[34,172345,286],{"class":40},[34,172347,55460],{"class":44},[34,172349,286],{"class":40},[34,172351,153757],{"class":504},[34,172353,296],{"class":40},[34,172355,172356,172358],{"class":36,"line":171},[34,172357,32941],{"class":44},[34,172359,157124],{"class":40},[34,172361,172362,172364,172366],{"class":36,"line":182},[34,172363,172257],{"class":55},[34,172365,153589],{"class":44},[34,172367,5392],{"class":40},[34,172369,172370,172372,172374,172376],{"class":36,"line":188},[34,172371,32941],{"class":44},[34,172373,286],{"class":40},[34,172375,172316],{"class":504},[34,172377,101],{"class":40},[14,172379,172381],{"id":172380},"_94-捕获多个异常","9.4 捕获多个异常",[24,172383,172385],{"className":26,"code":172384,"language":28,"meta":29,"style":29},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[31,172386,172387,172393,172414,172434,172441,172449,172460,172469],{"__ignoreMap":29},[34,172388,172389,172391],{"class":36,"line":37},[34,172390,172245],{"class":55},[34,172392,5392],{"class":40},[34,172394,172395,172398,172400,172402,172404,172406,172408,172410,172412],{"class":36,"line":165},[34,172396,172397],{"class":40},"    nums ",[34,172399,221],{"class":55},[34,172401,53865],{"class":40},[34,172403,394],{"class":44},[34,172405,48],{"class":40},[34,172407,332],{"class":44},[34,172409,48],{"class":40},[34,172411,337],{"class":44},[34,172413,34887],{"class":40},[34,172415,172416,172419,172421,172423,172425,172427,172429,172432],{"class":36,"line":171},[34,172417,172418],{"class":40},"    index ",[34,172420,221],{"class":55},[34,172422,4036],{"class":44},[34,172424,286],{"class":40},[34,172426,55460],{"class":44},[34,172428,286],{"class":40},[34,172430,172431],{"class":504},"\"请输入索引:\"",[34,172433,296],{"class":40},[34,172435,172436,172438],{"class":36,"line":182},[34,172437,32941],{"class":44},[34,172439,172440],{"class":40},"(nums[index])\n",[34,172442,172443,172445,172447],{"class":36,"line":188},[34,172444,172257],{"class":55},[34,172446,153589],{"class":44},[34,172448,5392],{"class":40},[34,172450,172451,172453,172455,172458],{"class":36,"line":518},[34,172452,32941],{"class":44},[34,172454,286],{"class":40},[34,172456,172457],{"class":504},"\"索引必须是整数\"",[34,172459,101],{"class":40},[34,172461,172462,172464,172467],{"class":36,"line":524},[34,172463,172257],{"class":55},[34,172465,172466],{"class":44}," IndexError",[34,172468,5392],{"class":40},[34,172470,172471,172473,172475,172478],{"class":36,"line":530},[34,172472,32941],{"class":44},[34,172474,286],{"class":40},[34,172476,172477],{"class":504},"\"索引越界\"",[34,172479,101],{"class":40},[103,172481,172482],{},"多个异常使用相同处理逻辑：",[24,172484,172486],{"className":26,"code":172485,"language":28,"meta":29,"style":29},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[31,172487,172488,172494,172512,172525,172539],{"__ignoreMap":29},[34,172489,172490,172492],{"class":36,"line":37},[34,172491,172245],{"class":55},[34,172493,5392],{"class":40},[34,172495,172496,172498,172500,172502,172504,172506,172508,172510],{"class":36,"line":165},[34,172497,47232],{"class":40},[34,172499,221],{"class":55},[34,172501,4036],{"class":44},[34,172503,286],{"class":40},[34,172505,55460],{"class":44},[34,172507,286],{"class":40},[34,172509,157159],{"class":504},[34,172511,296],{"class":40},[34,172513,172514,172516,172518,172520,172522],{"class":36,"line":171},[34,172515,32941],{"class":44},[34,172517,286],{"class":40},[34,172519,410],{"class":44},[34,172521,157409],{"class":55},[34,172523,172524],{"class":40}," num)\n",[34,172526,172527,172529,172531,172533,172535,172537],{"class":36,"line":182},[34,172528,172257],{"class":55},[34,172530,3313],{"class":40},[34,172532,156197],{"class":44},[34,172534,48],{"class":40},[34,172536,172140],{"class":44},[34,172538,32428],{"class":40},[34,172540,172541,172543,172545,172548],{"class":36,"line":188},[34,172542,32941],{"class":44},[34,172544,286],{"class":40},[34,172546,172547],{"class":504},"\"输入不合法\"",[34,172549,101],{"class":40},[14,172551,172553],{"id":172552},"_95-获取异常信息","9.5 获取异常信息",[24,172555,172557],{"className":26,"code":172556,"language":28,"meta":29,"style":29},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[31,172558,172559,172565,172579,172590],{"__ignoreMap":29},[34,172560,172561,172563],{"class":36,"line":37},[34,172562,172245],{"class":55},[34,172564,5392],{"class":40},[34,172566,172567,172569,172571,172573,172575,172577],{"class":36,"line":165},[34,172568,47232],{"class":40},[34,172570,221],{"class":55},[34,172572,4036],{"class":44},[34,172574,286],{"class":40},[34,172576,157243],{"class":504},[34,172578,101],{"class":40},[34,172580,172581,172583,172585,172587],{"class":36,"line":171},[34,172582,172257],{"class":55},[34,172584,153589],{"class":44},[34,172586,66243],{"class":55},[34,172588,172589],{"class":40}," e:\n",[34,172591,172592,172594,172596,172598,172601,172603,172605,172607,172609],{"class":36,"line":182},[34,172593,32941],{"class":44},[34,172595,286],{"class":40},[34,172597,1867],{"class":55},[34,172599,172600],{"class":504},"\"出错了:",[34,172602,2687],{"class":44},[34,172604,1887],{"class":40},[34,172606,2737],{"class":44},[34,172608,2058],{"class":504},[34,172610,101],{"class":40},[103,172612,147820],{},[24,172614,172617],{"className":172615,"code":172616,"language":6838,"meta":29},[6836],"出错了:invalid literal for int() with base 10: 'abc'\n",[31,172618,172616],{"__ignoreMap":29},[14,172620,172622],{"id":172621},"_96-else和finally","9.6 else和finally",[103,172624,172625,172627],{},[31,172626,3355],{},"：没有异常时执行。",[103,172629,172630,172633],{},[31,172631,172632],{},"finally","：无论是否异常都会执行。",[24,172635,172637],{"className":26,"code":172636,"language":28,"meta":29,"style":29},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[31,172638,172639,172645,172663,172671,172681,172687,172708,172714],{"__ignoreMap":29},[34,172640,172641,172643],{"class":36,"line":37},[34,172642,172245],{"class":55},[34,172644,5392],{"class":40},[34,172646,172647,172649,172651,172653,172655,172657,172659,172661],{"class":36,"line":165},[34,172648,47232],{"class":40},[34,172650,221],{"class":55},[34,172652,4036],{"class":44},[34,172654,286],{"class":40},[34,172656,55460],{"class":44},[34,172658,286],{"class":40},[34,172660,157159],{"class":504},[34,172662,296],{"class":40},[34,172664,172665,172667,172669],{"class":36,"line":171},[34,172666,172257],{"class":55},[34,172668,153589],{"class":44},[34,172670,5392],{"class":40},[34,172672,172673,172675,172677,172679],{"class":36,"line":182},[34,172674,32941],{"class":44},[34,172676,286],{"class":40},[34,172678,154577],{"class":504},[34,172680,101],{"class":40},[34,172682,172683,172685],{"class":36,"line":188},[34,172684,3355],{"class":55},[34,172686,5392],{"class":40},[34,172688,172689,172691,172693,172695,172698,172700,172702,172704,172706],{"class":36,"line":518},[34,172690,32941],{"class":44},[34,172692,286],{"class":40},[34,172694,1867],{"class":55},[34,172696,172697],{"class":504},"\"输入正确:",[34,172699,2687],{"class":44},[34,172701,1632],{"class":40},[34,172703,2737],{"class":44},[34,172705,2058],{"class":504},[34,172707,101],{"class":40},[34,172709,172710,172712],{"class":36,"line":524},[34,172711,172632],{"class":55},[34,172713,5392],{"class":40},[34,172715,172716,172718,172720,172723],{"class":36,"line":530},[34,172717,32941],{"class":44},[34,172719,286],{"class":40},[34,172721,172722],{"class":504},"\"程序结束\"",[34,172724,101],{"class":40},[103,172726,172727,172729],{},[31,172728,172632],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172731,172733],{"id":172732},"_97-抛出异常","9.7 抛出异常",[103,172735,172736],{},"程序可以主动抛出异常。",[24,172738,172740],{"className":26,"code":172739,"language":28,"meta":29,"style":29},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[31,172741,172742,172751,172763,172776,172796,172800,172804],{"__ignoreMap":29},[34,172743,172744,172746,172749],{"class":36,"line":37},[34,172745,33588],{"class":55},[34,172747,172748],{"class":3617}," set_age",[34,172750,162778],{"class":40},[34,172752,172753,172755,172757,172759,172761],{"class":36,"line":165},[34,172754,4754],{"class":55},[34,172756,17353],{"class":40},[34,172758,2701],{"class":55},[34,172760,98],{"class":44},[34,172762,5392],{"class":40},[34,172764,172765,172767,172769,172771,172774],{"class":36,"line":171},[34,172766,104795],{"class":55},[34,172768,153589],{"class":44},[34,172770,286],{"class":40},[34,172772,172773],{"class":504},"\"年龄不能为负数\"",[34,172775,101],{"class":40},[34,172777,172778,172780,172782,172784,172786,172788,172790,172792,172794],{"class":36,"line":182},[34,172779,32941],{"class":44},[34,172781,286],{"class":40},[34,172783,1867],{"class":55},[34,172785,163346],{"class":504},[34,172787,2687],{"class":44},[34,172789,71860],{"class":40},[34,172791,2737],{"class":44},[34,172793,2058],{"class":504},[34,172795,101],{"class":40},[34,172797,172798],{"class":36,"line":188},[34,172799,1475],{"emptyLinePlaceholder":1474},[34,172801,172802],{"class":36,"line":518},[34,172803,1475],{"emptyLinePlaceholder":1474},[34,172805,172806,172809,172811,172813],{"class":36,"line":524},[34,172807,172808],{"class":40},"set_age(",[34,172810,2327],{"class":55},[34,172812,394],{"class":44},[34,172814,101],{"class":40},[103,172816,172817],{},"调用者可以捕获：",[24,172819,172821],{"className":26,"code":172820,"language":28,"meta":29,"style":29},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[31,172822,172823,172829,172840,172850],{"__ignoreMap":29},[34,172824,172825,172827],{"class":36,"line":37},[34,172826,172245],{"class":55},[34,172828,5392],{"class":40},[34,172830,172831,172834,172836,172838],{"class":36,"line":165},[34,172832,172833],{"class":40},"    set_age(",[34,172835,2327],{"class":55},[34,172837,394],{"class":44},[34,172839,101],{"class":40},[34,172841,172842,172844,172846,172848],{"class":36,"line":171},[34,172843,172257],{"class":55},[34,172845,153589],{"class":44},[34,172847,66243],{"class":55},[34,172849,172589],{"class":40},[34,172851,172852,172854],{"class":36,"line":182},[34,172853,32941],{"class":44},[34,172855,68638],{"class":40},[14,172857,172859],{"id":172858},"_98-自定义异常","9.8 自定义异常",[24,172861,172863],{"className":26,"code":172862,"language":28,"meta":29,"style":29},"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",[31,172864,172865,172879,172883,172887,172891,172899,172909,172920,172930,172934,172938,172944,172961,172972],{"__ignoreMap":29},[34,172866,172867,172869,172872,172874,172877],{"class":36,"line":37},[34,172868,16340],{"class":55},[34,172870,172871],{"class":3617}," BalanceNotEnoughError",[34,172873,286],{"class":40},[34,172875,172876],{"class":44},"Exception",[34,172878,32428],{"class":40},[34,172880,172881],{"class":36,"line":165},[34,172882,150900],{"class":55},[34,172884,172885],{"class":36,"line":171},[34,172886,1475],{"emptyLinePlaceholder":1474},[34,172888,172889],{"class":36,"line":182},[34,172890,1475],{"emptyLinePlaceholder":1474},[34,172892,172893,172895,172897],{"class":36,"line":188},[34,172894,33588],{"class":55},[34,172896,151549],{"class":3617},[34,172898,164175],{"class":40},[34,172900,172901,172903,172905,172907],{"class":36,"line":518},[34,172902,4754],{"class":55},[34,172904,151505],{"class":40},[34,172906,2751],{"class":55},[34,172908,163952],{"class":40},[34,172910,172911,172913,172916,172918],{"class":36,"line":524},[34,172912,104795],{"class":55},[34,172914,172915],{"class":40}," BalanceNotEnoughError(",[34,172917,151600],{"class":504},[34,172919,101],{"class":40},[34,172921,172922,172924,172926,172928],{"class":36,"line":530},[34,172923,5743],{"class":55},[34,172925,164182],{"class":40},[34,172927,2327],{"class":55},[34,172929,151538],{"class":40},[34,172931,172932],{"class":36,"line":624},[34,172933,1475],{"emptyLinePlaceholder":1474},[34,172935,172936],{"class":36,"line":630},[34,172937,1475],{"emptyLinePlaceholder":1474},[34,172939,172940,172942],{"class":36,"line":636},[34,172941,172245],{"class":55},[34,172943,5392],{"class":40},[34,172945,172946,172948,172950,172953,172955,172957,172959],{"class":36,"line":1513},[34,172947,163853],{"class":40},[34,172949,221],{"class":55},[34,172951,172952],{"class":40}," withdraw(",[34,172954,451],{"class":44},[34,172956,48],{"class":40},[34,172958,3376],{"class":44},[34,172960,101],{"class":40},[34,172962,172963,172965,172968,172970],{"class":36,"line":1519},[34,172964,172257],{"class":55},[34,172966,172967],{"class":40}," BalanceNotEnoughError ",[34,172969,33025],{"class":55},[34,172971,172589],{"class":40},[34,172973,172974,172976],{"class":36,"line":3283},[34,172975,32941],{"class":44},[34,172977,68638],{"class":40},[103,172979,172980],{},"入门阶段大多数情况使用内置异常即可。",[14,172982,172984],{"id":172983},"_99-traceback","9.9 traceback",[103,172986,172987],{},"调试时可以输出完整异常堆栈。",[24,172989,172991],{"className":26,"code":172990,"language":28,"meta":29,"style":29},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[31,172992,172993,173000,173004,173010,173020,173028],{"__ignoreMap":29},[34,172994,172995,172997],{"class":36,"line":37},[34,172996,32036],{"class":55},[34,172998,172999],{"class":40}," traceback\n",[34,173001,173002],{"class":36,"line":165},[34,173003,1475],{"emptyLinePlaceholder":1474},[34,173005,173006,173008],{"class":36,"line":171},[34,173007,172245],{"class":55},[34,173009,5392],{"class":40},[34,173011,173012,173014,173016,173018],{"class":36,"line":182},[34,173013,3639],{"class":44},[34,173015,286],{"class":40},[34,173017,157243],{"class":504},[34,173019,101],{"class":40},[34,173021,173022,173024,173026],{"class":36,"line":188},[34,173023,172257],{"class":55},[34,173025,153589],{"class":44},[34,173027,5392],{"class":40},[34,173029,173030],{"class":36,"line":518},[34,173031,173032],{"class":40},"    traceback.print_exc()\n",[103,173034,173035],{},"日志系统中常把异常堆栈记录到文件。",[14,173037,173039],{"id":173038},"_910-什么是模块","9.10 什么是模块",[103,173041,173042,173043,127346],{},"模块就是一个 ",[31,173044,147715],{},[103,173046,173047,173048,26264],{},"例如创建 ",[31,173049,173050],{},"my_math.py",[24,173052,173054],{"className":26,"code":173053,"language":28,"meta":29,"style":29},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[31,173055,173056,173064,173074,173078,173082,173091],{"__ignoreMap":29},[34,173057,173058,173060,173062],{"class":36,"line":37},[34,173059,33588],{"class":55},[34,173061,6860],{"class":3617},[34,173063,152456],{"class":40},[34,173065,173066,173068,173070,173072],{"class":36,"line":165},[34,173067,5743],{"class":55},[34,173069,12519],{"class":40},[34,173071,2277],{"class":55},[34,173073,152467],{"class":40},[34,173075,173076],{"class":36,"line":171},[34,173077,1475],{"emptyLinePlaceholder":1474},[34,173079,173080],{"class":36,"line":182},[34,173081,1475],{"emptyLinePlaceholder":1474},[34,173083,173084,173086,173089],{"class":36,"line":188},[34,173085,33588],{"class":55},[34,173087,173088],{"class":3617}," sub",[34,173090,152456],{"class":40},[34,173092,173093,173095,173097,173099],{"class":36,"line":518},[34,173094,5743],{"class":55},[34,173096,12519],{"class":40},[34,173098,2327],{"class":55},[34,173100,152467],{"class":40},[103,173102,173103],{},"在另一个文件中导入：",[24,173105,173107],{"className":26,"code":173106,"language":28,"meta":29,"style":29},"import my_math\n\nprint(my_math.add(1, 2))\n",[31,173108,173109,173116,173120],{"__ignoreMap":29},[34,173110,173111,173113],{"class":36,"line":37},[34,173112,32036],{"class":55},[34,173114,173115],{"class":40}," my_math\n",[34,173117,173118],{"class":36,"line":165},[34,173119,1475],{"emptyLinePlaceholder":1474},[34,173121,173122,173124,173127,173129,173131,173133],{"class":36,"line":171},[34,173123,723],{"class":44},[34,173125,173126],{"class":40},"(my_math.add(",[34,173128,394],{"class":44},[34,173130,48],{"class":40},[34,173132,332],{"class":44},[34,173134,296],{"class":40},[14,173136,173138],{"id":173137},"_911-import导入","9.11 import导入",[19,173140,173142],{"id":173141},"_9111-导入模块","9.11.1 导入模块",[24,173144,173146],{"className":26,"code":173145,"language":28,"meta":29,"style":29},"import random\n\nprint(random.randint(1, 10))\n",[31,173147,173148,173154,173158],{"__ignoreMap":29},[34,173149,173150,173152],{"class":36,"line":37},[34,173151,32036],{"class":55},[34,173153,46967],{"class":40},[34,173155,173156],{"class":36,"line":165},[34,173157,1475],{"emptyLinePlaceholder":1474},[34,173159,173160,173162,173165,173167,173169,173171],{"class":36,"line":171},[34,173161,723],{"class":44},[34,173163,173164],{"class":40},"(random.randint(",[34,173166,394],{"class":44},[34,173168,48],{"class":40},[34,173170,410],{"class":44},[34,173172,296],{"class":40},[19,173174,173176],{"id":173175},"_9112-导入指定内容","9.11.2 导入指定内容",[24,173178,173180],{"className":26,"code":173179,"language":28,"meta":29,"style":29},"from random import randint\n\nprint(randint(1, 10))\n",[31,173181,173182,173193,173197],{"__ignoreMap":29},[34,173183,173184,173186,173188,173190],{"class":36,"line":37},[34,173185,32379],{"class":55},[34,173187,59435],{"class":40},[34,173189,32036],{"class":55},[34,173191,173192],{"class":40}," randint\n",[34,173194,173195],{"class":36,"line":165},[34,173196,1475],{"emptyLinePlaceholder":1474},[34,173198,173199,173201,173204,173206,173208,173210],{"class":36,"line":171},[34,173200,723],{"class":44},[34,173202,173203],{"class":40},"(randint(",[34,173205,394],{"class":44},[34,173207,48],{"class":40},[34,173209,410],{"class":44},[34,173211,296],{"class":40},[19,173213,173215],{"id":173214},"_9113-起别名","9.11.3 起别名",[24,173217,173219],{"className":26,"code":173218,"language":28,"meta":29,"style":29},"import random as rd\n\nprint(rd.randint(1, 10))\n",[31,173220,173221,173232,173236],{"__ignoreMap":29},[34,173222,173223,173225,173227,173229],{"class":36,"line":37},[34,173224,32036],{"class":55},[34,173226,59435],{"class":40},[34,173228,33025],{"class":55},[34,173230,173231],{"class":40}," rd\n",[34,173233,173234],{"class":36,"line":165},[34,173235,1475],{"emptyLinePlaceholder":1474},[34,173237,173238,173240,173243,173245,173247,173249],{"class":36,"line":171},[34,173239,723],{"class":44},[34,173241,173242],{"class":40},"(rd.randint(",[34,173244,394],{"class":44},[34,173246,48],{"class":40},[34,173248,410],{"class":44},[34,173250,296],{"class":40},[24,173252,173254],{"className":26,"code":173253,"language":28,"meta":29,"style":29},"from random import randint as rint\n\nprint(rint(1, 10))\n",[31,173255,173256,173272,173276],{"__ignoreMap":29},[34,173257,173258,173260,173262,173264,173267,173269],{"class":36,"line":37},[34,173259,32379],{"class":55},[34,173261,59435],{"class":40},[34,173263,32036],{"class":55},[34,173265,173266],{"class":40}," randint ",[34,173268,33025],{"class":55},[34,173270,173271],{"class":40}," rint\n",[34,173273,173274],{"class":36,"line":165},[34,173275,1475],{"emptyLinePlaceholder":1474},[34,173277,173278,173280,173283,173285,173287,173289],{"class":36,"line":171},[34,173279,723],{"class":44},[34,173281,173282],{"class":40},"(rint(",[34,173284,394],{"class":44},[34,173286,48],{"class":40},[34,173288,410],{"class":44},[34,173290,296],{"class":40},[19,173292,173294],{"id":173293},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[24,173296,173298],{"className":26,"code":173297,"language":28,"meta":29,"style":29},"from random import *\n",[31,173299,173300],{"__ignoreMap":29},[34,173301,173302,173304,173306,173308],{"class":36,"line":37},[34,173303,32379],{"class":55},[34,173305,59435],{"class":40},[34,173307,32036],{"class":55},[34,173309,173310],{"class":55}," *\n",[103,173312,173313],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173315,173317],{"id":173316},"_912-常用内置模块","9.12 常用内置模块",[19,173319,173321],{"id":173320},"_9121-random","9.12.1 random",[24,173323,173325],{"className":26,"code":173324,"language":28,"meta":29,"style":29},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[31,173326,173327,173333,173337,173351,173370],{"__ignoreMap":29},[34,173328,173329,173331],{"class":36,"line":37},[34,173330,32036],{"class":55},[34,173332,46967],{"class":40},[34,173334,173335],{"class":36,"line":165},[34,173336,1475],{"emptyLinePlaceholder":1474},[34,173338,173339,173341,173343,173345,173347,173349],{"class":36,"line":171},[34,173340,723],{"class":44},[34,173342,173164],{"class":40},[34,173344,394],{"class":44},[34,173346,48],{"class":40},[34,173348,410],{"class":44},[34,173350,296],{"class":40},[34,173352,173353,173355,173358,173360,173362,173364,173366,173368],{"class":36,"line":182},[34,173354,723],{"class":44},[34,173356,173357],{"class":40},"(random.choice([",[34,173359,151251],{"class":504},[34,173361,48],{"class":40},[34,173363,152299],{"class":504},[34,173365,48],{"class":40},[34,173367,161094],{"class":504},[34,173369,34784],{"class":40},[34,173371,173372,173374,173377,173379,173381,173383,173385,173387,173389,173391,173393,173395,173397,173399],{"class":36,"line":188},[34,173373,723],{"class":44},[34,173375,173376],{"class":40},"(random.sample([",[34,173378,394],{"class":44},[34,173380,48],{"class":40},[34,173382,332],{"class":44},[34,173384,48],{"class":40},[34,173386,337],{"class":44},[34,173388,48],{"class":40},[34,173390,247],{"class":44},[34,173392,48],{"class":40},[34,173394,224],{"class":44},[34,173396,113565],{"class":40},[34,173398,332],{"class":44},[34,173400,296],{"class":40},[19,173402,173404],{"id":173403},"_9122-time","9.12.2 time",[24,173406,173408],{"className":26,"code":173407,"language":28,"meta":29,"style":29},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[31,173409,173410,173416,173420,173427,173435],{"__ignoreMap":29},[34,173411,173412,173414],{"class":36,"line":37},[34,173413,32036],{"class":55},[34,173415,33470],{"class":40},[34,173417,173418],{"class":36,"line":165},[34,173419,1475],{"emptyLinePlaceholder":1474},[34,173421,173422,173424],{"class":36,"line":171},[34,173423,723],{"class":44},[34,173425,173426],{"class":40},"(time.time())\n",[34,173428,173429,173431,173433],{"class":36,"line":182},[34,173430,96693],{"class":40},[34,173432,394],{"class":44},[34,173434,101],{"class":40},[34,173436,173437,173439,173441,173444],{"class":36,"line":188},[34,173438,723],{"class":44},[34,173440,286],{"class":40},[34,173442,173443],{"class":504},"\"1秒后执行\"",[34,173445,101],{"class":40},[19,173447,173449],{"id":173448},"_9123-datetime","9.12.3 datetime",[24,173451,173453],{"className":26,"code":173452,"language":28,"meta":29,"style":29},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[31,173454,173455,173467,173471,173481,173488],{"__ignoreMap":29},[34,173456,173457,173459,173462,173464],{"class":36,"line":37},[34,173458,32379],{"class":55},[34,173460,173461],{"class":40}," datetime ",[34,173463,32036],{"class":55},[34,173465,173466],{"class":40}," datetime\n",[34,173468,173469],{"class":36,"line":165},[34,173470,1475],{"emptyLinePlaceholder":1474},[34,173472,173473,173476,173478],{"class":36,"line":171},[34,173474,173475],{"class":40},"now ",[34,173477,221],{"class":55},[34,173479,173480],{"class":40}," datetime.now()\n",[34,173482,173483,173485],{"class":36,"line":182},[34,173484,723],{"class":44},[34,173486,173487],{"class":40},"(now)\n",[34,173489,173490,173492,173495,173498,173500,173503],{"class":36,"line":188},[34,173491,723],{"class":44},[34,173493,173494],{"class":40},"(now.strftime(",[34,173496,173497],{"class":504},"\"%Y-%m-",[34,173499,158054],{"class":44},[34,173501,173502],{"class":504}," %H:%M:%S\"",[34,173504,296],{"class":40},[19,173506,173508],{"id":173507},"_9124-os","9.12.4 os",[24,173510,173512],{"className":26,"code":173511,"language":28,"meta":29,"style":29},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[31,173513,173514,173520,173524,173531],{"__ignoreMap":29},[34,173515,173516,173518],{"class":36,"line":37},[34,173517,32036],{"class":55},[34,173519,46944],{"class":40},[34,173521,173522],{"class":36,"line":165},[34,173523,1475],{"emptyLinePlaceholder":1474},[34,173525,173526,173528],{"class":36,"line":171},[34,173527,723],{"class":44},[34,173529,173530],{"class":40},"(os.getcwd())\n",[34,173532,173533,173535,173538,173541],{"class":36,"line":182},[34,173534,723],{"class":44},[34,173536,173537],{"class":40},"(os.listdir(",[34,173539,173540],{"class":504},"\".\"",[34,173542,296],{"class":40},[19,173544,173546],{"id":173545},"_9125-sys","9.12.5 sys",[24,173548,173550],{"className":26,"code":173549,"language":28,"meta":29,"style":29},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[31,173551,173552,173559,173563,173570],{"__ignoreMap":29},[34,173553,173554,173556],{"class":36,"line":37},[34,173555,32036],{"class":55},[34,173557,173558],{"class":40}," sys\n",[34,173560,173561],{"class":36,"line":165},[34,173562,1475],{"emptyLinePlaceholder":1474},[34,173564,173565,173567],{"class":36,"line":171},[34,173566,723],{"class":44},[34,173568,173569],{"class":40},"(sys.version)\n",[34,173571,173572,173574],{"class":36,"line":182},[34,173573,723],{"class":44},[34,173575,173576],{"class":40},"(sys.path)\n",[14,173578,173580,173581,173583,173584,2058],{"id":173579},"_913-if-name-main","9.13 if ",[1165,173582,81447],{}," == \"",[1165,173585,103421],{},[103,173587,173588,173589,173592],{},"模块被直接运行和被导入时，",[31,173590,173591],{},"__name__"," 的值不同。",[103,173594,173595,173596,26264],{},"创建 ",[31,173597,173598],{},"my_module.py",[24,173600,173602],{"className":26,"code":173601,"language":28,"meta":29,"style":29},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[31,173603,173604,173612,173622,173626,173630,173642],{"__ignoreMap":29},[34,173605,173606,173608,173610],{"class":36,"line":37},[34,173607,33588],{"class":55},[34,173609,6860],{"class":3617},[34,173611,152456],{"class":40},[34,173613,173614,173616,173618,173620],{"class":36,"line":165},[34,173615,5743],{"class":55},[34,173617,12519],{"class":40},[34,173619,2277],{"class":55},[34,173621,152467],{"class":40},[34,173623,173624],{"class":36,"line":171},[34,173625,1475],{"emptyLinePlaceholder":1474},[34,173627,173628],{"class":36,"line":182},[34,173629,1475],{"emptyLinePlaceholder":1474},[34,173631,173632,173634,173636,173638,173640],{"class":36,"line":188},[34,173633,3189],{"class":55},[34,173635,32862],{"class":44},[34,173637,102922],{"class":55},[34,173639,102925],{"class":504},[34,173641,5392],{"class":40},[34,173643,173644,173646,173648,173650,173652,173654],{"class":36,"line":518},[34,173645,32941],{"class":44},[34,173647,167963],{"class":40},[34,173649,394],{"class":44},[34,173651,48],{"class":40},[34,173653,332],{"class":44},[34,173655,296],{"class":40},[103,173657,173658],{},"作用：",[1772,173660,173661,173664],{},[1775,173662,173663],{},"直接运行该文件时，执行测试代码。",[1775,173665,173666],{},"被其他文件导入时，不执行测试代码。",[103,173668,173669],{},"这是写模块时很常用的习惯。",[14,173671,173673],{"id":173672},"_914-包","9.14 包",[103,173675,173676,173677,173680],{},"包是包含 ",[31,173678,173679],{},"__init__.py"," 的目录，用于组织多个模块。",[103,173682,173683],{},"目录结构：",[24,173685,173688],{"className":173686,"code":173687,"language":6838,"meta":29},[6836],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[31,173689,173687],{"__ignoreMap":29},[103,173691,173692],{},"导入：",[24,173694,173696],{"className":26,"code":173695,"language":28,"meta":29,"style":29},"from utils.file_utils import read_file\n",[31,173697,173698],{"__ignoreMap":29},[34,173699,173700,173702,173705,173707],{"class":36,"line":37},[34,173701,32379],{"class":55},[34,173703,173704],{"class":40}," utils.file_utils ",[34,173706,32036],{"class":55},[34,173708,173709],{"class":40}," read_file\n",[103,173711,173712,173714],{},[31,173713,173679],{}," 可以为空，也可以写包初始化逻辑。",[14,173716,173718],{"id":173717},"_915-第三方包","9.15 第三方包",[103,173720,173721,173722,173724],{},"第三方包通过 ",[31,173723,25476],{}," 安装。",[24,173726,173728],{"className":25467,"code":173727,"language":25469,"meta":29,"style":29},"pip install requests\n",[31,173729,173730],{"__ignoreMap":29},[34,173731,173732,173734,173736],{"class":36,"line":37},[34,173733,25476],{"class":3617},[34,173735,25479],{"class":504},[34,173737,147461],{"class":504},[103,173739,173740],{},"使用：",[24,173742,173744],{"className":26,"code":173743,"language":28,"meta":29,"style":29},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[31,173745,173746,173752,173756,173771],{"__ignoreMap":29},[34,173747,173748,173750],{"class":36,"line":37},[34,173749,32036],{"class":55},[34,173751,147461],{"class":40},[34,173753,173754],{"class":36,"line":165},[34,173755,1475],{"emptyLinePlaceholder":1474},[34,173757,173758,173761,173763,173766,173769],{"class":36,"line":171},[34,173759,173760],{"class":40},"response ",[34,173762,221],{"class":55},[34,173764,173765],{"class":40}," requests.get(",[34,173767,173768],{"class":504},"\"https:\u002F\u002Fwww.example.com\"",[34,173770,101],{"class":40},[34,173772,173773,173775],{"class":36,"line":182},[34,173774,723],{"class":44},[34,173776,173777],{"class":40},"(response.status_code)\n",[103,173779,173780],{},"查看已安装包：",[24,173782,173784],{"className":25467,"code":173783,"language":25469,"meta":29,"style":29},"pip list\n",[31,173785,173786],{"__ignoreMap":29},[34,173787,173788,173790],{"class":36,"line":37},[34,173789,25476],{"class":3617},[34,173791,120318],{"class":504},[103,173793,173794],{},"导出项目依赖：",[24,173796,173797],{"className":25467,"code":147656,"language":25469,"meta":29,"style":29},[31,173798,173799],{"__ignoreMap":29},[34,173800,173801,173803,173805,173807],{"class":36,"line":37},[34,173802,25476],{"class":3617},[34,173804,147665],{"class":504},[34,173806,27868],{"class":55},[34,173808,147670],{"class":504},[103,173810,173811],{},"安装项目依赖：",[24,173813,173814],{"className":25467,"code":147676,"language":25469,"meta":29,"style":29},[31,173815,173816],{"__ignoreMap":29},[34,173817,173818,173820,173822,173824],{"class":36,"line":37},[34,173819,25476],{"class":3617},[34,173821,25479],{"class":504},[34,173823,121002],{"class":44},[34,173825,147670],{"class":504},[14,173827,173829],{"id":173828},"_916-模块搜索路径","9.16 模块搜索路径",[103,173831,173832,173833,173836],{},"Python 导入模块时会在 ",[31,173834,173835],{},"sys.path"," 中查找。",[24,173838,173840],{"className":26,"code":173839,"language":28,"meta":29,"style":29},"import sys\n\nfor path in sys.path:\n    print(path)\n",[31,173841,173842,173848,173852,173864],{"__ignoreMap":29},[34,173843,173844,173846],{"class":36,"line":37},[34,173845,32036],{"class":55},[34,173847,173558],{"class":40},[34,173849,173850],{"class":36,"line":165},[34,173851,1475],{"emptyLinePlaceholder":1474},[34,173853,173854,173856,173859,173861],{"class":36,"line":171},[34,173855,4678],{"class":55},[34,173857,173858],{"class":40}," path ",[34,173860,27689],{"class":55},[34,173862,173863],{"class":40}," sys.path:\n",[34,173865,173866,173868],{"class":36,"line":182},[34,173867,32941],{"class":44},[34,173869,170592],{"class":40},[103,173871,173872],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[103,173874,158986],{},[24,173876,173879],{"className":173877,"code":173878,"language":6838,"meta":29},[6836],"random.py\njson.py\ntime.py\n",[31,173880,173878],{"__ignoreMap":29},[103,173882,173883],{},"这些文件名可能导致导入异常。",[14,173885,173887],{"id":173886},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[103,173889,173683],{},[24,173891,173894],{"className":173892,"code":173893,"language":6838,"meta":29},[6836],"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",[31,173895,173893],{"__ignoreMap":29},[103,173897,173898,26264],{},[31,173899,173900],{},"utils\u002Ffile_utils.py",[24,173902,173904],{"className":26,"code":173903,"language":28,"meta":29,"style":29},"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",[31,173905,173906,173912,173922,173926,173930,173940,173950,173958,173964,173968,173995,174005,174009,174013,174023,174049],{"__ignoreMap":29},[34,173907,173908,173910],{"class":36,"line":37},[34,173909,32036],{"class":55},[34,173911,148454],{"class":40},[34,173913,173914,173916,173918,173920],{"class":36,"line":165},[34,173915,32379],{"class":55},[34,173917,109674],{"class":40},[34,173919,32036],{"class":55},[34,173921,109679],{"class":40},[34,173923,173924],{"class":36,"line":171},[34,173925,1475],{"emptyLinePlaceholder":1474},[34,173927,173928],{"class":36,"line":182},[34,173929,1475],{"emptyLinePlaceholder":1474},[34,173931,173932,173934,173937],{"class":36,"line":188},[34,173933,33588],{"class":55},[34,173935,173936],{"class":3617}," read_json",[34,173938,173939],{"class":40},"(path):\n",[34,173941,173942,173945,173947],{"class":36,"line":518},[34,173943,173944],{"class":40},"    path ",[34,173946,221],{"class":55},[34,173948,173949],{"class":40}," Path(path)\n",[34,173951,173952,173954,173956],{"class":36,"line":524},[34,173953,4754],{"class":55},[34,173955,40571],{"class":55},[34,173957,170673],{"class":40},[34,173959,173960,173962],{"class":36,"line":530},[34,173961,16398],{"class":55},[34,173963,53477],{"class":40},[34,173965,173966],{"class":36,"line":624},[34,173967,1475],{"emptyLinePlaceholder":1474},[34,173969,173970,173972,173974,173977,173979,173981,173983,173985,173987,173989,173991,173993],{"class":36,"line":630},[34,173971,35819],{"class":55},[34,173973,148154],{"class":44},[34,173975,173976],{"class":40},"(path, ",[34,173978,148164],{"class":504},[34,173980,48],{"class":40},[34,173982,148169],{"class":51},[34,173984,221],{"class":55},[34,173986,148174],{"class":504},[34,173988,372],{"class":40},[34,173990,33025],{"class":55},[34,173992,149516],{"class":51},[34,173994,5392],{"class":40},[34,173996,173997,173999,174001,174003],{"class":36,"line":636},[34,173998,16398],{"class":55},[34,174000,149527],{"class":40},[34,174002,46993],{"class":51},[34,174004,101],{"class":40},[34,174006,174007],{"class":36,"line":1513},[34,174008,1475],{"emptyLinePlaceholder":1474},[34,174010,174011],{"class":36,"line":1519},[34,174012,1475],{"emptyLinePlaceholder":1474},[34,174014,174015,174017,174020],{"class":36,"line":3283},[34,174016,33588],{"class":55},[34,174018,174019],{"class":3617}," write_json",[34,174021,174022],{"class":40},"(path, data):\n",[34,174024,174025,174027,174029,174031,174033,174035,174037,174039,174041,174043,174045,174047],{"class":36,"line":3297},[34,174026,35819],{"class":55},[34,174028,148154],{"class":44},[34,174030,173976],{"class":40},[34,174032,153339],{"class":504},[34,174034,48],{"class":40},[34,174036,148169],{"class":51},[34,174038,221],{"class":55},[34,174040,148174],{"class":504},[34,174042,372],{"class":40},[34,174044,33025],{"class":55},[34,174046,149516],{"class":51},[34,174048,5392],{"class":40},[34,174050,174051,174054,174056,174058,174060,174062,174064,174066,174068,174070,174072],{"class":36,"line":3302},[34,174052,174053],{"class":40},"        json.dump(data, ",[34,174055,46993],{"class":51},[34,174057,48],{"class":40},[34,174059,148500],{"class":51},[34,174061,221],{"class":55},[34,174063,35628],{"class":44},[34,174065,48],{"class":40},[34,174067,153375],{"class":51},[34,174069,221],{"class":55},[34,174071,332],{"class":44},[34,174073,101],{"class":40},[103,174075,174076,26264],{},[31,174077,155970],{},[24,174079,174081],{"className":26,"code":174080,"language":28,"meta":29,"style":29},"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",[31,174082,174083,174094,174098,174111,174131],{"__ignoreMap":29},[34,174084,174085,174087,174089,174091],{"class":36,"line":37},[34,174086,32379],{"class":55},[34,174088,173704],{"class":40},[34,174090,32036],{"class":55},[34,174092,174093],{"class":40}," read_json, write_json\n",[34,174095,174096],{"class":36,"line":165},[34,174097,1475],{"emptyLinePlaceholder":1474},[34,174099,174100,174102,174104,174107,174109],{"class":36,"line":171},[34,174101,161079],{"class":40},[34,174103,221],{"class":55},[34,174105,174106],{"class":40}," read_json(",[34,174108,153194],{"class":504},[34,174110,101],{"class":40},[34,174112,174113,174115,174117,174119,174121,174123,174125,174127,174129],{"class":36,"line":182},[34,174114,171897],{"class":40},[34,174116,64318],{"class":504},[34,174118,53076],{"class":40},[34,174120,151251],{"class":504},[34,174122,48],{"class":40},[34,174124,152835],{"class":504},[34,174126,53076],{"class":40},[34,174128,2780],{"class":44},[34,174130,166515],{"class":40},[34,174132,174133,174136,174138],{"class":36,"line":188},[34,174134,174135],{"class":40},"write_json(",[34,174137,153194],{"class":504},[34,174139,174140],{"class":40},", students)\n",[14,174142,174144],{"id":174143},"_918-易错点","9.18 易错点",[1772,174146,174147,174150,174155,174160,174163,174166],{},[1775,174148,174149],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[1775,174151,174152,174153,30031],{},"能指定异常类型就不要裸写 ",[31,174154,172257],{},[1775,174156,174157,174159],{},[31,174158,172632],{}," 无论是否出错都会执行。",[1775,174161,174162],{},"模块文件名不要和标准库重名。",[1775,174164,174165],{},"导入自己写的模块时，要注意运行目录。",[1775,174167,174168],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174170,174172],{"id":174171},"_919-本章练习","9.19 本章练习",[1772,174174,174175,174178,174181,174187,174194],{},[1775,174176,174177],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[1775,174179,174180],{},"写函数读取文件，如果文件不存在则返回空字符串。",[1775,174182,173595,174183,174186],{},[31,174184,174185],{},"math_utils.py","，实现加减乘除函数并导入使用。",[1775,174188,174189,174190,174193],{},"创建一个 ",[31,174191,174192],{},"utils"," 包，把 JSON 读写函数放进去。",[1775,174195,174196],{},"写一个程序，捕获除零异常和输入格式异常。",[1711,174198,174199],{},"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":29,"searchDepth":165,"depth":165,"links":174201},[174202,174203,174204,174205,174206,174207,174208,174209,174210,174211,174212,174218,174225,174227,174228,174229,174230,174231,174232],{"id":172054,"depth":165,"text":172055},{"id":172182,"depth":165,"text":172183},{"id":172231,"depth":165,"text":172232},{"id":172380,"depth":165,"text":172381},{"id":172552,"depth":165,"text":172553},{"id":172621,"depth":165,"text":172622},{"id":172732,"depth":165,"text":172733},{"id":172858,"depth":165,"text":172859},{"id":172983,"depth":165,"text":172984},{"id":173038,"depth":165,"text":173039},{"id":173137,"depth":165,"text":173138,"children":174213},[174214,174215,174216,174217],{"id":173141,"depth":171,"text":173142},{"id":173175,"depth":171,"text":173176},{"id":173214,"depth":171,"text":173215},{"id":173293,"depth":171,"text":173294},{"id":173316,"depth":165,"text":173317,"children":174219},[174220,174221,174222,174223,174224],{"id":173320,"depth":171,"text":173321},{"id":173403,"depth":171,"text":173404},{"id":173448,"depth":171,"text":173449},{"id":173507,"depth":171,"text":173508},{"id":173545,"depth":171,"text":173546},{"id":173579,"depth":165,"text":174226},"9.13 if name == \"main\"",{"id":173672,"depth":165,"text":173673},{"id":173717,"depth":165,"text":173718},{"id":173828,"depth":165,"text":173829},{"id":173886,"depth":165,"text":173887},{"id":174143,"depth":165,"text":174144},{"id":174171,"depth":165,"text":174172},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172046,"description":1744},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174239,"title":174240,"body":174241,"description":174404,"extension":1745,"meta":174405,"navigation":1474,"path":174406,"seo":174407,"stem":174408,"__hash__":174409},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174242,"toc":174399},[174243,174246,174249,174252,174263,174265,174339,174342,174345,174348,174351,174354,174357,174360,174363,174366,174369],[10,174244,174240],{"id":174245},"python教程",[103,174247,174248],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[103,174250,174251],{},"建议学习环境：",[1772,174253,174254,174257,174260],{},[1775,174255,174256],{},"Python 版本：Python 3.10 及以上。",[1775,174258,174259],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[1775,174261,174262],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174264,118441],{"id":118441},[1772,174266,174267,174273,174279,174285,174291,174297,174303,174309,174315,174321,174327,174333],{},[1775,174268,174269],{},[236,174270,174272],{"href":174271},".\u002Fch1-Python","Python环境与第一个程序",[1775,174274,174275],{},[236,174276,174278],{"href":174277},".\u002Fch2","基础语法、变量与字符串",[1775,174280,174281],{},[236,174282,174284],{"href":174283},".\u002Fch3","判断语句",[1775,174286,174287],{},[236,174288,174290],{"href":174289},".\u002Fch4","循环语句",[1775,174292,174293],{},[236,174294,174296],{"href":174295},".\u002Fch5","函数基础",[1775,174298,174299],{},[236,174300,174302],{"href":174301},".\u002Fch6","数据容器",[1775,174304,174305],{},[236,174306,174308],{"href":174307},".\u002Fch7","函数进阶",[1775,174310,174311],{},[236,174312,174314],{"href":174313},".\u002Fch8","文件操作",[1775,174316,174317],{},[236,174318,174320],{"href":174319},".\u002Fch9","异常、模块与包",[1775,174322,174323],{},[236,174324,174326],{"href":174325},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[1775,174328,174329],{},[236,174330,174332],{"href":174331},".\u002Fch11","面向对象基础",[1775,174334,174335],{},[236,174336,174338],{"href":174337},".\u002Fch12","综合案例与复习路线",[14,174340,174341],{"id":174341},"学习路线",[103,174343,174344],{},"第一阶段：能运行程序。",[103,174346,174347],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[103,174349,174350],{},"第二阶段：能组织数据。",[103,174352,174353],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[103,174355,174356],{},"第三阶段：能封装逻辑。",[103,174358,174359],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[103,174361,174362],{},"第四阶段：能做小项目。",[103,174364,174365],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174367,174368],{"id":174368},"参考资料",[1772,174370,174371,174378,174385,174392],{},[1775,174372,174373,174374],{},"黑马程序员 Python 入门教程推荐：",[236,174375,174376],{"href":174376,"rel":174377},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25510],[1775,174379,174380,174381],{},"Python 官方中文教程：",[236,174382,174383],{"href":174383,"rel":174384},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25510],[1775,174386,174387,174388],{},"Python 标准库文档：",[236,174389,174390],{"href":174390,"rel":174391},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25510],[1775,174393,174394,174395],{},"pyecharts 文档：",[236,174396,174397],{"href":174397,"rel":174398},"https:\u002F\u002Fpyecharts.org\u002F",[25510],{"title":29,"searchDepth":165,"depth":165,"links":174400},[174401,174402,174403],{"id":118441,"depth":165,"text":118441},{"id":174341,"depth":165,"text":174341},{"id":174368,"depth":165,"text":174368},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25023},"\u002Fwiki\u002F2024-10-10-python",{"title":174240,"description":174404},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331444795]