[{"data":1,"prerenderedAt":173332},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-shu-zu-pai-xu":3,"wiki-doc-nav":459},{"id":4,"title":5,"body":6,"description":451,"extension":452,"meta":453,"navigation":454,"path":455,"seo":456,"stem":457,"__hash__":458},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":8,"toc":449},"minimark",[9,13,17,20,23,26,120,123,445],[10,11,5],"h1",{"id":12},"_13数组排序",[14,15,16],"p",{},"排序主要用到的方法是np.sort和np.argsort",[14,18,19],{},"其中np.sort()对数组直接排序",[14,21,22],{},"而np.argsort()是返回排序后的原始索引",[14,24,25],{},"①一维数组",[27,28,33],"pre",{"className":29,"code":30,"language":31,"meta":32,"style":32},"language-python shiki shiki-themes github-light github-dark","#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n","python","",[34,35,36,45,102,111],"code",{"__ignoreMap":32},[37,38,41],"span",{"class":39,"line":40},"line",1,[37,42,44],{"class":43},"sJ8bj","#创建一维数组\n",[37,46,48,52,56,59,63,66,69,71,74,76,79,81,84,86,89,91,94,96,99],{"class":39,"line":47},2,[37,49,51],{"class":50},"sVt8B","a",[37,53,55],{"class":54},"szBVR","=",[37,57,58],{"class":50},"np.array([",[37,60,62],{"class":61},"sj4cs","3",[37,64,65],{"class":50},",",[37,67,68],{"class":61},"12",[37,70,65],{"class":50},[37,72,73],{"class":61},"8",[37,75,65],{"class":50},[37,77,78],{"class":61},"23",[37,80,65],{"class":50},[37,82,83],{"class":61},"67",[37,85,65],{"class":50},[37,87,88],{"class":61},"123",[37,90,65],{"class":50},[37,92,93],{"class":61},"6",[37,95,65],{"class":50},[37,97,98],{"class":61},"10",[37,100,101],{"class":50},"])\n",[37,103,105,108],{"class":39,"line":104},3,[37,106,107],{"class":50},"np.sort(a)",[37,109,110],{"class":43},"#升序排序\n",[37,112,114,117],{"class":39,"line":113},4,[37,115,116],{"class":50},"np.argsort(a)",[37,118,119],{"class":43},"#按照元素大小来索引排序\n",[14,121,122],{},"②二维数组",[27,124,126],{"className":29,"code":125,"language":31,"meta":32,"style":32},"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",[34,127,128,142,176,181,187,193,199,205,211,216,225,230,236,242,248,254,259,265,281,286,292,298,304,310,315,321,335,340,345,350,355,360,365,371,390,396,407,413,418,423,429,434,440],{"__ignoreMap":32},[37,129,130,133,136,139],{"class":39,"line":40},[37,131,132],{"class":50},"np.random.seed(",[37,134,135],{"class":61},"0",[37,137,138],{"class":50},")",[37,140,141],{"class":43},"#保证每次值一样\n",[37,143,144,147,149,152,155,157,161,163,166,169,171,173],{"class":39,"line":47},[37,145,146],{"class":50},"aa",[37,148,55],{"class":54},[37,150,151],{"class":50},"np.random.randint(",[37,153,154],{"class":61},"100",[37,156,65],{"class":50},[37,158,160],{"class":159},"s4XuR","size",[37,162,55],{"class":54},[37,164,165],{"class":50},"(",[37,167,168],{"class":61},"4",[37,170,65],{"class":50},[37,172,93],{"class":61},[37,174,175],{"class":50},"))\n",[37,177,178],{"class":39,"line":104},[37,179,180],{"class":43},"#原数组：\n",[37,182,183],{"class":39,"line":113},[37,184,186],{"class":185},"sZZnC","'''\n",[37,188,190],{"class":39,"line":189},5,[37,191,192],{"class":185},"array([[44, 47, 64, 67, 67,  9],\n",[37,194,196],{"class":39,"line":195},6,[37,197,198],{"class":185},"       [83, 21, 36, 87, 70, 88],\n",[37,200,202],{"class":39,"line":201},7,[37,203,204],{"class":185},"       [88, 12, 58, 65, 39, 87],\n",[37,206,208],{"class":39,"line":207},8,[37,209,210],{"class":185},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[37,212,214],{"class":39,"line":213},9,[37,215,186],{"class":185},[37,217,219,222],{"class":39,"line":218},10,[37,220,221],{"class":50},"np.sort(aa)",[37,223,224],{"class":43},"#每行进行了排序\n",[37,226,228],{"class":39,"line":227},11,[37,229,186],{"class":185},[37,231,233],{"class":39,"line":232},12,[37,234,235],{"class":185},"array([[ 9, 44, 47, 64, 67, 67],\n",[37,237,239],{"class":39,"line":238},13,[37,240,241],{"class":185},"       [21, 36, 70, 83, 87, 88],\n",[37,243,245],{"class":39,"line":244},14,[37,246,247],{"class":185},"       [12, 39, 58, 65, 87, 88],\n",[37,249,251],{"class":39,"line":250},15,[37,252,253],{"class":185},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[37,255,257],{"class":39,"line":256},16,[37,258,186],{"class":185},[37,260,262],{"class":39,"line":261},17,[37,263,264],{"class":43},"#axis=0时\n",[37,266,268,271,274,276,278],{"class":39,"line":267},18,[37,269,270],{"class":50},"np.sort(aa,",[37,272,273],{"class":159},"axis",[37,275,55],{"class":54},[37,277,135],{"class":61},[37,279,280],{"class":50},")\n",[37,282,284],{"class":39,"line":283},19,[37,285,186],{"class":185},[37,287,289],{"class":39,"line":288},20,[37,290,291],{"class":185},"array([[44, 12, 36, 37, 25,  9],\n",[37,293,295],{"class":39,"line":294},21,[37,296,297],{"class":185},"       [46, 21, 58, 65, 39, 77],\n",[37,299,301],{"class":39,"line":300},22,[37,302,303],{"class":185},"       [83, 47, 64, 67, 67, 87],\n",[37,305,307],{"class":39,"line":306},23,[37,308,309],{"class":185},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[37,311,313],{"class":39,"line":312},24,[37,314,186],{"class":185},[37,316,318],{"class":39,"line":317},25,[37,319,320],{"class":43},"#axis=1时,为默认值\n",[37,322,324,326,328,330,333],{"class":39,"line":323},26,[37,325,270],{"class":50},[37,327,273],{"class":159},[37,329,55],{"class":54},[37,331,332],{"class":61},"1",[37,334,280],{"class":50},[37,336,338],{"class":39,"line":337},27,[37,339,186],{"class":185},[37,341,343],{"class":39,"line":342},28,[37,344,235],{"class":185},[37,346,348],{"class":39,"line":347},29,[37,349,241],{"class":185},[37,351,353],{"class":39,"line":352},30,[37,354,247],{"class":185},[37,356,358],{"class":39,"line":357},31,[37,359,253],{"class":185},[37,361,363],{"class":39,"line":362},32,[37,364,186],{"class":185},[37,366,368],{"class":39,"line":367},33,[37,369,370],{"class":43},"#按最后一列排序\n",[37,372,374,377,379,382,385,387],{"class":39,"line":373},34,[37,375,376],{"class":50},"b",[37,378,55],{"class":54},[37,380,381],{"class":50},"aa[:,",[37,383,384],{"class":54},"-",[37,386,332],{"class":61},[37,388,389],{"class":50},"]\n",[37,391,393],{"class":39,"line":392},35,[37,394,395],{"class":43},"#获取最后一列排好序的索引\n",[37,397,399,402,404],{"class":39,"line":398},36,[37,400,401],{"class":50},"index",[37,403,55],{"class":54},[37,405,406],{"class":50},"np.argsort(b)\n",[37,408,410],{"class":39,"line":409},37,[37,411,412],{"class":50},"aa[index]\n",[37,414,416],{"class":39,"line":415},38,[37,417,186],{"class":185},[37,419,421],{"class":39,"line":420},39,[37,422,192],{"class":185},[37,424,426],{"class":39,"line":425},40,[37,427,428],{"class":185},"       [46, 88, 81, 37, 25, 77],\n",[37,430,432],{"class":39,"line":431},41,[37,433,204],{"class":185},[37,435,437],{"class":39,"line":436},42,[37,438,439],{"class":185},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[37,441,443],{"class":39,"line":442},43,[37,444,186],{"class":185},[446,447,448],"style",{},"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":32,"searchDepth":47,"depth":47,"links":450},[],null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":5,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",[460,5511,6618,8038,11020,12371,13860,14949,23712,23724,24323,24349,24473,24714,24779,24797,24810,24857,24981,25150,25349,25529,25734,25870,25965,26002,26015,26325,27066,27774,27795,28815,30446,30597,30610,30622,30920,50729,50744,50761,50794,53666,77013,93158,93179,93292,93412,94178,94840,95157,95195,95301,95401,95444,95470,95531,97185,97286,97311,97802,98302,99382,99665,100407,100909,100921,102937,104601,106104,107802,109719,111638,113660,117130,117562,118025,118774,121718,122066,122088,122444,125751,125763,126166,126189,126336,126503,126708,127009,127566,128223,130154,131752,132401,133895,135326,136561,138255,140007,142417,142533,143468,143679,144564,145799,146027,146040,147195,149607,151975,155296,157773,159417,161194,163207,166259,168439,170966,173160],{"id":461,"title":462,"body":463,"description":32,"extension":452,"meta":5506,"navigation":454,"path":5507,"seo":5508,"stem":5509,"__hash__":5510},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":464,"toc":5478},[465,468,473,476,480,493,497,502,505,508,511,514,517,543,547,550,553,556,559,608,612,630,632,646,649,657,660,1507,1514,1531,1535,1621,1625,1631,1717,1721,1759,1763,1827,1831,1835,1842,1853,1857,1862,1866,1871,1875,1880,1884,1888,1893,2144,2149,2287,2292,2549,2552,2560,2564,2569,2672,2675,2974,2983,3084,3087,3090,3093,3096,3356,3361,3501,3504,3683,3686,3814,3817,3969,3973,3978,3981,3992,4000,4003,4110,4114,4118,4123,4173,4178,4183,4207,4212,4265,4268,4273,4450,4455,4740,4745,5141,5145,5150,5207,5212,5220,5223,5363,5366,5475],[10,466,462],{"id":467},"_1基础入门",[469,470,472],"h2",{"id":471},"_11注释","1.1注释",[14,474,475],{},"\u002F\u002F或者\u002F* *\u002F",[469,477,479],{"id":478},"_12命名","1.2命名",[481,482,483,487,490],"ol",{},[484,485,486],"li",{},"字母数字下划线",[484,488,489],{},"开头必须是字母或_",[484,491,492],{},"不能使用关键词",[469,494,496],{"id":495},"_13数据类型","1.3数据类型",[498,499,501],"h3",{"id":500},"_131整形","1.3.1整形",[14,503,504],{},"short 短整形 2",[14,506,507],{},"int 整形 4",[14,509,510],{},"long 长整形 win4 linux32位4 linux64位8",[14,512,513],{},"long long 长长整形 8",[14,515,516],{},"利用sizeof可以求数据类型占用的内存空间大小",[27,518,522],{"className":519,"code":520,"language":521,"meta":32,"style":32},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[34,523,524,536],{"__ignoreMap":32},[37,525,526,529,531,534],{"class":39,"line":40},[37,527,528],{"class":54},"sizeof",[37,530,165],{"class":50},[37,532,533],{"class":54},"int",[37,535,280],{"class":50},[37,537,538,540],{"class":39,"line":47},[37,539,528],{"class":54},[37,541,542],{"class":50},"(num)\n",[498,544,546],{"id":545},"_132浮点型","1.3.2浮点型",[14,548,549],{},"float 单精度 4节 7位有效数字",[14,551,552],{},"double 双精度 8节 15-16有效数字",[14,554,555],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,557,558],{},"注意点：",[27,560,562],{"className":519,"code":561,"language":521,"meta":32,"style":32},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[34,563,564,586],{"__ignoreMap":32},[37,565,566,569,572,574,577,580,583],{"class":39,"line":40},[37,567,568],{"class":54},"float",[37,570,571],{"class":50}," f1",[37,573,55],{"class":54},[37,575,576],{"class":61},"3.14",[37,578,579],{"class":54},"f",[37,581,582],{"class":50},";",[37,584,585],{"class":43}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[37,587,588,590,593,595,597,600,603,605],{"class":39,"line":47},[37,589,568],{"class":54},[37,591,592],{"class":50}," f2",[37,594,55],{"class":54},[37,596,62],{"class":61},[37,598,599],{"class":54},"e",[37,601,602],{"class":61},"2",[37,604,582],{"class":50},[37,606,607],{"class":43}," \u002F\u002F科学记数法\n",[498,609,611],{"id":610},"_133字符型","1.3.3字符型",[27,613,615],{"className":519,"code":614,"language":521,"meta":32,"style":32},"char ch='a'\n",[34,616,617],{"__ignoreMap":32},[37,618,619,622,625,627],{"class":39,"line":40},[37,620,621],{"class":54},"char",[37,623,624],{"class":50}," ch",[37,626,55],{"class":54},[37,628,629],{"class":185},"'a'\n",[14,631,558],{},[481,633,634,637,640,643],{},[484,635,636],{},"在显示字符型变量时，只能单引号，双引号x",[484,638,639],{},"单引号内只能一个字符，不能字符串",[484,641,642],{},"c和c++字符型变量只占用一个字符",[484,644,645],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,647,648],{},"ASCII码大致由以下两部分组成：",[481,650,651,654],{},[484,652,653],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[484,655,656],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,658,659],{},"ASCII码表格：",[661,662,663,707],"table",{},[664,665,666],"thead",{},[667,668,669,677,682,686,691,695,699,703],"tr",{},[670,671,672,676],"th",{},[673,674,675],"strong",{},"ASCII","值",[670,678,679],{},[673,680,681],{},"控制字符",[670,683,684,676],{},[673,685,675],{},[670,687,688],{},[673,689,690],{},"字符",[670,692,693,676],{},[673,694,675],{},[670,696,697],{},[673,698,690],{},[670,700,701,676],{},[673,702,675],{},[670,704,705],{},[673,706,690],{},[708,709,710,736,760,784,808,832,857,881,906,930,955,980,1006,1030,1055,1081,1107,1131,1156,1181,1206,1231,1256,1281,1305,1330,1355,1381,1405,1430,1455,1481],"tbody",{},[667,711,712,715,718,721,724,727,730,733],{},[713,714,135],"td",{},[713,716,717],{},"NUT",[713,719,720],{},"32",[713,722,723],{},"(space)",[713,725,726],{},"64",[713,728,729],{},"@",[713,731,732],{},"96",[713,734,735],{},"、",[667,737,738,740,743,746,749,752,755,758],{},[713,739,332],{},[713,741,742],{},"SOH",[713,744,745],{},"33",[713,747,748],{},"!",[713,750,751],{},"65",[713,753,754],{},"A",[713,756,757],{},"97",[713,759,51],{},[667,761,762,764,767,770,773,776,779,782],{},[713,763,602],{},[713,765,766],{},"STX",[713,768,769],{},"34",[713,771,772],{},"\"",[713,774,775],{},"66",[713,777,778],{},"B",[713,780,781],{},"98",[713,783,376],{},[667,785,786,788,791,794,797,799,802,805],{},[713,787,62],{},[713,789,790],{},"ETX",[713,792,793],{},"35",[713,795,796],{},"#",[713,798,83],{},[713,800,801],{},"C",[713,803,804],{},"99",[713,806,807],{},"c",[667,809,810,812,815,818,821,824,827,829],{},[713,811,168],{},[713,813,814],{},"EOT",[713,816,817],{},"36",[713,819,820],{},"$",[713,822,823],{},"68",[713,825,826],{},"D",[713,828,154],{},[713,830,831],{},"d",[667,833,834,837,840,843,846,849,852,855],{},[713,835,836],{},"5",[713,838,839],{},"ENQ",[713,841,842],{},"37",[713,844,845],{},"%",[713,847,848],{},"69",[713,850,851],{},"E",[713,853,854],{},"101",[713,856,599],{},[667,858,859,861,864,867,870,873,876,879],{},[713,860,93],{},[713,862,863],{},"ACK",[713,865,866],{},"38",[713,868,869],{},"&",[713,871,872],{},"70",[713,874,875],{},"F",[713,877,878],{},"102",[713,880,579],{},[667,882,883,886,889,892,894,897,900,903],{},[713,884,885],{},"7",[713,887,888],{},"BEL",[713,890,891],{},"39",[713,893,65],{},[713,895,896],{},"71",[713,898,899],{},"G",[713,901,902],{},"103",[713,904,905],{},"g",[667,907,908,910,913,916,918,921,924,927],{},[713,909,73],{},[713,911,912],{},"BS",[713,914,915],{},"40",[713,917,165],{},[713,919,920],{},"72",[713,922,923],{},"H",[713,925,926],{},"104",[713,928,929],{},"h",[667,931,932,935,938,941,943,946,949,952],{},[713,933,934],{},"9",[713,936,937],{},"HT",[713,939,940],{},"41",[713,942,138],{},[713,944,945],{},"73",[713,947,948],{},"I",[713,950,951],{},"105",[713,953,954],{},"i",[667,956,957,959,962,965,968,971,974,977],{},[713,958,98],{},[713,960,961],{},"LF",[713,963,964],{},"42",[713,966,967],{},"*",[713,969,970],{},"74",[713,972,973],{},"J",[713,975,976],{},"106",[713,978,979],{},"j",[667,981,982,985,988,991,994,997,1000,1003],{},[713,983,984],{},"11",[713,986,987],{},"VT",[713,989,990],{},"43",[713,992,993],{},"+",[713,995,996],{},"75",[713,998,999],{},"K",[713,1001,1002],{},"107",[713,1004,1005],{},"k",[667,1007,1008,1010,1013,1016,1018,1021,1024,1027],{},[713,1009,68],{},[713,1011,1012],{},"FF",[713,1014,1015],{},"44",[713,1017,65],{},[713,1019,1020],{},"76",[713,1022,1023],{},"L",[713,1025,1026],{},"108",[713,1028,1029],{},"l",[667,1031,1032,1035,1038,1041,1043,1046,1049,1052],{},[713,1033,1034],{},"13",[713,1036,1037],{},"CR",[713,1039,1040],{},"45",[713,1042,384],{},[713,1044,1045],{},"77",[713,1047,1048],{},"M",[713,1050,1051],{},"109",[713,1053,1054],{},"m",[667,1056,1057,1060,1063,1066,1069,1072,1075,1078],{},[713,1058,1059],{},"14",[713,1061,1062],{},"SO",[713,1064,1065],{},"46",[713,1067,1068],{},".",[713,1070,1071],{},"78",[713,1073,1074],{},"N",[713,1076,1077],{},"110",[713,1079,1080],{},"n",[667,1082,1083,1086,1089,1092,1095,1098,1101,1104],{},[713,1084,1085],{},"15",[713,1087,1088],{},"SI",[713,1090,1091],{},"47",[713,1093,1094],{},"\u002F",[713,1096,1097],{},"79",[713,1099,1100],{},"O",[713,1102,1103],{},"111",[713,1105,1106],{},"o",[667,1108,1109,1112,1115,1118,1120,1123,1126,1129],{},[713,1110,1111],{},"16",[713,1113,1114],{},"DLE",[713,1116,1117],{},"48",[713,1119,135],{},[713,1121,1122],{},"80",[713,1124,1125],{},"P",[713,1127,1128],{},"112",[713,1130,14],{},[667,1132,1133,1136,1139,1142,1144,1147,1150,1153],{},[713,1134,1135],{},"17",[713,1137,1138],{},"DCI",[713,1140,1141],{},"49",[713,1143,332],{},[713,1145,1146],{},"81",[713,1148,1149],{},"Q",[713,1151,1152],{},"113",[713,1154,1155],{},"q",[667,1157,1158,1161,1164,1167,1169,1172,1175,1178],{},[713,1159,1160],{},"18",[713,1162,1163],{},"DC2",[713,1165,1166],{},"50",[713,1168,602],{},[713,1170,1171],{},"82",[713,1173,1174],{},"R",[713,1176,1177],{},"114",[713,1179,1180],{},"r",[667,1182,1183,1186,1189,1192,1194,1197,1200,1203],{},[713,1184,1185],{},"19",[713,1187,1188],{},"DC3",[713,1190,1191],{},"51",[713,1193,62],{},[713,1195,1196],{},"83",[713,1198,1199],{},"S",[713,1201,1202],{},"115",[713,1204,1205],{},"s",[667,1207,1208,1211,1214,1217,1219,1222,1225,1228],{},[713,1209,1210],{},"20",[713,1212,1213],{},"DC4",[713,1215,1216],{},"52",[713,1218,168],{},[713,1220,1221],{},"84",[713,1223,1224],{},"T",[713,1226,1227],{},"116",[713,1229,1230],{},"t",[667,1232,1233,1236,1239,1242,1244,1247,1250,1253],{},[713,1234,1235],{},"21",[713,1237,1238],{},"NAK",[713,1240,1241],{},"53",[713,1243,836],{},[713,1245,1246],{},"85",[713,1248,1249],{},"U",[713,1251,1252],{},"117",[713,1254,1255],{},"u",[667,1257,1258,1261,1264,1267,1269,1272,1275,1278],{},[713,1259,1260],{},"22",[713,1262,1263],{},"SYN",[713,1265,1266],{},"54",[713,1268,93],{},[713,1270,1271],{},"86",[713,1273,1274],{},"V",[713,1276,1277],{},"118",[713,1279,1280],{},"v",[667,1282,1283,1285,1288,1291,1293,1296,1299,1302],{},[713,1284,78],{},[713,1286,1287],{},"TB",[713,1289,1290],{},"55",[713,1292,885],{},[713,1294,1295],{},"87",[713,1297,1298],{},"W",[713,1300,1301],{},"119",[713,1303,1304],{},"w",[667,1306,1307,1310,1313,1316,1318,1321,1324,1327],{},[713,1308,1309],{},"24",[713,1311,1312],{},"CAN",[713,1314,1315],{},"56",[713,1317,73],{},[713,1319,1320],{},"88",[713,1322,1323],{},"X",[713,1325,1326],{},"120",[713,1328,1329],{},"x",[667,1331,1332,1335,1338,1341,1343,1346,1349,1352],{},[713,1333,1334],{},"25",[713,1336,1337],{},"EM",[713,1339,1340],{},"57",[713,1342,934],{},[713,1344,1345],{},"89",[713,1347,1348],{},"Y",[713,1350,1351],{},"121",[713,1353,1354],{},"y",[667,1356,1357,1360,1363,1366,1369,1372,1375,1378],{},[713,1358,1359],{},"26",[713,1361,1362],{},"SUB",[713,1364,1365],{},"58",[713,1367,1368],{},":",[713,1370,1371],{},"90",[713,1373,1374],{},"Z",[713,1376,1377],{},"122",[713,1379,1380],{},"z",[667,1382,1383,1386,1389,1392,1394,1397,1400,1402],{},[713,1384,1385],{},"27",[713,1387,1388],{},"ESC",[713,1390,1391],{},"59",[713,1393,582],{},[713,1395,1396],{},"91",[713,1398,1399],{},"[",[713,1401,88],{},[713,1403,1404],{},"{",[667,1406,1407,1410,1413,1416,1419,1422,1424,1427],{},[713,1408,1409],{},"28",[713,1411,1412],{},"FS",[713,1414,1415],{},"60",[713,1417,1418],{},"\u003C",[713,1420,1421],{},"92",[713,1423,1094],{},[713,1425,1426],{},"124",[713,1428,1429],{},"|",[667,1431,1432,1435,1438,1441,1443,1446,1449,1452],{},[713,1433,1434],{},"29",[713,1436,1437],{},"GS",[713,1439,1440],{},"61",[713,1442,55],{},[713,1444,1445],{},"93",[713,1447,1448],{},"]",[713,1450,1451],{},"125",[713,1453,1454],{},"}",[667,1456,1457,1460,1463,1466,1469,1472,1475,1478],{},[713,1458,1459],{},"30",[713,1461,1462],{},"RS",[713,1464,1465],{},"62",[713,1467,1468],{},">",[713,1470,1471],{},"94",[713,1473,1474],{},"^",[713,1476,1477],{},"126",[713,1479,1480],{},"`",[667,1482,1483,1486,1489,1492,1495,1498,1501,1504],{},[713,1484,1485],{},"31",[713,1487,1488],{},"US",[713,1490,1491],{},"63",[713,1493,1494],{},"?",[713,1496,1497],{},"95",[713,1499,1500],{},"_",[713,1502,1503],{},"127",[713,1505,1506],{},"DEL",[14,1508,1509,1510,1513],{},"ASCII 码大致由以下",[673,1511,1512],{},"两部分组","成：",[1515,1516,1517,1524],"ul",{},[484,1518,1519,1520,1523],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[673,1521,1522],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[484,1525,1526,1527,1530],{},"ASCII 打印字符：数字 ",[673,1528,1529],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[498,1532,1534],{"id":1533},"_134转义字符","1.3.4转义字符",[27,1536,1538],{"className":519,"code":1537,"language":521,"meta":32,"style":32},"\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",[34,1539,1540,1545,1561,1575,1580,1593,1598],{"__ignoreMap":32},[37,1541,1542],{"class":39,"line":40},[37,1543,1544],{"class":43},"\u002F\u002F换行符\n",[37,1546,1547,1550,1553,1556,1558],{"class":39,"line":47},[37,1548,1549],{"class":50},"cout ",[37,1551,1552],{"class":54},"\u003C\u003C",[37,1554,1555],{"class":185},"\"hello world\u002Fn\"",[37,1557,582],{"class":50},[37,1559,1560],{"class":43}," \u002F\u002F就等同于如下：\n",[37,1562,1563,1565,1567,1570,1572],{"class":39,"line":104},[37,1564,1549],{"class":50},[37,1566,1552],{"class":54},[37,1568,1569],{"class":185},"\"hello world\"",[37,1571,1552],{"class":54},[37,1573,1574],{"class":50},"endl;\n",[37,1576,1577],{"class":39,"line":113},[37,1578,1579],{"class":43},"\u002F\u002F反斜杠\n",[37,1581,1582,1584,1586,1589,1591],{"class":39,"line":189},[37,1583,1549],{"class":50},[37,1585,1552],{"class":54},[37,1587,1588],{"class":185},"\"\u002F\u002F\"",[37,1590,1552],{"class":54},[37,1592,1574],{"class":50},[37,1594,1595],{"class":39,"line":195},[37,1596,1597],{"class":43},"\u002F\u002F水平制表符\n",[37,1599,1600,1602,1604,1607,1610,1613,1615,1618],{"class":39,"line":201},[37,1601,1549],{"class":50},[37,1603,1552],{"class":54},[37,1605,1606],{"class":185},"\"aaaa",[37,1608,1609],{"class":61},"\\t",[37,1611,1612],{"class":185},"helloworld\"",[37,1614,1552],{"class":54},[37,1616,1617],{"class":50},"endl;",[37,1619,1620],{"class":43}," \u002F\u002F输出窗口时有对齐效果\n",[498,1622,1624],{"id":1623},"_135字符串型","1.3.5字符串型",[14,1626,1627,1628,1630],{},"char 变量名",[37,1629],{},"=\"字符串值\"",[27,1632,1634],{"className":519,"code":1633,"language":521,"meta":32,"style":32},"\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",[34,1635,1636,1641,1646,1651,1656,1670,1683,1688,1693,1704],{"__ignoreMap":32},[37,1637,1638],{"class":39,"line":40},[37,1639,1640],{"class":43},"\u002F\u002Fc风格字符串\n",[37,1642,1643],{"class":39,"line":47},[37,1644,1645],{"class":43},"\u002F\u002F注意事项：\n",[37,1647,1648],{"class":39,"line":104},[37,1649,1650],{"class":43},"\u002F\u002F1.char字符串名[]\n",[37,1652,1653],{"class":39,"line":113},[37,1654,1655],{"class":43},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[37,1657,1658,1660,1663,1665,1667],{"class":39,"line":189},[37,1659,621],{"class":54},[37,1661,1662],{"class":50}," str[]",[37,1664,55],{"class":54},[37,1666,1569],{"class":185},[37,1668,1669],{"class":50},";\n",[37,1671,1672,1674,1676,1679,1681],{"class":39,"line":195},[37,1673,1549],{"class":50},[37,1675,1552],{"class":54},[37,1677,1678],{"class":50},"str",[37,1680,1552],{"class":54},[37,1682,1574],{"class":50},[37,1684,1685],{"class":39,"line":201},[37,1686,1687],{"class":43},"\u002F\u002Fc++风格字符串\n",[37,1689,1690],{"class":39,"line":207},[37,1691,1692],{"class":43},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[37,1694,1695,1698,1700,1702],{"class":39,"line":213},[37,1696,1697],{"class":50},"string str2",[37,1699,55],{"class":54},[37,1701,1569],{"class":185},[37,1703,1669],{"class":50},[37,1705,1706,1708,1710,1713,1715],{"class":39,"line":218},[37,1707,1549],{"class":50},[37,1709,1552],{"class":54},[37,1711,1712],{"class":50},"str2",[37,1714,1552],{"class":54},[37,1716,1574],{"class":50},[498,1718,1720],{"id":1719},"_136布尔类型bool","1.3.6布尔类型bool",[27,1722,1724],{"className":519,"code":1723,"language":521,"meta":32,"style":32},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[34,1725,1726,1741],{"__ignoreMap":32},[37,1727,1728,1731,1734,1736,1739],{"class":39,"line":40},[37,1729,1730],{"class":54},"bool",[37,1732,1733],{"class":50}," flag",[37,1735,55],{"class":54},[37,1737,1738],{"class":61},"true",[37,1740,1669],{"class":50},[37,1742,1743,1746,1749,1752,1754,1756],{"class":39,"line":47},[37,1744,1745],{"class":50},"cout",[37,1747,1748],{"class":54},"\u003C\u003Csizeof",[37,1750,1751],{"class":50},"(flag)",[37,1753,1552],{"class":54},[37,1755,1617],{"class":50},[37,1757,1758],{"class":43}," \u002F\u002F查看布尔占内存空间\n",[469,1760,1762],{"id":1761},"_14键盘输入cin","1.4键盘输入cin",[27,1764,1766],{"className":519,"code":1765,"language":521,"meta":32,"style":32},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[34,1767,1768,1781,1798,1809],{"__ignoreMap":32},[37,1769,1770,1772,1775,1777,1779],{"class":39,"line":40},[37,1771,533],{"class":54},[37,1773,1774],{"class":50}," a",[37,1776,55],{"class":54},[37,1778,135],{"class":61},[37,1780,1669],{"class":50},[37,1782,1783,1785,1787,1790,1792,1794,1796],{"class":39,"line":47},[37,1784,1745],{"class":50},[37,1786,1552],{"class":54},[37,1788,1789],{"class":185},"\"请给整型变量a赋值\"",[37,1791,1552],{"class":54},[37,1793,51],{"class":50},[37,1795,1552],{"class":54},[37,1797,1574],{"class":50},[37,1799,1800,1803,1806],{"class":39,"line":104},[37,1801,1802],{"class":50},"cin ",[37,1804,1805],{"class":54},">>",[37,1807,1808],{"class":50}," a;\n",[37,1810,1811,1813,1815,1818,1821,1823,1825],{"class":39,"line":113},[37,1812,1549],{"class":50},[37,1814,1552],{"class":54},[37,1816,1817],{"class":185}," \"整型变量a=\"",[37,1819,1820],{"class":54}," \u003C\u003C",[37,1822,51],{"class":50},[37,1824,1552],{"class":54},[37,1826,1574],{"class":50},[469,1828,1830],{"id":1829},"_15运算符","1.5运算符",[498,1832,1834],{"id":1833},"_151算术运算符","1.5.1算术运算符",[14,1836,1837,1841],{},[1838,1839],"img",{"alt":32,"src":1840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[481,1843,1844,1847,1850],{},[484,1845,1846],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[484,1848,1849],{},"两个小数不可以做取模运算",[484,1851,1852],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[498,1854,1856],{"id":1855},"_152赋值运算符","1.5.2赋值运算符",[14,1858,1859],{},[1838,1860],{"alt":32,"src":1861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[498,1863,1865],{"id":1864},"_153比较运算符","1.5.3比较运算符",[14,1867,1868],{},[1838,1869],{"alt":32,"src":1870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[498,1872,1874],{"id":1873},"_154逻辑运算符","1.5.4逻辑运算符",[14,1876,1877],{},[1838,1878],{"alt":32,"src":1879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[469,1881,1883],{"id":1882},"_16程序流程结构","1.6程序流程结构",[498,1885,1887],{"id":1886},"_161选择结构","1.6.1选择结构",[481,1889,1890],{},[484,1891,1892],{},"if语句\n单行、多行、多条件if语句",[27,1894,1896],{"className":519,"code":1895,"language":521,"meta":32,"style":32},"\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",[34,1897,1898,1903,1918,1923,1937,1942,1947,1956,1969,1973,1986,1990,1995,1999,2012,2016,2021,2041,2045,2058,2062,2090,2094,2110,2114,2118,2122,2135,2139],{"__ignoreMap":32},[37,1899,1900],{"class":39,"line":40},[37,1901,1902],{"class":43},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[37,1904,1905,1908,1911,1913,1916],{"class":39,"line":47},[37,1906,1907],{"class":54},"if",[37,1909,1910],{"class":50},"(score",[37,1912,1468],{"class":54},[37,1914,1915],{"class":61},"600",[37,1917,280],{"class":50},[37,1919,1920],{"class":39,"line":104},[37,1921,1922],{"class":50},"{\n",[37,1924,1925,1928,1930,1933,1935],{"class":39,"line":113},[37,1926,1927],{"class":50},"    cout",[37,1929,1552],{"class":54},[37,1931,1932],{"class":185},"'这是单行if语句'",[37,1934,1552],{"class":54},[37,1936,1574],{"class":50},[37,1938,1939],{"class":39,"line":189},[37,1940,1941],{"class":50},"}\n",[37,1943,1944],{"class":39,"line":195},[37,1945,1946],{"class":43},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[37,1948,1949,1951,1953],{"class":39,"line":201},[37,1950,1802],{"class":50},[37,1952,1805],{"class":54},[37,1954,1955],{"class":50}," score\n",[37,1957,1958,1960,1962,1965,1967],{"class":39,"line":207},[37,1959,1907],{"class":54},[37,1961,1910],{"class":50},[37,1963,1964],{"class":54},"\u003C=",[37,1966,1915],{"class":61},[37,1968,280],{"class":50},[37,1970,1971],{"class":39,"line":213},[37,1972,1922],{"class":50},[37,1974,1975,1977,1979,1982,1984],{"class":39,"line":218},[37,1976,1927],{"class":50},[37,1978,1805],{"class":54},[37,1980,1981],{"class":185},"\"小于等于600\"",[37,1983,1552],{"class":54},[37,1985,1574],{"class":50},[37,1987,1988],{"class":39,"line":227},[37,1989,1941],{"class":50},[37,1991,1992],{"class":39,"line":232},[37,1993,1994],{"class":54},"else\n",[37,1996,1997],{"class":39,"line":238},[37,1998,1922],{"class":50},[37,2000,2001,2003,2005,2008,2010],{"class":39,"line":244},[37,2002,1927],{"class":50},[37,2004,1805],{"class":54},[37,2006,2007],{"class":185},"\"大于600\"",[37,2009,1805],{"class":54},[37,2011,1574],{"class":50},[37,2013,2014],{"class":39,"line":250},[37,2015,1941],{"class":50},[37,2017,2018],{"class":39,"line":256},[37,2019,2020],{"class":43},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[37,2022,2023,2025,2028,2030,2032,2035,2037,2039],{"class":39,"line":261},[37,2024,1907],{"class":54},[37,2026,2027],{"class":50}," (",[37,2029,135],{"class":61},[37,2031,1418],{"class":54},[37,2033,2034],{"class":50},"num",[37,2036,1418],{"class":54},[37,2038,154],{"class":61},[37,2040,280],{"class":50},[37,2042,2043],{"class":39,"line":267},[37,2044,1922],{"class":50},[37,2046,2047,2049,2051,2054,2056],{"class":39,"line":283},[37,2048,1927],{"class":50},[37,2050,1552],{"class":54},[37,2052,2053],{"class":185},"\"小于100\"",[37,2055,1552],{"class":54},[37,2057,1574],{"class":50},[37,2059,2060],{"class":39,"line":288},[37,2061,1941],{"class":50},[37,2063,2064,2067,2070,2073,2076,2078,2081,2083,2085,2088],{"class":39,"line":294},[37,2065,2066],{"class":54},"else",[37,2068,2069],{"class":54}," if",[37,2071,2072],{"class":50}," (nmu",[37,2074,2075],{"class":54},">=",[37,2077,154],{"class":61},[37,2079,2080],{"class":54},"&&",[37,2082,2034],{"class":50},[37,2084,1418],{"class":54},[37,2086,2087],{"class":61},"200",[37,2089,280],{"class":50},[37,2091,2092],{"class":39,"line":300},[37,2093,1922],{"class":50},[37,2095,2096,2098,2100,2103,2105,2107],{"class":39,"line":306},[37,2097,1927],{"class":50},[37,2099,1552],{"class":54},[37,2101,2102],{"class":185},"\"不小于100且小于200\"",[37,2104,1552],{"class":54},[37,2106,1617],{"class":50},[37,2108,2109],{"class":43}," \u002F\u002F可以无限else if,python中是elif：\n",[37,2111,2112],{"class":39,"line":312},[37,2113,1941],{"class":50},[37,2115,2116],{"class":39,"line":317},[37,2117,1994],{"class":54},[37,2119,2120],{"class":39,"line":323},[37,2121,1922],{"class":50},[37,2123,2124,2126,2128,2131,2133],{"class":39,"line":337},[37,2125,1927],{"class":50},[37,2127,1552],{"class":54},[37,2129,2130],{"class":185},"\"不小于200\"",[37,2132,1552],{"class":54},[37,2134,1574],{"class":50},[37,2136,2137],{"class":39,"line":342},[37,2138,1941],{"class":50},[37,2140,2141],{"class":39,"line":347},[37,2142,2143],{"class":43},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[481,2145,2146],{"start":47},[484,2147,2148],{},"三目运算符",[27,2150,2152],{"className":519,"code":2151,"language":521,"meta":32,"style":32},"\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",[34,2153,2154,2159,2164,2190,2212,2229,2234,2257,2272],{"__ignoreMap":32},[37,2155,2156],{"class":39,"line":40},[37,2157,2158],{"class":43},"\u002F\u002F创建三个变量a,b,c\n",[37,2160,2161],{"class":39,"line":47},[37,2162,2163],{"class":43},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[37,2165,2166,2168,2170,2172,2174,2177,2179,2181,2184,2186,2188],{"class":39,"line":104},[37,2167,533],{"class":54},[37,2169,1774],{"class":50},[37,2171,55],{"class":54},[37,2173,1210],{"class":61},[37,2175,2176],{"class":50},",b",[37,2178,55],{"class":54},[37,2180,98],{"class":61},[37,2182,2183],{"class":50},",c",[37,2185,55],{"class":54},[37,2187,135],{"class":61},[37,2189,1669],{"class":50},[37,2191,2192,2194,2196,2199,2201,2203,2205,2207,2209],{"class":39,"line":113},[37,2193,807],{"class":50},[37,2195,55],{"class":54},[37,2197,2198],{"class":50},"(a",[37,2200,1468],{"class":54},[37,2202,376],{"class":50},[37,2204,1494],{"class":54},[37,2206,51],{"class":50},[37,2208,1368],{"class":54},[37,2210,2211],{"class":50},"b)\n",[37,2213,2214,2216,2218,2221,2223,2225,2227],{"class":39,"line":189},[37,2215,1745],{"class":50},[37,2217,1552],{"class":54},[37,2219,2220],{"class":185},"\"c=\"",[37,2222,1552],{"class":54},[37,2224,807],{"class":50},[37,2226,1552],{"class":54},[37,2228,1574],{"class":50},[37,2230,2231],{"class":39,"line":195},[37,2232,2233],{"class":43},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[37,2235,2236,2238,2240,2242,2244,2246,2248,2251,2253,2255],{"class":39,"line":201},[37,2237,2198],{"class":50},[37,2239,1468],{"class":54},[37,2241,376],{"class":50},[37,2243,1494],{"class":54},[37,2245,51],{"class":50},[37,2247,1368],{"class":54},[37,2249,2250],{"class":50},"b)",[37,2252,55],{"class":54},[37,2254,154],{"class":61},[37,2256,1669],{"class":50},[37,2258,2259,2261,2263,2265,2267,2269],{"class":39,"line":207},[37,2260,1745],{"class":50},[37,2262,1552],{"class":54},[37,2264,51],{"class":50},[37,2266,1552],{"class":54},[37,2268,1617],{"class":50},[37,2270,2271],{"class":43}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[37,2273,2274,2276,2278,2280,2282,2284],{"class":39,"line":213},[37,2275,1745],{"class":50},[37,2277,1552],{"class":54},[37,2279,376],{"class":50},[37,2281,1552],{"class":54},[37,2283,1617],{"class":50},[37,2285,2286],{"class":43}," \u002F\u002F10   a>b,b还是原值\n",[481,2288,2289],{"start":104},[484,2290,2291],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[27,2293,2295],{"className":519,"code":2294,"language":521,"meta":32,"style":32},"\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",[34,2296,2297,2302,2310,2324,2334,2338,2352,2365,2375,2383,2388,2413,2434,2456,2477,2499,2520,2540,2545],{"__ignoreMap":32},[37,2298,2299],{"class":39,"line":40},[37,2300,2301],{"class":43},"\u002F\u002F案例-电影打分\n",[37,2303,2304,2307],{"class":39,"line":47},[37,2305,2306],{"class":54},"#include",[37,2308,2309],{"class":185},"\u003Ciostream>\n",[37,2311,2312,2315,2318,2322],{"class":39,"line":104},[37,2313,2314],{"class":54},"using",[37,2316,2317],{"class":54}," namespace",[37,2319,2321],{"class":2320},"sScJk"," std",[37,2323,1669],{"class":50},[37,2325,2326,2328,2331],{"class":39,"line":113},[37,2327,533],{"class":54},[37,2329,2330],{"class":2320}," main",[37,2332,2333],{"class":50},"()\n",[37,2335,2336],{"class":39,"line":189},[37,2337,1922],{"class":50},[37,2339,2340,2343,2346,2348,2350],{"class":39,"line":195},[37,2341,2342],{"class":54},"    int",[37,2344,2345],{"class":50}," score",[37,2347,55],{"class":54},[37,2349,135],{"class":61},[37,2351,1669],{"class":50},[37,2353,2354,2356,2358,2361,2363],{"class":39,"line":201},[37,2355,1927],{"class":50},[37,2357,1552],{"class":54},[37,2359,2360],{"class":185},"\"电影打分：\"",[37,2362,1552],{"class":54},[37,2364,1574],{"class":50},[37,2366,2367,2370,2372],{"class":39,"line":207},[37,2368,2369],{"class":50},"    cin",[37,2371,1805],{"class":54},[37,2373,2374],{"class":50},"score;\n",[37,2376,2377,2380],{"class":39,"line":213},[37,2378,2379],{"class":54},"    switch",[37,2381,2382],{"class":50},"(score)\n",[37,2384,2385],{"class":39,"line":218},[37,2386,2387],{"class":50},"    {\n",[37,2389,2390,2393,2396,2399,2401,2404,2406,2408,2411],{"class":39,"line":227},[37,2391,2392],{"class":54},"        case",[37,2394,2395],{"class":61}," 10",[37,2397,2398],{"class":50},":cout",[37,2400,1552],{"class":54},[37,2402,2403],{"class":185},"\"经典\"",[37,2405,1552],{"class":54},[37,2407,1617],{"class":50},[37,2409,2410],{"class":54},"break",[37,2412,1669],{"class":50},[37,2414,2415,2417,2420,2422,2424,2426,2428,2430,2432],{"class":39,"line":232},[37,2416,2392],{"class":54},[37,2418,2419],{"class":61}," 9",[37,2421,2398],{"class":50},[37,2423,1552],{"class":54},[37,2425,2403],{"class":185},[37,2427,1552],{"class":54},[37,2429,1617],{"class":50},[37,2431,2410],{"class":54},[37,2433,1669],{"class":50},[37,2435,2436,2438,2441,2443,2445,2448,2450,2452,2454],{"class":39,"line":238},[37,2437,2392],{"class":54},[37,2439,2440],{"class":61}," 8",[37,2442,2398],{"class":50},[37,2444,1552],{"class":54},[37,2446,2447],{"class":185},"\"非常好\"",[37,2449,1552],{"class":54},[37,2451,1617],{"class":50},[37,2453,2410],{"class":54},[37,2455,1669],{"class":50},[37,2457,2458,2460,2463,2465,2467,2469,2471,2473,2475],{"class":39,"line":244},[37,2459,2392],{"class":54},[37,2461,2462],{"class":61}," 7",[37,2464,2398],{"class":50},[37,2466,1552],{"class":54},[37,2468,2447],{"class":185},[37,2470,1552],{"class":54},[37,2472,1617],{"class":50},[37,2474,2410],{"class":54},[37,2476,1669],{"class":50},[37,2478,2479,2481,2484,2486,2488,2491,2493,2495,2497],{"class":39,"line":250},[37,2480,2392],{"class":54},[37,2482,2483],{"class":61}," 6",[37,2485,2398],{"class":50},[37,2487,1552],{"class":54},[37,2489,2490],{"class":185},"\"一般\"",[37,2492,1552],{"class":54},[37,2494,1617],{"class":50},[37,2496,2410],{"class":54},[37,2498,1669],{"class":50},[37,2500,2501,2503,2506,2508,2510,2512,2514,2516,2518],{"class":39,"line":256},[37,2502,2392],{"class":54},[37,2504,2505],{"class":61}," 5",[37,2507,2398],{"class":50},[37,2509,1552],{"class":54},[37,2511,2490],{"class":185},[37,2513,1552],{"class":54},[37,2515,1617],{"class":50},[37,2517,2410],{"class":54},[37,2519,1669],{"class":50},[37,2521,2522,2525,2527,2529,2532,2534,2536,2538],{"class":39,"line":261},[37,2523,2524],{"class":54},"        default",[37,2526,2398],{"class":50},[37,2528,1552],{"class":54},[37,2530,2531],{"class":185},"\"烂片\"",[37,2533,1552],{"class":54},[37,2535,1617],{"class":50},[37,2537,2410],{"class":54},[37,2539,1669],{"class":50},[37,2541,2542],{"class":39,"line":267},[37,2543,2544],{"class":50},"    }\n",[37,2546,2547],{"class":39,"line":283},[37,2548,1941],{"class":50},[14,2550,2551],{},"if和switch区别：",[1515,2553,2554,2557],{},[484,2555,2556],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[484,2558,2559],{},"switch优点：结构清晰，执行效率高",[498,2561,2563],{"id":2562},"_162循环结构","1.6.2循环结构",[481,2565,2566],{},[484,2567,2568],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[27,2570,2572],{"className":519,"code":2571,"language":521,"meta":32,"style":32},"\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",[34,2573,2574,2579,2587,2591,2604,2618,2622,2642,2652,2656,2668],{"__ignoreMap":32},[37,2575,2576],{"class":39,"line":40},[37,2577,2578],{"class":43},"\u002F\u002F打印0-9数字\n",[37,2580,2581,2583,2585],{"class":39,"line":47},[37,2582,533],{"class":54},[37,2584,2330],{"class":2320},[37,2586,2333],{"class":50},[37,2588,2589],{"class":39,"line":104},[37,2590,1922],{"class":50},[37,2592,2593,2595,2598,2600,2602],{"class":39,"line":113},[37,2594,2342],{"class":54},[37,2596,2597],{"class":50}," num",[37,2599,55],{"class":54},[37,2601,135],{"class":61},[37,2603,1669],{"class":50},[37,2605,2606,2609,2612,2614,2616],{"class":39,"line":189},[37,2607,2608],{"class":54},"    while",[37,2610,2611],{"class":50},"(num",[37,2613,1418],{"class":54},[37,2615,98],{"class":61},[37,2617,280],{"class":50},[37,2619,2620],{"class":39,"line":195},[37,2621,2387],{"class":50},[37,2623,2624,2627,2630,2632,2634,2636,2639],{"class":39,"line":201},[37,2625,2626],{"class":2320},"       std",[37,2628,2629],{"class":50},"::cout",[37,2631,1552],{"class":54},[37,2633,2034],{"class":50},[37,2635,1552],{"class":54},[37,2637,2638],{"class":2320},"std",[37,2640,2641],{"class":50},"::endl;\n",[37,2643,2644,2647,2650],{"class":39,"line":207},[37,2645,2646],{"class":50},"        num",[37,2648,2649],{"class":54},"++",[37,2651,1669],{"class":50},[37,2653,2654],{"class":39,"line":213},[37,2655,2544],{"class":50},[37,2657,2658,2661,2663,2666],{"class":39,"line":218},[37,2659,2660],{"class":2320},"    system",[37,2662,165],{"class":50},[37,2664,2665],{"class":185},"\"pause\"",[37,2667,280],{"class":50},[37,2669,2670],{"class":39,"line":227},[37,2671,1941],{"class":50},[14,2673,2674],{},"注意：写好循环条件，避免死循环情况",[27,2676,2678],{"className":519,"code":2677,"language":521,"meta":32,"style":32},"\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",[34,2679,2680,2685,2692,2699,2709,2717,2721,2726,2753,2758,2763,2771,2798,2803,2808,2821,2831,2835,2845,2850,2863,2868,2882,2887,2902,2906,2919,2923,2928,2932,2945,2952,2956,2961,2966,2970],{"__ignoreMap":32},[37,2681,2682],{"class":39,"line":40},[37,2683,2684],{"class":43},"\u002F\u002F循环结构-猜数字\n",[37,2686,2687,2689],{"class":39,"line":47},[37,2688,2306],{"class":54},[37,2690,2691],{"class":185}," \u003Ciostream>\n",[37,2693,2694,2696],{"class":39,"line":104},[37,2695,2306],{"class":54},[37,2697,2698],{"class":185}," \u003Cctime>\n",[37,2700,2701,2703,2705,2707],{"class":39,"line":113},[37,2702,2314],{"class":54},[37,2704,2317],{"class":54},[37,2706,2321],{"class":2320},[37,2708,1669],{"class":50},[37,2710,2711,2713,2715],{"class":39,"line":189},[37,2712,533],{"class":54},[37,2714,2330],{"class":2320},[37,2716,2333],{"class":50},[37,2718,2719],{"class":39,"line":195},[37,2720,1922],{"class":50},[37,2722,2723],{"class":39,"line":201},[37,2724,2725],{"class":43},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[37,2727,2728,2731,2734,2737,2740,2742,2745,2747,2750],{"class":39,"line":207},[37,2729,2730],{"class":2320},"    srand",[37,2732,2733],{"class":50},"((",[37,2735,2736],{"class":54},"unsigned",[37,2738,2739],{"class":54}," int",[37,2741,138],{"class":50},[37,2743,2744],{"class":2320},"time",[37,2746,165],{"class":50},[37,2748,2749],{"class":61},"NULL",[37,2751,2752],{"class":50},"));\n",[37,2754,2755],{"class":39,"line":213},[37,2756,2757],{"emptyLinePlaceholder":454},"\n",[37,2759,2760],{"class":39,"line":218},[37,2761,2762],{"class":43},"    \u002F\u002F1.系统生成随机数\n",[37,2764,2765,2768],{"class":39,"line":227},[37,2766,2767],{"class":43},"    \u002F\u002Frand()%100",[37,2769,2770],{"class":43}," \u002F\u002F生成0-99的随机数\n",[37,2772,2773,2775,2777,2779,2782,2785,2787,2789,2791,2793,2795],{"class":39,"line":232},[37,2774,2342],{"class":54},[37,2776,2597],{"class":50},[37,2778,55],{"class":54},[37,2780,2781],{"class":2320},"rand",[37,2783,2784],{"class":50},"()",[37,2786,845],{"class":54},[37,2788,154],{"class":61},[37,2790,993],{"class":54},[37,2792,332],{"class":61},[37,2794,582],{"class":50},[37,2796,2797],{"class":43}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[37,2799,2800],{"class":39,"line":238},[37,2801,2802],{"class":43},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[37,2804,2805],{"class":39,"line":244},[37,2806,2807],{"class":43},"    \u002F\u002F2.玩家猜测\n",[37,2809,2810,2812,2815,2817,2819],{"class":39,"line":250},[37,2811,2342],{"class":54},[37,2813,2814],{"class":50}," val",[37,2816,55],{"class":54},[37,2818,135],{"class":61},[37,2820,1669],{"class":50},[37,2822,2823,2825,2827,2829],{"class":39,"line":256},[37,2824,2608],{"class":54},[37,2826,2027],{"class":50},[37,2828,332],{"class":61},[37,2830,280],{"class":50},[37,2832,2833],{"class":39,"line":261},[37,2834,2387],{"class":50},[37,2836,2837,2840,2842],{"class":39,"line":267},[37,2838,2839],{"class":50},"        cin",[37,2841,1805],{"class":54},[37,2843,2844],{"class":50},"val;\n",[37,2846,2847],{"class":39,"line":283},[37,2848,2849],{"class":43},"        \u002F\u002F3.判断玩家猜测\n",[37,2851,2852,2855,2858,2860],{"class":39,"line":288},[37,2853,2854],{"class":54},"        if",[37,2856,2857],{"class":50},"(val",[37,2859,1418],{"class":54},[37,2861,2862],{"class":50},"num) \n",[37,2864,2865],{"class":39,"line":294},[37,2866,2867],{"class":50},"        {\n",[37,2869,2870,2873,2875,2878,2880],{"class":39,"line":300},[37,2871,2872],{"class":50},"            cout",[37,2874,1552],{"class":54},[37,2876,2877],{"class":185},"\"猜小了！\"",[37,2879,1552],{"class":54},[37,2881,1574],{"class":50},[37,2883,2884],{"class":39,"line":306},[37,2885,2886],{"class":50},"        }\n",[37,2888,2889,2892,2894,2897,2899],{"class":39,"line":312},[37,2890,2891],{"class":54},"        else",[37,2893,2069],{"class":54},[37,2895,2896],{"class":50}," (val",[37,2898,1468],{"class":54},[37,2900,2901],{"class":50},"num)\n",[37,2903,2904],{"class":39,"line":317},[37,2905,2867],{"class":50},[37,2907,2908,2910,2912,2915,2917],{"class":39,"line":323},[37,2909,2872],{"class":50},[37,2911,1552],{"class":54},[37,2913,2914],{"class":185},"\"猜大了！\"",[37,2916,1552],{"class":54},[37,2918,1574],{"class":50},[37,2920,2921],{"class":39,"line":337},[37,2922,2886],{"class":50},[37,2924,2925],{"class":39,"line":342},[37,2926,2927],{"class":54},"        else\n",[37,2929,2930],{"class":39,"line":347},[37,2931,2867],{"class":50},[37,2933,2934,2936,2938,2941,2943],{"class":39,"line":352},[37,2935,2872],{"class":50},[37,2937,1552],{"class":54},[37,2939,2940],{"class":185},"\"猜对了！\"",[37,2942,1552],{"class":54},[37,2944,1574],{"class":50},[37,2946,2947,2950],{"class":39,"line":357},[37,2948,2949],{"class":54},"            break",[37,2951,1669],{"class":50},[37,2953,2954],{"class":39,"line":362},[37,2955,2886],{"class":50},[37,2957,2958],{"class":39,"line":367},[37,2959,2960],{"class":43},"        \u002F\u002F猜对 退出游戏\n",[37,2962,2963],{"class":39,"line":373},[37,2964,2965],{"class":43},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[37,2967,2968],{"class":39,"line":392},[37,2969,2544],{"class":50},[37,2971,2972],{"class":39,"line":398},[37,2973,1941],{"class":50},[481,2975,2976],{"start":47},[484,2977,2978,2979,2982],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[673,2980,2981],{},"do...while会先执行一次循环语句","，在判断循环语句",[27,2984,2986],{"className":519,"code":2985,"language":521,"meta":32,"style":32},"\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",[34,2987,2988,2993,3001,3005,3017,3025,3029,3046,3053,3057,3070,3080],{"__ignoreMap":32},[37,2989,2990],{"class":39,"line":40},[37,2991,2992],{"class":43},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[37,2994,2995,2997,2999],{"class":39,"line":47},[37,2996,533],{"class":54},[37,2998,2330],{"class":2320},[37,3000,2333],{"class":50},[37,3002,3003],{"class":39,"line":104},[37,3004,1922],{"class":50},[37,3006,3007,3009,3011,3013,3015],{"class":39,"line":113},[37,3008,2342],{"class":54},[37,3010,2597],{"class":50},[37,3012,55],{"class":54},[37,3014,135],{"class":61},[37,3016,1669],{"class":50},[37,3018,3019,3022],{"class":39,"line":189},[37,3020,3021],{"class":54},"    do",[37,3023,3024],{"class":50}," \n",[37,3026,3027],{"class":39,"line":195},[37,3028,2387],{"class":50},[37,3030,3031,3034,3036,3038,3040,3042,3044],{"class":39,"line":201},[37,3032,3033],{"class":2320},"        std",[37,3035,2629],{"class":50},[37,3037,1552],{"class":54},[37,3039,2034],{"class":50},[37,3041,1552],{"class":54},[37,3043,2638],{"class":2320},[37,3045,2641],{"class":50},[37,3047,3048,3050],{"class":39,"line":207},[37,3049,2646],{"class":50},[37,3051,3052],{"class":54},"++\n",[37,3054,3055],{"class":39,"line":213},[37,3056,2544],{"class":50},[37,3058,3059,3061,3063,3065,3067],{"class":39,"line":218},[37,3060,2608],{"class":54},[37,3062,2611],{"class":50},[37,3064,1418],{"class":54},[37,3066,98],{"class":61},[37,3068,3069],{"class":50},");\n",[37,3071,3072,3074,3076,3078],{"class":39,"line":227},[37,3073,2660],{"class":2320},[37,3075,165],{"class":50},[37,3077,2665],{"class":185},[37,3079,3069],{"class":50},[37,3081,3082],{"class":39,"line":232},[37,3083,1941],{"class":50},[14,3085,3086],{},"案例-水仙花数",[14,3088,3089],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,3091,3092],{},"例如：1^3+5^3+3^3=153",[14,3094,3095],{},"请用do...while语句，求出所有3位数的水仙花数",[27,3097,3099],{"className":519,"code":3098,"language":521,"meta":32,"style":32},"#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",[34,3100,3101,3107,3117,3125,3129,3134,3146,3152,3156,3161,3177,3193,3209,3224,3243,3258,3306,3310,3322,3326,3334,3338,3352],{"__ignoreMap":32},[37,3102,3103,3105],{"class":39,"line":40},[37,3104,2306],{"class":54},[37,3106,2691],{"class":185},[37,3108,3109,3111,3113,3115],{"class":39,"line":47},[37,3110,2314],{"class":54},[37,3112,2317],{"class":54},[37,3114,2321],{"class":2320},[37,3116,1669],{"class":50},[37,3118,3119,3121,3123],{"class":39,"line":104},[37,3120,533],{"class":54},[37,3122,2330],{"class":2320},[37,3124,2333],{"class":50},[37,3126,3127],{"class":39,"line":113},[37,3128,1922],{"class":50},[37,3130,3131],{"class":39,"line":189},[37,3132,3133],{"class":43},"    \u002F\u002F1.先打印所有三位数字\n",[37,3135,3136,3138,3140,3142,3144],{"class":39,"line":195},[37,3137,2342],{"class":54},[37,3139,2597],{"class":50},[37,3141,55],{"class":54},[37,3143,154],{"class":61},[37,3145,1669],{"class":50},[37,3147,3148,3150],{"class":39,"line":201},[37,3149,3021],{"class":54},[37,3151,3024],{"class":50},[37,3153,3154],{"class":39,"line":207},[37,3155,2387],{"class":50},[37,3157,3158],{"class":39,"line":213},[37,3159,3160],{"class":43},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[37,3162,3163,3166,3168,3170,3172,3174],{"class":39,"line":218},[37,3164,3165],{"class":54},"        int",[37,3167,1774],{"class":50},[37,3169,55],{"class":54},[37,3171,135],{"class":61},[37,3173,582],{"class":50},[37,3175,3176],{"class":43}," \u002F\u002F个位\n",[37,3178,3179,3181,3184,3186,3188,3190],{"class":39,"line":227},[37,3180,3165],{"class":54},[37,3182,3183],{"class":50}," b",[37,3185,55],{"class":54},[37,3187,135],{"class":61},[37,3189,582],{"class":50},[37,3191,3192],{"class":43}," \u002F\u002F十位\n",[37,3194,3195,3197,3200,3202,3204,3206],{"class":39,"line":232},[37,3196,3165],{"class":54},[37,3198,3199],{"class":50}," c",[37,3201,55],{"class":54},[37,3203,135],{"class":61},[37,3205,582],{"class":50},[37,3207,3208],{"class":43}," \u002F\u002F百位\n",[37,3210,3211,3214,3216,3218,3220,3222],{"class":39,"line":238},[37,3212,3213],{"class":50},"        a",[37,3215,55],{"class":54},[37,3217,2034],{"class":50},[37,3219,845],{"class":54},[37,3221,98],{"class":61},[37,3223,1669],{"class":50},[37,3225,3226,3229,3231,3233,3235,3237,3239,3241],{"class":39,"line":244},[37,3227,3228],{"class":50},"        b",[37,3230,55],{"class":54},[37,3232,2034],{"class":50},[37,3234,1094],{"class":54},[37,3236,98],{"class":61},[37,3238,845],{"class":54},[37,3240,98],{"class":61},[37,3242,1669],{"class":50},[37,3244,3245,3248,3250,3252,3254,3256],{"class":39,"line":250},[37,3246,3247],{"class":50},"        c",[37,3249,55],{"class":54},[37,3251,2034],{"class":50},[37,3253,1094],{"class":54},[37,3255,154],{"class":61},[37,3257,1669],{"class":50},[37,3259,3260,3262,3264,3266,3268,3270,3272,3274,3276,3278,3280,3282,3284,3286,3288,3290,3292,3294,3297,3300,3303],{"class":39,"line":256},[37,3261,2854],{"class":54},[37,3263,2198],{"class":50},[37,3265,967],{"class":54},[37,3267,51],{"class":50},[37,3269,967],{"class":54},[37,3271,51],{"class":50},[37,3273,993],{"class":54},[37,3275,376],{"class":50},[37,3277,967],{"class":54},[37,3279,376],{"class":50},[37,3281,967],{"class":54},[37,3283,376],{"class":50},[37,3285,993],{"class":54},[37,3287,807],{"class":50},[37,3289,967],{"class":54},[37,3291,807],{"class":50},[37,3293,967],{"class":54},[37,3295,3296],{"class":50},"c ",[37,3298,3299],{"class":54},"==",[37,3301,3302],{"class":50}," num)",[37,3304,3305],{"class":43}," \u002F\u002F如果是水仙花数，才打印\n",[37,3307,3308],{"class":39,"line":261},[37,3309,2867],{"class":50},[37,3311,3312,3314,3316,3318,3320],{"class":39,"line":267},[37,3313,2872],{"class":50},[37,3315,1552],{"class":54},[37,3317,2034],{"class":50},[37,3319,1552],{"class":54},[37,3321,1574],{"class":50},[37,3323,3324],{"class":39,"line":283},[37,3325,2886],{"class":50},[37,3327,3328,3330,3332],{"class":39,"line":288},[37,3329,2646],{"class":50},[37,3331,2649],{"class":54},[37,3333,1669],{"class":50},[37,3335,3336],{"class":39,"line":294},[37,3337,2544],{"class":50},[37,3339,3340,3342,3345,3347,3350],{"class":39,"line":300},[37,3341,2608],{"class":54},[37,3343,3344],{"class":50}," (num ",[37,3346,1418],{"class":54},[37,3348,3349],{"class":61}," 1000",[37,3351,3069],{"class":50},[37,3353,3354],{"class":39,"line":306},[37,3355,1941],{"class":50},[481,3357,3358],{"start":104},[484,3359,3360],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[27,3362,3364],{"className":519,"code":3363,"language":521,"meta":32,"style":32},"\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",[34,3365,3366,3371,3400,3404,3416,3420,3425,3436,3443,3447,3461,3465,3472,3476,3488,3497],{"__ignoreMap":32},[37,3367,3368],{"class":39,"line":40},[37,3369,3370],{"class":43},"\u002F\u002F从数字0-9打印\n",[37,3372,3373,3376,3378,3380,3383,3385,3387,3390,3392,3394,3396,3398],{"class":39,"line":47},[37,3374,3375],{"class":54},"for",[37,3377,165],{"class":50},[37,3379,533],{"class":54},[37,3381,3382],{"class":50}," i",[37,3384,55],{"class":54},[37,3386,135],{"class":61},[37,3388,3389],{"class":50},";i",[37,3391,1418],{"class":54},[37,3393,98],{"class":61},[37,3395,3389],{"class":50},[37,3397,2649],{"class":54},[37,3399,280],{"class":50},[37,3401,3402],{"class":39,"line":104},[37,3403,1922],{"class":50},[37,3405,3406,3408,3410,3412,3414],{"class":39,"line":113},[37,3407,1927],{"class":50},[37,3409,1552],{"class":54},[37,3411,954],{"class":50},[37,3413,1552],{"class":54},[37,3415,1574],{"class":50},[37,3417,3418],{"class":39,"line":189},[37,3419,1941],{"class":50},[37,3421,3422],{"class":39,"line":195},[37,3423,3424],{"class":43},"\u002F\u002F上式可以进行拆分\n",[37,3426,3427,3429,3431,3433],{"class":39,"line":201},[37,3428,533],{"class":54},[37,3430,3382],{"class":50},[37,3432,55],{"class":54},[37,3434,3435],{"class":61},"0\n",[37,3437,3438,3440],{"class":39,"line":207},[37,3439,3375],{"class":54},[37,3441,3442],{"class":50},"(;;;)\n",[37,3444,3445],{"class":39,"line":213},[37,3446,1922],{"class":50},[37,3448,3449,3452,3455,3457,3459],{"class":39,"line":218},[37,3450,3451],{"class":54},"    if",[37,3453,3454],{"class":50},"(i",[37,3456,2075],{"class":54},[37,3458,98],{"class":61},[37,3460,280],{"class":50},[37,3462,3463],{"class":39,"line":227},[37,3464,2387],{"class":50},[37,3466,3467,3470],{"class":39,"line":232},[37,3468,3469],{"class":54},"        break",[37,3471,1669],{"class":50},[37,3473,3474],{"class":39,"line":238},[37,3475,2544],{"class":50},[37,3477,3478,3480,3482,3484,3486],{"class":39,"line":244},[37,3479,1927],{"class":50},[37,3481,1552],{"class":54},[37,3483,954],{"class":50},[37,3485,1552],{"class":54},[37,3487,1574],{"class":50},[37,3489,3490,3493,3495],{"class":39,"line":250},[37,3491,3492],{"class":50},"    i",[37,3494,2649],{"class":54},[37,3496,1669],{"class":50},[37,3498,3499],{"class":39,"line":256},[37,3500,1941],{"class":50},[14,3502,3503],{},"小练习",[27,3505,3507],{"className":519,"code":3506,"language":521,"meta":32,"style":32},"#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",[34,3508,3509,3515,3525,3533,3537,3542,3547,3575,3579,3584,3589,3630,3634,3647,3651,3655,3659,3671,3675,3679],{"__ignoreMap":32},[37,3510,3511,3513],{"class":39,"line":40},[37,3512,2306],{"class":54},[37,3514,2309],{"class":185},[37,3516,3517,3519,3521,3523],{"class":39,"line":47},[37,3518,2314],{"class":54},[37,3520,2317],{"class":54},[37,3522,2321],{"class":2320},[37,3524,1669],{"class":50},[37,3526,3527,3529,3531],{"class":39,"line":104},[37,3528,533],{"class":54},[37,3530,2330],{"class":2320},[37,3532,2333],{"class":50},[37,3534,3535],{"class":39,"line":113},[37,3536,1922],{"class":50},[37,3538,3539],{"class":39,"line":189},[37,3540,3541],{"class":43},"    \u002F\u002F敲桌子案例\n",[37,3543,3544],{"class":39,"line":195},[37,3545,3546],{"class":43},"    \u002F\u002F1.先输出1-100的数字\n",[37,3548,3549,3552,3554,3556,3558,3560,3562,3565,3567,3569,3571,3573],{"class":39,"line":201},[37,3550,3551],{"class":54},"    for",[37,3553,165],{"class":50},[37,3555,533],{"class":54},[37,3557,3382],{"class":50},[37,3559,55],{"class":54},[37,3561,332],{"class":61},[37,3563,3564],{"class":50},"; i",[37,3566,1964],{"class":54},[37,3568,154],{"class":61},[37,3570,3564],{"class":50},[37,3572,2649],{"class":54},[37,3574,280],{"class":50},[37,3576,3577],{"class":39,"line":207},[37,3578,2387],{"class":50},[37,3580,3581],{"class":39,"line":213},[37,3582,3583],{"class":43},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[37,3585,3586],{"class":39,"line":218},[37,3587,3588],{"class":43},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[37,3590,3591,3593,3595,3597,3599,3601,3603,3606,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3628],{"class":39,"line":227},[37,3592,2854],{"class":54},[37,3594,3454],{"class":50},[37,3596,845],{"class":54},[37,3598,885],{"class":61},[37,3600,3299],{"class":54},[37,3602,135],{"class":61},[37,3604,3605],{"class":54}," ||",[37,3607,3382],{"class":50},[37,3609,845],{"class":54},[37,3611,98],{"class":61},[37,3613,3299],{"class":54},[37,3615,885],{"class":61},[37,3617,3605],{"class":54},[37,3619,3382],{"class":50},[37,3621,1094],{"class":54},[37,3623,98],{"class":61},[37,3625,3299],{"class":54},[37,3627,885],{"class":61},[37,3629,280],{"class":50},[37,3631,3632],{"class":39,"line":232},[37,3633,2867],{"class":50},[37,3635,3636,3638,3640,3643,3645],{"class":39,"line":238},[37,3637,2872],{"class":50},[37,3639,1552],{"class":54},[37,3641,3642],{"class":185},"\"敲桌子\"",[37,3644,1552],{"class":54},[37,3646,1574],{"class":50},[37,3648,3649],{"class":39,"line":244},[37,3650,2886],{"class":50},[37,3652,3653],{"class":39,"line":250},[37,3654,2927],{"class":54},[37,3656,3657],{"class":39,"line":256},[37,3658,2867],{"class":50},[37,3660,3661,3663,3665,3667,3669],{"class":39,"line":261},[37,3662,2872],{"class":50},[37,3664,1552],{"class":54},[37,3666,954],{"class":50},[37,3668,1552],{"class":54},[37,3670,1574],{"class":50},[37,3672,3673],{"class":39,"line":267},[37,3674,2886],{"class":50},[37,3676,3677],{"class":39,"line":283},[37,3678,2544],{"class":50},[37,3680,3681],{"class":39,"line":288},[37,3682,1941],{"class":50},[14,3684,3685],{},"嵌套实现星图",[27,3687,3689],{"className":519,"code":3688,"language":521,"meta":32,"style":32},"#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",[34,3690,3691,3697,3707,3715,3719,3745,3749,3778,3782,3793,3797,3806,3810],{"__ignoreMap":32},[37,3692,3693,3695],{"class":39,"line":40},[37,3694,2306],{"class":54},[37,3696,2309],{"class":185},[37,3698,3699,3701,3703,3705],{"class":39,"line":47},[37,3700,2314],{"class":54},[37,3702,2317],{"class":54},[37,3704,2321],{"class":2320},[37,3706,1669],{"class":50},[37,3708,3709,3711,3713],{"class":39,"line":104},[37,3710,533],{"class":54},[37,3712,2330],{"class":2320},[37,3714,2333],{"class":50},[37,3716,3717],{"class":39,"line":113},[37,3718,1922],{"class":50},[37,3720,3721,3723,3725,3727,3729,3731,3733,3735,3737,3739,3741,3743],{"class":39,"line":189},[37,3722,3551],{"class":54},[37,3724,2027],{"class":50},[37,3726,533],{"class":54},[37,3728,3382],{"class":50},[37,3730,55],{"class":54},[37,3732,135],{"class":61},[37,3734,3389],{"class":50},[37,3736,1418],{"class":54},[37,3738,98],{"class":61},[37,3740,3389],{"class":50},[37,3742,2649],{"class":54},[37,3744,280],{"class":50},[37,3746,3747],{"class":39,"line":195},[37,3748,2387],{"class":50},[37,3750,3751,3754,3756,3758,3761,3763,3765,3768,3770,3772,3774,3776],{"class":39,"line":201},[37,3752,3753],{"class":54},"        for",[37,3755,2027],{"class":50},[37,3757,533],{"class":54},[37,3759,3760],{"class":50}," j",[37,3762,55],{"class":54},[37,3764,135],{"class":61},[37,3766,3767],{"class":50},";j",[37,3769,1418],{"class":54},[37,3771,98],{"class":61},[37,3773,3767],{"class":50},[37,3775,2649],{"class":54},[37,3777,280],{"class":50},[37,3779,3780],{"class":39,"line":207},[37,3781,2867],{"class":50},[37,3783,3784,3786,3788,3791],{"class":39,"line":213},[37,3785,2872],{"class":50},[37,3787,1552],{"class":54},[37,3789,3790],{"class":185},"\"*\"",[37,3792,1669],{"class":50},[37,3794,3795],{"class":39,"line":218},[37,3796,2886],{"class":50},[37,3798,3799,3802,3804],{"class":39,"line":227},[37,3800,3801],{"class":50},"        cout",[37,3803,1552],{"class":54},[37,3805,1574],{"class":50},[37,3807,3808],{"class":39,"line":232},[37,3809,2544],{"class":50},[37,3811,3812],{"class":39,"line":238},[37,3813,1941],{"class":50},[14,3815,3816],{},"乘法口诀表",[27,3818,3820],{"className":519,"code":3819,"language":521,"meta":32,"style":32},"#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",[34,3821,3822,3828,3838,3846,3850,3876,3880,3905,3909,3949,3953,3961,3965],{"__ignoreMap":32},[37,3823,3824,3826],{"class":39,"line":40},[37,3825,2306],{"class":54},[37,3827,2691],{"class":185},[37,3829,3830,3832,3834,3836],{"class":39,"line":47},[37,3831,2314],{"class":54},[37,3833,2317],{"class":54},[37,3835,2321],{"class":2320},[37,3837,1669],{"class":50},[37,3839,3840,3842,3844],{"class":39,"line":104},[37,3841,533],{"class":54},[37,3843,2330],{"class":2320},[37,3845,2333],{"class":50},[37,3847,3848],{"class":39,"line":113},[37,3849,1922],{"class":50},[37,3851,3852,3854,3856,3858,3860,3862,3864,3866,3868,3870,3872,3874],{"class":39,"line":189},[37,3853,3551],{"class":54},[37,3855,165],{"class":50},[37,3857,533],{"class":54},[37,3859,3382],{"class":50},[37,3861,55],{"class":54},[37,3863,332],{"class":61},[37,3865,3389],{"class":50},[37,3867,1418],{"class":54},[37,3869,98],{"class":61},[37,3871,3389],{"class":50},[37,3873,2649],{"class":54},[37,3875,280],{"class":50},[37,3877,3878],{"class":39,"line":195},[37,3879,2387],{"class":50},[37,3881,3882,3884,3886,3888,3890,3892,3894,3896,3898,3901,3903],{"class":39,"line":201},[37,3883,3753],{"class":54},[37,3885,165],{"class":50},[37,3887,533],{"class":54},[37,3889,3760],{"class":50},[37,3891,55],{"class":54},[37,3893,332],{"class":61},[37,3895,3767],{"class":50},[37,3897,1964],{"class":54},[37,3899,3900],{"class":50},"i;j",[37,3902,2649],{"class":54},[37,3904,280],{"class":50},[37,3906,3907],{"class":39,"line":207},[37,3908,2867],{"class":50},[37,3910,3911,3913,3915,3917,3919,3921,3923,3925,3927,3930,3932,3934,3936,3938,3940,3943,3945,3947],{"class":39,"line":213},[37,3912,2872],{"class":50},[37,3914,1552],{"class":54},[37,3916,979],{"class":50},[37,3918,1552],{"class":54},[37,3920,3790],{"class":185},[37,3922,1552],{"class":54},[37,3924,954],{"class":50},[37,3926,1552],{"class":54},[37,3928,3929],{"class":185},"\"=\"",[37,3931,1552],{"class":54},[37,3933,954],{"class":50},[37,3935,967],{"class":54},[37,3937,979],{"class":50},[37,3939,1552],{"class":54},[37,3941,3942],{"class":185},"'",[37,3944,1609],{"class":61},[37,3946,3942],{"class":185},[37,3948,1669],{"class":50},[37,3950,3951],{"class":39,"line":218},[37,3952,2886],{"class":50},[37,3954,3955,3957,3959],{"class":39,"line":227},[37,3956,3801],{"class":50},[37,3958,1552],{"class":54},[37,3960,1574],{"class":50},[37,3962,3963],{"class":39,"line":232},[37,3964,2544],{"class":50},[37,3966,3967],{"class":39,"line":238},[37,3968,1941],{"class":50},[498,3970,3972],{"id":3971},"_163跳出语句","1.6.3跳出语句",[481,3974,3975],{},[484,3976,3977],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3979,3980],{},"break使用时机：",[1515,3982,3983,3986,3989],{},[484,3984,3985],{},"出现在switch条件语句中，作用是终止case并跳出switch",[484,3987,3988],{},"出现在循环结构中，作用是跳出当前的循环结构",[484,3990,3991],{},"出现在嵌套循环中，跳出最近的内层循环语句",[481,3993,3994,3997],{"start":47},[484,3995,3996],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[484,3998,3999],{},"goto语句\n语法：goto 标记;",[14,4001,4002],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[27,4004,4006],{"className":519,"code":4005,"language":521,"meta":32,"style":32},"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",[34,4007,4008,4016,4020,4033,4043,4056,4069,4082,4090,4106],{"__ignoreMap":32},[37,4009,4010,4012,4014],{"class":39,"line":40},[37,4011,533],{"class":54},[37,4013,2330],{"class":2320},[37,4015,2333],{"class":50},[37,4017,4018],{"class":39,"line":47},[37,4019,1922],{"class":50},[37,4021,4022,4024,4026,4029,4031],{"class":39,"line":104},[37,4023,1927],{"class":50},[37,4025,1552],{"class":54},[37,4027,4028],{"class":185},"\"1\"",[37,4030,1552],{"class":54},[37,4032,1574],{"class":50},[37,4034,4035,4038,4041],{"class":39,"line":113},[37,4036,4037],{"class":54},"    goto",[37,4039,4040],{"class":2320}," FLAG",[37,4042,1669],{"class":50},[37,4044,4045,4047,4049,4052,4054],{"class":39,"line":189},[37,4046,1927],{"class":50},[37,4048,1552],{"class":54},[37,4050,4051],{"class":185},"\"2\"",[37,4053,1552],{"class":54},[37,4055,1574],{"class":50},[37,4057,4058,4060,4062,4065,4067],{"class":39,"line":195},[37,4059,1927],{"class":50},[37,4061,1552],{"class":54},[37,4063,4064],{"class":185},"\"3\"",[37,4066,1552],{"class":54},[37,4068,1574],{"class":50},[37,4070,4071,4073,4075,4078,4080],{"class":39,"line":201},[37,4072,1927],{"class":50},[37,4074,1552],{"class":54},[37,4076,4077],{"class":185},"\"4\"",[37,4079,1552],{"class":54},[37,4081,1574],{"class":50},[37,4083,4084,4087],{"class":39,"line":207},[37,4085,4086],{"class":2320},"    FLAG",[37,4088,4089],{"class":50},":\n",[37,4091,4092,4094,4096,4099,4101,4103],{"class":39,"line":213},[37,4093,1927],{"class":50},[37,4095,1552],{"class":54},[37,4097,4098],{"class":185},"\"5\"",[37,4100,1552],{"class":54},[37,4102,1617],{"class":50},[37,4104,4105],{"class":43},"\u002F\u002F跳过了2,3,4,直接到5\n",[37,4107,4108],{"class":39,"line":218},[37,4109,1941],{"class":50},[469,4111,4113],{"id":4112},"_17数组","1.7数组",[498,4115,4117],{"id":4116},"_171一维数组","1.7.1一维数组",[481,4119,4120],{},[484,4121,4122],{},"一维数组定义方式",[661,4124,4125,4135],{},[664,4126,4127],{},[667,4128,4129,4132],{},[670,4130,4131],{},"方式",[670,4133,4134],{},"注意事项",[708,4136,4137,4151,4161],{},[667,4138,4139,4145],{},[713,4140,4141,4142,582],{},"数据类型 数组名",[37,4143,4144],{},"数组长度",[713,4146,4147,4148,4150],{},"这种方式是先定义再arr",[37,4149,954],{},"赋值",[667,4152,4153,4158],{},[713,4154,4141,4155,4157],{},[37,4156,4144],{},"={值1,值2....};",[713,4159,4160],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[667,4162,4163,4167],{},[713,4164,4141,4165,4157],{},[37,4166],{},[713,4168,4169,4170,4172],{},"int arr",[37,4171],{},";这是不正确的，按照这样的方式定义必须有初始长度",[481,4174,4175],{"start":47},[484,4176,4177],{},"一维数组数组名\n用途：",[1515,4179,4180],{},[484,4181,4182],{},"1.可以统计整个数组在内存中的长度：",[27,4184,4186],{"className":519,"code":4185,"language":521,"meta":32,"style":32},"sizeof(arr);\nsizeof(arr[0]);\n",[34,4187,4188,4195],{"__ignoreMap":32},[37,4189,4190,4192],{"class":39,"line":40},[37,4191,528],{"class":54},[37,4193,4194],{"class":50},"(arr);\n",[37,4196,4197,4199,4202,4204],{"class":39,"line":47},[37,4198,528],{"class":54},[37,4200,4201],{"class":50},"(arr[",[37,4203,135],{"class":61},[37,4205,4206],{"class":50},"]);\n",[1515,4208,4209],{},[484,4210,4211],{},"2.可以获取数组在内存中的首地址:",[27,4213,4215],{"className":519,"code":4214,"language":521,"meta":32,"style":32},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[34,4216,4217,4222,4235,4240],{"__ignoreMap":32},[37,4218,4219],{"class":39,"line":40},[37,4220,4221],{"class":43},"\u002F\u002F查看16进制的首地址\n",[37,4223,4224,4226,4228,4231,4233],{"class":39,"line":47},[37,4225,1745],{"class":50},[37,4227,1552],{"class":54},[37,4229,4230],{"class":50},"arr",[37,4232,1552],{"class":54},[37,4234,1574],{"class":50},[37,4236,4237],{"class":39,"line":104},[37,4238,4239],{"class":43},"\u002F\u002F看10进制数\n",[37,4241,4242,4244,4246,4248,4250,4252,4254,4257,4259,4261,4263],{"class":39,"line":113},[37,4243,1745],{"class":50},[37,4245,1552],{"class":54},[37,4247,165],{"class":50},[37,4249,533],{"class":54},[37,4251,138],{"class":50},[37,4253,869],{"class":54},[37,4255,4256],{"class":50},"arr[",[37,4258,135],{"class":61},[37,4260,1448],{"class":50},[37,4262,1552],{"class":54},[37,4264,1574],{"class":50},[14,4266,4267],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1515,4269,4270],{},[484,4271,4272],{},"1️⃣五只小猪称体重",[27,4274,4276],{"className":519,"code":4275,"language":521,"meta":32,"style":32},"#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",[34,4277,4278,4284,4294,4302,4306,4346,4359,4385,4389,4401,4405,4415,4419,4423,4436,4446],{"__ignoreMap":32},[37,4279,4280,4282],{"class":39,"line":40},[37,4281,2306],{"class":54},[37,4283,2309],{"class":185},[37,4285,4286,4288,4290,4292],{"class":39,"line":47},[37,4287,2314],{"class":54},[37,4289,2317],{"class":54},[37,4291,2321],{"class":2320},[37,4293,1669],{"class":50},[37,4295,4296,4298,4300],{"class":39,"line":104},[37,4297,533],{"class":54},[37,4299,2330],{"class":2320},[37,4301,2333],{"class":50},[37,4303,4304],{"class":39,"line":113},[37,4305,1922],{"class":50},[37,4307,4308,4310,4313,4315,4317,4319,4321,4324,4326,4329,4331,4333,4335,4338,4340,4343],{"class":39,"line":189},[37,4309,2342],{"class":54},[37,4311,4312],{"class":50}," arr[",[37,4314,836],{"class":61},[37,4316,1448],{"class":50},[37,4318,55],{"class":54},[37,4320,1404],{"class":50},[37,4322,4323],{"class":61},"300",[37,4325,65],{"class":50},[37,4327,4328],{"class":61},"350",[37,4330,65],{"class":50},[37,4332,2087],{"class":61},[37,4334,65],{"class":50},[37,4336,4337],{"class":61},"400",[37,4339,65],{"class":50},[37,4341,4342],{"class":61},"250",[37,4344,4345],{"class":50},"};\n",[37,4347,4348,4350,4353,4355,4357],{"class":39,"line":195},[37,4349,2342],{"class":54},[37,4351,4352],{"class":50}," tmp",[37,4354,55],{"class":54},[37,4356,135],{"class":61},[37,4358,1669],{"class":50},[37,4360,4361,4363,4365,4367,4369,4371,4373,4375,4377,4379,4381,4383],{"class":39,"line":201},[37,4362,3551],{"class":54},[37,4364,2027],{"class":50},[37,4366,533],{"class":54},[37,4368,3382],{"class":50},[37,4370,55],{"class":54},[37,4372,135],{"class":61},[37,4374,3389],{"class":50},[37,4376,1418],{"class":54},[37,4378,836],{"class":61},[37,4380,3389],{"class":50},[37,4382,2649],{"class":54},[37,4384,280],{"class":50},[37,4386,4387],{"class":39,"line":207},[37,4388,2387],{"class":50},[37,4390,4391,4393,4396,4398],{"class":39,"line":213},[37,4392,2854],{"class":54},[37,4394,4395],{"class":50},"(tmp",[37,4397,1418],{"class":54},[37,4399,4400],{"class":50},"arr[i])\n",[37,4402,4403],{"class":39,"line":218},[37,4404,2867],{"class":50},[37,4406,4407,4410,4412],{"class":39,"line":227},[37,4408,4409],{"class":50},"            tmp",[37,4411,55],{"class":54},[37,4413,4414],{"class":50},"arr[i];\n",[37,4416,4417],{"class":39,"line":232},[37,4418,2886],{"class":50},[37,4420,4421],{"class":39,"line":238},[37,4422,2544],{"class":50},[37,4424,4425,4427,4429,4432,4434],{"class":39,"line":244},[37,4426,1927],{"class":50},[37,4428,1552],{"class":54},[37,4430,4431],{"class":50},"tmp",[37,4433,1552],{"class":54},[37,4435,1574],{"class":50},[37,4437,4438,4441,4444],{"class":39,"line":250},[37,4439,4440],{"class":54},"    return",[37,4442,4443],{"class":61}," 0",[37,4445,1669],{"class":50},[37,4447,4448],{"class":39,"line":256},[37,4449,1941],{"class":50},[1515,4451,4452],{},[484,4453,4454],{},"2️⃣数组元素逆置",[27,4456,4458],{"className":519,"code":4457,"language":521,"meta":32,"style":32},"\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",[34,4459,4460,4465,4471,4481,4489,4493,4528,4544,4576,4589,4594,4599,4611,4621,4631,4636,4645,4655,4660,4665,4692,4696,4712,4716,4727,4736],{"__ignoreMap":32},[37,4461,4462],{"class":39,"line":40},[37,4463,4464],{"class":43},"\u002F\u002F元素逆置\n",[37,4466,4467,4469],{"class":39,"line":47},[37,4468,2306],{"class":54},[37,4470,2309],{"class":185},[37,4472,4473,4475,4477,4479],{"class":39,"line":104},[37,4474,2314],{"class":54},[37,4476,2317],{"class":54},[37,4478,2321],{"class":2320},[37,4480,1669],{"class":50},[37,4482,4483,4485,4487],{"class":39,"line":113},[37,4484,533],{"class":54},[37,4486,2330],{"class":2320},[37,4488,2333],{"class":50},[37,4490,4491],{"class":39,"line":189},[37,4492,1922],{"class":50},[37,4494,4495,4498,4500,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522,4524,4526],{"class":39,"line":195},[37,4496,4497],{"class":54},"   int",[37,4499,4312],{"class":50},[37,4501,836],{"class":61},[37,4503,1448],{"class":50},[37,4505,55],{"class":54},[37,4507,1404],{"class":50},[37,4509,332],{"class":61},[37,4511,65],{"class":50},[37,4513,602],{"class":61},[37,4515,65],{"class":50},[37,4517,62],{"class":61},[37,4519,65],{"class":50},[37,4521,168],{"class":61},[37,4523,65],{"class":50},[37,4525,836],{"class":61},[37,4527,4345],{"class":50},[37,4529,4530,4532,4535,4537,4539,4541],{"class":39,"line":201},[37,4531,4497],{"class":54},[37,4533,4534],{"class":50}," start",[37,4536,55],{"class":54},[37,4538,135],{"class":61},[37,4540,582],{"class":50},[37,4542,4543],{"class":43},"\u002F\u002F起始下标\n",[37,4545,4546,4548,4551,4554,4557,4560,4562,4564,4567,4569,4571,4573],{"class":39,"line":207},[37,4547,4497],{"class":54},[37,4549,4550],{"class":50}," end",[37,4552,4553],{"class":54},"=sizeof",[37,4555,4556],{"class":50},"(arr)",[37,4558,4559],{"class":54},"\u002Fsizeof",[37,4561,4201],{"class":50},[37,4563,135],{"class":61},[37,4565,4566],{"class":50},"])",[37,4568,384],{"class":54},[37,4570,332],{"class":61},[37,4572,582],{"class":50},[37,4574,4575],{"class":43},"\u002F\u002F结束下标\n",[37,4577,4578,4581,4584,4586],{"class":39,"line":213},[37,4579,4580],{"class":54},"   while",[37,4582,4583],{"class":50}," (start",[37,4585,1418],{"class":54},[37,4587,4588],{"class":50},"end)\n",[37,4590,4591],{"class":39,"line":218},[37,4592,4593],{"class":50},"   {\n",[37,4595,4596],{"class":39,"line":227},[37,4597,4598],{"class":43},"    \u002F\u002F实现元素互换代码\n",[37,4600,4601,4603,4606,4608],{"class":39,"line":232},[37,4602,2342],{"class":54},[37,4604,4605],{"class":50}," temp",[37,4607,55],{"class":54},[37,4609,4610],{"class":50},"arr[start];\n",[37,4612,4613,4616,4618],{"class":39,"line":238},[37,4614,4615],{"class":50},"    arr[start]",[37,4617,55],{"class":54},[37,4619,4620],{"class":50},"arr[end];\n",[37,4622,4623,4626,4628],{"class":39,"line":244},[37,4624,4625],{"class":50},"    arr[end]",[37,4627,55],{"class":54},[37,4629,4630],{"class":50},"temp;\n",[37,4632,4633],{"class":39,"line":250},[37,4634,4635],{"class":43},"    \u002F\u002F下标更新\n",[37,4637,4638,4641,4643],{"class":39,"line":256},[37,4639,4640],{"class":50},"    start",[37,4642,2649],{"class":54},[37,4644,1669],{"class":50},[37,4646,4647,4650,4653],{"class":39,"line":261},[37,4648,4649],{"class":50},"    end",[37,4651,4652],{"class":54},"--",[37,4654,1669],{"class":50},[37,4656,4657],{"class":39,"line":267},[37,4658,4659],{"class":50},"   }\n",[37,4661,4662],{"class":39,"line":283},[37,4663,4664],{"class":43},"   \u002F\u002F输出逆置后的数组\n",[37,4666,4667,4670,4672,4674,4676,4678,4680,4682,4684,4686,4688,4690],{"class":39,"line":288},[37,4668,4669],{"class":54},"   for",[37,4671,2027],{"class":50},[37,4673,533],{"class":54},[37,4675,3382],{"class":50},[37,4677,55],{"class":54},[37,4679,135],{"class":61},[37,4681,3389],{"class":50},[37,4683,1418],{"class":54},[37,4685,836],{"class":61},[37,4687,3389],{"class":50},[37,4689,2649],{"class":54},[37,4691,280],{"class":50},[37,4693,4694],{"class":39,"line":294},[37,4695,4593],{"class":50},[37,4697,4698,4700,4702,4705,4707,4710],{"class":39,"line":300},[37,4699,1927],{"class":50},[37,4701,1552],{"class":54},[37,4703,4704],{"class":50},"arr[i]",[37,4706,1552],{"class":54},[37,4708,4709],{"class":185},"\" \"",[37,4711,1669],{"class":50},[37,4713,4714],{"class":39,"line":306},[37,4715,4659],{"class":50},[37,4717,4718,4721,4723,4725],{"class":39,"line":312},[37,4719,4720],{"class":2320},"   system",[37,4722,165],{"class":50},[37,4724,2665],{"class":185},[37,4726,3069],{"class":50},[37,4728,4729,4732,4734],{"class":39,"line":317},[37,4730,4731],{"class":54},"   return",[37,4733,4443],{"class":61},[37,4735,1669],{"class":50},[37,4737,4738],{"class":39,"line":323},[37,4739,1941],{"class":50},[1515,4741,4742],{},[484,4743,4744],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[27,4746,4748],{"className":519,"code":4747,"language":521,"meta":32,"style":32},"\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",[34,4749,4750,4755,4761,4771,4779,4783,4835,4848,4874,4878,4892,4896,4901,4906,4936,4940,4945,4979,4983,4988,5007,5012,5024,5040,5055,5060,5064,5068,5081,5107,5111,5125,5129,5137],{"__ignoreMap":32},[37,4751,4752],{"class":39,"line":40},[37,4753,4754],{"class":43},"\u002F\u002F冒泡排序,升序\n",[37,4756,4757,4759],{"class":39,"line":47},[37,4758,2306],{"class":54},[37,4760,2309],{"class":185},[37,4762,4763,4765,4767,4769],{"class":39,"line":104},[37,4764,2314],{"class":54},[37,4766,2317],{"class":54},[37,4768,2321],{"class":2320},[37,4770,1669],{"class":50},[37,4772,4773,4775,4777],{"class":39,"line":113},[37,4774,533],{"class":54},[37,4776,2330],{"class":2320},[37,4778,2333],{"class":50},[37,4780,4781],{"class":39,"line":189},[37,4782,1922],{"class":50},[37,4784,4785,4787,4789,4791,4794,4796,4799,4801,4803,4805,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825,4827,4829,4831,4833],{"class":39,"line":195},[37,4786,2342],{"class":54},[37,4788,4312],{"class":50},[37,4790,934],{"class":61},[37,4792,4793],{"class":50},"] ",[37,4795,55],{"class":54},[37,4797,4798],{"class":50}," {",[37,4800,168],{"class":61},[37,4802,65],{"class":50},[37,4804,602],{"class":61},[37,4806,65],{"class":50},[37,4808,73],{"class":61},[37,4810,65],{"class":50},[37,4812,135],{"class":61},[37,4814,65],{"class":50},[37,4816,836],{"class":61},[37,4818,65],{"class":50},[37,4820,885],{"class":61},[37,4822,65],{"class":50},[37,4824,332],{"class":61},[37,4826,65],{"class":50},[37,4828,62],{"class":61},[37,4830,65],{"class":50},[37,4832,934],{"class":61},[37,4834,4345],{"class":50},[37,4836,4837,4839,4841,4844,4846],{"class":39,"line":201},[37,4838,1927],{"class":50},[37,4840,1552],{"class":54},[37,4842,4843],{"class":185},"\"排序前：\"",[37,4845,1552],{"class":54},[37,4847,1574],{"class":50},[37,4849,4850,4852,4854,4856,4858,4860,4862,4864,4866,4868,4870,4872],{"class":39,"line":207},[37,4851,3551],{"class":54},[37,4853,2027],{"class":50},[37,4855,533],{"class":54},[37,4857,3382],{"class":50},[37,4859,55],{"class":54},[37,4861,135],{"class":61},[37,4863,3389],{"class":50},[37,4865,1418],{"class":54},[37,4867,934],{"class":61},[37,4869,3389],{"class":50},[37,4871,2649],{"class":54},[37,4873,280],{"class":50},[37,4875,4876],{"class":39,"line":213},[37,4877,2387],{"class":50},[37,4879,4880,4882,4884,4886,4888,4890],{"class":39,"line":218},[37,4881,3801],{"class":50},[37,4883,1552],{"class":54},[37,4885,4704],{"class":50},[37,4887,1552],{"class":54},[37,4889,4709],{"class":185},[37,4891,1669],{"class":50},[37,4893,4894],{"class":39,"line":227},[37,4895,2544],{"class":50},[37,4897,4898],{"class":39,"line":232},[37,4899,4900],{"class":43},"    \u002F\u002F开始冒泡排序\n",[37,4902,4903],{"class":39,"line":238},[37,4904,4905],{"class":43},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[37,4907,4908,4910,4912,4914,4916,4918,4920,4922,4924,4926,4928,4930,4932,4934],{"class":39,"line":244},[37,4909,3551],{"class":54},[37,4911,2027],{"class":50},[37,4913,533],{"class":54},[37,4915,3382],{"class":50},[37,4917,55],{"class":54},[37,4919,135],{"class":61},[37,4921,3389],{"class":50},[37,4923,1418],{"class":54},[37,4925,934],{"class":61},[37,4927,384],{"class":54},[37,4929,332],{"class":61},[37,4931,3389],{"class":50},[37,4933,2649],{"class":54},[37,4935,280],{"class":50},[37,4937,4938],{"class":39,"line":250},[37,4939,2387],{"class":50},[37,4941,4942],{"class":39,"line":256},[37,4943,4944],{"class":43},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[37,4946,4947,4949,4951,4953,4955,4957,4959,4961,4963,4965,4967,4969,4971,4973,4975,4977],{"class":39,"line":261},[37,4948,3753],{"class":54},[37,4950,2027],{"class":50},[37,4952,533],{"class":54},[37,4954,3760],{"class":50},[37,4956,55],{"class":54},[37,4958,135],{"class":61},[37,4960,3767],{"class":50},[37,4962,1418],{"class":54},[37,4964,934],{"class":61},[37,4966,384],{"class":54},[37,4968,954],{"class":50},[37,4970,384],{"class":54},[37,4972,332],{"class":61},[37,4974,3767],{"class":50},[37,4976,2649],{"class":54},[37,4978,280],{"class":50},[37,4980,4981],{"class":39,"line":267},[37,4982,2867],{"class":50},[37,4984,4985],{"class":39,"line":283},[37,4986,4987],{"class":43},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[37,4989,4990,4993,4996,4998,5001,5003,5005],{"class":39,"line":288},[37,4991,4992],{"class":54},"            if",[37,4994,4995],{"class":50},"(arr[j]",[37,4997,1468],{"class":54},[37,4999,5000],{"class":50},"arr[j",[37,5002,993],{"class":54},[37,5004,332],{"class":61},[37,5006,101],{"class":50},[37,5008,5009],{"class":39,"line":294},[37,5010,5011],{"class":50},"            {\n",[37,5013,5014,5017,5019,5021],{"class":39,"line":300},[37,5015,5016],{"class":54},"                int",[37,5018,4605],{"class":50},[37,5020,55],{"class":54},[37,5022,5023],{"class":50},"arr[j];\n",[37,5025,5026,5029,5031,5033,5035,5037],{"class":39,"line":306},[37,5027,5028],{"class":50},"                arr[j]",[37,5030,55],{"class":54},[37,5032,5000],{"class":50},[37,5034,993],{"class":54},[37,5036,332],{"class":61},[37,5038,5039],{"class":50},"];\n",[37,5041,5042,5045,5047,5049,5051,5053],{"class":39,"line":312},[37,5043,5044],{"class":50},"                arr[j",[37,5046,993],{"class":54},[37,5048,332],{"class":61},[37,5050,1448],{"class":50},[37,5052,55],{"class":54},[37,5054,4630],{"class":50},[37,5056,5057],{"class":39,"line":317},[37,5058,5059],{"class":50},"            }\n",[37,5061,5062],{"class":39,"line":323},[37,5063,2886],{"class":50},[37,5065,5066],{"class":39,"line":337},[37,5067,2544],{"class":50},[37,5069,5070,5072,5074,5077,5079],{"class":39,"line":342},[37,5071,1927],{"class":50},[37,5073,1552],{"class":54},[37,5075,5076],{"class":185},"\"排序后：\"",[37,5078,1552],{"class":54},[37,5080,1574],{"class":50},[37,5082,5083,5085,5087,5089,5091,5093,5095,5097,5099,5101,5103,5105],{"class":39,"line":347},[37,5084,3551],{"class":54},[37,5086,2027],{"class":50},[37,5088,533],{"class":54},[37,5090,3382],{"class":50},[37,5092,55],{"class":54},[37,5094,135],{"class":61},[37,5096,3389],{"class":50},[37,5098,1418],{"class":54},[37,5100,934],{"class":61},[37,5102,3389],{"class":50},[37,5104,2649],{"class":54},[37,5106,280],{"class":50},[37,5108,5109],{"class":39,"line":352},[37,5110,2387],{"class":50},[37,5112,5113,5115,5117,5119,5121,5123],{"class":39,"line":357},[37,5114,3801],{"class":50},[37,5116,1552],{"class":54},[37,5118,4704],{"class":50},[37,5120,1552],{"class":54},[37,5122,4709],{"class":185},[37,5124,1669],{"class":50},[37,5126,5127],{"class":39,"line":362},[37,5128,2544],{"class":50},[37,5130,5131,5133,5135],{"class":39,"line":367},[37,5132,4440],{"class":54},[37,5134,4443],{"class":61},[37,5136,1669],{"class":50},[37,5138,5139],{"class":39,"line":373},[37,5140,1941],{"class":50},[498,5142,5144],{"id":5143},"_172二维数组","1.7.2二维数组",[481,5146,5147],{},[484,5148,5149],{},"二维数组的四种定义方式",[661,5151,5152,5161],{},[664,5153,5154],{},[667,5155,5156,5159],{},[670,5157,5158],{},"序号",[670,5160,4131],{},[708,5162,5163,5173,5182,5191,5200],{},[667,5164,5165,5167],{},[713,5166,332],{},[713,5168,5169,5170,582],{},"数据类型 数组名[行数]",[37,5171,5172],{},"列数",[667,5174,5175,5177],{},[713,5176,602],{},[713,5178,5169,5179,5181],{},[37,5180,5172],{},"={ {数据1,数据2}，{数据3，数据4}... }",[667,5183,5184,5186],{},[713,5185,62],{},[713,5187,5169,5188,5190],{},[37,5189,5172],{},"={数据1,数据2,数据3...}",[667,5192,5193,5195],{},[713,5194,168],{},[713,5196,5197,5198,5190],{},"数据类型 数组名[]",[37,5199,5172],{},[667,5201,5202,5205],{},[713,5203,5204],{},"注意：不能只省略列数",[713,5206],{},[481,5208,5209],{"start":47},[484,5210,5211],{},"二维数组数组名",[1515,5213,5214,5217],{},[484,5215,5216],{},"1.查看二维数组所占内存空间",[484,5218,5219],{},"2.获取二维数组首地址",[14,5221,5222],{},"已知二维数组，求二维数组的行数与列数",[27,5224,5226],{"className":519,"code":5225,"language":521,"meta":32,"style":32},"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",[34,5227,5228,5236,5240,5258,5262,5280,5296,5301,5326,5359],{"__ignoreMap":32},[37,5229,5230,5232,5234],{"class":39,"line":40},[37,5231,533],{"class":54},[37,5233,2330],{"class":2320},[37,5235,2333],{"class":50},[37,5237,5238],{"class":39,"line":47},[37,5239,1922],{"class":50},[37,5241,5242,5244,5246,5248,5251,5253,5255],{"class":39,"line":104},[37,5243,2342],{"class":54},[37,5245,4312],{"class":50},[37,5247,602],{"class":61},[37,5249,5250],{"class":50},"][",[37,5252,62],{"class":61},[37,5254,1448],{"class":50},[37,5256,5257],{"class":54},"=\n",[37,5259,5260],{"class":39,"line":113},[37,5261,2387],{"class":50},[37,5263,5264,5267,5269,5271,5273,5275,5277],{"class":39,"line":189},[37,5265,5266],{"class":50},"        {",[37,5268,332],{"class":61},[37,5270,65],{"class":50},[37,5272,602],{"class":61},[37,5274,65],{"class":50},[37,5276,62],{"class":61},[37,5278,5279],{"class":50},"},\n",[37,5281,5282,5284,5286,5288,5290,5292,5294],{"class":39,"line":195},[37,5283,5266],{"class":50},[37,5285,168],{"class":61},[37,5287,65],{"class":50},[37,5289,836],{"class":61},[37,5291,65],{"class":50},[37,5293,93],{"class":61},[37,5295,1941],{"class":50},[37,5297,5298],{"class":39,"line":201},[37,5299,5300],{"class":50},"    };\n",[37,5302,5303,5305,5307,5310,5312,5314,5316,5318,5320,5322,5324],{"class":39,"line":207},[37,5304,1927],{"class":50},[37,5306,1552],{"class":54},[37,5308,5309],{"class":185},"\"二维数组的行数\"",[37,5311,1748],{"class":54},[37,5313,4556],{"class":50},[37,5315,4559],{"class":54},[37,5317,4201],{"class":50},[37,5319,135],{"class":61},[37,5321,4566],{"class":50},[37,5323,1552],{"class":54},[37,5325,1574],{"class":50},[37,5327,5328,5330,5332,5335,5337,5339,5341,5343,5345,5347,5349,5351,5353,5355,5357],{"class":39,"line":213},[37,5329,1927],{"class":50},[37,5331,1552],{"class":54},[37,5333,5334],{"class":185},"\"二维数组的列数\"",[37,5336,1748],{"class":54},[37,5338,4201],{"class":50},[37,5340,135],{"class":61},[37,5342,4566],{"class":50},[37,5344,4559],{"class":54},[37,5346,4201],{"class":50},[37,5348,135],{"class":61},[37,5350,5250],{"class":50},[37,5352,135],{"class":61},[37,5354,4566],{"class":50},[37,5356,1552],{"class":54},[37,5358,1574],{"class":50},[37,5360,5361],{"class":39,"line":218},[37,5362,1941],{"class":50},[14,5364,5365],{},"查看二维数组首地址",[27,5367,5369],{"className":519,"code":5368,"language":521,"meta":32,"style":32},"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",[34,5370,5371,5388,5414,5439],{"__ignoreMap":32},[37,5372,5373,5375,5377,5380,5382,5384,5386],{"class":39,"line":40},[37,5374,1745],{"class":50},[37,5376,1552],{"class":54},[37,5378,5379],{"class":185},"\"二维数组首地址：\"",[37,5381,1552],{"class":54},[37,5383,4230],{"class":50},[37,5385,1552],{"class":54},[37,5387,1574],{"class":50},[37,5389,5390,5392,5394,5397,5399,5401,5403,5406,5408,5410,5412],{"class":39,"line":47},[37,5391,1745],{"class":50},[37,5393,1552],{"class":54},[37,5395,5396],{"class":185},"\"二维数组第一行的首地址：\"",[37,5398,1552],{"class":54},[37,5400,165],{"class":50},[37,5402,533],{"class":54},[37,5404,5405],{"class":50},")arr[",[37,5407,135],{"class":61},[37,5409,1448],{"class":50},[37,5411,1552],{"class":54},[37,5413,1574],{"class":50},[37,5415,5416,5418,5420,5423,5425,5427,5429,5431,5433,5435,5437],{"class":39,"line":104},[37,5417,1745],{"class":50},[37,5419,1552],{"class":54},[37,5421,5422],{"class":185},"\"二维数组第二行的首地址：\"",[37,5424,1552],{"class":54},[37,5426,165],{"class":50},[37,5428,533],{"class":54},[37,5430,5405],{"class":50},[37,5432,332],{"class":61},[37,5434,1448],{"class":50},[37,5436,1552],{"class":54},[37,5438,1574],{"class":50},[37,5440,5441,5443,5445,5448,5450,5452,5454,5456,5458,5460,5462,5464,5466,5468,5470,5472],{"class":39,"line":113},[37,5442,1745],{"class":50},[37,5444,1552],{"class":54},[37,5446,5447],{"class":185},"\"二维数组第一个元素的首地址:\"",[37,5449,1552],{"class":54},[37,5451,165],{"class":50},[37,5453,533],{"class":54},[37,5455,138],{"class":50},[37,5457,869],{"class":54},[37,5459,4256],{"class":50},[37,5461,135],{"class":61},[37,5463,5250],{"class":50},[37,5465,135],{"class":61},[37,5467,1448],{"class":50},[37,5469,1552],{"class":54},[37,5471,1617],{"class":50},[37,5473,5474],{"class":43},"\u002F\u002F对于数，要加取址符\n",[446,5476,5477],{},"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":32,"searchDepth":47,"depth":47,"links":5479},[5480,5481,5482,5490,5491,5497,5502],{"id":471,"depth":47,"text":472},{"id":478,"depth":47,"text":479},{"id":495,"depth":47,"text":496,"children":5483},[5484,5485,5486,5487,5488,5489],{"id":500,"depth":104,"text":501},{"id":545,"depth":104,"text":546},{"id":610,"depth":104,"text":611},{"id":1533,"depth":104,"text":1534},{"id":1623,"depth":104,"text":1624},{"id":1719,"depth":104,"text":1720},{"id":1761,"depth":47,"text":1762},{"id":1829,"depth":47,"text":1830,"children":5492},[5493,5494,5495,5496],{"id":1833,"depth":104,"text":1834},{"id":1855,"depth":104,"text":1856},{"id":1864,"depth":104,"text":1865},{"id":1873,"depth":104,"text":1874},{"id":1882,"depth":47,"text":1883,"children":5498},[5499,5500,5501],{"id":1886,"depth":104,"text":1887},{"id":2562,"depth":104,"text":2563},{"id":3971,"depth":104,"text":3972},{"id":4112,"depth":47,"text":4113,"children":5503},[5504,5505],{"id":4116,"depth":104,"text":4117},{"id":5143,"depth":104,"text":5144},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":462,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5512,"title":5513,"body":5514,"description":32,"extension":452,"meta":6613,"navigation":454,"path":6614,"seo":6615,"stem":6616,"__hash__":6617},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5515,"toc":6605},[5516,5519,5523,5531,5539,5542,5607,5611,5614,5690,5694,5697,5700,5703,5916,5920,5925,5989,5994,6061,6066,6157,6160,6265,6269,6272,6278,6422,6426,6429,6443,6446,6491,6494,6602],[10,5517,5513],{"id":5518},"_2函数",[469,5520,5522],{"id":5521},"_21函数概述","2.1函数概述",[481,5524,5525,5528],{},[484,5526,5527],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[484,5529,5530],{},"语法：",[27,5532,5537],{"className":5533,"code":5535,"language":5536,"meta":32},[5534],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[34,5538,5535],{"__ignoreMap":32},[14,5540,5541],{},"小案例",[27,5543,5545],{"className":519,"code":5544,"language":521,"meta":32,"style":32},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[34,5546,5547,5552,5575,5579,5596,5603],{"__ignoreMap":32},[37,5548,5549],{"class":39,"line":40},[37,5550,5551],{"class":43},"\u002F\u002Fnum1,num2形参\n",[37,5553,5554,5556,5559,5561,5563,5566,5568,5570,5573],{"class":39,"line":47},[37,5555,533],{"class":54},[37,5557,5558],{"class":2320}," add",[37,5560,165],{"class":50},[37,5562,533],{"class":54},[37,5564,5565],{"class":159}," num1",[37,5567,65],{"class":50},[37,5569,533],{"class":54},[37,5571,5572],{"class":159}," num2",[37,5574,280],{"class":50},[37,5576,5577],{"class":39,"line":104},[37,5578,1922],{"class":50},[37,5580,5581,5583,5586,5588,5591,5593],{"class":39,"line":113},[37,5582,2342],{"class":54},[37,5584,5585],{"class":50}," sum",[37,5587,55],{"class":54},[37,5589,5590],{"class":50},"num1",[37,5592,993],{"class":54},[37,5594,5595],{"class":50},"num2;\n",[37,5597,5598,5600],{"class":39,"line":189},[37,5599,4440],{"class":54},[37,5601,5602],{"class":50}," sum;\n",[37,5604,5605],{"class":39,"line":195},[37,5606,1941],{"class":50},[469,5608,5610],{"id":5609},"_22函数调用","2.2函数调用",[14,5612,5613],{},"调用刚刚写的求和函数",[27,5615,5617],{"className":519,"code":5616,"language":521,"meta":32,"style":32},"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",[34,5618,5619,5627,5631,5636,5648,5660,5669,5674,5686],{"__ignoreMap":32},[37,5620,5621,5623,5625],{"class":39,"line":40},[37,5622,533],{"class":54},[37,5624,2330],{"class":2320},[37,5626,2333],{"class":50},[37,5628,5629],{"class":39,"line":47},[37,5630,1922],{"class":50},[37,5632,5633],{"class":39,"line":104},[37,5634,5635],{"class":43},"    \u002F\u002Fa,b实参\n",[37,5637,5638,5640,5642,5644,5646],{"class":39,"line":113},[37,5639,2342],{"class":54},[37,5641,1774],{"class":50},[37,5643,55],{"class":54},[37,5645,135],{"class":61},[37,5647,1669],{"class":50},[37,5649,5650,5652,5654,5656,5658],{"class":39,"line":189},[37,5651,2342],{"class":54},[37,5653,3183],{"class":50},[37,5655,55],{"class":54},[37,5657,135],{"class":61},[37,5659,1669],{"class":50},[37,5661,5662,5664,5666],{"class":39,"line":195},[37,5663,2369],{"class":50},[37,5665,1805],{"class":54},[37,5667,5668],{"class":50},"a,b;\n",[37,5670,5671],{"class":39,"line":201},[37,5672,5673],{"class":43},"    \u002F\u002F调用函数时，实参值传给了形参\n",[37,5675,5676,5678,5680,5683],{"class":39,"line":207},[37,5677,1927],{"class":50},[37,5679,1552],{"class":54},[37,5681,5682],{"class":2320},"add",[37,5684,5685],{"class":50},"(a,b);\n",[37,5687,5688],{"class":39,"line":213},[37,5689,1941],{"class":50},[469,5691,5693],{"id":5692},"_23值传递","2.3值传递",[14,5695,5696],{},"值传递就是函数调用时实参将数值传给形参",[14,5698,5699],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5701,5702],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[27,5704,5706],{"className":519,"code":5705,"language":521,"meta":32,"style":32},"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",[34,5707,5708,5730,5734,5747,5764,5782,5793,5802,5811,5824,5840,5856,5865,5869,5877,5881,5893,5905,5912],{"__ignoreMap":32},[37,5709,5710,5713,5716,5718,5720,5722,5724,5726,5728],{"class":39,"line":40},[37,5711,5712],{"class":54},"void",[37,5714,5715],{"class":2320}," swap",[37,5717,165],{"class":50},[37,5719,533],{"class":54},[37,5721,5565],{"class":159},[37,5723,65],{"class":50},[37,5725,533],{"class":54},[37,5727,5572],{"class":159},[37,5729,280],{"class":50},[37,5731,5732],{"class":39,"line":47},[37,5733,1922],{"class":50},[37,5735,5736,5738,5740,5743,5745],{"class":39,"line":104},[37,5737,1927],{"class":50},[37,5739,1552],{"class":54},[37,5741,5742],{"class":185},"\"交换前：\"",[37,5744,1552],{"class":54},[37,5746,1574],{"class":50},[37,5748,5749,5751,5753,5756,5758,5760,5762],{"class":39,"line":113},[37,5750,1927],{"class":50},[37,5752,1552],{"class":54},[37,5754,5755],{"class":185},"\"num1=\"",[37,5757,1552],{"class":54},[37,5759,5590],{"class":50},[37,5761,1552],{"class":54},[37,5763,1574],{"class":50},[37,5765,5766,5768,5770,5773,5775,5778,5780],{"class":39,"line":189},[37,5767,1927],{"class":50},[37,5769,1552],{"class":54},[37,5771,5772],{"class":185},"\"num2=\"",[37,5774,1552],{"class":54},[37,5776,5777],{"class":50},"num2",[37,5779,1552],{"class":54},[37,5781,1574],{"class":50},[37,5783,5784,5786,5788,5790],{"class":39,"line":195},[37,5785,2342],{"class":54},[37,5787,4605],{"class":50},[37,5789,55],{"class":54},[37,5791,5792],{"class":50},"num1;\n",[37,5794,5795,5798,5800],{"class":39,"line":201},[37,5796,5797],{"class":50},"    num1",[37,5799,55],{"class":54},[37,5801,5595],{"class":50},[37,5803,5804,5807,5809],{"class":39,"line":207},[37,5805,5806],{"class":50},"    num2",[37,5808,55],{"class":54},[37,5810,4630],{"class":50},[37,5812,5813,5815,5817,5820,5822],{"class":39,"line":213},[37,5814,1927],{"class":50},[37,5816,1552],{"class":54},[37,5818,5819],{"class":185},"\"交换后：\"",[37,5821,1552],{"class":54},[37,5823,1574],{"class":50},[37,5825,5826,5828,5830,5832,5834,5836,5838],{"class":39,"line":218},[37,5827,1927],{"class":50},[37,5829,1552],{"class":54},[37,5831,5755],{"class":185},[37,5833,1552],{"class":54},[37,5835,5590],{"class":50},[37,5837,1552],{"class":54},[37,5839,1574],{"class":50},[37,5841,5842,5844,5846,5848,5850,5852,5854],{"class":39,"line":227},[37,5843,1927],{"class":50},[37,5845,1552],{"class":54},[37,5847,5772],{"class":185},[37,5849,1552],{"class":54},[37,5851,5777],{"class":50},[37,5853,1552],{"class":54},[37,5855,1574],{"class":50},[37,5857,5858,5860,5862],{"class":39,"line":232},[37,5859,4440],{"class":54},[37,5861,582],{"class":50},[37,5863,5864],{"class":43},"\u002F\u002F或者不写\n",[37,5866,5867],{"class":39,"line":238},[37,5868,1941],{"class":50},[37,5870,5871,5873,5875],{"class":39,"line":244},[37,5872,533],{"class":54},[37,5874,2330],{"class":2320},[37,5876,2333],{"class":50},[37,5878,5879],{"class":39,"line":250},[37,5880,1922],{"class":50},[37,5882,5883,5885,5887,5889,5891],{"class":39,"line":256},[37,5884,2342],{"class":54},[37,5886,1774],{"class":50},[37,5888,55],{"class":54},[37,5890,98],{"class":61},[37,5892,1669],{"class":50},[37,5894,5895,5897,5899,5901,5903],{"class":39,"line":261},[37,5896,2342],{"class":54},[37,5898,3183],{"class":50},[37,5900,55],{"class":54},[37,5902,1210],{"class":61},[37,5904,1669],{"class":50},[37,5906,5907,5910],{"class":39,"line":267},[37,5908,5909],{"class":2320},"    swap",[37,5911,5685],{"class":50},[37,5913,5914],{"class":39,"line":283},[37,5915,1941],{"class":50},[469,5917,5919],{"id":5918},"_24函数的常见形式","2.4函数的常见形式",[481,5921,5922],{},[484,5923,5924],{},"无参无返",[27,5926,5928],{"className":519,"code":5927,"language":521,"meta":32,"style":32},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[34,5929,5930,5939,5943,5956,5960,5968,5972,5977,5985],{"__ignoreMap":32},[37,5931,5932,5934,5937],{"class":39,"line":40},[37,5933,5712],{"class":54},[37,5935,5936],{"class":2320}," test01",[37,5938,2333],{"class":50},[37,5940,5941],{"class":39,"line":47},[37,5942,1922],{"class":50},[37,5944,5945,5947,5949,5952,5954],{"class":39,"line":104},[37,5946,1927],{"class":50},[37,5948,1552],{"class":54},[37,5950,5951],{"class":185},"\"你好\"",[37,5953,1552],{"class":54},[37,5955,1574],{"class":50},[37,5957,5958],{"class":39,"line":113},[37,5959,1941],{"class":50},[37,5961,5962,5964,5966],{"class":39,"line":189},[37,5963,533],{"class":54},[37,5965,2330],{"class":2320},[37,5967,2333],{"class":50},[37,5969,5970],{"class":39,"line":195},[37,5971,1922],{"class":50},[37,5973,5974],{"class":39,"line":201},[37,5975,5976],{"class":43},"    \u002F\u002F函数调用\n",[37,5978,5979,5982],{"class":39,"line":207},[37,5980,5981],{"class":2320},"    test01",[37,5983,5984],{"class":50},"();\n",[37,5986,5987],{"class":39,"line":213},[37,5988,1941],{"class":50},[481,5990,5991],{"start":47},[484,5992,5993],{},"有参无返",[27,5995,5997],{"className":519,"code":5996,"language":521,"meta":32,"style":32},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[34,5998,5999,6014,6018,6030,6034,6042,6046,6057],{"__ignoreMap":32},[37,6000,6001,6003,6006,6008,6010,6012],{"class":39,"line":40},[37,6002,5712],{"class":54},[37,6004,6005],{"class":2320}," test02",[37,6007,165],{"class":50},[37,6009,533],{"class":54},[37,6011,1774],{"class":159},[37,6013,280],{"class":50},[37,6015,6016],{"class":39,"line":47},[37,6017,1922],{"class":50},[37,6019,6020,6022,6024,6026,6028],{"class":39,"line":104},[37,6021,1927],{"class":50},[37,6023,1552],{"class":54},[37,6025,5951],{"class":185},[37,6027,1552],{"class":54},[37,6029,1574],{"class":50},[37,6031,6032],{"class":39,"line":113},[37,6033,1941],{"class":50},[37,6035,6036,6038,6040],{"class":39,"line":189},[37,6037,533],{"class":54},[37,6039,2330],{"class":2320},[37,6041,2333],{"class":50},[37,6043,6044],{"class":39,"line":195},[37,6045,1922],{"class":50},[37,6047,6048,6051,6053,6055],{"class":39,"line":201},[37,6049,6050],{"class":2320},"    test02",[37,6052,165],{"class":50},[37,6054,154],{"class":61},[37,6056,3069],{"class":50},[37,6058,6059],{"class":39,"line":207},[37,6060,1941],{"class":50},[481,6062,6063],{"start":104},[484,6064,6065],{},"无参有返",[27,6067,6069],{"className":519,"code":6068,"language":521,"meta":32,"style":32},"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",[34,6070,6071,6080,6084,6096,6105,6109,6117,6121,6134,6153],{"__ignoreMap":32},[37,6072,6073,6075,6078],{"class":39,"line":40},[37,6074,533],{"class":54},[37,6076,6077],{"class":2320}," test03",[37,6079,2333],{"class":50},[37,6081,6082],{"class":39,"line":47},[37,6083,1922],{"class":50},[37,6085,6086,6088,6090,6092,6094],{"class":39,"line":104},[37,6087,1927],{"class":50},[37,6089,1552],{"class":54},[37,6091,5951],{"class":185},[37,6093,1552],{"class":54},[37,6095,1574],{"class":50},[37,6097,6098,6100,6103],{"class":39,"line":113},[37,6099,4440],{"class":54},[37,6101,6102],{"class":61}," 100",[37,6104,1669],{"class":50},[37,6106,6107],{"class":39,"line":189},[37,6108,1941],{"class":50},[37,6110,6111,6113,6115],{"class":39,"line":195},[37,6112,533],{"class":54},[37,6114,2330],{"class":2320},[37,6116,2333],{"class":50},[37,6118,6119],{"class":39,"line":201},[37,6120,1922],{"class":50},[37,6122,6123,6125,6127,6129,6132],{"class":39,"line":207},[37,6124,2342],{"class":54},[37,6126,5565],{"class":50},[37,6128,55],{"class":54},[37,6130,6131],{"class":2320},"test03",[37,6133,5984],{"class":50},[37,6135,6136,6138,6140,6142,6144,6146,6148,6150],{"class":39,"line":213},[37,6137,1927],{"class":50},[37,6139,1552],{"class":54},[37,6141,5755],{"class":185},[37,6143,1552],{"class":54},[37,6145,5590],{"class":50},[37,6147,1552],{"class":54},[37,6149,1617],{"class":50},[37,6151,6152],{"class":43}," \u002F\u002F100\n",[37,6154,6155],{"class":39,"line":218},[37,6156,1941],{"class":50},[14,6158,6159],{},"4.有参有返",[27,6161,6163],{"className":519,"code":6162,"language":521,"meta":32,"style":32},"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",[34,6164,6165,6180,6184,6197,6203,6207,6216,6220,6232,6246,6261],{"__ignoreMap":32},[37,6166,6167,6169,6172,6174,6176,6178],{"class":39,"line":40},[37,6168,533],{"class":54},[37,6170,6171],{"class":2320}," test04",[37,6173,165],{"class":50},[37,6175,533],{"class":54},[37,6177,1774],{"class":159},[37,6179,280],{"class":50},[37,6181,6182],{"class":39,"line":47},[37,6183,1922],{"class":50},[37,6185,6186,6188,6190,6193,6195],{"class":39,"line":104},[37,6187,1927],{"class":50},[37,6189,1552],{"class":54},[37,6191,6192],{"class":185},"\"hello\"",[37,6194,1552],{"class":54},[37,6196,1574],{"class":50},[37,6198,6199,6201],{"class":39,"line":113},[37,6200,4440],{"class":54},[37,6202,1808],{"class":50},[37,6204,6205],{"class":39,"line":189},[37,6206,1941],{"class":50},[37,6208,6209,6211,6214],{"class":39,"line":195},[37,6210,533],{"class":54},[37,6212,6213],{"class":2320}," mian",[37,6215,2333],{"class":50},[37,6217,6218],{"class":39,"line":201},[37,6219,1922],{"class":50},[37,6221,6222,6224,6226,6228,6230],{"class":39,"line":207},[37,6223,2342],{"class":54},[37,6225,3183],{"class":50},[37,6227,55],{"class":54},[37,6229,332],{"class":61},[37,6231,1669],{"class":50},[37,6233,6234,6236,6238,6240,6243],{"class":39,"line":213},[37,6235,2342],{"class":54},[37,6237,3199],{"class":50},[37,6239,55],{"class":54},[37,6241,6242],{"class":2320},"test04",[37,6244,6245],{"class":50},"(b);\n",[37,6247,6248,6250,6252,6254,6256,6258],{"class":39,"line":218},[37,6249,1927],{"class":50},[37,6251,1552],{"class":54},[37,6253,807],{"class":50},[37,6255,1552],{"class":54},[37,6257,1617],{"class":50},[37,6259,6260],{"class":43}," \u002F\u002F1\n",[37,6262,6263],{"class":39,"line":227},[37,6264,1941],{"class":50},[469,6266,6268],{"id":6267},"_25函数的声明","2.5函数的声明",[14,6270,6271],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6273,6274,6275],{},"函数的",[673,6276,6277],{},"声明可以多次，但是函数的定义只能有一次",[27,6279,6281],{"className":519,"code":6280,"language":521,"meta":32,"style":32},"\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",[34,6282,6283,6288,6293,6318,6327,6331,6343,6355,6371,6375,6395,6399,6418],{"__ignoreMap":32},[37,6284,6285],{"class":39,"line":40},[37,6286,6287],{"class":43},"\u002F\u002F函数声明\n",[37,6289,6290],{"class":39,"line":47},[37,6291,6292],{"class":43},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[37,6294,6295,6297,6300,6302,6304,6306,6308,6310,6312,6315],{"class":39,"line":104},[37,6296,533],{"class":54},[37,6298,6299],{"class":2320}," max",[37,6301,165],{"class":50},[37,6303,533],{"class":54},[37,6305,1774],{"class":159},[37,6307,65],{"class":50},[37,6309,533],{"class":54},[37,6311,3183],{"class":159},[37,6313,6314],{"class":50},");",[37,6316,6317],{"class":43},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[37,6319,6320,6322,6324],{"class":39,"line":113},[37,6321,533],{"class":54},[37,6323,2330],{"class":2320},[37,6325,6326],{"class":50},"() \n",[37,6328,6329],{"class":39,"line":189},[37,6330,1922],{"class":50},[37,6332,6333,6335,6337,6339,6341],{"class":39,"line":195},[37,6334,2342],{"class":54},[37,6336,1774],{"class":50},[37,6338,55],{"class":54},[37,6340,98],{"class":61},[37,6342,1669],{"class":50},[37,6344,6345,6347,6349,6351,6353],{"class":39,"line":201},[37,6346,2342],{"class":54},[37,6348,3183],{"class":50},[37,6350,55],{"class":54},[37,6352,1210],{"class":61},[37,6354,1669],{"class":50},[37,6356,6357,6359,6361,6364,6367,6369],{"class":39,"line":207},[37,6358,1927],{"class":50},[37,6360,1552],{"class":54},[37,6362,6363],{"class":2320},"max",[37,6365,6366],{"class":50},"(a,b)",[37,6368,1552],{"class":54},[37,6370,1574],{"class":50},[37,6372,6373],{"class":39,"line":213},[37,6374,1941],{"class":50},[37,6376,6377,6379,6381,6383,6385,6387,6389,6391,6393],{"class":39,"line":218},[37,6378,533],{"class":54},[37,6380,6299],{"class":2320},[37,6382,165],{"class":50},[37,6384,533],{"class":54},[37,6386,1774],{"class":159},[37,6388,65],{"class":50},[37,6390,533],{"class":54},[37,6392,3183],{"class":159},[37,6394,280],{"class":50},[37,6396,6397],{"class":39,"line":227},[37,6398,1922],{"class":50},[37,6400,6401,6403,6405,6407,6409,6411,6413,6415],{"class":39,"line":232},[37,6402,4440],{"class":54},[37,6404,1774],{"class":50},[37,6406,1468],{"class":54},[37,6408,376],{"class":50},[37,6410,1494],{"class":54},[37,6412,51],{"class":50},[37,6414,1368],{"class":54},[37,6416,6417],{"class":50},"b;\n",[37,6419,6420],{"class":39,"line":238},[37,6421,1941],{"class":50},[469,6423,6425],{"id":6424},"_26函数的分文件编写","2.6函数的分文件编写",[14,6427,6428],{},"4个步骤：",[1515,6430,6431,6434,6437,6440],{},[484,6432,6433],{},"1.创建后缀名为.h的头文件",[484,6435,6436],{},"2.创建后缀名为.cpp的源文件",[484,6438,6439],{},"3.在头文件中写函数的定义",[484,6441,6442],{},"4.在源文件中写函数的定义\n示例：",[14,6444,6445],{},"头文件：swap.h",[27,6447,6449],{"className":519,"code":6448,"language":521,"meta":32,"style":32},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[34,6450,6451,6457,6467,6471],{"__ignoreMap":32},[37,6452,6453,6455],{"class":39,"line":40},[37,6454,2306],{"class":54},[37,6456,2309],{"class":185},[37,6458,6459,6461,6463,6465],{"class":39,"line":47},[37,6460,2314],{"class":54},[37,6462,2317],{"class":54},[37,6464,2321],{"class":2320},[37,6466,1669],{"class":50},[37,6468,6469],{"class":39,"line":104},[37,6470,6287],{"class":43},[37,6472,6473,6475,6477,6479,6481,6483,6485,6487,6489],{"class":39,"line":113},[37,6474,5712],{"class":54},[37,6476,5715],{"class":2320},[37,6478,165],{"class":50},[37,6480,533],{"class":54},[37,6482,1774],{"class":159},[37,6484,65],{"class":50},[37,6486,533],{"class":54},[37,6488,3183],{"class":159},[37,6490,3069],{"class":50},[14,6492,6493],{},"源文件：swap.cpp",[27,6495,6497],{"className":519,"code":6496,"language":521,"meta":32,"style":32},"#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",[34,6498,6499,6506,6511,6531,6535,6546,6555,6564,6581,6598],{"__ignoreMap":32},[37,6500,6501,6503],{"class":39,"line":40},[37,6502,2306],{"class":54},[37,6504,6505],{"class":185}," \"swap.h\"\n",[37,6507,6508],{"class":39,"line":47},[37,6509,6510],{"class":43},"\u002F\u002F函数的定义\n",[37,6512,6513,6515,6517,6519,6521,6523,6525,6527,6529],{"class":39,"line":104},[37,6514,5712],{"class":54},[37,6516,5715],{"class":2320},[37,6518,165],{"class":50},[37,6520,533],{"class":54},[37,6522,1774],{"class":159},[37,6524,65],{"class":50},[37,6526,533],{"class":54},[37,6528,3183],{"class":159},[37,6530,280],{"class":50},[37,6532,6533],{"class":39,"line":113},[37,6534,1922],{"class":50},[37,6536,6537,6539,6541,6543],{"class":39,"line":189},[37,6538,2342],{"class":54},[37,6540,4605],{"class":50},[37,6542,55],{"class":54},[37,6544,6545],{"class":50},"a;\n",[37,6547,6548,6551,6553],{"class":39,"line":195},[37,6549,6550],{"class":50},"    a",[37,6552,55],{"class":54},[37,6554,6417],{"class":50},[37,6556,6557,6560,6562],{"class":39,"line":201},[37,6558,6559],{"class":50},"    b",[37,6561,55],{"class":54},[37,6563,4630],{"class":50},[37,6565,6566,6568,6570,6573,6575,6577,6579],{"class":39,"line":207},[37,6567,1927],{"class":50},[37,6569,1552],{"class":54},[37,6571,6572],{"class":185},"\"a=\"",[37,6574,1552],{"class":54},[37,6576,51],{"class":50},[37,6578,1552],{"class":54},[37,6580,1574],{"class":50},[37,6582,6583,6585,6587,6590,6592,6594,6596],{"class":39,"line":213},[37,6584,1927],{"class":50},[37,6586,1552],{"class":54},[37,6588,6589],{"class":185},"\"b=\"",[37,6591,1552],{"class":54},[37,6593,376],{"class":50},[37,6595,1552],{"class":54},[37,6597,1574],{"class":50},[37,6599,6600],{"class":39,"line":218},[37,6601,1941],{"class":50},[446,6603,6604],{},"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":32,"searchDepth":47,"depth":47,"links":6606},[6607,6608,6609,6610,6611,6612],{"id":5521,"depth":47,"text":5522},{"id":5609,"depth":47,"text":5610},{"id":5692,"depth":47,"text":5693},{"id":5918,"depth":47,"text":5919},{"id":6267,"depth":47,"text":6268},{"id":6424,"depth":47,"text":6425},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5513,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6619,"title":6620,"body":6621,"description":6628,"extension":452,"meta":8033,"navigation":454,"path":8034,"seo":8035,"stem":8036,"__hash__":8037},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6622,"toc":8023},[6623,6626,6629,6633,6795,6799,6802,6805,6808,6811,6951,6955,6958,6961,6964,7029,7033,7038,7105,7108,7112,7115,7126,7131,7151,7154,7159,7178,7181,7185,7204,7207,7211,7446,7450,7453,7456,7459,7621,7624,7628,7631,7637,8020],[10,6624,6620],{"id":6625},"_3指针",[14,6627,6628],{},"通过指针保存一个地址，指针就是个地址",[469,6630,6632],{"id":6631},"_31定义指针","3.1定义指针",[27,6634,6636],{"className":519,"code":6635,"language":521,"meta":32,"style":32},"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",[34,6637,6638,6646,6650,6655,6667,6672,6680,6690,6708,6728,6732,6737,6742,6747,6761,6777,6791],{"__ignoreMap":32},[37,6639,6640,6642,6644],{"class":39,"line":40},[37,6641,533],{"class":54},[37,6643,2330],{"class":2320},[37,6645,2333],{"class":50},[37,6647,6648],{"class":39,"line":47},[37,6649,1922],{"class":50},[37,6651,6652],{"class":39,"line":104},[37,6653,6654],{"class":43},"    \u002F\u002F1.定义指针\n",[37,6656,6657,6659,6661,6663,6665],{"class":39,"line":113},[37,6658,2342],{"class":54},[37,6660,1774],{"class":50},[37,6662,55],{"class":54},[37,6664,98],{"class":61},[37,6666,1669],{"class":50},[37,6668,6669],{"class":39,"line":189},[37,6670,6671],{"class":43},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[37,6673,6674,6677],{"class":39,"line":195},[37,6675,6676],{"class":54},"    int*",[37,6678,6679],{"class":50},"p;\n",[37,6681,6682,6685,6688],{"class":39,"line":201},[37,6683,6684],{"class":50},"    p",[37,6686,6687],{"class":54},"=&",[37,6689,6545],{"class":50},[37,6691,6692,6694,6696,6699,6702,6704,6706],{"class":39,"line":207},[37,6693,1927],{"class":50},[37,6695,1552],{"class":54},[37,6697,6698],{"class":185},"\"a的地址为：\"",[37,6700,6701],{"class":54},"\u003C\u003C&",[37,6703,51],{"class":50},[37,6705,1552],{"class":54},[37,6707,1574],{"class":50},[37,6709,6710,6712,6714,6717,6719,6721,6723,6725],{"class":39,"line":213},[37,6711,1927],{"class":50},[37,6713,1552],{"class":54},[37,6715,6716],{"class":185},"\"指针p为：\"",[37,6718,1552],{"class":54},[37,6720,14],{"class":50},[37,6722,1552],{"class":54},[37,6724,1617],{"class":50},[37,6726,6727],{"class":43},"\u002F\u002F指针p表示的就是a的地址\n",[37,6729,6730],{"class":39,"line":218},[37,6731,2757],{"emptyLinePlaceholder":454},[37,6733,6734],{"class":39,"line":227},[37,6735,6736],{"class":43},"    \u002F\u002F2.使用指针\n",[37,6738,6739],{"class":39,"line":232},[37,6740,6741],{"class":43},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[37,6743,6744],{"class":39,"line":238},[37,6745,6746],{"class":43},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[37,6748,6749,6752,6754,6756,6759],{"class":39,"line":244},[37,6750,6751],{"class":54},"    *",[37,6753,14],{"class":50},[37,6755,55],{"class":54},[37,6757,6758],{"class":61},"1000",[37,6760,1669],{"class":50},[37,6762,6763,6765,6768,6770,6772,6774],{"class":39,"line":250},[37,6764,1927],{"class":50},[37,6766,6767],{"class":54},"\u003C\u003C*",[37,6769,14],{"class":50},[37,6771,1552],{"class":54},[37,6773,1617],{"class":50},[37,6775,6776],{"class":43},"\u002F\u002F1000\n",[37,6778,6779,6781,6783,6785,6787,6789],{"class":39,"line":256},[37,6780,1927],{"class":50},[37,6782,1552],{"class":54},[37,6784,51],{"class":50},[37,6786,1552],{"class":54},[37,6788,1617],{"class":50},[37,6790,6776],{"class":43},[37,6792,6793],{"class":39,"line":261},[37,6794,1941],{"class":50},[469,6796,6798],{"id":6797},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6800,6801],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6803,6804],{},"在32位操作系统下：占用4个字节空间",[14,6806,6807],{},"在64位操作系统下：占用8个字节空间",[14,6809,6810],{},"上方是不管啥数据类型的",[27,6812,6814],{"className":519,"code":6813,"language":521,"meta":32,"style":32},"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",[34,6815,6816,6824,6828,6833,6845,6850,6855,6860,6873,6895,6921,6947],{"__ignoreMap":32},[37,6817,6818,6820,6822],{"class":39,"line":40},[37,6819,533],{"class":54},[37,6821,2330],{"class":2320},[37,6823,2333],{"class":50},[37,6825,6826],{"class":39,"line":47},[37,6827,1922],{"class":50},[37,6829,6830],{"class":39,"line":104},[37,6831,6832],{"class":43},"    \u002F\u002F指针所占内存空间\n",[37,6834,6835,6837,6839,6841,6843],{"class":39,"line":113},[37,6836,2342],{"class":54},[37,6838,1774],{"class":50},[37,6840,55],{"class":54},[37,6842,98],{"class":61},[37,6844,1669],{"class":50},[37,6846,6847],{"class":39,"line":189},[37,6848,6849],{"class":43},"    \u002F\u002Fint *p;\n",[37,6851,6852],{"class":39,"line":195},[37,6853,6854],{"class":43},"    \u002F\u002Fp=&a;\n",[37,6856,6857],{"class":39,"line":201},[37,6858,6859],{"class":43},"    \u002F\u002F上述可以写为以下：\n",[37,6861,6862,6864,6867,6869,6871],{"class":39,"line":207},[37,6863,2342],{"class":54},[37,6865,6866],{"class":54}," *",[37,6868,14],{"class":50},[37,6870,6687],{"class":54},[37,6872,6545],{"class":50},[37,6874,6875,6878,6880,6883,6885,6888,6890,6892],{"class":39,"line":213},[37,6876,6877],{"class":50},"    cout ",[37,6879,1552],{"class":54},[37,6881,6882],{"class":185},"\"sizeof(int *)\"",[37,6884,1748],{"class":54},[37,6886,6887],{"class":50},"(p)",[37,6889,1552],{"class":54},[37,6891,1617],{"class":50},[37,6893,6894],{"class":43},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[37,6896,6897,6899,6901,6903,6905,6907,6909,6911,6913,6915,6918],{"class":39,"line":218},[37,6898,6877],{"class":50},[37,6900,1552],{"class":54},[37,6902,6882],{"class":185},[37,6904,1748],{"class":54},[37,6906,165],{"class":50},[37,6908,533],{"class":54},[37,6910,6866],{"class":54},[37,6912,138],{"class":50},[37,6914,1552],{"class":54},[37,6916,6917],{"class":50},"endl",[37,6919,6920],{"class":43},"  \u002F\u002F4字节(32位的话)\n",[37,6922,6923,6925,6927,6930,6932,6934,6936,6938,6940,6942,6944],{"class":39,"line":227},[37,6924,6877],{"class":50},[37,6926,1552],{"class":54},[37,6928,6929],{"class":185},"\"sizeof(char *)\"",[37,6931,1748],{"class":54},[37,6933,165],{"class":50},[37,6935,621],{"class":54},[37,6937,6866],{"class":54},[37,6939,138],{"class":50},[37,6941,1552],{"class":54},[37,6943,1617],{"class":50},[37,6945,6946],{"class":43}," \u002F\u002F4字节(32位的话)\n",[37,6948,6949],{"class":39,"line":232},[37,6950,1941],{"class":50},[469,6952,6954],{"id":6953},"_33空指针","3.3空指针",[14,6956,6957],{},"空指针：指针变量指向内存中编号为0的空间",[14,6959,6960],{},"用途：初始化指针变量",[14,6962,6963],{},"注意：空指针指向的内存是不可以访问的",[27,6965,6967],{"className":519,"code":6966,"language":521,"meta":32,"style":32},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[34,6968,6969,6977,6981,6986,7000,7005,7020,7025],{"__ignoreMap":32},[37,6970,6971,6973,6975],{"class":39,"line":40},[37,6972,533],{"class":54},[37,6974,2330],{"class":2320},[37,6976,2333],{"class":50},[37,6978,6979],{"class":39,"line":47},[37,6980,1922],{"class":50},[37,6982,6983],{"class":39,"line":104},[37,6984,6985],{"class":43},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[37,6987,6988,6990,6992,6994,6996,6998],{"class":39,"line":113},[37,6989,2342],{"class":54},[37,6991,6866],{"class":54},[37,6993,14],{"class":50},[37,6995,55],{"class":54},[37,6997,2749],{"class":61},[37,6999,1669],{"class":50},[37,7001,7002],{"class":39,"line":189},[37,7003,7004],{"class":43},"    \u002F\u002F2.空指针不能进行访问\n",[37,7006,7007,7009,7011,7013,7015,7017],{"class":39,"line":195},[37,7008,6751],{"class":54},[37,7010,14],{"class":50},[37,7012,55],{"class":54},[37,7014,154],{"class":61},[37,7016,582],{"class":50},[37,7018,7019],{"class":43},"\u002F\u002F直接报错，压根不能访问\n",[37,7021,7022],{"class":39,"line":201},[37,7023,7024],{"class":43},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[37,7026,7027],{"class":39,"line":207},[37,7028,1941],{"class":50},[469,7030,7032],{"id":7031},"_34野指针","3.4野指针",[14,7034,7035],{},[673,7036,7037],{},"指针变量指向非法的内存空间",[27,7039,7041],{"className":519,"code":7040,"language":521,"meta":32,"style":32},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[34,7042,7043,7051,7055,7084,7089,7101],{"__ignoreMap":32},[37,7044,7045,7047,7049],{"class":39,"line":40},[37,7046,533],{"class":54},[37,7048,2330],{"class":2320},[37,7050,2333],{"class":50},[37,7052,7053],{"class":39,"line":47},[37,7054,1922],{"class":50},[37,7056,7057,7059,7061,7063,7065,7067,7069,7071,7073,7076,7079,7081],{"class":39,"line":104},[37,7058,2342],{"class":54},[37,7060,6866],{"class":54},[37,7062,14],{"class":50},[37,7064,55],{"class":54},[37,7066,165],{"class":50},[37,7068,533],{"class":54},[37,7070,6866],{"class":54},[37,7072,138],{"class":50},[37,7074,7075],{"class":54},"0x",[37,7077,7078],{"class":61},"1100",[37,7080,582],{"class":50},[37,7082,7083],{"class":43}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[37,7085,7086],{"class":39,"line":113},[37,7087,7088],{"class":43},"    \u002F\u002F访问野指针报错\n",[37,7090,7091,7093,7095,7097,7099],{"class":39,"line":189},[37,7092,1927],{"class":50},[37,7094,6767],{"class":54},[37,7096,14],{"class":50},[37,7098,1552],{"class":54},[37,7100,1574],{"class":50},[37,7102,7103],{"class":39,"line":195},[37,7104,1941],{"class":50},[14,7106,7107],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[469,7109,7111],{"id":7110},"_35const修饰指针","3.5const修饰指针",[14,7113,7114],{},"三种情况：",[1515,7116,7117,7120,7123],{},[484,7118,7119],{},"const修饰指针 常量指针",[484,7121,7122],{},"const修饰常量 指针常量",[484,7124,7125],{},"const即修饰指针，又修饰常量",[481,7127,7128],{},[484,7129,7130],{},"常量指针",[27,7132,7134],{"className":519,"code":7133,"language":521,"meta":32,"style":32},"const int *p=&a;\n",[34,7135,7136],{"__ignoreMap":32},[37,7137,7138,7141,7143,7145,7147,7149],{"class":39,"line":40},[37,7139,7140],{"class":54},"const",[37,7142,2739],{"class":54},[37,7144,6866],{"class":54},[37,7146,14],{"class":50},[37,7148,6687],{"class":54},[37,7150,6545],{"class":50},[14,7152,7153],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[481,7155,7156],{"start":47},[484,7157,7158],{},"指针常量",[27,7160,7162],{"className":519,"code":7161,"language":521,"meta":32,"style":32},"int *const p=&a;\n",[34,7163,7164],{"__ignoreMap":32},[37,7165,7166,7168,7171,7174,7176],{"class":39,"line":40},[37,7167,533],{"class":54},[37,7169,7170],{"class":54}," *const",[37,7172,7173],{"class":50}," p",[37,7175,6687],{"class":54},[37,7177,6545],{"class":50},[14,7179,7180],{},"指针的指向不可以改，指针指向的值可以改",[481,7182,7183],{"start":104},[484,7184,7125],{},[27,7186,7188],{"className":519,"code":7187,"language":521,"meta":32,"style":32},"const int *const p=&a;\n",[34,7189,7190],{"__ignoreMap":32},[37,7191,7192,7194,7196,7198,7200,7202],{"class":39,"line":40},[37,7193,7140],{"class":54},[37,7195,2739],{"class":54},[37,7197,7170],{"class":54},[37,7199,7173],{"class":50},[37,7201,6687],{"class":54},[37,7203,6545],{"class":50},[14,7205,7206],{},"指针的指向和指针指向的值都不可以改变",[469,7208,7210],{"id":7209},"_36指针和数组","3.6指针和数组",[27,7212,7214],{"className":519,"code":7213,"language":521,"meta":32,"style":32},"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",[34,7215,7216,7224,7228,7233,7287,7308,7324,7340,7351,7368,7373,7387,7413,7417,7429,7438,7442],{"__ignoreMap":32},[37,7217,7218,7220,7222],{"class":39,"line":40},[37,7219,533],{"class":54},[37,7221,2330],{"class":2320},[37,7223,2333],{"class":50},[37,7225,7226],{"class":39,"line":47},[37,7227,1922],{"class":50},[37,7229,7230],{"class":39,"line":104},[37,7231,7232],{"class":43},"    \u002F\u002F利用指针访问数组中的元素\n",[37,7234,7235,7237,7239,7241,7243,7245,7247,7249,7251,7253,7255,7257,7259,7261,7263,7265,7267,7269,7271,7273,7275,7277,7279,7281,7283,7285],{"class":39,"line":113},[37,7236,2342],{"class":54},[37,7238,4312],{"class":50},[37,7240,98],{"class":61},[37,7242,1448],{"class":50},[37,7244,55],{"class":54},[37,7246,1404],{"class":50},[37,7248,332],{"class":61},[37,7250,65],{"class":50},[37,7252,602],{"class":61},[37,7254,65],{"class":50},[37,7256,62],{"class":61},[37,7258,65],{"class":50},[37,7260,168],{"class":61},[37,7262,65],{"class":50},[37,7264,836],{"class":61},[37,7266,65],{"class":50},[37,7268,93],{"class":61},[37,7270,65],{"class":50},[37,7272,885],{"class":61},[37,7274,65],{"class":50},[37,7276,73],{"class":61},[37,7278,65],{"class":50},[37,7280,934],{"class":61},[37,7282,65],{"class":50},[37,7284,98],{"class":61},[37,7286,4345],{"class":50},[37,7288,7289,7291,7293,7296,7298,7300,7302,7304,7306],{"class":39,"line":189},[37,7290,1927],{"class":50},[37,7292,1552],{"class":54},[37,7294,7295],{"class":185},"\"数组的第一个元素为：\"",[37,7297,1552],{"class":54},[37,7299,4256],{"class":50},[37,7301,135],{"class":61},[37,7303,1448],{"class":50},[37,7305,1552],{"class":54},[37,7307,1574],{"class":50},[37,7309,7310,7312,7314,7316,7318,7321],{"class":39,"line":195},[37,7311,2342],{"class":54},[37,7313,6866],{"class":54},[37,7315,14],{"class":50},[37,7317,55],{"class":54},[37,7319,7320],{"class":50},"arr;",[37,7322,7323],{"class":43},"\u002F\u002F注意数才要加取地址符号&\n",[37,7325,7326,7328,7330,7332,7334,7336,7338],{"class":39,"line":201},[37,7327,1927],{"class":50},[37,7329,1552],{"class":54},[37,7331,7295],{"class":185},[37,7333,6767],{"class":54},[37,7335,14],{"class":50},[37,7337,1552],{"class":54},[37,7339,1574],{"class":50},[37,7341,7342,7344,7346,7348],{"class":39,"line":207},[37,7343,6684],{"class":50},[37,7345,2649],{"class":54},[37,7347,582],{"class":50},[37,7349,7350],{"class":43}," \u002F\u002F让指针向后偏移4个字节\n",[37,7352,7353,7355,7357,7360,7362,7364,7366],{"class":39,"line":213},[37,7354,1927],{"class":50},[37,7356,1552],{"class":54},[37,7358,7359],{"class":185},"\"数组的第二个元素为：\"",[37,7361,6767],{"class":54},[37,7363,14],{"class":50},[37,7365,1552],{"class":54},[37,7367,1574],{"class":50},[37,7369,7370],{"class":39,"line":218},[37,7371,7372],{"class":43},"    \u002F\u002F利用指针遍历数组\n",[37,7374,7375,7377,7379,7382,7384],{"class":39,"line":227},[37,7376,2342],{"class":54},[37,7378,6866],{"class":54},[37,7380,7381],{"class":50},"p2",[37,7383,55],{"class":54},[37,7385,7386],{"class":50},"arr;\n",[37,7388,7389,7391,7393,7395,7397,7399,7401,7403,7405,7407,7409,7411],{"class":39,"line":232},[37,7390,3551],{"class":54},[37,7392,2027],{"class":50},[37,7394,533],{"class":54},[37,7396,3382],{"class":50},[37,7398,55],{"class":54},[37,7400,135],{"class":61},[37,7402,3389],{"class":50},[37,7404,1418],{"class":54},[37,7406,98],{"class":61},[37,7408,3389],{"class":50},[37,7410,2649],{"class":54},[37,7412,280],{"class":50},[37,7414,7415],{"class":39,"line":238},[37,7416,2387],{"class":50},[37,7418,7419,7421,7423,7425,7427],{"class":39,"line":244},[37,7420,3801],{"class":50},[37,7422,6767],{"class":54},[37,7424,7381],{"class":50},[37,7426,1552],{"class":54},[37,7428,1574],{"class":50},[37,7430,7431,7434,7436],{"class":39,"line":250},[37,7432,7433],{"class":50},"        p2",[37,7435,2649],{"class":54},[37,7437,1669],{"class":50},[37,7439,7440],{"class":39,"line":256},[37,7441,2544],{"class":50},[37,7443,7444],{"class":39,"line":261},[37,7445,1941],{"class":50},[469,7447,7449],{"id":7448},"_37指针和函数","3.7指针和函数",[14,7451,7452],{},"利用指针做函数参数，可以修改实参的值",[14,7454,7455],{},"值传递：只改变形参，不改变实参",[14,7457,7458],{},"地址传递：",[27,7460,7462],{"className":519,"code":7461,"language":521,"meta":32,"style":32},"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",[34,7463,7464,7489,7493,7505,7516,7526,7530,7538,7542,7554,7566,7571,7587,7602,7617],{"__ignoreMap":32},[37,7465,7466,7468,7470,7472,7474,7476,7479,7481,7483,7485,7487],{"class":39,"line":40},[37,7467,5712],{"class":54},[37,7469,5715],{"class":2320},[37,7471,165],{"class":50},[37,7473,533],{"class":54},[37,7475,6866],{"class":54},[37,7477,7478],{"class":159},"p1",[37,7480,65],{"class":50},[37,7482,533],{"class":54},[37,7484,6866],{"class":54},[37,7486,7381],{"class":159},[37,7488,280],{"class":50},[37,7490,7491],{"class":39,"line":47},[37,7492,1922],{"class":50},[37,7494,7495,7497,7499,7502],{"class":39,"line":104},[37,7496,2342],{"class":54},[37,7498,4605],{"class":50},[37,7500,7501],{"class":54},"=*",[37,7503,7504],{"class":50},"p1;\n",[37,7506,7507,7509,7511,7513],{"class":39,"line":113},[37,7508,6751],{"class":54},[37,7510,7478],{"class":50},[37,7512,7501],{"class":54},[37,7514,7515],{"class":50},"p2;\n",[37,7517,7518,7520,7522,7524],{"class":39,"line":189},[37,7519,6751],{"class":54},[37,7521,7381],{"class":50},[37,7523,55],{"class":54},[37,7525,4630],{"class":50},[37,7527,7528],{"class":39,"line":195},[37,7529,1941],{"class":50},[37,7531,7532,7534,7536],{"class":39,"line":201},[37,7533,533],{"class":54},[37,7535,2330],{"class":2320},[37,7537,2333],{"class":50},[37,7539,7540],{"class":39,"line":207},[37,7541,1922],{"class":50},[37,7543,7544,7546,7548,7550,7552],{"class":39,"line":213},[37,7545,2342],{"class":54},[37,7547,1774],{"class":50},[37,7549,55],{"class":54},[37,7551,98],{"class":61},[37,7553,1669],{"class":50},[37,7555,7556,7558,7560,7562,7564],{"class":39,"line":218},[37,7557,2342],{"class":54},[37,7559,3183],{"class":50},[37,7561,55],{"class":54},[37,7563,1210],{"class":61},[37,7565,1669],{"class":50},[37,7567,7568],{"class":39,"line":227},[37,7569,7570],{"class":43},"    \u002F\u002F地址传递\n",[37,7572,7573,7575,7577,7579,7582,7584],{"class":39,"line":232},[37,7574,5909],{"class":2320},[37,7576,165],{"class":50},[37,7578,869],{"class":54},[37,7580,7581],{"class":50},"a,",[37,7583,869],{"class":54},[37,7585,7586],{"class":50},"b);\n",[37,7588,7589,7591,7593,7595,7597,7599],{"class":39,"line":238},[37,7590,1927],{"class":50},[37,7592,1552],{"class":54},[37,7594,51],{"class":50},[37,7596,1552],{"class":54},[37,7598,1617],{"class":50},[37,7600,7601],{"class":43},"\u002F\u002F20\n",[37,7603,7604,7606,7608,7610,7612,7614],{"class":39,"line":244},[37,7605,1927],{"class":50},[37,7607,1552],{"class":54},[37,7609,376],{"class":50},[37,7611,1552],{"class":54},[37,7613,1617],{"class":50},[37,7615,7616],{"class":43},"\u002F\u002F10\n",[37,7618,7619],{"class":39,"line":250},[37,7620,1941],{"class":50},[14,7622,7623],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[469,7625,7627],{"id":7626},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7629,7630],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7632,7633,7634,7636],{},"例如数组：int arr",[37,7635,98],{},"={4,3,6,9,1,2,10,8,7,5}",[27,7638,7640],{"className":519,"code":7639,"language":521,"meta":32,"style":32},"#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",[34,7641,7642,7648,7658,7682,7686,7717,7721,7755,7759,7777,7781,7792,7807,7822,7826,7830,7834,7838,7842,7850,7854,7859,7913,7925,7937,7942,7950,7954,7959,7984,7988,8003,8012,8016],{"__ignoreMap":32},[37,7643,7644,7646],{"class":39,"line":40},[37,7645,2306],{"class":54},[37,7647,2309],{"class":185},[37,7649,7650,7652,7654,7656],{"class":39,"line":47},[37,7651,2314],{"class":54},[37,7653,2317],{"class":54},[37,7655,2321],{"class":2320},[37,7657,1669],{"class":50},[37,7659,7660,7662,7665,7667,7669,7671,7673,7675,7677,7680],{"class":39,"line":104},[37,7661,5712],{"class":54},[37,7663,7664],{"class":2320}," bubbleSort",[37,7666,165],{"class":50},[37,7668,533],{"class":54},[37,7670,6866],{"class":54},[37,7672,14],{"class":159},[37,7674,65],{"class":50},[37,7676,533],{"class":54},[37,7678,7679],{"class":159}," len",[37,7681,280],{"class":50},[37,7683,7684],{"class":39,"line":113},[37,7685,1922],{"class":50},[37,7687,7688,7690,7692,7694,7696,7698,7700,7702,7704,7707,7709,7711,7713,7715],{"class":39,"line":189},[37,7689,3551],{"class":54},[37,7691,165],{"class":50},[37,7693,533],{"class":54},[37,7695,3382],{"class":50},[37,7697,55],{"class":54},[37,7699,135],{"class":61},[37,7701,3389],{"class":50},[37,7703,1418],{"class":54},[37,7705,7706],{"class":50},"len",[37,7708,384],{"class":54},[37,7710,332],{"class":61},[37,7712,3389],{"class":50},[37,7714,2649],{"class":54},[37,7716,280],{"class":50},[37,7718,7719],{"class":39,"line":195},[37,7720,2387],{"class":50},[37,7722,7723,7725,7727,7729,7731,7733,7735,7737,7739,7741,7743,7745,7747,7749,7751,7753],{"class":39,"line":201},[37,7724,3753],{"class":54},[37,7726,165],{"class":50},[37,7728,533],{"class":54},[37,7730,3760],{"class":50},[37,7732,55],{"class":54},[37,7734,135],{"class":61},[37,7736,3767],{"class":50},[37,7738,1418],{"class":54},[37,7740,7706],{"class":50},[37,7742,384],{"class":54},[37,7744,954],{"class":50},[37,7746,384],{"class":54},[37,7748,332],{"class":61},[37,7750,3767],{"class":50},[37,7752,2649],{"class":54},[37,7754,280],{"class":50},[37,7756,7757],{"class":39,"line":207},[37,7758,2867],{"class":50},[37,7760,7761,7763,7766,7768,7771,7773,7775],{"class":39,"line":213},[37,7762,4992],{"class":54},[37,7764,7765],{"class":50},"(p[j]",[37,7767,1468],{"class":54},[37,7769,7770],{"class":50},"p[j",[37,7772,993],{"class":54},[37,7774,332],{"class":61},[37,7776,101],{"class":50},[37,7778,7779],{"class":39,"line":218},[37,7780,5011],{"class":50},[37,7782,7783,7785,7787,7789],{"class":39,"line":227},[37,7784,5016],{"class":54},[37,7786,4605],{"class":50},[37,7788,55],{"class":54},[37,7790,7791],{"class":50},"p[j];\n",[37,7793,7794,7797,7799,7801,7803,7805],{"class":39,"line":232},[37,7795,7796],{"class":50},"                p[j]",[37,7798,55],{"class":54},[37,7800,7770],{"class":50},[37,7802,993],{"class":54},[37,7804,332],{"class":61},[37,7806,5039],{"class":50},[37,7808,7809,7812,7814,7816,7818,7820],{"class":39,"line":238},[37,7810,7811],{"class":50},"                p[j",[37,7813,993],{"class":54},[37,7815,332],{"class":61},[37,7817,1448],{"class":50},[37,7819,55],{"class":54},[37,7821,4630],{"class":50},[37,7823,7824],{"class":39,"line":244},[37,7825,5059],{"class":50},[37,7827,7828],{"class":39,"line":250},[37,7829,2886],{"class":50},[37,7831,7832],{"class":39,"line":256},[37,7833,2544],{"class":50},[37,7835,7836],{"class":39,"line":261},[37,7837,1941],{"class":50},[37,7839,7840],{"class":39,"line":267},[37,7841,2757],{"emptyLinePlaceholder":454},[37,7843,7844,7846,7848],{"class":39,"line":283},[37,7845,533],{"class":54},[37,7847,2330],{"class":2320},[37,7849,2333],{"class":50},[37,7851,7852],{"class":39,"line":288},[37,7853,1922],{"class":50},[37,7855,7856],{"class":39,"line":294},[37,7857,7858],{"class":43},"    \u002F\u002F 1.创建数组\n",[37,7860,7861,7863,7865,7867,7869,7871,7873,7875,7877,7879,7881,7883,7885,7887,7889,7891,7893,7895,7897,7899,7901,7903,7905,7907,7909,7911],{"class":39,"line":300},[37,7862,2342],{"class":54},[37,7864,4312],{"class":50},[37,7866,98],{"class":61},[37,7868,1448],{"class":50},[37,7870,55],{"class":54},[37,7872,1404],{"class":50},[37,7874,168],{"class":61},[37,7876,65],{"class":50},[37,7878,62],{"class":61},[37,7880,65],{"class":50},[37,7882,93],{"class":61},[37,7884,65],{"class":50},[37,7886,934],{"class":61},[37,7888,65],{"class":50},[37,7890,332],{"class":61},[37,7892,65],{"class":50},[37,7894,602],{"class":61},[37,7896,65],{"class":50},[37,7898,98],{"class":61},[37,7900,65],{"class":50},[37,7902,73],{"class":61},[37,7904,65],{"class":50},[37,7906,885],{"class":61},[37,7908,65],{"class":50},[37,7910,836],{"class":61},[37,7912,4345],{"class":50},[37,7914,7915,7917,7919,7921,7923],{"class":39,"line":306},[37,7916,2342],{"class":54},[37,7918,7679],{"class":50},[37,7920,55],{"class":54},[37,7922,98],{"class":61},[37,7924,1669],{"class":50},[37,7926,7927,7929,7931,7933,7935],{"class":39,"line":312},[37,7928,2342],{"class":54},[37,7930,6866],{"class":54},[37,7932,14],{"class":50},[37,7934,55],{"class":54},[37,7936,7386],{"class":50},[37,7938,7939],{"class":39,"line":317},[37,7940,7941],{"class":43},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[37,7943,7944,7947],{"class":39,"line":323},[37,7945,7946],{"class":2320},"    bubbleSort",[37,7948,7949],{"class":50},"(p,len);\n",[37,7951,7952],{"class":39,"line":337},[37,7953,2757],{"emptyLinePlaceholder":454},[37,7955,7956],{"class":39,"line":342},[37,7957,7958],{"class":43},"    \u002F\u002F 3.打印排序后的数组\n",[37,7960,7961,7963,7965,7967,7969,7971,7973,7975,7977,7980,7982],{"class":39,"line":347},[37,7962,3551],{"class":54},[37,7964,2027],{"class":50},[37,7966,533],{"class":54},[37,7968,3382],{"class":50},[37,7970,55],{"class":54},[37,7972,135],{"class":61},[37,7974,3564],{"class":50},[37,7976,1418],{"class":54},[37,7978,7979],{"class":50},"len; i",[37,7981,2649],{"class":54},[37,7983,280],{"class":50},[37,7985,7986],{"class":39,"line":352},[37,7987,2387],{"class":50},[37,7989,7990,7992,7994,7996,7998,8001],{"class":39,"line":357},[37,7991,3801],{"class":50},[37,7993,6767],{"class":54},[37,7995,14],{"class":50},[37,7997,1552],{"class":54},[37,7999,8000],{"class":185},"\"\"",[37,8002,1669],{"class":50},[37,8004,8005,8008,8010],{"class":39,"line":362},[37,8006,8007],{"class":50},"        p",[37,8009,2649],{"class":54},[37,8011,1669],{"class":50},[37,8013,8014],{"class":39,"line":367},[37,8015,2544],{"class":50},[37,8017,8018],{"class":39,"line":373},[37,8019,1941],{"class":50},[446,8021,8022],{},"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":32,"searchDepth":47,"depth":47,"links":8024},[8025,8026,8027,8028,8029,8030,8031,8032],{"id":6631,"depth":47,"text":6632},{"id":6797,"depth":47,"text":6798},{"id":6953,"depth":47,"text":6954},{"id":7031,"depth":47,"text":7032},{"id":7110,"depth":47,"text":7111},{"id":7209,"depth":47,"text":7210},{"id":7448,"depth":47,"text":7449},{"id":7626,"depth":47,"text":7627},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6620,"description":6628},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8039,"title":8040,"body":8041,"description":8048,"extension":452,"meta":11015,"navigation":454,"path":11016,"seo":11017,"stem":11018,"__hash__":11019},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8042,"toc":11006},[8043,8046,8049,8053,8056,8059,8070,8401,8404,8408,8411,8418,8673,8677,8680,8683,8838,8842,8845,8848,9054,9058,9061,9364,9367,9375,9379,9382,9533,9535,9546,9603,9607,9612,10269,10277,10280,10374,10377,10997,11003],[10,8044,8040],{"id":8045},"_4结构体",[14,8047,8048],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[469,8050,8052],{"id":8051},"_41结构体定义与使用","4.1结构体定义与使用",[14,8054,8055],{},"语法：struct 结构体名 {结构体成员列表}；",[14,8057,8058],{},"通过结构体创建变量的方式：",[1515,8060,8061,8064,8067],{},[484,8062,8063],{},"struct 结构体名 变量名",[484,8065,8066],{},"struct 结构体名 变量名={成员1值，成员2值...}",[484,8068,8069],{},"定义结构体时顺便创建变量",[27,8071,8073],{"className":519,"code":8072,"language":521,"meta":32,"style":32},"#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",[34,8074,8075,8081,8091,8098,8103,8111,8115,8120,8124,8129,8134,8139,8146,8151,8158,8162,8169,8173,8177,8181,8185,8189,8193,8199,8203,8209,8217,8225,8229,8234,8239,8250,8255,8267,8278,8289,8294,8317,8321,8326,8352,8356,8361,8372,8384,8396],{"__ignoreMap":32},[37,8076,8077,8079],{"class":39,"line":40},[37,8078,2306],{"class":54},[37,8080,2309],{"class":185},[37,8082,8083,8085,8087,8089],{"class":39,"line":47},[37,8084,2314],{"class":54},[37,8086,2317],{"class":54},[37,8088,2321],{"class":2320},[37,8090,1669],{"class":50},[37,8092,8093,8095],{"class":39,"line":104},[37,8094,2306],{"class":54},[37,8096,8097],{"class":185},"\u003Cstring>\n",[37,8099,8100],{"class":39,"line":113},[37,8101,8102],{"class":43},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[37,8104,8105,8108],{"class":39,"line":189},[37,8106,8107],{"class":54},"struct",[37,8109,8110],{"class":2320}," Student\n",[37,8112,8113],{"class":39,"line":195},[37,8114,1922],{"class":50},[37,8116,8117],{"class":39,"line":201},[37,8118,8119],{"class":43},"    \u002F\u002F成员列表\n",[37,8121,8122],{"class":39,"line":207},[37,8123,2757],{"emptyLinePlaceholder":454},[37,8125,8126],{"class":39,"line":213},[37,8127,8128],{"class":43},"    \u002F\u002F姓名\n",[37,8130,8131],{"class":39,"line":218},[37,8132,8133],{"class":50},"    string name;\n",[37,8135,8136],{"class":39,"line":227},[37,8137,8138],{"class":43},"    \u002F\u002F年龄\n",[37,8140,8141,8143],{"class":39,"line":232},[37,8142,2342],{"class":54},[37,8144,8145],{"class":50}," age;\n",[37,8147,8148],{"class":39,"line":238},[37,8149,8150],{"class":43},"    \u002F\u002F分数\n",[37,8152,8153,8155],{"class":39,"line":244},[37,8154,2342],{"class":54},[37,8156,8157],{"class":50}," score;\n",[37,8159,8160],{"class":39,"line":250},[37,8161,4345],{"class":50},[37,8163,8164,8166],{"class":39,"line":256},[37,8165,8107],{"class":54},[37,8167,8168],{"class":2320}," School\n",[37,8170,8171],{"class":39,"line":261},[37,8172,1922],{"class":50},[37,8174,8175],{"class":39,"line":267},[37,8176,8119],{"class":43},[37,8178,8179],{"class":39,"line":283},[37,8180,2757],{"emptyLinePlaceholder":454},[37,8182,8183],{"class":39,"line":288},[37,8184,8128],{"class":43},[37,8186,8187],{"class":39,"line":294},[37,8188,8133],{"class":50},[37,8190,8191],{"class":39,"line":300},[37,8192,8138],{"class":43},[37,8194,8195,8197],{"class":39,"line":306},[37,8196,2342],{"class":54},[37,8198,8145],{"class":50},[37,8200,8201],{"class":39,"line":312},[37,8202,8150],{"class":43},[37,8204,8205,8207],{"class":39,"line":317},[37,8206,2342],{"class":54},[37,8208,8157],{"class":50},[37,8210,8211,8214],{"class":39,"line":323},[37,8212,8213],{"class":50},"} s3;",[37,8215,8216],{"class":43}," \u002F\u002F创建结构体时就创建了变量\n",[37,8218,8219,8221,8223],{"class":39,"line":337},[37,8220,533],{"class":54},[37,8222,2330],{"class":2320},[37,8224,2333],{"class":50},[37,8226,8227],{"class":39,"line":342},[37,8228,1922],{"class":50},[37,8230,8231],{"class":39,"line":347},[37,8232,8233],{"class":43},"    \u002F\u002F2.通过学生类型创建具体学生\n",[37,8235,8236],{"class":39,"line":352},[37,8237,8238],{"class":43},"    \u002F\u002F2.1 struct Student s1;\n",[37,8240,8241,8244,8247],{"class":39,"line":357},[37,8242,8243],{"class":54},"    struct",[37,8245,8246],{"class":2320}," Student",[37,8248,8249],{"class":50}," s1;\n",[37,8251,8252],{"class":39,"line":362},[37,8253,8254],{"class":43},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[37,8256,8257,8260,8262,8265],{"class":39,"line":367},[37,8258,8259],{"class":50},"    s1.name",[37,8261,55],{"class":54},[37,8263,8264],{"class":185},"\"张三\"",[37,8266,1669],{"class":50},[37,8268,8269,8272,8274,8276],{"class":39,"line":373},[37,8270,8271],{"class":50},"    s1.age",[37,8273,55],{"class":54},[37,8275,1160],{"class":61},[37,8277,1669],{"class":50},[37,8279,8280,8283,8285,8287],{"class":39,"line":392},[37,8281,8282],{"class":50},"    s1.score",[37,8284,55],{"class":54},[37,8286,775],{"class":61},[37,8288,1669],{"class":50},[37,8290,8291],{"class":39,"line":398},[37,8292,8293],{"class":43},"    \u002F\u002F输出结果\n",[37,8295,8296,8298,8300,8303,8305,8308,8310,8313,8315],{"class":39,"line":409},[37,8297,1927],{"class":50},[37,8299,1552],{"class":54},[37,8301,8302],{"class":50},"s1.name",[37,8304,1552],{"class":54},[37,8306,8307],{"class":50},"s1.age",[37,8309,1552],{"class":54},[37,8311,8312],{"class":50},"s1.score",[37,8314,1552],{"class":54},[37,8316,1574],{"class":50},[37,8318,8319],{"class":39,"line":415},[37,8320,2757],{"emptyLinePlaceholder":454},[37,8322,8323],{"class":39,"line":420},[37,8324,8325],{"class":43},"    \u002F\u002F2.2 struct Student s2={...}\n",[37,8327,8328,8330,8332,8335,8337,8339,8342,8344,8346,8348,8350],{"class":39,"line":425},[37,8329,8243],{"class":54},[37,8331,8246],{"class":2320},[37,8333,8334],{"class":50}," s2",[37,8336,55],{"class":54},[37,8338,1404],{"class":50},[37,8340,8341],{"class":185},"\"王五\"",[37,8343,65],{"class":50},[37,8345,1160],{"class":61},[37,8347,65],{"class":50},[37,8349,775],{"class":61},[37,8351,4345],{"class":50},[37,8353,8354],{"class":39,"line":431},[37,8355,2757],{"emptyLinePlaceholder":454},[37,8357,8358],{"class":39,"line":436},[37,8359,8360],{"class":43},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[37,8362,8363,8366,8368,8370],{"class":39,"line":442},[37,8364,8365],{"class":50},"    s3.name",[37,8367,55],{"class":54},[37,8369,4028],{"class":185},[37,8371,1669],{"class":50},[37,8373,8375,8378,8380,8382],{"class":39,"line":8374},44,[37,8376,8377],{"class":50},"    s3.age",[37,8379,55],{"class":54},[37,8381,1160],{"class":61},[37,8383,1669],{"class":50},[37,8385,8387,8390,8392,8394],{"class":39,"line":8386},45,[37,8388,8389],{"class":50},"    s3.score",[37,8391,55],{"class":54},[37,8393,1210],{"class":61},[37,8395,1669],{"class":50},[37,8397,8399],{"class":39,"line":8398},46,[37,8400,1941],{"class":50},[14,8402,8403],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[469,8405,8407],{"id":8406},"_42结构体数组","4.2结构体数组",[14,8409,8410],{},"将自定义的结构体放入到数组中方便维护",[14,8412,8413,8414,8417],{},"语法：struct 结构体名 数组名",[37,8415,8416],{},"元素个数","={ {}，{},...{} };",[27,8419,8421],{"className":519,"code":8420,"language":521,"meta":32,"style":32},"#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",[34,8422,8423,8429,8439,8445,8450,8456,8460,8464,8470,8476,8480,8484,8492,8496,8501,8516,8520,8536,8552,8556,8561,8577,8592,8607,8612,8638,8642,8665,8669],{"__ignoreMap":32},[37,8424,8425,8427],{"class":39,"line":40},[37,8426,2306],{"class":54},[37,8428,2309],{"class":185},[37,8430,8431,8433,8435,8437],{"class":39,"line":47},[37,8432,2314],{"class":54},[37,8434,2317],{"class":54},[37,8436,2321],{"class":2320},[37,8438,1669],{"class":50},[37,8440,8441,8443],{"class":39,"line":104},[37,8442,2306],{"class":54},[37,8444,8097],{"class":185},[37,8446,8447],{"class":39,"line":113},[37,8448,8449],{"class":43},"\u002F\u002F1.定义结构体\n",[37,8451,8452,8454],{"class":39,"line":189},[37,8453,8107],{"class":54},[37,8455,8110],{"class":2320},[37,8457,8458],{"class":39,"line":195},[37,8459,1922],{"class":50},[37,8461,8462],{"class":39,"line":201},[37,8463,8133],{"class":50},[37,8465,8466,8468],{"class":39,"line":207},[37,8467,2342],{"class":54},[37,8469,8145],{"class":50},[37,8471,8472,8474],{"class":39,"line":213},[37,8473,2342],{"class":54},[37,8475,8157],{"class":50},[37,8477,8478],{"class":39,"line":218},[37,8479,2757],{"emptyLinePlaceholder":454},[37,8481,8482],{"class":39,"line":227},[37,8483,4345],{"class":50},[37,8485,8486,8488,8490],{"class":39,"line":232},[37,8487,533],{"class":54},[37,8489,2330],{"class":2320},[37,8491,2333],{"class":50},[37,8493,8494],{"class":39,"line":238},[37,8495,1922],{"class":50},[37,8497,8498],{"class":39,"line":244},[37,8499,8500],{"class":43},"    \u002F\u002F2.创建结构体数组\n",[37,8502,8503,8505,8507,8510,8512,8514],{"class":39,"line":250},[37,8504,8243],{"class":54},[37,8506,8246],{"class":2320},[37,8508,8509],{"class":50}," stuArray[",[37,8511,602],{"class":61},[37,8513,1448],{"class":50},[37,8515,5257],{"class":54},[37,8517,8518],{"class":39,"line":256},[37,8519,2387],{"class":50},[37,8521,8522,8524,8526,8528,8530,8532,8534],{"class":39,"line":261},[37,8523,5266],{"class":50},[37,8525,8264],{"class":185},[37,8527,65],{"class":50},[37,8529,1160],{"class":61},[37,8531,65],{"class":50},[37,8533,154],{"class":61},[37,8535,5279],{"class":50},[37,8537,8538,8540,8542,8544,8546,8548,8550],{"class":39,"line":267},[37,8539,5266],{"class":50},[37,8541,4028],{"class":185},[37,8543,65],{"class":50},[37,8545,1085],{"class":61},[37,8547,65],{"class":50},[37,8549,1085],{"class":61},[37,8551,1941],{"class":50},[37,8553,8554],{"class":39,"line":283},[37,8555,2544],{"class":50},[37,8557,8558],{"class":39,"line":288},[37,8559,8560],{"class":43},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[37,8562,8563,8566,8568,8571,8573,8575],{"class":39,"line":294},[37,8564,8565],{"class":50},"    stuArray[",[37,8567,332],{"class":61},[37,8569,8570],{"class":50},"].name",[37,8572,55],{"class":54},[37,8574,4051],{"class":185},[37,8576,1669],{"class":50},[37,8578,8579,8581,8583,8586,8588,8590],{"class":39,"line":300},[37,8580,8565],{"class":50},[37,8582,332],{"class":61},[37,8584,8585],{"class":50},"].age",[37,8587,55],{"class":54},[37,8589,602],{"class":61},[37,8591,1669],{"class":50},[37,8593,8594,8596,8598,8601,8603,8605],{"class":39,"line":306},[37,8595,8565],{"class":50},[37,8597,332],{"class":61},[37,8599,8600],{"class":50},"].score",[37,8602,55],{"class":54},[37,8604,602],{"class":61},[37,8606,1669],{"class":50},[37,8608,8609],{"class":39,"line":312},[37,8610,8611],{"class":43},"    \u002F\u002F4.遍历结构体数组\n",[37,8613,8614,8616,8618,8620,8622,8624,8626,8628,8630,8632,8634,8636],{"class":39,"line":317},[37,8615,3551],{"class":54},[37,8617,2027],{"class":50},[37,8619,533],{"class":54},[37,8621,3382],{"class":50},[37,8623,55],{"class":54},[37,8625,135],{"class":61},[37,8627,3389],{"class":50},[37,8629,1418],{"class":54},[37,8631,602],{"class":61},[37,8633,3389],{"class":50},[37,8635,2649],{"class":54},[37,8637,280],{"class":50},[37,8639,8640],{"class":39,"line":323},[37,8641,2387],{"class":50},[37,8643,8644,8646,8648,8651,8653,8656,8658,8661,8663],{"class":39,"line":337},[37,8645,3801],{"class":50},[37,8647,1552],{"class":54},[37,8649,8650],{"class":50},"stuArray[i].name",[37,8652,1552],{"class":54},[37,8654,8655],{"class":50},"stuArray[i].age",[37,8657,1552],{"class":54},[37,8659,8660],{"class":50},"stuArray[i].score",[37,8662,1552],{"class":54},[37,8664,1574],{"class":50},[37,8666,8667],{"class":39,"line":342},[37,8668,2544],{"class":50},[37,8670,8671],{"class":39,"line":347},[37,8672,1941],{"class":50},[469,8674,8676],{"id":8675},"_43结构体指针","4.3结构体指针",[14,8678,8679],{},"作用：通过指针访问结构体中的成员",[14,8681,8682],{},"利用操作符->可以通过结构体指针访问结构体属性",[27,8684,8686],{"className":519,"code":8685,"language":521,"meta":32,"style":32},"#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",[34,8687,8688,8694,8704,8710,8714,8720,8724,8728,8734,8740,8744,8752,8756,8761,8786,8791,8806,8811,8834],{"__ignoreMap":32},[37,8689,8690,8692],{"class":39,"line":40},[37,8691,2306],{"class":54},[37,8693,2309],{"class":185},[37,8695,8696,8698,8700,8702],{"class":39,"line":47},[37,8697,2314],{"class":54},[37,8699,2317],{"class":54},[37,8701,2321],{"class":2320},[37,8703,1669],{"class":50},[37,8705,8706,8708],{"class":39,"line":104},[37,8707,2306],{"class":54},[37,8709,8097],{"class":185},[37,8711,8712],{"class":39,"line":113},[37,8713,8449],{"class":43},[37,8715,8716,8718],{"class":39,"line":189},[37,8717,8107],{"class":54},[37,8719,8110],{"class":2320},[37,8721,8722],{"class":39,"line":195},[37,8723,1922],{"class":50},[37,8725,8726],{"class":39,"line":201},[37,8727,8133],{"class":50},[37,8729,8730,8732],{"class":39,"line":207},[37,8731,2342],{"class":54},[37,8733,8145],{"class":50},[37,8735,8736,8738],{"class":39,"line":213},[37,8737,2342],{"class":54},[37,8739,8157],{"class":50},[37,8741,8742],{"class":39,"line":218},[37,8743,4345],{"class":50},[37,8745,8746,8748,8750],{"class":39,"line":227},[37,8747,533],{"class":54},[37,8749,2330],{"class":2320},[37,8751,2333],{"class":50},[37,8753,8754],{"class":39,"line":232},[37,8755,1922],{"class":50},[37,8757,8758],{"class":39,"line":238},[37,8759,8760],{"class":43},"    \u002F\u002F创建学生结构体变量\n",[37,8762,8763,8765,8767,8770,8772,8774,8776,8778,8780,8782,8784],{"class":39,"line":244},[37,8764,8243],{"class":54},[37,8766,8246],{"class":2320},[37,8768,8769],{"class":50}," s",[37,8771,55],{"class":54},[37,8773,1404],{"class":50},[37,8775,8264],{"class":185},[37,8777,65],{"class":50},[37,8779,1160],{"class":61},[37,8781,65],{"class":50},[37,8783,2087],{"class":61},[37,8785,4345],{"class":50},[37,8787,8788],{"class":39,"line":250},[37,8789,8790],{"class":43},"    \u002F\u002F通过指针指向结构体变量\n",[37,8792,8793,8795,8797,8799,8801,8803],{"class":39,"line":256},[37,8794,8243],{"class":54},[37,8796,8246],{"class":2320},[37,8798,6866],{"class":54},[37,8800,14],{"class":50},[37,8802,6687],{"class":54},[37,8804,8805],{"class":50},"s\n",[37,8807,8808],{"class":39,"line":261},[37,8809,8810],{"class":43},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[37,8812,8813,8815,8817,8820,8822,8825,8827,8830,8832],{"class":39,"line":267},[37,8814,1927],{"class":50},[37,8816,1552],{"class":54},[37,8818,8819],{"class":50},"p->name",[37,8821,1552],{"class":54},[37,8823,8824],{"class":50},"p->age",[37,8826,1552],{"class":54},[37,8828,8829],{"class":50},"p->score",[37,8831,1552],{"class":54},[37,8833,1574],{"class":50},[37,8835,8836],{"class":39,"line":283},[37,8837,1941],{"class":50},[469,8839,8841],{"id":8840},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8843,8844],{},"作用：结构体中的成员可以是另一个结构体",[14,8846,8847],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[27,8849,8851],{"className":519,"code":8850,"language":521,"meta":32,"style":32},"#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",[34,8852,8853,8859,8869,8875,8880,8888,8892,8896,8902,8908,8912,8917,8924,8928,8935,8939,8945,8950,8954,8962,8966,8971,8976,8981,8992,9004,9015,9028,9039,9050],{"__ignoreMap":32},[37,8854,8855,8857],{"class":39,"line":40},[37,8856,2306],{"class":54},[37,8858,2309],{"class":185},[37,8860,8861,8863,8865,8867],{"class":39,"line":47},[37,8862,2314],{"class":54},[37,8864,2317],{"class":54},[37,8866,2321],{"class":2320},[37,8868,1669],{"class":50},[37,8870,8871,8873],{"class":39,"line":104},[37,8872,2306],{"class":54},[37,8874,8097],{"class":185},[37,8876,8877],{"class":39,"line":113},[37,8878,8879],{"class":43},"\u002F\u002F定义学生结构体\n",[37,8881,8882,8884,8886],{"class":39,"line":189},[37,8883,8107],{"class":54},[37,8885,8246],{"class":2320},[37,8887,3024],{"class":50},[37,8889,8890],{"class":39,"line":195},[37,8891,1922],{"class":50},[37,8893,8894],{"class":39,"line":201},[37,8895,8133],{"class":50},[37,8897,8898,8900],{"class":39,"line":207},[37,8899,2342],{"class":54},[37,8901,8145],{"class":50},[37,8903,8904,8906],{"class":39,"line":213},[37,8905,2342],{"class":54},[37,8907,8157],{"class":50},[37,8909,8910],{"class":39,"line":218},[37,8911,1941],{"class":50},[37,8913,8914],{"class":39,"line":227},[37,8915,8916],{"class":43},"\u002F\u002F定义老师结构体\n",[37,8918,8919,8921],{"class":39,"line":232},[37,8920,8107],{"class":54},[37,8922,8923],{"class":2320}," Teacher\n",[37,8925,8926],{"class":39,"line":238},[37,8927,1922],{"class":50},[37,8929,8930,8932],{"class":39,"line":244},[37,8931,2342],{"class":54},[37,8933,8934],{"class":50}," id;\n",[37,8936,8937],{"class":39,"line":250},[37,8938,8133],{"class":50},[37,8940,8941,8943],{"class":39,"line":256},[37,8942,2342],{"class":54},[37,8944,8145],{"class":50},[37,8946,8947],{"class":39,"line":261},[37,8948,8949],{"class":50},"    Student stu;\n",[37,8951,8952],{"class":39,"line":267},[37,8953,1941],{"class":50},[37,8955,8956,8958,8960],{"class":39,"line":283},[37,8957,533],{"class":54},[37,8959,2330],{"class":2320},[37,8961,6326],{"class":50},[37,8963,8964],{"class":39,"line":288},[37,8965,1922],{"class":50},[37,8967,8968],{"class":39,"line":294},[37,8969,8970],{"class":43},"    \u002F\u002F结构体嵌套结构体\n",[37,8972,8973],{"class":39,"line":300},[37,8974,8975],{"class":43},"    \u002F\u002F创建老师\n",[37,8977,8978],{"class":39,"line":306},[37,8979,8980],{"class":50},"    Teacher t;\n",[37,8982,8983,8986,8988,8990],{"class":39,"line":312},[37,8984,8985],{"class":50},"    t.id",[37,8987,55],{"class":54},[37,8989,154],{"class":61},[37,8991,1669],{"class":50},[37,8993,8994,8997,8999,9002],{"class":39,"line":317},[37,8995,8996],{"class":50},"    t.name",[37,8998,55],{"class":54},[37,9000,9001],{"class":185},"\"老王\"",[37,9003,1669],{"class":50},[37,9005,9006,9009,9011,9013],{"class":39,"line":323},[37,9007,9008],{"class":50},"    t.age",[37,9010,55],{"class":54},[37,9012,1160],{"class":61},[37,9014,1669],{"class":50},[37,9016,9017,9020,9022,9025],{"class":39,"line":337},[37,9018,9019],{"class":50},"    t.stu.name",[37,9021,55],{"class":54},[37,9023,9024],{"class":185},"\"小王\"",[37,9026,9027],{"class":50},"；\n",[37,9029,9030,9033,9035,9037],{"class":39,"line":342},[37,9031,9032],{"class":50},"    t.stu.age",[37,9034,55],{"class":54},[37,9036,1210],{"class":61},[37,9038,1669],{"class":50},[37,9040,9041,9044,9046,9048],{"class":39,"line":347},[37,9042,9043],{"class":50},"    t.stu.score",[37,9045,55],{"class":54},[37,9047,93],{"class":61},[37,9049,1669],{"class":50},[37,9051,9052],{"class":39,"line":352},[37,9053,1941],{"class":50},[469,9055,9057],{"id":9056},"_45结构体做函数参数","4.5结构体做函数参数",[14,9059,9060],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[27,9062,9064],{"className":519,"code":9063,"language":521,"meta":32,"style":32},"#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",[34,9065,9066,9072,9082,9088,9094,9098,9102,9108,9114,9118,9123,9128,9145,9149,9182,9186,9191,9210,9214,9245,9249,9257,9261,9270,9282,9294,9306,9319,9327,9340,9352,9360],{"__ignoreMap":32},[37,9067,9068,9070],{"class":39,"line":40},[37,9069,2306],{"class":54},[37,9071,2309],{"class":185},[37,9073,9074,9076,9078,9080],{"class":39,"line":47},[37,9075,2314],{"class":54},[37,9077,2317],{"class":54},[37,9079,2321],{"class":2320},[37,9081,1669],{"class":50},[37,9083,9084,9086],{"class":39,"line":104},[37,9085,2306],{"class":54},[37,9087,8097],{"class":185},[37,9089,9090,9092],{"class":39,"line":113},[37,9091,8107],{"class":54},[37,9093,8110],{"class":2320},[37,9095,9096],{"class":39,"line":189},[37,9097,1922],{"class":50},[37,9099,9100],{"class":39,"line":195},[37,9101,8133],{"class":50},[37,9103,9104,9106],{"class":39,"line":201},[37,9105,2342],{"class":54},[37,9107,8145],{"class":50},[37,9109,9110,9112],{"class":39,"line":207},[37,9111,2342],{"class":54},[37,9113,8157],{"class":50},[37,9115,9116],{"class":39,"line":213},[37,9117,4345],{"class":50},[37,9119,9120],{"class":39,"line":218},[37,9121,9122],{"class":43},"\u002F\u002F打印学生信息的函数\n",[37,9124,9125],{"class":39,"line":227},[37,9126,9127],{"class":43},"\u002F\u002F值传递\n",[37,9129,9130,9132,9135,9137,9139,9141,9143],{"class":39,"line":232},[37,9131,5712],{"class":54},[37,9133,9134],{"class":2320}," printStudent1",[37,9136,165],{"class":50},[37,9138,8107],{"class":54},[37,9140,8246],{"class":2320},[37,9142,8769],{"class":159},[37,9144,280],{"class":50},[37,9146,9147],{"class":39,"line":238},[37,9148,1922],{"class":50},[37,9150,9151,9153,9155,9158,9160,9163,9165,9168,9170,9172,9174,9177,9179],{"class":39,"line":244},[37,9152,6877],{"class":50},[37,9154,1552],{"class":54},[37,9156,9157],{"class":50}," s.name ",[37,9159,1552],{"class":54},[37,9161,9162],{"class":185}," \" \"",[37,9164,1820],{"class":54},[37,9166,9167],{"class":50}," s.age ",[37,9169,1552],{"class":54},[37,9171,9162],{"class":185},[37,9173,1820],{"class":54},[37,9175,9176],{"class":50}," s.score ",[37,9178,1552],{"class":54},[37,9180,9181],{"class":50}," endl;\n",[37,9183,9184],{"class":39,"line":250},[37,9185,1941],{"class":50},[37,9187,9188],{"class":39,"line":256},[37,9189,9190],{"class":43},"\u002F\u002F地址传递\n",[37,9192,9193,9195,9198,9200,9202,9204,9206,9208],{"class":39,"line":261},[37,9194,5712],{"class":54},[37,9196,9197],{"class":2320}," printStudent2",[37,9199,165],{"class":50},[37,9201,8107],{"class":54},[37,9203,8246],{"class":2320},[37,9205,6866],{"class":54},[37,9207,1205],{"class":159},[37,9209,280],{"class":50},[37,9211,9212],{"class":39,"line":267},[37,9213,1922],{"class":50},[37,9215,9216,9218,9220,9223,9225,9227,9229,9232,9234,9236,9238,9241,9243],{"class":39,"line":283},[37,9217,6877],{"class":50},[37,9219,1552],{"class":54},[37,9221,9222],{"class":50}," s->name ",[37,9224,1552],{"class":54},[37,9226,9162],{"class":185},[37,9228,1820],{"class":54},[37,9230,9231],{"class":50}," s->age ",[37,9233,1552],{"class":54},[37,9235,9162],{"class":185},[37,9237,1820],{"class":54},[37,9239,9240],{"class":50}," s->score ",[37,9242,1552],{"class":54},[37,9244,9181],{"class":50},[37,9246,9247],{"class":39,"line":288},[37,9248,1941],{"class":50},[37,9250,9251,9253,9255],{"class":39,"line":294},[37,9252,533],{"class":54},[37,9254,2330],{"class":2320},[37,9256,2333],{"class":50},[37,9258,9259],{"class":39,"line":300},[37,9260,1922],{"class":50},[37,9262,9263,9265,9267],{"class":39,"line":306},[37,9264,8243],{"class":54},[37,9266,8246],{"class":2320},[37,9268,9269],{"class":50}," s;\n",[37,9271,9272,9275,9277,9280],{"class":39,"line":312},[37,9273,9274],{"class":50},"    s.name ",[37,9276,55],{"class":54},[37,9278,9279],{"class":185}," \"张三\"",[37,9281,1669],{"class":50},[37,9283,9284,9287,9289,9292],{"class":39,"line":317},[37,9285,9286],{"class":50},"    s.age ",[37,9288,55],{"class":54},[37,9290,9291],{"class":61}," 20",[37,9293,1669],{"class":50},[37,9295,9296,9299,9301,9304],{"class":39,"line":323},[37,9297,9298],{"class":50},"    s.score ",[37,9300,55],{"class":54},[37,9302,9303],{"class":61}," 85",[37,9305,1669],{"class":50},[37,9307,9308,9310,9312,9315,9317],{"class":39,"line":337},[37,9309,1927],{"class":50},[37,9311,1552],{"class":54},[37,9313,9314],{"class":185},"\"值传递:\"",[37,9316,1552],{"class":54},[37,9318,1574],{"class":50},[37,9320,9321,9324],{"class":39,"line":342},[37,9322,9323],{"class":2320},"    printStudent1",[37,9325,9326],{"class":50},"(s);\n",[37,9328,9329,9331,9333,9336,9338],{"class":39,"line":347},[37,9330,1927],{"class":50},[37,9332,1552],{"class":54},[37,9334,9335],{"class":185},"\"地址传递:\"",[37,9337,1552],{"class":54},[37,9339,1574],{"class":50},[37,9341,9342,9345,9347,9349],{"class":39,"line":352},[37,9343,9344],{"class":2320},"    printStudent2",[37,9346,165],{"class":50},[37,9348,869],{"class":54},[37,9350,9351],{"class":50},"s); \n",[37,9353,9354,9356,9358],{"class":39,"line":357},[37,9355,4440],{"class":54},[37,9357,4443],{"class":61},[37,9359,1669],{"class":50},[37,9361,9362],{"class":39,"line":362},[37,9363,1941],{"class":50},[14,9365,9366],{},"注意：",[1515,9368,9369,9372],{},[484,9370,9371],{},"1.先定义结构体，不要在函数中写结构体的定义",[484,9373,9374],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[469,9376,9378],{"id":9377},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9380,9381],{},"用const防止误操作",[27,9383,9385],{"className":519,"code":9384,"language":521,"meta":32,"style":32},"#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",[34,9386,9387,9393,9403,9409,9414,9418,9422,9428,9434,9438,9454,9458,9481,9485,9493,9497,9518,9525,9529],{"__ignoreMap":32},[37,9388,9389,9391],{"class":39,"line":40},[37,9390,2306],{"class":54},[37,9392,2309],{"class":185},[37,9394,9395,9397,9399,9401],{"class":39,"line":47},[37,9396,2314],{"class":54},[37,9398,2317],{"class":54},[37,9400,2321],{"class":2320},[37,9402,1669],{"class":50},[37,9404,9405,9407],{"class":39,"line":104},[37,9406,2306],{"class":54},[37,9408,8097],{"class":185},[37,9410,9411],{"class":39,"line":113},[37,9412,9413],{"class":50},"sctuct Student\n",[37,9415,9416],{"class":39,"line":189},[37,9417,1922],{"class":50},[37,9419,9420],{"class":39,"line":195},[37,9421,8133],{"class":50},[37,9423,9424,9426],{"class":39,"line":201},[37,9425,2342],{"class":54},[37,9427,8145],{"class":50},[37,9429,9430,9432],{"class":39,"line":207},[37,9431,2342],{"class":54},[37,9433,8157],{"class":50},[37,9435,9436],{"class":39,"line":213},[37,9437,4345],{"class":50},[37,9439,9440,9442,9445,9447,9450,9452],{"class":39,"line":218},[37,9441,5712],{"class":54},[37,9443,9444],{"class":2320}," printStudents",[37,9446,165],{"class":50},[37,9448,9449],{"class":2320},"student",[37,9451,8769],{"class":159},[37,9453,280],{"class":50},[37,9455,9456],{"class":39,"line":227},[37,9457,1922],{"class":50},[37,9459,9460,9462,9464,9467,9469,9472,9474,9477,9479],{"class":39,"line":232},[37,9461,1927],{"class":50},[37,9463,1552],{"class":54},[37,9465,9466],{"class":50},"s.name",[37,9468,1552],{"class":54},[37,9470,9471],{"class":50},"s.age",[37,9473,1552],{"class":54},[37,9475,9476],{"class":50},"s.score",[37,9478,1552],{"class":54},[37,9480,1574],{"class":50},[37,9482,9483],{"class":39,"line":238},[37,9484,1941],{"class":50},[37,9486,9487,9489,9491],{"class":39,"line":244},[37,9488,533],{"class":54},[37,9490,2330],{"class":2320},[37,9492,6326],{"class":50},[37,9494,9495],{"class":39,"line":250},[37,9496,1922],{"class":50},[37,9498,9499,9502,9504,9506,9508,9510,9512,9514,9516],{"class":39,"line":256},[37,9500,9501],{"class":50},"    Student s",[37,9503,55],{"class":54},[37,9505,1404],{"class":50},[37,9507,8264],{"class":185},[37,9509,65],{"class":50},[37,9511,1160],{"class":61},[37,9513,65],{"class":50},[37,9515,1160],{"class":61},[37,9517,4345],{"class":50},[37,9519,9520,9523],{"class":39,"line":261},[37,9521,9522],{"class":2320},"    printStudent",[37,9524,9326],{"class":50},[37,9526,9527],{"class":39,"line":267},[37,9528,2757],{"emptyLinePlaceholder":454},[37,9530,9531],{"class":39,"line":283},[37,9532,1941],{"class":50},[14,9534,9366],{},[1515,9536,9537,9540,9543],{},[484,9538,9539],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[484,9541,9542],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[484,9544,9545],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[27,9547,9549],{"className":519,"code":9548,"language":521,"meta":32,"style":32},"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",[34,9550,9551,9570,9574,9579,9599],{"__ignoreMap":32},[37,9552,9553,9555,9557,9559,9561,9564,9566,9568],{"class":39,"line":40},[37,9554,5712],{"class":54},[37,9556,9444],{"class":2320},[37,9558,165],{"class":50},[37,9560,7140],{"class":54},[37,9562,9563],{"class":2320}," student",[37,9565,6866],{"class":54},[37,9567,1205],{"class":159},[37,9569,280],{"class":50},[37,9571,9572],{"class":39,"line":47},[37,9573,1922],{"class":50},[37,9575,9576],{"class":39,"line":104},[37,9577,9578],{"class":43},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[37,9580,9581,9583,9585,9587,9589,9591,9593,9595,9597],{"class":39,"line":113},[37,9582,1927],{"class":50},[37,9584,1552],{"class":54},[37,9586,9466],{"class":50},[37,9588,1552],{"class":54},[37,9590,9471],{"class":50},[37,9592,1552],{"class":54},[37,9594,9476],{"class":50},[37,9596,1552],{"class":54},[37,9598,1574],{"class":50},[37,9600,9601],{"class":39,"line":189},[37,9602,1941],{"class":50},[469,9604,9606],{"id":9605},"_47案例","4.7案例",[481,9608,9609],{},[484,9610,9611],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[27,9613,9615],{"className":519,"code":9614,"language":521,"meta":32,"style":32},"#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",[34,9616,9617,9623,9633,9639,9646,9650,9656,9660,9665,9671,9677,9681,9685,9691,9695,9700,9705,9718,9722,9727,9753,9757,9769,9796,9800,9812,9822,9826,9831,9860,9864,9876,9885,9912,9923,9933,9937,9941,9945,9950,9974,9978,10002,10006,10025,10051,10055,10080,10103,10127,10132,10137,10142,10151,10156,10162,10183,10189,10203,10209,10236,10245,10251,10259,10264],{"__ignoreMap":32},[37,9618,9619,9621],{"class":39,"line":40},[37,9620,2306],{"class":54},[37,9622,2309],{"class":185},[37,9624,9625,9627,9629,9631],{"class":39,"line":47},[37,9626,2314],{"class":54},[37,9628,2317],{"class":54},[37,9630,2321],{"class":2320},[37,9632,1669],{"class":50},[37,9634,9635,9637],{"class":39,"line":104},[37,9636,2306],{"class":54},[37,9638,8097],{"class":185},[37,9640,9641,9643],{"class":39,"line":113},[37,9642,2306],{"class":54},[37,9644,9645],{"class":185},"\u003Cctime>\n",[37,9647,9648],{"class":39,"line":189},[37,9649,8879],{"class":43},[37,9651,9652,9654],{"class":39,"line":195},[37,9653,8107],{"class":54},[37,9655,8110],{"class":2320},[37,9657,9658],{"class":39,"line":201},[37,9659,1922],{"class":50},[37,9661,9662],{"class":39,"line":207},[37,9663,9664],{"class":50},"    string sName;\n",[37,9666,9667,9669],{"class":39,"line":213},[37,9668,2342],{"class":54},[37,9670,8145],{"class":50},[37,9672,9673,9675],{"class":39,"line":218},[37,9674,2342],{"class":54},[37,9676,8157],{"class":50},[37,9678,9679],{"class":39,"line":227},[37,9680,4345],{"class":50},[37,9682,9683],{"class":39,"line":232},[37,9684,8916],{"class":43},[37,9686,9687,9689],{"class":39,"line":238},[37,9688,8107],{"class":54},[37,9690,8923],{"class":2320},[37,9692,9693],{"class":39,"line":244},[37,9694,1922],{"class":50},[37,9696,9697],{"class":39,"line":250},[37,9698,9699],{"class":50},"    string tName;\n",[37,9701,9702],{"class":39,"line":256},[37,9703,9704],{"class":43},"    \u002F\u002F学生数组\n",[37,9706,9707,9709,9711,9714,9716],{"class":39,"line":261},[37,9708,8243],{"class":54},[37,9710,8246],{"class":2320},[37,9712,9713],{"class":50}," sArray[",[37,9715,836],{"class":61},[37,9717,5039],{"class":50},[37,9719,9720],{"class":39,"line":267},[37,9721,4345],{"class":50},[37,9723,9724],{"class":39,"line":283},[37,9725,9726],{"class":43},"\u002F\u002F给老师和学生赋值的函数\n",[37,9728,9729,9731,9734,9736,9738,9741,9744,9747,9749,9751],{"class":39,"line":288},[37,9730,5712],{"class":54},[37,9732,9733],{"class":2320}," allocateSpace",[37,9735,165],{"class":50},[37,9737,8107],{"class":54},[37,9739,9740],{"class":2320}," Teacher",[37,9742,9743],{"class":159}," tArray",[37,9745,9746],{"class":50},"[],",[37,9748,533],{"class":54},[37,9750,7679],{"class":159},[37,9752,280],{"class":50},[37,9754,9755],{"class":39,"line":294},[37,9756,1922],{"class":50},[37,9758,9759,9762,9764,9767],{"class":39,"line":300},[37,9760,9761],{"class":50},"    string nameSeed",[37,9763,55],{"class":54},[37,9765,9766],{"class":185},"\"ABCDE\"",[37,9768,1669],{"class":50},[37,9770,9771,9773,9775,9777,9780,9782,9784,9787,9789,9792,9794],{"class":39,"line":306},[37,9772,3551],{"class":54},[37,9774,2027],{"class":50},[37,9776,533],{"class":54},[37,9778,9779],{"class":50}," i ",[37,9781,55],{"class":54},[37,9783,4443],{"class":61},[37,9785,9786],{"class":50},"; i ",[37,9788,1418],{"class":54},[37,9790,9791],{"class":50}," len; i",[37,9793,2649],{"class":54},[37,9795,280],{"class":50},[37,9797,9798],{"class":39,"line":312},[37,9799,2387],{"class":50},[37,9801,9802,9805,9807,9810],{"class":39,"line":317},[37,9803,9804],{"class":50},"        tArray[i].tName ",[37,9806,55],{"class":54},[37,9808,9809],{"class":185}," \"Teacher_\"",[37,9811,1669],{"class":50},[37,9813,9814,9816,9819],{"class":39,"line":323},[37,9815,9804],{"class":50},[37,9817,9818],{"class":54},"+=",[37,9820,9821],{"class":50},"nameSeed[i];\n",[37,9823,9824],{"class":39,"line":337},[37,9825,2757],{"emptyLinePlaceholder":454},[37,9827,9828],{"class":39,"line":342},[37,9829,9830],{"class":43},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[37,9832,9833,9835,9837,9839,9842,9844,9846,9849,9851,9853,9856,9858],{"class":39,"line":347},[37,9834,3753],{"class":54},[37,9836,2027],{"class":50},[37,9838,533],{"class":54},[37,9840,9841],{"class":50}," j ",[37,9843,55],{"class":54},[37,9845,4443],{"class":61},[37,9847,9848],{"class":50},"; j ",[37,9850,1418],{"class":54},[37,9852,2505],{"class":61},[37,9854,9855],{"class":50},"; j",[37,9857,2649],{"class":54},[37,9859,280],{"class":50},[37,9861,9862],{"class":39,"line":352},[37,9863,2867],{"class":50},[37,9865,9866,9869,9871,9874],{"class":39,"line":357},[37,9867,9868],{"class":50},"            tArray[i].sArray[j].sName ",[37,9870,55],{"class":54},[37,9872,9873],{"class":185}," \"Student_\"",[37,9875,1669],{"class":50},[37,9877,9878,9880,9882],{"class":39,"line":362},[37,9879,9868],{"class":50},[37,9881,9818],{"class":54},[37,9883,9884],{"class":50}," nameSeed[j];\n",[37,9886,9887,9890,9893,9895,9897,9899,9901,9903,9905,9907,9909],{"class":39,"line":367},[37,9888,9889],{"class":54},"            int",[37,9891,9892],{"class":50}," random",[37,9894,55],{"class":54},[37,9896,2781],{"class":2320},[37,9898,2784],{"class":50},[37,9900,845],{"class":54},[37,9902,1415],{"class":61},[37,9904,993],{"class":54},[37,9906,915],{"class":61},[37,9908,582],{"class":50},[37,9910,9911],{"class":43},"\u002F\u002F40~99\n",[37,9913,9914,9917,9919,9921],{"class":39,"line":373},[37,9915,9916],{"class":50},"            tArray[i].sArray[j].age ",[37,9918,55],{"class":54},[37,9920,9291],{"class":61},[37,9922,1669],{"class":50},[37,9924,9925,9928,9930],{"class":39,"line":392},[37,9926,9927],{"class":50},"            tArray[i].sArray[j].score ",[37,9929,55],{"class":54},[37,9931,9932],{"class":50}," random;\n",[37,9934,9935],{"class":39,"line":398},[37,9936,2886],{"class":50},[37,9938,9939],{"class":39,"line":409},[37,9940,2544],{"class":50},[37,9942,9943],{"class":39,"line":415},[37,9944,1941],{"class":50},[37,9946,9947],{"class":39,"line":420},[37,9948,9949],{"class":43},"\u002F\u002F打印所有信息的函数\n",[37,9951,9952,9954,9957,9959,9961,9963,9965,9968,9970,9972],{"class":39,"line":425},[37,9953,5712],{"class":54},[37,9955,9956],{"class":2320}," printInfo",[37,9958,165],{"class":50},[37,9960,8107],{"class":54},[37,9962,9740],{"class":2320},[37,9964,9743],{"class":159},[37,9966,9967],{"class":50},"[], ",[37,9969,533],{"class":54},[37,9971,7679],{"class":159},[37,9973,280],{"class":50},[37,9975,9976],{"class":39,"line":431},[37,9977,1922],{"class":50},[37,9979,9980,9982,9984,9986,9988,9990,9992,9994,9996,9998,10000],{"class":39,"line":436},[37,9981,3551],{"class":54},[37,9983,2027],{"class":50},[37,9985,533],{"class":54},[37,9987,9779],{"class":50},[37,9989,55],{"class":54},[37,9991,4443],{"class":61},[37,9993,9786],{"class":50},[37,9995,1418],{"class":54},[37,9997,9791],{"class":50},[37,9999,2649],{"class":54},[37,10001,280],{"class":50},[37,10003,10004],{"class":39,"line":442},[37,10005,2387],{"class":50},[37,10007,10008,10011,10013,10016,10018,10021,10023],{"class":39,"line":8374},[37,10009,10010],{"class":50},"        cout ",[37,10012,1552],{"class":54},[37,10014,10015],{"class":185}," \"Teacher: \"",[37,10017,1820],{"class":54},[37,10019,10020],{"class":50}," tArray[i].tName ",[37,10022,1552],{"class":54},[37,10024,9181],{"class":50},[37,10026,10027,10029,10031,10033,10035,10037,10039,10041,10043,10045,10047,10049],{"class":39,"line":8386},[37,10028,3753],{"class":54},[37,10030,2027],{"class":50},[37,10032,533],{"class":54},[37,10034,9841],{"class":50},[37,10036,55],{"class":54},[37,10038,4443],{"class":61},[37,10040,9848],{"class":50},[37,10042,1418],{"class":54},[37,10044,2505],{"class":61},[37,10046,9855],{"class":50},[37,10048,2649],{"class":54},[37,10050,280],{"class":50},[37,10052,10053],{"class":39,"line":8398},[37,10054,2867],{"class":50},[37,10056,10058,10061,10063,10066,10068,10071,10073,10076,10078],{"class":39,"line":10057},47,[37,10059,10060],{"class":50},"            cout ",[37,10062,1552],{"class":54},[37,10064,10065],{"class":185}," \"",[37,10067,1609],{"class":61},[37,10069,10070],{"class":185},"Student: \"",[37,10072,1820],{"class":54},[37,10074,10075],{"class":50}," tArray[i].sArray[j].sName",[37,10077,1552],{"class":54},[37,10079,1574],{"class":50},[37,10081,10083,10085,10087,10089,10091,10094,10096,10099,10101],{"class":39,"line":10082},48,[37,10084,10060],{"class":50},[37,10086,1552],{"class":54},[37,10088,10065],{"class":185},[37,10090,1609],{"class":61},[37,10092,10093],{"class":185},"Age: \"",[37,10095,1820],{"class":54},[37,10097,10098],{"class":50}," tArray[i].sArray[j].age ",[37,10100,1552],{"class":54},[37,10102,9181],{"class":50},[37,10104,10106,10108,10110,10112,10114,10117,10119,10122,10124],{"class":39,"line":10105},49,[37,10107,10060],{"class":50},[37,10109,1552],{"class":54},[37,10111,10065],{"class":185},[37,10113,1609],{"class":61},[37,10115,10116],{"class":185},"Score: \"",[37,10118,1820],{"class":54},[37,10120,10121],{"class":50}," tArray[i].sArray[j].score ",[37,10123,1552],{"class":54},[37,10125,10126],{"class":50}," endl;   \n",[37,10128,10130],{"class":39,"line":10129},50,[37,10131,2886],{"class":50},[37,10133,10135],{"class":39,"line":10134},51,[37,10136,2544],{"class":50},[37,10138,10140],{"class":39,"line":10139},52,[37,10141,1941],{"class":50},[37,10143,10145,10147,10149],{"class":39,"line":10144},53,[37,10146,533],{"class":54},[37,10148,2330],{"class":2320},[37,10150,2333],{"class":50},[37,10152,10154],{"class":39,"line":10153},54,[37,10155,1922],{"class":50},[37,10157,10159],{"class":39,"line":10158},55,[37,10160,10161],{"class":43},"    \u002F\u002F随机数种子\n",[37,10163,10165,10167,10169,10171,10173,10175,10177,10179,10181],{"class":39,"line":10164},56,[37,10166,2730],{"class":2320},[37,10168,2733],{"class":50},[37,10170,2736],{"class":54},[37,10172,2739],{"class":54},[37,10174,138],{"class":50},[37,10176,2744],{"class":2320},[37,10178,165],{"class":50},[37,10180,2749],{"class":61},[37,10182,2752],{"class":50},[37,10184,10186],{"class":39,"line":10185},57,[37,10187,10188],{"class":43},"    \u002F\u002F1.创建3名老师的数组\n",[37,10190,10192,10194,10196,10199,10201],{"class":39,"line":10191},58,[37,10193,8243],{"class":54},[37,10195,9740],{"class":2320},[37,10197,10198],{"class":50}," tArray[",[37,10200,62],{"class":61},[37,10202,5039],{"class":50},[37,10204,10206],{"class":39,"line":10205},59,[37,10207,10208],{"class":43},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[37,10210,10212,10214,10217,10219,10222,10225,10227,10229,10232,10234],{"class":39,"line":10211},60,[37,10213,2342],{"class":54},[37,10215,10216],{"class":50}," len ",[37,10218,55],{"class":54},[37,10220,10221],{"class":54}," sizeof",[37,10223,10224],{"class":50},"(tArray) ",[37,10226,1094],{"class":54},[37,10228,10221],{"class":54},[37,10230,10231],{"class":50},"(tArray[",[37,10233,135],{"class":61},[37,10235,4206],{"class":50},[37,10237,10239,10242],{"class":39,"line":10238},61,[37,10240,10241],{"class":2320},"    allocateSpace",[37,10243,10244],{"class":50},"(tArray, len);\n",[37,10246,10248],{"class":39,"line":10247},62,[37,10249,10250],{"class":43},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[37,10252,10254,10257],{"class":39,"line":10253},63,[37,10255,10256],{"class":2320},"    printInfo",[37,10258,10244],{"class":50},[37,10260,10262],{"class":39,"line":10261},64,[37,10263,2757],{"emptyLinePlaceholder":454},[37,10265,10267],{"class":39,"line":10266},65,[37,10268,1941],{"class":50},[481,10270,10271],{"start":47},[484,10272,10273,10276],{},[673,10274,10275],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10278,10279],{},"五名英雄信息如下：",[27,10281,10285],{"className":10282,"code":10283,"language":10284,"meta":32,"style":32},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[34,10286,10287,10305,10322,10339,10356],{"__ignoreMap":32},[37,10288,10289,10291,10294,10296,10298,10300,10303],{"class":39,"line":40},[37,10290,5266],{"class":50},[37,10292,10293],{"class":185},"\"刘备\"",[37,10295,65],{"class":50},[37,10297,78],{"class":61},[37,10299,65],{"class":50},[37,10301,10302],{"class":185},"\"男\"",[37,10304,5279],{"class":50},[37,10306,10307,10309,10312,10314,10316,10318,10320],{"class":39,"line":47},[37,10308,5266],{"class":50},[37,10310,10311],{"class":185},"\"关羽\"",[37,10313,65],{"class":50},[37,10315,1260],{"class":61},[37,10317,65],{"class":50},[37,10319,10302],{"class":185},[37,10321,5279],{"class":50},[37,10323,10324,10326,10329,10331,10333,10335,10337],{"class":39,"line":104},[37,10325,5266],{"class":50},[37,10327,10328],{"class":185},"\"张飞\"",[37,10330,65],{"class":50},[37,10332,1210],{"class":61},[37,10334,65],{"class":50},[37,10336,10302],{"class":185},[37,10338,5279],{"class":50},[37,10340,10341,10343,10346,10348,10350,10352,10354],{"class":39,"line":113},[37,10342,5266],{"class":50},[37,10344,10345],{"class":185},"\"赵云\"",[37,10347,65],{"class":50},[37,10349,1235],{"class":61},[37,10351,65],{"class":50},[37,10353,10302],{"class":185},[37,10355,5279],{"class":50},[37,10357,10358,10360,10363,10365,10367,10369,10372],{"class":39,"line":189},[37,10359,5266],{"class":50},[37,10361,10362],{"class":185},"\"貂蝉\"",[37,10364,65],{"class":50},[37,10366,1185],{"class":61},[37,10368,65],{"class":50},[37,10370,10371],{"class":185},"\"女\"",[37,10373,5279],{"class":50},[14,10375,10376],{},"代码：",[27,10378,10380],{"className":519,"code":10379,"language":521,"meta":32,"style":32},"#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",[34,10381,10382,10388,10398,10404,10411,10415,10419,10425,10430,10434,10439,10462,10466,10491,10495,10528,10533,10562,10567,10582,10608,10628,10633,10638,10642,10646,10651,10673,10677,10701,10705,10767,10771,10775,10783,10787,10792,10803,10807,10823,10839,10855,10871,10887,10891,10911,10933,10938,10951,10958,10963,10969,10974,10987,10993],{"__ignoreMap":32},[37,10383,10384,10386],{"class":39,"line":40},[37,10385,2306],{"class":54},[37,10387,2309],{"class":185},[37,10389,10390,10392,10394,10396],{"class":39,"line":47},[37,10391,2314],{"class":54},[37,10393,2317],{"class":54},[37,10395,2321],{"class":2320},[37,10397,1669],{"class":50},[37,10399,10400,10402],{"class":39,"line":104},[37,10401,2306],{"class":54},[37,10403,8097],{"class":185},[37,10405,10406,10408],{"class":39,"line":113},[37,10407,8107],{"class":54},[37,10409,10410],{"class":2320}," Sanguo\n",[37,10412,10413],{"class":39,"line":189},[37,10414,1922],{"class":50},[37,10416,10417],{"class":39,"line":195},[37,10418,8133],{"class":50},[37,10420,10421,10423],{"class":39,"line":201},[37,10422,2342],{"class":54},[37,10424,8145],{"class":50},[37,10426,10427],{"class":39,"line":207},[37,10428,10429],{"class":50},"    string gender;\n",[37,10431,10432],{"class":39,"line":213},[37,10433,4345],{"class":50},[37,10435,10436],{"class":39,"line":218},[37,10437,10438],{"class":43},"\u002F\u002F定义排序函数\n",[37,10440,10441,10443,10445,10447,10450,10452,10454,10456,10458,10460],{"class":39,"line":227},[37,10442,5712],{"class":54},[37,10444,7664],{"class":2320},[37,10446,165],{"class":50},[37,10448,10449],{"class":2320},"Sanguo",[37,10451,6866],{"class":54},[37,10453,1205],{"class":159},[37,10455,65],{"class":50},[37,10457,533],{"class":54},[37,10459,7679],{"class":159},[37,10461,280],{"class":50},[37,10463,10464],{"class":39,"line":232},[37,10465,1922],{"class":50},[37,10467,10468,10470,10472,10474,10476,10478,10480,10482,10484,10487,10489],{"class":39,"line":238},[37,10469,3551],{"class":54},[37,10471,165],{"class":50},[37,10473,533],{"class":54},[37,10475,3382],{"class":50},[37,10477,55],{"class":54},[37,10479,135],{"class":61},[37,10481,3389],{"class":50},[37,10483,1418],{"class":54},[37,10485,10486],{"class":50},"len;i",[37,10488,2649],{"class":54},[37,10490,280],{"class":50},[37,10492,10493],{"class":39,"line":244},[37,10494,2387],{"class":50},[37,10496,10497,10500,10502,10504,10506,10508,10510,10512,10514,10516,10518,10520,10522,10524,10526],{"class":39,"line":250},[37,10498,10499],{"class":54},"     for",[37,10501,2027],{"class":50},[37,10503,533],{"class":54},[37,10505,3760],{"class":50},[37,10507,55],{"class":54},[37,10509,135],{"class":61},[37,10511,3767],{"class":50},[37,10513,1418],{"class":54},[37,10515,7706],{"class":50},[37,10517,384],{"class":54},[37,10519,332],{"class":61},[37,10521,384],{"class":54},[37,10523,3900],{"class":50},[37,10525,2649],{"class":54},[37,10527,280],{"class":50},[37,10529,10530],{"class":39,"line":256},[37,10531,10532],{"class":50},"     {\n",[37,10534,10535,10538,10541,10543,10546,10548,10551,10553,10555,10557,10559],{"class":39,"line":261},[37,10536,10537],{"class":54},"         if",[37,10539,10540],{"class":50}," ((s",[37,10542,993],{"class":54},[37,10544,10545],{"class":50},"j)->age ",[37,10547,1468],{"class":54},[37,10549,10550],{"class":50}," (s",[37,10552,993],{"class":54},[37,10554,979],{"class":50},[37,10556,993],{"class":54},[37,10558,332],{"class":61},[37,10560,10561],{"class":50},")->age)\n",[37,10563,10564],{"class":39,"line":267},[37,10565,10566],{"class":50},"         {\n",[37,10568,10569,10572,10574,10577,10579],{"class":39,"line":283},[37,10570,10571],{"class":50},"             Sanguo temp",[37,10573,7501],{"class":54},[37,10575,10576],{"class":50},"(s",[37,10578,993],{"class":54},[37,10580,10581],{"class":50},"j);\n",[37,10583,10584,10587,10589,10591,10594,10596,10598,10600,10602,10604,10606],{"class":39,"line":288},[37,10585,10586],{"class":54},"             *",[37,10588,10576],{"class":50},[37,10590,993],{"class":54},[37,10592,10593],{"class":50},"j)",[37,10595,7501],{"class":54},[37,10597,10576],{"class":50},[37,10599,993],{"class":54},[37,10601,979],{"class":50},[37,10603,993],{"class":54},[37,10605,332],{"class":61},[37,10607,3069],{"class":50},[37,10609,10610,10612,10614,10616,10618,10620,10622,10624,10626],{"class":39,"line":294},[37,10611,10586],{"class":54},[37,10613,10576],{"class":50},[37,10615,993],{"class":54},[37,10617,979],{"class":50},[37,10619,993],{"class":54},[37,10621,332],{"class":61},[37,10623,138],{"class":50},[37,10625,55],{"class":54},[37,10627,4630],{"class":50},[37,10629,10630],{"class":39,"line":300},[37,10631,10632],{"class":50},"         }\n",[37,10634,10635],{"class":39,"line":306},[37,10636,10637],{"class":50},"     }\n",[37,10639,10640],{"class":39,"line":312},[37,10641,2544],{"class":50},[37,10643,10644],{"class":39,"line":317},[37,10645,1941],{"class":50},[37,10647,10648],{"class":39,"line":323},[37,10649,10650],{"class":43},"\u002F\u002F定义打印函数\n",[37,10652,10653,10655,10657,10659,10661,10663,10665,10667,10669,10671],{"class":39,"line":337},[37,10654,5712],{"class":54},[37,10656,9956],{"class":2320},[37,10658,165],{"class":50},[37,10660,10449],{"class":2320},[37,10662,6866],{"class":54},[37,10664,1205],{"class":159},[37,10666,65],{"class":50},[37,10668,533],{"class":54},[37,10670,7679],{"class":159},[37,10672,280],{"class":50},[37,10674,10675],{"class":39,"line":342},[37,10676,1922],{"class":50},[37,10678,10679,10681,10683,10685,10687,10689,10691,10693,10695,10697,10699],{"class":39,"line":347},[37,10680,3551],{"class":54},[37,10682,2027],{"class":50},[37,10684,533],{"class":54},[37,10686,3382],{"class":50},[37,10688,55],{"class":54},[37,10690,135],{"class":61},[37,10692,3389],{"class":50},[37,10694,1418],{"class":54},[37,10696,10486],{"class":50},[37,10698,2649],{"class":54},[37,10700,280],{"class":50},[37,10702,10703],{"class":39,"line":352},[37,10704,2387],{"class":50},[37,10706,10707,10709,10711,10713,10715,10718,10720,10722,10724,10727,10729,10731,10733,10736,10738,10740,10742,10745,10747,10749,10751,10754,10756,10758,10760,10763,10765],{"class":39,"line":357},[37,10708,3801],{"class":50},[37,10710,1552],{"class":54},[37,10712,772],{"class":185},[37,10714,1609],{"class":61},[37,10716,10717],{"class":185},"姓名：\"",[37,10719,1552],{"class":54},[37,10721,10576],{"class":50},[37,10723,993],{"class":54},[37,10725,10726],{"class":50},"i)->name",[37,10728,1552],{"class":54},[37,10730,772],{"class":185},[37,10732,1609],{"class":61},[37,10734,10735],{"class":185},"年龄：\"",[37,10737,1552],{"class":54},[37,10739,10576],{"class":50},[37,10741,993],{"class":54},[37,10743,10744],{"class":50},"i)->age",[37,10746,1552],{"class":54},[37,10748,772],{"class":185},[37,10750,1609],{"class":61},[37,10752,10753],{"class":185},"性别：\"",[37,10755,1552],{"class":54},[37,10757,10576],{"class":50},[37,10759,993],{"class":54},[37,10761,10762],{"class":50},"i)->gender",[37,10764,1552],{"class":54},[37,10766,1574],{"class":50},[37,10768,10769],{"class":39,"line":362},[37,10770,2544],{"class":50},[37,10772,10773],{"class":39,"line":367},[37,10774,1941],{"class":50},[37,10776,10777,10779,10781],{"class":39,"line":373},[37,10778,533],{"class":54},[37,10780,2330],{"class":2320},[37,10782,2333],{"class":50},[37,10784,10785],{"class":39,"line":392},[37,10786,1922],{"class":50},[37,10788,10789],{"class":39,"line":398},[37,10790,10791],{"class":43},"    \u002F\u002F定义结构体变量\n",[37,10793,10794,10797,10799,10801],{"class":39,"line":409},[37,10795,10796],{"class":50},"    Sanguo s1[",[37,10798,836],{"class":61},[37,10800,1448],{"class":50},[37,10802,5257],{"class":54},[37,10804,10805],{"class":39,"line":415},[37,10806,2387],{"class":50},[37,10808,10809,10811,10813,10815,10817,10819,10821],{"class":39,"line":420},[37,10810,5266],{"class":50},[37,10812,10293],{"class":185},[37,10814,65],{"class":50},[37,10816,78],{"class":61},[37,10818,65],{"class":50},[37,10820,10302],{"class":185},[37,10822,5279],{"class":50},[37,10824,10825,10827,10829,10831,10833,10835,10837],{"class":39,"line":425},[37,10826,5266],{"class":50},[37,10828,10311],{"class":185},[37,10830,65],{"class":50},[37,10832,1260],{"class":61},[37,10834,65],{"class":50},[37,10836,10302],{"class":185},[37,10838,5279],{"class":50},[37,10840,10841,10843,10845,10847,10849,10851,10853],{"class":39,"line":431},[37,10842,5266],{"class":50},[37,10844,10328],{"class":185},[37,10846,65],{"class":50},[37,10848,1210],{"class":61},[37,10850,65],{"class":50},[37,10852,10302],{"class":185},[37,10854,5279],{"class":50},[37,10856,10857,10859,10861,10863,10865,10867,10869],{"class":39,"line":436},[37,10858,5266],{"class":50},[37,10860,10345],{"class":185},[37,10862,65],{"class":50},[37,10864,1235],{"class":61},[37,10866,65],{"class":50},[37,10868,10302],{"class":185},[37,10870,5279],{"class":50},[37,10872,10873,10875,10877,10879,10881,10883,10885],{"class":39,"line":442},[37,10874,5266],{"class":50},[37,10876,10362],{"class":185},[37,10878,65],{"class":50},[37,10880,1185],{"class":61},[37,10882,65],{"class":50},[37,10884,10371],{"class":185},[37,10886,5279],{"class":50},[37,10888,10889],{"class":39,"line":8374},[37,10890,5300],{"class":50},[37,10892,10893,10895,10897,10899,10902,10904,10907,10909],{"class":39,"line":8386},[37,10894,2342],{"class":54},[37,10896,7679],{"class":50},[37,10898,4553],{"class":54},[37,10900,10901],{"class":50},"(s1)",[37,10903,4559],{"class":54},[37,10905,10906],{"class":50},"(s1[",[37,10908,135],{"class":61},[37,10910,4206],{"class":50},[37,10912,10913,10916,10918,10921,10923,10926,10929,10931],{"class":39,"line":8398},[37,10914,10915],{"class":50},"    Sanguo ",[37,10917,967],{"class":54},[37,10919,10920],{"class":50},"s ",[37,10922,55],{"class":54},[37,10924,10925],{"class":54}," &",[37,10927,10928],{"class":50},"s1[",[37,10930,135],{"class":61},[37,10932,5039],{"class":50},[37,10934,10935],{"class":39,"line":10057},[37,10936,10937],{"class":43},"    \u002F\u002F排序前：\n",[37,10939,10940,10942,10944,10947,10949],{"class":39,"line":10082},[37,10941,6877],{"class":50},[37,10943,1552],{"class":54},[37,10945,10946],{"class":185}," \"排序前：\"",[37,10948,1820],{"class":54},[37,10950,9181],{"class":50},[37,10952,10953,10955],{"class":39,"line":10105},[37,10954,10256],{"class":2320},[37,10956,10957],{"class":50},"(s,len);\n",[37,10959,10960],{"class":39,"line":10129},[37,10961,10962],{"class":43},"    \u002F\u002F调用排序函数\n",[37,10964,10965,10967],{"class":39,"line":10134},[37,10966,7946],{"class":2320},[37,10968,10957],{"class":50},[37,10970,10971],{"class":39,"line":10139},[37,10972,10973],{"class":43},"    \u002F\u002F排序后\n",[37,10975,10976,10978,10980,10983,10985],{"class":39,"line":10144},[37,10977,6877],{"class":50},[37,10979,1552],{"class":54},[37,10981,10982],{"class":185}," \"排序后：\"",[37,10984,1820],{"class":54},[37,10986,9181],{"class":50},[37,10988,10989,10991],{"class":39,"line":10153},[37,10990,10256],{"class":2320},[37,10992,10957],{"class":50},[37,10994,10995],{"class":39,"line":10158},[37,10996,1941],{"class":50},[14,10998,10999,11000,11002],{},"注意：使用指针时直接用传首地址**&s",[37,11001,135],{},"**",[446,11004,11005],{},"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":32,"searchDepth":47,"depth":47,"links":11007},[11008,11009,11010,11011,11012,11013,11014],{"id":8051,"depth":47,"text":8052},{"id":8406,"depth":47,"text":8407},{"id":8675,"depth":47,"text":8676},{"id":8840,"depth":47,"text":8841},{"id":9056,"depth":47,"text":9057},{"id":9377,"depth":47,"text":9378},{"id":9605,"depth":47,"text":9606},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8040,"description":8048},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11021,"title":11022,"body":11023,"description":32,"extension":452,"meta":12366,"navigation":454,"path":12367,"seo":12368,"stem":12369,"__hash__":12370},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11024,"toc":12360},[11025,11028,11032,11038,11052,11057,11060,11064,11071,11077,11080,11087,11093,11098,11101,11104,11107,11671,11674,11688,11692,11697,11713,11853,11856,11862,11865,11870,11878,11986,11989,11994,11997,12002,12005,12011,12014,12357],[10,11026,11022],{"id":11027},"_5程序内存模型",[469,11029,11031],{"id":11030},"_51内存分区模型","5.1内存分区模型",[14,11033,11034,11035],{},"C++程序在执行时，将内存大方向划分为",[673,11036,11037],{},"4个区域",[1515,11039,11040,11043,11046,11049],{},[484,11041,11042],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[484,11044,11045],{},"全局区：存放全局变量和静态变量以及常量",[484,11047,11048],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[484,11050,11051],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,11053,11054],{},[673,11055,11056],{},"内存四区意义：",[14,11058,11059],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[498,11061,11063],{"id":11062},"_511程序运行前","5.1.1程序运行前",[14,11065,11066,11067,11070],{},"​\t在程序编译后，生成了exe可执行程序，",[673,11068,11069],{},"未执行该程序前","分为两个区域",[14,11072,11073,11074],{},"​\t",[673,11075,11076],{},"代码区：",[14,11078,11079],{},"​\t\t存放 CPU 执行的机器指令",[14,11081,11082,11083,11086],{},"​\t\t代码区是",[673,11084,11085],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,11088,11082,11089,11092],{},[673,11090,11091],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,11094,11073,11095],{},[673,11096,11097],{},"全局区：",[14,11099,11100],{},"​\t\t全局变量和静态变量存放在此.",[14,11102,11103],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,11105,11106],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[27,11108,11110],{"className":519,"code":11109,"language":521,"meta":32,"style":32},"\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",[34,11111,11112,11117,11130,11143,11147,11152,11167,11182,11186,11195,11199,11204,11217,11230,11234,11239,11265,11291,11295,11322,11348,11352,11357,11373,11388,11392,11418,11444,11448,11473,11498,11502,11528,11554,11558,11574,11589,11615,11641,11645,11655,11659,11667],{"__ignoreMap":32},[37,11113,11114],{"class":39,"line":40},[37,11115,11116],{"class":43},"\u002F\u002F全局变量\n",[37,11118,11119,11121,11124,11126,11128],{"class":39,"line":47},[37,11120,533],{"class":54},[37,11122,11123],{"class":50}," g_a ",[37,11125,55],{"class":54},[37,11127,2395],{"class":61},[37,11129,1669],{"class":50},[37,11131,11132,11134,11137,11139,11141],{"class":39,"line":104},[37,11133,533],{"class":54},[37,11135,11136],{"class":50}," g_b ",[37,11138,55],{"class":54},[37,11140,2395],{"class":61},[37,11142,1669],{"class":50},[37,11144,11145],{"class":39,"line":113},[37,11146,2757],{"emptyLinePlaceholder":454},[37,11148,11149],{"class":39,"line":189},[37,11150,11151],{"class":43},"\u002F\u002F全局常量\n",[37,11153,11154,11156,11158,11161,11163,11165],{"class":39,"line":195},[37,11155,7140],{"class":54},[37,11157,2739],{"class":54},[37,11159,11160],{"class":50}," c_g_a ",[37,11162,55],{"class":54},[37,11164,2395],{"class":61},[37,11166,1669],{"class":50},[37,11168,11169,11171,11173,11176,11178,11180],{"class":39,"line":201},[37,11170,7140],{"class":54},[37,11172,2739],{"class":54},[37,11174,11175],{"class":50}," c_g_b ",[37,11177,55],{"class":54},[37,11179,2395],{"class":61},[37,11181,1669],{"class":50},[37,11183,11184],{"class":39,"line":207},[37,11185,2757],{"emptyLinePlaceholder":454},[37,11187,11188,11190,11192],{"class":39,"line":213},[37,11189,533],{"class":54},[37,11191,2330],{"class":2320},[37,11193,11194],{"class":50},"() {\n",[37,11196,11197],{"class":39,"line":218},[37,11198,2757],{"emptyLinePlaceholder":454},[37,11200,11201],{"class":39,"line":227},[37,11202,11203],{"class":43},"    \u002F\u002F局部变量\n",[37,11205,11206,11208,11211,11213,11215],{"class":39,"line":232},[37,11207,2342],{"class":54},[37,11209,11210],{"class":50}," a ",[37,11212,55],{"class":54},[37,11214,2395],{"class":61},[37,11216,1669],{"class":50},[37,11218,11219,11221,11224,11226,11228],{"class":39,"line":238},[37,11220,2342],{"class":54},[37,11222,11223],{"class":50}," b ",[37,11225,55],{"class":54},[37,11227,2395],{"class":61},[37,11229,1669],{"class":50},[37,11231,11232],{"class":39,"line":244},[37,11233,2757],{"emptyLinePlaceholder":454},[37,11235,11236],{"class":39,"line":250},[37,11237,11238],{"class":43},"    \u002F\u002F打印地址\n",[37,11240,11241,11243,11245,11248,11250,11252,11254,11256,11258,11261,11263],{"class":39,"line":256},[37,11242,6877],{"class":50},[37,11244,1552],{"class":54},[37,11246,11247],{"class":185}," \"局部变量a地址为： \"",[37,11249,1820],{"class":54},[37,11251,2027],{"class":50},[37,11253,533],{"class":54},[37,11255,138],{"class":50},[37,11257,869],{"class":54},[37,11259,11260],{"class":50},"a ",[37,11262,1552],{"class":54},[37,11264,9181],{"class":50},[37,11266,11267,11269,11271,11274,11276,11278,11280,11282,11284,11287,11289],{"class":39,"line":261},[37,11268,6877],{"class":50},[37,11270,1552],{"class":54},[37,11272,11273],{"class":185}," \"局部变量b地址为： \"",[37,11275,1820],{"class":54},[37,11277,2027],{"class":50},[37,11279,533],{"class":54},[37,11281,138],{"class":50},[37,11283,869],{"class":54},[37,11285,11286],{"class":50},"b ",[37,11288,1552],{"class":54},[37,11290,9181],{"class":50},[37,11292,11293],{"class":39,"line":267},[37,11294,2757],{"emptyLinePlaceholder":454},[37,11296,11297,11299,11301,11304,11306,11309,11311,11313,11315,11318,11320],{"class":39,"line":283},[37,11298,6877],{"class":50},[37,11300,1552],{"class":54},[37,11302,11303],{"class":185}," \"全局变量g_a地址为： \"",[37,11305,1820],{"class":54},[37,11307,11308],{"class":50},"  (",[37,11310,533],{"class":54},[37,11312,138],{"class":50},[37,11314,869],{"class":54},[37,11316,11317],{"class":50},"g_a ",[37,11319,1552],{"class":54},[37,11321,9181],{"class":50},[37,11323,11324,11326,11328,11331,11333,11335,11337,11339,11341,11344,11346],{"class":39,"line":288},[37,11325,6877],{"class":50},[37,11327,1552],{"class":54},[37,11329,11330],{"class":185}," \"全局变量g_b地址为： \"",[37,11332,1820],{"class":54},[37,11334,11308],{"class":50},[37,11336,533],{"class":54},[37,11338,138],{"class":50},[37,11340,869],{"class":54},[37,11342,11343],{"class":50},"g_b ",[37,11345,1552],{"class":54},[37,11347,9181],{"class":50},[37,11349,11350],{"class":39,"line":294},[37,11351,2757],{"emptyLinePlaceholder":454},[37,11353,11354],{"class":39,"line":300},[37,11355,11356],{"class":43},"    \u002F\u002F静态变量\n",[37,11358,11359,11362,11364,11367,11369,11371],{"class":39,"line":306},[37,11360,11361],{"class":54},"    static",[37,11363,2739],{"class":54},[37,11365,11366],{"class":50}," s_a ",[37,11368,55],{"class":54},[37,11370,2395],{"class":61},[37,11372,1669],{"class":50},[37,11374,11375,11377,11379,11382,11384,11386],{"class":39,"line":312},[37,11376,11361],{"class":54},[37,11378,2739],{"class":54},[37,11380,11381],{"class":50}," s_b ",[37,11383,55],{"class":54},[37,11385,2395],{"class":61},[37,11387,1669],{"class":50},[37,11389,11390],{"class":39,"line":317},[37,11391,2757],{"emptyLinePlaceholder":454},[37,11393,11394,11396,11398,11401,11403,11405,11407,11409,11411,11414,11416],{"class":39,"line":323},[37,11395,6877],{"class":50},[37,11397,1552],{"class":54},[37,11399,11400],{"class":185}," \"静态变量s_a地址为： \"",[37,11402,1820],{"class":54},[37,11404,2027],{"class":50},[37,11406,533],{"class":54},[37,11408,138],{"class":50},[37,11410,869],{"class":54},[37,11412,11413],{"class":50},"s_a ",[37,11415,1552],{"class":54},[37,11417,9181],{"class":50},[37,11419,11420,11422,11424,11427,11429,11431,11433,11435,11437,11440,11442],{"class":39,"line":337},[37,11421,6877],{"class":50},[37,11423,1552],{"class":54},[37,11425,11426],{"class":185}," \"静态变量s_b地址为： \"",[37,11428,1820],{"class":54},[37,11430,2027],{"class":50},[37,11432,533],{"class":54},[37,11434,138],{"class":50},[37,11436,869],{"class":54},[37,11438,11439],{"class":50},"s_b ",[37,11441,1552],{"class":54},[37,11443,9181],{"class":50},[37,11445,11446],{"class":39,"line":342},[37,11447,2757],{"emptyLinePlaceholder":454},[37,11449,11450,11452,11454,11457,11459,11461,11463,11465,11467,11469,11471],{"class":39,"line":347},[37,11451,6877],{"class":50},[37,11453,1552],{"class":54},[37,11455,11456],{"class":185}," \"字符串常量地址为： \"",[37,11458,1820],{"class":54},[37,11460,2027],{"class":50},[37,11462,533],{"class":54},[37,11464,138],{"class":50},[37,11466,869],{"class":54},[37,11468,1569],{"class":185},[37,11470,1820],{"class":54},[37,11472,9181],{"class":50},[37,11474,11475,11477,11479,11481,11483,11485,11487,11489,11491,11494,11496],{"class":39,"line":352},[37,11476,6877],{"class":50},[37,11478,1552],{"class":54},[37,11480,11456],{"class":185},[37,11482,1820],{"class":54},[37,11484,2027],{"class":50},[37,11486,533],{"class":54},[37,11488,138],{"class":50},[37,11490,869],{"class":54},[37,11492,11493],{"class":185},"\"hello world1\"",[37,11495,1820],{"class":54},[37,11497,9181],{"class":50},[37,11499,11500],{"class":39,"line":357},[37,11501,2757],{"emptyLinePlaceholder":454},[37,11503,11504,11506,11508,11511,11513,11515,11517,11519,11521,11524,11526],{"class":39,"line":362},[37,11505,6877],{"class":50},[37,11507,1552],{"class":54},[37,11509,11510],{"class":185}," \"全局常量c_g_a地址为： \"",[37,11512,1820],{"class":54},[37,11514,2027],{"class":50},[37,11516,533],{"class":54},[37,11518,138],{"class":50},[37,11520,869],{"class":54},[37,11522,11523],{"class":50},"c_g_a ",[37,11525,1552],{"class":54},[37,11527,9181],{"class":50},[37,11529,11530,11532,11534,11537,11539,11541,11543,11545,11547,11550,11552],{"class":39,"line":367},[37,11531,6877],{"class":50},[37,11533,1552],{"class":54},[37,11535,11536],{"class":185}," \"全局常量c_g_b地址为： \"",[37,11538,1820],{"class":54},[37,11540,2027],{"class":50},[37,11542,533],{"class":54},[37,11544,138],{"class":50},[37,11546,869],{"class":54},[37,11548,11549],{"class":50},"c_g_b ",[37,11551,1552],{"class":54},[37,11553,9181],{"class":50},[37,11555,11556],{"class":39,"line":373},[37,11557,2757],{"emptyLinePlaceholder":454},[37,11559,11560,11563,11565,11568,11570,11572],{"class":39,"line":392},[37,11561,11562],{"class":54},"    const",[37,11564,2739],{"class":54},[37,11566,11567],{"class":50}," c_l_a ",[37,11569,55],{"class":54},[37,11571,2395],{"class":61},[37,11573,1669],{"class":50},[37,11575,11576,11578,11580,11583,11585,11587],{"class":39,"line":398},[37,11577,11562],{"class":54},[37,11579,2739],{"class":54},[37,11581,11582],{"class":50}," c_l_b ",[37,11584,55],{"class":54},[37,11586,2395],{"class":61},[37,11588,1669],{"class":50},[37,11590,11591,11593,11595,11598,11600,11602,11604,11606,11608,11611,11613],{"class":39,"line":409},[37,11592,6877],{"class":50},[37,11594,1552],{"class":54},[37,11596,11597],{"class":185}," \"局部常量c_l_a地址为： \"",[37,11599,1820],{"class":54},[37,11601,2027],{"class":50},[37,11603,533],{"class":54},[37,11605,138],{"class":50},[37,11607,869],{"class":54},[37,11609,11610],{"class":50},"c_l_a ",[37,11612,1552],{"class":54},[37,11614,9181],{"class":50},[37,11616,11617,11619,11621,11624,11626,11628,11630,11632,11634,11637,11639],{"class":39,"line":415},[37,11618,6877],{"class":50},[37,11620,1552],{"class":54},[37,11622,11623],{"class":185}," \"局部常量c_l_b地址为： \"",[37,11625,1820],{"class":54},[37,11627,2027],{"class":50},[37,11629,533],{"class":54},[37,11631,138],{"class":50},[37,11633,869],{"class":54},[37,11635,11636],{"class":50},"c_l_b ",[37,11638,1552],{"class":54},[37,11640,9181],{"class":50},[37,11642,11643],{"class":39,"line":420},[37,11644,2757],{"emptyLinePlaceholder":454},[37,11646,11647,11649,11651,11653],{"class":39,"line":425},[37,11648,2660],{"class":2320},[37,11650,165],{"class":50},[37,11652,2665],{"class":185},[37,11654,3069],{"class":50},[37,11656,11657],{"class":39,"line":431},[37,11658,2757],{"emptyLinePlaceholder":454},[37,11660,11661,11663,11665],{"class":39,"line":436},[37,11662,4440],{"class":54},[37,11664,4443],{"class":61},[37,11666,1669],{"class":50},[37,11668,11669],{"class":39,"line":442},[37,11670,1941],{"class":50},[14,11672,11673],{},"总结：",[1515,11675,11676,11679,11682,11685],{},[484,11677,11678],{},"c++中程序运行前分为全局区和代码区",[484,11680,11681],{},"代码区特点是共享和只读",[484,11683,11684],{},"全局区中存放全局变量、静态变量、常量",[484,11686,11687],{},"常量区中存放const修饰的全局常量和字符串常量",[498,11689,11691],{"id":11690},"_512程序运行后","5.1.2程序运行后",[481,11693,11694],{},[484,11695,11696],{},"栈区：",[1515,11698,11699,11706],{},[484,11700,11701,11702,11705],{},"由编译器自动分配释放, 存放",[673,11703,11704],{},"函数的参数值,局部变量","等",[484,11707,11708,11709,11712],{},"注意事项：",[673,11710,11711],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[27,11714,11716],{"className":519,"code":11715,"language":521,"meta":32,"style":32},"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",[34,11717,11718,11729,11733,11748,11760,11764,11768,11776,11781,11796,11814,11831,11841,11849],{"__ignoreMap":32},[37,11719,11720,11722,11724,11727],{"class":39,"line":40},[37,11721,533],{"class":54},[37,11723,6866],{"class":54},[37,11725,11726],{"class":2320}," func",[37,11728,2333],{"class":50},[37,11730,11731],{"class":39,"line":47},[37,11732,1922],{"class":50},[37,11734,11735,11737,11739,11741,11743,11745],{"class":39,"line":104},[37,11736,2342],{"class":54},[37,11738,11210],{"class":50},[37,11740,55],{"class":54},[37,11742,2395],{"class":61},[37,11744,582],{"class":50},[37,11746,11747],{"class":43}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[37,11749,11750,11752,11754,11757],{"class":39,"line":113},[37,11751,4440],{"class":54},[37,11753,10925],{"class":54},[37,11755,11756],{"class":50},"a;",[37,11758,11759],{"class":43}," \u002F\u002F放回局部变量的地址\n",[37,11761,11762],{"class":39,"line":189},[37,11763,1941],{"class":50},[37,11765,11766],{"class":39,"line":195},[37,11767,2757],{"emptyLinePlaceholder":454},[37,11769,11770,11772,11774],{"class":39,"line":201},[37,11771,533],{"class":54},[37,11773,2330],{"class":2320},[37,11775,11194],{"class":50},[37,11777,11778],{"class":39,"line":207},[37,11779,11780],{"class":43},"    \u002F\u002F接受func的返回值\n",[37,11782,11783,11785,11787,11790,11792,11794],{"class":39,"line":213},[37,11784,2342],{"class":54},[37,11786,6866],{"class":54},[37,11788,11789],{"class":50},"p ",[37,11791,55],{"class":54},[37,11793,11726],{"class":2320},[37,11795,5984],{"class":50},[37,11797,11798,11800,11802,11804,11806,11808,11811],{"class":39,"line":218},[37,11799,6877],{"class":50},[37,11801,1552],{"class":54},[37,11803,6866],{"class":54},[37,11805,11789],{"class":50},[37,11807,1552],{"class":54},[37,11809,11810],{"class":50}," endl;",[37,11812,11813],{"class":43}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[37,11815,11816,11818,11820,11822,11824,11826,11828],{"class":39,"line":227},[37,11817,6877],{"class":50},[37,11819,1552],{"class":54},[37,11821,6866],{"class":54},[37,11823,11789],{"class":50},[37,11825,1552],{"class":54},[37,11827,11810],{"class":50},[37,11829,11830],{"class":43}," \u002F\u002F第二次这个数据不再保留\n",[37,11832,11833,11835,11837,11839],{"class":39,"line":232},[37,11834,2660],{"class":2320},[37,11836,165],{"class":50},[37,11838,2665],{"class":185},[37,11840,3069],{"class":50},[37,11842,11843,11845,11847],{"class":39,"line":238},[37,11844,4440],{"class":54},[37,11846,4443],{"class":61},[37,11848,1669],{"class":50},[37,11850,11851],{"class":39,"line":244},[37,11852,1941],{"class":50},[14,11854,11855],{},"输出结果：",[14,11857,11858],{},[1838,11859],{"alt":11860,"src":11861},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11863,11864],{},"总结：不要返回局部变量的地址",[481,11866,11867],{"start":47},[484,11868,11869],{},"堆区",[1515,11871,11872,11875],{},[484,11873,11874],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[484,11876,11877],{},"在c++中主要利用new在堆区开辟内存",[27,11879,11881],{"className":519,"code":11880,"language":521,"meta":32,"style":32},"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",[34,11882,11883,11898,11902,11907,11928,11935,11939,11947,11951,11956,11970,11982],{"__ignoreMap":32},[37,11884,11885,11887,11890,11893,11895],{"class":39,"line":40},[37,11886,533],{"class":54},[37,11888,11889],{"class":54},"  *",[37,11891,11892],{"class":2320},"func",[37,11894,2784],{"class":50},[37,11896,11897],{"class":43},"  \u002F\u002F函数返回指针\n",[37,11899,11900],{"class":39,"line":47},[37,11901,1922],{"class":50},[37,11903,11904],{"class":39,"line":104},[37,11905,11906],{"class":43},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[37,11908,11909,11911,11913,11915,11917,11920,11922,11924,11926],{"class":39,"line":113},[37,11910,4497],{"class":54},[37,11912,6866],{"class":54},[37,11914,14],{"class":50},[37,11916,55],{"class":54},[37,11918,11919],{"class":54}," new",[37,11921,2739],{"class":54},[37,11923,165],{"class":50},[37,11925,98],{"class":61},[37,11927,3069],{"class":50},[37,11929,11930,11932],{"class":39,"line":189},[37,11931,4731],{"class":54},[37,11933,11934],{"class":50}," p;\n",[37,11936,11937],{"class":39,"line":195},[37,11938,1941],{"class":50},[37,11940,11941,11943,11945],{"class":39,"line":201},[37,11942,533],{"class":54},[37,11944,2330],{"class":2320},[37,11946,2333],{"class":50},[37,11948,11949],{"class":39,"line":207},[37,11950,1922],{"class":50},[37,11952,11953],{"class":39,"line":213},[37,11954,11955],{"class":43},"    \u002F\u002F在堆区开辟数据\n",[37,11957,11958,11960,11962,11964,11966,11968],{"class":39,"line":218},[37,11959,2342],{"class":54},[37,11961,6866],{"class":54},[37,11963,14],{"class":50},[37,11965,55],{"class":54},[37,11967,11892],{"class":2320},[37,11969,5984],{"class":50},[37,11971,11972,11974,11976,11978,11980],{"class":39,"line":227},[37,11973,1927],{"class":50},[37,11975,6767],{"class":54},[37,11977,14],{"class":50},[37,11979,1552],{"class":54},[37,11981,1574],{"class":50},[37,11983,11984],{"class":39,"line":232},[37,11985,1941],{"class":50},[14,11987,11988],{},"图片展示：",[14,11990,11991],{},[1838,11992],{"alt":11860,"src":11993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11995,11996],{},"堆区内存由程序员管生死！！！",[481,11998,11999],{"start":104},[484,12000,12001],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,12003,12004],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,12006,12007,12008],{},"​语法：",[34,12009,12010],{}," new 数据类型",[14,12012,12013],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[27,12015,12017],{"className":519,"code":12016,"language":521,"meta":32,"style":32},"\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",[34,12018,12019,12024,12034,12038,12043,12048,12070,12074,12082,12086,12100,12112,12124,12136,12141,12146,12157,12161,12166,12174,12178,12183,12205,12231,12235,12253,12257,12283,12287,12299,12303,12308,12313,12321,12325,12329,12337,12341,12347,12353],{"__ignoreMap":32},[37,12020,12021],{"class":39,"line":40},[37,12022,12023],{"class":43},"\u002F\u002F1.new的基本语法\n",[37,12025,12026,12028,12030,12032],{"class":39,"line":47},[37,12027,533],{"class":54},[37,12029,6866],{"class":54},[37,12031,11892],{"class":2320},[37,12033,2333],{"class":50},[37,12035,12036],{"class":39,"line":104},[37,12037,1922],{"class":50},[37,12039,12040],{"class":39,"line":113},[37,12041,12042],{"class":43},"    \u002F\u002F在堆区创建整型数据\n",[37,12044,12045],{"class":39,"line":189},[37,12046,12047],{"class":43},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[37,12049,12050,12052,12054,12056,12059,12061,12063,12065,12067],{"class":39,"line":195},[37,12051,2342],{"class":54},[37,12053,6866],{"class":54},[37,12055,14],{"class":50},[37,12057,12058],{"class":54},"=new",[37,12060,2739],{"class":54},[37,12062,165],{"class":50},[37,12064,98],{"class":61},[37,12066,6314],{"class":50},[37,12068,12069],{"class":43},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[37,12071,12072],{"class":39,"line":201},[37,12073,1941],{"class":50},[37,12075,12076,12078,12080],{"class":39,"line":207},[37,12077,5712],{"class":54},[37,12079,5936],{"class":2320},[37,12081,2333],{"class":50},[37,12083,12084],{"class":39,"line":213},[37,12085,1922],{"class":50},[37,12087,12088,12090,12092,12094,12096,12098],{"class":39,"line":218},[37,12089,2342],{"class":54},[37,12091,6866],{"class":54},[37,12093,14],{"class":50},[37,12095,55],{"class":54},[37,12097,11892],{"class":2320},[37,12099,5984],{"class":50},[37,12101,12102,12104,12106,12108,12110],{"class":39,"line":227},[37,12103,1927],{"class":50},[37,12105,6767],{"class":54},[37,12107,14],{"class":50},[37,12109,1552],{"class":54},[37,12111,1574],{"class":50},[37,12113,12114,12116,12118,12120,12122],{"class":39,"line":232},[37,12115,1927],{"class":50},[37,12117,6767],{"class":54},[37,12119,14],{"class":50},[37,12121,1552],{"class":54},[37,12123,1574],{"class":50},[37,12125,12126,12128,12130,12132,12134],{"class":39,"line":238},[37,12127,1927],{"class":50},[37,12129,6767],{"class":54},[37,12131,14],{"class":50},[37,12133,1552],{"class":54},[37,12135,1574],{"class":50},[37,12137,12138],{"class":39,"line":244},[37,12139,12140],{"class":43},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[37,12142,12143],{"class":39,"line":250},[37,12144,12145],{"class":43},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[37,12147,12148,12151,12154],{"class":39,"line":256},[37,12149,12150],{"class":54},"    delete",[37,12152,12153],{"class":50}," p;",[37,12155,12156],{"class":43},"\u002F\u002F删除这块地址\n",[37,12158,12159],{"class":39,"line":261},[37,12160,1941],{"class":50},[37,12162,12163],{"class":39,"line":267},[37,12164,12165],{"class":43},"\u002F\u002F2.在堆区利用new开辟数组\n",[37,12167,12168,12170,12172],{"class":39,"line":283},[37,12169,5712],{"class":54},[37,12171,6005],{"class":2320},[37,12173,2333],{"class":50},[37,12175,12176],{"class":39,"line":288},[37,12177,1922],{"class":50},[37,12179,12180],{"class":39,"line":294},[37,12181,12182],{"class":43},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[37,12184,12185,12187,12189,12191,12193,12195,12197,12199,12202],{"class":39,"line":300},[37,12186,2342],{"class":54},[37,12188,6866],{"class":54},[37,12190,4230],{"class":50},[37,12192,12058],{"class":54},[37,12194,2739],{"class":54},[37,12196,1399],{"class":50},[37,12198,98],{"class":61},[37,12200,12201],{"class":50},"];",[37,12203,12204],{"class":43},"\u002F\u002F10代表数组有10个元素\n",[37,12206,12207,12209,12211,12213,12215,12217,12219,12221,12223,12225,12227,12229],{"class":39,"line":306},[37,12208,3551],{"class":54},[37,12210,2027],{"class":50},[37,12212,533],{"class":54},[37,12214,3382],{"class":50},[37,12216,55],{"class":54},[37,12218,135],{"class":61},[37,12220,3389],{"class":50},[37,12222,1418],{"class":54},[37,12224,98],{"class":61},[37,12226,3389],{"class":50},[37,12228,2649],{"class":54},[37,12230,280],{"class":50},[37,12232,12233],{"class":39,"line":312},[37,12234,2387],{"class":50},[37,12236,12237,12240,12242,12244,12246,12248,12250],{"class":39,"line":317},[37,12238,12239],{"class":50},"        arr[i]",[37,12241,55],{"class":54},[37,12243,954],{"class":50},[37,12245,993],{"class":54},[37,12247,154],{"class":61},[37,12249,582],{"class":50},[37,12251,12252],{"class":43},"\u002F\u002F给10个元素赋值100～109\n",[37,12254,12255],{"class":39,"line":323},[37,12256,2544],{"class":50},[37,12258,12259,12261,12263,12265,12267,12269,12271,12273,12275,12277,12279,12281],{"class":39,"line":337},[37,12260,3551],{"class":54},[37,12262,2027],{"class":50},[37,12264,533],{"class":54},[37,12266,3382],{"class":50},[37,12268,55],{"class":54},[37,12270,135],{"class":61},[37,12272,3389],{"class":50},[37,12274,1418],{"class":54},[37,12276,98],{"class":61},[37,12278,3389],{"class":50},[37,12280,2649],{"class":54},[37,12282,280],{"class":50},[37,12284,12285],{"class":39,"line":342},[37,12286,2387],{"class":50},[37,12288,12289,12291,12293,12295,12297],{"class":39,"line":347},[37,12290,3801],{"class":50},[37,12292,1552],{"class":54},[37,12294,4704],{"class":50},[37,12296,1552],{"class":54},[37,12298,1574],{"class":50},[37,12300,12301],{"class":39,"line":352},[37,12302,2544],{"class":50},[37,12304,12305],{"class":39,"line":357},[37,12306,12307],{"class":43},"    \u002F\u002F释放堆区数组\n",[37,12309,12310],{"class":39,"line":362},[37,12311,12312],{"class":43},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[37,12314,12315,12318],{"class":39,"line":367},[37,12316,12317],{"class":54},"    delete[]",[37,12319,12320],{"class":50}," arr;\n",[37,12322,12323],{"class":39,"line":373},[37,12324,1941],{"class":50},[37,12326,12327],{"class":39,"line":392},[37,12328,2757],{"emptyLinePlaceholder":454},[37,12330,12331,12333,12335],{"class":39,"line":398},[37,12332,533],{"class":54},[37,12334,2330],{"class":2320},[37,12336,2333],{"class":50},[37,12338,12339],{"class":39,"line":409},[37,12340,1922],{"class":50},[37,12342,12343,12345],{"class":39,"line":415},[37,12344,5981],{"class":2320},[37,12346,5984],{"class":50},[37,12348,12349,12351],{"class":39,"line":420},[37,12350,6050],{"class":2320},[37,12352,5984],{"class":50},[37,12354,12355],{"class":39,"line":425},[37,12356,1941],{"class":50},[446,12358,12359],{},"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":32,"searchDepth":47,"depth":47,"links":12361},[12362],{"id":11030,"depth":47,"text":11031,"children":12363},[12364,12365],{"id":11062,"depth":104,"text":11063},{"id":11690,"depth":104,"text":11691},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11022,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12372,"title":12373,"body":12374,"description":32,"extension":452,"meta":13855,"navigation":454,"path":13856,"seo":13857,"stem":13858,"__hash__":13859},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12375,"toc":13847},[12376,12379,12383,12386,12389,12558,12562,12567,12584,12589,12741,12745,12748,12751,13145,13149,13152,13157,13160,13472,13476,13482,13642,13644,13652,13656,13659,13666,13844],[10,12377,12373],{"id":12378},"_6引用",[469,12380,12382],{"id":12381},"_61引用基本用法","6.1引用基本用法",[14,12384,12385],{},"引用的本质：给变量起别名",[14,12387,12388],{},"语法：数据类型 &别名=原名",[27,12390,12392],{"className":519,"code":12391,"language":521,"meta":32,"style":32},"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",[34,12393,12394,12402,12406,12418,12430,12434,12453,12472,12476,12487,12491,12510,12528,12532,12542,12546,12554],{"__ignoreMap":32},[37,12395,12396,12398,12400],{"class":39,"line":40},[37,12397,533],{"class":54},[37,12399,2330],{"class":2320},[37,12401,11194],{"class":50},[37,12403,12404],{"class":39,"line":47},[37,12405,2757],{"emptyLinePlaceholder":454},[37,12407,12408,12410,12412,12414,12416],{"class":39,"line":104},[37,12409,2342],{"class":54},[37,12411,11210],{"class":50},[37,12413,55],{"class":54},[37,12415,2395],{"class":61},[37,12417,1669],{"class":50},[37,12419,12420,12422,12424,12426,12428],{"class":39,"line":113},[37,12421,2342],{"class":54},[37,12423,10925],{"class":54},[37,12425,11286],{"class":50},[37,12427,55],{"class":54},[37,12429,1808],{"class":50},[37,12431,12432],{"class":39,"line":189},[37,12433,2757],{"emptyLinePlaceholder":454},[37,12435,12436,12438,12440,12443,12445,12447,12449,12451],{"class":39,"line":195},[37,12437,6877],{"class":50},[37,12439,1552],{"class":54},[37,12441,12442],{"class":185}," \"a = \"",[37,12444,1820],{"class":54},[37,12446,11210],{"class":50},[37,12448,1552],{"class":54},[37,12450,11810],{"class":50},[37,12452,7616],{"class":43},[37,12454,12455,12457,12459,12462,12464,12466,12468,12470],{"class":39,"line":201},[37,12456,6877],{"class":50},[37,12458,1552],{"class":54},[37,12460,12461],{"class":185}," \"b = \"",[37,12463,1820],{"class":54},[37,12465,11223],{"class":50},[37,12467,1552],{"class":54},[37,12469,11810],{"class":50},[37,12471,7616],{"class":43},[37,12473,12474],{"class":39,"line":207},[37,12475,2757],{"emptyLinePlaceholder":454},[37,12477,12478,12481,12483,12485],{"class":39,"line":213},[37,12479,12480],{"class":50},"    b ",[37,12482,55],{"class":54},[37,12484,6102],{"class":61},[37,12486,1669],{"class":50},[37,12488,12489],{"class":39,"line":218},[37,12490,2757],{"emptyLinePlaceholder":454},[37,12492,12493,12495,12497,12499,12501,12503,12505,12507],{"class":39,"line":227},[37,12494,6877],{"class":50},[37,12496,1552],{"class":54},[37,12498,12442],{"class":185},[37,12500,1820],{"class":54},[37,12502,11210],{"class":50},[37,12504,1552],{"class":54},[37,12506,11810],{"class":50},[37,12508,12509],{"class":43},"\u002F\u002F100\n",[37,12511,12512,12514,12516,12518,12520,12522,12524,12526],{"class":39,"line":232},[37,12513,6877],{"class":50},[37,12515,1552],{"class":54},[37,12517,12461],{"class":185},[37,12519,1820],{"class":54},[37,12521,11223],{"class":50},[37,12523,1552],{"class":54},[37,12525,11810],{"class":50},[37,12527,12509],{"class":43},[37,12529,12530],{"class":39,"line":238},[37,12531,2757],{"emptyLinePlaceholder":454},[37,12533,12534,12536,12538,12540],{"class":39,"line":244},[37,12535,2660],{"class":2320},[37,12537,165],{"class":50},[37,12539,2665],{"class":185},[37,12541,3069],{"class":50},[37,12543,12544],{"class":39,"line":250},[37,12545,2757],{"emptyLinePlaceholder":454},[37,12547,12548,12550,12552],{"class":39,"line":256},[37,12549,4440],{"class":54},[37,12551,4443],{"class":61},[37,12553,1669],{"class":50},[37,12555,12556],{"class":39,"line":261},[37,12557,1941],{"class":50},[469,12559,12561],{"id":12560},"_62引用的注意事项","6.2引用的注意事项",[481,12563,12564],{},[484,12565,12566],{},"引用必须要初始化",[27,12568,12570],{"className":519,"code":12569,"language":521,"meta":32,"style":32},"int &b;\u002F\u002F非常错误！\n",[34,12571,12572],{"__ignoreMap":32},[37,12573,12574,12576,12578,12581],{"class":39,"line":40},[37,12575,533],{"class":54},[37,12577,10925],{"class":54},[37,12579,12580],{"class":50},"b;",[37,12582,12583],{"class":43},"\u002F\u002F非常错误！\n",[481,12585,12586],{"start":47},[484,12587,12588],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[27,12590,12592],{"className":519,"code":12591,"language":521,"meta":32,"style":32},"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",[34,12593,12594,12602,12614,12626,12634,12650,12663,12681,12699,12719,12729,12737],{"__ignoreMap":32},[37,12595,12596,12598,12600],{"class":39,"line":40},[37,12597,533],{"class":54},[37,12599,2330],{"class":2320},[37,12601,11194],{"class":50},[37,12603,12604,12606,12608,12610,12612],{"class":39,"line":47},[37,12605,2342],{"class":54},[37,12607,11210],{"class":50},[37,12609,55],{"class":54},[37,12611,2395],{"class":61},[37,12613,1669],{"class":50},[37,12615,12616,12618,12620,12622,12624],{"class":39,"line":104},[37,12617,2342],{"class":54},[37,12619,11223],{"class":50},[37,12621,55],{"class":54},[37,12623,9291],{"class":61},[37,12625,1669],{"class":50},[37,12627,12628,12631],{"class":39,"line":113},[37,12629,12630],{"class":43},"    \u002F\u002Fint &c;",[37,12632,12633],{"class":43}," \u002F\u002F错误，引用必须初始化\n",[37,12635,12636,12638,12640,12642,12644,12647],{"class":39,"line":189},[37,12637,2342],{"class":54},[37,12639,10925],{"class":54},[37,12641,3296],{"class":50},[37,12643,55],{"class":54},[37,12645,12646],{"class":50}," a;",[37,12648,12649],{"class":43}," \u002F\u002F一旦初始化后，就不可以更改\n",[37,12651,12652,12655,12657,12660],{"class":39,"line":195},[37,12653,12654],{"class":50},"    c ",[37,12656,55],{"class":54},[37,12658,12659],{"class":50}," b;",[37,12661,12662],{"class":43}," \u002F\u002F这是赋值操作，不是更改引用\n",[37,12664,12665,12667,12669,12671,12673,12675,12677,12679],{"class":39,"line":201},[37,12666,6877],{"class":50},[37,12668,1552],{"class":54},[37,12670,12442],{"class":185},[37,12672,1820],{"class":54},[37,12674,11210],{"class":50},[37,12676,1552],{"class":54},[37,12678,11810],{"class":50},[37,12680,7601],{"class":43},[37,12682,12683,12685,12687,12689,12691,12693,12695,12697],{"class":39,"line":207},[37,12684,6877],{"class":50},[37,12686,1552],{"class":54},[37,12688,12461],{"class":185},[37,12690,1820],{"class":54},[37,12692,11223],{"class":50},[37,12694,1552],{"class":54},[37,12696,11810],{"class":50},[37,12698,7601],{"class":43},[37,12700,12701,12703,12705,12708,12710,12713,12715,12717],{"class":39,"line":213},[37,12702,6877],{"class":50},[37,12704,1552],{"class":54},[37,12706,12707],{"class":185}," \"c = \"",[37,12709,1820],{"class":54},[37,12711,12712],{"class":50}," c ",[37,12714,1552],{"class":54},[37,12716,11810],{"class":50},[37,12718,7601],{"class":43},[37,12720,12721,12723,12725,12727],{"class":39,"line":218},[37,12722,2660],{"class":2320},[37,12724,165],{"class":50},[37,12726,2665],{"class":185},[37,12728,3069],{"class":50},[37,12730,12731,12733,12735],{"class":39,"line":227},[37,12732,4440],{"class":54},[37,12734,4443],{"class":61},[37,12736,1669],{"class":50},[37,12738,12739],{"class":39,"line":232},[37,12740,1941],{"class":50},[469,12742,12744],{"id":12743},"_63引用做函数参数","6.3引用做函数参数",[14,12746,12747],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12749,12750],{},"优点：可以简化指针修改实参",[27,12752,12754],{"className":519,"code":12753,"language":521,"meta":32,"style":32},"\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",[34,12755,12756,12761,12784,12795,12805,12814,12818,12822,12827,12849,12861,12873,12883,12887,12891,12896,12918,12928,12936,12944,12948,12952,12960,12964,12976,12988,12992,13003,13029,13033,13053,13077,13081,13091,13115,13119,13129,13133,13141],{"__ignoreMap":32},[37,12757,12758],{"class":39,"line":40},[37,12759,12760],{"class":43},"\u002F\u002F1. 值传递\n",[37,12762,12763,12765,12768,12770,12772,12774,12777,12779,12781],{"class":39,"line":47},[37,12764,5712],{"class":54},[37,12766,12767],{"class":2320}," mySwap01",[37,12769,165],{"class":50},[37,12771,533],{"class":54},[37,12773,1774],{"class":159},[37,12775,12776],{"class":50},", ",[37,12778,533],{"class":54},[37,12780,3183],{"class":159},[37,12782,12783],{"class":50},") {\n",[37,12785,12786,12788,12791,12793],{"class":39,"line":104},[37,12787,2342],{"class":54},[37,12789,12790],{"class":50}," temp ",[37,12792,55],{"class":54},[37,12794,1808],{"class":50},[37,12796,12797,12800,12802],{"class":39,"line":113},[37,12798,12799],{"class":50},"    a ",[37,12801,55],{"class":54},[37,12803,12804],{"class":50}," b;\n",[37,12806,12807,12809,12811],{"class":39,"line":189},[37,12808,12480],{"class":50},[37,12810,55],{"class":54},[37,12812,12813],{"class":50}," temp;\n",[37,12815,12816],{"class":39,"line":195},[37,12817,1941],{"class":50},[37,12819,12820],{"class":39,"line":201},[37,12821,2757],{"emptyLinePlaceholder":454},[37,12823,12824],{"class":39,"line":207},[37,12825,12826],{"class":43},"\u002F\u002F2. 地址传递\n",[37,12828,12829,12831,12834,12836,12839,12841,12843,12845,12847],{"class":39,"line":213},[37,12830,5712],{"class":54},[37,12832,12833],{"class":2320}," mySwap02",[37,12835,165],{"class":50},[37,12837,12838],{"class":54},"int*",[37,12840,1774],{"class":159},[37,12842,12776],{"class":50},[37,12844,12838],{"class":54},[37,12846,3183],{"class":159},[37,12848,12783],{"class":50},[37,12850,12851,12853,12855,12857,12859],{"class":39,"line":218},[37,12852,2342],{"class":54},[37,12854,12790],{"class":50},[37,12856,55],{"class":54},[37,12858,6866],{"class":54},[37,12860,6545],{"class":50},[37,12862,12863,12865,12867,12869,12871],{"class":39,"line":227},[37,12864,6751],{"class":54},[37,12866,11260],{"class":50},[37,12868,55],{"class":54},[37,12870,6866],{"class":54},[37,12872,6417],{"class":50},[37,12874,12875,12877,12879,12881],{"class":39,"line":232},[37,12876,6751],{"class":54},[37,12878,11286],{"class":50},[37,12880,55],{"class":54},[37,12882,12813],{"class":50},[37,12884,12885],{"class":39,"line":238},[37,12886,1941],{"class":50},[37,12888,12889],{"class":39,"line":244},[37,12890,2757],{"emptyLinePlaceholder":454},[37,12892,12893],{"class":39,"line":250},[37,12894,12895],{"class":43},"\u002F\u002F3. 引用传递\n",[37,12897,12898,12900,12903,12905,12908,12910,12912,12914,12916],{"class":39,"line":256},[37,12899,5712],{"class":54},[37,12901,12902],{"class":2320}," mySwap03",[37,12904,165],{"class":50},[37,12906,12907],{"class":54},"int&",[37,12909,1774],{"class":159},[37,12911,12776],{"class":50},[37,12913,12907],{"class":54},[37,12915,3183],{"class":159},[37,12917,12783],{"class":50},[37,12919,12920,12922,12924,12926],{"class":39,"line":261},[37,12921,2342],{"class":54},[37,12923,12790],{"class":50},[37,12925,55],{"class":54},[37,12927,1808],{"class":50},[37,12929,12930,12932,12934],{"class":39,"line":267},[37,12931,12799],{"class":50},[37,12933,55],{"class":54},[37,12935,12804],{"class":50},[37,12937,12938,12940,12942],{"class":39,"line":283},[37,12939,12480],{"class":50},[37,12941,55],{"class":54},[37,12943,12813],{"class":50},[37,12945,12946],{"class":39,"line":288},[37,12947,1941],{"class":50},[37,12949,12950],{"class":39,"line":294},[37,12951,2757],{"emptyLinePlaceholder":454},[37,12953,12954,12956,12958],{"class":39,"line":300},[37,12955,533],{"class":54},[37,12957,2330],{"class":2320},[37,12959,11194],{"class":50},[37,12961,12962],{"class":39,"line":306},[37,12963,2757],{"emptyLinePlaceholder":454},[37,12965,12966,12968,12970,12972,12974],{"class":39,"line":312},[37,12967,2342],{"class":54},[37,12969,11210],{"class":50},[37,12971,55],{"class":54},[37,12973,2395],{"class":61},[37,12975,1669],{"class":50},[37,12977,12978,12980,12982,12984,12986],{"class":39,"line":317},[37,12979,2342],{"class":54},[37,12981,11223],{"class":50},[37,12983,55],{"class":54},[37,12985,9291],{"class":61},[37,12987,1669],{"class":50},[37,12989,12990],{"class":39,"line":323},[37,12991,2757],{"emptyLinePlaceholder":454},[37,12993,12994,12997,13000],{"class":39,"line":337},[37,12995,12996],{"class":2320},"    mySwap01",[37,12998,12999],{"class":50},"(a, b);",[37,13001,13002],{"class":43},"\u002F\u002F值传递，形参不会修饰实参\n",[37,13004,13005,13007,13009,13012,13014,13016,13018,13021,13023,13025,13027],{"class":39,"line":342},[37,13006,6877],{"class":50},[37,13008,1552],{"class":54},[37,13010,13011],{"class":185}," \"a:\"",[37,13013,1820],{"class":54},[37,13015,11210],{"class":50},[37,13017,1552],{"class":54},[37,13019,13020],{"class":185}," \" b:\"",[37,13022,1820],{"class":54},[37,13024,11223],{"class":50},[37,13026,1552],{"class":54},[37,13028,9181],{"class":50},[37,13030,13031],{"class":39,"line":347},[37,13032,2757],{"emptyLinePlaceholder":454},[37,13034,13035,13038,13040,13042,13045,13047,13050],{"class":39,"line":352},[37,13036,13037],{"class":2320},"    mySwap02",[37,13039,165],{"class":50},[37,13041,869],{"class":54},[37,13043,13044],{"class":50},"a, ",[37,13046,869],{"class":54},[37,13048,13049],{"class":50},"b);",[37,13051,13052],{"class":43},"\u002F\u002F地址传递，形参会修饰实参\n",[37,13054,13055,13057,13059,13061,13063,13065,13067,13069,13071,13073,13075],{"class":39,"line":357},[37,13056,6877],{"class":50},[37,13058,1552],{"class":54},[37,13060,13011],{"class":185},[37,13062,1820],{"class":54},[37,13064,11210],{"class":50},[37,13066,1552],{"class":54},[37,13068,13020],{"class":185},[37,13070,1820],{"class":54},[37,13072,11223],{"class":50},[37,13074,1552],{"class":54},[37,13076,9181],{"class":50},[37,13078,13079],{"class":39,"line":362},[37,13080,2757],{"emptyLinePlaceholder":454},[37,13082,13083,13086,13088],{"class":39,"line":367},[37,13084,13085],{"class":2320},"    mySwap03",[37,13087,12999],{"class":50},[37,13089,13090],{"class":43},"\u002F\u002F引用传递，形参会修饰实参\n",[37,13092,13093,13095,13097,13099,13101,13103,13105,13107,13109,13111,13113],{"class":39,"line":373},[37,13094,6877],{"class":50},[37,13096,1552],{"class":54},[37,13098,13011],{"class":185},[37,13100,1820],{"class":54},[37,13102,11210],{"class":50},[37,13104,1552],{"class":54},[37,13106,13020],{"class":185},[37,13108,1820],{"class":54},[37,13110,11223],{"class":50},[37,13112,1552],{"class":54},[37,13114,9181],{"class":50},[37,13116,13117],{"class":39,"line":392},[37,13118,2757],{"emptyLinePlaceholder":454},[37,13120,13121,13123,13125,13127],{"class":39,"line":398},[37,13122,2660],{"class":2320},[37,13124,165],{"class":50},[37,13126,2665],{"class":185},[37,13128,3069],{"class":50},[37,13130,13131],{"class":39,"line":409},[37,13132,2757],{"emptyLinePlaceholder":454},[37,13134,13135,13137,13139],{"class":39,"line":415},[37,13136,4440],{"class":54},[37,13138,4443],{"class":61},[37,13140,1669],{"class":50},[37,13142,13143],{"class":39,"line":420},[37,13144,1941],{"class":50},[469,13146,13148],{"id":13147},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,13150,13151],{},"作用：引用是可以作为函数的返回值存在的",[14,13153,9366,13154],{},[673,13155,13156],{},"不要返回局部变量引用",[14,13158,13159],{},"用法：函数调用作为左值",[27,13161,13163],{"className":10282,"code":13162,"language":10284,"meta":32,"style":32},"\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",[34,13164,13165,13170,13178,13193,13199,13203,13207,13212,13220,13237,13243,13247,13251,13259,13263,13268,13282,13302,13321,13325,13330,13343,13363,13381,13385,13401,13405,13424,13442,13446,13456,13460,13468],{"__ignoreMap":32},[37,13166,13167],{"class":39,"line":40},[37,13168,13169],{"class":43},"\u002F\u002F返回局部变量引用\n",[37,13171,13172,13174,13176],{"class":39,"line":47},[37,13173,12907],{"class":54},[37,13175,5936],{"class":2320},[37,13177,11194],{"class":50},[37,13179,13180,13182,13184,13186,13188,13190],{"class":39,"line":104},[37,13181,2342],{"class":54},[37,13183,11210],{"class":50},[37,13185,55],{"class":54},[37,13187,2395],{"class":61},[37,13189,582],{"class":50},[37,13191,13192],{"class":43}," \u002F\u002F局部变量\n",[37,13194,13195,13197],{"class":39,"line":113},[37,13196,4440],{"class":54},[37,13198,1808],{"class":50},[37,13200,13201],{"class":39,"line":189},[37,13202,1941],{"class":50},[37,13204,13205],{"class":39,"line":195},[37,13206,2757],{"emptyLinePlaceholder":454},[37,13208,13209],{"class":39,"line":201},[37,13210,13211],{"class":43},"\u002F\u002F返回静态变量引用\n",[37,13213,13214,13216,13218],{"class":39,"line":207},[37,13215,12907],{"class":54},[37,13217,6005],{"class":2320},[37,13219,11194],{"class":50},[37,13221,13222,13224,13226,13228,13230,13232,13234],{"class":39,"line":213},[37,13223,11361],{"class":54},[37,13225,2739],{"class":54},[37,13227,11210],{"class":50},[37,13229,55],{"class":54},[37,13231,9291],{"class":61},[37,13233,582],{"class":50},[37,13235,13236],{"class":43},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[37,13238,13239,13241],{"class":39,"line":218},[37,13240,4440],{"class":54},[37,13242,1808],{"class":50},[37,13244,13245],{"class":39,"line":227},[37,13246,1941],{"class":50},[37,13248,13249],{"class":39,"line":232},[37,13250,2757],{"emptyLinePlaceholder":454},[37,13252,13253,13255,13257],{"class":39,"line":238},[37,13254,533],{"class":54},[37,13256,2330],{"class":2320},[37,13258,11194],{"class":50},[37,13260,13261],{"class":39,"line":244},[37,13262,2757],{"emptyLinePlaceholder":454},[37,13264,13265],{"class":39,"line":250},[37,13266,13267],{"class":43},"    \u002F\u002F不能返回局部变量的引用\n",[37,13269,13270,13273,13276,13278,13280],{"class":39,"line":256},[37,13271,13272],{"class":54},"    int&",[37,13274,13275],{"class":50}," ref ",[37,13277,55],{"class":54},[37,13279,5936],{"class":2320},[37,13281,5984],{"class":50},[37,13283,13284,13286,13288,13291,13293,13295,13297,13299],{"class":39,"line":261},[37,13285,6877],{"class":50},[37,13287,1552],{"class":54},[37,13289,13290],{"class":185}," \"ref = \"",[37,13292,1820],{"class":54},[37,13294,13275],{"class":50},[37,13296,1552],{"class":54},[37,13298,11810],{"class":50},[37,13300,13301],{"class":43},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[37,13303,13304,13306,13308,13310,13312,13314,13316,13318],{"class":39,"line":267},[37,13305,6877],{"class":50},[37,13307,1552],{"class":54},[37,13309,13290],{"class":185},[37,13311,1820],{"class":54},[37,13313,13275],{"class":50},[37,13315,1552],{"class":54},[37,13317,11810],{"class":50},[37,13319,13320],{"class":43},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[37,13322,13323],{"class":39,"line":283},[37,13324,2757],{"emptyLinePlaceholder":454},[37,13326,13327],{"class":39,"line":288},[37,13328,13329],{"class":43},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[37,13331,13332,13334,13337,13339,13341],{"class":39,"line":294},[37,13333,13272],{"class":54},[37,13335,13336],{"class":50}," ref2 ",[37,13338,55],{"class":54},[37,13340,6005],{"class":2320},[37,13342,5984],{"class":50},[37,13344,13345,13347,13349,13352,13354,13356,13358,13360],{"class":39,"line":300},[37,13346,6877],{"class":50},[37,13348,1552],{"class":54},[37,13350,13351],{"class":185}," \"ref2 = \"",[37,13353,1820],{"class":54},[37,13355,13336],{"class":50},[37,13357,1552],{"class":54},[37,13359,11810],{"class":50},[37,13361,13362],{"class":43}," \u002F\u002F20\n",[37,13364,13365,13367,13369,13371,13373,13375,13377,13379],{"class":39,"line":306},[37,13366,6877],{"class":50},[37,13368,1552],{"class":54},[37,13370,13351],{"class":185},[37,13372,1820],{"class":54},[37,13374,13336],{"class":50},[37,13376,1552],{"class":54},[37,13378,11810],{"class":50},[37,13380,13362],{"class":43},[37,13382,13383],{"class":39,"line":312},[37,13384,2757],{"emptyLinePlaceholder":454},[37,13386,13387,13389,13392,13394,13396,13398],{"class":39,"line":317},[37,13388,6050],{"class":2320},[37,13390,13391],{"class":50},"() ",[37,13393,55],{"class":54},[37,13395,3349],{"class":61},[37,13397,582],{"class":50},[37,13399,13400],{"class":43},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[37,13402,13403],{"class":39,"line":323},[37,13404,2757],{"emptyLinePlaceholder":454},[37,13406,13407,13409,13411,13413,13415,13417,13419,13421],{"class":39,"line":337},[37,13408,6877],{"class":50},[37,13410,1552],{"class":54},[37,13412,13351],{"class":185},[37,13414,1820],{"class":54},[37,13416,13336],{"class":50},[37,13418,1552],{"class":54},[37,13420,11810],{"class":50},[37,13422,13423],{"class":43}," \u002F\u002F1000\n",[37,13425,13426,13428,13430,13432,13434,13436,13438,13440],{"class":39,"line":342},[37,13427,6877],{"class":50},[37,13429,1552],{"class":54},[37,13431,13351],{"class":185},[37,13433,1820],{"class":54},[37,13435,13336],{"class":50},[37,13437,1552],{"class":54},[37,13439,11810],{"class":50},[37,13441,13423],{"class":43},[37,13443,13444],{"class":39,"line":347},[37,13445,2757],{"emptyLinePlaceholder":454},[37,13447,13448,13450,13452,13454],{"class":39,"line":352},[37,13449,2660],{"class":2320},[37,13451,165],{"class":50},[37,13453,2665],{"class":185},[37,13455,3069],{"class":50},[37,13457,13458],{"class":39,"line":357},[37,13459,2757],{"emptyLinePlaceholder":454},[37,13461,13462,13464,13466],{"class":39,"line":362},[37,13463,4440],{"class":54},[37,13465,4443],{"class":61},[37,13467,1669],{"class":50},[37,13469,13470],{"class":39,"line":367},[37,13471,1941],{"class":50},[469,13473,13475],{"id":13474},"_65引用的本质","6.5引用的本质",[14,13477,13478,13479],{},"本质：",[673,13480,13481],{},"引用的本质在c++内部实现是一个指针常量.",[27,13483,13485],{"className":519,"code":13484,"language":521,"meta":32,"style":32},"\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",[34,13486,13487,13492,13508,13522,13526,13535,13547,13552,13557,13568,13581,13585,13601,13618,13622,13630,13638],{"__ignoreMap":32},[37,13488,13489],{"class":39,"line":40},[37,13490,13491],{"class":43},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[37,13493,13494,13496,13498,13500,13502,13505],{"class":39,"line":47},[37,13495,5712],{"class":54},[37,13497,11726],{"class":2320},[37,13499,165],{"class":50},[37,13501,12907],{"class":54},[37,13503,13504],{"class":159}," ref",[37,13506,13507],{"class":50},"){\n",[37,13509,13510,13513,13515,13517,13519],{"class":39,"line":104},[37,13511,13512],{"class":50},"    ref ",[37,13514,55],{"class":54},[37,13516,6102],{"class":61},[37,13518,582],{"class":50},[37,13520,13521],{"class":43}," \u002F\u002F ref是引用，转换为*ref = 100\n",[37,13523,13524],{"class":39,"line":113},[37,13525,1941],{"class":50},[37,13527,13528,13530,13532],{"class":39,"line":189},[37,13529,533],{"class":54},[37,13531,2330],{"class":2320},[37,13533,13534],{"class":50},"(){\n",[37,13536,13537,13539,13541,13543,13545],{"class":39,"line":195},[37,13538,2342],{"class":54},[37,13540,11210],{"class":50},[37,13542,55],{"class":54},[37,13544,2395],{"class":61},[37,13546,1669],{"class":50},[37,13548,13549],{"class":39,"line":201},[37,13550,13551],{"class":50},"    \n",[37,13553,13554],{"class":39,"line":207},[37,13555,13556],{"class":43},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[37,13558,13559,13561,13563,13565],{"class":39,"line":213},[37,13560,13272],{"class":54},[37,13562,13275],{"class":50},[37,13564,55],{"class":54},[37,13566,13567],{"class":50}," a; \n",[37,13569,13570,13572,13574,13576,13578],{"class":39,"line":218},[37,13571,13512],{"class":50},[37,13573,55],{"class":54},[37,13575,9291],{"class":61},[37,13577,582],{"class":50},[37,13579,13580],{"class":43}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[37,13582,13583],{"class":39,"line":227},[37,13584,13551],{"class":50},[37,13586,13587,13589,13591,13593,13595,13597,13599],{"class":39,"line":232},[37,13588,6877],{"class":50},[37,13590,1552],{"class":54},[37,13592,13011],{"class":185},[37,13594,1820],{"class":54},[37,13596,11210],{"class":50},[37,13598,1552],{"class":54},[37,13600,9181],{"class":50},[37,13602,13603,13605,13607,13610,13612,13614,13616],{"class":39,"line":238},[37,13604,6877],{"class":50},[37,13606,1552],{"class":54},[37,13608,13609],{"class":185}," \"ref:\"",[37,13611,1820],{"class":54},[37,13613,13275],{"class":50},[37,13615,1552],{"class":54},[37,13617,9181],{"class":50},[37,13619,13620],{"class":39,"line":244},[37,13621,13551],{"class":50},[37,13623,13624,13627],{"class":39,"line":250},[37,13625,13626],{"class":2320},"    func",[37,13628,13629],{"class":50},"(a);\n",[37,13631,13632,13634,13636],{"class":39,"line":256},[37,13633,4440],{"class":54},[37,13635,4443],{"class":61},[37,13637,1669],{"class":50},[37,13639,13640],{"class":39,"line":261},[37,13641,1941],{"class":50},[14,13643,11673],{},[481,13645,13646,13649],{},[484,13647,13648],{},"引用的本质，就是一个指针常量",[484,13650,13651],{},"引用一旦初始化，就不可以发生改变",[469,13653,13655],{"id":13654},"_66常量引用","6.6常量引用",[14,13657,13658],{},"作用：常量引用主要用来修饰形参",[14,13660,13661,13662,13665],{},"在函数形参列表中，可以加",[673,13663,13664],{},"const修饰形参","，防止形参改变实参",[27,13667,13669],{"className":519,"code":13668,"language":521,"meta":32,"style":32},"\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",[34,13670,13671,13676,13681,13700,13705,13718,13722,13726,13734,13738,13743,13748,13762,13766,13774,13786,13790,13795,13807,13814,13818,13828,13832,13840],{"__ignoreMap":32},[37,13672,13673],{"class":39,"line":40},[37,13674,13675],{"class":43},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[37,13677,13678],{"class":39,"line":47},[37,13679,13680],{"class":43},"\u002F\u002F加上const就不能修改实参的\n",[37,13682,13683,13685,13688,13690,13692,13695,13698],{"class":39,"line":104},[37,13684,5712],{"class":54},[37,13686,13687],{"class":2320}," showValue",[37,13689,165],{"class":50},[37,13691,7140],{"class":54},[37,13693,13694],{"class":54}," int&",[37,13696,13697],{"class":159}," v",[37,13699,12783],{"class":50},[37,13701,13702],{"class":39,"line":113},[37,13703,13704],{"class":43},"    \u002F\u002Fv += 100;\n",[37,13706,13707,13709,13711,13714,13716],{"class":39,"line":189},[37,13708,6877],{"class":50},[37,13710,1552],{"class":54},[37,13712,13713],{"class":50}," v ",[37,13715,1552],{"class":54},[37,13717,9181],{"class":50},[37,13719,13720],{"class":39,"line":195},[37,13721,1941],{"class":50},[37,13723,13724],{"class":39,"line":201},[37,13725,2757],{"emptyLinePlaceholder":454},[37,13727,13728,13730,13732],{"class":39,"line":207},[37,13729,533],{"class":54},[37,13731,2330],{"class":2320},[37,13733,11194],{"class":50},[37,13735,13736],{"class":39,"line":213},[37,13737,2757],{"emptyLinePlaceholder":454},[37,13739,13740],{"class":39,"line":218},[37,13741,13742],{"class":43},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[37,13744,13745],{"class":39,"line":227},[37,13746,13747],{"class":43},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[37,13749,13750,13752,13754,13756,13758,13760],{"class":39,"line":232},[37,13751,11562],{"class":54},[37,13753,13694],{"class":54},[37,13755,13275],{"class":50},[37,13757,55],{"class":54},[37,13759,2395],{"class":61},[37,13761,1669],{"class":50},[37,13763,13764],{"class":39,"line":238},[37,13765,2757],{"emptyLinePlaceholder":454},[37,13767,13768,13771],{"class":39,"line":244},[37,13769,13770],{"class":43},"    \u002F\u002Fref = 100;",[37,13772,13773],{"class":43},"  \u002F\u002F加入const后不可以修改变量\n",[37,13775,13776,13778,13780,13782,13784],{"class":39,"line":250},[37,13777,6877],{"class":50},[37,13779,1552],{"class":54},[37,13781,13275],{"class":50},[37,13783,1552],{"class":54},[37,13785,9181],{"class":50},[37,13787,13788],{"class":39,"line":256},[37,13789,2757],{"emptyLinePlaceholder":454},[37,13791,13792],{"class":39,"line":261},[37,13793,13794],{"class":43},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[37,13796,13797,13799,13801,13803,13805],{"class":39,"line":267},[37,13798,2342],{"class":54},[37,13800,11210],{"class":50},[37,13802,55],{"class":54},[37,13804,2395],{"class":61},[37,13806,1669],{"class":50},[37,13808,13809,13812],{"class":39,"line":283},[37,13810,13811],{"class":2320},"    showValue",[37,13813,13629],{"class":50},[37,13815,13816],{"class":39,"line":288},[37,13817,2757],{"emptyLinePlaceholder":454},[37,13819,13820,13822,13824,13826],{"class":39,"line":294},[37,13821,2660],{"class":2320},[37,13823,165],{"class":50},[37,13825,2665],{"class":185},[37,13827,3069],{"class":50},[37,13829,13830],{"class":39,"line":300},[37,13831,2757],{"emptyLinePlaceholder":454},[37,13833,13834,13836,13838],{"class":39,"line":306},[37,13835,4440],{"class":54},[37,13837,4443],{"class":61},[37,13839,1669],{"class":50},[37,13841,13842],{"class":39,"line":312},[37,13843,1941],{"class":50},[446,13845,13846],{},"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":32,"searchDepth":47,"depth":47,"links":13848},[13849,13850,13851,13852,13853,13854],{"id":12381,"depth":47,"text":12382},{"id":12560,"depth":47,"text":12561},{"id":12743,"depth":47,"text":12744},{"id":13147,"depth":47,"text":13148},{"id":13474,"depth":47,"text":13475},{"id":13654,"depth":47,"text":13655},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12373,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13861,"title":13862,"body":13863,"description":32,"extension":452,"meta":14944,"navigation":454,"path":14945,"seo":14946,"stem":14947,"__hash__":14948},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13864,"toc":14936},[13865,13868,13872,13875,13880,14112,14114,14125,14129,14132,14140,14244,14247,14251,14254,14258,14261,14266,14288,14294,14621,14624,14628,14636,14933],[10,13866,13862],{"id":13867},"_7函数高级部分",[469,13869,13871],{"id":13870},"_71函数默认参数","7.1函数默认参数",[14,13873,13874],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13876,5530,13877],{},[34,13878,13879],{}," 返回值类型  函数名 （参数= 默认值）{}",[27,13881,13883],{"className":519,"code":13882,"language":521,"meta":32,"style":32},"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",[34,13884,13885,13920,13935,13939,13943,13948,13953,13982,14002,14012,14016,14020,14028,14032,14060,14082,14086,14096,14100,14108],{"__ignoreMap":32},[37,13886,13887,13889,13891,13893,13895,13897,13899,13901,13903,13906,13908,13910,13912,13914,13916,13918],{"class":39,"line":40},[37,13888,533],{"class":54},[37,13890,11726],{"class":2320},[37,13892,165],{"class":50},[37,13894,533],{"class":54},[37,13896,1774],{"class":159},[37,13898,12776],{"class":50},[37,13900,533],{"class":54},[37,13902,3183],{"class":159},[37,13904,13905],{"class":54}," =",[37,13907,2395],{"class":61},[37,13909,12776],{"class":50},[37,13911,533],{"class":54},[37,13913,3199],{"class":159},[37,13915,13905],{"class":54},[37,13917,2395],{"class":61},[37,13919,12783],{"class":50},[37,13921,13922,13924,13926,13928,13930,13932],{"class":39,"line":47},[37,13923,4440],{"class":54},[37,13925,11210],{"class":50},[37,13927,993],{"class":54},[37,13929,11223],{"class":50},[37,13931,993],{"class":54},[37,13933,13934],{"class":50}," c;\n",[37,13936,13937],{"class":39,"line":104},[37,13938,1941],{"class":50},[37,13940,13941],{"class":39,"line":113},[37,13942,2757],{"emptyLinePlaceholder":454},[37,13944,13945],{"class":39,"line":189},[37,13946,13947],{"class":43},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[37,13949,13950],{"class":39,"line":195},[37,13951,13952],{"class":43},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[37,13954,13955,13957,13960,13962,13964,13966,13968,13970,13972,13974,13976,13978,13980],{"class":39,"line":201},[37,13956,533],{"class":54},[37,13958,13959],{"class":2320}," func2",[37,13961,165],{"class":50},[37,13963,533],{"class":54},[37,13965,1774],{"class":159},[37,13967,13905],{"class":54},[37,13969,2395],{"class":61},[37,13971,12776],{"class":50},[37,13973,533],{"class":54},[37,13975,3183],{"class":159},[37,13977,13905],{"class":54},[37,13979,2395],{"class":61},[37,13981,3069],{"class":50},[37,13983,13984,13986,13988,13990,13992,13994,13996,13998,14000],{"class":39,"line":207},[37,13985,533],{"class":54},[37,13987,13959],{"class":2320},[37,13989,165],{"class":50},[37,13991,533],{"class":54},[37,13993,1774],{"class":159},[37,13995,12776],{"class":50},[37,13997,533],{"class":54},[37,13999,3183],{"class":159},[37,14001,12783],{"class":50},[37,14003,14004,14006,14008,14010],{"class":39,"line":213},[37,14005,4440],{"class":54},[37,14007,11210],{"class":50},[37,14009,993],{"class":54},[37,14011,12804],{"class":50},[37,14013,14014],{"class":39,"line":218},[37,14015,1941],{"class":50},[37,14017,14018],{"class":39,"line":227},[37,14019,2757],{"emptyLinePlaceholder":454},[37,14021,14022,14024,14026],{"class":39,"line":232},[37,14023,533],{"class":54},[37,14025,2330],{"class":2320},[37,14027,11194],{"class":50},[37,14029,14030],{"class":39,"line":238},[37,14031,2757],{"emptyLinePlaceholder":454},[37,14033,14034,14036,14038,14041,14043,14045,14047,14049,14051,14053,14056,14058],{"class":39,"line":244},[37,14035,6877],{"class":50},[37,14037,1552],{"class":54},[37,14039,14040],{"class":185}," \"ret = \"",[37,14042,1820],{"class":54},[37,14044,11726],{"class":2320},[37,14046,165],{"class":50},[37,14048,1210],{"class":61},[37,14050,12776],{"class":50},[37,14052,1210],{"class":61},[37,14054,14055],{"class":50},") ",[37,14057,1552],{"class":54},[37,14059,9181],{"class":50},[37,14061,14062,14064,14066,14068,14070,14072,14074,14076,14078,14080],{"class":39,"line":250},[37,14063,6877],{"class":50},[37,14065,1552],{"class":54},[37,14067,14040],{"class":185},[37,14069,1820],{"class":54},[37,14071,11726],{"class":2320},[37,14073,165],{"class":50},[37,14075,154],{"class":61},[37,14077,14055],{"class":50},[37,14079,1552],{"class":54},[37,14081,9181],{"class":50},[37,14083,14084],{"class":39,"line":256},[37,14085,2757],{"emptyLinePlaceholder":454},[37,14087,14088,14090,14092,14094],{"class":39,"line":261},[37,14089,2660],{"class":2320},[37,14091,165],{"class":50},[37,14093,2665],{"class":185},[37,14095,3069],{"class":50},[37,14097,14098],{"class":39,"line":267},[37,14099,2757],{"emptyLinePlaceholder":454},[37,14101,14102,14104,14106],{"class":39,"line":283},[37,14103,4440],{"class":54},[37,14105,4443],{"class":61},[37,14107,1669],{"class":50},[37,14109,14110],{"class":39,"line":288},[37,14111,1941],{"class":50},[14,14113,11673],{},[481,14115,14116,14119,14122],{},[484,14117,14118],{},"我传就用我；没传就用你",[484,14120,14121],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[484,14123,14124],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[469,14126,14128],{"id":14127},"_72函数的占位参数","7.2函数的占位参数",[14,14130,14131],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,14133,14134,14136,14137],{},[673,14135,5530],{}," ",[34,14138,14139],{},"返回值类型 函数名 (数据类型){}",[27,14141,14143],{"className":519,"code":14142,"language":521,"meta":32,"style":32},"\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",[34,14144,14145,14150,14168,14181,14185,14193,14197,14214,14218,14228,14232,14240],{"__ignoreMap":32},[37,14146,14147],{"class":39,"line":40},[37,14148,14149],{"class":43},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[37,14151,14152,14154,14156,14158,14160,14162,14164,14166],{"class":39,"line":47},[37,14153,5712],{"class":54},[37,14155,11726],{"class":2320},[37,14157,165],{"class":50},[37,14159,533],{"class":54},[37,14161,1774],{"class":159},[37,14163,12776],{"class":50},[37,14165,533],{"class":54},[37,14167,12783],{"class":50},[37,14169,14170,14172,14174,14177,14179],{"class":39,"line":104},[37,14171,6877],{"class":50},[37,14173,1552],{"class":54},[37,14175,14176],{"class":185}," \"this is func\"",[37,14178,1820],{"class":54},[37,14180,9181],{"class":50},[37,14182,14183],{"class":39,"line":113},[37,14184,1941],{"class":50},[37,14186,14187,14189,14191],{"class":39,"line":189},[37,14188,533],{"class":54},[37,14190,2330],{"class":2320},[37,14192,11194],{"class":50},[37,14194,14195],{"class":39,"line":195},[37,14196,2757],{"emptyLinePlaceholder":454},[37,14198,14199,14201,14203,14205,14207,14209,14211],{"class":39,"line":201},[37,14200,13626],{"class":2320},[37,14202,165],{"class":50},[37,14204,98],{"class":61},[37,14206,65],{"class":50},[37,14208,98],{"class":61},[37,14210,6314],{"class":50},[37,14212,14213],{"class":43}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[37,14215,14216],{"class":39,"line":207},[37,14217,2757],{"emptyLinePlaceholder":454},[37,14219,14220,14222,14224,14226],{"class":39,"line":213},[37,14221,2660],{"class":2320},[37,14223,165],{"class":50},[37,14225,2665],{"class":185},[37,14227,3069],{"class":50},[37,14229,14230],{"class":39,"line":218},[37,14231,2757],{"emptyLinePlaceholder":454},[37,14233,14234,14236,14238],{"class":39,"line":227},[37,14235,4440],{"class":54},[37,14237,4443],{"class":61},[37,14239,1669],{"class":50},[37,14241,14242],{"class":39,"line":232},[37,14243,1941],{"class":50},[14,14245,14246],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[469,14248,14250],{"id":14249},"_73函数重载","7.3函数重载",[14,14252,14253],{},"意思是函数名是可以相同的",[498,14255,14257],{"id":14256},"_731基本语法","7.3.1基本语法",[14,14259,14260],{},"作用：函数名可以相同，提高复用性",[14,14262,14263],{},[673,14264,14265],{},"函数重载满足条件：",[1515,14267,14268,14271,14274],{},[484,14269,14270],{},"同一个作用域下",[484,14272,14273],{},"函数名称相同",[484,14275,14276,14277,14280,14281,14284,14285],{},"函数参数",[673,14278,14279],{},"类型不同","  或者 ",[673,14282,14283],{},"个数不同"," 或者 ",[673,14286,14287],{},"顺序不同",[14,14289,14290,14293],{},[673,14291,14292],{},"注意:","  函数的返回值不可以作为函数重载的条件",[27,14295,14297],{"className":10282,"code":14296,"language":10284,"meta":32,"style":32},"\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",[34,14298,14299,14304,14312,14316,14329,14333,14347,14351,14364,14368,14383,14387,14400,14404,14425,14429,14442,14446,14466,14470,14483,14487,14491,14496,14501,14506,14511,14516,14520,14524,14532,14536,14542,14552,14562,14576,14591,14595,14605,14609,14617],{"__ignoreMap":32},[37,14300,14301],{"class":39,"line":40},[37,14302,14303],{"class":43},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[37,14305,14306,14308,14310],{"class":39,"line":47},[37,14307,5712],{"class":54},[37,14309,11726],{"class":2320},[37,14311,2333],{"class":50},[37,14313,14314],{"class":39,"line":104},[37,14315,1922],{"class":50},[37,14317,14318,14320,14322,14325,14327],{"class":39,"line":113},[37,14319,6877],{"class":50},[37,14321,1552],{"class":54},[37,14323,14324],{"class":185}," \"func 的调用！\"",[37,14326,1820],{"class":54},[37,14328,9181],{"class":50},[37,14330,14331],{"class":39,"line":189},[37,14332,1941],{"class":50},[37,14334,14335,14337,14339,14341,14343,14345],{"class":39,"line":195},[37,14336,5712],{"class":54},[37,14338,11726],{"class":2320},[37,14340,165],{"class":50},[37,14342,533],{"class":54},[37,14344,1774],{"class":159},[37,14346,280],{"class":50},[37,14348,14349],{"class":39,"line":201},[37,14350,1922],{"class":50},[37,14352,14353,14355,14357,14360,14362],{"class":39,"line":207},[37,14354,6877],{"class":50},[37,14356,1552],{"class":54},[37,14358,14359],{"class":185}," \"func (int a) 的调用！\"",[37,14361,1820],{"class":54},[37,14363,9181],{"class":50},[37,14365,14366],{"class":39,"line":213},[37,14367,1941],{"class":50},[37,14369,14370,14372,14374,14376,14379,14381],{"class":39,"line":218},[37,14371,5712],{"class":54},[37,14373,11726],{"class":2320},[37,14375,165],{"class":50},[37,14377,14378],{"class":54},"double",[37,14380,1774],{"class":159},[37,14382,280],{"class":50},[37,14384,14385],{"class":39,"line":227},[37,14386,1922],{"class":50},[37,14388,14389,14391,14393,14396,14398],{"class":39,"line":232},[37,14390,6877],{"class":50},[37,14392,1552],{"class":54},[37,14394,14395],{"class":185}," \"func (double a)的调用！\"",[37,14397,1820],{"class":54},[37,14399,9181],{"class":50},[37,14401,14402],{"class":39,"line":238},[37,14403,1941],{"class":50},[37,14405,14406,14408,14410,14412,14414,14416,14419,14421,14423],{"class":39,"line":244},[37,14407,5712],{"class":54},[37,14409,11726],{"class":2320},[37,14411,165],{"class":50},[37,14413,533],{"class":54},[37,14415,1774],{"class":159},[37,14417,14418],{"class":50}," ,",[37,14420,14378],{"class":54},[37,14422,3183],{"class":159},[37,14424,280],{"class":50},[37,14426,14427],{"class":39,"line":250},[37,14428,1922],{"class":50},[37,14430,14431,14433,14435,14438,14440],{"class":39,"line":256},[37,14432,6877],{"class":50},[37,14434,1552],{"class":54},[37,14436,14437],{"class":185}," \"func (int a ,double b) 的调用！\"",[37,14439,1820],{"class":54},[37,14441,9181],{"class":50},[37,14443,14444],{"class":39,"line":261},[37,14445,1941],{"class":50},[37,14447,14448,14450,14452,14454,14456,14458,14460,14462,14464],{"class":39,"line":267},[37,14449,5712],{"class":54},[37,14451,11726],{"class":2320},[37,14453,165],{"class":50},[37,14455,14378],{"class":54},[37,14457,1774],{"class":159},[37,14459,14418],{"class":50},[37,14461,533],{"class":54},[37,14463,3183],{"class":159},[37,14465,280],{"class":50},[37,14467,14468],{"class":39,"line":283},[37,14469,1922],{"class":50},[37,14471,14472,14474,14476,14479,14481],{"class":39,"line":288},[37,14473,6877],{"class":50},[37,14475,1552],{"class":54},[37,14477,14478],{"class":185}," \"func (double a ,int b)的调用！\"",[37,14480,1820],{"class":54},[37,14482,9181],{"class":50},[37,14484,14485],{"class":39,"line":294},[37,14486,1941],{"class":50},[37,14488,14489],{"class":39,"line":300},[37,14490,2757],{"emptyLinePlaceholder":454},[37,14492,14493],{"class":39,"line":306},[37,14494,14495],{"class":43},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[37,14497,14498],{"class":39,"line":312},[37,14499,14500],{"class":43},"\u002F\u002Fint func(double a, int b)\n",[37,14502,14503],{"class":39,"line":317},[37,14504,14505],{"class":43},"\u002F\u002F{\n",[37,14507,14508],{"class":39,"line":323},[37,14509,14510],{"class":43},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[37,14512,14513],{"class":39,"line":337},[37,14514,14515],{"class":43},"\u002F\u002F}\n",[37,14517,14518],{"class":39,"line":342},[37,14519,2757],{"emptyLinePlaceholder":454},[37,14521,14522],{"class":39,"line":347},[37,14523,2757],{"emptyLinePlaceholder":454},[37,14525,14526,14528,14530],{"class":39,"line":352},[37,14527,533],{"class":54},[37,14529,2330],{"class":2320},[37,14531,11194],{"class":50},[37,14533,14534],{"class":39,"line":357},[37,14535,2757],{"emptyLinePlaceholder":454},[37,14537,14538,14540],{"class":39,"line":362},[37,14539,13626],{"class":2320},[37,14541,5984],{"class":50},[37,14543,14544,14546,14548,14550],{"class":39,"line":367},[37,14545,13626],{"class":2320},[37,14547,165],{"class":50},[37,14549,98],{"class":61},[37,14551,3069],{"class":50},[37,14553,14554,14556,14558,14560],{"class":39,"line":373},[37,14555,13626],{"class":2320},[37,14557,165],{"class":50},[37,14559,576],{"class":61},[37,14561,3069],{"class":50},[37,14563,14564,14566,14568,14570,14572,14574],{"class":39,"line":392},[37,14565,13626],{"class":2320},[37,14567,165],{"class":50},[37,14569,98],{"class":61},[37,14571,65],{"class":50},[37,14573,576],{"class":61},[37,14575,3069],{"class":50},[37,14577,14578,14580,14582,14584,14587,14589],{"class":39,"line":398},[37,14579,13626],{"class":2320},[37,14581,165],{"class":50},[37,14583,576],{"class":61},[37,14585,14586],{"class":50}," , ",[37,14588,98],{"class":61},[37,14590,3069],{"class":50},[37,14592,14593],{"class":39,"line":409},[37,14594,13551],{"class":50},[37,14596,14597,14599,14601,14603],{"class":39,"line":415},[37,14598,2660],{"class":2320},[37,14600,165],{"class":50},[37,14602,2665],{"class":185},[37,14604,3069],{"class":50},[37,14606,14607],{"class":39,"line":420},[37,14608,2757],{"emptyLinePlaceholder":454},[37,14610,14611,14613,14615],{"class":39,"line":425},[37,14612,4440],{"class":54},[37,14614,4443],{"class":61},[37,14616,1669],{"class":50},[37,14618,14619],{"class":39,"line":431},[37,14620,1941],{"class":50},[14,14622,14623],{},"重点：函数返回值不可以作为函数重载条件！",[498,14625,14627],{"id":14626},"_732注意事项","7.3.2注意事项",[1515,14629,14630,14633],{},[484,14631,14632],{},"引用作为重载条件!!!",[484,14634,14635],{},"函数重载碰到函数默认参数",[27,14637,14639],{"className":519,"code":14638,"language":521,"meta":32,"style":32},"\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",[34,14640,14641,14646,14651,14655,14671,14675,14688,14692,14696,14714,14718,14731,14735,14739,14743,14748,14752,14776,14780,14793,14797,14801,14815,14819,14832,14836,14840,14848,14852,14864,14874,14887,14891,14895,14903,14907,14917,14921,14929],{"__ignoreMap":32},[37,14642,14643],{"class":39,"line":40},[37,14644,14645],{"class":43},"\u002F\u002F函数重载注意事项\n",[37,14647,14648],{"class":39,"line":47},[37,14649,14650],{"class":43},"\u002F\u002F1、引用作为重载条件\n",[37,14652,14653],{"class":39,"line":104},[37,14654,2757],{"emptyLinePlaceholder":454},[37,14656,14657,14659,14661,14663,14665,14667,14669],{"class":39,"line":113},[37,14658,5712],{"class":54},[37,14660,11726],{"class":2320},[37,14662,165],{"class":50},[37,14664,533],{"class":54},[37,14666,10925],{"class":54},[37,14668,51],{"class":159},[37,14670,280],{"class":50},[37,14672,14673],{"class":39,"line":189},[37,14674,1922],{"class":50},[37,14676,14677,14679,14681,14684,14686],{"class":39,"line":195},[37,14678,6877],{"class":50},[37,14680,1552],{"class":54},[37,14682,14683],{"class":185}," \"func (int &a) 调用 \"",[37,14685,1820],{"class":54},[37,14687,9181],{"class":50},[37,14689,14690],{"class":39,"line":201},[37,14691,1941],{"class":50},[37,14693,14694],{"class":39,"line":207},[37,14695,2757],{"emptyLinePlaceholder":454},[37,14697,14698,14700,14702,14704,14706,14708,14710,14712],{"class":39,"line":213},[37,14699,5712],{"class":54},[37,14701,11726],{"class":2320},[37,14703,165],{"class":50},[37,14705,7140],{"class":54},[37,14707,2739],{"class":54},[37,14709,10925],{"class":54},[37,14711,51],{"class":159},[37,14713,280],{"class":50},[37,14715,14716],{"class":39,"line":218},[37,14717,1922],{"class":50},[37,14719,14720,14722,14724,14727,14729],{"class":39,"line":227},[37,14721,6877],{"class":50},[37,14723,1552],{"class":54},[37,14725,14726],{"class":185}," \"func (const int &a) 调用 \"",[37,14728,1820],{"class":54},[37,14730,9181],{"class":50},[37,14732,14733],{"class":39,"line":232},[37,14734,1941],{"class":50},[37,14736,14737],{"class":39,"line":238},[37,14738,2757],{"emptyLinePlaceholder":454},[37,14740,14741],{"class":39,"line":244},[37,14742,2757],{"emptyLinePlaceholder":454},[37,14744,14745],{"class":39,"line":250},[37,14746,14747],{"class":43},"\u002F\u002F2、函数重载碰到函数默认参数\n",[37,14749,14750],{"class":39,"line":256},[37,14751,2757],{"emptyLinePlaceholder":454},[37,14753,14754,14756,14758,14760,14762,14764,14766,14768,14770,14772,14774],{"class":39,"line":261},[37,14755,5712],{"class":54},[37,14757,13959],{"class":2320},[37,14759,165],{"class":50},[37,14761,533],{"class":54},[37,14763,1774],{"class":159},[37,14765,12776],{"class":50},[37,14767,533],{"class":54},[37,14769,3183],{"class":159},[37,14771,13905],{"class":54},[37,14773,2395],{"class":61},[37,14775,280],{"class":50},[37,14777,14778],{"class":39,"line":267},[37,14779,1922],{"class":50},[37,14781,14782,14784,14786,14789,14791],{"class":39,"line":283},[37,14783,6877],{"class":50},[37,14785,1552],{"class":54},[37,14787,14788],{"class":185}," \"func2(int a, int b = 10) 调用\"",[37,14790,1820],{"class":54},[37,14792,9181],{"class":50},[37,14794,14795],{"class":39,"line":288},[37,14796,1941],{"class":50},[37,14798,14799],{"class":39,"line":294},[37,14800,2757],{"emptyLinePlaceholder":454},[37,14802,14803,14805,14807,14809,14811,14813],{"class":39,"line":300},[37,14804,5712],{"class":54},[37,14806,13959],{"class":2320},[37,14808,165],{"class":50},[37,14810,533],{"class":54},[37,14812,1774],{"class":159},[37,14814,280],{"class":50},[37,14816,14817],{"class":39,"line":306},[37,14818,1922],{"class":50},[37,14820,14821,14823,14825,14828,14830],{"class":39,"line":312},[37,14822,6877],{"class":50},[37,14824,1552],{"class":54},[37,14826,14827],{"class":185}," \"func2(int a) 调用\"",[37,14829,1820],{"class":54},[37,14831,9181],{"class":50},[37,14833,14834],{"class":39,"line":317},[37,14835,1941],{"class":50},[37,14837,14838],{"class":39,"line":323},[37,14839,2757],{"emptyLinePlaceholder":454},[37,14841,14842,14844,14846],{"class":39,"line":337},[37,14843,533],{"class":54},[37,14845,2330],{"class":2320},[37,14847,11194],{"class":50},[37,14849,14850],{"class":39,"line":342},[37,14851,13551],{"class":50},[37,14853,14854,14856,14858,14860,14862],{"class":39,"line":347},[37,14855,2342],{"class":54},[37,14857,11210],{"class":50},[37,14859,55],{"class":54},[37,14861,2395],{"class":61},[37,14863,1669],{"class":50},[37,14865,14866,14868,14871],{"class":39,"line":352},[37,14867,13626],{"class":2320},[37,14869,14870],{"class":50},"(a);",[37,14872,14873],{"class":43}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[37,14875,14876,14878,14880,14882,14884],{"class":39,"line":357},[37,14877,13626],{"class":2320},[37,14879,165],{"class":50},[37,14881,98],{"class":61},[37,14883,6314],{"class":50},[37,14885,14886],{"class":43},"\u002F\u002F调用有const   10是个常量\n",[37,14888,14889],{"class":39,"line":362},[37,14890,2757],{"emptyLinePlaceholder":454},[37,14892,14893],{"class":39,"line":367},[37,14894,2757],{"emptyLinePlaceholder":454},[37,14896,14897,14900],{"class":39,"line":373},[37,14898,14899],{"class":43},"    \u002F\u002Ffunc2(10);",[37,14901,14902],{"class":43}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[37,14904,14905],{"class":39,"line":392},[37,14906,2757],{"emptyLinePlaceholder":454},[37,14908,14909,14911,14913,14915],{"class":39,"line":398},[37,14910,2660],{"class":2320},[37,14912,165],{"class":50},[37,14914,2665],{"class":185},[37,14916,3069],{"class":50},[37,14918,14919],{"class":39,"line":409},[37,14920,2757],{"emptyLinePlaceholder":454},[37,14922,14923,14925,14927],{"class":39,"line":415},[37,14924,4440],{"class":54},[37,14926,4443],{"class":61},[37,14928,1669],{"class":50},[37,14930,14931],{"class":39,"line":420},[37,14932,1941],{"class":50},[446,14934,14935],{},"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":32,"searchDepth":47,"depth":47,"links":14937},[14938,14939,14940],{"id":13870,"depth":47,"text":13871},{"id":14127,"depth":47,"text":14128},{"id":14249,"depth":47,"text":14250,"children":14941},[14942,14943],{"id":14256,"depth":104,"text":14257},{"id":14626,"depth":104,"text":14627},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13862,"description":32},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14950,"title":14951,"body":14952,"description":23706,"extension":452,"meta":23707,"navigation":454,"path":23708,"seo":23709,"stem":23710,"__hash__":23711},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14953,"toc":23687},[14954,14957,14963,14970,14975,14978,14981,14984,14988,14992,14995,14998,15006,15011,15014,15021,15026,15185,15188,15441,15444,15447,15450,15455,15458,15461,15472,15477,15713,15717,15727,15730,15738,15885,15889,15892,15895,15899,16344,16348,16356,16364,17276,17283,17288,17916,17919,17922,17925,18044,18047,18134,18137,18263,18266,18360,18363,18716,18720,18728,18732,18739,18742,18745,18756,18762,18767,18779,18787,18807,18815,18832,19018,19021,19025,19028,19031,19034,19037,19040,19043,19046,19506,19512,19516,19519,19530,20117,20120,20609,20613,20616,20619,20622,20625,20628,20636,21032,21036,21039,21042,21489,21492,21495,21500,21503,21508,21511,21515,21518,21520,21526,21529,21835,21845,21886,21890,21893,21895,21928,21931,22238,22240,22255,22258,22281,22290,22296,22299,22303,22306,22309,22314,22325,22330,22338,22343,22473,22476,22479,22654,22659,22871,22875,22878,22992,22997,23236,23240,23244,23247,23250,23255,23360,23363,23366,23369,23373,23484,23487,23490,23495,23547,23550,23553,23558,23604,23607,23612,23680,23682,23685],[10,14955,14951],{"id":14956},"_8类和对象",[14,14958,14959,14960],{},"C++面向对象的三大特性为",[673,14961,14962],{},"封装、继承、多态",[14,14964,14965,14966,14969],{},"C++认为",[673,14967,14968],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14971,14972],{},[673,14973,14974],{},"例如：",[14,14976,14977],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14979,14980],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14982,14983],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[469,14985,14987],{"id":14986},"_81封装","8.1封装",[498,14989,14991],{"id":14990},"_811封装的意义","8.1.1封装的意义",[14,14993,14994],{},"封装是C++面向对象三大特性之一",[14,14996,14997],{},"封装的意义：",[1515,14999,15000,15003],{},[484,15001,15002],{},"将属性和行为作为一个整体，表现生活中的事物",[484,15004,15005],{},"将属性和行为加以权限控制",[14,15007,15008],{},[673,15009,15010],{},"封装意义一：",[14,15012,15013],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,15015,15016,14136,15018],{},[673,15017,5530],{},[34,15019,15020],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[481,15022,15023],{},[484,15024,15025],{},"**示例1：**设计一个圆类，求圆的周长",[27,15027,15029],{"className":519,"code":15028,"language":521,"meta":32,"style":32},"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",[34,15030,15031,15039,15043,15048,15053,15058,15063,15070,15075,15085,15089,15107,15111,15115,15123,15127,15132,15137,15142,15147,15158,15181],{"__ignoreMap":32},[37,15032,15033,15036],{"class":39,"line":40},[37,15034,15035],{"class":54},"class",[37,15037,15038],{"class":2320}," Circle\n",[37,15040,15041],{"class":39,"line":47},[37,15042,1922],{"class":50},[37,15044,15045],{"class":39,"line":104},[37,15046,15047],{"class":43},"    \u002F\u002F访问权限\n",[37,15049,15050],{"class":39,"line":113},[37,15051,15052],{"class":43},"    \u002F\u002F公共权限\n",[37,15054,15055],{"class":39,"line":189},[37,15056,15057],{"class":54},"public:\n",[37,15059,15060],{"class":39,"line":195},[37,15061,15062],{"class":43},"    \u002F\u002F属性\n",[37,15064,15065,15067],{"class":39,"line":201},[37,15066,2342],{"class":54},[37,15068,15069],{"class":50}," m_r;\n",[37,15071,15072],{"class":39,"line":207},[37,15073,15074],{"class":43},"    \u002F\u002F行为\n",[37,15076,15077,15080,15083],{"class":39,"line":213},[37,15078,15079],{"class":54},"    double",[37,15081,15082],{"class":2320}," calculateZC",[37,15084,2333],{"class":50},[37,15086,15087],{"class":39,"line":218},[37,15088,2387],{"class":50},[37,15090,15091,15094,15097,15099,15102,15104],{"class":39,"line":227},[37,15092,15093],{"class":54},"        return",[37,15095,15096],{"class":61}," 2",[37,15098,967],{"class":54},[37,15100,15101],{"class":50},"PI",[37,15103,967],{"class":54},[37,15105,15106],{"class":50},"m_r;\n",[37,15108,15109],{"class":39,"line":232},[37,15110,2544],{"class":50},[37,15112,15113],{"class":39,"line":238},[37,15114,4345],{"class":50},[37,15116,15117,15119,15121],{"class":39,"line":244},[37,15118,533],{"class":54},[37,15120,2330],{"class":2320},[37,15122,2333],{"class":50},[37,15124,15125],{"class":39,"line":250},[37,15126,1922],{"class":50},[37,15128,15129],{"class":39,"line":256},[37,15130,15131],{"class":43},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[37,15133,15134],{"class":39,"line":261},[37,15135,15136],{"class":43},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[37,15138,15139],{"class":39,"line":267},[37,15140,15141],{"class":50},"    Circle c1;\n",[37,15143,15144],{"class":39,"line":283},[37,15145,15146],{"class":43},"    \u002F\u002F给圆对象 的属性进行赋值\n",[37,15148,15149,15152,15154,15156],{"class":39,"line":288},[37,15150,15151],{"class":50},"    c1.m_r",[37,15153,55],{"class":54},[37,15155,98],{"class":61},[37,15157,1669],{"class":50},[37,15159,15160,15162,15164,15167,15169,15172,15175,15177,15179],{"class":39,"line":294},[37,15161,1927],{"class":50},[37,15163,1552],{"class":54},[37,15165,15166],{"class":185},"\"圆的周长\"",[37,15168,1552],{"class":54},[37,15170,15171],{"class":50},"c1.",[37,15173,15174],{"class":2320},"calculateZC",[37,15176,2784],{"class":50},[37,15178,1552],{"class":54},[37,15180,1574],{"class":50},[37,15182,15183],{"class":39,"line":300},[37,15184,1941],{"class":50},[14,15186,15187],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[27,15189,15191],{"className":519,"code":15190,"language":521,"meta":32,"style":32},"#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",[34,15192,15193,15199,15209,15215,15221,15225,15229,15234,15241,15246,15264,15268,15278,15282,15287,15303,15307,15317,15321,15326,15334,15338,15370,15374,15378,15386,15390,15395,15400,15414,15428,15437],{"__ignoreMap":32},[37,15194,15195,15197],{"class":39,"line":40},[37,15196,2306],{"class":54},[37,15198,2309],{"class":185},[37,15200,15201,15203,15205,15207],{"class":39,"line":47},[37,15202,2314],{"class":54},[37,15204,2317],{"class":54},[37,15206,2321],{"class":2320},[37,15208,1669],{"class":50},[37,15210,15211,15213],{"class":39,"line":104},[37,15212,2306],{"class":54},[37,15214,8097],{"class":185},[37,15216,15217,15219],{"class":39,"line":113},[37,15218,15035],{"class":54},[37,15220,8110],{"class":2320},[37,15222,15223],{"class":39,"line":189},[37,15224,1922],{"class":50},[37,15226,15227],{"class":39,"line":195},[37,15228,15057],{"class":54},[37,15230,15231],{"class":39,"line":201},[37,15232,15233],{"class":50},"    string m_name;\n",[37,15235,15236,15238],{"class":39,"line":207},[37,15237,2342],{"class":54},[37,15239,15240],{"class":50}," m_id;\n",[37,15242,15243],{"class":39,"line":213},[37,15244,15245],{"class":43},"    \u002F\u002F赋值姓名\n",[37,15247,15248,15251,15254,15256,15259,15262],{"class":39,"line":218},[37,15249,15250],{"class":54},"    void",[37,15252,15253],{"class":2320}," setName",[37,15255,165],{"class":50},[37,15257,15258],{"class":2320},"string",[37,15260,15261],{"class":159}," name",[37,15263,280],{"class":50},[37,15265,15266],{"class":39,"line":227},[37,15267,2387],{"class":50},[37,15269,15270,15273,15275],{"class":39,"line":232},[37,15271,15272],{"class":50},"        m_name",[37,15274,55],{"class":54},[37,15276,15277],{"class":50},"name;\n",[37,15279,15280],{"class":39,"line":238},[37,15281,2544],{"class":50},[37,15283,15284],{"class":39,"line":244},[37,15285,15286],{"class":43},"    \u002F\u002F赋值学号\n",[37,15288,15289,15291,15294,15296,15298,15301],{"class":39,"line":250},[37,15290,15250],{"class":54},[37,15292,15293],{"class":2320}," setId",[37,15295,165],{"class":50},[37,15297,533],{"class":54},[37,15299,15300],{"class":159}," id",[37,15302,280],{"class":50},[37,15304,15305],{"class":39,"line":256},[37,15306,2387],{"class":50},[37,15308,15309,15312,15314],{"class":39,"line":261},[37,15310,15311],{"class":50},"        m_id",[37,15313,55],{"class":54},[37,15315,15316],{"class":50},"id;\n",[37,15318,15319],{"class":39,"line":267},[37,15320,2544],{"class":50},[37,15322,15323],{"class":39,"line":283},[37,15324,15325],{"class":43},"    \u002F\u002F打印学生信息\n",[37,15327,15328,15330,15332],{"class":39,"line":288},[37,15329,15250],{"class":54},[37,15331,9956],{"class":2320},[37,15333,2333],{"class":50},[37,15335,15336],{"class":39,"line":294},[37,15337,2387],{"class":50},[37,15339,15340,15342,15344,15347,15349,15352,15354,15356,15358,15361,15363,15366,15368],{"class":39,"line":300},[37,15341,3801],{"class":50},[37,15343,1552],{"class":54},[37,15345,15346],{"class":185},"\"姓名：\"",[37,15348,1552],{"class":54},[37,15350,15351],{"class":50},"m_name",[37,15353,1552],{"class":54},[37,15355,4709],{"class":185},[37,15357,1552],{"class":54},[37,15359,15360],{"class":185},"\"学号：\"",[37,15362,1552],{"class":54},[37,15364,15365],{"class":50},"m_id",[37,15367,1552],{"class":54},[37,15369,1574],{"class":50},[37,15371,15372],{"class":39,"line":306},[37,15373,2544],{"class":50},[37,15375,15376],{"class":39,"line":312},[37,15377,4345],{"class":50},[37,15379,15380,15382,15384],{"class":39,"line":317},[37,15381,533],{"class":54},[37,15383,2330],{"class":2320},[37,15385,2333],{"class":50},[37,15387,15388],{"class":39,"line":323},[37,15389,1922],{"class":50},[37,15391,15392],{"class":39,"line":337},[37,15393,15394],{"class":43},"    \u002F\u002F实例化\n",[37,15396,15397],{"class":39,"line":342},[37,15398,15399],{"class":50},"    Student s1;\n",[37,15401,15402,15405,15408,15410,15412],{"class":39,"line":347},[37,15403,15404],{"class":50},"    s1.",[37,15406,15407],{"class":2320},"setName",[37,15409,165],{"class":50},[37,15411,8264],{"class":185},[37,15413,3069],{"class":50},[37,15415,15416,15418,15421,15423,15426],{"class":39,"line":352},[37,15417,15404],{"class":50},[37,15419,15420],{"class":2320},"setId",[37,15422,165],{"class":50},[37,15424,15425],{"class":61},"123456",[37,15427,3069],{"class":50},[37,15429,15430,15432,15435],{"class":39,"line":357},[37,15431,15404],{"class":50},[37,15433,15434],{"class":2320},"printInfo",[37,15436,5984],{"class":50},[37,15438,15439],{"class":39,"line":362},[37,15440,1941],{"class":50},[14,15442,15443],{},"类中的属性和行为统称为成员",[14,15445,15446],{},"属性：成员属性(成员变量)",[14,15448,15449],{},"方法：成员函数(成员方法)",[14,15451,15452],{},[673,15453,15454],{},"封装意义二：",[14,15456,15457],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15459,15460],{},"访问权限有三种：",[481,15462,15463,15466,15469],{},[484,15464,15465],{},"public        公共权限",[484,15467,15468],{},"protected 保护权限",[484,15470,15471],{},"private      私有权限",[14,15473,15474],{},[673,15475,15476],{},"示例：",[27,15478,15480],{"className":10282,"code":15479,"language":10284,"meta":32,"style":32},"\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",[34,15481,15482,15487,15492,15497,15502,15506,15513,15517,15522,15526,15531,15535,15540,15545,15550,15554,15559,15564,15571,15575,15579,15587,15591,15602,15614,15626,15630,15634,15638,15646,15650,15655,15667,15675,15683,15687,15697,15701,15709],{"__ignoreMap":32},[37,15483,15484],{"class":39,"line":40},[37,15485,15486],{"class":43},"\u002F\u002F三种权限\n",[37,15488,15489],{"class":39,"line":47},[37,15490,15491],{"class":43},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[37,15493,15494],{"class":39,"line":104},[37,15495,15496],{"class":43},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[37,15498,15499],{"class":39,"line":113},[37,15500,15501],{"class":43},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[37,15503,15504],{"class":39,"line":189},[37,15505,2757],{"emptyLinePlaceholder":454},[37,15507,15508,15510],{"class":39,"line":195},[37,15509,15035],{"class":54},[37,15511,15512],{"class":2320}," Person\n",[37,15514,15515],{"class":39,"line":201},[37,15516,1922],{"class":50},[37,15518,15519],{"class":39,"line":207},[37,15520,15521],{"class":43},"    \u002F\u002F姓名  公共权限\n",[37,15523,15524],{"class":39,"line":213},[37,15525,15057],{"class":54},[37,15527,15528],{"class":39,"line":218},[37,15529,15530],{"class":50},"    string m_Name;\n",[37,15532,15533],{"class":39,"line":227},[37,15534,2757],{"emptyLinePlaceholder":454},[37,15536,15537],{"class":39,"line":232},[37,15538,15539],{"class":43},"    \u002F\u002F汽车  保护权限\n",[37,15541,15542],{"class":39,"line":238},[37,15543,15544],{"class":54},"protected:\n",[37,15546,15547],{"class":39,"line":244},[37,15548,15549],{"class":50},"    string m_Car;\n",[37,15551,15552],{"class":39,"line":250},[37,15553,2757],{"emptyLinePlaceholder":454},[37,15555,15556],{"class":39,"line":256},[37,15557,15558],{"class":43},"    \u002F\u002F银行卡密码  私有权限\n",[37,15560,15561],{"class":39,"line":261},[37,15562,15563],{"class":54},"private:\n",[37,15565,15566,15568],{"class":39,"line":267},[37,15567,2342],{"class":54},[37,15569,15570],{"class":50}," m_Password;\n",[37,15572,15573],{"class":39,"line":283},[37,15574,2757],{"emptyLinePlaceholder":454},[37,15576,15577],{"class":39,"line":288},[37,15578,15057],{"class":54},[37,15580,15581,15583,15585],{"class":39,"line":294},[37,15582,15250],{"class":54},[37,15584,11726],{"class":2320},[37,15586,2333],{"class":50},[37,15588,15589],{"class":39,"line":300},[37,15590,2387],{"class":50},[37,15592,15593,15596,15598,15600],{"class":39,"line":306},[37,15594,15595],{"class":50},"        m_Name ",[37,15597,55],{"class":54},[37,15599,9279],{"class":185},[37,15601,1669],{"class":50},[37,15603,15604,15607,15609,15612],{"class":39,"line":312},[37,15605,15606],{"class":50},"        m_Car ",[37,15608,55],{"class":54},[37,15610,15611],{"class":185}," \"拖拉机\"",[37,15613,1669],{"class":50},[37,15615,15616,15619,15621,15624],{"class":39,"line":317},[37,15617,15618],{"class":50},"        m_Password ",[37,15620,55],{"class":54},[37,15622,15623],{"class":61}," 123456",[37,15625,1669],{"class":50},[37,15627,15628],{"class":39,"line":323},[37,15629,2544],{"class":50},[37,15631,15632],{"class":39,"line":337},[37,15633,4345],{"class":50},[37,15635,15636],{"class":39,"line":342},[37,15637,2757],{"emptyLinePlaceholder":454},[37,15639,15640,15642,15644],{"class":39,"line":347},[37,15641,533],{"class":54},[37,15643,2330],{"class":2320},[37,15645,11194],{"class":50},[37,15647,15648],{"class":39,"line":352},[37,15649,2757],{"emptyLinePlaceholder":454},[37,15651,15652],{"class":39,"line":357},[37,15653,15654],{"class":50},"    Person p;\n",[37,15656,15657,15660,15662,15665],{"class":39,"line":362},[37,15658,15659],{"class":50},"    p.m_Name ",[37,15661,55],{"class":54},[37,15663,15664],{"class":185}," \"李四\"",[37,15666,1669],{"class":50},[37,15668,15669,15672],{"class":39,"line":367},[37,15670,15671],{"class":43},"    \u002F\u002Fp.m_Car = \"奔驰\";",[37,15673,15674],{"class":43},"  \u002F\u002F保护权限类外访问不到\n",[37,15676,15677,15680],{"class":39,"line":373},[37,15678,15679],{"class":43},"    \u002F\u002Fp.m_Password = 123;",[37,15681,15682],{"class":43}," \u002F\u002F私有权限类外访问不到\n",[37,15684,15685],{"class":39,"line":392},[37,15686,2757],{"emptyLinePlaceholder":454},[37,15688,15689,15691,15693,15695],{"class":39,"line":398},[37,15690,2660],{"class":2320},[37,15692,165],{"class":50},[37,15694,2665],{"class":185},[37,15696,3069],{"class":50},[37,15698,15699],{"class":39,"line":409},[37,15700,2757],{"emptyLinePlaceholder":454},[37,15702,15703,15705,15707],{"class":39,"line":415},[37,15704,4440],{"class":54},[37,15706,4443],{"class":61},[37,15708,1669],{"class":50},[37,15710,15711],{"class":39,"line":420},[37,15712,1941],{"class":50},[498,15714,15716],{"id":15715},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15718,15719,15720,15723,15724],{},"在C++中 struct和class唯一的",[673,15721,15722],{},"区别","就在于 ",[673,15725,15726],{},"默认的访问权限不同",[14,15728,15729],{},"区别：",[1515,15731,15732,15735],{},[484,15733,15734],{},"struct 默认权限为公共",[484,15736,15737],{},"class   默认权限为私有",[27,15739,15741],{"className":10282,"code":15740,"language":10284,"meta":32,"style":32},"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",[34,15742,15743,15750,15754,15764,15768,15772,15779,15783,15793,15797,15801,15809,15813,15818,15832,15836,15841,15855,15859,15869,15873,15881],{"__ignoreMap":32},[37,15744,15745,15747],{"class":39,"line":40},[37,15746,15035],{"class":54},[37,15748,15749],{"class":2320}," C1\n",[37,15751,15752],{"class":39,"line":47},[37,15753,1922],{"class":50},[37,15755,15756,15758,15761],{"class":39,"line":104},[37,15757,2342],{"class":54},[37,15759,15760],{"class":50},"  m_A;",[37,15762,15763],{"class":43}," \u002F\u002F默认是私有权限\n",[37,15765,15766],{"class":39,"line":113},[37,15767,4345],{"class":50},[37,15769,15770],{"class":39,"line":189},[37,15771,2757],{"emptyLinePlaceholder":454},[37,15773,15774,15776],{"class":39,"line":195},[37,15775,8107],{"class":54},[37,15777,15778],{"class":2320}," C2\n",[37,15780,15781],{"class":39,"line":201},[37,15782,1922],{"class":50},[37,15784,15785,15787,15790],{"class":39,"line":207},[37,15786,2342],{"class":54},[37,15788,15789],{"class":50}," m_A;",[37,15791,15792],{"class":43},"  \u002F\u002F默认是公共权限\n",[37,15794,15795],{"class":39,"line":213},[37,15796,4345],{"class":50},[37,15798,15799],{"class":39,"line":218},[37,15800,2757],{"emptyLinePlaceholder":454},[37,15802,15803,15805,15807],{"class":39,"line":227},[37,15804,533],{"class":54},[37,15806,2330],{"class":2320},[37,15808,11194],{"class":50},[37,15810,15811],{"class":39,"line":232},[37,15812,2757],{"emptyLinePlaceholder":454},[37,15814,15815],{"class":39,"line":238},[37,15816,15817],{"class":50},"    C1 c1;\n",[37,15819,15820,15823,15825,15827,15829],{"class":39,"line":244},[37,15821,15822],{"class":50},"    c1.m_A ",[37,15824,55],{"class":54},[37,15826,2395],{"class":61},[37,15828,582],{"class":50},[37,15830,15831],{"class":43}," \u002F\u002F错误，访问权限是私有\n",[37,15833,15834],{"class":39,"line":250},[37,15835,2757],{"emptyLinePlaceholder":454},[37,15837,15838],{"class":39,"line":256},[37,15839,15840],{"class":50},"    C2 c2;\n",[37,15842,15843,15846,15848,15850,15852],{"class":39,"line":261},[37,15844,15845],{"class":50},"    c2.m_A ",[37,15847,55],{"class":54},[37,15849,2395],{"class":61},[37,15851,582],{"class":50},[37,15853,15854],{"class":43}," \u002F\u002F正确，访问权限是公共\n",[37,15856,15857],{"class":39,"line":267},[37,15858,2757],{"emptyLinePlaceholder":454},[37,15860,15861,15863,15865,15867],{"class":39,"line":283},[37,15862,2660],{"class":2320},[37,15864,165],{"class":50},[37,15866,2665],{"class":185},[37,15868,3069],{"class":50},[37,15870,15871],{"class":39,"line":288},[37,15872,2757],{"emptyLinePlaceholder":454},[37,15874,15875,15877,15879],{"class":39,"line":294},[37,15876,4440],{"class":54},[37,15878,4443],{"class":61},[37,15880,1669],{"class":50},[37,15882,15883],{"class":39,"line":300},[37,15884,1941],{"class":50},[498,15886,15888],{"id":15887},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15890,15891],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15893,15894],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15896,15897],{},[673,15898,15476],{},[27,15900,15902],{"className":10282,"code":15901,"language":10284,"meta":32,"style":32},"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",[34,15903,15904,15914,15918,15922,15927,15941,15950,15954,15964,15968,15975,15979,15983,15987,15992,16001,16008,16012,16017,16033,16056,16069,16076,16080,16089,16093,16097,16102,16118,16128,16132,16136,16140,16148,16152,16162,16166,16174,16178,16182,16190,16194,16198,16203,16216,16239,16243,16248,16261,16283,16287,16292,16306,16314,16318,16328,16332,16340],{"__ignoreMap":32},[37,15905,15906,15908,15911],{"class":39,"line":40},[37,15907,15035],{"class":54},[37,15909,15910],{"class":2320}," Person",[37,15912,15913],{"class":50}," {\n",[37,15915,15916],{"class":39,"line":47},[37,15917,15057],{"class":54},[37,15919,15920],{"class":39,"line":104},[37,15921,2757],{"emptyLinePlaceholder":454},[37,15923,15924],{"class":39,"line":113},[37,15925,15926],{"class":43},"    \u002F\u002F姓名设置可读可写\n",[37,15928,15929,15931,15933,15935,15937,15939],{"class":39,"line":189},[37,15930,15250],{"class":54},[37,15932,15253],{"class":2320},[37,15934,165],{"class":50},[37,15936,15258],{"class":2320},[37,15938,15261],{"class":159},[37,15940,12783],{"class":50},[37,15942,15943,15945,15947],{"class":39,"line":195},[37,15944,15595],{"class":50},[37,15946,55],{"class":54},[37,15948,15949],{"class":50}," name;\n",[37,15951,15952],{"class":39,"line":201},[37,15953,2544],{"class":50},[37,15955,15956,15959,15962],{"class":39,"line":207},[37,15957,15958],{"class":2320},"    string",[37,15960,15961],{"class":2320}," getName",[37,15963,2333],{"class":50},[37,15965,15966],{"class":39,"line":213},[37,15967,2387],{"class":50},[37,15969,15970,15972],{"class":39,"line":218},[37,15971,15093],{"class":54},[37,15973,15974],{"class":50}," m_Name;\n",[37,15976,15977],{"class":39,"line":227},[37,15978,2544],{"class":50},[37,15980,15981],{"class":39,"line":232},[37,15982,2757],{"emptyLinePlaceholder":454},[37,15984,15985],{"class":39,"line":238},[37,15986,2757],{"emptyLinePlaceholder":454},[37,15988,15989],{"class":39,"line":244},[37,15990,15991],{"class":43},"    \u002F\u002F获取年龄 \n",[37,15993,15994,15996,15999],{"class":39,"line":250},[37,15995,2342],{"class":54},[37,15997,15998],{"class":2320}," getAge",[37,16000,11194],{"class":50},[37,16002,16003,16005],{"class":39,"line":256},[37,16004,15093],{"class":54},[37,16006,16007],{"class":50}," m_Age;\n",[37,16009,16010],{"class":39,"line":261},[37,16011,2544],{"class":50},[37,16013,16014],{"class":39,"line":267},[37,16015,16016],{"class":43},"    \u002F\u002F设置年龄\n",[37,16018,16019,16021,16024,16026,16028,16031],{"class":39,"line":283},[37,16020,15250],{"class":54},[37,16022,16023],{"class":2320}," setAge",[37,16025,165],{"class":50},[37,16027,533],{"class":54},[37,16029,16030],{"class":159}," age",[37,16032,12783],{"class":50},[37,16034,16035,16037,16040,16042,16044,16046,16049,16051,16054],{"class":39,"line":288},[37,16036,2854],{"class":54},[37,16038,16039],{"class":50}," (age ",[37,16041,1418],{"class":54},[37,16043,4443],{"class":61},[37,16045,3605],{"class":54},[37,16047,16048],{"class":50}," age ",[37,16050,1468],{"class":54},[37,16052,16053],{"class":61}," 150",[37,16055,12783],{"class":50},[37,16057,16058,16060,16062,16065,16067],{"class":39,"line":294},[37,16059,10060],{"class":50},[37,16061,1552],{"class":54},[37,16063,16064],{"class":185}," \"你个老妖精!\"",[37,16066,1820],{"class":54},[37,16068,9181],{"class":50},[37,16070,16071,16074],{"class":39,"line":300},[37,16072,16073],{"class":54},"            return",[37,16075,1669],{"class":50},[37,16077,16078],{"class":39,"line":306},[37,16079,2886],{"class":50},[37,16081,16082,16085,16087],{"class":39,"line":312},[37,16083,16084],{"class":50},"        m_Age ",[37,16086,55],{"class":54},[37,16088,8145],{"class":50},[37,16090,16091],{"class":39,"line":317},[37,16092,2544],{"class":50},[37,16094,16095],{"class":39,"line":323},[37,16096,2757],{"emptyLinePlaceholder":454},[37,16098,16099],{"class":39,"line":337},[37,16100,16101],{"class":43},"    \u002F\u002F情人设置为只写\n",[37,16103,16104,16106,16109,16111,16113,16116],{"class":39,"line":342},[37,16105,15250],{"class":54},[37,16107,16108],{"class":2320}," setLover",[37,16110,165],{"class":50},[37,16112,15258],{"class":2320},[37,16114,16115],{"class":159}," lover",[37,16117,12783],{"class":50},[37,16119,16120,16123,16125],{"class":39,"line":347},[37,16121,16122],{"class":50},"        m_Lover ",[37,16124,55],{"class":54},[37,16126,16127],{"class":50}," lover;\n",[37,16129,16130],{"class":39,"line":352},[37,16131,2544],{"class":50},[37,16133,16134],{"class":39,"line":357},[37,16135,2757],{"emptyLinePlaceholder":454},[37,16137,16138],{"class":39,"line":362},[37,16139,15563],{"class":54},[37,16141,16142,16145],{"class":39,"line":367},[37,16143,16144],{"class":50},"    string m_Name;",[37,16146,16147],{"class":43}," \u002F\u002F可读可写  姓名\n",[37,16149,16150],{"class":39,"line":373},[37,16151,13551],{"class":50},[37,16153,16154,16156,16159],{"class":39,"line":392},[37,16155,2342],{"class":54},[37,16157,16158],{"class":50}," m_Age;",[37,16160,16161],{"class":43}," \u002F\u002F只读  年龄\n",[37,16163,16164],{"class":39,"line":398},[37,16165,2757],{"emptyLinePlaceholder":454},[37,16167,16168,16171],{"class":39,"line":409},[37,16169,16170],{"class":50},"    string m_Lover;",[37,16172,16173],{"class":43}," \u002F\u002F只写  情人\n",[37,16175,16176],{"class":39,"line":415},[37,16177,4345],{"class":50},[37,16179,16180],{"class":39,"line":420},[37,16181,2757],{"emptyLinePlaceholder":454},[37,16183,16184,16186,16188],{"class":39,"line":425},[37,16185,533],{"class":54},[37,16187,2330],{"class":2320},[37,16189,11194],{"class":50},[37,16191,16192],{"class":39,"line":431},[37,16193,2757],{"emptyLinePlaceholder":454},[37,16195,16196],{"class":39,"line":436},[37,16197,15654],{"class":50},[37,16199,16200],{"class":39,"line":442},[37,16201,16202],{"class":43},"    \u002F\u002F姓名设置\n",[37,16204,16205,16208,16210,16212,16214],{"class":39,"line":8374},[37,16206,16207],{"class":50},"    p.",[37,16209,15407],{"class":2320},[37,16211,165],{"class":50},[37,16213,8264],{"class":185},[37,16215,3069],{"class":50},[37,16217,16218,16220,16222,16225,16227,16230,16233,16235,16237],{"class":39,"line":8386},[37,16219,6877],{"class":50},[37,16221,1552],{"class":54},[37,16223,16224],{"class":185}," \"姓名： \"",[37,16226,1820],{"class":54},[37,16228,16229],{"class":50}," p.",[37,16231,16232],{"class":2320},"getName",[37,16234,13391],{"class":50},[37,16236,1552],{"class":54},[37,16238,9181],{"class":50},[37,16240,16241],{"class":39,"line":8398},[37,16242,2757],{"emptyLinePlaceholder":454},[37,16244,16245],{"class":39,"line":10057},[37,16246,16247],{"class":43},"    \u002F\u002F年龄设置\n",[37,16249,16250,16252,16255,16257,16259],{"class":39,"line":10082},[37,16251,16207],{"class":50},[37,16253,16254],{"class":2320},"setAge",[37,16256,165],{"class":50},[37,16258,1166],{"class":61},[37,16260,3069],{"class":50},[37,16262,16263,16265,16267,16270,16272,16274,16277,16279,16281],{"class":39,"line":10105},[37,16264,6877],{"class":50},[37,16266,1552],{"class":54},[37,16268,16269],{"class":185}," \"年龄： \"",[37,16271,1820],{"class":54},[37,16273,16229],{"class":50},[37,16275,16276],{"class":2320},"getAge",[37,16278,13391],{"class":50},[37,16280,1552],{"class":54},[37,16282,9181],{"class":50},[37,16284,16285],{"class":39,"line":10129},[37,16286,2757],{"emptyLinePlaceholder":454},[37,16288,16289],{"class":39,"line":10134},[37,16290,16291],{"class":43},"    \u002F\u002F情人设置\n",[37,16293,16294,16296,16299,16301,16304],{"class":39,"line":10139},[37,16295,16207],{"class":50},[37,16297,16298],{"class":2320},"setLover",[37,16300,165],{"class":50},[37,16302,16303],{"class":185},"\"苍井\"",[37,16305,3069],{"class":50},[37,16307,16308,16311],{"class":39,"line":10144},[37,16309,16310],{"class":43},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[37,16312,16313],{"class":43},"  \u002F\u002F只写属性，不可以读取\n",[37,16315,16316],{"class":39,"line":10153},[37,16317,2757],{"emptyLinePlaceholder":454},[37,16319,16320,16322,16324,16326],{"class":39,"line":10158},[37,16321,2660],{"class":2320},[37,16323,165],{"class":50},[37,16325,2665],{"class":185},[37,16327,3069],{"class":50},[37,16329,16330],{"class":39,"line":10164},[37,16331,2757],{"emptyLinePlaceholder":454},[37,16333,16334,16336,16338],{"class":39,"line":10185},[37,16335,4440],{"class":54},[37,16337,4443],{"class":61},[37,16339,1669],{"class":50},[37,16341,16342],{"class":39,"line":10191},[37,16343,1941],{"class":50},[498,16345,16347],{"id":16346},"_814封装案例","8.1.4封装案例",[481,16349,16350],{},[484,16351,16352,16355],{},[673,16353,16354],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1515,16357,16358,16361],{},[484,16359,16360],{},"求出立方体的面积和体积",[484,16362,16363],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[27,16365,16367],{"className":519,"code":16366,"language":521,"meta":32,"style":32},"#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",[34,16368,16369,16375,16385,16392,16396,16400,16405,16435,16439,16449,16459,16469,16473,16482,16486,16522,16526,16535,16539,16555,16559,16564,16573,16577,16584,16588,16597,16601,16608,16612,16621,16625,16632,16636,16641,16658,16662,16708,16712,16721,16725,16729,16733,16742,16746,16750,16755,16759,16765,16771,16777,16781,16785,16790,16812,16816,16870,16874,16882,16886,16891,16896,16909,16916,16932,16943,16949,16972,16978,17001,17015,17035,17041,17052,17075,17097,17102,17108,17122,17135,17140,17154,17159,17165,17170,17184,17189,17194,17208,17220,17225,17238,17243,17248,17253,17266,17271],{"__ignoreMap":32},[37,16370,16371,16373],{"class":39,"line":40},[37,16372,2306],{"class":54},[37,16374,2309],{"class":185},[37,16376,16377,16379,16381,16383],{"class":39,"line":47},[37,16378,2314],{"class":54},[37,16380,2317],{"class":54},[37,16382,2321],{"class":2320},[37,16384,1669],{"class":50},[37,16386,16387,16389],{"class":39,"line":104},[37,16388,15035],{"class":54},[37,16390,16391],{"class":2320}," Cube\n",[37,16393,16394],{"class":39,"line":113},[37,16395,1922],{"class":50},[37,16397,16398],{"class":39,"line":189},[37,16399,15057],{"class":54},[37,16401,16402],{"class":39,"line":195},[37,16403,16404],{"class":43},"    \u002F\u002F输入长宽高\n",[37,16406,16407,16409,16412,16414,16416,16419,16421,16423,16426,16428,16430,16433],{"class":39,"line":201},[37,16408,15250],{"class":54},[37,16410,16411],{"class":2320}," setLwh",[37,16413,165],{"class":50},[37,16415,533],{"class":54},[37,16417,16418],{"class":159}," l",[37,16420,65],{"class":50},[37,16422,533],{"class":54},[37,16424,16425],{"class":159}," w",[37,16427,65],{"class":50},[37,16429,533],{"class":54},[37,16431,16432],{"class":159}," h",[37,16434,280],{"class":50},[37,16436,16437],{"class":39,"line":207},[37,16438,2387],{"class":50},[37,16440,16441,16444,16446],{"class":39,"line":213},[37,16442,16443],{"class":50},"        m_L",[37,16445,55],{"class":54},[37,16447,16448],{"class":50},"l;\n",[37,16450,16451,16454,16456],{"class":39,"line":218},[37,16452,16453],{"class":50},"        m_W",[37,16455,55],{"class":54},[37,16457,16458],{"class":50},"w;\n",[37,16460,16461,16464,16466],{"class":39,"line":227},[37,16462,16463],{"class":50},"        m_H",[37,16465,55],{"class":54},[37,16467,16468],{"class":50},"h;\n",[37,16470,16471],{"class":39,"line":232},[37,16472,2544],{"class":50},[37,16474,16475,16477,16480],{"class":39,"line":238},[37,16476,2342],{"class":54},[37,16478,16479],{"class":2320}," mianji",[37,16481,2333],{"class":50},[37,16483,16484],{"class":39,"line":244},[37,16485,2387],{"class":50},[37,16487,16488,16490,16492,16494,16497,16499,16502,16504,16507,16509,16512,16514,16517,16519],{"class":39,"line":250},[37,16489,15093],{"class":54},[37,16491,15096],{"class":61},[37,16493,967],{"class":54},[37,16495,16496],{"class":50},"(m_L",[37,16498,967],{"class":54},[37,16500,16501],{"class":50},"m_W ",[37,16503,993],{"class":54},[37,16505,16506],{"class":50}," m_L",[37,16508,967],{"class":54},[37,16510,16511],{"class":50},"m_H ",[37,16513,993],{"class":54},[37,16515,16516],{"class":50}," m_W",[37,16518,967],{"class":54},[37,16520,16521],{"class":50},"m_H);\n",[37,16523,16524],{"class":39,"line":256},[37,16525,2544],{"class":50},[37,16527,16528,16530,16533],{"class":39,"line":261},[37,16529,2342],{"class":54},[37,16531,16532],{"class":2320}," tiji",[37,16534,2333],{"class":50},[37,16536,16537],{"class":39,"line":267},[37,16538,2387],{"class":50},[37,16540,16541,16543,16545,16547,16550,16552],{"class":39,"line":283},[37,16542,15093],{"class":54},[37,16544,16506],{"class":50},[37,16546,967],{"class":54},[37,16548,16549],{"class":50},"m_W",[37,16551,967],{"class":54},[37,16553,16554],{"class":50},"m_H;\n",[37,16556,16557],{"class":39,"line":288},[37,16558,2544],{"class":50},[37,16560,16561],{"class":39,"line":294},[37,16562,16563],{"class":43},"    \u002F\u002F获取长宽高\n",[37,16565,16566,16568,16571],{"class":39,"line":300},[37,16567,2342],{"class":54},[37,16569,16570],{"class":2320}," getLength",[37,16572,2333],{"class":50},[37,16574,16575],{"class":39,"line":306},[37,16576,2387],{"class":50},[37,16578,16579,16581],{"class":39,"line":312},[37,16580,15093],{"class":54},[37,16582,16583],{"class":50}," m_L;\n",[37,16585,16586],{"class":39,"line":317},[37,16587,2544],{"class":50},[37,16589,16590,16592,16595],{"class":39,"line":323},[37,16591,2342],{"class":54},[37,16593,16594],{"class":2320}," getWidth",[37,16596,2333],{"class":50},[37,16598,16599],{"class":39,"line":337},[37,16600,2387],{"class":50},[37,16602,16603,16605],{"class":39,"line":342},[37,16604,15093],{"class":54},[37,16606,16607],{"class":50}," m_W;\n",[37,16609,16610],{"class":39,"line":347},[37,16611,2544],{"class":50},[37,16613,16614,16616,16619],{"class":39,"line":352},[37,16615,2342],{"class":54},[37,16617,16618],{"class":2320}," getHeight",[37,16620,2333],{"class":50},[37,16622,16623],{"class":39,"line":357},[37,16624,2387],{"class":50},[37,16626,16627,16629],{"class":39,"line":362},[37,16628,15093],{"class":54},[37,16630,16631],{"class":50}," m_H;\n",[37,16633,16634],{"class":39,"line":367},[37,16635,2544],{"class":50},[37,16637,16638],{"class":39,"line":373},[37,16639,16640],{"class":43},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[37,16642,16643,16646,16649,16651,16654,16656],{"class":39,"line":392},[37,16644,16645],{"class":54},"    bool",[37,16647,16648],{"class":2320}," isEqual",[37,16650,165],{"class":50},[37,16652,16653],{"class":2320},"Cube",[37,16655,3199],{"class":159},[37,16657,280],{"class":50},[37,16659,16660],{"class":39,"line":398},[37,16661,2387],{"class":50},[37,16663,16664,16666,16669,16672,16674,16676,16679,16681,16684,16687,16689,16691,16694,16696,16698,16701,16703,16705],{"class":39,"line":409},[37,16665,2854],{"class":54},[37,16667,16668],{"class":50}," (c.",[37,16670,16671],{"class":2320},"getLength",[37,16673,13391],{"class":50},[37,16675,3299],{"class":54},[37,16677,16678],{"class":50}," m_L ",[37,16680,2080],{"class":54},[37,16682,16683],{"class":50}," c.",[37,16685,16686],{"class":2320},"getWidth",[37,16688,13391],{"class":50},[37,16690,3299],{"class":54},[37,16692,16693],{"class":50}," m_W ",[37,16695,2080],{"class":54},[37,16697,16683],{"class":50},[37,16699,16700],{"class":2320},"getHeight",[37,16702,13391],{"class":50},[37,16704,3299],{"class":54},[37,16706,16707],{"class":50}," m_H)\n",[37,16709,16710],{"class":39,"line":415},[37,16711,2867],{"class":50},[37,16713,16714,16716,16719],{"class":39,"line":420},[37,16715,16073],{"class":54},[37,16717,16718],{"class":61}," true",[37,16720,1669],{"class":50},[37,16722,16723],{"class":39,"line":425},[37,16724,2886],{"class":50},[37,16726,16727],{"class":39,"line":431},[37,16728,2927],{"class":54},[37,16730,16731],{"class":39,"line":436},[37,16732,2867],{"class":50},[37,16734,16735,16737,16740],{"class":39,"line":442},[37,16736,16073],{"class":54},[37,16738,16739],{"class":61}," false",[37,16741,1669],{"class":50},[37,16743,16744],{"class":39,"line":8374},[37,16745,2886],{"class":50},[37,16747,16748],{"class":39,"line":8386},[37,16749,2544],{"class":50},[37,16751,16752],{"class":39,"line":8398},[37,16753,16754],{"class":43},"    \u002F\u002F私有属性\n",[37,16756,16757],{"class":39,"line":10057},[37,16758,15563],{"class":54},[37,16760,16761,16763],{"class":39,"line":10082},[37,16762,2342],{"class":54},[37,16764,16583],{"class":50},[37,16766,16767,16769],{"class":39,"line":10105},[37,16768,2342],{"class":54},[37,16770,16607],{"class":50},[37,16772,16773,16775],{"class":39,"line":10129},[37,16774,2342],{"class":54},[37,16776,16631],{"class":50},[37,16778,16779],{"class":39,"line":10134},[37,16780,2757],{"emptyLinePlaceholder":454},[37,16782,16783],{"class":39,"line":10139},[37,16784,4345],{"class":50},[37,16786,16787],{"class":39,"line":10144},[37,16788,16789],{"class":43},"\u002F\u002F全局函数判断两个立方体是否相等\n",[37,16791,16792,16794,16796,16798,16800,16803,16805,16807,16810],{"class":39,"line":10153},[37,16793,1730],{"class":54},[37,16795,16648],{"class":2320},[37,16797,165],{"class":50},[37,16799,16653],{"class":2320},[37,16801,16802],{"class":159}," c1",[37,16804,65],{"class":50},[37,16806,16653],{"class":2320},[37,16808,16809],{"class":159}," c2",[37,16811,280],{"class":50},[37,16813,16814],{"class":39,"line":10158},[37,16815,1922],{"class":50},[37,16817,16818,16820,16823,16825,16827,16829,16832,16834,16837,16839,16841,16843,16845,16847,16849,16851,16853,16855,16857,16859,16861,16863,16865,16867],{"class":39,"line":10164},[37,16819,4440],{"class":54},[37,16821,16822],{"class":50}," (c1.",[37,16824,16671],{"class":2320},[37,16826,13391],{"class":50},[37,16828,3299],{"class":54},[37,16830,16831],{"class":50}," c2.",[37,16833,16671],{"class":2320},[37,16835,16836],{"class":50},"()) ",[37,16838,2080],{"class":54},[37,16840,16822],{"class":50},[37,16842,16686],{"class":2320},[37,16844,13391],{"class":50},[37,16846,3299],{"class":54},[37,16848,16831],{"class":50},[37,16850,16686],{"class":2320},[37,16852,16836],{"class":50},[37,16854,2080],{"class":54},[37,16856,16822],{"class":50},[37,16858,16700],{"class":2320},[37,16860,13391],{"class":50},[37,16862,3299],{"class":54},[37,16864,16831],{"class":50},[37,16866,16700],{"class":2320},[37,16868,16869],{"class":50},"());\n",[37,16871,16872],{"class":39,"line":10185},[37,16873,1941],{"class":50},[37,16875,16876,16878,16880],{"class":39,"line":10191},[37,16877,533],{"class":54},[37,16879,2330],{"class":2320},[37,16881,2333],{"class":50},[37,16883,16884],{"class":39,"line":10205},[37,16885,1922],{"class":50},[37,16887,16888],{"class":39,"line":10211},[37,16889,16890],{"class":50},"    Cube c1;\n",[37,16892,16893],{"class":39,"line":10238},[37,16894,16895],{"class":43},"    \u002F\u002F输入立方体的长宽高\n",[37,16897,16898,16900,16902,16905,16907],{"class":39,"line":10247},[37,16899,1927],{"class":50},[37,16901,1552],{"class":54},[37,16903,16904],{"class":185},"\"请输入第一个立方体的长、宽、高：\"",[37,16906,1552],{"class":54},[37,16908,1574],{"class":50},[37,16910,16911,16913],{"class":39,"line":10253},[37,16912,2342],{"class":54},[37,16914,16915],{"class":50}," l,w,h,l1,w1,h1;\n",[37,16917,16918,16920,16922,16924,16926,16928,16930],{"class":39,"line":10261},[37,16919,2369],{"class":50},[37,16921,1805],{"class":54},[37,16923,1029],{"class":50},[37,16925,1805],{"class":54},[37,16927,1304],{"class":50},[37,16929,1805],{"class":54},[37,16931,16468],{"class":50},[37,16933,16934,16937,16940],{"class":39,"line":10266},[37,16935,16936],{"class":50},"    c1.",[37,16938,16939],{"class":2320},"setLwh",[37,16941,16942],{"class":50},"(l,w,h);\n",[37,16944,16946],{"class":39,"line":16945},66,[37,16947,16948],{"class":43},"    \u002F\u002F面积\n",[37,16950,16952,16954,16956,16959,16961,16963,16966,16968,16970],{"class":39,"line":16951},67,[37,16953,1927],{"class":50},[37,16955,1552],{"class":54},[37,16957,16958],{"class":185},"\"立方体的表面积为：\"",[37,16960,1552],{"class":54},[37,16962,15171],{"class":50},[37,16964,16965],{"class":2320},"mianji",[37,16967,2784],{"class":50},[37,16969,1552],{"class":54},[37,16971,1574],{"class":50},[37,16973,16975],{"class":39,"line":16974},68,[37,16976,16977],{"class":43},"    \u002F\u002F体积\n",[37,16979,16981,16983,16985,16988,16990,16992,16995,16997,16999],{"class":39,"line":16980},69,[37,16982,1927],{"class":50},[37,16984,1552],{"class":54},[37,16986,16987],{"class":185},"\"立方体的体积为：\"",[37,16989,1552],{"class":54},[37,16991,15171],{"class":50},[37,16993,16994],{"class":2320},"tiji",[37,16996,2784],{"class":50},[37,16998,1552],{"class":54},[37,17000,1574],{"class":50},[37,17002,17004,17006,17008,17011,17013],{"class":39,"line":17003},70,[37,17005,1927],{"class":50},[37,17007,1552],{"class":54},[37,17009,17010],{"class":185},"\"请输入第二个立方体的长、宽、高：\"",[37,17012,1552],{"class":54},[37,17014,1574],{"class":50},[37,17016,17018,17020,17022,17025,17027,17030,17032],{"class":39,"line":17017},71,[37,17019,2369],{"class":50},[37,17021,1805],{"class":54},[37,17023,17024],{"class":50},"l1",[37,17026,1805],{"class":54},[37,17028,17029],{"class":50},"w1",[37,17031,1805],{"class":54},[37,17033,17034],{"class":50},"h1;\n",[37,17036,17038],{"class":39,"line":17037},72,[37,17039,17040],{"class":50},"    Cube c2;\n",[37,17042,17044,17047,17049],{"class":39,"line":17043},73,[37,17045,17046],{"class":50},"    c2.",[37,17048,16939],{"class":2320},[37,17050,17051],{"class":50},"(l1,w1,h1);\n",[37,17053,17055,17057,17059,17062,17064,17067,17069,17071,17073],{"class":39,"line":17054},74,[37,17056,1927],{"class":50},[37,17058,1552],{"class":54},[37,17060,17061],{"class":185},"\"第二个立方体的表面积为：\"",[37,17063,1552],{"class":54},[37,17065,17066],{"class":50},"c2.",[37,17068,16965],{"class":2320},[37,17070,2784],{"class":50},[37,17072,1552],{"class":54},[37,17074,1574],{"class":50},[37,17076,17078,17080,17082,17085,17087,17089,17091,17093,17095],{"class":39,"line":17077},75,[37,17079,1927],{"class":50},[37,17081,1552],{"class":54},[37,17083,17084],{"class":185},"\"第二个立方体的体积为：\"",[37,17086,1552],{"class":54},[37,17088,17066],{"class":50},[37,17090,16994],{"class":2320},[37,17092,2784],{"class":50},[37,17094,1552],{"class":54},[37,17096,1574],{"class":50},[37,17098,17100],{"class":39,"line":17099},76,[37,17101,2757],{"emptyLinePlaceholder":454},[37,17103,17105],{"class":39,"line":17104},77,[37,17106,17107],{"class":43},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[37,17109,17111,17113,17115,17118,17120],{"class":39,"line":17110},78,[37,17112,1927],{"class":50},[37,17114,1552],{"class":54},[37,17116,17117],{"class":185},"\"内部函数判断结果：\"",[37,17119,1552],{"class":54},[37,17121,1574],{"class":50},[37,17123,17125,17127,17129,17132],{"class":39,"line":17124},79,[37,17126,3451],{"class":54},[37,17128,16822],{"class":50},[37,17130,17131],{"class":2320},"isEqual",[37,17133,17134],{"class":50},"(c2))\n",[37,17136,17138],{"class":39,"line":17137},80,[37,17139,2387],{"class":50},[37,17141,17143,17145,17147,17150,17152],{"class":39,"line":17142},81,[37,17144,3801],{"class":50},[37,17146,1552],{"class":54},[37,17148,17149],{"class":185},"\"两个立方体相等\"",[37,17151,1552],{"class":54},[37,17153,1574],{"class":50},[37,17155,17157],{"class":39,"line":17156},82,[37,17158,2544],{"class":50},[37,17160,17162],{"class":39,"line":17161},83,[37,17163,17164],{"class":54},"    else\n",[37,17166,17168],{"class":39,"line":17167},84,[37,17169,2387],{"class":50},[37,17171,17173,17175,17177,17180,17182],{"class":39,"line":17172},85,[37,17174,3801],{"class":50},[37,17176,1552],{"class":54},[37,17178,17179],{"class":185},"\"两个立方体不相等\"",[37,17181,1552],{"class":54},[37,17183,1574],{"class":50},[37,17185,17187],{"class":39,"line":17186},86,[37,17188,2544],{"class":50},[37,17190,17192],{"class":39,"line":17191},87,[37,17193,2757],{"emptyLinePlaceholder":454},[37,17195,17197,17199,17201,17204,17206],{"class":39,"line":17196},88,[37,17198,1927],{"class":50},[37,17200,1552],{"class":54},[37,17202,17203],{"class":185},"\"全局函数判断结果：\"",[37,17205,1552],{"class":54},[37,17207,1574],{"class":50},[37,17209,17211,17213,17215,17217],{"class":39,"line":17210},89,[37,17212,3451],{"class":54},[37,17214,2027],{"class":50},[37,17216,17131],{"class":2320},[37,17218,17219],{"class":50},"(c1, c2))\n",[37,17221,17223],{"class":39,"line":17222},90,[37,17224,2387],{"class":50},[37,17226,17228,17230,17232,17234,17236],{"class":39,"line":17227},91,[37,17229,3801],{"class":50},[37,17231,1552],{"class":54},[37,17233,17149],{"class":185},[37,17235,1552],{"class":54},[37,17237,1574],{"class":50},[37,17239,17241],{"class":39,"line":17240},92,[37,17242,2544],{"class":50},[37,17244,17246],{"class":39,"line":17245},93,[37,17247,17164],{"class":54},[37,17249,17251],{"class":39,"line":17250},94,[37,17252,2387],{"class":50},[37,17254,17256,17258,17260,17262,17264],{"class":39,"line":17255},95,[37,17257,3801],{"class":50},[37,17259,1552],{"class":54},[37,17261,17179],{"class":185},[37,17263,1552],{"class":54},[37,17265,1574],{"class":50},[37,17267,17269],{"class":39,"line":17268},96,[37,17270,2544],{"class":50},[37,17272,17274],{"class":39,"line":17273},97,[37,17275,1941],{"class":50},[481,17277,17278],{"start":47},[484,17279,17280],{},[673,17281,17282],{},"练习案例2：点和圆的关系",[1515,17284,17285],{},[484,17286,17287],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[27,17289,17291],{"className":519,"code":17290,"language":521,"meta":32,"style":32},"#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",[34,17292,17293,17299,17309,17316,17323,17327,17331,17336,17370,17375,17391,17405,17409,17413,17420,17427,17431,17437,17441,17445,17449,17471,17494,17499,17513,17528,17532,17536,17542,17547,17552,17556,17582,17586,17616,17644,17672,17689,17693,17706,17710,17714,17718,17731,17735,17739,17747,17751,17755,17759,17764,17768,17779,17786,17795,17805,17816,17823,17836,17847,17857,17868,17875,17889,17894,17904,17912],{"__ignoreMap":32},[37,17294,17295,17297],{"class":39,"line":40},[37,17296,2306],{"class":54},[37,17298,2309],{"class":185},[37,17300,17301,17303,17305,17307],{"class":39,"line":47},[37,17302,2314],{"class":54},[37,17304,2317],{"class":54},[37,17306,2321],{"class":2320},[37,17308,1669],{"class":50},[37,17310,17311,17313],{"class":39,"line":104},[37,17312,2306],{"class":54},[37,17314,17315],{"class":185},"\u003Ccmath>\n",[37,17317,17318,17320],{"class":39,"line":113},[37,17319,15035],{"class":54},[37,17321,17322],{"class":2320}," Point\n",[37,17324,17325],{"class":39,"line":189},[37,17326,1922],{"class":50},[37,17328,17329],{"class":39,"line":195},[37,17330,15057],{"class":54},[37,17332,17333],{"class":39,"line":201},[37,17334,17335],{"class":43},"    \u002F\u002F赋值\n",[37,17337,17338,17340,17343,17345,17347,17350,17352,17354,17357,17360,17362,17365,17367],{"class":39,"line":207},[37,17339,15250],{"class":54},[37,17341,17342],{"class":2320}," setPoint",[37,17344,165],{"class":50},[37,17346,14378],{"class":54},[37,17348,17349],{"class":159}," x",[37,17351,12776],{"class":50},[37,17353,14378],{"class":54},[37,17355,17356],{"class":159}," y",[37,17358,17359],{"class":50},") { m_x ",[37,17361,55],{"class":54},[37,17363,17364],{"class":50}," x; m_y ",[37,17366,55],{"class":54},[37,17368,17369],{"class":50}," y; }\n",[37,17371,17372],{"class":39,"line":213},[37,17373,17374],{"class":43},"    \u002F\u002F获取坐标\n",[37,17376,17377,17379,17382,17385,17388],{"class":39,"line":218},[37,17378,15079],{"class":54},[37,17380,17381],{"class":2320}," getX",[37,17383,17384],{"class":50},"() { ",[37,17386,17387],{"class":54},"return",[37,17389,17390],{"class":50}," m_x; }\n",[37,17392,17393,17395,17398,17400,17402],{"class":39,"line":227},[37,17394,15079],{"class":54},[37,17396,17397],{"class":2320}," getY",[37,17399,17384],{"class":50},[37,17401,17387],{"class":54},[37,17403,17404],{"class":50}," m_y; }\n",[37,17406,17407],{"class":39,"line":232},[37,17408,2757],{"emptyLinePlaceholder":454},[37,17410,17411],{"class":39,"line":238},[37,17412,15563],{"class":54},[37,17414,17415,17417],{"class":39,"line":244},[37,17416,15079],{"class":54},[37,17418,17419],{"class":50}," m_x;\n",[37,17421,17422,17424],{"class":39,"line":250},[37,17423,15079],{"class":54},[37,17425,17426],{"class":50}," m_y;\n",[37,17428,17429],{"class":39,"line":256},[37,17430,4345],{"class":50},[37,17432,17433,17435],{"class":39,"line":261},[37,17434,15035],{"class":54},[37,17436,15038],{"class":2320},[37,17438,17439],{"class":39,"line":267},[37,17440,1922],{"class":50},[37,17442,17443],{"class":39,"line":283},[37,17444,15057],{"class":54},[37,17446,17447],{"class":39,"line":288},[37,17448,17335],{"class":43},[37,17450,17451,17453,17456,17458,17460,17463,17466,17468],{"class":39,"line":294},[37,17452,15250],{"class":54},[37,17454,17455],{"class":2320}," setRadius",[37,17457,165],{"class":50},[37,17459,14378],{"class":54},[37,17461,17462],{"class":159}," r",[37,17464,17465],{"class":50},") { m_r ",[37,17467,55],{"class":54},[37,17469,17470],{"class":50}," r; }\n",[37,17472,17473,17475,17478,17480,17483,17486,17489,17491],{"class":39,"line":300},[37,17474,15250],{"class":54},[37,17476,17477],{"class":2320}," setCenter",[37,17479,165],{"class":50},[37,17481,17482],{"class":2320},"Point",[37,17484,17485],{"class":159}," center",[37,17487,17488],{"class":50},") { m_center ",[37,17490,55],{"class":54},[37,17492,17493],{"class":50}," center; }\n",[37,17495,17496],{"class":39,"line":306},[37,17497,17498],{"class":43},"    \u002F\u002F获取属性\n",[37,17500,17501,17503,17506,17508,17510],{"class":39,"line":312},[37,17502,15079],{"class":54},[37,17504,17505],{"class":2320}," getRadius",[37,17507,17384],{"class":50},[37,17509,17387],{"class":54},[37,17511,17512],{"class":50}," m_r; }\n",[37,17514,17515,17518,17521,17523,17525],{"class":39,"line":317},[37,17516,17517],{"class":2320},"    Point",[37,17519,17520],{"class":2320}," getCenter",[37,17522,17384],{"class":50},[37,17524,17387],{"class":54},[37,17526,17527],{"class":50}," m_center; }\n",[37,17529,17530],{"class":39,"line":323},[37,17531,2757],{"emptyLinePlaceholder":454},[37,17533,17534],{"class":39,"line":337},[37,17535,15563],{"class":54},[37,17537,17538,17540],{"class":39,"line":342},[37,17539,15079],{"class":54},[37,17541,15069],{"class":50},[37,17543,17544],{"class":39,"line":347},[37,17545,17546],{"class":43},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[37,17548,17549],{"class":39,"line":352},[37,17550,17551],{"class":50},"    Point m_center;\n",[37,17553,17554],{"class":39,"line":357},[37,17555,4345],{"class":50},[37,17557,17558,17560,17563,17565,17568,17570,17572,17574,17576,17578,17580],{"class":39,"line":362},[37,17559,5712],{"class":54},[37,17561,17562],{"class":2320}," isInCircle",[37,17564,165],{"class":50},[37,17566,17567],{"class":2320},"Circle",[37,17569,10925],{"class":54},[37,17571,807],{"class":159},[37,17573,65],{"class":50},[37,17575,17482],{"class":2320},[37,17577,10925],{"class":54},[37,17579,14],{"class":159},[37,17581,280],{"class":50},[37,17583,17584],{"class":39,"line":367},[37,17585,1922],{"class":50},[37,17587,17588,17590,17593,17595,17597,17600,17603,17606,17608,17610,17612,17614],{"class":39,"line":373},[37,17589,15079],{"class":54},[37,17591,17592],{"class":50}," dx ",[37,17594,55],{"class":54},[37,17596,16683],{"class":50},[37,17598,17599],{"class":2320},"getCenter",[37,17601,17602],{"class":50},"().",[37,17604,17605],{"class":2320},"getX",[37,17607,13391],{"class":50},[37,17609,384],{"class":54},[37,17611,16229],{"class":50},[37,17613,17605],{"class":2320},[37,17615,5984],{"class":50},[37,17617,17618,17620,17623,17625,17627,17629,17631,17634,17636,17638,17640,17642],{"class":39,"line":392},[37,17619,15079],{"class":54},[37,17621,17622],{"class":50}," dy ",[37,17624,55],{"class":54},[37,17626,16683],{"class":50},[37,17628,17599],{"class":2320},[37,17630,17602],{"class":50},[37,17632,17633],{"class":2320},"getY",[37,17635,13391],{"class":50},[37,17637,384],{"class":54},[37,17639,16229],{"class":50},[37,17641,17633],{"class":2320},[37,17643,5984],{"class":50},[37,17645,17646,17648,17651,17653,17656,17659,17661,17663,17665,17667,17669],{"class":39,"line":398},[37,17647,15079],{"class":54},[37,17649,17650],{"class":50}," distance ",[37,17652,55],{"class":54},[37,17654,17655],{"class":2320}," sqrt",[37,17657,17658],{"class":50},"(dx ",[37,17660,967],{"class":54},[37,17662,17592],{"class":50},[37,17664,993],{"class":54},[37,17666,17622],{"class":50},[37,17668,967],{"class":54},[37,17670,17671],{"class":50}," dy);\n",[37,17673,17674,17676,17679,17681,17683,17686],{"class":39,"line":409},[37,17675,3451],{"class":54},[37,17677,17678],{"class":50}," (distance ",[37,17680,1418],{"class":54},[37,17682,16683],{"class":50},[37,17684,17685],{"class":2320},"getRadius",[37,17687,17688],{"class":50},"())\n",[37,17690,17691],{"class":39,"line":415},[37,17692,2387],{"class":50},[37,17694,17695,17697,17699,17702,17704],{"class":39,"line":420},[37,17696,10010],{"class":50},[37,17698,1552],{"class":54},[37,17700,17701],{"class":185}," \"点在圆内\"",[37,17703,1820],{"class":54},[37,17705,9181],{"class":50},[37,17707,17708],{"class":39,"line":425},[37,17709,2544],{"class":50},[37,17711,17712],{"class":39,"line":431},[37,17713,17164],{"class":54},[37,17715,17716],{"class":39,"line":436},[37,17717,2387],{"class":50},[37,17719,17720,17722,17724,17727,17729],{"class":39,"line":442},[37,17721,10010],{"class":50},[37,17723,1552],{"class":54},[37,17725,17726],{"class":185}," \"点在圆外\"",[37,17728,1820],{"class":54},[37,17730,9181],{"class":50},[37,17732,17733],{"class":39,"line":8374},[37,17734,2544],{"class":50},[37,17736,17737],{"class":39,"line":8386},[37,17738,1941],{"class":50},[37,17740,17741,17743,17745],{"class":39,"line":8398},[37,17742,533],{"class":54},[37,17744,2330],{"class":2320},[37,17746,2333],{"class":50},[37,17748,17749],{"class":39,"line":10057},[37,17750,1922],{"class":50},[37,17752,17753],{"class":39,"line":10082},[37,17754,15394],{"class":43},[37,17756,17757],{"class":39,"line":10105},[37,17758,15141],{"class":50},[37,17760,17761],{"class":39,"line":10129},[37,17762,17763],{"class":50},"    Point p1;\n",[37,17765,17766],{"class":39,"line":10134},[37,17767,17335],{"class":43},[37,17769,17770,17772,17774,17777],{"class":39,"line":10139},[37,17771,1927],{"class":50},[37,17773,1552],{"class":54},[37,17775,17776],{"class":185},"\"请输入圆的半径：\"",[37,17778,1669],{"class":50},[37,17780,17781,17783],{"class":39,"line":10144},[37,17782,15079],{"class":54},[37,17784,17785],{"class":50}," r;\n",[37,17787,17788,17790,17792],{"class":39,"line":10153},[37,17789,2369],{"class":50},[37,17791,1805],{"class":54},[37,17793,17794],{"class":50},"r;\n",[37,17796,17797,17799,17802],{"class":39,"line":10158},[37,17798,16936],{"class":50},[37,17800,17801],{"class":2320},"setRadius",[37,17803,17804],{"class":50},"(r);\n",[37,17806,17807,17809,17811,17814],{"class":39,"line":10164},[37,17808,1927],{"class":50},[37,17810,1552],{"class":54},[37,17812,17813],{"class":185},"\"请输入圆心坐标：\"",[37,17815,1669],{"class":50},[37,17817,17818,17820],{"class":39,"line":10185},[37,17819,15079],{"class":54},[37,17821,17822],{"class":50}," x, y;\n",[37,17824,17825,17827,17829,17831,17833],{"class":39,"line":10191},[37,17826,2369],{"class":50},[37,17828,1805],{"class":54},[37,17830,1329],{"class":50},[37,17832,1805],{"class":54},[37,17834,17835],{"class":50},"y;\n",[37,17837,17838,17841,17844],{"class":39,"line":10205},[37,17839,17840],{"class":50},"    p1.",[37,17842,17843],{"class":2320},"setPoint",[37,17845,17846],{"class":50},"(x, y);\n",[37,17848,17849,17851,17854],{"class":39,"line":10211},[37,17850,16936],{"class":50},[37,17852,17853],{"class":2320},"setCenter",[37,17855,17856],{"class":50},"(p1);\n",[37,17858,17859,17861,17863,17866],{"class":39,"line":10238},[37,17860,1927],{"class":50},[37,17862,1552],{"class":54},[37,17864,17865],{"class":185},"\"请输入测试点坐标：\"",[37,17867,1669],{"class":50},[37,17869,17870,17872],{"class":39,"line":10247},[37,17871,15079],{"class":54},[37,17873,17874],{"class":50}," x1, y1;\n",[37,17876,17877,17879,17881,17884,17886],{"class":39,"line":10253},[37,17878,2369],{"class":50},[37,17880,1805],{"class":54},[37,17882,17883],{"class":50},"x1",[37,17885,1805],{"class":54},[37,17887,17888],{"class":50},"y1;\n",[37,17890,17891],{"class":39,"line":10261},[37,17892,17893],{"class":50},"    Point p2;\n",[37,17895,17896,17899,17901],{"class":39,"line":10266},[37,17897,17898],{"class":50},"    p2.",[37,17900,17843],{"class":2320},[37,17902,17903],{"class":50},"(x1, y1);\n",[37,17905,17906,17909],{"class":39,"line":16945},[37,17907,17908],{"class":2320},"    isInCircle",[37,17910,17911],{"class":50},"(c1, p2);\n",[37,17913,17914],{"class":39,"line":16951},[37,17915,1941],{"class":50},[14,17917,17918],{},"在类中可以让另一个类作为本来的成员",[14,17920,17921],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17923,17924],{},"创建point.h",[27,17926,17928],{"className":519,"code":17927,"language":521,"meta":32,"style":32},"#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",[34,17929,17930,17941,17947,17957,17963,17967,17972,17976,17980,18000,18004,18012,18020,18024,18028,18034,18040],{"__ignoreMap":32},[37,17931,17932,17935,17938],{"class":39,"line":40},[37,17933,17934],{"class":54},"#pragma",[37,17936,17937],{"class":2320}," once",[37,17939,17940],{"class":43}," \u002F\u002F防止头文件重复包含\n",[37,17942,17943,17945],{"class":39,"line":47},[37,17944,2306],{"class":54},[37,17946,2309],{"class":185},[37,17948,17949,17951,17953,17955],{"class":39,"line":104},[37,17950,2314],{"class":54},[37,17952,2317],{"class":54},[37,17954,2321],{"class":2320},[37,17956,1669],{"class":50},[37,17958,17959,17961],{"class":39,"line":113},[37,17960,15035],{"class":54},[37,17962,17322],{"class":2320},[37,17964,17965],{"class":39,"line":189},[37,17966,1922],{"class":50},[37,17968,17969],{"class":39,"line":195},[37,17970,17971],{"class":43},"\u002F\u002F做好声明与变量定义就可以\n",[37,17973,17974],{"class":39,"line":201},[37,17975,15057],{"class":54},[37,17977,17978],{"class":39,"line":207},[37,17979,17335],{"class":43},[37,17981,17982,17984,17986,17988,17990,17992,17994,17996,17998],{"class":39,"line":213},[37,17983,15250],{"class":54},[37,17985,17342],{"class":2320},[37,17987,165],{"class":50},[37,17989,14378],{"class":54},[37,17991,17349],{"class":159},[37,17993,12776],{"class":50},[37,17995,14378],{"class":54},[37,17997,17356],{"class":159},[37,17999,3069],{"class":50},[37,18001,18002],{"class":39,"line":218},[37,18003,17374],{"class":43},[37,18005,18006,18008,18010],{"class":39,"line":227},[37,18007,15079],{"class":54},[37,18009,17381],{"class":2320},[37,18011,5984],{"class":50},[37,18013,18014,18016,18018],{"class":39,"line":232},[37,18015,15079],{"class":54},[37,18017,17397],{"class":2320},[37,18019,5984],{"class":50},[37,18021,18022],{"class":39,"line":238},[37,18023,2757],{"emptyLinePlaceholder":454},[37,18025,18026],{"class":39,"line":244},[37,18027,15563],{"class":54},[37,18029,18030,18032],{"class":39,"line":250},[37,18031,15079],{"class":54},[37,18033,17419],{"class":50},[37,18035,18036,18038],{"class":39,"line":256},[37,18037,15079],{"class":54},[37,18039,17426],{"class":50},[37,18041,18042],{"class":39,"line":261},[37,18043,4345],{"class":50},[14,18045,18046],{},"创建point.cpp",[27,18048,18050],{"className":519,"code":18049,"language":521,"meta":32,"style":32},"#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",[34,18051,18052,18059,18064,18098,18102,18118],{"__ignoreMap":32},[37,18053,18054,18056],{"class":39,"line":40},[37,18055,2306],{"class":54},[37,18057,18058],{"class":185},"\u003Cpoint.h>\n",[37,18060,18061],{"class":39,"line":47},[37,18062,18063],{"class":43},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[37,18065,18066,18068,18071,18074,18076,18078,18080,18082,18084,18086,18088,18090,18092,18094,18096],{"class":39,"line":104},[37,18067,15250],{"class":54},[37,18069,18070],{"class":2320}," Point",[37,18072,18073],{"class":50},"::",[37,18075,17843],{"class":2320},[37,18077,165],{"class":50},[37,18079,14378],{"class":54},[37,18081,17349],{"class":159},[37,18083,12776],{"class":50},[37,18085,14378],{"class":54},[37,18087,17356],{"class":159},[37,18089,17359],{"class":50},[37,18091,55],{"class":54},[37,18093,17364],{"class":50},[37,18095,55],{"class":54},[37,18097,17369],{"class":50},[37,18099,18100],{"class":39,"line":113},[37,18101,17374],{"class":43},[37,18103,18104,18106,18108,18110,18112,18114,18116],{"class":39,"line":189},[37,18105,15079],{"class":54},[37,18107,18070],{"class":2320},[37,18109,18073],{"class":50},[37,18111,17605],{"class":2320},[37,18113,17384],{"class":50},[37,18115,17387],{"class":54},[37,18117,17390],{"class":50},[37,18119,18120,18122,18124,18126,18128,18130,18132],{"class":39,"line":195},[37,18121,15079],{"class":54},[37,18123,18070],{"class":2320},[37,18125,18073],{"class":50},[37,18127,17633],{"class":2320},[37,18129,17384],{"class":50},[37,18131,17387],{"class":54},[37,18133,17404],{"class":50},[14,18135,18136],{},"创建circle.h",[27,18138,18140],{"className":519,"code":18139,"language":521,"meta":32,"style":32},"#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",[34,18141,18142,18149,18155,18165,18171,18177,18181,18185,18189,18203,18217,18221,18229,18237,18241,18245,18251,18255,18259],{"__ignoreMap":32},[37,18143,18144,18146],{"class":39,"line":40},[37,18145,17934],{"class":54},[37,18147,18148],{"class":2320}," once\n",[37,18150,18151,18153],{"class":39,"line":47},[37,18152,2306],{"class":54},[37,18154,2309],{"class":185},[37,18156,18157,18159,18161,18163],{"class":39,"line":104},[37,18158,2314],{"class":54},[37,18160,2317],{"class":54},[37,18162,2321],{"class":2320},[37,18164,1669],{"class":50},[37,18166,18167,18169],{"class":39,"line":113},[37,18168,2306],{"class":54},[37,18170,18058],{"class":185},[37,18172,18173,18175],{"class":39,"line":189},[37,18174,15035],{"class":54},[37,18176,15038],{"class":2320},[37,18178,18179],{"class":39,"line":195},[37,18180,1922],{"class":50},[37,18182,18183],{"class":39,"line":201},[37,18184,15057],{"class":54},[37,18186,18187],{"class":39,"line":207},[37,18188,17335],{"class":43},[37,18190,18191,18193,18195,18197,18199,18201],{"class":39,"line":213},[37,18192,15250],{"class":54},[37,18194,17455],{"class":2320},[37,18196,165],{"class":50},[37,18198,14378],{"class":54},[37,18200,17462],{"class":159},[37,18202,3069],{"class":50},[37,18204,18205,18207,18209,18211,18213,18215],{"class":39,"line":218},[37,18206,15250],{"class":54},[37,18208,17477],{"class":2320},[37,18210,165],{"class":50},[37,18212,17482],{"class":2320},[37,18214,17485],{"class":159},[37,18216,3069],{"class":50},[37,18218,18219],{"class":39,"line":227},[37,18220,17498],{"class":43},[37,18222,18223,18225,18227],{"class":39,"line":232},[37,18224,15079],{"class":54},[37,18226,17505],{"class":2320},[37,18228,5984],{"class":50},[37,18230,18231,18233,18235],{"class":39,"line":238},[37,18232,17517],{"class":2320},[37,18234,17520],{"class":2320},[37,18236,5984],{"class":50},[37,18238,18239],{"class":39,"line":244},[37,18240,2757],{"emptyLinePlaceholder":454},[37,18242,18243],{"class":39,"line":250},[37,18244,15563],{"class":54},[37,18246,18247,18249],{"class":39,"line":256},[37,18248,15079],{"class":54},[37,18250,15069],{"class":50},[37,18252,18253],{"class":39,"line":261},[37,18254,17546],{"class":43},[37,18256,18257],{"class":39,"line":267},[37,18258,17551],{"class":50},[37,18260,18261],{"class":39,"line":283},[37,18262,4345],{"class":50},[14,18264,18265],{},"创建circle.cpp",[27,18267,18269],{"className":519,"code":18268,"language":521,"meta":32,"style":32},"#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",[34,18270,18271,18278,18301,18323,18328,18344],{"__ignoreMap":32},[37,18272,18273,18275],{"class":39,"line":40},[37,18274,2306],{"class":54},[37,18276,18277],{"class":185},"\u003Ccircle.h>\n",[37,18279,18280,18282,18285,18287,18289,18291,18293,18295,18297,18299],{"class":39,"line":47},[37,18281,5712],{"class":54},[37,18283,18284],{"class":2320}," Circle",[37,18286,18073],{"class":50},[37,18288,17801],{"class":2320},[37,18290,165],{"class":50},[37,18292,14378],{"class":54},[37,18294,17462],{"class":159},[37,18296,17465],{"class":50},[37,18298,55],{"class":54},[37,18300,17470],{"class":50},[37,18302,18303,18305,18307,18309,18311,18313,18315,18317,18319,18321],{"class":39,"line":104},[37,18304,5712],{"class":54},[37,18306,18284],{"class":2320},[37,18308,18073],{"class":50},[37,18310,17853],{"class":2320},[37,18312,165],{"class":50},[37,18314,17482],{"class":2320},[37,18316,17485],{"class":159},[37,18318,17488],{"class":50},[37,18320,55],{"class":54},[37,18322,17493],{"class":50},[37,18324,18325],{"class":39,"line":113},[37,18326,18327],{"class":43},"\u002F\u002F获取属性\n",[37,18329,18330,18332,18334,18336,18338,18340,18342],{"class":39,"line":189},[37,18331,14378],{"class":54},[37,18333,18284],{"class":2320},[37,18335,18073],{"class":50},[37,18337,17685],{"class":2320},[37,18339,17384],{"class":50},[37,18341,17387],{"class":54},[37,18343,17512],{"class":50},[37,18345,18346,18348,18350,18352,18354,18356,18358],{"class":39,"line":195},[37,18347,17482],{"class":2320},[37,18349,18284],{"class":2320},[37,18351,18073],{"class":50},[37,18353,17599],{"class":2320},[37,18355,17384],{"class":50},[37,18357,17387],{"class":54},[37,18359,17527],{"class":50},[14,18361,18362],{},"使用封装的类",[27,18364,18366],{"className":519,"code":18365,"language":521,"meta":32,"style":32},"#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",[34,18367,18368,18374,18384,18390,18396,18420,18424,18450,18476,18500,18514,18518,18530,18534,18538,18542,18554,18558,18562,18570,18574,18578,18582,18586,18590,18600,18606,18614,18622,18632,18638,18650,18658,18666,18676,18682,18694,18698,18706,18712],{"__ignoreMap":32},[37,18369,18370,18372],{"class":39,"line":40},[37,18371,2306],{"class":54},[37,18373,2309],{"class":185},[37,18375,18376,18378,18380,18382],{"class":39,"line":47},[37,18377,2314],{"class":54},[37,18379,2317],{"class":54},[37,18381,2321],{"class":2320},[37,18383,1669],{"class":50},[37,18385,18386,18388],{"class":39,"line":104},[37,18387,2306],{"class":54},[37,18389,18277],{"class":185},[37,18391,18392,18394],{"class":39,"line":113},[37,18393,2306],{"class":54},[37,18395,18058],{"class":185},[37,18397,18398,18400,18402,18404,18406,18408,18410,18412,18414,18416,18418],{"class":39,"line":189},[37,18399,5712],{"class":54},[37,18401,17562],{"class":2320},[37,18403,165],{"class":50},[37,18405,17567],{"class":2320},[37,18407,10925],{"class":54},[37,18409,807],{"class":159},[37,18411,65],{"class":50},[37,18413,17482],{"class":2320},[37,18415,10925],{"class":54},[37,18417,14],{"class":159},[37,18419,280],{"class":50},[37,18421,18422],{"class":39,"line":195},[37,18423,1922],{"class":50},[37,18425,18426,18428,18430,18432,18434,18436,18438,18440,18442,18444,18446,18448],{"class":39,"line":201},[37,18427,15079],{"class":54},[37,18429,17592],{"class":50},[37,18431,55],{"class":54},[37,18433,16683],{"class":50},[37,18435,17599],{"class":2320},[37,18437,17602],{"class":50},[37,18439,17605],{"class":2320},[37,18441,13391],{"class":50},[37,18443,384],{"class":54},[37,18445,16229],{"class":50},[37,18447,17605],{"class":2320},[37,18449,5984],{"class":50},[37,18451,18452,18454,18456,18458,18460,18462,18464,18466,18468,18470,18472,18474],{"class":39,"line":207},[37,18453,15079],{"class":54},[37,18455,17622],{"class":50},[37,18457,55],{"class":54},[37,18459,16683],{"class":50},[37,18461,17599],{"class":2320},[37,18463,17602],{"class":50},[37,18465,17633],{"class":2320},[37,18467,13391],{"class":50},[37,18469,384],{"class":54},[37,18471,16229],{"class":50},[37,18473,17633],{"class":2320},[37,18475,5984],{"class":50},[37,18477,18478,18480,18482,18484,18486,18488,18490,18492,18494,18496,18498],{"class":39,"line":213},[37,18479,15079],{"class":54},[37,18481,17650],{"class":50},[37,18483,55],{"class":54},[37,18485,17655],{"class":2320},[37,18487,17658],{"class":50},[37,18489,967],{"class":54},[37,18491,17592],{"class":50},[37,18493,993],{"class":54},[37,18495,17622],{"class":50},[37,18497,967],{"class":54},[37,18499,17671],{"class":50},[37,18501,18502,18504,18506,18508,18510,18512],{"class":39,"line":218},[37,18503,3451],{"class":54},[37,18505,17678],{"class":50},[37,18507,1418],{"class":54},[37,18509,16683],{"class":50},[37,18511,17685],{"class":2320},[37,18513,17688],{"class":50},[37,18515,18516],{"class":39,"line":227},[37,18517,2387],{"class":50},[37,18519,18520,18522,18524,18526,18528],{"class":39,"line":232},[37,18521,10010],{"class":50},[37,18523,1552],{"class":54},[37,18525,17701],{"class":185},[37,18527,1820],{"class":54},[37,18529,9181],{"class":50},[37,18531,18532],{"class":39,"line":238},[37,18533,2544],{"class":50},[37,18535,18536],{"class":39,"line":244},[37,18537,17164],{"class":54},[37,18539,18540],{"class":39,"line":250},[37,18541,2387],{"class":50},[37,18543,18544,18546,18548,18550,18552],{"class":39,"line":256},[37,18545,10010],{"class":50},[37,18547,1552],{"class":54},[37,18549,17726],{"class":185},[37,18551,1820],{"class":54},[37,18553,9181],{"class":50},[37,18555,18556],{"class":39,"line":261},[37,18557,2544],{"class":50},[37,18559,18560],{"class":39,"line":267},[37,18561,1941],{"class":50},[37,18563,18564,18566,18568],{"class":39,"line":283},[37,18565,533],{"class":54},[37,18567,2330],{"class":2320},[37,18569,2333],{"class":50},[37,18571,18572],{"class":39,"line":288},[37,18573,1922],{"class":50},[37,18575,18576],{"class":39,"line":294},[37,18577,15394],{"class":43},[37,18579,18580],{"class":39,"line":300},[37,18581,15141],{"class":50},[37,18583,18584],{"class":39,"line":306},[37,18585,17763],{"class":50},[37,18587,18588],{"class":39,"line":312},[37,18589,17335],{"class":43},[37,18591,18592,18594,18596,18598],{"class":39,"line":317},[37,18593,1927],{"class":50},[37,18595,1552],{"class":54},[37,18597,17776],{"class":185},[37,18599,1669],{"class":50},[37,18601,18602,18604],{"class":39,"line":323},[37,18603,15079],{"class":54},[37,18605,17785],{"class":50},[37,18607,18608,18610,18612],{"class":39,"line":337},[37,18609,2369],{"class":50},[37,18611,1805],{"class":54},[37,18613,17794],{"class":50},[37,18615,18616,18618,18620],{"class":39,"line":342},[37,18617,16936],{"class":50},[37,18619,17801],{"class":2320},[37,18621,17804],{"class":50},[37,18623,18624,18626,18628,18630],{"class":39,"line":347},[37,18625,1927],{"class":50},[37,18627,1552],{"class":54},[37,18629,17813],{"class":185},[37,18631,1669],{"class":50},[37,18633,18634,18636],{"class":39,"line":352},[37,18635,15079],{"class":54},[37,18637,17822],{"class":50},[37,18639,18640,18642,18644,18646,18648],{"class":39,"line":357},[37,18641,2369],{"class":50},[37,18643,1805],{"class":54},[37,18645,1329],{"class":50},[37,18647,1805],{"class":54},[37,18649,17835],{"class":50},[37,18651,18652,18654,18656],{"class":39,"line":362},[37,18653,17840],{"class":50},[37,18655,17843],{"class":2320},[37,18657,17846],{"class":50},[37,18659,18660,18662,18664],{"class":39,"line":367},[37,18661,16936],{"class":50},[37,18663,17853],{"class":2320},[37,18665,17856],{"class":50},[37,18667,18668,18670,18672,18674],{"class":39,"line":373},[37,18669,1927],{"class":50},[37,18671,1552],{"class":54},[37,18673,17865],{"class":185},[37,18675,1669],{"class":50},[37,18677,18678,18680],{"class":39,"line":392},[37,18679,15079],{"class":54},[37,18681,17874],{"class":50},[37,18683,18684,18686,18688,18690,18692],{"class":39,"line":398},[37,18685,2369],{"class":50},[37,18687,1805],{"class":54},[37,18689,17883],{"class":50},[37,18691,1805],{"class":54},[37,18693,17888],{"class":50},[37,18695,18696],{"class":39,"line":409},[37,18697,17893],{"class":50},[37,18699,18700,18702,18704],{"class":39,"line":415},[37,18701,17898],{"class":50},[37,18703,17843],{"class":2320},[37,18705,17903],{"class":50},[37,18707,18708,18710],{"class":39,"line":420},[37,18709,17908],{"class":2320},[37,18711,17911],{"class":50},[37,18713,18714],{"class":39,"line":425},[37,18715,1941],{"class":50},[469,18717,18719],{"id":18718},"_82对象的初始化清理","8.2对象的初始化清理",[1515,18721,18722,18725],{},[484,18723,18724],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[484,18726,18727],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[498,18729,18731],{"id":18730},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18733,18734,18735,18738],{},"对象的",[673,18736,18737],{},"初始化和清理","也是两个非常重要的安全问题",[14,18740,18741],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18743,18744],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18746,18747,18748,18751,18752,18755],{},"c++利用了",[673,18749,18750],{},"构造函数","和",[673,18753,18754],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18757,18758,18759],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[673,18760,18761],{},"我们不提供构造和析构，编译器会提供",[14,18763,18764],{},[673,18765,18766],{},"编译器提供的构造函数和析构函数是空实现。",[1515,18768,18769,18772],{},[484,18770,18771],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[484,18773,18774,18775,18778],{},"析构函数：主要作用在于对象",[673,18776,18777],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18780,18781,18784],{},[673,18782,18783],{},"构造函数语法：",[34,18785,18786],{},"类名(){}",[481,18788,18789,18792,18795,18798,18801],{},[484,18790,18791],{},"构造函数，没有返回值也不写void",[484,18793,18794],{},"函数名称与类名相同",[484,18796,18797],{},"构造函数可以有参数，因此可以发生重载",[484,18799,18800],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[484,18802,18803,18804,138],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[34,18805,18806],{},"Person(){}",[14,18808,18809,14136,18812],{},[673,18810,18811],{},"析构函数语法：",[34,18813,18814],{},"~类名(){}",[481,18816,18817,18820,18823,18829],{},[484,18818,18819],{},"析构函数，没有返回值也不写void",[484,18821,18822],{},"函数名称与类名相同,在名称前加上符号  ~",[484,18824,18825,18826],{},"析构函数不可以有参数，因此",[673,18827,18828],{},"不可以发生重载",[484,18830,18831],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[27,18833,18835],{"className":519,"code":18834,"language":521,"meta":32,"style":32},"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",[34,18836,18837,18843,18847,18851,18856,18863,18867,18880,18884,18889,18896,18900,18913,18917,18921,18925,18929,18937,18941,18949,18953,18957,18965,18969,18974,18978,18985,18989,19002,19006,19014],{"__ignoreMap":32},[37,18838,18839,18841],{"class":39,"line":40},[37,18840,15035],{"class":54},[37,18842,15512],{"class":2320},[37,18844,18845],{"class":39,"line":47},[37,18846,1922],{"class":50},[37,18848,18849],{"class":39,"line":104},[37,18850,15057],{"class":54},[37,18852,18853],{"class":39,"line":113},[37,18854,18855],{"class":43},"    \u002F\u002F构造函数\n",[37,18857,18858,18861],{"class":39,"line":189},[37,18859,18860],{"class":2320},"    Person",[37,18862,2333],{"class":50},[37,18864,18865],{"class":39,"line":195},[37,18866,2387],{"class":50},[37,18868,18869,18871,18873,18876,18878],{"class":39,"line":201},[37,18870,10010],{"class":50},[37,18872,1552],{"class":54},[37,18874,18875],{"class":185}," \"Person的构造函数调用\"",[37,18877,1820],{"class":54},[37,18879,9181],{"class":50},[37,18881,18882],{"class":39,"line":207},[37,18883,2544],{"class":50},[37,18885,18886],{"class":39,"line":213},[37,18887,18888],{"class":43},"    \u002F\u002F析构函数\n",[37,18890,18891,18894],{"class":39,"line":218},[37,18892,18893],{"class":2320},"    ~Person",[37,18895,2333],{"class":50},[37,18897,18898],{"class":39,"line":227},[37,18899,2387],{"class":50},[37,18901,18902,18904,18906,18909,18911],{"class":39,"line":232},[37,18903,10010],{"class":50},[37,18905,1552],{"class":54},[37,18907,18908],{"class":185}," \"Person的析构函数调用\"",[37,18910,1820],{"class":54},[37,18912,9181],{"class":50},[37,18914,18915],{"class":39,"line":238},[37,18916,2544],{"class":50},[37,18918,18919],{"class":39,"line":244},[37,18920,2757],{"emptyLinePlaceholder":454},[37,18922,18923],{"class":39,"line":250},[37,18924,4345],{"class":50},[37,18926,18927],{"class":39,"line":256},[37,18928,2757],{"emptyLinePlaceholder":454},[37,18930,18931,18933,18935],{"class":39,"line":261},[37,18932,5712],{"class":54},[37,18934,5936],{"class":2320},[37,18936,2333],{"class":50},[37,18938,18939],{"class":39,"line":267},[37,18940,1922],{"class":50},[37,18942,18943,18946],{"class":39,"line":283},[37,18944,18945],{"class":50},"    Person p;",[37,18947,18948],{"class":43},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[37,18950,18951],{"class":39,"line":288},[37,18952,1941],{"class":50},[37,18954,18955],{"class":39,"line":294},[37,18956,2757],{"emptyLinePlaceholder":454},[37,18958,18959,18961,18963],{"class":39,"line":300},[37,18960,533],{"class":54},[37,18962,2330],{"class":2320},[37,18964,11194],{"class":50},[37,18966,18967],{"class":39,"line":306},[37,18968,13551],{"class":50},[37,18970,18971],{"class":39,"line":312},[37,18972,18973],{"class":43},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[37,18975,18976],{"class":39,"line":317},[37,18977,2757],{"emptyLinePlaceholder":454},[37,18979,18980,18982],{"class":39,"line":323},[37,18981,18945],{"class":50},[37,18983,18984],{"class":43},"\u002F\u002F只有构造函数\n",[37,18986,18987],{"class":39,"line":337},[37,18988,2757],{"emptyLinePlaceholder":454},[37,18990,18991,18993,18995,18997,18999],{"class":39,"line":342},[37,18992,2660],{"class":2320},[37,18994,165],{"class":50},[37,18996,2665],{"class":185},[37,18998,6314],{"class":50},[37,19000,19001],{"class":43},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[37,19003,19004],{"class":39,"line":347},[37,19005,2757],{"emptyLinePlaceholder":454},[37,19007,19008,19010,19012],{"class":39,"line":352},[37,19009,4440],{"class":54},[37,19011,4443],{"class":61},[37,19013,1669],{"class":50},[37,19015,19016],{"class":39,"line":357},[37,19017,1941],{"class":50},[14,19019,19020],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[498,19022,19024],{"id":19023},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,19026,19027],{},"两种分类方式：",[14,19029,19030],{},"​\t按参数分为： 有参构造和无参构造",[14,19032,19033],{},"​\t按类型分为： 普通构造和拷贝构造",[14,19035,19036],{},"三种调用方式：",[14,19038,19039],{},"​\t括号法",[14,19041,19042],{},"​\t显示法",[14,19044,19045],{},"​\t隐式转换法",[27,19047,19049],{"className":519,"code":19048,"language":521,"meta":32,"style":32},"#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",[34,19050,19051,19057,19067,19072,19077,19082,19087,19091,19099,19103,19107,19111,19117,19121,19134,19138,19150,19154,19163,19176,19180,19184,19190,19194,19207,19211,19216,19232,19236,19241,19250,19263,19267,19273,19277,19282,19290,19294,19299,19303,19311,19315,19320,19325,19330,19335,19340,19344,19349,19354,19359,19364,19368,19373,19378,19394,19406,19411,19415,19420,19425,19430,19434,19439,19453,19466,19470,19478,19482,19488,19494,19502],{"__ignoreMap":32},[37,19052,19053,19055],{"class":39,"line":40},[37,19054,2306],{"class":54},[37,19056,2309],{"class":185},[37,19058,19059,19061,19063,19065],{"class":39,"line":47},[37,19060,2314],{"class":54},[37,19062,2317],{"class":54},[37,19064,2321],{"class":2320},[37,19066,1669],{"class":50},[37,19068,19069],{"class":39,"line":104},[37,19070,19071],{"class":43},"\u002F\u002F1.构造函数的分类及调用\n",[37,19073,19074],{"class":39,"line":113},[37,19075,19076],{"class":43},"\u002F\u002F分类\n",[37,19078,19079],{"class":39,"line":189},[37,19080,19081],{"class":43},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[37,19083,19084],{"class":39,"line":195},[37,19085,19086],{"class":43},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[37,19088,19089],{"class":39,"line":201},[37,19090,2757],{"emptyLinePlaceholder":454},[37,19092,19093,19095,19097],{"class":39,"line":207},[37,19094,15035],{"class":54},[37,19096,15910],{"class":2320},[37,19098,3024],{"class":50},[37,19100,19101],{"class":39,"line":213},[37,19102,1922],{"class":50},[37,19104,19105],{"class":39,"line":218},[37,19106,15057],{"class":54},[37,19108,19109],{"class":39,"line":227},[37,19110,18855],{"class":43},[37,19112,19113,19115],{"class":39,"line":232},[37,19114,18860],{"class":2320},[37,19116,2333],{"class":50},[37,19118,19119],{"class":39,"line":238},[37,19120,2387],{"class":50},[37,19122,19123,19125,19127,19130,19132],{"class":39,"line":244},[37,19124,3801],{"class":50},[37,19126,1552],{"class":54},[37,19128,19129],{"class":185},"\"Person构造函数无参构造\"",[37,19131,1552],{"class":54},[37,19133,1574],{"class":50},[37,19135,19136],{"class":39,"line":250},[37,19137,2544],{"class":50},[37,19139,19140,19142,19144,19146,19148],{"class":39,"line":256},[37,19141,18860],{"class":2320},[37,19143,165],{"class":50},[37,19145,533],{"class":54},[37,19147,1774],{"class":159},[37,19149,280],{"class":50},[37,19151,19152],{"class":39,"line":261},[37,19153,2387],{"class":50},[37,19155,19156,19159,19161],{"class":39,"line":267},[37,19157,19158],{"class":50},"        age",[37,19160,55],{"class":54},[37,19162,6545],{"class":50},[37,19164,19165,19167,19169,19172,19174],{"class":39,"line":283},[37,19166,3801],{"class":50},[37,19168,1552],{"class":54},[37,19170,19171],{"class":185},"\"Person构造函数有参构造\"",[37,19173,1552],{"class":54},[37,19175,1574],{"class":50},[37,19177,19178],{"class":39,"line":288},[37,19179,2544],{"class":50},[37,19181,19182],{"class":39,"line":294},[37,19183,18888],{"class":43},[37,19185,19186,19188],{"class":39,"line":300},[37,19187,18893],{"class":2320},[37,19189,2333],{"class":50},[37,19191,19192],{"class":39,"line":306},[37,19193,2387],{"class":50},[37,19195,19196,19198,19200,19203,19205],{"class":39,"line":312},[37,19197,3801],{"class":50},[37,19199,1552],{"class":54},[37,19201,19202],{"class":185},"\"Person析构函数被调用\"",[37,19204,1552],{"class":54},[37,19206,1574],{"class":50},[37,19208,19209],{"class":39,"line":317},[37,19210,2544],{"class":50},[37,19212,19213],{"class":39,"line":323},[37,19214,19215],{"class":43},"    \u002F\u002F拷贝构造函数\n",[37,19217,19218,19220,19222,19224,19226,19228,19230],{"class":39,"line":337},[37,19219,18860],{"class":2320},[37,19221,165],{"class":50},[37,19223,7140],{"class":54},[37,19225,15910],{"class":2320},[37,19227,10925],{"class":54},[37,19229,14],{"class":159},[37,19231,280],{"class":50},[37,19233,19234],{"class":39,"line":342},[37,19235,2387],{"class":50},[37,19237,19238],{"class":39,"line":347},[37,19239,19240],{"class":43},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[37,19242,19243,19245,19247],{"class":39,"line":352},[37,19244,19158],{"class":50},[37,19246,55],{"class":54},[37,19248,19249],{"class":50},"p.age;\n",[37,19251,19252,19254,19256,19259,19261],{"class":39,"line":357},[37,19253,3801],{"class":50},[37,19255,1552],{"class":54},[37,19257,19258],{"class":185},"\"Person拷贝构造函数被调用\"",[37,19260,1552],{"class":54},[37,19262,1574],{"class":50},[37,19264,19265],{"class":39,"line":362},[37,19266,2544],{"class":50},[37,19268,19269,19271],{"class":39,"line":367},[37,19270,2342],{"class":54},[37,19272,8145],{"class":50},[37,19274,19275],{"class":39,"line":373},[37,19276,4345],{"class":50},[37,19278,19279],{"class":39,"line":392},[37,19280,19281],{"class":43},"\u002F\u002F调用\n",[37,19283,19284,19286,19288],{"class":39,"line":398},[37,19285,5712],{"class":54},[37,19287,5936],{"class":2320},[37,19289,2333],{"class":50},[37,19291,19292],{"class":39,"line":409},[37,19293,1922],{"class":50},[37,19295,19296],{"class":39,"line":415},[37,19297,19298],{"class":43},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[37,19300,19301],{"class":39,"line":420},[37,19302,1941],{"class":50},[37,19304,19305,19307,19309],{"class":39,"line":425},[37,19306,5712],{"class":54},[37,19308,6005],{"class":2320},[37,19310,2333],{"class":50},[37,19312,19313],{"class":39,"line":431},[37,19314,1922],{"class":50},[37,19316,19317],{"class":39,"line":436},[37,19318,19319],{"class":43},"    \u002F\u002F1.括号法\n",[37,19321,19322],{"class":39,"line":442},[37,19323,19324],{"class":43},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[37,19326,19327],{"class":39,"line":8374},[37,19328,19329],{"class":43},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[37,19331,19332],{"class":39,"line":8386},[37,19333,19334],{"class":43},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[37,19336,19337],{"class":39,"line":8398},[37,19338,19339],{"class":43},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[37,19341,19342],{"class":39,"line":10057},[37,19343,2757],{"emptyLinePlaceholder":454},[37,19345,19346],{"class":39,"line":10082},[37,19347,19348],{"class":43},"    \u002F\u002F注意事项\n",[37,19350,19351],{"class":39,"line":10105},[37,19352,19353],{"class":43},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[37,19355,19356],{"class":39,"line":10129},[37,19357,19358],{"class":43},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[37,19360,19361],{"class":39,"line":10134},[37,19362,19363],{"class":43},"    \u002F\u002F Person p4();\n",[37,19365,19366],{"class":39,"line":10139},[37,19367,2757],{"emptyLinePlaceholder":454},[37,19369,19370],{"class":39,"line":10144},[37,19371,19372],{"class":43},"    \u002F\u002F2.显示法\n",[37,19374,19375],{"class":39,"line":10153},[37,19376,19377],{"class":50},"    Person p1;\n",[37,19379,19380,19383,19385,19388,19390,19392],{"class":39,"line":10158},[37,19381,19382],{"class":50},"    Person p2",[37,19384,55],{"class":54},[37,19386,19387],{"class":2320},"Person",[37,19389,165],{"class":50},[37,19391,98],{"class":61},[37,19393,3069],{"class":50},[37,19395,19396,19399,19401,19403],{"class":39,"line":10164},[37,19397,19398],{"class":50},"    Person p3",[37,19400,55],{"class":54},[37,19402,19387],{"class":2320},[37,19404,19405],{"class":50},"(p2);\n",[37,19407,19408],{"class":39,"line":10185},[37,19409,19410],{"class":43},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[37,19412,19413],{"class":39,"line":10191},[37,19414,2757],{"emptyLinePlaceholder":454},[37,19416,19417],{"class":39,"line":10205},[37,19418,19419],{"class":43},"    \u002F\u002F 注意事项2\n",[37,19421,19422],{"class":39,"line":10211},[37,19423,19424],{"class":43},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[37,19426,19427],{"class":39,"line":10238},[37,19428,19429],{"class":43},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[37,19431,19432],{"class":39,"line":10247},[37,19433,2757],{"emptyLinePlaceholder":454},[37,19435,19436],{"class":39,"line":10253},[37,19437,19438],{"class":43},"    \u002F\u002F3.隐士转换法\n",[37,19440,19441,19444,19446,19448,19450],{"class":39,"line":10261},[37,19442,19443],{"class":50},"    Person p4",[37,19445,55],{"class":54},[37,19447,98],{"class":61},[37,19449,582],{"class":50},[37,19451,19452],{"class":43},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[37,19454,19455,19458,19460,19463],{"class":39,"line":10266},[37,19456,19457],{"class":50},"    Person p5",[37,19459,55],{"class":54},[37,19461,19462],{"class":50},"p4;",[37,19464,19465],{"class":43}," \u002F\u002F 这里会调用拷贝构造函数\n",[37,19467,19468],{"class":39,"line":16945},[37,19469,1941],{"class":50},[37,19471,19472,19474,19476],{"class":39,"line":16951},[37,19473,533],{"class":54},[37,19475,2330],{"class":2320},[37,19477,2333],{"class":50},[37,19479,19480],{"class":39,"line":16974},[37,19481,1922],{"class":50},[37,19483,19484,19486],{"class":39,"line":16980},[37,19485,5981],{"class":2320},[37,19487,5984],{"class":50},[37,19489,19490,19492],{"class":39,"line":17003},[37,19491,6050],{"class":2320},[37,19493,5984],{"class":50},[37,19495,19496,19498,19500],{"class":39,"line":17017},[37,19497,4440],{"class":54},[37,19499,4443],{"class":61},[37,19501,1669],{"class":50},[37,19503,19504],{"class":39,"line":17037},[37,19505,1941],{"class":50},[14,19507,19508,19511],{},[673,19509,19510],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[498,19513,19515],{"id":19514},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19517,19518],{},"C++中拷贝构造函数调用时机通常有三种情况",[1515,19520,19521,19524,19527],{},[484,19522,19523],{},"使用一个已经创建完毕的对象来初始化一个新对象",[484,19525,19526],{},"值传递的方式给函数参数传值",[484,19528,19529],{},"以值方式返回局部对象",[27,19531,19533],{"className":519,"code":19532,"language":521,"meta":32,"style":32},"#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",[34,19534,19535,19541,19551,19555,19560,19564,19569,19574,19579,19585,19589,19593,19599,19603,19616,19620,19625,19637,19641,19649,19662,19666,19670,19686,19690,19699,19712,19716,19722,19726,19738,19742,19748,19752,19756,19764,19768,19781,19789,19807,19811,19816,19821,19836,19840,19853,19857,19865,19869,19873,19881,19885,19890,19899,19903,19907,19932,19942,19946,19954,19958,19969,19994,19998,20002,20006,20014,20018,20023,20028,20035,20040,20045,20050,20055,20059,20064,20068,20073,20077,20082,20087,20091,20095,20100,20105,20113],{"__ignoreMap":32},[37,19536,19537,19539],{"class":39,"line":40},[37,19538,2306],{"class":54},[37,19540,2309],{"class":185},[37,19542,19543,19545,19547,19549],{"class":39,"line":47},[37,19544,2314],{"class":54},[37,19546,2317],{"class":54},[37,19548,2321],{"class":2320},[37,19550,1669],{"class":50},[37,19552,19553],{"class":39,"line":104},[37,19554,2757],{"emptyLinePlaceholder":454},[37,19556,19557],{"class":39,"line":113},[37,19558,19559],{"class":43},"\u002F\u002F拷贝构造函数调用时机\n",[37,19561,19562],{"class":39,"line":189},[37,19563,2757],{"emptyLinePlaceholder":454},[37,19565,19566],{"class":39,"line":195},[37,19567,19568],{"class":43},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[37,19570,19571],{"class":39,"line":201},[37,19572,19573],{"class":43},"\u002F\u002F2.值传递的方式给函数参数传值\n",[37,19575,19576],{"class":39,"line":207},[37,19577,19578],{"class":43},"\u002F\u002F3.以值方式返回局部对象\n",[37,19580,19581,19583],{"class":39,"line":213},[37,19582,15035],{"class":54},[37,19584,15512],{"class":2320},[37,19586,19587],{"class":39,"line":218},[37,19588,1922],{"class":50},[37,19590,19591],{"class":39,"line":227},[37,19592,15057],{"class":54},[37,19594,19595,19597],{"class":39,"line":232},[37,19596,18860],{"class":2320},[37,19598,2333],{"class":50},[37,19600,19601],{"class":39,"line":238},[37,19602,2387],{"class":50},[37,19604,19605,19607,19609,19612,19614],{"class":39,"line":244},[37,19606,10010],{"class":50},[37,19608,1552],{"class":54},[37,19610,19611],{"class":185}," \"Person的默认构造函数调用\"",[37,19613,1820],{"class":54},[37,19615,9181],{"class":50},[37,19617,19618],{"class":39,"line":250},[37,19619,2544],{"class":50},[37,19621,19622],{"class":39,"line":256},[37,19623,19624],{"class":43},"    \u002F\u002F有参构造\n",[37,19626,19627,19629,19631,19633,19635],{"class":39,"line":261},[37,19628,18860],{"class":2320},[37,19630,165],{"class":50},[37,19632,533],{"class":54},[37,19634,16030],{"class":159},[37,19636,280],{"class":50},[37,19638,19639],{"class":39,"line":267},[37,19640,2387],{"class":50},[37,19642,19643,19645,19647],{"class":39,"line":283},[37,19644,16084],{"class":50},[37,19646,55],{"class":54},[37,19648,8145],{"class":50},[37,19650,19651,19653,19655,19658,19660],{"class":39,"line":288},[37,19652,10010],{"class":50},[37,19654,1552],{"class":54},[37,19656,19657],{"class":185}," \"Person的有参构造函数调用\"",[37,19659,1820],{"class":54},[37,19661,9181],{"class":50},[37,19663,19664],{"class":39,"line":294},[37,19665,2544],{"class":50},[37,19667,19668],{"class":39,"line":300},[37,19669,19215],{"class":43},[37,19671,19672,19674,19676,19678,19680,19682,19684],{"class":39,"line":306},[37,19673,18860],{"class":2320},[37,19675,165],{"class":50},[37,19677,7140],{"class":54},[37,19679,15910],{"class":2320},[37,19681,10925],{"class":54},[37,19683,14],{"class":159},[37,19685,280],{"class":50},[37,19687,19688],{"class":39,"line":312},[37,19689,2387],{"class":50},[37,19691,19692,19694,19696],{"class":39,"line":317},[37,19693,16084],{"class":50},[37,19695,55],{"class":54},[37,19697,19698],{"class":50}," p.m_Age;\n",[37,19700,19701,19703,19705,19708,19710],{"class":39,"line":323},[37,19702,10010],{"class":50},[37,19704,1552],{"class":54},[37,19706,19707],{"class":185}," \"Person的拷贝构造函数调用\"",[37,19709,1820],{"class":54},[37,19711,9181],{"class":50},[37,19713,19714],{"class":39,"line":337},[37,19715,2544],{"class":50},[37,19717,19718,19720],{"class":39,"line":342},[37,19719,18893],{"class":2320},[37,19721,2333],{"class":50},[37,19723,19724],{"class":39,"line":347},[37,19725,2387],{"class":50},[37,19727,19728,19730,19732,19734,19736],{"class":39,"line":352},[37,19729,10010],{"class":50},[37,19731,1552],{"class":54},[37,19733,18908],{"class":185},[37,19735,1820],{"class":54},[37,19737,9181],{"class":50},[37,19739,19740],{"class":39,"line":357},[37,19741,2544],{"class":50},[37,19743,19744,19746],{"class":39,"line":362},[37,19745,2342],{"class":54},[37,19747,16007],{"class":50},[37,19749,19750],{"class":39,"line":367},[37,19751,4345],{"class":50},[37,19753,19754],{"class":39,"line":373},[37,19755,19568],{"class":43},[37,19757,19758,19760,19762],{"class":39,"line":392},[37,19759,5712],{"class":54},[37,19761,5936],{"class":2320},[37,19763,2333],{"class":50},[37,19765,19766],{"class":39,"line":398},[37,19767,1922],{"class":50},[37,19769,19770,19773,19775,19777,19779],{"class":39,"line":409},[37,19771,19772],{"class":50},"    Person ",[37,19774,7478],{"class":2320},[37,19776,165],{"class":50},[37,19778,1210],{"class":61},[37,19780,3069],{"class":50},[37,19782,19783,19785,19787],{"class":39,"line":415},[37,19784,19772],{"class":50},[37,19786,7381],{"class":2320},[37,19788,17856],{"class":50},[37,19790,19791,19793,19795,19798,19800,19803,19805],{"class":39,"line":420},[37,19792,1927],{"class":50},[37,19794,1552],{"class":54},[37,19796,19797],{"class":185},"\"P2的年龄为：\"",[37,19799,1552],{"class":54},[37,19801,19802],{"class":50},"p2.m_Age",[37,19804,1552],{"class":54},[37,19806,1574],{"class":50},[37,19808,19809],{"class":39,"line":425},[37,19810,1941],{"class":50},[37,19812,19813],{"class":39,"line":431},[37,19814,19815],{"class":43},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[37,19817,19818],{"class":39,"line":436},[37,19819,19820],{"class":43},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[37,19822,19823,19825,19828,19830,19832,19834],{"class":39,"line":442},[37,19824,5712],{"class":54},[37,19826,19827],{"class":2320}," doWork",[37,19829,165],{"class":50},[37,19831,19387],{"class":2320},[37,19833,7173],{"class":159},[37,19835,280],{"class":50},[37,19837,19838],{"class":39,"line":8374},[37,19839,1922],{"class":50},[37,19841,19842,19844,19846,19849,19851],{"class":39,"line":8386},[37,19843,6877],{"class":50},[37,19845,1552],{"class":54},[37,19847,19848],{"class":185}," \"doWork函数调用\"",[37,19850,1820],{"class":54},[37,19852,9181],{"class":50},[37,19854,19855],{"class":39,"line":8398},[37,19856,1941],{"class":50},[37,19858,19859,19861,19863],{"class":39,"line":10057},[37,19860,5712],{"class":54},[37,19862,6005],{"class":2320},[37,19864,2333],{"class":50},[37,19866,19867],{"class":39,"line":10082},[37,19868,1922],{"class":50},[37,19870,19871],{"class":39,"line":10105},[37,19872,15654],{"class":50},[37,19874,19875,19878],{"class":39,"line":10129},[37,19876,19877],{"class":2320},"    doWork",[37,19879,19880],{"class":50},"(p);\n",[37,19882,19883],{"class":39,"line":10134},[37,19884,1941],{"class":50},[37,19886,19887],{"class":39,"line":10139},[37,19888,19889],{"class":43},"\u002F\u002F 3.以值方式返回局部对象\n",[37,19891,19892,19894,19897],{"class":39,"line":10144},[37,19893,19387],{"class":2320},[37,19895,19896],{"class":2320}," doWork2",[37,19898,2333],{"class":50},[37,19900,19901],{"class":39,"line":10153},[37,19902,1922],{"class":50},[37,19904,19905],{"class":39,"line":10158},[37,19906,19377],{"class":50},[37,19908,19909,19911,19913,19915,19917,19919,19921,19923,19925,19927,19929],{"class":39,"line":10164},[37,19910,1927],{"class":50},[37,19912,1552],{"class":54},[37,19914,165],{"class":50},[37,19916,533],{"class":54},[37,19918,6866],{"class":54},[37,19920,138],{"class":50},[37,19922,869],{"class":54},[37,19924,7478],{"class":50},[37,19926,1552],{"class":54},[37,19928,1617],{"class":50},[37,19930,19931],{"class":43},"\u002F\u002F打印p1的地址\n",[37,19933,19934,19936,19939],{"class":39,"line":10185},[37,19935,4440],{"class":54},[37,19937,19938],{"class":50}," p1;",[37,19940,19941],{"class":43},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[37,19943,19944],{"class":39,"line":10191},[37,19945,1941],{"class":50},[37,19947,19948,19950,19952],{"class":39,"line":10205},[37,19949,5712],{"class":54},[37,19951,6077],{"class":2320},[37,19953,2333],{"class":50},[37,19955,19956],{"class":39,"line":10211},[37,19957,1922],{"class":50},[37,19959,19960,19963,19965,19967],{"class":39,"line":10238},[37,19961,19962],{"class":50},"    Person p ",[37,19964,55],{"class":54},[37,19966,19896],{"class":2320},[37,19968,5984],{"class":50},[37,19970,19971,19973,19975,19977,19979,19981,19983,19985,19987,19989,19991],{"class":39,"line":10247},[37,19972,1927],{"class":50},[37,19974,1552],{"class":54},[37,19976,165],{"class":50},[37,19978,533],{"class":54},[37,19980,6866],{"class":54},[37,19982,138],{"class":50},[37,19984,869],{"class":54},[37,19986,14],{"class":50},[37,19988,1552],{"class":54},[37,19990,1617],{"class":50},[37,19992,19993],{"class":43},"\u002F\u002F打印p的地址\n",[37,19995,19996],{"class":39,"line":10253},[37,19997,1941],{"class":50},[37,19999,20000],{"class":39,"line":10261},[37,20001,2757],{"emptyLinePlaceholder":454},[37,20003,20004],{"class":39,"line":10266},[37,20005,2757],{"emptyLinePlaceholder":454},[37,20007,20008,20010,20012],{"class":39,"line":16945},[37,20009,533],{"class":54},[37,20011,2330],{"class":2320},[37,20013,2333],{"class":50},[37,20015,20016],{"class":39,"line":16951},[37,20017,1922],{"class":50},[37,20019,20020],{"class":39,"line":16974},[37,20021,20022],{"class":43},"    \u002F\u002F test01();\n",[37,20024,20025],{"class":39,"line":16980},[37,20026,20027],{"class":43},"    \u002F\u002F test02();\n",[37,20029,20030,20033],{"class":39,"line":17003},[37,20031,20032],{"class":2320},"    test03",[37,20034,5984],{"class":50},[37,20036,20037],{"class":39,"line":17017},[37,20038,20039],{"class":43},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[37,20041,20042],{"class":39,"line":17037},[37,20043,20044],{"class":43},"\u002F\u002F 输出结果如下：\n",[37,20046,20047],{"class":39,"line":17043},[37,20048,20049],{"class":43},"\u002F\u002F Person的默认构造函数调用\n",[37,20051,20052],{"class":39,"line":17054},[37,20053,20054],{"class":43},"\u002F\u002F 0x7fffffffceec\n",[37,20056,20057],{"class":39,"line":17077},[37,20058,20054],{"class":43},[37,20060,20061],{"class":39,"line":17099},[37,20062,20063],{"class":43},"\u002F\u002F Person的析构函数调用\n",[37,20065,20066],{"class":39,"line":17104},[37,20067,2757],{"emptyLinePlaceholder":454},[37,20069,20070],{"class":39,"line":17110},[37,20071,20072],{"class":43},"\u002F\u002F 之前的输出结果如下：\n",[37,20074,20075],{"class":39,"line":17124},[37,20076,20049],{"class":43},[37,20078,20079],{"class":39,"line":17137},[37,20080,20081],{"class":43},"\u002F\u002F 地址\n",[37,20083,20084],{"class":39,"line":17142},[37,20085,20086],{"class":43},"\u002F\u002F Person的拷贝构造函数调用\n",[37,20088,20089],{"class":39,"line":17156},[37,20090,20063],{"class":43},[37,20092,20093],{"class":39,"line":17161},[37,20094,20081],{"class":43},[37,20096,20097],{"class":39,"line":17167},[37,20098,20099],{"class":43},"\u002F\u002F (这两次输出的地址也是不同的) \n",[37,20101,20102],{"class":39,"line":17172},[37,20103,20104],{"class":43},"\u002F\u002F Person的析构函数调用     \n",[37,20106,20107,20109,20111],{"class":39,"line":17186},[37,20108,4440],{"class":54},[37,20110,4443],{"class":61},[37,20112,1669],{"class":50},[37,20114,20115],{"class":39,"line":17191},[37,20116,1941],{"class":50},[14,20118,20119],{},"简化版理解",[27,20121,20123],{"className":519,"code":20122,"language":521,"meta":32,"style":32},"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",[34,20124,20125,20133,20137,20143,20156,20167,20171,20183,20196,20204,20208,20224,20237,20246,20250,20255,20261,20274,20278,20282,20289,20293,20297,20302,20310,20314,20330,20343,20356,20360,20365,20373,20377,20381,20386,20391,20407,20415,20422,20428,20432,20436,20441,20449,20453,20457,20480,20487,20491,20495,20503,20507,20517,20539,20543,20547,20551,20559,20563,20568,20573,20579,20583,20593,20597,20605],{"__ignoreMap":32},[37,20126,20127,20129,20131],{"class":39,"line":40},[37,20128,15035],{"class":54},[37,20130,15910],{"class":2320},[37,20132,15913],{"class":50},[37,20134,20135],{"class":39,"line":47},[37,20136,15057],{"class":54},[37,20138,20139,20141],{"class":39,"line":104},[37,20140,18860],{"class":2320},[37,20142,11194],{"class":50},[37,20144,20145,20147,20149,20152,20154],{"class":39,"line":113},[37,20146,10010],{"class":50},[37,20148,1552],{"class":54},[37,20150,20151],{"class":185}," \"无参构造函数!\"",[37,20153,1820],{"class":54},[37,20155,9181],{"class":50},[37,20157,20158,20161,20163,20165],{"class":39,"line":189},[37,20159,20160],{"class":50},"        mAge ",[37,20162,55],{"class":54},[37,20164,4443],{"class":61},[37,20166,1669],{"class":50},[37,20168,20169],{"class":39,"line":195},[37,20170,2544],{"class":50},[37,20172,20173,20175,20177,20179,20181],{"class":39,"line":201},[37,20174,18860],{"class":2320},[37,20176,165],{"class":50},[37,20178,533],{"class":54},[37,20180,16030],{"class":159},[37,20182,12783],{"class":50},[37,20184,20185,20187,20189,20192,20194],{"class":39,"line":207},[37,20186,10010],{"class":50},[37,20188,1552],{"class":54},[37,20190,20191],{"class":185}," \"有参构造函数!\"",[37,20193,1820],{"class":54},[37,20195,9181],{"class":50},[37,20197,20198,20200,20202],{"class":39,"line":213},[37,20199,20160],{"class":50},[37,20201,55],{"class":54},[37,20203,8145],{"class":50},[37,20205,20206],{"class":39,"line":218},[37,20207,2544],{"class":50},[37,20209,20210,20212,20214,20216,20218,20220,20222],{"class":39,"line":227},[37,20211,18860],{"class":2320},[37,20213,165],{"class":50},[37,20215,7140],{"class":54},[37,20217,15910],{"class":2320},[37,20219,869],{"class":54},[37,20221,7173],{"class":159},[37,20223,12783],{"class":50},[37,20225,20226,20228,20230,20233,20235],{"class":39,"line":232},[37,20227,10010],{"class":50},[37,20229,1552],{"class":54},[37,20231,20232],{"class":185}," \"拷贝构造函数!\"",[37,20234,1820],{"class":54},[37,20236,9181],{"class":50},[37,20238,20239,20241,20243],{"class":39,"line":238},[37,20240,20160],{"class":50},[37,20242,55],{"class":54},[37,20244,20245],{"class":50}," p.mAge;\n",[37,20247,20248],{"class":39,"line":244},[37,20249,2544],{"class":50},[37,20251,20252],{"class":39,"line":250},[37,20253,20254],{"class":43},"    \u002F\u002F析构函数在释放内存之前调用\n",[37,20256,20257,20259],{"class":39,"line":256},[37,20258,18893],{"class":2320},[37,20260,11194],{"class":50},[37,20262,20263,20265,20267,20270,20272],{"class":39,"line":261},[37,20264,10010],{"class":50},[37,20266,1552],{"class":54},[37,20268,20269],{"class":185}," \"析构函数!\"",[37,20271,1820],{"class":54},[37,20273,9181],{"class":50},[37,20275,20276],{"class":39,"line":267},[37,20277,2544],{"class":50},[37,20279,20280],{"class":39,"line":283},[37,20281,15057],{"class":54},[37,20283,20284,20286],{"class":39,"line":288},[37,20285,2342],{"class":54},[37,20287,20288],{"class":50}," mAge;\n",[37,20290,20291],{"class":39,"line":294},[37,20292,4345],{"class":50},[37,20294,20295],{"class":39,"line":300},[37,20296,2757],{"emptyLinePlaceholder":454},[37,20298,20299],{"class":39,"line":306},[37,20300,20301],{"class":43},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[37,20303,20304,20306,20308],{"class":39,"line":312},[37,20305,5712],{"class":54},[37,20307,5936],{"class":2320},[37,20309,11194],{"class":50},[37,20311,20312],{"class":39,"line":317},[37,20313,2757],{"emptyLinePlaceholder":454},[37,20315,20316,20318,20321,20323,20325,20327],{"class":39,"line":323},[37,20317,19772],{"class":50},[37,20319,20320],{"class":2320},"man",[37,20322,165],{"class":50},[37,20324,154],{"class":61},[37,20326,6314],{"class":50},[37,20328,20329],{"class":43}," \u002F\u002Fp对象已经创建完毕\n",[37,20331,20332,20334,20337,20340],{"class":39,"line":337},[37,20333,19772],{"class":50},[37,20335,20336],{"class":2320},"newman",[37,20338,20339],{"class":50},"(man);",[37,20341,20342],{"class":43}," \u002F\u002F调用拷贝构造函数\n",[37,20344,20345,20348,20350,20353],{"class":39,"line":342},[37,20346,20347],{"class":50},"    Person newman2 ",[37,20349,55],{"class":54},[37,20351,20352],{"class":50}," man;",[37,20354,20355],{"class":43}," \u002F\u002F拷贝构造\n",[37,20357,20358],{"class":39,"line":347},[37,20359,2757],{"emptyLinePlaceholder":454},[37,20361,20362],{"class":39,"line":352},[37,20363,20364],{"class":43},"    \u002F\u002FPerson newman3;\n",[37,20366,20367,20370],{"class":39,"line":357},[37,20368,20369],{"class":43},"    \u002F\u002Fnewman3 = man;",[37,20371,20372],{"class":43}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[37,20374,20375],{"class":39,"line":362},[37,20376,1941],{"class":50},[37,20378,20379],{"class":39,"line":367},[37,20380,2757],{"emptyLinePlaceholder":454},[37,20382,20383],{"class":39,"line":373},[37,20384,20385],{"class":43},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[37,20387,20388],{"class":39,"line":392},[37,20389,20390],{"class":43},"\u002F\u002F相当于Person p1 = p;\n",[37,20392,20393,20395,20397,20399,20401,20404],{"class":39,"line":398},[37,20394,5712],{"class":54},[37,20396,19827],{"class":2320},[37,20398,165],{"class":50},[37,20400,19387],{"class":2320},[37,20402,20403],{"class":159}," p1",[37,20405,20406],{"class":50},") {}\n",[37,20408,20409,20411,20413],{"class":39,"line":409},[37,20410,5712],{"class":54},[37,20412,6005],{"class":2320},[37,20414,11194],{"class":50},[37,20416,20417,20419],{"class":39,"line":415},[37,20418,18945],{"class":50},[37,20420,20421],{"class":43}," \u002F\u002F无参构造函数\n",[37,20423,20424,20426],{"class":39,"line":420},[37,20425,19877],{"class":2320},[37,20427,19880],{"class":50},[37,20429,20430],{"class":39,"line":425},[37,20431,1941],{"class":50},[37,20433,20434],{"class":39,"line":431},[37,20435,2757],{"emptyLinePlaceholder":454},[37,20437,20438],{"class":39,"line":436},[37,20439,20440],{"class":43},"\u002F\u002F3. 以值方式返回局部对象\n",[37,20442,20443,20445,20447],{"class":39,"line":442},[37,20444,19387],{"class":2320},[37,20446,19896],{"class":2320},[37,20448,2333],{"class":50},[37,20450,20451],{"class":39,"line":8374},[37,20452,1922],{"class":50},[37,20454,20455],{"class":39,"line":8386},[37,20456,19377],{"class":50},[37,20458,20459,20461,20463,20465,20467,20469,20471,20473,20476,20478],{"class":39,"line":8398},[37,20460,6877],{"class":50},[37,20462,1552],{"class":54},[37,20464,2027],{"class":50},[37,20466,533],{"class":54},[37,20468,6866],{"class":54},[37,20470,138],{"class":50},[37,20472,869],{"class":54},[37,20474,20475],{"class":50},"p1 ",[37,20477,1552],{"class":54},[37,20479,9181],{"class":50},[37,20481,20482,20484],{"class":39,"line":10057},[37,20483,4440],{"class":54},[37,20485,20486],{"class":50}," p1;\n",[37,20488,20489],{"class":39,"line":10082},[37,20490,1941],{"class":50},[37,20492,20493],{"class":39,"line":10105},[37,20494,2757],{"emptyLinePlaceholder":454},[37,20496,20497,20499,20501],{"class":39,"line":10129},[37,20498,5712],{"class":54},[37,20500,6077],{"class":2320},[37,20502,2333],{"class":50},[37,20504,20505],{"class":39,"line":10134},[37,20506,1922],{"class":50},[37,20508,20509,20511,20513,20515],{"class":39,"line":10139},[37,20510,19962],{"class":50},[37,20512,55],{"class":54},[37,20514,19896],{"class":2320},[37,20516,5984],{"class":50},[37,20518,20519,20521,20523,20525,20527,20529,20531,20533,20535,20537],{"class":39,"line":10144},[37,20520,6877],{"class":50},[37,20522,1552],{"class":54},[37,20524,2027],{"class":50},[37,20526,533],{"class":54},[37,20528,6866],{"class":54},[37,20530,138],{"class":50},[37,20532,869],{"class":54},[37,20534,11789],{"class":50},[37,20536,1552],{"class":54},[37,20538,9181],{"class":50},[37,20540,20541],{"class":39,"line":10153},[37,20542,1941],{"class":50},[37,20544,20545],{"class":39,"line":10158},[37,20546,2757],{"emptyLinePlaceholder":454},[37,20548,20549],{"class":39,"line":10164},[37,20550,2757],{"emptyLinePlaceholder":454},[37,20552,20553,20555,20557],{"class":39,"line":10185},[37,20554,533],{"class":54},[37,20556,2330],{"class":2320},[37,20558,11194],{"class":50},[37,20560,20561],{"class":39,"line":10191},[37,20562,2757],{"emptyLinePlaceholder":454},[37,20564,20565],{"class":39,"line":10205},[37,20566,20567],{"class":43},"    \u002F\u002Ftest01();\n",[37,20569,20570],{"class":39,"line":10211},[37,20571,20572],{"class":43},"    \u002F\u002Ftest02();\n",[37,20574,20575,20577],{"class":39,"line":10238},[37,20576,20032],{"class":2320},[37,20578,5984],{"class":50},[37,20580,20581],{"class":39,"line":10247},[37,20582,2757],{"emptyLinePlaceholder":454},[37,20584,20585,20587,20589,20591],{"class":39,"line":10253},[37,20586,2660],{"class":2320},[37,20588,165],{"class":50},[37,20590,2665],{"class":185},[37,20592,3069],{"class":50},[37,20594,20595],{"class":39,"line":10261},[37,20596,2757],{"emptyLinePlaceholder":454},[37,20598,20599,20601,20603],{"class":39,"line":10266},[37,20600,4440],{"class":54},[37,20602,4443],{"class":61},[37,20604,1669],{"class":50},[37,20606,20607],{"class":39,"line":16945},[37,20608,1941],{"class":50},[498,20610,20612],{"id":20611},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20614,20615],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20617,20618],{},"1．默认构造函数(无参，函数体为空)",[14,20620,20621],{},"2．默认析构函数(无参，函数体为空)",[14,20623,20624],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20626,20627],{},"构造函数调用规则如下：",[1515,20629,20630,20633],{},[484,20631,20632],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[484,20634,20635],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[27,20637,20639],{"className":519,"code":20638,"language":521,"meta":32,"style":32},"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",[34,20640,20641,20649,20653,20658,20664,20676,20680,20685,20697,20706,20718,20722,20726,20742,20751,20763,20767,20771,20777,20789,20793,20797,20803,20807,20811,20819,20823,20835,20840,20848,20852,20870,20874,20878,20886,20890,20895,20903,20918,20931,20935,20940,20947,20963,20976,20980,20984,20992,20996,21002,21006,21016,21020,21028],{"__ignoreMap":32},[37,20642,20643,20645,20647],{"class":39,"line":40},[37,20644,15035],{"class":54},[37,20646,15910],{"class":2320},[37,20648,15913],{"class":50},[37,20650,20651],{"class":39,"line":47},[37,20652,15057],{"class":54},[37,20654,20655],{"class":39,"line":104},[37,20656,20657],{"class":43},"    \u002F\u002F无参（默认）构造函数\n",[37,20659,20660,20662],{"class":39,"line":113},[37,20661,18860],{"class":2320},[37,20663,11194],{"class":50},[37,20665,20666,20668,20670,20672,20674],{"class":39,"line":189},[37,20667,10010],{"class":50},[37,20669,1552],{"class":54},[37,20671,20151],{"class":185},[37,20673,1820],{"class":54},[37,20675,9181],{"class":50},[37,20677,20678],{"class":39,"line":195},[37,20679,2544],{"class":50},[37,20681,20682],{"class":39,"line":201},[37,20683,20684],{"class":43},"    \u002F\u002F有参构造函数\n",[37,20686,20687,20689,20691,20693,20695],{"class":39,"line":207},[37,20688,18860],{"class":2320},[37,20690,165],{"class":50},[37,20692,533],{"class":54},[37,20694,1774],{"class":159},[37,20696,12783],{"class":50},[37,20698,20699,20702,20704],{"class":39,"line":213},[37,20700,20701],{"class":50},"        age ",[37,20703,55],{"class":54},[37,20705,1808],{"class":50},[37,20707,20708,20710,20712,20714,20716],{"class":39,"line":218},[37,20709,10010],{"class":50},[37,20711,1552],{"class":54},[37,20713,20191],{"class":185},[37,20715,1820],{"class":54},[37,20717,9181],{"class":50},[37,20719,20720],{"class":39,"line":227},[37,20721,2544],{"class":50},[37,20723,20724],{"class":39,"line":232},[37,20725,19215],{"class":43},[37,20727,20728,20730,20732,20734,20736,20738,20740],{"class":39,"line":238},[37,20729,18860],{"class":2320},[37,20731,165],{"class":50},[37,20733,7140],{"class":54},[37,20735,15910],{"class":2320},[37,20737,869],{"class":54},[37,20739,7173],{"class":159},[37,20741,12783],{"class":50},[37,20743,20744,20746,20748],{"class":39,"line":244},[37,20745,20701],{"class":50},[37,20747,55],{"class":54},[37,20749,20750],{"class":50}," p.age;\n",[37,20752,20753,20755,20757,20759,20761],{"class":39,"line":250},[37,20754,10010],{"class":50},[37,20756,1552],{"class":54},[37,20758,20232],{"class":185},[37,20760,1820],{"class":54},[37,20762,9181],{"class":50},[37,20764,20765],{"class":39,"line":256},[37,20766,2544],{"class":50},[37,20768,20769],{"class":39,"line":261},[37,20770,18888],{"class":43},[37,20772,20773,20775],{"class":39,"line":267},[37,20774,18893],{"class":2320},[37,20776,11194],{"class":50},[37,20778,20779,20781,20783,20785,20787],{"class":39,"line":283},[37,20780,10010],{"class":50},[37,20782,1552],{"class":54},[37,20784,20269],{"class":185},[37,20786,1820],{"class":54},[37,20788,9181],{"class":50},[37,20790,20791],{"class":39,"line":288},[37,20792,2544],{"class":50},[37,20794,20795],{"class":39,"line":294},[37,20796,15057],{"class":54},[37,20798,20799,20801],{"class":39,"line":300},[37,20800,2342],{"class":54},[37,20802,8145],{"class":50},[37,20804,20805],{"class":39,"line":306},[37,20806,4345],{"class":50},[37,20808,20809],{"class":39,"line":312},[37,20810,2757],{"emptyLinePlaceholder":454},[37,20812,20813,20815,20817],{"class":39,"line":317},[37,20814,5712],{"class":54},[37,20816,5936],{"class":2320},[37,20818,2333],{"class":50},[37,20820,20821],{"class":39,"line":323},[37,20822,1922],{"class":50},[37,20824,20825,20827,20829,20831,20833],{"class":39,"line":337},[37,20826,19772],{"class":50},[37,20828,7478],{"class":2320},[37,20830,165],{"class":50},[37,20832,1160],{"class":61},[37,20834,3069],{"class":50},[37,20836,20837],{"class":39,"line":342},[37,20838,20839],{"class":43},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[37,20841,20842,20844,20846],{"class":39,"line":347},[37,20843,19772],{"class":50},[37,20845,7381],{"class":2320},[37,20847,17856],{"class":50},[37,20849,20850],{"class":39,"line":352},[37,20851,2757],{"emptyLinePlaceholder":454},[37,20853,20854,20856,20858,20861,20863,20866,20868],{"class":39,"line":357},[37,20855,6877],{"class":50},[37,20857,1552],{"class":54},[37,20859,20860],{"class":185}," \"p2的年龄为： \"",[37,20862,1820],{"class":54},[37,20864,20865],{"class":50}," p2.age ",[37,20867,1552],{"class":54},[37,20869,9181],{"class":50},[37,20871,20872],{"class":39,"line":362},[37,20873,1941],{"class":50},[37,20875,20876],{"class":39,"line":367},[37,20877,2757],{"emptyLinePlaceholder":454},[37,20879,20880,20882,20884],{"class":39,"line":373},[37,20881,5712],{"class":54},[37,20883,6005],{"class":2320},[37,20885,2333],{"class":50},[37,20887,20888],{"class":39,"line":392},[37,20889,1922],{"class":50},[37,20891,20892],{"class":39,"line":398},[37,20893,20894],{"class":43},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[37,20896,20897,20900],{"class":39,"line":409},[37,20898,20899],{"class":50},"    Person p1;",[37,20901,20902],{"class":43}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[37,20904,20905,20907,20909,20911,20913,20915],{"class":39,"line":415},[37,20906,19772],{"class":50},[37,20908,7381],{"class":2320},[37,20910,165],{"class":50},[37,20912,98],{"class":61},[37,20914,6314],{"class":50},[37,20916,20917],{"class":43}," \u002F\u002F用户提供的有参\n",[37,20919,20920,20922,20925,20928],{"class":39,"line":420},[37,20921,19772],{"class":50},[37,20923,20924],{"class":2320},"p3",[37,20926,20927],{"class":50},"(p2);",[37,20929,20930],{"class":43}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[37,20932,20933],{"class":39,"line":425},[37,20934,2757],{"emptyLinePlaceholder":454},[37,20936,20937],{"class":39,"line":431},[37,20938,20939],{"class":43},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[37,20941,20942,20945],{"class":39,"line":436},[37,20943,20944],{"class":50},"    Person p4;",[37,20946,20902],{"class":43},[37,20948,20949,20951,20954,20956,20958,20960],{"class":39,"line":442},[37,20950,19772],{"class":50},[37,20952,20953],{"class":2320},"p5",[37,20955,165],{"class":50},[37,20957,98],{"class":61},[37,20959,6314],{"class":50},[37,20961,20962],{"class":43}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[37,20964,20965,20967,20970,20973],{"class":39,"line":8374},[37,20966,19772],{"class":50},[37,20968,20969],{"class":2320},"p6",[37,20971,20972],{"class":50},"(p5);",[37,20974,20975],{"class":43}," \u002F\u002F用户自己提供拷贝构造\n",[37,20977,20978],{"class":39,"line":8386},[37,20979,1941],{"class":50},[37,20981,20982],{"class":39,"line":8398},[37,20983,2757],{"emptyLinePlaceholder":454},[37,20985,20986,20988,20990],{"class":39,"line":10057},[37,20987,533],{"class":54},[37,20989,2330],{"class":2320},[37,20991,11194],{"class":50},[37,20993,20994],{"class":39,"line":10082},[37,20995,2757],{"emptyLinePlaceholder":454},[37,20997,20998,21000],{"class":39,"line":10105},[37,20999,5981],{"class":2320},[37,21001,5984],{"class":50},[37,21003,21004],{"class":39,"line":10129},[37,21005,2757],{"emptyLinePlaceholder":454},[37,21007,21008,21010,21012,21014],{"class":39,"line":10134},[37,21009,2660],{"class":2320},[37,21011,165],{"class":50},[37,21013,2665],{"class":185},[37,21015,3069],{"class":50},[37,21017,21018],{"class":39,"line":10139},[37,21019,2757],{"emptyLinePlaceholder":454},[37,21021,21022,21024,21026],{"class":39,"line":10144},[37,21023,4440],{"class":54},[37,21025,4443],{"class":61},[37,21027,1669],{"class":50},[37,21029,21030],{"class":39,"line":10153},[37,21031,1941],{"class":50},[498,21033,21035],{"id":21034},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,21037,21038],{},"浅拷贝：简单的赋值拷贝操作",[14,21040,21041],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[27,21043,21045],{"className":519,"code":21044,"language":521,"meta":32,"style":32},"#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",[34,21046,21047,21053,21063,21069,21073,21077,21082,21088,21092,21105,21109,21113,21120,21124,21134,21149,21162,21166,21171,21176,21192,21196,21209,21214,21219,21224,21233,21238,21253,21257,21261,21265,21271,21275,21280,21295,21299,21310,21324,21328,21337,21341,21347,21359,21363,21371,21375,21392,21423,21431,21459,21463,21467,21475,21479,21485],{"__ignoreMap":32},[37,21048,21049,21051],{"class":39,"line":40},[37,21050,2306],{"class":54},[37,21052,2309],{"class":185},[37,21054,21055,21057,21059,21061],{"class":39,"line":47},[37,21056,2314],{"class":54},[37,21058,2317],{"class":54},[37,21060,2321],{"class":2320},[37,21062,1669],{"class":50},[37,21064,21065,21067],{"class":39,"line":104},[37,21066,15035],{"class":54},[37,21068,15512],{"class":2320},[37,21070,21071],{"class":39,"line":113},[37,21072,1922],{"class":50},[37,21074,21075],{"class":39,"line":189},[37,21076,15057],{"class":54},[37,21078,21079],{"class":39,"line":195},[37,21080,21081],{"class":43},"    \u002F\u002F默认构造函数\n",[37,21083,21084,21086],{"class":39,"line":201},[37,21085,18860],{"class":2320},[37,21087,2333],{"class":50},[37,21089,21090],{"class":39,"line":207},[37,21091,2387],{"class":50},[37,21093,21094,21096,21098,21101,21103],{"class":39,"line":213},[37,21095,3801],{"class":50},[37,21097,1552],{"class":54},[37,21099,21100],{"class":185},"\"默认构造函数\"",[37,21102,1552],{"class":54},[37,21104,1574],{"class":50},[37,21106,21107],{"class":39,"line":218},[37,21108,2544],{"class":50},[37,21110,21111],{"class":39,"line":227},[37,21112,20684],{"class":43},[37,21114,21115,21117],{"class":39,"line":232},[37,21116,18893],{"class":2320},[37,21118,21119],{"class":50},"(int age,int height)\n",[37,21121,21122],{"class":39,"line":238},[37,21123,2387],{"class":50},[37,21125,21126,21129,21131],{"class":39,"line":244},[37,21127,21128],{"class":50},"        m_Age",[37,21130,55],{"class":54},[37,21132,21133],{"class":50},"age;\n",[37,21135,21136,21139,21141,21143,21146],{"class":39,"line":250},[37,21137,21138],{"class":50},"        m_Height",[37,21140,12058],{"class":54},[37,21142,2739],{"class":54},[37,21144,21145],{"class":50},"(height);",[37,21147,21148],{"class":43},"\u002F\u002F放到堆区\n",[37,21150,21151,21153,21155,21158,21160],{"class":39,"line":256},[37,21152,3801],{"class":50},[37,21154,1552],{"class":54},[37,21156,21157],{"class":185},"\"有参构造函数\"",[37,21159,1552],{"class":54},[37,21161,1574],{"class":50},[37,21163,21164],{"class":39,"line":261},[37,21165,2544],{"class":50},[37,21167,21168],{"class":39,"line":267},[37,21169,21170],{"class":43},"    \u002F\u002F深拷贝解决上述问题\n",[37,21172,21173],{"class":39,"line":283},[37,21174,21175],{"class":43},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[37,21177,21178,21180,21182,21184,21186,21188,21190],{"class":39,"line":288},[37,21179,18860],{"class":2320},[37,21181,165],{"class":50},[37,21183,7140],{"class":54},[37,21185,15910],{"class":2320},[37,21187,10925],{"class":54},[37,21189,14],{"class":159},[37,21191,280],{"class":50},[37,21193,21194],{"class":39,"line":294},[37,21195,2387],{"class":50},[37,21197,21198,21200,21202,21205,21207],{"class":39,"line":300},[37,21199,3801],{"class":50},[37,21201,1552],{"class":54},[37,21203,21204],{"class":185},"\"拷贝构造函数\"",[37,21206,1552],{"class":54},[37,21208,1574],{"class":50},[37,21210,21211],{"class":39,"line":306},[37,21212,21213],{"class":43},"        \u002F\u002F编译器默认的写如下注释部分\n",[37,21215,21216],{"class":39,"line":312},[37,21217,21218],{"class":43},"        \u002F\u002Fm_Age=p.m_Age;\n",[37,21220,21221],{"class":39,"line":317},[37,21222,21223],{"class":43},"        \u002F\u002Fm_Height=p.m_Height;\n",[37,21225,21226,21228,21230],{"class":39,"line":323},[37,21227,21128],{"class":50},[37,21229,55],{"class":54},[37,21231,21232],{"class":50},"p.m_Age;\n",[37,21234,21235],{"class":39,"line":337},[37,21236,21237],{"class":43},"        \u002F\u002F深拷贝操作\n",[37,21239,21240,21242,21244,21246,21248,21250],{"class":39,"line":342},[37,21241,21138],{"class":50},[37,21243,12058],{"class":54},[37,21245,2739],{"class":54},[37,21247,165],{"class":50},[37,21249,967],{"class":54},[37,21251,21252],{"class":50},"p.m_Height);\n",[37,21254,21255],{"class":39,"line":347},[37,21256,2544],{"class":50},[37,21258,21259],{"class":39,"line":352},[37,21260,2757],{"emptyLinePlaceholder":454},[37,21262,21263],{"class":39,"line":357},[37,21264,18888],{"class":43},[37,21266,21267,21269],{"class":39,"line":362},[37,21268,18893],{"class":2320},[37,21270,2333],{"class":50},[37,21272,21273],{"class":39,"line":367},[37,21274,2387],{"class":50},[37,21276,21277],{"class":39,"line":373},[37,21278,21279],{"class":43},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[37,21281,21282,21284,21287,21290,21293],{"class":39,"line":392},[37,21283,2854],{"class":54},[37,21285,21286],{"class":50},"(m_Height ",[37,21288,21289],{"class":54},"!=",[37,21291,21292],{"class":61}," NULL",[37,21294,280],{"class":50},[37,21296,21297],{"class":39,"line":398},[37,21298,2867],{"class":50},[37,21300,21301,21304,21307],{"class":39,"line":409},[37,21302,21303],{"class":54},"            delete",[37,21305,21306],{"class":50}," m_Height;",[37,21308,21309],{"class":43}," \u002F\u002F释放堆区内存\n",[37,21311,21312,21315,21317,21319,21321],{"class":39,"line":415},[37,21313,21314],{"class":50},"            m_Height",[37,21316,55],{"class":54},[37,21318,2749],{"class":61},[37,21320,582],{"class":50},[37,21322,21323],{"class":43}," \u002F\u002F防止野指针\n",[37,21325,21326],{"class":39,"line":420},[37,21327,2886],{"class":50},[37,21329,21330,21332,21334],{"class":39,"line":425},[37,21331,3801],{"class":50},[37,21333,1552],{"class":54},[37,21335,21336],{"class":185},"\"Person的析构函数调用\"\n",[37,21338,21339],{"class":39,"line":431},[37,21340,2544],{"class":50},[37,21342,21343,21345],{"class":39,"line":436},[37,21344,2342],{"class":54},[37,21346,16007],{"class":50},[37,21348,21349,21351,21353,21356],{"class":39,"line":442},[37,21350,2342],{"class":54},[37,21352,6866],{"class":54},[37,21354,21355],{"class":50},"m_Height;",[37,21357,21358],{"class":43}," \u002F\u002F定义一个指针，指向身高\n",[37,21360,21361],{"class":39,"line":8374},[37,21362,4345],{"class":50},[37,21364,21365,21367,21369],{"class":39,"line":8386},[37,21366,5712],{"class":54},[37,21368,5936],{"class":2320},[37,21370,2333],{"class":50},[37,21372,21373],{"class":39,"line":8398},[37,21374,1922],{"class":50},[37,21376,21377,21379,21381,21383,21385,21387,21390],{"class":39,"line":10057},[37,21378,19772],{"class":50},[37,21380,7478],{"class":2320},[37,21382,165],{"class":50},[37,21384,1160],{"class":61},[37,21386,65],{"class":50},[37,21388,21389],{"class":61},"160",[37,21391,3069],{"class":50},[37,21393,21394,21396,21398,21401,21403,21406,21408,21411,21413,21416,21418,21420],{"class":39,"line":10082},[37,21395,1927],{"class":50},[37,21397,1552],{"class":54},[37,21399,21400],{"class":185},"\"p1的年龄为:\"",[37,21402,1552],{"class":54},[37,21404,21405],{"class":50},"p1.m_Age",[37,21407,1552],{"class":54},[37,21409,21410],{"class":185},"\"身高为：\"",[37,21412,6767],{"class":54},[37,21414,21415],{"class":50},"p1.m_Height",[37,21417,1552],{"class":54},[37,21419,1617],{"class":50},[37,21421,21422],{"class":43},"  \u002F\u002F18\n",[37,21424,21425,21427,21429],{"class":39,"line":10105},[37,21426,19772],{"class":50},[37,21428,7381],{"class":2320},[37,21430,17856],{"class":50},[37,21432,21433,21435,21437,21440,21442,21444,21446,21448,21450,21453,21455,21457],{"class":39,"line":10129},[37,21434,1927],{"class":50},[37,21436,1552],{"class":54},[37,21438,21439],{"class":185},"\"p2的年龄为：\"",[37,21441,1552],{"class":54},[37,21443,19802],{"class":50},[37,21445,1552],{"class":54},[37,21447,21410],{"class":185},[37,21449,6767],{"class":54},[37,21451,21452],{"class":50},"p2.m_Height",[37,21454,1552],{"class":54},[37,21456,1617],{"class":50},[37,21458,21422],{"class":43},[37,21460,21461],{"class":39,"line":10134},[37,21462,13551],{"class":50},[37,21464,21465],{"class":39,"line":10139},[37,21466,1941],{"class":50},[37,21468,21469,21471,21473],{"class":39,"line":10144},[37,21470,533],{"class":54},[37,21472,2330],{"class":2320},[37,21474,2333],{"class":50},[37,21476,21477],{"class":39,"line":10153},[37,21478,1922],{"class":50},[37,21480,21481,21483],{"class":39,"line":10158},[37,21482,5981],{"class":2320},[37,21484,5984],{"class":50},[37,21486,21487],{"class":39,"line":10164},[37,21488,1941],{"class":50},[14,21490,21491],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21493,21494],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21496,21497],{},[1838,21498],{"alt":32,"src":21499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21501,21502],{},"浅拷贝问题要使用深拷贝来解决",[14,21504,21505],{},[1838,21506],{"alt":32,"src":21507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21509,21510],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[498,21512,21514],{"id":21513},"_826初始化列表","8.2.6初始化列表",[14,21516,21517],{},"作用：初始化属性",[14,21519,5530],{},[27,21521,21524],{"className":21522,"code":21523,"language":5536},[5534],"构造函数():属性1(值1),属性2(值2).....{}\n",[34,21525,21523],{"__ignoreMap":32},[14,21527,21528],{},"例子",[27,21530,21532],{"className":519,"code":21531,"language":521,"meta":32,"style":32},"#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",[34,21533,21534,21540,21550,21556,21560,21565,21569,21574,21579,21584,21589,21594,21599,21603,21608,21613,21656,21665,21683,21701,21719,21723,21727,21734,21741,21748,21752,21756,21764,21768,21772,21792,21801,21805,21809,21819,21823,21831],{"__ignoreMap":32},[37,21535,21536,21538],{"class":39,"line":40},[37,21537,2306],{"class":54},[37,21539,2309],{"class":185},[37,21541,21542,21544,21546,21548],{"class":39,"line":47},[37,21543,2314],{"class":54},[37,21545,2317],{"class":54},[37,21547,2321],{"class":2320},[37,21549,1669],{"class":50},[37,21551,21552,21554],{"class":39,"line":104},[37,21553,15035],{"class":54},[37,21555,15512],{"class":2320},[37,21557,21558],{"class":39,"line":113},[37,21559,1922],{"class":50},[37,21561,21562],{"class":39,"line":189},[37,21563,21564],{"class":54},"    public:\n",[37,21566,21567],{"class":39,"line":195},[37,21568,2757],{"emptyLinePlaceholder":454},[37,21570,21571],{"class":39,"line":201},[37,21572,21573],{"class":43},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[37,21575,21576],{"class":39,"line":207},[37,21577,21578],{"class":43},"    \u002F\u002FPerson(int a, int b, int c) {\n",[37,21580,21581],{"class":39,"line":213},[37,21582,21583],{"class":43},"    \u002F\u002F  m_A = a;\n",[37,21585,21586],{"class":39,"line":218},[37,21587,21588],{"class":43},"    \u002F\u002F  m_B = b;\n",[37,21590,21591],{"class":39,"line":227},[37,21592,21593],{"class":43},"    \u002F\u002F  m_C = c;\n",[37,21595,21596],{"class":39,"line":232},[37,21597,21598],{"class":43},"    \u002F\u002F}\n",[37,21600,21601],{"class":39,"line":238},[37,21602,2757],{"emptyLinePlaceholder":454},[37,21604,21605],{"class":39,"line":244},[37,21606,21607],{"class":43},"    \u002F\u002F初始化列表方式初始化\n",[37,21609,21610],{"class":39,"line":250},[37,21611,21612],{"class":43},"    \u002F\u002F使用有参构造函数\n",[37,21614,21615,21617,21619,21621,21623,21625,21627,21629,21631,21633,21635,21638,21641,21644,21647,21650,21653],{"class":39,"line":256},[37,21616,18860],{"class":2320},[37,21618,165],{"class":50},[37,21620,533],{"class":54},[37,21622,1774],{"class":159},[37,21624,12776],{"class":50},[37,21626,533],{"class":54},[37,21628,3183],{"class":159},[37,21630,12776],{"class":50},[37,21632,533],{"class":54},[37,21634,3199],{"class":159},[37,21636,21637],{"class":50},") :",[37,21639,21640],{"class":2320},"m_A",[37,21642,21643],{"class":50},"(a), ",[37,21645,21646],{"class":2320},"m_B",[37,21648,21649],{"class":50},"(b), ",[37,21651,21652],{"class":2320},"m_C",[37,21654,21655],{"class":50},"(c) {}\n",[37,21657,21658,21660,21663],{"class":39,"line":261},[37,21659,15250],{"class":54},[37,21661,21662],{"class":2320}," PrintPerson",[37,21664,11194],{"class":50},[37,21666,21667,21669,21671,21674,21676,21679,21681],{"class":39,"line":267},[37,21668,10010],{"class":50},[37,21670,1552],{"class":54},[37,21672,21673],{"class":185}," \"mA:\"",[37,21675,1820],{"class":54},[37,21677,21678],{"class":50}," m_A ",[37,21680,1552],{"class":54},[37,21682,9181],{"class":50},[37,21684,21685,21687,21689,21692,21694,21697,21699],{"class":39,"line":283},[37,21686,10010],{"class":50},[37,21688,1552],{"class":54},[37,21690,21691],{"class":185}," \"mB:\"",[37,21693,1820],{"class":54},[37,21695,21696],{"class":50}," m_B ",[37,21698,1552],{"class":54},[37,21700,9181],{"class":50},[37,21702,21703,21705,21707,21710,21712,21715,21717],{"class":39,"line":288},[37,21704,10010],{"class":50},[37,21706,1552],{"class":54},[37,21708,21709],{"class":185}," \"mC:\"",[37,21711,1820],{"class":54},[37,21713,21714],{"class":50}," m_C ",[37,21716,1552],{"class":54},[37,21718,9181],{"class":50},[37,21720,21721],{"class":39,"line":294},[37,21722,2544],{"class":50},[37,21724,21725],{"class":39,"line":300},[37,21726,15563],{"class":54},[37,21728,21729,21731],{"class":39,"line":306},[37,21730,2342],{"class":54},[37,21732,21733],{"class":50}," m_A;\n",[37,21735,21736,21738],{"class":39,"line":312},[37,21737,2342],{"class":54},[37,21739,21740],{"class":50}," m_B;\n",[37,21742,21743,21745],{"class":39,"line":317},[37,21744,2342],{"class":54},[37,21746,21747],{"class":50}," m_C;\n",[37,21749,21750],{"class":39,"line":323},[37,21751,4345],{"class":50},[37,21753,21754],{"class":39,"line":337},[37,21755,2757],{"emptyLinePlaceholder":454},[37,21757,21758,21760,21762],{"class":39,"line":342},[37,21759,533],{"class":54},[37,21761,2330],{"class":2320},[37,21763,6326],{"class":50},[37,21765,21766],{"class":39,"line":347},[37,21767,1922],{"class":50},[37,21769,21770],{"class":39,"line":352},[37,21771,2757],{"emptyLinePlaceholder":454},[37,21773,21774,21776,21778,21780,21782,21784,21786,21788,21790],{"class":39,"line":357},[37,21775,19772],{"class":50},[37,21777,14],{"class":2320},[37,21779,165],{"class":50},[37,21781,332],{"class":61},[37,21783,12776],{"class":50},[37,21785,602],{"class":61},[37,21787,12776],{"class":50},[37,21789,62],{"class":61},[37,21791,3069],{"class":50},[37,21793,21794,21796,21799],{"class":39,"line":362},[37,21795,16207],{"class":50},[37,21797,21798],{"class":2320},"PrintPerson",[37,21800,5984],{"class":50},[37,21802,21803],{"class":39,"line":367},[37,21804,2757],{"emptyLinePlaceholder":454},[37,21806,21807],{"class":39,"line":373},[37,21808,2757],{"emptyLinePlaceholder":454},[37,21810,21811,21813,21815,21817],{"class":39,"line":392},[37,21812,2660],{"class":2320},[37,21814,165],{"class":50},[37,21816,2665],{"class":185},[37,21818,3069],{"class":50},[37,21820,21821],{"class":39,"line":398},[37,21822,2757],{"emptyLinePlaceholder":454},[37,21824,21825,21827,21829],{"class":39,"line":409},[37,21826,4440],{"class":54},[37,21828,4443],{"class":61},[37,21830,1669],{"class":50},[37,21832,21833],{"class":39,"line":415},[37,21834,1941],{"class":50},[14,21836,21837,21838,21841,21842],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[673,21839,21840],{},"参数名就是定义的对象属性","，",[673,21843,21844],{},"属性后面的值为有参构造函数的形参",[27,21846,21848],{"className":519,"code":21847,"language":521,"meta":32,"style":32},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[34,21849,21850],{"__ignoreMap":32},[37,21851,21852,21854,21856,21858,21861,21863,21866,21868,21871,21873,21876,21878,21881,21883],{"class":39,"line":40},[37,21853,19387],{"class":2320},[37,21855,165],{"class":50},[37,21857,533],{"class":54},[37,21859,21860],{"class":50}," a.",[37,21862,533],{"class":54},[37,21864,21865],{"class":50}," b,",[37,21867,533],{"class":54},[37,21869,21870],{"class":50}," b):",[37,21872,21640],{"class":2320},[37,21874,21875],{"class":50},"(a),",[37,21877,21646],{"class":2320},[37,21879,21880],{"class":50},"(c),",[37,21882,21652],{"class":2320},[37,21884,21885],{"class":50},"(b) {}\n",[498,21887,21889],{"id":21888},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21891,21892],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21894,14974],{},[27,21896,21898],{"className":519,"code":21897,"language":521,"meta":32,"style":32},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[34,21899,21900,21905,21910,21914,21919,21923],{"__ignoreMap":32},[37,21901,21902],{"class":39,"line":40},[37,21903,21904],{"class":50},"A{};\n",[37,21906,21907],{"class":39,"line":47},[37,21908,21909],{"class":50},"B\n",[37,21911,21912],{"class":39,"line":104},[37,21913,1922],{"class":50},[37,21915,21916],{"class":39,"line":113},[37,21917,21918],{"class":50},"    A a;\n",[37,21920,21921],{"class":39,"line":189},[37,21922,1941],{"class":50},[37,21924,21925],{"class":39,"line":195},[37,21926,21927],{"class":43},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21929,21930],{},"案例",[27,21932,21934],{"className":519,"code":21933,"language":521,"meta":32,"style":32},"\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",[34,21935,21936,21941,21948,21952,21957,21962,21976,21980,21990,22001,22005,22012,22016,22029,22033,22038,22043,22047,22053,22057,22061,22065,22096,22100,22111,22115,22121,22125,22138,22142,22146,22150,22155,22160,22164,22172,22176,22193,22212,22216,22224,22228,22234],{"__ignoreMap":32},[37,21937,21938],{"class":39,"line":40},[37,21939,21940],{"class":43},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[37,21942,21943,21945],{"class":39,"line":47},[37,21944,15035],{"class":54},[37,21946,21947],{"class":2320}," Phone\n",[37,21949,21950],{"class":39,"line":104},[37,21951,1922],{"class":50},[37,21953,21954],{"class":39,"line":113},[37,21955,21956],{"class":50},"public：\n",[37,21958,21959],{"class":39,"line":189},[37,21960,21961],{"class":43},"    \u002F\u002F 赋值(构造函数)\n",[37,21963,21964,21967,21969,21971,21974],{"class":39,"line":195},[37,21965,21966],{"class":2320},"    Phone",[37,21968,165],{"class":50},[37,21970,15258],{"class":2320},[37,21972,21973],{"class":159}," pName",[37,21975,280],{"class":50},[37,21977,21978],{"class":39,"line":201},[37,21979,2387],{"class":50},[37,21981,21982,21985,21987],{"class":39,"line":207},[37,21983,21984],{"class":50},"        m_pName",[37,21986,55],{"class":54},[37,21988,21989],{"class":50},"pName;\n",[37,21991,21992,21994,21996,21999],{"class":39,"line":213},[37,21993,3801],{"class":50},[37,21995,1552],{"class":54},[37,21997,21998],{"class":185},"\"Phone的构造函数调用\"",[37,22000,1669],{"class":50},[37,22002,22003],{"class":39,"line":218},[37,22004,2544],{"class":50},[37,22006,22007,22010],{"class":39,"line":227},[37,22008,22009],{"class":2320},"    ~Phone",[37,22011,2333],{"class":50},[37,22013,22014],{"class":39,"line":232},[37,22015,2387],{"class":50},[37,22017,22018,22020,22022,22025,22027],{"class":39,"line":238},[37,22019,3801],{"class":50},[37,22021,1552],{"class":54},[37,22023,22024],{"class":185},"\"Phone析构函数调用\"",[37,22026,1552],{"class":54},[37,22028,1574],{"class":50},[37,22030,22031],{"class":39,"line":244},[37,22032,2544],{"class":50},[37,22034,22035],{"class":39,"line":250},[37,22036,22037],{"class":43},"    \u002F\u002F\n",[37,22039,22040],{"class":39,"line":256},[37,22041,22042],{"class":50},"    string m_PName;\n",[37,22044,22045],{"class":39,"line":261},[37,22046,4345],{"class":50},[37,22048,22049,22051],{"class":39,"line":267},[37,22050,15035],{"class":54},[37,22052,15512],{"class":2320},[37,22054,22055],{"class":39,"line":283},[37,22056,1922],{"class":50},[37,22058,22059],{"class":39,"line":288},[37,22060,15057],{"class":54},[37,22062,22063],{"class":39,"line":294},[37,22064,17335],{"class":43},[37,22066,22067,22069,22071,22073,22075,22077,22079,22082,22085,22087,22090,22093],{"class":39,"line":300},[37,22068,18860],{"class":2320},[37,22070,165],{"class":50},[37,22072,15258],{"class":2320},[37,22074,15261],{"class":159},[37,22076,65],{"class":50},[37,22078,15258],{"class":2320},[37,22080,22081],{"class":159}," pname",[37,22083,22084],{"class":50},"):",[37,22086,15351],{"class":2320},[37,22088,22089],{"class":50},"(name),m_phone.",[37,22091,22092],{"class":2320},"m_PName",[37,22094,22095],{"class":50},"(pname) \n",[37,22097,22098],{"class":39,"line":306},[37,22099,2387],{"class":50},[37,22101,22102,22104,22106,22109],{"class":39,"line":312},[37,22103,3801],{"class":50},[37,22105,1552],{"class":54},[37,22107,22108],{"class":185},"\"Person的构造函数调用\"",[37,22110,1669],{"class":50},[37,22112,22113],{"class":39,"line":317},[37,22114,2544],{"class":50},[37,22116,22117,22119],{"class":39,"line":323},[37,22118,18893],{"class":2320},[37,22120,2333],{"class":50},[37,22122,22123],{"class":39,"line":337},[37,22124,2387],{"class":50},[37,22126,22127,22129,22131,22134,22136],{"class":39,"line":342},[37,22128,3801],{"class":50},[37,22130,1552],{"class":54},[37,22132,22133],{"class":185},"\"Person析构函数调用\"",[37,22135,1552],{"class":54},[37,22137,1574],{"class":50},[37,22139,22140],{"class":39,"line":347},[37,22141,2544],{"class":50},[37,22143,22144],{"class":39,"line":352},[37,22145,8128],{"class":43},[37,22147,22148],{"class":39,"line":357},[37,22149,15233],{"class":50},[37,22151,22152],{"class":39,"line":362},[37,22153,22154],{"class":43},"    \u002F\u002F手机\n",[37,22156,22157],{"class":39,"line":367},[37,22158,22159],{"class":50},"    Phone m_Phone;\n",[37,22161,22162],{"class":39,"line":373},[37,22163,4345],{"class":50},[37,22165,22166,22168,22170],{"class":39,"line":392},[37,22167,5712],{"class":54},[37,22169,5936],{"class":2320},[37,22171,2333],{"class":50},[37,22173,22174],{"class":39,"line":398},[37,22175,1922],{"class":50},[37,22177,22178,22180,22182,22184,22186,22188,22191],{"class":39,"line":409},[37,22179,19772],{"class":50},[37,22181,14],{"class":2320},[37,22183,165],{"class":50},[37,22185,8264],{"class":185},[37,22187,65],{"class":50},[37,22189,22190],{"class":185},"\"安卓\"",[37,22192,3069],{"class":50},[37,22194,22195,22197,22199,22202,22204,22207,22209],{"class":39,"line":415},[37,22196,1927],{"class":50},[37,22198,1552],{"class":54},[37,22200,22201],{"class":50},"p.Name",[37,22203,1552],{"class":54},[37,22205,22206],{"class":185},"\"拿着：\"",[37,22208,1552],{"class":54},[37,22210,22211],{"class":50},"p.m_phone.m_PName;\n",[37,22213,22214],{"class":39,"line":420},[37,22215,1941],{"class":50},[37,22217,22218,22220,22222],{"class":39,"line":425},[37,22219,533],{"class":54},[37,22221,2330],{"class":2320},[37,22223,2333],{"class":50},[37,22225,22226],{"class":39,"line":431},[37,22227,1922],{"class":50},[37,22229,22230,22232],{"class":39,"line":436},[37,22231,5981],{"class":2320},[37,22233,5984],{"class":50},[37,22235,22236],{"class":39,"line":442},[37,22237,1941],{"class":50},[14,22239,9366],{},[27,22241,22243],{"className":519,"code":22242,"language":521,"meta":32,"style":32},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[34,22244,22245,22250],{"__ignoreMap":32},[37,22246,22247],{"class":39,"line":40},[37,22248,22249],{"class":43},"    \u002F\u002F不需要写这个：\n",[37,22251,22252],{"class":39,"line":47},[37,22253,22254],{"class":43},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,22256,22257],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[27,22259,22261],{"className":519,"code":22260,"language":521,"meta":32,"style":32},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[34,22262,22263],{"__ignoreMap":32},[37,22264,22265,22267,22270,22272,22275,22278],{"class":39,"line":40},[37,22266,19387],{"class":2320},[37,22268,22269],{"class":50},"(string name.string pname):",[37,22271,15351],{"class":2320},[37,22273,22274],{"class":50},"(name),",[37,22276,22277],{"class":2320},"m_phone",[37,22279,22280],{"class":50},"(pname) {}\n",[14,22282,22283,22284,55,22287],{},"采用的是隐式转换法，实际为如下：\n",[34,22285,22286],{},"m_phone(pname)",[34,22288,22289],{},"Phone m_phone=pname",[14,22291,22292,22295],{},[673,22293,22294],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22297,22298],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[498,22300,22302],{"id":22301},"_828静态对象","8.2.8静态对象",[14,22304,22305],{},"静态对象在成员对象前static，称为静态对象",[14,22307,22308],{},"静态对象分为两类：",[481,22310,22311],{},[484,22312,22313],{},"静态成员变量",[1515,22315,22316,22319,22322],{},[484,22317,22318],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[484,22320,22321],{},"②在编译阶段分配内存",[484,22323,22324],{},"③类内声明，类外初始化",[481,22326,22327],{"start":47},[484,22328,22329],{},"静态成员函数",[1515,22331,22332,22335],{},[484,22333,22334],{},"①所有对象共享同一个函数",[484,22336,22337],{},"②静态成员函数只能访问静态成员变量",[22339,22340,22342],"h4",{"id":22341},"_8281静态成员变量","8.2.8.1静态成员变量",[27,22344,22346],{"className":519,"code":22345,"language":521,"meta":32,"style":32},"#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",[34,22347,22348,22354,22364,22370,22374,22378,22383,22388,22393,22401,22405,22409,22413,22421,22425,22429,22434,22447,22451,22459,22463,22469],{"__ignoreMap":32},[37,22349,22350,22352],{"class":39,"line":40},[37,22351,2306],{"class":54},[37,22353,2309],{"class":185},[37,22355,22356,22358,22360,22362],{"class":39,"line":47},[37,22357,2314],{"class":54},[37,22359,2317],{"class":54},[37,22361,2321],{"class":2320},[37,22363,1669],{"class":50},[37,22365,22366,22368],{"class":39,"line":104},[37,22367,15035],{"class":54},[37,22369,15512],{"class":2320},[37,22371,22372],{"class":39,"line":113},[37,22373,1922],{"class":50},[37,22375,22376],{"class":39,"line":189},[37,22377,15057],{"class":54},[37,22379,22380],{"class":39,"line":195},[37,22381,22382],{"class":43},"    \u002F\u002F非静态成员变量\n",[37,22384,22385],{"class":39,"line":201},[37,22386,22387],{"class":43},"    \u002F\u002F int m_A;\n",[37,22389,22390],{"class":39,"line":207},[37,22391,22392],{"class":43},"    \u002F\u002F定义静态成员变量\n",[37,22394,22395,22397,22399],{"class":39,"line":213},[37,22396,11361],{"class":54},[37,22398,2739],{"class":54},[37,22400,21733],{"class":50},[37,22402,22403],{"class":39,"line":218},[37,22404,2757],{"emptyLinePlaceholder":454},[37,22406,22407],{"class":39,"line":227},[37,22408,2757],{"emptyLinePlaceholder":454},[37,22410,22411],{"class":39,"line":232},[37,22412,4345],{"class":50},[37,22414,22415,22417,22419],{"class":39,"line":238},[37,22416,5712],{"class":54},[37,22418,5936],{"class":2320},[37,22420,2333],{"class":50},[37,22422,22423],{"class":39,"line":244},[37,22424,1922],{"class":50},[37,22426,22427],{"class":39,"line":250},[37,22428,15654],{"class":50},[37,22430,22431],{"class":39,"line":256},[37,22432,22433],{"class":43},"    \u002F\u002F输出类成员变量这块内存\n",[37,22435,22436,22438,22440,22443,22445],{"class":39,"line":261},[37,22437,1927],{"class":50},[37,22439,1552],{"class":54},[37,22441,22442],{"class":50},"p.m_A",[37,22444,1552],{"class":54},[37,22446,1574],{"class":50},[37,22448,22449],{"class":39,"line":267},[37,22450,1941],{"class":50},[37,22452,22453,22455,22457],{"class":39,"line":283},[37,22454,533],{"class":54},[37,22456,2330],{"class":2320},[37,22458,2333],{"class":50},[37,22460,22461],{"class":39,"line":288},[37,22462,1922],{"class":50},[37,22464,22465,22467],{"class":39,"line":294},[37,22466,5981],{"class":2320},[37,22468,2333],{"class":50},[37,22470,22471],{"class":39,"line":300},[37,22472,1941],{"class":50},[14,22474,22475],{},"此时输出是报错的：无法解析外部命令",[14,22477,22478],{},"解决这一问题：必须用到类内声明，类外初始化操作",[27,22480,22482],{"className":519,"code":22481,"language":521,"meta":32,"style":32},"#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",[34,22483,22484,22490,22500,22506,22510,22514,22519,22527,22531,22536,22551,22559,22563,22567,22572,22577,22589,22594,22605,22610,22615,22628,22632,22640,22644,22650],{"__ignoreMap":32},[37,22485,22486,22488],{"class":39,"line":40},[37,22487,2306],{"class":54},[37,22489,2309],{"class":185},[37,22491,22492,22494,22496,22498],{"class":39,"line":47},[37,22493,2314],{"class":54},[37,22495,2317],{"class":54},[37,22497,2321],{"class":2320},[37,22499,1669],{"class":50},[37,22501,22502,22504],{"class":39,"line":104},[37,22503,15035],{"class":54},[37,22505,15512],{"class":2320},[37,22507,22508],{"class":39,"line":113},[37,22509,1922],{"class":50},[37,22511,22512],{"class":39,"line":189},[37,22513,15057],{"class":54},[37,22515,22516],{"class":39,"line":195},[37,22517,22518],{"class":43},"    \u002F\u002F类内声明\n",[37,22520,22521,22523,22525],{"class":39,"line":201},[37,22522,11361],{"class":54},[37,22524,2739],{"class":54},[37,22526,21733],{"class":50},[37,22528,22529],{"class":39,"line":207},[37,22530,4345],{"class":50},[37,22532,22533],{"class":39,"line":213},[37,22534,22535],{"class":43},"\u002F\u002F类外初始化\n",[37,22537,22538,22540,22542,22545,22547,22549],{"class":39,"line":218},[37,22539,533],{"class":54},[37,22541,15910],{"class":2320},[37,22543,22544],{"class":50},"::m_A",[37,22546,55],{"class":54},[37,22548,98],{"class":61},[37,22550,1669],{"class":50},[37,22552,22553,22555,22557],{"class":39,"line":227},[37,22554,5712],{"class":54},[37,22556,5936],{"class":2320},[37,22558,2333],{"class":50},[37,22560,22561],{"class":39,"line":232},[37,22562,1922],{"class":50},[37,22564,22565],{"class":39,"line":238},[37,22566,15654],{"class":50},[37,22568,22569],{"class":39,"line":244},[37,22570,22571],{"class":43},"    \u002F\u002F访问变量的原内存空间\n",[37,22573,22574],{"class":39,"line":250},[37,22575,22576],{"class":43},"    \u002F\u002F100\n",[37,22578,22579,22581,22583,22585,22587],{"class":39,"line":256},[37,22580,1927],{"class":50},[37,22582,1552],{"class":54},[37,22584,22442],{"class":50},[37,22586,1552],{"class":54},[37,22588,1574],{"class":50},[37,22590,22591],{"class":39,"line":261},[37,22592,22593],{"class":50},"    Person p2;\n",[37,22595,22596,22599,22601,22603],{"class":39,"line":267},[37,22597,22598],{"class":50},"    p2.m_A",[37,22600,55],{"class":54},[37,22602,2087],{"class":61},[37,22604,1669],{"class":50},[37,22606,22607],{"class":39,"line":283},[37,22608,22609],{"class":43},"    \u002F\u002F继续访问这片空间\n",[37,22611,22612],{"class":39,"line":288},[37,22613,22614],{"class":43},"    \u002F\u002F200\n",[37,22616,22617,22619,22621,22624,22626],{"class":39,"line":294},[37,22618,1927],{"class":50},[37,22620,1552],{"class":54},[37,22622,22623],{"class":50},"p2.m_A",[37,22625,1552],{"class":54},[37,22627,1574],{"class":50},[37,22629,22630],{"class":39,"line":300},[37,22631,1941],{"class":50},[37,22633,22634,22636,22638],{"class":39,"line":306},[37,22635,533],{"class":54},[37,22637,2330],{"class":2320},[37,22639,2333],{"class":50},[37,22641,22642],{"class":39,"line":312},[37,22643,1922],{"class":50},[37,22645,22646,22648],{"class":39,"line":317},[37,22647,5981],{"class":2320},[37,22649,5984],{"class":50},[37,22651,22652],{"class":39,"line":323},[37,22653,1941],{"class":50},[14,22655,22656],{},[673,22657,22658],{},"静态变量的访问",[27,22660,22662],{"className":519,"code":22661,"language":521,"meta":32,"style":32},"#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",[34,22663,22664,22670,22680,22686,22690,22694,22698,22706,22710,22715,22723,22727,22731,22745,22760,22768,22772,22777,22782,22787,22792,22804,22809,22814,22828,22845,22849,22857,22861,22867],{"__ignoreMap":32},[37,22665,22666,22668],{"class":39,"line":40},[37,22667,2306],{"class":54},[37,22669,2309],{"class":185},[37,22671,22672,22674,22676,22678],{"class":39,"line":47},[37,22673,2314],{"class":54},[37,22675,2317],{"class":54},[37,22677,2321],{"class":2320},[37,22679,1669],{"class":50},[37,22681,22682,22684],{"class":39,"line":104},[37,22683,15035],{"class":54},[37,22685,15512],{"class":2320},[37,22687,22688],{"class":39,"line":113},[37,22689,1922],{"class":50},[37,22691,22692],{"class":39,"line":189},[37,22693,15057],{"class":54},[37,22695,22696],{"class":39,"line":195},[37,22697,22518],{"class":43},[37,22699,22700,22702,22704],{"class":39,"line":201},[37,22701,11361],{"class":54},[37,22703,2739],{"class":54},[37,22705,21733],{"class":50},[37,22707,22708],{"class":39,"line":207},[37,22709,15563],{"class":54},[37,22711,22712],{"class":39,"line":213},[37,22713,22714],{"class":43},"    \u002F\u002F静态成员变量也是有访问权限的\n",[37,22716,22717,22719,22721],{"class":39,"line":218},[37,22718,11361],{"class":54},[37,22720,2739],{"class":54},[37,22722,21740],{"class":50},[37,22724,22725],{"class":39,"line":227},[37,22726,4345],{"class":50},[37,22728,22729],{"class":39,"line":232},[37,22730,22535],{"class":43},[37,22732,22733,22735,22737,22739,22741,22743],{"class":39,"line":238},[37,22734,533],{"class":54},[37,22736,15910],{"class":2320},[37,22738,22544],{"class":50},[37,22740,55],{"class":54},[37,22742,98],{"class":61},[37,22744,1669],{"class":50},[37,22746,22747,22749,22751,22754,22756,22758],{"class":39,"line":244},[37,22748,533],{"class":54},[37,22750,15910],{"class":2320},[37,22752,22753],{"class":50},"::m_B",[37,22755,55],{"class":54},[37,22757,1210],{"class":61},[37,22759,1669],{"class":50},[37,22761,22762,22764,22766],{"class":39,"line":250},[37,22763,5712],{"class":54},[37,22765,6005],{"class":2320},[37,22767,2333],{"class":50},[37,22769,22770],{"class":39,"line":256},[37,22771,1922],{"class":50},[37,22773,22774],{"class":39,"line":261},[37,22775,22776],{"class":43},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[37,22778,22779],{"class":39,"line":267},[37,22780,22781],{"class":43},"    \u002F\u002F静态成员变量有两种访问方式：\n",[37,22783,22784],{"class":39,"line":283},[37,22785,22786],{"class":43},"    \u002F\u002F1.通过对象进行访问\n",[37,22788,22789],{"class":39,"line":288},[37,22790,22791],{"class":50},"    Person p;  \n",[37,22793,22794,22796,22798,22800,22802],{"class":39,"line":294},[37,22795,1927],{"class":50},[37,22797,1552],{"class":54},[37,22799,22442],{"class":50},[37,22801,1552],{"class":54},[37,22803,1574],{"class":50},[37,22805,22806],{"class":39,"line":300},[37,22807,22808],{"class":43},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[37,22810,22811],{"class":39,"line":306},[37,22812,22813],{"class":43},"    \u002F\u002F2.通过类名进行访问\n",[37,22815,22816,22818,22820,22822,22824,22826],{"class":39,"line":312},[37,22817,1927],{"class":50},[37,22819,1552],{"class":54},[37,22821,19387],{"class":2320},[37,22823,22544],{"class":50},[37,22825,1552],{"class":54},[37,22827,1574],{"class":50},[37,22829,22830,22832,22834,22836,22838,22840,22842],{"class":39,"line":317},[37,22831,1927],{"class":50},[37,22833,1552],{"class":54},[37,22835,19387],{"class":2320},[37,22837,22753],{"class":50},[37,22839,1552],{"class":54},[37,22841,1617],{"class":50},[37,22843,22844],{"class":43}," \u002F\u002F没有访问权限，报错\n",[37,22846,22847],{"class":39,"line":323},[37,22848,1941],{"class":50},[37,22850,22851,22853,22855],{"class":39,"line":337},[37,22852,533],{"class":54},[37,22854,2330],{"class":2320},[37,22856,2333],{"class":50},[37,22858,22859],{"class":39,"line":342},[37,22860,1922],{"class":50},[37,22862,22863,22865],{"class":39,"line":347},[37,22864,6050],{"class":2320},[37,22866,5984],{"class":50},[37,22868,22869],{"class":39,"line":352},[37,22870,1941],{"class":50},[22339,22872,22874],{"id":22873},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22876,22877],{},"1.静态成员函数定义与访问",[27,22879,22881],{"className":519,"code":22880,"language":521,"meta":32,"style":32},"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",[34,22882,22883,22889,22893,22897,22902,22913,22917,22931,22935,22939,22947,22951,22956,22961,22965,22973,22978,22988],{"__ignoreMap":32},[37,22884,22885,22887],{"class":39,"line":40},[37,22886,15035],{"class":54},[37,22888,15512],{"class":2320},[37,22890,22891],{"class":39,"line":47},[37,22892,1922],{"class":50},[37,22894,22895],{"class":39,"line":104},[37,22896,15057],{"class":54},[37,22898,22899],{"class":39,"line":113},[37,22900,22901],{"class":43},"    \u002F\u002F在公共权限下定义静态成员函数\n",[37,22903,22904,22906,22909,22911],{"class":39,"line":189},[37,22905,11361],{"class":54},[37,22907,22908],{"class":54}," void",[37,22910,11726],{"class":2320},[37,22912,2333],{"class":50},[37,22914,22915],{"class":39,"line":195},[37,22916,2387],{"class":50},[37,22918,22919,22922,22924,22927,22929],{"class":39,"line":201},[37,22920,22921],{"class":50},"        coout",[37,22923,1552],{"class":54},[37,22925,22926],{"class":185},"\"静态成员函数的调用\"",[37,22928,1552],{"class":54},[37,22930,1574],{"class":50},[37,22932,22933],{"class":39,"line":207},[37,22934,2544],{"class":50},[37,22936,22937],{"class":39,"line":213},[37,22938,4345],{"class":50},[37,22940,22941,22943,22945],{"class":39,"line":218},[37,22942,5712],{"class":54},[37,22944,5936],{"class":2320},[37,22946,2333],{"class":50},[37,22948,22949],{"class":39,"line":227},[37,22950,1922],{"class":50},[37,22952,22953],{"class":39,"line":232},[37,22954,22955],{"class":43},"    \u002F\u002F静态成员函数的调用方式:\n",[37,22957,22958],{"class":39,"line":238},[37,22959,22960],{"class":43},"    \u002F\u002F1.通过对象访问\n",[37,22962,22963],{"class":39,"line":244},[37,22964,15654],{"class":50},[37,22966,22967,22969,22971],{"class":39,"line":250},[37,22968,16207],{"class":50},[37,22970,11892],{"class":2320},[37,22972,5984],{"class":50},[37,22974,22975],{"class":39,"line":256},[37,22976,22977],{"class":43},"    \u002F\u002F2.通过类名访问\n",[37,22979,22980,22982,22984,22986],{"class":39,"line":261},[37,22981,18860],{"class":2320},[37,22983,18073],{"class":50},[37,22985,11892],{"class":2320},[37,22987,5984],{"class":50},[37,22989,22990],{"class":39,"line":267},[37,22991,1941],{"class":50},[481,22993,22994],{"start":47},[484,22995,22996],{},"静态成员函数只能访问静态成员变量",[27,22998,23000],{"className":519,"code":22999,"language":521,"meta":32,"style":32},"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",[34,23001,23002,23008,23012,23016,23020,23030,23034,23048,23053,23065,23069,23080,23090,23094,23098,23102,23112,23116,23129,23133,23137,23141,23145,23159,23167,23171,23175,23179,23183,23191,23195,23205,23210,23214,23222,23226,23232],{"__ignoreMap":32},[37,23003,23004,23006],{"class":39,"line":40},[37,23005,15035],{"class":54},[37,23007,15512],{"class":2320},[37,23009,23010],{"class":39,"line":47},[37,23011,1922],{"class":50},[37,23013,23014],{"class":39,"line":104},[37,23015,15057],{"class":54},[37,23017,23018],{"class":39,"line":113},[37,23019,22901],{"class":43},[37,23021,23022,23024,23026,23028],{"class":39,"line":189},[37,23023,11361],{"class":54},[37,23025,22908],{"class":54},[37,23027,11726],{"class":2320},[37,23029,2333],{"class":50},[37,23031,23032],{"class":39,"line":195},[37,23033,2387],{"class":50},[37,23035,23036,23039,23041,23043,23045],{"class":39,"line":201},[37,23037,23038],{"class":50},"        m_A",[37,23040,55],{"class":54},[37,23042,154],{"class":61},[37,23044,582],{"class":50},[37,23046,23047],{"class":43}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[37,23049,23050],{"class":39,"line":207},[37,23051,23052],{"class":43},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[37,23054,23055,23057,23059,23061,23063],{"class":39,"line":213},[37,23056,22921],{"class":50},[37,23058,1552],{"class":54},[37,23060,22926],{"class":185},[37,23062,1552],{"class":54},[37,23064,1574],{"class":50},[37,23066,23067],{"class":39,"line":218},[37,23068,2544],{"class":50},[37,23070,23071,23073,23075,23077],{"class":39,"line":227},[37,23072,11361],{"class":54},[37,23074,2739],{"class":54},[37,23076,15789],{"class":50},[37,23078,23079],{"class":43}," \u002F\u002F静态成员变量\n",[37,23081,23082,23084,23087],{"class":39,"line":232},[37,23083,2342],{"class":54},[37,23085,23086],{"class":50}," m_B;",[37,23088,23089],{"class":43}," \u002F\u002F非静态成员变量\n",[37,23091,23092],{"class":39,"line":238},[37,23093,2757],{"emptyLinePlaceholder":454},[37,23095,23096],{"class":39,"line":244},[37,23097,15563],{"class":54},[37,23099,23100],{"class":39,"line":250},[37,23101,22714],{"class":43},[37,23103,23104,23106,23108,23110],{"class":39,"line":256},[37,23105,11361],{"class":54},[37,23107,22908],{"class":54},[37,23109,13959],{"class":2320},[37,23111,2333],{"class":50},[37,23113,23114],{"class":39,"line":261},[37,23115,2387],{"class":50},[37,23117,23118,23120,23122,23125,23127],{"class":39,"line":267},[37,23119,3801],{"class":50},[37,23121,1552],{"class":54},[37,23123,23124],{"class":185},"\"这是私有权限下的静态函数调用\"",[37,23126,1552],{"class":54},[37,23128,1574],{"class":50},[37,23130,23131],{"class":39,"line":283},[37,23132,2544],{"class":50},[37,23134,23135],{"class":39,"line":288},[37,23136,2757],{"emptyLinePlaceholder":454},[37,23138,23139],{"class":39,"line":294},[37,23140,2757],{"emptyLinePlaceholder":454},[37,23142,23143],{"class":39,"line":300},[37,23144,4345],{"class":50},[37,23146,23147,23149,23151,23153,23155,23157],{"class":39,"line":306},[37,23148,533],{"class":54},[37,23150,15910],{"class":2320},[37,23152,22544],{"class":50},[37,23154,55],{"class":54},[37,23156,135],{"class":61},[37,23158,1669],{"class":50},[37,23160,23161,23163,23165],{"class":39,"line":312},[37,23162,5712],{"class":54},[37,23164,5936],{"class":2320},[37,23166,2333],{"class":50},[37,23168,23169],{"class":39,"line":317},[37,23170,1922],{"class":50},[37,23172,23173],{"class":39,"line":323},[37,23174,22955],{"class":43},[37,23176,23177],{"class":39,"line":337},[37,23178,22960],{"class":43},[37,23180,23181],{"class":39,"line":342},[37,23182,15654],{"class":50},[37,23184,23185,23187,23189],{"class":39,"line":347},[37,23186,16207],{"class":50},[37,23188,11892],{"class":2320},[37,23190,5984],{"class":50},[37,23192,23193],{"class":39,"line":352},[37,23194,22977],{"class":43},[37,23196,23197,23199,23201,23203],{"class":39,"line":357},[37,23198,18860],{"class":2320},[37,23200,18073],{"class":50},[37,23202,11892],{"class":2320},[37,23204,5984],{"class":50},[37,23206,23207],{"class":39,"line":362},[37,23208,23209],{"class":43},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[37,23211,23212],{"class":39,"line":367},[37,23213,1941],{"class":50},[37,23215,23216,23218,23220],{"class":39,"line":373},[37,23217,533],{"class":54},[37,23219,2330],{"class":2320},[37,23221,2333],{"class":50},[37,23223,23224],{"class":39,"line":392},[37,23225,1922],{"class":50},[37,23227,23228,23230],{"class":39,"line":398},[37,23229,5981],{"class":2320},[37,23231,5984],{"class":50},[37,23233,23234],{"class":39,"line":409},[37,23235,1941],{"class":50},[498,23237,23239],{"id":23238},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22339,23241,23243],{"id":23242},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,23245,23246],{},"在c++中，类内的成员变量和成员函数分开存储",[14,23248,23249],{},"只有非静态成员变量才属于类的对象上",[23251,23252,23254],"h5",{"id":23253},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[27,23256,23258],{"className":519,"code":23257,"language":521,"meta":32,"style":32},"#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",[34,23259,23260,23267,23277,23283,23287,23291,23295,23303,23307,23311,23334,23338,23346,23350,23356],{"__ignoreMap":32},[37,23261,23262,23264],{"class":39,"line":40},[37,23263,2306],{"class":54},[37,23265,23266],{"class":185},"\u003Ciostraem>\n",[37,23268,23269,23271,23273,23275],{"class":39,"line":47},[37,23270,2314],{"class":54},[37,23272,2317],{"class":54},[37,23274,2321],{"class":2320},[37,23276,1669],{"class":50},[37,23278,23279,23281],{"class":39,"line":104},[37,23280,15035],{"class":54},[37,23282,15512],{"class":2320},[37,23284,23285],{"class":39,"line":113},[37,23286,1922],{"class":50},[37,23288,23289],{"class":39,"line":189},[37,23290,2757],{"emptyLinePlaceholder":454},[37,23292,23293],{"class":39,"line":195},[37,23294,4345],{"class":50},[37,23296,23297,23299,23301],{"class":39,"line":201},[37,23298,5712],{"class":54},[37,23300,5936],{"class":2320},[37,23302,2333],{"class":50},[37,23304,23305],{"class":39,"line":207},[37,23306,1922],{"class":50},[37,23308,23309],{"class":39,"line":213},[37,23310,15654],{"class":50},[37,23312,23313,23315,23317,23320,23322,23325,23327,23329,23331],{"class":39,"line":218},[37,23314,1927],{"class":50},[37,23316,1552],{"class":54},[37,23318,23319],{"class":185},"\"size of p=\"",[37,23321,1552],{"class":54},[37,23323,23324],{"class":2320},"sizeoif",[37,23326,6887],{"class":50},[37,23328,1552],{"class":54},[37,23330,1617],{"class":50},[37,23332,23333],{"class":43}," \u002F\u002F查看这个空类的占用的内存空间\n",[37,23335,23336],{"class":39,"line":227},[37,23337,1941],{"class":50},[37,23339,23340,23342,23344],{"class":39,"line":232},[37,23341,533],{"class":54},[37,23343,2330],{"class":2320},[37,23345,2333],{"class":50},[37,23347,23348],{"class":39,"line":238},[37,23349,1922],{"class":50},[37,23351,23352,23354],{"class":39,"line":244},[37,23353,5981],{"class":2320},[37,23355,5984],{"class":50},[37,23357,23358],{"class":39,"line":250},[37,23359,1941],{"class":50},[14,23361,23362],{},"输出结果为：size of p=1",[14,23364,23365],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23367,23368],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23251,23370,23372],{"id":23371},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[27,23374,23376],{"className":519,"code":23375,"language":521,"meta":32,"style":32},"#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",[34,23377,23378,23384,23394,23402,23406,23415,23419,23427,23431,23435,23454,23458,23462,23470,23474,23480],{"__ignoreMap":32},[37,23379,23380,23382],{"class":39,"line":40},[37,23381,2306],{"class":54},[37,23383,2309],{"class":185},[37,23385,23386,23388,23390,23392],{"class":39,"line":47},[37,23387,2314],{"class":54},[37,23389,2317],{"class":54},[37,23391,2321],{"class":2320},[37,23393,1669],{"class":50},[37,23395,23396,23398,23400],{"class":39,"line":104},[37,23397,15035],{"class":54},[37,23399,15910],{"class":2320},[37,23401,3024],{"class":50},[37,23403,23404],{"class":39,"line":113},[37,23405,1922],{"class":50},[37,23407,23408,23410,23412],{"class":39,"line":189},[37,23409,2342],{"class":54},[37,23411,15789],{"class":50},[37,23413,23414],{"class":43},"\u002F\u002F非静态成员变量\n",[37,23416,23417],{"class":39,"line":195},[37,23418,4345],{"class":50},[37,23420,23421,23423,23425],{"class":39,"line":201},[37,23422,5712],{"class":54},[37,23424,5936],{"class":2320},[37,23426,2333],{"class":50},[37,23428,23429],{"class":39,"line":207},[37,23430,1922],{"class":50},[37,23432,23433],{"class":39,"line":213},[37,23434,15654],{"class":50},[37,23436,23437,23439,23441,23443,23445,23447,23449,23451],{"class":39,"line":218},[37,23438,1927],{"class":50},[37,23440,1552],{"class":54},[37,23442,23319],{"class":185},[37,23444,1748],{"class":54},[37,23446,6887],{"class":50},[37,23448,1552],{"class":54},[37,23450,1617],{"class":50},[37,23452,23453],{"class":43}," \u002F\u002F查看不是空对象时占用多少内存\n",[37,23455,23456],{"class":39,"line":227},[37,23457,2757],{"emptyLinePlaceholder":454},[37,23459,23460],{"class":39,"line":232},[37,23461,1941],{"class":50},[37,23463,23464,23466,23468],{"class":39,"line":238},[37,23465,533],{"class":54},[37,23467,2330],{"class":2320},[37,23469,2333],{"class":50},[37,23471,23472],{"class":39,"line":244},[37,23473,1922],{"class":50},[37,23475,23476,23478],{"class":39,"line":250},[37,23477,5981],{"class":2320},[37,23479,5984],{"class":50},[37,23481,23482],{"class":39,"line":256},[37,23483,1941],{"class":50},[14,23485,23486],{},"输出结果：size of p=4",[14,23488,23489],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[481,23491,23492],{},[484,23493,23494],{},"如果加上非静态成员变量，Person类修改如下",[27,23496,23498],{"className":519,"code":23497,"language":521,"meta":32,"style":32},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[34,23499,23500,23506,23510,23516,23524,23528,23533],{"__ignoreMap":32},[37,23501,23502,23504],{"class":39,"line":40},[37,23503,15035],{"class":54},[37,23505,15512],{"class":2320},[37,23507,23508],{"class":39,"line":47},[37,23509,1922],{"class":50},[37,23511,23512,23514],{"class":39,"line":104},[37,23513,2342],{"class":54},[37,23515,21733],{"class":50},[37,23517,23518,23520,23522],{"class":39,"line":113},[37,23519,11361],{"class":54},[37,23521,2739],{"class":54},[37,23523,21740],{"class":50},[37,23525,23526],{"class":39,"line":189},[37,23527,4345],{"class":50},[37,23529,23530],{"class":39,"line":195},[37,23531,23532],{"class":43},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[37,23534,23535,23537,23539,23541,23543,23545],{"class":39,"line":201},[37,23536,533],{"class":54},[37,23538,15910],{"class":2320},[37,23540,22753],{"class":50},[37,23542,55],{"class":54},[37,23544,135],{"class":61},[37,23546,1669],{"class":50},[14,23548,23549],{},"输出结果：4",[14,23551,23552],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[481,23554,23555],{"start":47},[484,23556,23557],{},"加上非静态成员函数",[27,23559,23561],{"className":519,"code":23560,"language":521,"meta":32,"style":32},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[34,23562,23563,23570,23574,23580,23588,23592,23596,23600],{"__ignoreMap":32},[37,23564,23565,23567],{"class":39,"line":40},[37,23566,15035],{"class":54},[37,23568,23569],{"class":2320},"  Person\n",[37,23571,23572],{"class":39,"line":47},[37,23573,1922],{"class":50},[37,23575,23576,23578],{"class":39,"line":104},[37,23577,2342],{"class":54},[37,23579,21733],{"class":50},[37,23581,23582,23584,23586],{"class":39,"line":113},[37,23583,15250],{"class":54},[37,23585,11726],{"class":2320},[37,23587,2333],{"class":50},[37,23589,23590],{"class":39,"line":189},[37,23591,2387],{"class":50},[37,23593,23594],{"class":39,"line":195},[37,23595,2757],{"emptyLinePlaceholder":454},[37,23597,23598],{"class":39,"line":201},[37,23599,2544],{"class":50},[37,23601,23602],{"class":39,"line":207},[37,23603,4345],{"class":50},[14,23605,23606],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[481,23608,23609],{"start":104},[484,23610,23611],{},"加上静态成员函数",[27,23613,23615],{"className":519,"code":23614,"language":521,"meta":32,"style":32},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[34,23616,23617,23623,23627,23633,23641,23645,23649,23653,23664,23668,23672,23676],{"__ignoreMap":32},[37,23618,23619,23621],{"class":39,"line":40},[37,23620,15035],{"class":54},[37,23622,23569],{"class":2320},[37,23624,23625],{"class":39,"line":47},[37,23626,1922],{"class":50},[37,23628,23629,23631],{"class":39,"line":104},[37,23630,2342],{"class":54},[37,23632,21733],{"class":50},[37,23634,23635,23637,23639],{"class":39,"line":113},[37,23636,15250],{"class":54},[37,23638,11726],{"class":2320},[37,23640,2333],{"class":50},[37,23642,23643],{"class":39,"line":189},[37,23644,2387],{"class":50},[37,23646,23647],{"class":39,"line":195},[37,23648,2757],{"emptyLinePlaceholder":454},[37,23650,23651],{"class":39,"line":201},[37,23652,2544],{"class":50},[37,23654,23655,23657,23659,23662],{"class":39,"line":207},[37,23656,11361],{"class":54},[37,23658,22908],{"class":54},[37,23660,23661],{"class":2320}," func1",[37,23663,2333],{"class":50},[37,23665,23666],{"class":39,"line":213},[37,23667,2387],{"class":50},[37,23669,23670],{"class":39,"line":218},[37,23671,2757],{"emptyLinePlaceholder":454},[37,23673,23674],{"class":39,"line":227},[37,23675,2544],{"class":50},[37,23677,23678],{"class":39,"line":232},[37,23679,4345],{"class":50},[14,23681,23549],{},[14,23683,23684],{},"解释：静态成员函数也不属于类上",[446,23686,8022],{},{"title":32,"searchDepth":47,"depth":47,"links":23688},[23689,23695],{"id":14986,"depth":47,"text":14987,"children":23690},[23691,23692,23693,23694],{"id":14990,"depth":104,"text":14991},{"id":15715,"depth":104,"text":15716},{"id":15887,"depth":104,"text":15888},{"id":16346,"depth":104,"text":16347},{"id":18718,"depth":47,"text":18719,"children":23696},[23697,23698,23699,23700,23701,23702,23703,23704,23705],{"id":18730,"depth":104,"text":18731},{"id":19023,"depth":104,"text":19024},{"id":19514,"depth":104,"text":19515},{"id":20611,"depth":104,"text":20612},{"id":21034,"depth":104,"text":21035},{"id":21513,"depth":104,"text":21514},{"id":21888,"depth":104,"text":21889},{"id":22301,"depth":104,"text":22302},{"id":23238,"depth":104,"text":23239},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14951,"description":23706},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23713,"title":521,"body":23714,"description":451,"extension":452,"meta":23718,"navigation":454,"path":23720,"seo":23721,"stem":23722,"__hash__":23723},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23715,"toc":23716},[],{"title":32,"searchDepth":47,"depth":47,"links":23717},[],{"category":23719},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":521,"description":451},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23725,"title":23726,"body":23727,"description":32,"extension":452,"meta":24318,"navigation":454,"path":24319,"seo":24320,"stem":24321,"__hash__":24322},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23728,"toc":24300},[23729,23732,23736,23739,23742,23745,23763,23768,23771,23774,23777,23780,23785,23788,23793,23796,23799,23803,23806,23809,23815,23818,23836,23840,23844,23847,23852,23855,23859,23862,23875,23878,23882,23885,23888,23891,23916,23919,23928,23939,23954,23986,23990,23997,24005,24009,24012,24015,24020,24024,24027,24030,24035,24038,24042,24045,24048,24053,24056,24060,24065,24069,24136,24140,24143,24146,24149,24152,24155,24161,24182,24185,24199,24208,24212,24215,24218,24223,24226,24231,24236,24239,24242,24247,24252,24255,24260,24265,24268,24273,24278,24281,24284,24289,24292,24297],[10,23730,23726],{"id":23731},"_1强化学习基本认识",[469,23733,23735],{"id":23734},"_11什么是强化学习","1.1.什么是强化学习",[14,23737,23738],{},"强化学习有两部分组成：智能体和环境；",[14,23740,23741],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23743,23744],{},"强化学习与监督学习的区别:",[481,23746,23747,23750,23753,23756],{},[484,23748,23749],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[484,23751,23752],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[484,23754,23755],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[484,23757,23758,23759,23762],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[673,23760,23761],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23764,23765],{},[1838,23766],{"alt":32,"src":23767},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23769,23770],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23772,23773],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23775,23776],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23778,23779],{},"获取奖励",[14,23781,23782],{},[1838,23783],{"alt":32,"src":23784},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23786,23787],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23789,23790],{},[1838,23791],{"alt":32,"src":23792},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23794,23795],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23797,23798],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[469,23800,23802],{"id":23801},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23804,23805],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23807,23808],{},"具身智能中的应用",[14,23810,23811,23814],{},[673,23812,23813],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23816,23817],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23819,23820,23821,23824,23825,23828,23829,23832,23833],{},"机器人是",[673,23822,23823],{},"躯体","，深度学习是",[673,23826,23827],{},"神经元****网络","，VLA是",[673,23830,23831],{},"通用的行为逻辑","，而强化学习是",[673,23834,23835],{},"教练",[469,23837,23839],{"id":23838},"_13序列决策","1.3.序列决策",[498,23841,23843],{"id":23842},"_131智能体与环境","1.3.1.智能体与环境",[14,23845,23846],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23848,23849],{},[1838,23850],{"alt":32,"src":23851},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23853,23854],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[498,23856,23858],{"id":23857},"_132奖励","1.3.2.奖励",[14,23860,23861],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23863,23864,23865,23874],{},"取某个策略的表现如何。强化学习的目的就是",[673,23866,23867,23868,23873],{},"最大化",[673,23869,23870],{},[673,23871,23872],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23876,23877],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[498,23879,23881],{"id":23880},"_133序列决策","1.3.3.序列决策",[14,23883,23884],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23886,23887],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23889,23890],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23892,23893,23897,23898,23900,23901,23903,23904,23906,23907,14136,23910,14136,23913],{},[23894,23895,23896],"em",{},"Ht"," = ",[23894,23899,1106],{},"1*, a",[23894,23902,332],{},", r",[23894,23905,332],{},", . . . ,* ",[23894,23908,23909],{},"ot",[23894,23911,23912],{},", at ,",[23894,23914,23915],{},"rt",[14,23917,23918],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23920,23921,23897,23924,2027,23926,138],{},[23894,23922,23923],{},"st",[23894,23925,579],{},[23894,23927,23896],{},[14,23929,23930,23931,23934,23935,23938],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[673,23932,23933],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[673,23936,23937],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23940,23941,23942,23945,23946,23949,23950,23953],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[673,23943,23944],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[673,23947,23948],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23894,23951,23952],{},"S, A, T, R, Ω, O, γ",")。",[14,23955,23956,23957,23959,23960,23962,23963,165,23965,23968,23969,23971,23972,165,23975,23978,23979,23981,23982,23985],{},"其中 ",[23894,23958,1199],{}," 表示状态空间，为隐变量，",[23894,23961,754],{}," 为动作空间，",[23894,23964,1224],{},[23894,23966,23967],{},"s ′ |s, a",") 为状态转移概率，",[23894,23970,1174],{}," 为奖励函数，",[23894,23973,23974],{},"Ω",[23894,23976,23977],{},"o|s, a",") 为观测概率，",[23894,23980,1100],{}," 为观测空间，",[23894,23983,23984],{},"γ"," 为折扣因子。",[469,23987,23989],{"id":23988},"_14动作空间","1.4.动作空间",[14,23991,23992,23993,23996],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[673,23994,23995],{},"动作空间"," ，动作空间分为:",[481,23998,23999,24002],{},[484,24000,24001],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[484,24003,24004],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[469,24006,24008],{"id":24007},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,24010,24011],{},"由策略、价值函数、模型三部分组成",[14,24013,24014],{},"这三者组成马尔可夫决策过程",[14,24016,24017],{},[1838,24018],{"alt":32,"src":24019},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[498,24021,24023],{"id":24022},"_151策略","1.5.1.策略",[14,24025,24026],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,24028,24029],{},"策略可分为两种：",[14,24031,24032],{},[1838,24033],{"alt":32,"src":24034},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,24036,24037],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[498,24039,24041],{"id":24040},"_152价值函数","1.5.2.价值函数",[14,24043,24044],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,24046,24047],{},"价值函数中有一个折扣因子，类似于存款利息",[14,24049,24050],{},[1838,24051],{"alt":32,"src":24052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,24054,24055],{},"进入某个状态采取的最优动作可以通过Q函数得到",[498,24057,24059],{"id":24058},"_153模型","1.5.3.模型",[14,24061,24062],{},[1838,24063],{"alt":32,"src":24064},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[469,24066,24068],{"id":24067},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[661,24070,24071,24082],{},[664,24072,24073],{},[667,24074,24075,24079],{},[670,24076,24078],{"align":24077},"left","类型",[670,24080,24081],{"align":24077},"特点",[708,24083,24084,24094,24104,24114,24126],{},[667,24085,24086,24091],{},[713,24087,24088],{"align":24077},[673,24089,24090],{},"基于价值的智能体",[713,24092,24093],{"align":24077},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[667,24095,24096,24101],{},[713,24097,24098],{"align":24077},[673,24099,24100],{},"基于策略的智能体",[713,24102,24103],{"align":24077},"直接学习策略，没有学习价值函数",[667,24105,24106,24111],{},[713,24107,24108],{"align":24077},[673,24109,24110],{},"演员-评论员智能体",[713,24112,24113],{"align":24077},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[667,24115,24116,24121],{},[713,24117,24118],{"align":24077},[673,24119,24120],{},"有模型强化学习智能体",[713,24122,24123],{"align":24077},[1838,24124],{"alt":32,"src":24125},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[667,24127,24128,24133],{},[713,24129,24130],{"align":24077},[673,24131,24132],{},"免模型强化学习智能体",[713,24134,24135],{"align":24077},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[469,24137,24139],{"id":24138},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,24141,24142],{},"学习和规划是序列决策的两个基本问题",[14,24144,24145],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,24147,24148],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,24150,24151],{},"强化学习用到的库：Gym",[14,24153,24154],{},"Gym可以检验强化学习算法的优劣",[14,24156,24157,24160],{},[673,24158,24159],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[27,24162,24166],{"className":24163,"code":24164,"language":24165,"meta":32,"style":32},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[34,24167,24168],{"__ignoreMap":32},[37,24169,24170,24173,24176,24179],{"class":39,"line":40},[37,24171,24172],{"class":2320},"pip",[37,24174,24175],{"class":185}," install",[37,24177,24178],{"class":185}," gym==",[37,24180,24181],{"class":61},"0.25.2\n",[14,24183,24184],{},"显示图形界面需要",[27,24186,24188],{"className":24163,"code":24187,"language":24165,"meta":32,"style":32},"pip install pygame\n",[34,24189,24190],{"__ignoreMap":32},[37,24191,24192,24194,24196],{"class":39,"line":40},[37,24193,24172],{"class":2320},[37,24195,24175],{"class":185},[37,24197,24198],{"class":185}," pygame\n",[14,24200,24201,24202],{},"有关Gym库的相关文档介绍：",[51,24203,24207],{"href":24204,"rel":24205},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24206],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[469,24209,24211],{"id":24210},"_18一些补充基础概念","1.8.一些补充基础概念",[14,24213,24214],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,24216,24217],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,24219,24220],{},[1838,24221],{"alt":32,"src":24222},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,24224,24225],{},"折扣率需要自己来设定",[14,24227,24228],{},[1838,24229],{"alt":32,"src":24230},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[481,24232,24233],{},[484,24234,24235],{},"状态转移函数：",[14,24237,24238],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,24240,24241],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,24243,24244],{},[1838,24245],{"alt":32,"src":24246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[481,24248,24249],{"start":47},[484,24250,24251],{},"动作价值函数：",[14,24253,24254],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,24256,24257],{},[1838,24258],{"alt":32,"src":24259},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[481,24261,24262],{"start":104},[484,24263,24264],{},"最优动作价值函数：",[14,24266,24267],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[14,24269,24270],{},[1838,24271],{"alt":32,"src":24272},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[481,24274,24275],{"start":113},[484,24276,24277],{},"状态价值函数:",[14,24279,24280],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24282,24283],{},"它衡量的是“一个具体动作”的长期价值",[14,24285,24286],{},[1838,24287],{"alt":32,"src":24288},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24290,24291],{},"几个价值函数之间的比较：",[14,24293,24294],{},[1838,24295],{"alt":32,"src":24296},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[446,24298,24299],{},"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":32,"searchDepth":47,"depth":47,"links":24301},[24302,24303,24304,24309,24310,24315,24316,24317],{"id":23734,"depth":47,"text":23735},{"id":23801,"depth":47,"text":23802},{"id":23838,"depth":47,"text":23839,"children":24305},[24306,24307,24308],{"id":23842,"depth":104,"text":23843},{"id":23857,"depth":104,"text":23858},{"id":23880,"depth":104,"text":23881},{"id":23988,"depth":47,"text":23989},{"id":24007,"depth":47,"text":24008,"children":24311},[24312,24313,24314],{"id":24022,"depth":104,"text":24023},{"id":24040,"depth":104,"text":24041},{"id":24058,"depth":104,"text":24059},{"id":24067,"depth":47,"text":24068},{"id":24138,"depth":47,"text":24139},{"id":24210,"depth":47,"text":24211},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23726,"description":32},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24324,"title":24325,"body":24326,"description":24333,"extension":452,"meta":24344,"navigation":454,"path":24345,"seo":24346,"stem":24347,"__hash__":24348},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24327,"toc":24342},[24328,24331,24334,24339],[10,24329,24325],{"id":24330},"_2马尔可夫决策过程",[14,24332,24333],{},"这是强化学习的基本框架",[14,24335,24336],{},[1838,24337],{"alt":32,"src":24338},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24340,24341],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":32,"searchDepth":47,"depth":47,"links":24343},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24325,"description":24333},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24350,"title":24351,"body":24352,"description":32,"extension":452,"meta":24468,"navigation":454,"path":24469,"seo":24470,"stem":24471,"__hash__":24472},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24353,"toc":24463},[24354,24357,24361,24364,24369,24374,24377,24382,24385,24390,24393,24397,24402,24405,24410,24415,24420,24423,24427,24432,24435,24440,24445,24450,24455,24458],[10,24355,24351],{"id":24356},"_3动作价值函数",[469,24358,24360],{"id":24359},"_31dqn","3.1.DQN",[14,24362,24363],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24365,24366],{},[1838,24367],{"alt":32,"src":24368},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24370,24371],{},[1838,24372],{"alt":32,"src":24373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24375,24376],{},"DQN算法的描述：",[14,24378,24379],{},[1838,24380],{"alt":32,"src":24381},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24383,24384],{},"这里的Dense指的是全连接层",[14,24386,24387],{},[1838,24388],{"alt":32,"src":24389},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24391,24392],{},"当前观测的状态为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算法",[469,24394,24396],{"id":24395},"_32dqn的举例","3.2.DQN的举例",[14,24398,24399],{},[1838,24400],{"alt":32,"src":24401},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24403,24404],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24406,24407],{},[1838,24408],{"alt":32,"src":24409},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24411,24412],{},[1838,24413],{"alt":32,"src":24414},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24416,24417],{},[1838,24418],{"alt":32,"src":24419},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24421,24422],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[469,24424,24426],{"id":24425},"_33td算法","3.3.TD算法",[14,24428,24429],{},[1838,24430],{"alt":32,"src":24431},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24433,24434],{},"强化学习TD算法公式的粗略解释：",[14,24436,24437],{},[1838,24438],{"alt":32,"src":24439},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24441,24442],{},[1838,24443],{"alt":32,"src":24444},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24446,24447],{},[1838,24448],{"alt":32,"src":24449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24451,24452],{},[1838,24453],{"alt":32,"src":24454},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24456,24457],{},"TD算法总结：",[14,24459,24460],{},[1838,24461],{"alt":32,"src":24462},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":32,"searchDepth":47,"depth":47,"links":24464},[24465,24466,24467],{"id":24359,"depth":47,"text":24360},{"id":24395,"depth":47,"text":24396},{"id":24425,"depth":47,"text":24426},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24351,"description":32},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24474,"title":24475,"body":24476,"description":32,"extension":452,"meta":24709,"navigation":454,"path":24710,"seo":24711,"stem":24712,"__hash__":24713},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24477,"toc":24705},[24478,24481,24485,24488,24491,24496,24501,24504,24509,24514,24517,24522,24525,24530,24533,24538,24541,24546,24549,24554,24559,24562,24567,24570,24573,24578,24581,24586,24591,24595,24598,24601,24606,24611,24614,24619,24624,24627,24632,24635,24638,24643,24646,24651,24654,24659,24664,24667,24672,24677,24680,24685,24688,24693,24696],[10,24479,24475],{"id":24480},"_4策略学习",[469,24482,24484],{"id":24483},"_41概念描述","4.1.概念描述",[14,24486,24487],{},"用神经网络（策略网络）近似策略函数",[14,24489,24490],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24492,24493],{},[1838,24494],{"alt":32,"src":24495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24497,24498],{},[1838,24499],{"alt":32,"src":24500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24502,24503],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24505,24506],{},[1838,24507],{"alt":32,"src":24508},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24510,24511],{},[1838,24512],{"alt":32,"src":24513},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24515,24516],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24518,24519],{},[1838,24520],{"alt":32,"src":24521},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24523,24524],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24526,24527],{},[1838,24528],{"alt":32,"src":24529},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24531,24532],{},"改进theta要用到策略梯度算法",[14,24534,24535],{},[1838,24536],{"alt":32,"src":24537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24539,24540],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24542,24543],{},[1838,24544],{"alt":32,"src":24545},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24547,24548],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24550,24551],{},[1838,24552],{"alt":32,"src":24553},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24555,24556],{},[1838,24557],{"alt":32,"src":24558},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24560,24561],{},"梯度公式总结：",[14,24563,24564],{},[1838,24565],{"alt":32,"src":24566},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24568,24569],{},"两个公式的分别应用场景：",[14,24571,24572],{},"对于离散的动作：",[14,24574,24575],{},[1838,24576],{"alt":32,"src":24577},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24579,24580],{},"对于连续的动作：",[14,24582,24583],{},[1838,24584],{"alt":32,"src":24585},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24587,24588],{},[1838,24589],{"alt":32,"src":24590},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[469,24592,24594],{"id":24593},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24596,24597],{},"使用蒙特卡洛来近似计算策略梯度",[14,24599,24600],{},"蒙特卡洛法的解释如下：",[14,24602,24603],{},[1838,24604],{"alt":32,"src":24605},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24607,24608],{},[1838,24609],{"alt":32,"src":24610},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24612,24613],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[481,24615,24616],{},[484,24617,24618],{},"方法一：reinforce算法",[14,24620,24621],{},[1838,24622],{"alt":32,"src":24623},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24625,24626],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[481,24628,24629],{"start":47},[484,24630,24631],{},"方法二：actor-critic算法",[14,24633,24634],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24636,24637],{},"两个网络的构建：",[14,24639,24640],{},[1838,24641],{"alt":32,"src":24642},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24644,24645],{},"actor网路：",[14,24647,24648],{},[1838,24649],{"alt":32,"src":24650},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24652,24653],{},"critic网络",[14,24655,24656],{},[1838,24657],{"alt":32,"src":24658},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[481,24660,24661],{"start":104},[484,24662,24663],{},"网络的训练",[14,24665,24666],{},"网络描述",[14,24668,24669],{},[1838,24670],{"alt":32,"src":24671},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24673,24674],{},[1838,24675],{"alt":32,"src":24676},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24678,24679],{},"TD算法更新梯度：",[14,24681,24682],{},[1838,24683],{"alt":32,"src":24684},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24686,24687],{},"策略网络更新梯度：",[14,24689,24690],{},[1838,24691],{"alt":32,"src":24692},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24694,24695],{},"训练整个流程的具体描述：",[14,24697,24698,24701,24702],{},[1838,24699],{"alt":32,"src":24700},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1838,24703],{"alt":32,"src":24704},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":32,"searchDepth":47,"depth":47,"links":24706},[24707,24708],{"id":24483,"depth":47,"text":24484},{"id":24593,"depth":47,"text":24594},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24475,"description":32},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24715,"title":24716,"body":24717,"description":24724,"extension":452,"meta":24774,"navigation":454,"path":24775,"seo":24776,"stem":24777,"__hash__":24778},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24718,"toc":24770},[24719,24722,24725,24729,24732,24737,24741,24744,24749,24752,24757,24762,24765],[10,24720,24716],{"id":24721},"_5alphago算法",[14,24723,24724],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[469,24726,24728],{"id":24727},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24730,24731],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24733,24734],{},[1838,24735],{"alt":32,"src":24736},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[469,24738,24740],{"id":24739},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24742,24743],{},"采用强化学习的方式训练策略网络",[14,24745,24746],{},[1838,24747],{"alt":32,"src":24748},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24750,24751],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24753,24754],{},[1838,24755],{"alt":32,"src":24756},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24758,24759],{},[1838,24760],{"alt":32,"src":24761},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24763,24764],{},"强化学习训练策略网络的总结：",[14,24766,24767],{},[1838,24768],{"alt":32,"src":24769},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":32,"searchDepth":47,"depth":47,"links":24771},[24772,24773],{"id":24727,"depth":47,"text":24728},{"id":24739,"depth":47,"text":24740},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24716,"description":24724},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24780,"title":24781,"body":24782,"description":24789,"extension":452,"meta":24792,"navigation":454,"path":24793,"seo":24794,"stem":24795,"__hash__":24796},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24783,"toc":24790},[24784,24787],[10,24785,24781],{"id":24786},"_6价值网络",[14,24788,24789],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":32,"searchDepth":47,"depth":47,"links":24791},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24781,"description":24789},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24798,"title":24799,"body":24800,"description":24804,"extension":452,"meta":24805,"navigation":454,"path":24806,"seo":24807,"stem":24808,"__hash__":24809},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24801,"toc":24802},[],{"title":32,"searchDepth":47,"depth":47,"links":24803},[],"记录自己的强化学习笔记。",{"category":23719},"\u002Fwiki\u002F2025-12-04",{"title":24799,"description":24804},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24811,"title":24812,"body":24813,"description":451,"extension":452,"meta":24852,"navigation":454,"path":24853,"seo":24854,"stem":24855,"__hash__":24856},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24814,"toc":24850},[24815,24818,24821,24827,24830,24836,24839,24844,24847],[10,24816,24812],{"id":24817},"_1-项目概览与官方资源",[14,24819,24820],{},"官方文档：",[14,24822,24823],{},[51,24824,24825],{"href":24825,"rel":24826},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24206],[14,24828,24829],{},"官方代码仓库：",[14,24831,24832],{},[51,24833,24834],{"href":24834,"rel":24835},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24206],[14,24837,24838],{},"复现大体流程：",[14,24840,24841],{},[1838,24842],{"alt":32,"src":24843},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24845,24846],{},"本教程的目标是打通这条链路：",[14,24848,24849],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":32,"searchDepth":47,"depth":47,"links":24851},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24812,"description":451},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24858,"title":24859,"body":24860,"description":451,"extension":452,"meta":24976,"navigation":454,"path":24977,"seo":24978,"stem":24979,"__hash__":24980},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24861,"toc":24971},[24862,24865,24869,24872,24879,24883,24886,24895,24905,24909,24939,24942,24968],[10,24863,24859],{"id":24864},"_2-环境准备与设备连接",[469,24866,24868],{"id":24867},"_21-系统与环境","2.1 系统与环境",[14,24870,24871],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24873,24874,24875,24878],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[34,24876,24877],{},"lerobot"," 依赖。",[469,24880,24882],{"id":24881},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24884,24885],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[27,24887,24889],{"className":24163,"code":24888,"language":24165,"meta":32,"style":32},"lerobot-find-out\n",[34,24890,24891],{"__ignoreMap":32},[37,24892,24893],{"class":39,"line":40},[37,24894,24888],{"class":2320},[14,24896,24897,24898,735,24901,24904],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[34,24899,24900],{},"\u002Fdev\u002FttyACM0",[34,24902,24903],{},"\u002Fdev\u002FttyACM1","）。",[469,24906,24908],{"id":24907},"_23-串口授权","2.3 串口授权",[27,24910,24912],{"className":24163,"code":24911,"language":24165,"meta":32,"style":32},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[34,24913,24914,24928],{"__ignoreMap":32},[37,24915,24916,24919,24922,24925],{"class":39,"line":40},[37,24917,24918],{"class":2320},"sudo",[37,24920,24921],{"class":185}," chmod",[37,24923,24924],{"class":61}," 666",[37,24926,24927],{"class":185}," \u002Fdev\u002FttyACM0\n",[37,24929,24930,24932,24934,24936],{"class":39,"line":47},[37,24931,24918],{"class":2320},[37,24933,24921],{"class":185},[37,24935,24924],{"class":61},[37,24937,24938],{"class":185}," \u002Fdev\u002FttyACM1\n",[14,24940,24941],{},"说明：",[1515,24943,24944,24949,24955,24965],{},[484,24945,24946,24948],{},[34,24947,24918],{},"：以 root 权限执行命令。",[484,24950,24951,24954],{},[34,24952,24953],{},"chmod","：修改设备节点权限。",[484,24956,24957,24960,24961,24964],{},[34,24958,24959],{},"666","：",[34,24962,24963],{},"rw-rw-rw-","，所有用户可读写。",[484,24966,24967],{},"串口号必须替换为你机器上的真实端口。",[446,24969,24970],{},"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":32,"searchDepth":47,"depth":47,"links":24972},[24973,24974,24975],{"id":24867,"depth":47,"text":24868},{"id":24881,"depth":47,"text":24882},{"id":24907,"depth":47,"text":24908},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24859,"description":451},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24982,"title":24983,"body":24984,"description":451,"extension":452,"meta":25145,"navigation":454,"path":25146,"seo":25147,"stem":25148,"__hash__":25149},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24985,"toc":25141},[24986,24990,24994,25000,25003,25060,25063,25067,25070,25138],[10,24987,24989],{"id":24988},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[469,24991,24993],{"id":24992},"_31-配置电机-id","3.1 配置电机 ID",[14,24995,24996,24997,24999],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[34,24998,332],{},"，需要改成机械臂链路里不冲突的编号。",[14,25001,25002],{},"方式一：用 LeRobot 命令逐步写入。",[27,25004,25006],{"className":24163,"code":25005,"language":24165,"meta":32,"style":32},"# 主臂舵机配置 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",[34,25007,25008,25013,25021,25028,25033,25037,25042,25048,25055],{"__ignoreMap":32},[37,25009,25010],{"class":39,"line":40},[37,25011,25012],{"class":43},"# 主臂舵机配置 ID\n",[37,25014,25015,25018],{"class":39,"line":47},[37,25016,25017],{"class":2320},"lerobot-setup-motors",[37,25019,25020],{"class":61}," \\\n",[37,25022,25023,25026],{"class":39,"line":104},[37,25024,25025],{"class":61},"  --teleop.type=so101_leader",[37,25027,25020],{"class":61},[37,25029,25030],{"class":39,"line":113},[37,25031,25032],{"class":61},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[37,25034,25035],{"class":39,"line":189},[37,25036,2757],{"emptyLinePlaceholder":454},[37,25038,25039],{"class":39,"line":195},[37,25040,25041],{"class":43},"# 从臂舵机配置 ID\n",[37,25043,25044,25046],{"class":39,"line":201},[37,25045,25017],{"class":2320},[37,25047,25020],{"class":61},[37,25049,25050,25053],{"class":39,"line":207},[37,25051,25052],{"class":61},"  --robot.type=so101_follower",[37,25054,25020],{"class":61},[37,25056,25057],{"class":39,"line":213},[37,25058,25059],{"class":61},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,25061,25062],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[469,25064,25066],{"id":25065},"_32-机械臂校准","3.2 机械臂校准",[14,25068,25069],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[27,25071,25073],{"className":24163,"code":25072,"language":24165,"meta":32,"style":32},"# 主臂校准\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",[34,25074,25075,25080,25087,25093,25100,25105,25109,25114,25120,25126,25133],{"__ignoreMap":32},[37,25076,25077],{"class":39,"line":40},[37,25078,25079],{"class":43},"# 主臂校准\n",[37,25081,25082,25085],{"class":39,"line":47},[37,25083,25084],{"class":2320},"lerobot-calibrate",[37,25086,25020],{"class":61},[37,25088,25089,25091],{"class":39,"line":104},[37,25090,25025],{"class":61},[37,25092,25020],{"class":61},[37,25094,25095,25098],{"class":39,"line":113},[37,25096,25097],{"class":61},"  --teleop.port=\u002Fdev\u002FttyACM0",[37,25099,25020],{"class":61},[37,25101,25102],{"class":39,"line":189},[37,25103,25104],{"class":61},"  --teleop.id=my_awesome_leader_arm\n",[37,25106,25107],{"class":39,"line":195},[37,25108,2757],{"emptyLinePlaceholder":454},[37,25110,25111],{"class":39,"line":201},[37,25112,25113],{"class":43},"# 从臂校准\n",[37,25115,25116,25118],{"class":39,"line":207},[37,25117,25084],{"class":2320},[37,25119,25020],{"class":61},[37,25121,25122,25124],{"class":39,"line":213},[37,25123,25052],{"class":61},[37,25125,25020],{"class":61},[37,25127,25128,25131],{"class":39,"line":218},[37,25129,25130],{"class":61},"  --robot.port=\u002Fdev\u002FttyACM1",[37,25132,25020],{"class":61},[37,25134,25135],{"class":39,"line":227},[37,25136,25137],{"class":61},"  --robot.id=my_awesome_follower_arm\n",[446,25139,25140],{},"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":32,"searchDepth":47,"depth":47,"links":25142},[25143,25144],{"id":24992,"depth":47,"text":24993},{"id":25065,"depth":47,"text":25066},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24983,"description":451},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25151,"title":25152,"body":25153,"description":451,"extension":452,"meta":25344,"navigation":454,"path":25345,"seo":25346,"stem":25347,"__hash__":25348},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25154,"toc":25340},[25155,25158,25162,25209,25213,25226,25289,25292,25337],[10,25156,25152],{"id":25157},"_4-遥操与相机接入",[469,25159,25161],{"id":25160},"_41-不带相机遥操","4.1 不带相机遥操",[27,25163,25165],{"className":24163,"code":25164,"language":24165,"meta":32,"style":32},"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",[34,25166,25167,25174,25180,25186,25193,25199,25205],{"__ignoreMap":32},[37,25168,25169,25172],{"class":39,"line":40},[37,25170,25171],{"class":2320},"lerobot-teleoperate",[37,25173,25020],{"class":61},[37,25175,25176,25178],{"class":39,"line":47},[37,25177,25052],{"class":61},[37,25179,25020],{"class":61},[37,25181,25182,25184],{"class":39,"line":104},[37,25183,25130],{"class":61},[37,25185,25020],{"class":61},[37,25187,25188,25191],{"class":39,"line":113},[37,25189,25190],{"class":61},"  --robot.id=my_awesome_follower_arm",[37,25192,25020],{"class":61},[37,25194,25195,25197],{"class":39,"line":189},[37,25196,25025],{"class":61},[37,25198,25020],{"class":61},[37,25200,25201,25203],{"class":39,"line":195},[37,25202,25097],{"class":61},[37,25204,25020],{"class":61},[37,25206,25207],{"class":39,"line":201},[37,25208,25104],{"class":61},[469,25210,25212],{"id":25211},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[27,25214,25216],{"className":24163,"code":25215,"language":24165,"meta":32,"style":32},"lerobot-find-cameras opencv\n",[34,25217,25218],{"__ignoreMap":32},[37,25219,25220,25223],{"class":39,"line":40},[37,25221,25222],{"class":2320},"lerobot-find-cameras",[37,25224,25225],{"class":185}," opencv\n",[27,25227,25229],{"className":24163,"code":25228,"language":24165,"meta":32,"style":32},"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",[34,25230,25231,25237,25243,25249,25255,25265,25271,25277,25284],{"__ignoreMap":32},[37,25232,25233,25235],{"class":39,"line":40},[37,25234,25171],{"class":2320},[37,25236,25020],{"class":61},[37,25238,25239,25241],{"class":39,"line":47},[37,25240,25052],{"class":61},[37,25242,25020],{"class":61},[37,25244,25245,25247],{"class":39,"line":104},[37,25246,25130],{"class":61},[37,25248,25020],{"class":61},[37,25250,25251,25253],{"class":39,"line":113},[37,25252,25190],{"class":61},[37,25254,25020],{"class":61},[37,25256,25257,25260,25263],{"class":39,"line":189},[37,25258,25259],{"class":61},"  --robot.cameras=",[37,25261,25262],{"class":185},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[37,25264,25020],{"class":61},[37,25266,25267,25269],{"class":39,"line":195},[37,25268,25025],{"class":61},[37,25270,25020],{"class":61},[37,25272,25273,25275],{"class":39,"line":201},[37,25274,25097],{"class":61},[37,25276,25020],{"class":61},[37,25278,25279,25282],{"class":39,"line":207},[37,25280,25281],{"class":61},"  --teleop.id=my_awesome_leader_arm",[37,25283,25020],{"class":61},[37,25285,25286],{"class":39,"line":213},[37,25287,25288],{"class":61},"  --display_data=true\n",[14,25290,25291],{},"相机参数说明：",[1515,25293,25294,25300,25306,25315,25325,25331],{},[484,25295,25296,25299],{},[34,25297,25298],{},"front","：相机名称。",[484,25301,25302,25305],{},[34,25303,25304],{},"type: opencv","：相机驱动类型。",[484,25307,25308,25311,25312,24904],{},[34,25309,25310],{},"index_or_path","：设备编号或设备路径（如 ",[34,25313,25314],{},"\u002Fdev\u002Fvideo4",[484,25316,25317,25320,25321,25324],{},[34,25318,25319],{},"width"," \u002F ",[34,25322,25323],{},"height","：图像分辨率。",[484,25326,25327,25330],{},[34,25328,25329],{},"fps","：采样帧率。",[484,25332,25333,25336],{},[34,25334,25335],{},"--display_data=true","：启用实时可视化。",[446,25338,25339],{},"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":32,"searchDepth":47,"depth":47,"links":25341},[25342,25343],{"id":25160,"depth":47,"text":25161},{"id":25211,"depth":47,"text":25212},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25152,"description":451},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25350,"title":25351,"body":25352,"description":451,"extension":452,"meta":25524,"navigation":454,"path":25525,"seo":25526,"stem":25527,"__hash__":25528},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25353,"toc":25519},[25354,25358,25362,25367,25372,25375,25417,25423,25427,25476,25481,25485,25488,25496,25501,25506,25511,25516],[10,25355,25357],{"id":25356},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[469,25359,25361],{"id":25360},"_51-生成访问令牌","5.1 生成访问令牌",[14,25363,25364],{},[1838,25365],{"alt":32,"src":25366},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25368,25369],{},[1838,25370],{"alt":32,"src":25371},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25373,25374],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[27,25376,25378],{"className":24163,"code":25377,"language":24165,"meta":32,"style":32},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[34,25379,25380,25393],{"__ignoreMap":32},[37,25381,25382,25385,25388,25390],{"class":39,"line":40},[37,25383,25384],{"class":54},"export",[37,25386,25387],{"class":50}," HF_TOKEN",[37,25389,55],{"class":54},[37,25391,25392],{"class":185},"\"your_huggingface_token\"\n",[37,25394,25395,25398,25401,25404,25407,25409,25412,25414],{"class":39,"line":47},[37,25396,25397],{"class":2320},"hf",[37,25399,25400],{"class":185}," auth",[37,25402,25403],{"class":185}," login",[37,25405,25406],{"class":61}," --token",[37,25408,10065],{"class":185},[37,25410,25411],{"class":50},"$HF_TOKEN",[37,25413,772],{"class":185},[37,25415,25416],{"class":61}," --add-to-git-credential\n",[14,25418,25419,25422],{},[34,25420,25421],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[469,25424,25426],{"id":25425},"_52-验证登录","5.2 验证登录",[27,25428,25430],{"className":24163,"code":25429,"language":24165,"meta":32,"style":32},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[34,25431,25432,25463],{"__ignoreMap":32},[37,25433,25434,25437,25439,25442,25444,25446,25449,25452,25455,25458,25461],{"class":39,"line":40},[37,25435,25436],{"class":50},"HF_USER",[37,25438,55],{"class":54},[37,25440,25441],{"class":50},"$(",[37,25443,25397],{"class":2320},[37,25445,25400],{"class":185},[37,25447,25448],{"class":185}," whoami",[37,25450,25451],{"class":54}," |",[37,25453,25454],{"class":2320}," head",[37,25456,25457],{"class":61}," -n",[37,25459,25460],{"class":61}," 1",[37,25462,280],{"class":50},[37,25464,25465,25468,25470,25473],{"class":39,"line":47},[37,25466,25467],{"class":61},"echo",[37,25469,10065],{"class":185},[37,25471,25472],{"class":50},"$HF_USER",[37,25474,25475],{"class":185},"\"\n",[14,25477,25478],{},[1838,25479],{"alt":32,"src":25480},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[469,25482,25484],{"id":25483},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25486,25487],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1515,25489,25490,25493],{},[484,25491,25492],{},"Dataset Repo（用于上传演示数据）",[484,25494,25495],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25497,25498],{},[1838,25499],{"alt":32,"src":25500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25502,25503],{},[1838,25504],{"alt":32,"src":25505},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25507,25508],{},[1838,25509],{"alt":32,"src":25510},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25512,25513],{},[1838,25514],{"alt":32,"src":25515},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[446,25517,25518],{},"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":32,"searchDepth":47,"depth":47,"links":25520},[25521,25522,25523],{"id":25360,"depth":47,"text":25361},{"id":25425,"depth":47,"text":25426},{"id":25483,"depth":47,"text":25484},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25351,"description":451},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25530,"title":25531,"body":25532,"description":451,"extension":452,"meta":25729,"navigation":454,"path":25730,"seo":25731,"stem":25732,"__hash__":25733},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25533,"toc":25724},[25534,25538,25542,25638,25646,25651,25655,25671,25674,25678,25721],[10,25535,25537],{"id":25536},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[469,25539,25541],{"id":25540},"_61-录制示教数据","6.1 录制示教数据",[27,25543,25545],{"className":24163,"code":25544,"language":24165,"meta":32,"style":32},"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",[34,25546,25547,25554,25560,25566,25572,25581,25587,25593,25599,25606,25616,25623,25633],{"__ignoreMap":32},[37,25548,25549,25552],{"class":39,"line":40},[37,25550,25551],{"class":2320},"lerobot-record",[37,25553,25020],{"class":61},[37,25555,25556,25558],{"class":39,"line":47},[37,25557,25052],{"class":61},[37,25559,25020],{"class":61},[37,25561,25562,25564],{"class":39,"line":104},[37,25563,25130],{"class":61},[37,25565,25020],{"class":61},[37,25567,25568,25570],{"class":39,"line":113},[37,25569,25190],{"class":61},[37,25571,25020],{"class":61},[37,25573,25574,25576,25579],{"class":39,"line":189},[37,25575,25259],{"class":61},[37,25577,25578],{"class":185},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[37,25580,25020],{"class":61},[37,25582,25583,25585],{"class":39,"line":195},[37,25584,25025],{"class":61},[37,25586,25020],{"class":61},[37,25588,25589,25591],{"class":39,"line":201},[37,25590,25097],{"class":61},[37,25592,25020],{"class":61},[37,25594,25595,25597],{"class":39,"line":207},[37,25596,25281],{"class":61},[37,25598,25020],{"class":61},[37,25600,25601,25604],{"class":39,"line":213},[37,25602,25603],{"class":61},"  --display_data=true",[37,25605,25020],{"class":61},[37,25607,25608,25611,25614],{"class":39,"line":218},[37,25609,25610],{"class":61},"  --dataset.repo_id=",[37,25612,25613],{"class":185},"\"Embodied-AI-6\u002Fso101_test\"",[37,25615,25020],{"class":61},[37,25617,25618,25621],{"class":39,"line":227},[37,25619,25620],{"class":61},"  --dataset.num_episodes=10",[37,25622,25020],{"class":61},[37,25624,25625,25628,25631],{"class":39,"line":232},[37,25626,25627],{"class":61},"  --dataset.single_task=",[37,25629,25630],{"class":185},"\"Grab the green cube\"",[37,25632,25020],{"class":61},[37,25634,25635],{"class":39,"line":238},[37,25636,25637],{"class":61},"  --resume=true\n",[1515,25639,25640],{},[484,25641,25642,25645],{},[34,25643,25644],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25647,25648],{},[1838,25649],{"alt":32,"src":25650},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[469,25652,25654],{"id":25653},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[27,25656,25658],{"className":24163,"code":25657,"language":24165,"meta":32,"style":32},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[34,25659,25660],{"__ignoreMap":32},[37,25661,25662,25665,25668],{"class":39,"line":40},[37,25663,25664],{"class":2320},"rm",[37,25666,25667],{"class":61}," -rf",[37,25669,25670],{"class":185}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25672,25673],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[469,25675,25677],{"id":25676},"_63-回放指定-episode","6.3 回放指定 episode",[27,25679,25681],{"className":24163,"code":25680,"language":24165,"meta":32,"style":32},"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",[34,25682,25683,25690,25696,25702,25708,25716],{"__ignoreMap":32},[37,25684,25685,25688],{"class":39,"line":40},[37,25686,25687],{"class":2320},"lerobot-replay",[37,25689,25020],{"class":61},[37,25691,25692,25694],{"class":39,"line":47},[37,25693,25052],{"class":61},[37,25695,25020],{"class":61},[37,25697,25698,25700],{"class":39,"line":104},[37,25699,25130],{"class":61},[37,25701,25020],{"class":61},[37,25703,25704,25706],{"class":39,"line":113},[37,25705,25190],{"class":61},[37,25707,25020],{"class":61},[37,25709,25710,25712,25714],{"class":39,"line":189},[37,25711,25610],{"class":61},[37,25713,25613],{"class":185},[37,25715,25020],{"class":61},[37,25717,25718],{"class":39,"line":195},[37,25719,25720],{"class":61},"  --dataset.episode=0\n",[446,25722,25723],{},"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":32,"searchDepth":47,"depth":47,"links":25725},[25726,25727,25728],{"id":25540,"depth":47,"text":25541},{"id":25653,"depth":47,"text":25654},{"id":25676,"depth":47,"text":25677},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25531,"description":451},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25735,"title":25736,"body":25737,"description":451,"extension":452,"meta":25865,"navigation":454,"path":25866,"seo":25867,"stem":25868,"__hash__":25869},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25738,"toc":25863},[25739,25743,25806,25809,25856,25861],[10,25740,25742],{"id":25741},"_7-act-模型训练","7. ACT 模型训练",[27,25744,25746],{"className":24163,"code":25745,"language":24165,"meta":32,"style":32},"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",[34,25747,25748,25755,25763,25770,25777,25784,25791,25798],{"__ignoreMap":32},[37,25749,25750,25753],{"class":39,"line":40},[37,25751,25752],{"class":2320},"lerobot-train",[37,25754,25020],{"class":61},[37,25756,25757,25759,25761],{"class":39,"line":47},[37,25758,25610],{"class":61},[37,25760,25613],{"class":185},[37,25762,25020],{"class":61},[37,25764,25765,25768],{"class":39,"line":104},[37,25766,25767],{"class":61},"  --policy.type=act",[37,25769,25020],{"class":61},[37,25771,25772,25775],{"class":39,"line":113},[37,25773,25774],{"class":61},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[37,25776,25020],{"class":61},[37,25778,25779,25782],{"class":39,"line":189},[37,25780,25781],{"class":61},"  --job_name=act_so101_test",[37,25783,25020],{"class":61},[37,25785,25786,25789],{"class":39,"line":195},[37,25787,25788],{"class":61},"  --policy.device=cuda",[37,25790,25020],{"class":61},[37,25792,25793,25796],{"class":39,"line":201},[37,25794,25795],{"class":61},"  --wandb.enable=false",[37,25797,25020],{"class":61},[37,25799,25800,25803],{"class":39,"line":207},[37,25801,25802],{"class":61},"  --policy.repo_id=",[37,25804,25805],{"class":185},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25807,25808],{},"参数说明：",[1515,25810,25811,25817,25823,25829,25835,25844,25850],{},[484,25812,25813,25816],{},[34,25814,25815],{},"--dataset.repo_id","：训练数据集仓库。",[484,25818,25819,25822],{},[34,25820,25821],{},"--policy.type=act","：策略模型类型为 ACT。",[484,25824,25825,25828],{},[34,25826,25827],{},"--output_dir","：本地训练输出目录。",[484,25830,25831,25834],{},[34,25832,25833],{},"--job_name","：训练任务名称。",[484,25836,25837,25840,25841,24904],{},[34,25838,25839],{},"--policy.device","：训练设备（如 ",[34,25842,25843],{},"cuda",[484,25845,25846,25849],{},[34,25847,25848],{},"--wandb.enable","：是否启用 WandB 可视化。",[484,25851,25852,25855],{},[34,25853,25854],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25857,25858],{},[1838,25859],{"alt":32,"src":25860},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[446,25862,25723],{},{"title":32,"searchDepth":47,"depth":47,"links":25864},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25736,"description":451},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25871,"title":25872,"body":25873,"description":451,"extension":452,"meta":25960,"navigation":454,"path":25961,"seo":25962,"stem":25963,"__hash__":25964},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25874,"toc":25958},[25875,25878,25881,25948,25956],[10,25876,25872],{"id":25877},"_8-策略部署与自动采集",[14,25879,25880],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[27,25882,25884],{"className":24163,"code":25883,"language":24165,"meta":32,"style":32},"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",[34,25885,25886,25892,25898,25904,25912,25918,25925,25933,25941],{"__ignoreMap":32},[37,25887,25888,25890],{"class":39,"line":40},[37,25889,25551],{"class":2320},[37,25891,25020],{"class":61},[37,25893,25894,25896],{"class":39,"line":47},[37,25895,25052],{"class":61},[37,25897,25020],{"class":61},[37,25899,25900,25902],{"class":39,"line":104},[37,25901,25130],{"class":61},[37,25903,25020],{"class":61},[37,25905,25906,25908,25910],{"class":39,"line":113},[37,25907,25259],{"class":61},[37,25909,25578],{"class":185},[37,25911,25020],{"class":61},[37,25913,25914,25916],{"class":39,"line":189},[37,25915,25190],{"class":61},[37,25917,25020],{"class":61},[37,25919,25920,25923],{"class":39,"line":195},[37,25921,25922],{"class":61},"  --display_data=false",[37,25924,25020],{"class":61},[37,25926,25927,25929,25931],{"class":39,"line":201},[37,25928,25610],{"class":61},[37,25930,25613],{"class":185},[37,25932,25020],{"class":61},[37,25934,25935,25937,25939],{"class":39,"line":207},[37,25936,25627],{"class":61},[37,25938,25630],{"class":185},[37,25940,25020],{"class":61},[37,25942,25943,25946],{"class":39,"line":213},[37,25944,25945],{"class":61},"  --policy.path=",[37,25947,25805],{"class":185},[1515,25949,25950],{},[484,25951,25952,25955],{},[34,25953,25954],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[446,25957,25723],{},{"title":32,"searchDepth":47,"depth":47,"links":25959},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25872,"description":451},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25966,"title":25967,"body":25968,"description":451,"extension":452,"meta":25997,"navigation":454,"path":25998,"seo":25999,"stem":26000,"__hash__":26001},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25969,"toc":25995},[25970,25974,25977,25983,25986,25992],[10,25971,25973],{"id":25972},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25975,25976],{},"项目地址：",[14,25978,25979],{},[51,25980,25981],{"href":25981,"rel":25982},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24206],[14,25984,25985],{},"参考教程：",[14,25987,25988],{},[51,25989,25990],{"href":25990,"rel":25991},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24206],[14,25993,25994],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":32,"searchDepth":47,"depth":47,"links":25996},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25967,"description":451},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26003,"title":26004,"body":26005,"description":26009,"extension":452,"meta":26010,"navigation":454,"path":26011,"seo":26012,"stem":26013,"__hash__":26014},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26006,"toc":26007},[],{"title":32,"searchDepth":47,"depth":47,"links":26008},[],"act复现",{"category":23719},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26004,"description":26009},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26016,"title":26017,"body":26018,"description":32,"extension":452,"meta":26320,"navigation":454,"path":26321,"seo":26322,"stem":26323,"__hash__":26324},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26019,"toc":26312},[26020,26023,26027,26037,26044,26051,26054,26061,26064,26067,26071,26083,26087,26133,26136,26139,26142,26145,26148,26152,26190,26196,26200,26254,26259,26262,26265,26270,26273,26278,26281,26284,26288,26291,26294,26298],[10,26021,26017],{"id":26022},"_1简介",[498,26024,26026],{"id":26025},"_11什么是-docker","1.1什么是 Docker？",[14,26028,26029,26030,26033,26034],{},"Docker 是一个开源的 ",[673,26031,26032],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[673,26035,26036],{},"一次构建，到处运行。",[14,26038,26039,26040,26043],{},"“ ",[673,26041,26042],{},"一次构建，到处运行"," ”也就是说：",[481,26045,26046],{},[484,26047,26048],{},[673,26049,26050],{},"之前：",[14,26052,26053],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[481,26055,26056],{},[484,26057,26058],{},[673,26059,26060],{},"使用docker后：",[14,26062,26063],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,26065,26066],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[498,26068,26070],{"id":26069},"_12它是怎么工作的","1.2.它是怎么工作的？",[1515,26072,26073,26076],{},[484,26074,26075],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[484,26077,26078,26079,26082],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[673,26080,26081],{},"无论在哪运行都一样稳定"," 。",[498,26084,26086],{"id":26085},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[661,26088,26089,26099],{},[664,26090,26091],{},[667,26092,26093,26096],{},[670,26094,26095],{"align":24077},"概念",[670,26097,26098],{"align":24077},"解释",[708,26100,26101,26109,26117,26125],{},[667,26102,26103,26106],{},[713,26104,26105],{"align":24077},"镜像",[713,26107,26108],{"align":24077},"Image，运行容器的模板，像是一个应用快照",[667,26110,26111,26114],{},[713,26112,26113],{"align":24077},"容器",[713,26115,26116],{"align":24077},"Container，运行中的镜像实例，有自己的文件系统、网络等",[667,26118,26119,26122],{},[713,26120,26121],{"align":24077},"Dockerfile",[713,26123,26124],{"align":24077},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[667,26126,26127,26130],{},[713,26128,26129],{"align":24077},"仓库",[713,26131,26132],{"align":24077},"Registry，存放镜像的地方，比如 Docker Hub",[14,26134,26135],{},"抽象化理解:",[14,26137,26138],{},"Docker镜像≈C++类",[14,26140,26141],{},"Docker容器≈C++类实例(即对象)",[14,26143,26144],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,26146,26147],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[498,26149,26151],{"id":26150},"_14类比理解","1.4.类比理解",[661,26153,26154,26164],{},[664,26155,26156],{},[667,26157,26158,26161],{},[670,26159,26160],{"align":24077},"传统部署",[670,26162,26163],{"align":24077},"Docker部署",[708,26165,26166,26174,26182],{},[667,26167,26168,26171],{},[713,26169,26170],{"align":24077},"手动安装依赖、调试版本不一致问题",[713,26172,26173],{"align":24077},"一次打包环境和代码",[667,26175,26176,26179],{},[713,26177,26178],{"align":24077},"程序“裸奔”跑在系统上",[713,26180,26181],{"align":24077},"程序“穿着容器”隔离运行",[667,26183,26184,26187],{},[713,26185,26186],{"align":24077},"容易“在我电脑上能跑”",[713,26188,26189],{"align":24077},"保证“无论在哪都能跑”",[14,26191,26192,26193],{},"就像快递包裹： ",[673,26194,26195],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[498,26197,26199],{"id":26198},"_15docker-的核心优势","1.5.Docker 的核心优势",[661,26201,26202,26212],{},[664,26203,26204],{},[667,26205,26206,26209],{},[670,26207,26208],{"align":24077},"优势",[670,26210,26211],{"align":24077},"说明",[708,26213,26214,26222,26230,26238,26246],{},[667,26215,26216,26219],{},[713,26217,26218],{"align":24077},"轻量级",[713,26220,26221],{"align":24077},"基于系统内核共享，启动速度快，占资源少",[667,26223,26224,26227],{},[713,26225,26226],{"align":24077},"跨平台",[713,26228,26229],{"align":24077},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[667,26231,26232,26235],{},[713,26233,26234],{"align":24077},"易于迁移部署",[713,26236,26237],{"align":24077},"应用和环境一起封装，不怕依赖不一致",[667,26239,26240,26243],{},[713,26241,26242],{"align":24077},"易于版本控制",[713,26244,26245],{"align":24077},"镜像版本可控，支持回滚",[667,26247,26248,26251],{},[713,26249,26250],{"align":24077},"生态丰富",[713,26252,26253],{"align":24077},"Docker Hub 上有成千上万的现成镜像可用",[481,26255,26256],{},[484,26257,26258],{},"在Linux上可以几乎实现无性能损失。",[14,26260,26261],{},"docker里的发行版和本机共用Linux内核。",[14,26263,26264],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[481,26266,26267],{},[484,26268,26269],{},"可以快速部署在绝大多数Linux发行版",[14,26271,26272],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[481,26274,26275],{},[484,26276,26277],{},"配置环境简单",[14,26279,26280],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26282,26283],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[481,26285,26286],{},[484,26287,26250],{},[14,26289,26290],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26292,26293],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[498,26295,26297],{"id":26296},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1515,26299,26300,26303,26306,26309],{},[484,26301,26302],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[484,26304,26305],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[484,26307,26308],{},"微服务架构：每个服务一个容器，灵活组合",[484,26310,26311],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":32,"searchDepth":47,"depth":47,"links":26313},[26314,26315,26316,26317,26318,26319],{"id":26025,"depth":104,"text":26026},{"id":26069,"depth":104,"text":26070},{"id":26085,"depth":104,"text":26086},{"id":26150,"depth":104,"text":26151},{"id":26198,"depth":104,"text":26199},{"id":26296,"depth":104,"text":26297},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26017,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26326,"title":26327,"body":26328,"description":32,"extension":452,"meta":27061,"navigation":454,"path":27062,"seo":27063,"stem":27064,"__hash__":27065},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26329,"toc":27056},[26330,26333,26337,26340,26343,26349,26355,26359,26368,26371,26428,26431,26482,26485,26568,26571,26608,26612,26623,26636,26643,26646,26726,26729,26779,26782,26805,26809,26816,26819,26835,26841,26844,26860,26866,26869,26885,26899,26905,26925,26931,26934,26946,26952,26955,26969,26975,26978,26998,27003,27006,27009,27013,27016,27019,27022,27029,27032,27035,27038,27043,27048,27053],[10,26331,26327],{"id":26332},"_2安装docker",[498,26334,26336],{"id":26335},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26338,26339],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26341,26342],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26344,26345],{},[51,26346,26347],{"href":26347,"rel":26348},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24206],[14,26350,26351],{},[51,26352,26353],{"href":26353,"rel":26354},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24206],[22339,26356,26358],{"id":26357},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26360,26361,26362,26367],{},"以下内容根据 ",[51,26363,26366],{"href":26364,"rel":26365},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24206],"官方文档"," 修改而来。",[14,26369,26370],{},"如果你过去安装过 docker，先删掉：",[27,26372,26374],{"className":24163,"code":26373,"language":24165,"meta":32,"style":32},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[34,26375,26376],{"__ignoreMap":32},[37,26377,26378,26380,26383,26386,26389,26392,26395,26398,26401,26404,26407,26410,26413,26416,26419,26422,26425],{"class":39,"line":40},[37,26379,3375],{"class":54},[37,26381,26382],{"class":50}," pkg ",[37,26384,26385],{"class":54},"in",[37,26387,26388],{"class":185}," docker.io",[37,26390,26391],{"class":185}," docker-doc",[37,26393,26394],{"class":185}," docker-compose",[37,26396,26397],{"class":185}," docker-compose-v2",[37,26399,26400],{"class":185}," podman-docker",[37,26402,26403],{"class":185}," containerd",[37,26405,26406],{"class":185}," runc",[37,26408,26409],{"class":50},"; ",[37,26411,26412],{"class":54},"do",[37,26414,26415],{"class":2320}," sudo",[37,26417,26418],{"class":185}," apt-get",[37,26420,26421],{"class":185}," remove",[37,26423,26424],{"class":50}," $pkg; ",[37,26426,26427],{"class":54},"done\n",[14,26429,26430],{},"首先安装依赖和GPG：",[27,26432,26436],{"className":26433,"code":26434,"language":26435,"meta":32,"style":32},"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",[34,26437,26438,26443,26448,26453,26458,26463,26468,26472,26477],{"__ignoreMap":32},[37,26439,26440],{"class":39,"line":40},[37,26441,26442],{},"# Add Docker's official GPG key:\n",[37,26444,26445],{"class":39,"line":47},[37,26446,26447],{},"sudo apt-get update\n",[37,26449,26450],{"class":39,"line":104},[37,26451,26452],{},"sudo apt-get install ca-certificates curl\n",[37,26454,26455],{"class":39,"line":113},[37,26456,26457],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[37,26459,26460],{"class":39,"line":189},[37,26461,26462],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[37,26464,26465],{"class":39,"line":195},[37,26466,26467],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[37,26469,26470],{"class":39,"line":201},[37,26471,2757],{"emptyLinePlaceholder":454},[37,26473,26474],{"class":39,"line":207},[37,26475,26476],{},"# 如果上面这行报错就弄下面这行\n",[37,26478,26479],{"class":39,"line":213},[37,26480,26481],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26483,26484],{},"信任 Docker 的 GPG 公钥并添加仓库：",[27,26486,26488],{"className":24163,"code":26487,"language":24165,"meta":32,"style":32},"# 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",[34,26489,26490,26495,26501,26518,26551],{"__ignoreMap":32},[37,26491,26492],{"class":39,"line":40},[37,26493,26494],{"class":43},"# Add the repository to Apt sources:\n",[37,26496,26497,26499],{"class":39,"line":47},[37,26498,25467],{"class":61},[37,26500,25020],{"class":61},[37,26502,26503,26506,26509,26512,26515],{"class":39,"line":104},[37,26504,26505],{"class":185},"  \"deb [arch=$(",[37,26507,26508],{"class":2320},"dpkg",[37,26510,26511],{"class":61}," --print-architecture",[37,26513,26514],{"class":185},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[37,26516,26517],{"class":61},"\\\n",[37,26519,26520,26523,26525,26527,26530,26533,26535,26537,26540,26542,26544,26547,26549],{"class":39,"line":113},[37,26521,26522],{"class":185},"  \"",[37,26524,25441],{"class":50},[37,26526,1068],{"class":61},[37,26528,26529],{"class":185}," \u002Fetc\u002Fos-release",[37,26531,26532],{"class":50}," && ",[37,26534,25467],{"class":61},[37,26536,10065],{"class":185},[37,26538,26539],{"class":50},"$VERSION_CODENAME",[37,26541,772],{"class":185},[37,26543,138],{"class":50},[37,26545,26546],{"class":185},"\" stable\"",[37,26548,25451],{"class":54},[37,26550,25020],{"class":61},[37,26552,26553,26556,26559,26562,26565],{"class":39,"line":189},[37,26554,26555],{"class":2320},"  sudo",[37,26557,26558],{"class":185}," tee",[37,26560,26561],{"class":185}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[37,26563,26564],{"class":54}," >",[37,26566,26567],{"class":185}," \u002Fdev\u002Fnull\n",[14,26569,26570],{},"最后安装",[27,26572,26574],{"className":24163,"code":26573,"language":24165,"meta":32,"style":32},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[34,26575,26576,26585],{"__ignoreMap":32},[37,26577,26578,26580,26582],{"class":39,"line":40},[37,26579,24918],{"class":2320},[37,26581,26418],{"class":185},[37,26583,26584],{"class":185}," update\n",[37,26586,26587,26589,26591,26593,26596,26599,26602,26605],{"class":39,"line":47},[37,26588,24918],{"class":2320},[37,26590,26418],{"class":185},[37,26592,24175],{"class":185},[37,26594,26595],{"class":185}," docker-ce",[37,26597,26598],{"class":185}," docker-ce-cli",[37,26600,26601],{"class":185}," containerd.io",[37,26603,26604],{"class":185}," docker-buildx-plugin",[37,26606,26607],{"class":185}," docker-compose-plugin\n",[22339,26609,26611],{"id":26610},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26613,26614,26615,26618,26619,26622],{},"查看自己自己包管理工具版本（dnf是 ",[673,26616,26617],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[673,26620,26621],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[27,26624,26626],{"className":24163,"code":26625,"language":24165,"meta":32,"style":32},"dnf --version\n",[34,26627,26628],{"__ignoreMap":32},[37,26629,26630,26633],{"class":39,"line":40},[37,26631,26632],{"class":2320},"dnf",[37,26634,26635],{"class":61}," --version\n",[14,26637,26361,26638,26642],{},[51,26639,26366],{"href":26640,"rel":26641},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24206]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26644,26645],{},"如果你之前安装过 docker，请先删掉",[27,26647,26649],{"className":24163,"code":26648,"language":24165,"meta":32,"style":32},"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",[34,26650,26651,26665,26672,26679,26686,26693,26700,26707,26714,26721],{"__ignoreMap":32},[37,26652,26653,26655,26658,26660,26663],{"class":39,"line":40},[37,26654,24918],{"class":2320},[37,26656,26657],{"class":185}," dnf",[37,26659,26421],{"class":185},[37,26661,26662],{"class":185}," docker",[37,26664,25020],{"class":61},[37,26666,26667,26670],{"class":39,"line":47},[37,26668,26669],{"class":185},"                  docker-client",[37,26671,25020],{"class":61},[37,26673,26674,26677],{"class":39,"line":104},[37,26675,26676],{"class":185},"                  docker-client-latest",[37,26678,25020],{"class":61},[37,26680,26681,26684],{"class":39,"line":113},[37,26682,26683],{"class":185},"                  docker-common",[37,26685,25020],{"class":61},[37,26687,26688,26691],{"class":39,"line":189},[37,26689,26690],{"class":185},"                  docker-latest",[37,26692,25020],{"class":61},[37,26694,26695,26698],{"class":39,"line":195},[37,26696,26697],{"class":185},"                  docker-latest-logrotate",[37,26699,25020],{"class":61},[37,26701,26702,26705],{"class":39,"line":201},[37,26703,26704],{"class":185},"                  docker-logrotate",[37,26706,25020],{"class":61},[37,26708,26709,26712],{"class":39,"line":207},[37,26710,26711],{"class":185},"                  docker-selinux",[37,26713,25020],{"class":61},[37,26715,26716,26719],{"class":39,"line":213},[37,26717,26718],{"class":185},"                  docker-engine-selinux",[37,26720,25020],{"class":61},[37,26722,26723],{"class":39,"line":218},[37,26724,26725],{"class":185},"                  docker-engine\n",[14,26727,26728],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[27,26730,26732],{"className":24163,"code":26731,"language":24165,"meta":32,"style":32},"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",[34,26733,26734,26748,26763],{"__ignoreMap":32},[37,26735,26736,26738,26740,26743,26745],{"class":39,"line":40},[37,26737,24918],{"class":2320},[37,26739,26657],{"class":185},[37,26741,26742],{"class":61}," -y",[37,26744,24175],{"class":185},[37,26746,26747],{"class":185}," dnf-plugins-core\n",[37,26749,26750,26752,26754,26757,26760],{"class":39,"line":47},[37,26751,24918],{"class":2320},[37,26753,26657],{"class":185},[37,26755,26756],{"class":185}," config-manager",[37,26758,26759],{"class":185}," addrepo",[37,26761,26762],{"class":61}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[37,26764,26765,26767,26770,26773,26776],{"class":39,"line":104},[37,26766,24918],{"class":2320},[37,26768,26769],{"class":185}," sed",[37,26771,26772],{"class":61}," -i",[37,26774,26775],{"class":185}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[37,26777,26778],{"class":185}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26780,26781],{},"最后安装：",[27,26783,26785],{"className":24163,"code":26784,"language":24165,"meta":32,"style":32},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[34,26786,26787],{"__ignoreMap":32},[37,26788,26789,26791,26793,26795,26797,26799,26801,26803],{"class":39,"line":40},[37,26790,24918],{"class":2320},[37,26792,26657],{"class":185},[37,26794,24175],{"class":185},[37,26796,26595],{"class":185},[37,26798,26598],{"class":185},[37,26800,26601],{"class":185},[37,26802,26604],{"class":185},[37,26804,26607],{"class":185},[498,26806,26808],{"id":26807},"_22配置环境","2.2.配置环境",[22339,26810,26812,26815],{"id":26811},"_221检查-docker-服务状态",[673,26813,26814],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26817,26818],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[27,26820,26822],{"className":24163,"code":26821,"language":24165,"meta":32,"style":32},"systemctl status docker\n",[34,26823,26824],{"__ignoreMap":32},[37,26825,26826,26829,26832],{"class":39,"line":40},[37,26827,26828],{"class":2320},"systemctl",[37,26830,26831],{"class":185}," status",[37,26833,26834],{"class":185}," docker\n",[22339,26836,26838,26815],{"id":26837},"_222启动-docker-服务",[673,26839,26840],{},"2.2.2.启动 Docker 服务",[14,26842,26843],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[27,26845,26847],{"className":24163,"code":26846,"language":24165,"meta":32,"style":32},"sudo systemctl start docker\n",[34,26848,26849],{"__ignoreMap":32},[37,26850,26851,26853,26856,26858],{"class":39,"line":40},[37,26852,24918],{"class":2320},[37,26854,26855],{"class":185}," systemctl",[37,26857,4534],{"class":185},[37,26859,26834],{"class":185},[22339,26861,26863,26815],{"id":26862},"_223设置-docker-开机自启",[673,26864,26865],{},"2.2.3.设置 Docker 开机自启",[14,26867,26868],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[27,26870,26872],{"className":24163,"code":26871,"language":24165,"meta":32,"style":32},"sudo systemctl enable docker\n",[34,26873,26874],{"__ignoreMap":32},[37,26875,26876,26878,26880,26883],{"class":39,"line":40},[37,26877,24918],{"class":2320},[37,26879,26855],{"class":185},[37,26881,26882],{"class":185}," enable",[37,26884,26834],{"class":185},[22339,26886,26888,14136,26891,14136,26896,26815],{"id":26887},"_224将用户添加到-docker-组",[673,26889,26890],{},"2.2.4.将用户添加到",[673,26892,26893],{},[34,26894,26895],{},"docker",[673,26897,26898],{},"组",[14,26900,26901,26902,26904],{},"使用以下命令将当前用户添加到 ",[34,26903,26895],{}," 组：",[27,26906,26908],{"className":24163,"code":26907,"language":24165,"meta":32,"style":32},"sudo usermod -aG docker $USER\n",[34,26909,26910],{"__ignoreMap":32},[37,26911,26912,26914,26917,26920,26922],{"class":39,"line":40},[37,26913,24918],{"class":2320},[37,26915,26916],{"class":185}," usermod",[37,26918,26919],{"class":61}," -aG",[37,26921,26662],{"class":185},[37,26923,26924],{"class":50}," $USER\n",[22339,26926,26928,26815],{"id":26927},"_225退出并重新登录",[673,26929,26930],{},"2.2.5.退出并重新登录",[14,26932,26933],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[27,26935,26937],{"className":24163,"code":26936,"language":24165,"meta":32,"style":32},"newgrp docker\n",[34,26938,26939],{"__ignoreMap":32},[37,26940,26941,26944],{"class":39,"line":40},[37,26942,26943],{"class":2320},"newgrp",[37,26945,26834],{"class":185},[22339,26947,26949,26815],{"id":26948},"_226重新启动-docker-服务如果需要",[673,26950,26951],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26953,26954],{},"确保 Docker 服务正在运行，可以使用以下命令：",[27,26956,26957],{"className":24163,"code":26846,"language":24165,"meta":32,"style":32},[34,26958,26959],{"__ignoreMap":32},[37,26960,26961,26963,26965,26967],{"class":39,"line":40},[37,26962,24918],{"class":2320},[37,26964,26855],{"class":185},[37,26966,4534],{"class":185},[37,26968,26834],{"class":185},[22339,26970,26972,26815],{"id":26971},"_227重启电脑后检查-docker-服务状态",[673,26973,26974],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26976,26977],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[27,26979,26981],{"className":24163,"code":26980,"language":24165,"meta":32,"style":32},"sudo reboot\nsystemctl status docker\n",[34,26982,26983,26990],{"__ignoreMap":32},[37,26984,26985,26987],{"class":39,"line":40},[37,26986,24918],{"class":2320},[37,26988,26989],{"class":185}," reboot\n",[37,26991,26992,26994,26996],{"class":39,"line":47},[37,26993,26828],{"class":2320},[37,26995,26831],{"class":185},[37,26997,26834],{"class":185},[14,26999,27000],{},[1838,27001],{"alt":32,"src":27002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,27004,27005],{},"第三行显示enabled说明开机自启动成功",[14,27007,27008],{},"按q退出",[498,27010,27012],{"id":27011},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,27014,27015],{},"优先使用linux来使用docker是比较好的",[14,27017,27018],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,27020,27021],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,27023,27024,27025],{},"官方下载安装:",[51,27026,27027],{"href":27027,"rel":27028},"https:\u002F\u002Fwww.docker.com\u002F",[24206],[14,27030,27031],{},"Windows的Docker显卡直通与USB直通:",[14,27033,27034],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,27036,27037],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,27039,27040],{},[1838,27041],{"alt":32,"src":27042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,27044,27045],{},[1838,27046],{"alt":32,"src":27047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,27049,27050],{},[1838,27051],{"alt":32,"src":27052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[446,27054,27055],{},"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":32,"searchDepth":47,"depth":47,"links":27057},[27058,27059,27060],{"id":26335,"depth":104,"text":26336},{"id":26807,"depth":104,"text":26808},{"id":27011,"depth":104,"text":27012},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26327,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27067,"title":27068,"body":27069,"description":27076,"extension":452,"meta":27769,"navigation":454,"path":27770,"seo":27771,"stem":27772,"__hash__":27773},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27070,"toc":27763},[27071,27074,27077,27081,27086,27091,27094,27122,27127,27136,27139,27144,27148,27155,27160,27166,27170,27173,27177,27182,27274,27279,27297,27302,27323,27328,27344,27348,27353,27382,27387,27433,27438,27482,27490,27507,27512,27528,27533,27547,27550,27553,27556,27559,27588,27591,27596,27600,27603,27606,27612,27615,27618,27621,27683,27690,27695,27698,27716,27720,27723,27740,27743,27746,27760],[10,27072,27068],{"id":27073},"_3docker直通",[14,27075,27076],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[498,27078,27080],{"id":27079},"_31usb直通","3.1.USB直通",[14,27082,27083],{},[1838,27084],{"alt":32,"src":27085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[481,27087,27088],{},[484,27089,27090],{},"方法一(不是很推荐新手)：",[14,27092,27093],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[27,27095,27097],{"className":24163,"code":27096,"language":24165,"meta":32,"style":32},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[34,27098,27099,27107,27112],{"__ignoreMap":32},[37,27100,27101,27104],{"class":39,"line":40},[37,27102,27103],{"class":2320},"ls",[37,27105,27106],{"class":185}," \u002Fdev\n",[37,27108,27109],{"class":39,"line":47},[37,27110,27111],{"class":43},"#例如\n",[37,27113,27114,27117,27119],{"class":39,"line":104},[37,27115,27116],{"class":50},"--device",[37,27118,55],{"class":54},[37,27120,27121],{"class":185},"\u002Fdev\u002Ftty_USB0\n",[481,27123,27124],{"start":47},[484,27125,27126],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[27,27128,27130],{"className":24163,"code":27129,"language":24165,"meta":32,"style":32},"--privileged\n",[34,27131,27132],{"__ignoreMap":32},[37,27133,27134],{"class":39,"line":40},[37,27135,27129],{"class":2320},[14,27137,27138],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,27140,27141],{},[1838,27142],{"alt":32,"src":27143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[498,27145,27147],{"id":27146},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,27149,27150,27151,27154],{},"NVIDIA Container Toolkit使用户 ",[673,27152,27153],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,27156,27157],{},[1838,27158],{"alt":32,"src":27159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,27161,27162],{},[51,27163,27164],{"href":27164,"rel":27165},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24206],[22339,27167,27169],{"id":27168},"_321安装","3.2.1.安装",[14,27171,27172],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23251,27174,27176],{"id":27175},"_3211ubuntu","3.2.1.1.Ubuntu",[481,27178,27179],{},[484,27180,27181],{},"配置存储库 并更新",[27,27183,27185],{"className":24163,"code":27184,"language":24165,"meta":32,"style":32},"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",[34,27186,27187,27216,27236,27248,27260,27266],{"__ignoreMap":32},[37,27188,27189,27192,27195,27198,27200,27202,27205,27208,27211,27214],{"class":39,"line":40},[37,27190,27191],{"class":2320},"curl",[37,27193,27194],{"class":61}," -fsSL",[37,27196,27197],{"class":185}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[37,27199,25451],{"class":54},[37,27201,26415],{"class":2320},[37,27203,27204],{"class":185}," gpg",[37,27206,27207],{"class":61}," --dearmor",[37,27209,27210],{"class":61}," -o",[37,27212,27213],{"class":185}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[37,27215,25020],{"class":61},[37,27217,27218,27221,27223,27226,27229,27232,27234],{"class":39,"line":47},[37,27219,27220],{"class":50},"  && ",[37,27222,27191],{"class":2320},[37,27224,27225],{"class":61}," -s",[37,27227,27228],{"class":61}," -L",[37,27230,27231],{"class":185}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[37,27233,25451],{"class":54},[37,27235,25020],{"class":61},[37,27237,27238,27241,27244,27246],{"class":39,"line":104},[37,27239,27240],{"class":2320},"    sed",[37,27242,27243],{"class":185}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[37,27245,25451],{"class":54},[37,27247,25020],{"class":61},[37,27249,27250,27253,27255,27258],{"class":39,"line":113},[37,27251,27252],{"class":2320},"    sudo",[37,27254,26558],{"class":185},[37,27256,27257],{"class":185}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[37,27259,25020],{"class":61},[37,27261,27262,27264],{"class":39,"line":189},[37,27263,27220],{"class":50},[37,27265,26517],{"class":61},[37,27267,27268,27270,27272],{"class":39,"line":195},[37,27269,27252],{"class":2320},[37,27271,26418],{"class":185},[37,27273,26584],{"class":185},[481,27275,27276],{"start":47},[484,27277,27278],{},"安装nvidia-docker2",[27,27280,27282],{"className":24163,"code":27281,"language":24165,"meta":32,"style":32},"sudo apt-get install -y nvidia-docker2\n",[34,27283,27284],{"__ignoreMap":32},[37,27285,27286,27288,27290,27292,27294],{"class":39,"line":40},[37,27287,24918],{"class":2320},[37,27289,26418],{"class":185},[37,27291,24175],{"class":185},[37,27293,26742],{"class":61},[37,27295,27296],{"class":185}," nvidia-docker2\n",[481,27298,27299],{"start":104},[484,27300,27301],{},"使用nvidia-ctk命令配置container runtime",[27,27303,27305],{"className":24163,"code":27304,"language":24165,"meta":32,"style":32},"sudo nvidia-ctk runtime configure --runtime=docker\n",[34,27306,27307],{"__ignoreMap":32},[37,27308,27309,27311,27314,27317,27320],{"class":39,"line":40},[37,27310,24918],{"class":2320},[37,27312,27313],{"class":185}," nvidia-ctk",[37,27315,27316],{"class":185}," runtime",[37,27318,27319],{"class":185}," configure",[37,27321,27322],{"class":61}," --runtime=docker\n",[481,27324,27325],{"start":113},[484,27326,27327],{},"重启docker服务:",[27,27329,27331],{"className":24163,"code":27330,"language":24165,"meta":32,"style":32},"sudo systemctl restart docker\n",[34,27332,27333],{"__ignoreMap":32},[37,27334,27335,27337,27339,27342],{"class":39,"line":40},[37,27336,24918],{"class":2320},[37,27338,26855],{"class":185},[37,27340,27341],{"class":185}," restart",[37,27343,26834],{"class":185},[23251,27345,27347],{"id":27346},"_3212fedora","3.2.1.2.Fedora",[481,27349,27350],{},[484,27351,27352],{},"配置存储库",[27,27354,27356],{"className":24163,"code":27355,"language":24165,"meta":32,"style":32},"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",[34,27357,27358,27373],{"__ignoreMap":32},[37,27359,27360,27362,27364,27366,27369,27371],{"class":39,"line":40},[37,27361,27191],{"class":2320},[37,27363,27225],{"class":61},[37,27365,27228],{"class":61},[37,27367,27368],{"class":185}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[37,27370,25451],{"class":54},[37,27372,25020],{"class":61},[37,27374,27375,27377,27379],{"class":39,"line":47},[37,27376,24918],{"class":2320},[37,27378,26558],{"class":185},[37,27380,27381],{"class":185}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[481,27383,27384],{"start":47},[484,27385,27386],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[27,27388,27390],{"className":24163,"code":27389,"language":24165,"meta":32,"style":32},"# 如果是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",[34,27391,27392,27397,27411,27415,27420],{"__ignoreMap":32},[37,27393,27394],{"class":39,"line":40},[37,27395,27396],{"class":43},"# 如果是RHEL或者Rocky（DNF4）\n",[37,27398,27399,27401,27403,27405,27408],{"class":39,"line":47},[37,27400,24918],{"class":2320},[37,27402,26657],{"class":185},[37,27404,26756],{"class":185},[37,27406,27407],{"class":61}," --add-repo",[37,27409,27410],{"class":185}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[37,27412,27413],{"class":39,"line":104},[37,27414,2757],{"emptyLinePlaceholder":454},[37,27416,27417],{"class":39,"line":113},[37,27418,27419],{"class":43},"# 如果是Feodra41+（DNF5）\n",[37,27421,27422,27424,27426,27428,27430],{"class":39,"line":189},[37,27423,24918],{"class":2320},[37,27425,26657],{"class":185},[37,27427,26756],{"class":185},[37,27429,26759],{"class":185},[37,27431,27432],{"class":61}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[481,27434,27435],{"start":104},[484,27436,27437],{},"安装NVIDIA Container Toolki包",[27,27439,27441],{"className":24163,"code":27440,"language":24165,"meta":32,"style":32},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[34,27442,27443,27448,27461,27465,27470],{"__ignoreMap":32},[37,27444,27445],{"class":39,"line":40},[37,27446,27447],{"class":43},"# 如果是RHEL或者Rocky\n",[37,27449,27450,27452,27454,27456,27458],{"class":39,"line":47},[37,27451,24918],{"class":2320},[37,27453,26657],{"class":185},[37,27455,24175],{"class":185},[37,27457,26742],{"class":61},[37,27459,27460],{"class":185}," nvidia-container-toolkit\n",[37,27462,27463],{"class":39,"line":104},[37,27464,2757],{"emptyLinePlaceholder":454},[37,27466,27467],{"class":39,"line":113},[37,27468,27469],{"class":43},"# 如果是Fedora\n",[37,27471,27472,27474,27476,27478,27480],{"class":39,"line":189},[37,27473,24918],{"class":2320},[37,27475,26657],{"class":185},[37,27477,24175],{"class":185},[37,27479,26742],{"class":61},[37,27481,27460],{"class":185},[481,27483,27484],{"start":113},[484,27485,27486,27487,27489],{},"安装nvidia-docker2 ： 在Fedora上使用",[34,27488,26632],{},"进行安装",[27,27491,27493],{"className":24163,"code":27492,"language":24165,"meta":32,"style":32},"sudo dnf install -y nvidia-docker2\n",[34,27494,27495],{"__ignoreMap":32},[37,27496,27497,27499,27501,27503,27505],{"class":39,"line":40},[37,27498,24918],{"class":2320},[37,27500,26657],{"class":185},[37,27502,24175],{"class":185},[37,27504,26742],{"class":61},[37,27506,27296],{"class":185},[481,27508,27509],{"start":189},[484,27510,27511],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[27,27513,27514],{"className":24163,"code":27304,"language":24165,"meta":32,"style":32},[34,27515,27516],{"__ignoreMap":32},[37,27517,27518,27520,27522,27524,27526],{"class":39,"line":40},[37,27519,24918],{"class":2320},[37,27521,27313],{"class":185},[37,27523,27316],{"class":185},[37,27525,27319],{"class":185},[37,27527,27322],{"class":61},[481,27529,27530],{"start":195},[484,27531,27532],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[27,27534,27535],{"className":24163,"code":27330,"language":24165,"meta":32,"style":32},[34,27536,27537],{"__ignoreMap":32},[37,27538,27539,27541,27543,27545],{"class":39,"line":40},[37,27540,24918],{"class":2320},[37,27542,26855],{"class":185},[37,27544,27341],{"class":185},[37,27546,26834],{"class":185},[14,27548,27549],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27551,27552],{},"方法：",[14,27554,27555],{},"1️⃣nvidia-smi",[14,27557,27558],{},"2️⃣运行nvidia cuda 容器进行测试",[27,27560,27562],{"className":24163,"code":27561,"language":24165,"meta":32,"style":32},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[34,27563,27564],{"__ignoreMap":32},[37,27565,27566,27568,27570,27573,27576,27579,27582,27585],{"class":39,"line":40},[37,27567,24918],{"class":2320},[37,27569,26662],{"class":185},[37,27571,27572],{"class":185}," run",[37,27574,27575],{"class":61}," --rm",[37,27577,27578],{"class":61}," --gpus",[37,27580,27581],{"class":185}," all",[37,27583,27584],{"class":185}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[37,27586,27587],{"class":185}," nvidia-smi\n",[14,27589,27590],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27592,27593],{},[1838,27594],{"alt":32,"src":27595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[498,27597,27599],{"id":27598},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27601,27602],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27604,27605],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27607,27608],{},[51,27609,27610],{"href":27610,"rel":27611},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24206],[14,27613,27614],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27616,27617],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27619,27620],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[661,27622,27623,27639],{},[664,27624,27625],{},[667,27626,27627,27630,27633,27636],{},[670,27628,27629],{"align":24077},"镜像类型",[670,27631,27632],{"align":24077},"适用场景",[670,27634,27635],{"align":24077},"示例标签",[670,27637,27638],{"align":24077},"大小",[708,27640,27641,27655,27669],{},[667,27642,27643,27646,27649,27652],{},[713,27644,27645],{"align":24077},"base",[713,27647,27648],{"align":24077},"仅需 CUDA 运行时库",[713,27650,27651],{"align":24077},"12.4.0-base-ubuntu22.04",[713,27653,27654],{"align":24077},"~240MB",[667,27656,27657,27660,27663,27666],{},[713,27658,27659],{"align":24077},"runtime",[713,27661,27662],{"align":24077},"部署编译后的应用（含数学库）",[713,27664,27665],{"align":24077},"12.4.0-runtime-ubuntu22.04",[713,27667,27668],{"align":24077},"~2GB",[667,27670,27671,27674,27677,27680],{},[713,27672,27673],{"align":24077},"devel",[713,27675,27676],{"align":24077},"开发环境（含编译工具）",[713,27678,27679],{"align":24077},"12.4.0-devel-ubuntu22.04",[713,27681,27682],{"align":24077},"~3GB",[14,27684,27685,27686,27689],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[34,27687,27688],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27691,27692],{},[1838,27693],{"alt":32,"src":27694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27696,27697],{},"在dockerfile里就可以开头这么写：",[27,27699,27701],{"className":24163,"code":27700,"language":24165,"meta":32,"style":32},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[34,27702,27703,27708],{"__ignoreMap":32},[37,27704,27705],{"class":39,"line":40},[37,27706,27707],{"class":43},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[37,27709,27710,27713],{"class":39,"line":47},[37,27711,27712],{"class":2320},"FROM",[37,27714,27715],{"class":185}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[498,27717,27719],{"id":27718},"_34配置以太网","3.4.配置以太网",[14,27721,27722],{},"指定网络模式",[27,27724,27726],{"className":24163,"code":27725,"language":24165,"meta":32,"style":32},"--net=host \\\n",[34,27727,27728],{"__ignoreMap":32},[37,27729,27730,27733,27735,27738],{"class":39,"line":40},[37,27731,27732],{"class":50},"--net",[37,27734,55],{"class":54},[37,27736,27737],{"class":185},"host",[37,27739,25020],{"class":2320},[14,27741,27742],{},"启动参数里加上这行即可。具体在下方",[14,27744,27745],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1515,27747,27748,27751,27754,27757],{},[484,27749,27750],{},"--net=bridge:默认选项，表示连接到默认的网桥",[484,27752,27753],{},"--net=host:容器使用宿主机的网络",[484,27755,27756],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[484,27758,27759],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[446,27761,27762],{},"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":32,"searchDepth":47,"depth":47,"links":27764},[27765,27766,27767,27768],{"id":27079,"depth":104,"text":27080},{"id":27146,"depth":104,"text":27147},{"id":27598,"depth":104,"text":27599},{"id":27718,"depth":104,"text":27719},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27068,"description":27076},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27775,"title":27776,"body":27777,"description":27784,"extension":452,"meta":27790,"navigation":454,"path":27791,"seo":27792,"stem":27793,"__hash__":27794},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27778,"toc":27788},[27779,27782,27785],[10,27780,27776],{"id":27781},"_4dockerhub换源",[14,27783,27784],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27786,27787],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":32,"searchDepth":47,"depth":47,"links":27789},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27776,"description":27784},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27796,"title":27797,"body":27798,"description":32,"extension":452,"meta":28810,"navigation":454,"path":28811,"seo":28812,"stem":28813,"__hash__":28814},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27799,"toc":28805},[27800,27803,27807,27813,27817,27820,28160,28163,28166,28169,28174,28179,28182,28185,28188,28191,28210,28213,28224,28230,28412,28422,28438,28701,28703,28728,28743,28752,28802],[10,27801,27797],{"id":27802},"_5docker命令学习",[498,27804,27806],{"id":27805},"_51参考文档","5.1.参考文档",[14,27808,27809],{},[51,27810,27811],{"href":27811,"rel":27812},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24206],[498,27814,27816],{"id":27815},"_52常用命令","5.2.常用命令",[14,27818,27819],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[661,27821,27822,27835],{},[664,27823,27824],{},[667,27825,27826,27829,27832],{},[670,27827,27828],{"align":24077},"命令",[670,27830,27831],{"align":24077},"描述",[670,27833,27834],{"align":24077},"示例",[708,27836,27837,27848,27859,27870,27881,27892,27903,27914,27924,27935,27946,27957,27967,27978,27989,28000,28010,28020,28030,28040,28051,28062,28073,28084,28095,28106,28116,28127,28138,28149],{},[667,27838,27839,27842,27845],{},[713,27840,27841],{"align":24077},"docker run",[713,27843,27844],{"align":24077},"创建并启动一个新的容器。",[713,27846,27847],{"align":24077},"docker run -it ubuntu bash",[667,27849,27850,27853,27856],{},[713,27851,27852],{"align":24077},"docker build",[713,27854,27855],{"align":24077},"通过指定的 Dockerfile 创建一个新的镜像。",[713,27857,27858],{"align":24077},"docker build -t myimage .",[667,27860,27861,27864,27867],{},[713,27862,27863],{"align":24077},"docker pull",[713,27865,27866],{"align":24077},"从 Docker 仓库拉取镜像。",[713,27868,27869],{"align":24077},"docker pull ubuntu",[667,27871,27872,27875,27878],{},[713,27873,27874],{"align":24077},"docker push",[713,27876,27877],{"align":24077},"将本地镜像推送到 Docker 仓库。",[713,27879,27880],{"align":24077},"docker push myimage",[667,27882,27883,27886,27889],{},[713,27884,27885],{"align":24077},"docker stop",[713,27887,27888],{"align":24077},"停止一个正在运行的容器。",[713,27890,27891],{"align":24077},"docker stop container_id",[667,27893,27894,27897,27900],{},[713,27895,27896],{"align":24077},"docker start",[713,27898,27899],{"align":24077},"启动一个已经存在的容器。",[713,27901,27902],{"align":24077},"docker start container_id",[667,27904,27905,27908,27911],{},[713,27906,27907],{"align":24077},"docker restart",[713,27909,27910],{"align":24077},"重新启动容器。",[713,27912,27913],{"align":24077},"docker restart container_id",[667,27915,27916,27919,27922],{},[713,27917,27918],{"align":24077},"docker ps",[713,27920,27921],{"align":24077},"列出当前正在运行的容器。",[713,27923,27918],{"align":24077},[667,27925,27926,27929,27932],{},[713,27927,27928],{"align":24077},"docker rm",[713,27930,27931],{"align":24077},"删除一个或多个停止的容器。",[713,27933,27934],{"align":24077},"docker rm container_id",[667,27936,27937,27940,27943],{},[713,27938,27939],{"align":24077},"docker exec",[713,27941,27942],{"align":24077},"在一个正在运行的容器中执行命令。",[713,27944,27945],{"align":24077},"docker exec -it container_id bash",[667,27947,27948,27951,27954],{},[713,27949,27950],{"align":24077},"docker logs",[713,27952,27953],{"align":24077},"查看容器的日志输出。",[713,27955,27956],{"align":24077},"docker logs container_id",[667,27958,27959,27962,27965],{},[713,27960,27961],{"align":24077},"docker images",[713,27963,27964],{"align":24077},"列出本地所有镜像。",[713,27966,27961],{"align":24077},[667,27968,27969,27972,27975],{},[713,27970,27971],{"align":24077},"docker rmi",[713,27973,27974],{"align":24077},"删除一个或多个镜像。",[713,27976,27977],{"align":24077},"docker rmi myimage",[667,27979,27980,27983,27986],{},[713,27981,27982],{"align":24077},"docker network",[713,27984,27985],{"align":24077},"管理 Docker 网络。",[713,27987,27988],{"align":24077},"docker network ls",[667,27990,27991,27994,27997],{},[713,27992,27993],{"align":24077},"docker volume",[713,27995,27996],{"align":24077},"管理 Docker 数据卷。",[713,27998,27999],{"align":24077},"docker volume ls",[667,28001,28002,28005,28008],{},[713,28003,28004],{"align":24077},"docker-compose up",[713,28006,28007],{"align":24077},"启动 docker-compose.yml 中定义的所有服务。",[713,28009,28004],{"align":24077},[667,28011,28012,28015,28018],{},[713,28013,28014],{"align":24077},"docker-compose down",[713,28016,28017],{"align":24077},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[713,28019,28014],{"align":24077},[667,28021,28022,28025,28028],{},[713,28023,28024],{"align":24077},"docker info",[713,28026,28027],{"align":24077},"显示 Docker 系统的详细信息。",[713,28029,28024],{"align":24077},[667,28031,28032,28035,28038],{},[713,28033,28034],{"align":24077},"docker stats",[713,28036,28037],{"align":24077},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[713,28039,28034],{"align":24077},[667,28041,28042,28045,28048],{},[713,28043,28044],{"align":24077},"docker inspect",[713,28046,28047],{"align":24077},"查看容器或镜像的详细信息（JSON 格式）。",[713,28049,28050],{"align":24077},"docker inspect container_id",[667,28052,28053,28056,28059],{},[713,28054,28055],{"align":24077},"docker save",[713,28057,28058],{"align":24077},"将一个镜像保存为 tar 文件。",[713,28060,28061],{"align":24077},"docker save -o myimage.tar myimage",[667,28063,28064,28067,28070],{},[713,28065,28066],{"align":24077},"docker load",[713,28068,28069],{"align":24077},"从 tar 文件中加载镜像。",[713,28071,28072],{"align":24077},"docker load -i myimage.tar",[667,28074,28075,28078,28081],{},[713,28076,28077],{"align":24077},"docker tag",[713,28079,28080],{"align":24077},"为镜像添加标签（tag）。",[713,28082,28083],{"align":24077},"docker tag myimage myimage:v1",[667,28085,28086,28089,28092],{},[713,28087,28088],{"align":24077},"docker buildx build",[713,28090,28091],{"align":24077},"使用 Buildx 构建多架构镜像。",[713,28093,28094],{"align":24077},"docker buildx build -t myimage .",[667,28096,28097,28100,28103],{},[713,28098,28099],{"align":24077},"docker buildx create",[713,28101,28102],{"align":24077},"创建一个新的 Buildx 构建实例。",[713,28104,28105],{"align":24077},"docker buildx create –use",[667,28107,28108,28111,28114],{},[713,28109,28110],{"align":24077},"docker buildx ls",[713,28112,28113],{"align":24077},"列出所有可用的 Buildx 构建实例。",[713,28115,28110],{"align":24077},[667,28117,28118,28121,28124],{},[713,28119,28120],{"align":24077},"docker buildx use",[713,28122,28123],{"align":24077},"设置当前的 Buildx 构建实例。",[713,28125,28126],{"align":24077},"docker buildx use mybuilder",[667,28128,28129,28132,28135],{},[713,28130,28131],{"align":24077},"docker buildx bake",[713,28133,28134],{"align":24077},"使用 Bake 文件批量构建镜像。",[713,28136,28137],{"align":24077},"docker buildx bake -f bake.hcl",[667,28139,28140,28143,28146],{},[713,28141,28142],{"align":24077},"docker buildx build –push",[713,28144,28145],{"align":24077},"构建镜像并推送到镜像仓库。",[713,28147,28148],{"align":24077},"docker buildx build –push -t myimage .",[667,28150,28151,28154,28157],{},[713,28152,28153],{"align":24077},"docker buildx build –platform",[713,28155,28156],{"align":24077},"构建镜像并为多个平台生成支持。",[713,28158,28159],{"align":24077},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,28161,28162],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,28164,28165],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,28167,28168],{},"docker images 可以查看已经下载的镜像",[14,28170,28171],{},[1838,28172],{"alt":32,"src":28173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,28175,28176],{},[673,28177,28178],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,28180,28181],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,28183,28184],{},"docker container logs 查看容器日志",[14,28186,28187],{},"docker top 查看容器里的进程",[14,28189,28190],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[27,28192,28194],{"className":24163,"code":28193,"language":24165,"meta":32,"style":32},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[34,28195,28196],{"__ignoreMap":32},[37,28197,28198,28201,28204,28207],{"class":39,"line":40},[37,28199,28200],{"class":2320},"如：docker",[37,28202,28203],{"class":185}," cp",[37,28205,28206],{"class":185}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[37,28208,28209],{"class":185}," \u002Fmydata\u002Fnginx\n",[14,28211,28212],{},"docker run时在启动容器的时候会有几个常用的选项：",[1515,28214,28215,28218,28221],{},[484,28216,28217],{},"-d选项：表示后台运行",[484,28219,28220],{},"-P选项：随机端口映射",[484,28222,28223],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[498,28225,28227],{"id":28226},"_53run命令的参数非常重要",[673,28228,28229],{},"5.3.run命令的参数（非常重要）",[661,28231,28232,28245],{},[664,28233,28234],{},[667,28235,28236,28239,28242],{},[670,28237,28238],{"align":24077},"参数\u002F配置",[670,28240,28241],{"align":24077},"功能说明",[670,28243,28244],{"align":24077},"重要性与参考依据",[708,28246,28247,28258,28269,28280,28291,28302,28313,28324,28335,28346,28357,28368,28379,28390,28401],{},[667,28248,28249,28252,28255],{},[713,28250,28251],{"align":24077},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[713,28253,28254],{"align":24077},"指定容器名称，便于后续管理",[713,28256,28257],{"align":24077},"替代随机生成的容器名。",[667,28259,28260,28263,28266],{},[713,28261,28262],{"align":24077},"–gpus all",[713,28264,28265],{"align":24077},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[713,28267,28268],{"align":24077},"用于CUDA加速等GPU依赖任务。",[667,28270,28271,28274,28277],{},[713,28272,28273],{"align":24077},"-e NVIDIA_DRIVER_CAPABILITIES=all",[713,28275,28276],{"align":24077},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[713,28278,28279],{"align":24077},"确保容器内GPU功能完整67。",[667,28281,28282,28285,28288],{},[713,28283,28284],{"align":24077},"-dit",[713,28286,28287],{"align":24077},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[713,28289,28290],{"align":24077},"允许容器在后台运行并支持交互操作。",[667,28292,28293,28296,28299],{},[713,28294,28295],{"align":24077},"–privileged",[713,28297,28298],{"align":24077},"赋予容器完全主机权限（可访问设备、内核模块等）",[713,28300,28301],{"align":24077},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[667,28303,28304,28307,28310],{},[713,28305,28306],{"align":24077},"–net=host",[713,28308,28309],{"align":24077},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[713,28311,28312],{"align":24077},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[667,28314,28315,28318,28321],{},[713,28316,28317],{"align":24077},"–group-add audio–group-add video–group-add dialout",[713,28319,28320],{"align":24077},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[713,28322,28323],{"align":24077},"避免权限问题（如避免无法调用摄像头、麦克风）。",[667,28325,28326,28329,28332],{},[713,28327,28328],{"align":24077},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[713,28330,28331],{"align":24077},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[713,28333,28334],{"align":24077},"支持容器内运行图形界面应用（如OpenCV可视化）。",[667,28336,28337,28340,28343],{},[713,28338,28339],{"align":24077},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[713,28341,28342],{"align":24077},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[713,28344,28345],{"align":24077},"实现容器内图形显示。",[667,28347,28348,28351,28354],{},[713,28349,28350],{"align":24077},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[713,28352,28353],{"align":24077},"挂载X11认证文件（只读）",[713,28355,28356],{"align":24077},"确保容器有权连接宿主机显示服务。",[667,28358,28359,28362,28365],{},[713,28360,28361],{"align":24077},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[713,28363,28364],{"align":24077},"挂载Wayland显示协议相关目录",[713,28366,28367],{"align":24077},"支持Wayland协议的图形显示。",[667,28369,28370,28373,28376],{},[713,28371,28372],{"align":24077},"–ulimit nofile=1024:524288",[713,28374,28375],{"align":24077},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[713,28377,28378],{"align":24077},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[667,28380,28381,28384,28387],{},[713,28382,28383],{"align":24077},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[713,28385,28386],{"align":24077},"挂载宿主机用户目录到容器内同名路径",[713,28388,28389],{"align":24077},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[667,28391,28392,28395,28398],{},[713,28393,28394],{"align":24077},"-w \u002Fhome\u002Ftungchiahui",[713,28396,28397],{"align":24077},"设置容器启动后的默认工作目录",[713,28399,28400],{"align":24077},"直接进入项目路径，方便执行命令2324。",[667,28402,28403,28406,28409],{},[713,28404,28405],{"align":24077},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[713,28407,28408],{"align":24077},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[713,28410,28411],{"align":24077},"提供预配置的深度学习与机器人开发环境。",[14,28413,28414,28415,28417,28418,28421],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[34,28416,24918],{},"加不加",[34,28419,28420],{},"sudo -E","都无所谓。",[14,28423,28424,28425,28427,28428,28430,28431,28434,28435,28437],{},"用户已经被加到docker组了，不用",[34,28426,24918],{},"也行跑，其次，",[34,28429,24918],{},"运行的话，你的",[34,28432,28433],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[34,28436,28433],{},"更不可能变了。",[27,28439,28441],{"className":24163,"code":28440,"language":24165,"meta":32,"style":32},"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",[34,28442,28443,28456,28466,28476,28488,28495,28502,28509,28519,28528,28537,28551,28563,28575,28584,28594,28603,28618,28651,28678,28689,28696],{"__ignoreMap":32},[37,28444,28445,28447,28449,28451,28454],{"class":39,"line":40},[37,28446,24918],{"class":2320},[37,28448,26662],{"class":185},[37,28450,27572],{"class":185},[37,28452,28453],{"class":61}," --name=ros_opencv_cuda",[37,28455,25020],{"class":61},[37,28457,28458,28461,28464],{"class":39,"line":47},[37,28459,28460],{"class":50},"--gpus ",[37,28462,28463],{"class":185},"all",[37,28465,25020],{"class":61},[37,28467,28468,28471,28474],{"class":39,"line":104},[37,28469,28470],{"class":50},"-e ",[37,28472,28473],{"class":185},"NVIDIA_DRIVER_CAPABILITIES=all",[37,28475,25020],{"class":61},[37,28477,28478,28480,28483,28486],{"class":39,"line":113},[37,28479,28470],{"class":50},[37,28481,28482],{"class":185},"DISPLAY=",[37,28484,28485],{"class":50},"$DISPLAY ",[37,28487,26517],{"class":61},[37,28489,28490,28493],{"class":39,"line":189},[37,28491,28492],{"class":50},"-dit ",[37,28494,26517],{"class":61},[37,28496,28497,28500],{"class":39,"line":195},[37,28498,28499],{"class":50},"--privileged ",[37,28501,26517],{"class":61},[37,28503,28504,28507],{"class":39,"line":201},[37,28505,28506],{"class":50},"--net=host ",[37,28508,26517],{"class":61},[37,28510,28511,28514,28517],{"class":39,"line":207},[37,28512,28513],{"class":50},"--group-add ",[37,28515,28516],{"class":185},"audio",[37,28518,25020],{"class":61},[37,28520,28521,28523,28526],{"class":39,"line":213},[37,28522,28513],{"class":50},[37,28524,28525],{"class":185},"video",[37,28527,25020],{"class":61},[37,28529,28530,28532,28535],{"class":39,"line":218},[37,28531,28513],{"class":50},[37,28533,28534],{"class":185},"dialout",[37,28536,25020],{"class":61},[37,28538,28539,28541,28544,28546,28549],{"class":39,"line":227},[37,28540,28470],{"class":50},[37,28542,28543],{"class":185},"XAUTHORITY=",[37,28545,28433],{"class":50},[37,28547,28548],{"class":185},"\u002F.Xauthority",[37,28550,25020],{"class":61},[37,28552,28553,28555,28558,28561],{"class":39,"line":232},[37,28554,28470],{"class":50},[37,28556,28557],{"class":185},"WAYLAND_DISPLAY=",[37,28559,28560],{"class":50},"$WAYLAND_DISPLAY ",[37,28562,26517],{"class":61},[37,28564,28565,28567,28570,28573],{"class":39,"line":238},[37,28566,28470],{"class":50},[37,28568,28569],{"class":185},"XDG_RUNTIME_DIR=",[37,28571,28572],{"class":50},"$XDG_RUNTIME_DIR ",[37,28574,26517],{"class":61},[37,28576,28577,28579,28582],{"class":39,"line":244},[37,28578,28470],{"class":50},[37,28580,28581],{"class":185},"QT_QPA_PLATFORM=xcb",[37,28583,25020],{"class":61},[37,28585,28586,28589,28592],{"class":39,"line":250},[37,28587,28588],{"class":50},"-v ",[37,28590,28591],{"class":185},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[37,28593,25020],{"class":61},[37,28595,28596,28598,28601],{"class":39,"line":256},[37,28597,28588],{"class":50},[37,28599,28600],{"class":185},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[37,28602,25020],{"class":61},[37,28604,28605,28608,28611,28613,28616],{"class":39,"line":261},[37,28606,28607],{"class":50},"-v $HOME",[37,28609,28610],{"class":185},"\u002F.Xauthority:",[37,28612,28433],{"class":50},[37,28614,28615],{"class":185},"\u002F.Xauthority:ro",[37,28617,25020],{"class":61},[37,28619,28620,28622,28625,28627,28630,28633,28635,28638,28640,28642,28644,28646,28649],{"class":39,"line":267},[37,28621,28588],{"class":50},[37,28623,28624],{"class":185},"\u002Frun\u002Fuser\u002F",[37,28626,25441],{"class":50},[37,28628,28629],{"class":2320},"id",[37,28631,28632],{"class":61}," -u",[37,28634,138],{"class":50},[37,28636,28637],{"class":185},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[37,28639,25441],{"class":50},[37,28641,28629],{"class":2320},[37,28643,28632],{"class":61},[37,28645,138],{"class":50},[37,28647,28648],{"class":185},"\u002Fwayland-0",[37,28650,25020],{"class":61},[37,28652,28653,28655,28657,28659,28661,28663,28665,28668,28670,28672,28674,28676],{"class":39,"line":283},[37,28654,28588],{"class":50},[37,28656,28624],{"class":185},[37,28658,25441],{"class":50},[37,28660,28629],{"class":2320},[37,28662,28632],{"class":61},[37,28664,138],{"class":50},[37,28666,28667],{"class":185},":\u002Frun\u002Fuser\u002F",[37,28669,25441],{"class":50},[37,28671,28629],{"class":2320},[37,28673,28632],{"class":61},[37,28675,14055],{"class":50},[37,28677,26517],{"class":61},[37,28679,28680,28682,28684,28687],{"class":39,"line":288},[37,28681,28607],{"class":50},[37,28683,1368],{"class":185},[37,28685,28686],{"class":50},"$HOME ",[37,28688,26517],{"class":61},[37,28690,28691,28694],{"class":39,"line":294},[37,28692,28693],{"class":50},"-w $HOME ",[37,28695,26517],{"class":61},[37,28697,28698],{"class":39,"line":300},[37,28699,28700],{"class":50},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28702,9366],{},[481,28704,28705,28713,28716,28719],{},[484,28706,28707,14136,28709,28712],{},[34,28708,28473],{},[34,28710,28711],{},"--gpus all","没有英伟达显卡请注释。",[484,28714,28715],{},"--name后面请自己为容器起名。",[484,28717,28718],{},"最后一行仓库名称请你自己找对应的镜像填上。",[484,28720,28721,28722,28727],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23894,28723,28724],{},[673,28725,28726],{},"请不要加","。",[27,28729,28731],{"className":24163,"code":28730,"language":24165,"meta":32,"style":32},"--ulimit nofile=1024:524288 \\\n",[34,28732,28733],{"__ignoreMap":32},[37,28734,28735,28738,28741],{"class":39,"line":40},[37,28736,28737],{"class":2320},"--ulimit",[37,28739,28740],{"class":185}," nofile=1024:524288",[37,28742,25020],{"class":61},[14,28744,28745,28746,28751],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23894,28747,28748],{},[673,28749,28750],{},"不建议","**.**",[27,28753,28755],{"className":24163,"code":28754,"language":24165,"meta":32,"style":32},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[34,28756,28757,28784,28793],{"__ignoreMap":32},[37,28758,28759,28762,28765,28767,28769,28771,28773,28775,28777,28780,28782],{"class":39,"line":40},[37,28760,28761],{"class":2320},"--user",[37,28763,28764],{"class":50}," $(",[37,28766,28629],{"class":2320},[37,28768,28632],{"class":61},[37,28770,138],{"class":50},[37,28772,1368],{"class":185},[37,28774,25441],{"class":50},[37,28776,28629],{"class":2320},[37,28778,28779],{"class":61}," -g",[37,28781,14055],{"class":50},[37,28783,26517],{"class":61},[37,28785,28786,28788,28791],{"class":39,"line":47},[37,28787,28588],{"class":50},[37,28789,28790],{"class":185},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[37,28792,25020],{"class":61},[37,28794,28795,28797,28800],{"class":39,"line":104},[37,28796,28588],{"class":50},[37,28798,28799],{"class":185},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[37,28801,25020],{"class":61},[446,28803,28804],{},"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":32,"searchDepth":47,"depth":47,"links":28806},[28807,28808,28809],{"id":27805,"depth":104,"text":27806},{"id":27815,"depth":104,"text":27816},{"id":28226,"depth":104,"text":28229},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27797,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28816,"title":28817,"body":28818,"description":32,"extension":452,"meta":30441,"navigation":454,"path":30442,"seo":30443,"stem":30444,"__hash__":30445},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28819,"toc":30436},[28820,28823,28827,28830,29052,29056,29060,29063,29169,29174,29177,29182,29185,29190,29193,29198,29201,29213,29216,29221,29228,29256,29263,29339,29344,29347,29370,29372,29447,29452,29455,29459,29467,29472,29477,29481,29492,29498,29501,29504,29528,29531,29534,29562,29565,29568,30033,30036,30041,30046,30050,30073,30078,30082,30086,30089,30092,30095,30122,30125,30128,30146,30149,30152,30174,30182,30187,30192,30196,30199,30202,30205,30208,30253,30256,30274,30277,30282,30285,30306,30309,30365,30368,30373,30377,30380,30387,30390,30393,30398,30401,30417,30420,30433],[10,28821,28817],{"id":28822},"_6手动创建docker镜像",[498,28824,28826],{"id":28825},"_61dockerfile","6.1.DockerFile",[14,28828,28829],{},"常用命令：",[661,28831,28832,28843],{},[664,28833,28834],{},[667,28835,28836,28839,28841],{},[670,28837,28838],{"align":24077},"指令",[670,28840,26211],{"align":24077},[670,28842,27834],{"align":24077},[708,28844,28845,28855,28871,28882,28893,28904,28915,28926,28937,28951,28965,28976,28990,29001,29012,29026,29041],{},[667,28846,28847,28849,28852],{},[713,28848,27712],{"align":24077},[713,28850,28851],{"align":24077},"指定基础镜像，是 Dockerfile 的起点",[713,28853,28854],{"align":24077},"FROM ubuntu:22.04",[667,28856,28857,28860,28863],{},[713,28858,28859],{"align":24077},"LABEL",[713,28861,28862],{"align":24077},"添加元数据（如作者、版本等）",[713,28864,28865,28866,28870],{"align":24077},"LABEL maintainer=”",[51,28867,28869],{"href":28868},"mailto:you@example.com","you@example.com","”",[667,28872,28873,28876,28879],{},[713,28874,28875],{"align":24077},"ENV",[713,28877,28878],{"align":24077},"设置环境变量",[713,28880,28881],{"align":24077},"ENV PORT=8080",[667,28883,28884,28887,28890],{},[713,28885,28886],{"align":24077},"ARG",[713,28888,28889],{"align":24077},"构建参数，只在构建期间可用",[713,28891,28892],{"align":24077},"ARG VERSION=1.0",[667,28894,28895,28898,28901],{},[713,28896,28897],{"align":24077},"RUN",[713,28899,28900],{"align":24077},"构建镜像时运行命令",[713,28902,28903],{"align":24077},"RUN apt-get update && apt-get install -y curl",[667,28905,28906,28909,28912],{},[713,28907,28908],{"align":24077},"COPY",[713,28910,28911],{"align":24077},"复制文件到镜像中",[713,28913,28914],{"align":24077},"COPY . \u002Fapp",[667,28916,28917,28920,28923],{},[713,28918,28919],{"align":24077},"ADD",[713,28921,28922],{"align":24077},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[713,28924,28925],{"align":24077},"ADD archive.tar.gz \u002Fdata\u002F",[667,28927,28928,28931,28934],{},[713,28929,28930],{"align":24077},"WORKDIR",[713,28932,28933],{"align":24077},"设置工作目录",[713,28935,28936],{"align":24077},"WORKDIR \u002Fopt",[667,28938,28939,28942,28945],{},[713,28940,28941],{"align":24077},"CMD",[713,28943,28944],{"align":24077},"设置容器启动时默认命令（可被 docker run 覆盖）",[713,28946,28947,28948],{"align":24077},"CMD ",[37,28949,28950],{},"“node”, “index.js”",[667,28952,28953,28956,28959],{},[713,28954,28955],{"align":24077},"ENTRYPOINT",[713,28957,28958],{"align":24077},"设置容器启动时固定命令（通常用于 CLI 工具等）",[713,28960,28961,28962],{"align":24077},"ENTRYPOINT ",[37,28963,28964],{},"“python3”",[667,28966,28967,28970,28973],{},[713,28968,28969],{"align":24077},"EXPOSE",[713,28971,28972],{"align":24077},"声明镜像内服务监听的端口（不会自动映射）",[713,28974,28975],{"align":24077},"EXPOSE 80",[667,28977,28978,28981,28984],{},[713,28979,28980],{"align":24077},"VOLUME",[713,28982,28983],{"align":24077},"声明数据卷挂载点",[713,28985,28986,28987],{"align":24077},"VOLUME ",[37,28988,28989],{},"“\u002Fdata”",[667,28991,28992,28995,28998],{},[713,28993,28994],{"align":24077},"USER",[713,28996,28997],{"align":24077},"设置后续命令执行的用户",[713,28999,29000],{"align":24077},"USER appuser",[667,29002,29003,29006,29009],{},[713,29004,29005],{"align":24077},"ONBUILD",[713,29007,29008],{"align":24077},"当镜像作为其他镜像基础镜像时触发的构建指令",[713,29010,29011],{"align":24077},"ONBUILD COPY . \u002Fsrc",[667,29013,29014,29017,29020],{},[713,29015,29016],{"align":24077},"SHELL",[713,29018,29019],{"align":24077},"更改默认 shell，比如将 sh -c 改为 bash -c",[713,29021,29022,29023],{"align":24077},"SHELL ",[37,29024,29025],{},"“\u002Fbin\u002Fbash”, “-c”",[667,29027,29028,29031,29034],{},[713,29029,29030],{"align":24077},"HEALTHCHECK",[713,29032,29033],{"align":24077},"定义容器运行时的健康检查命令",[713,29035,29036,29037],{"align":24077},"`HEALTHCHECK CMD curl –fail ",[51,29038,29039],{"href":29039,"rel":29040},"http:\u002F\u002Flocalhost:8080",[24206],[667,29042,29043,29046,29049],{},[713,29044,29045],{"align":24077},"STOPSIGNAL",[713,29047,29048],{"align":24077},"容器停止时发送的信号",[713,29050,29051],{"align":24077},"STOPSIGNAL SIGKILL",[498,29053,29055],{"id":29054},"_62自己创建容器","6.2.自己创建容器",[22339,29057,29059],{"id":29058},"_621手动创建","6.2.1.手动创建",[14,29061,29062],{},"在x86电脑上编译x86的：",[27,29064,29066],{"className":24163,"code":29065,"language":24165,"meta":32,"style":32},"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",[34,29067,29068,29084,29088,29101,29105,29118,29122,29135,29139,29152,29156],{"__ignoreMap":32},[37,29069,29070,29072,29075,29078,29081],{"class":39,"line":40},[37,29071,26895],{"class":2320},[37,29073,29074],{"class":185}," build",[37,29076,29077],{"class":61}," -t",[37,29079,29080],{"class":185}," ros-melodic-cuda118-cudnn8-bionic:latest",[37,29082,29083],{"class":185}," .\n",[37,29085,29086],{"class":39,"line":47},[37,29087,2757],{"emptyLinePlaceholder":454},[37,29089,29090,29092,29094,29096,29099],{"class":39,"line":104},[37,29091,26895],{"class":2320},[37,29093,29074],{"class":185},[37,29095,29077],{"class":61},[37,29097,29098],{"class":185}," ros-noetic-focal:latest",[37,29100,29083],{"class":185},[37,29102,29103],{"class":39,"line":113},[37,29104,2757],{"emptyLinePlaceholder":454},[37,29106,29107,29109,29111,29113,29116],{"class":39,"line":189},[37,29108,26895],{"class":2320},[37,29110,29074],{"class":185},[37,29112,29077],{"class":61},[37,29114,29115],{"class":185}," ros-humble-jammy:latest",[37,29117,29083],{"class":185},[37,29119,29120],{"class":39,"line":195},[37,29121,2757],{"emptyLinePlaceholder":454},[37,29123,29124,29126,29128,29130,29133],{"class":39,"line":201},[37,29125,26895],{"class":2320},[37,29127,29074],{"class":185},[37,29129,29077],{"class":61},[37,29131,29132],{"class":185}," ros-jazzy-noble:latest",[37,29134,29083],{"class":185},[37,29136,29137],{"class":39,"line":207},[37,29138,2757],{"emptyLinePlaceholder":454},[37,29140,29141,29143,29145,29147,29150],{"class":39,"line":213},[37,29142,26895],{"class":2320},[37,29144,29074],{"class":185},[37,29146,29077],{"class":61},[37,29148,29149],{"class":185}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[37,29151,29083],{"class":185},[37,29153,29154],{"class":39,"line":218},[37,29155,2757],{"emptyLinePlaceholder":454},[37,29157,29158,29160,29162,29164,29167],{"class":39,"line":227},[37,29159,26895],{"class":2320},[37,29161,29074],{"class":185},[37,29163,29077],{"class":61},[37,29165,29166],{"class":185}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[37,29168,29083],{"class":185},[14,29170,29171],{},[1838,29172],{"alt":32,"src":29173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,29175,29176],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,29178,29179],{},[1838,29180],{"alt":32,"src":29181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,29183,29184],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[481,29186,29187],{},[484,29188,29189],{},"创建 Docker Hub 账户",[14,29191,29192],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[481,29194,29195],{"start":47},[484,29196,29197],{},"登录 Docker Hub",[14,29199,29200],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[27,29202,29204],{"className":24163,"code":29203,"language":24165,"meta":32,"style":32},"docker login\n",[34,29205,29206],{"__ignoreMap":32},[37,29207,29208,29210],{"class":39,"line":40},[37,29209,26895],{"class":2320},[37,29211,29212],{"class":185}," login\n",[14,29214,29215],{},"输入你的 Docker Hub 用户名和密码进行验证。",[481,29217,29218],{},[484,29219,29220],{},"为你的镜像打标签",[14,29222,29223,29224,29227],{},"Docker Hub 使用 ",[34,29225,29226],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[27,29229,29231],{"className":24163,"code":29230,"language":24165,"meta":32,"style":32},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[34,29232,29233],{"__ignoreMap":32},[37,29234,29235,29237,29240,29242,29245,29248,29251,29253],{"class":39,"line":40},[37,29236,26895],{"class":2320},[37,29238,29239],{"class":185}," tag",[37,29241,29132],{"class":185},[37,29243,29244],{"class":54}," \u003C",[37,29246,29247],{"class":185},"你的用户",[37,29249,29250],{"class":50},"名",[37,29252,1468],{"class":54},[37,29254,29255],{"class":185},"\u002Fros-jazzy-noble:latest\n",[14,29257,29258,29259,29262],{},"例如，如果你的 Docker Hub 用户名是 ",[34,29260,29261],{},"tungchiahui","，你应该执行：",[27,29264,29266],{"className":24163,"code":29265,"language":24165,"meta":32,"style":32},"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",[34,29267,29268,29279,29283,29294,29298,29309,29313,29324,29328],{"__ignoreMap":32},[37,29269,29270,29272,29274,29276],{"class":39,"line":40},[37,29271,26895],{"class":2320},[37,29273,29239],{"class":185},[37,29275,29098],{"class":185},[37,29277,29278],{"class":185}," tungchiahui\u002Fros-noetic-focal:latest\n",[37,29280,29281],{"class":39,"line":47},[37,29282,2757],{"emptyLinePlaceholder":454},[37,29284,29285,29287,29289,29291],{"class":39,"line":104},[37,29286,26895],{"class":2320},[37,29288,29239],{"class":185},[37,29290,29115],{"class":185},[37,29292,29293],{"class":185}," tungchiahui\u002Fros-humble-jammy:latest\n",[37,29295,29296],{"class":39,"line":113},[37,29297,2757],{"emptyLinePlaceholder":454},[37,29299,29300,29302,29304,29306],{"class":39,"line":189},[37,29301,26895],{"class":2320},[37,29303,29239],{"class":185},[37,29305,29132],{"class":185},[37,29307,29308],{"class":185}," tungchiahui\u002Fros-jazzy-noble:latest\n",[37,29310,29311],{"class":39,"line":195},[37,29312,2757],{"emptyLinePlaceholder":454},[37,29314,29315,29317,29319,29321],{"class":39,"line":201},[37,29316,26895],{"class":2320},[37,29318,29239],{"class":185},[37,29320,29149],{"class":185},[37,29322,29323],{"class":185}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[37,29325,29326],{"class":39,"line":207},[37,29327,2757],{"emptyLinePlaceholder":454},[37,29329,29330,29332,29334,29336],{"class":39,"line":213},[37,29331,26895],{"class":2320},[37,29333,29239],{"class":185},[37,29335,29166],{"class":185},[37,29337,29338],{"class":185}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[481,29340,29341],{"start":47},[484,29342,29343],{},"推送镜像到 Docker Hub",[14,29345,29346],{},"使用以下命令将镜像推送到 Docker Hub：",[27,29348,29350],{"className":24163,"code":29349,"language":24165,"meta":32,"style":32},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[34,29351,29352],{"__ignoreMap":32},[37,29353,29354,29356,29359,29361,29363,29365,29367],{"class":39,"line":40},[37,29355,26895],{"class":2320},[37,29357,29358],{"class":185}," push",[37,29360,29244],{"class":54},[37,29362,29247],{"class":185},[37,29364,29250],{"class":50},[37,29366,1468],{"class":54},[37,29368,29369],{"class":185},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29371,14974],{},[27,29373,29375],{"className":24163,"code":29374,"language":24165,"meta":32,"style":32},"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",[34,29376,29377,29385,29389,29397,29401,29409,29413,29422,29426,29434,29438],{"__ignoreMap":32},[37,29378,29379,29381,29383],{"class":39,"line":40},[37,29380,26895],{"class":2320},[37,29382,29358],{"class":185},[37,29384,29278],{"class":185},[37,29386,29387],{"class":39,"line":47},[37,29388,2757],{"emptyLinePlaceholder":454},[37,29390,29391,29393,29395],{"class":39,"line":104},[37,29392,26895],{"class":2320},[37,29394,29358],{"class":185},[37,29396,29293],{"class":185},[37,29398,29399],{"class":39,"line":113},[37,29400,2757],{"emptyLinePlaceholder":454},[37,29402,29403,29405,29407],{"class":39,"line":189},[37,29404,26895],{"class":2320},[37,29406,29358],{"class":185},[37,29408,29308],{"class":185},[37,29410,29411],{"class":39,"line":195},[37,29412,2757],{"emptyLinePlaceholder":454},[37,29414,29415,29417,29419],{"class":39,"line":201},[37,29416,26895],{"class":2320},[37,29418,29358],{"class":185},[37,29420,29421],{"class":185}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[37,29423,29424],{"class":39,"line":207},[37,29425,2757],{"emptyLinePlaceholder":454},[37,29427,29428,29430,29432],{"class":39,"line":213},[37,29429,26895],{"class":2320},[37,29431,29358],{"class":185},[37,29433,29338],{"class":185},[37,29435,29436],{"class":39,"line":218},[37,29437,2757],{"emptyLinePlaceholder":454},[37,29439,29440,29442,29444],{"class":39,"line":227},[37,29441,26895],{"class":2320},[37,29443,29358],{"class":185},[37,29445,29446],{"class":185}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[481,29448,29449],{"start":104},[484,29450,29451],{},"验证推送成功",[14,29453,29454],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29456,29457],{},[673,29458,4134],{},[1515,29460,29461,29464],{},[484,29462,29463],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[484,29465,29466],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29468,29469],{},[1838,29470],{"alt":32,"src":29471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29473,29474],{},[1838,29475],{"alt":32,"src":29476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22339,29478,29480],{"id":29479},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29482,29483,29484,29487,29488,29491],{},"如果您想在 ",[673,29485,29486],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[673,29489,29490],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29493,29494,29495],{},"1. ",[673,29496,29497],{},"启用 Docker 跨平台构建",[14,29499,29500],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29502,29503],{},"第一步：启用 buildx（只需执行一次）",[27,29505,29507],{"className":24163,"code":29506,"language":24165,"meta":32,"style":32},"docker buildx create --name multiarch_builder --use\n",[34,29508,29509],{"__ignoreMap":32},[37,29510,29511,29513,29516,29519,29522,29525],{"class":39,"line":40},[37,29512,26895],{"class":2320},[37,29514,29515],{"class":185}," buildx",[37,29517,29518],{"class":185}," create",[37,29520,29521],{"class":61}," --name",[37,29523,29524],{"class":185}," multiarch_builder",[37,29526,29527],{"class":61}," --use\n",[14,29529,29530],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29532,29533],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[27,29535,29537],{"className":24163,"code":29536,"language":24165,"meta":32,"style":32},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[34,29538,29539],{"__ignoreMap":32},[37,29540,29541,29543,29545,29547,29550,29553,29556,29559],{"class":39,"line":40},[37,29542,26895],{"class":2320},[37,29544,27572],{"class":185},[37,29546,27575],{"class":61},[37,29548,29549],{"class":61}," --privileged",[37,29551,29552],{"class":185}," multiarch\u002Fqemu-user-static",[37,29554,29555],{"class":61}," --reset",[37,29557,29558],{"class":61}," -p",[37,29560,29561],{"class":185}," yes\n",[14,29563,29564],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29566,29567],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[27,29569,29571],{"className":24163,"code":29570,"language":24165,"meta":32,"style":32},"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",[34,29572,29573,29615,29619,29624,29634,29644,29653,29659,29663,29667,29677,29685,29694,29700,29704,29708,29718,29726,29735,29741,29745,29749,29759,29767,29776,29782,29786,29790,29800,29808,29817,29823,29827,29831,29841,29849,29858,29864,29868,29872,29882,29890,29899,29905,29909,29913,29923,29931,29940,29946,29950,29954,29964,29972,29981,29987,29991,29995,30006,30014,30023,30029],{"__ignoreMap":32},[37,29574,29575,29577,29579,29581,29584,29587,29589,29591,29594,29596,29598,29600,29602,29605,29608,29610,29613],{"class":39,"line":40},[37,29576,26895],{"class":2320},[37,29578,29515],{"class":185},[37,29580,29074],{"class":185},[37,29582,29583],{"class":61}," --platform",[37,29585,29586],{"class":185}," linux\u002Famd64,linux\u002Farm64",[37,29588,29077],{"class":61},[37,29590,29244],{"class":54},[37,29592,29593],{"class":185},"你的镜像",[37,29595,29250],{"class":50},[37,29597,1468],{"class":54},[37,29599,1368],{"class":185},[37,29601,1418],{"class":54},[37,29603,29604],{"class":185},"标",[37,29606,29607],{"class":50},"签",[37,29609,1468],{"class":54},[37,29611,29612],{"class":61}," --push",[37,29614,29083],{"class":185},[37,29616,29617],{"class":39,"line":47},[37,29618,2757],{"emptyLinePlaceholder":454},[37,29620,29621],{"class":39,"line":104},[37,29622,29623],{"class":43},"# 例子：\n",[37,29625,29626,29628,29630,29632],{"class":39,"line":113},[37,29627,26895],{"class":2320},[37,29629,29515],{"class":185},[37,29631,29074],{"class":185},[37,29633,25020],{"class":61},[37,29635,29636,29639,29642],{"class":39,"line":189},[37,29637,29638],{"class":50},"--platform ",[37,29640,29641],{"class":185},"linux\u002Famd64,linux\u002Farm64",[37,29643,25020],{"class":61},[37,29645,29646,29648,29651],{"class":39,"line":195},[37,29647,29077],{"class":61},[37,29649,29650],{"class":185}," tungchiahui\u002Fros:noetic-focal",[37,29652,25020],{"class":61},[37,29654,29655,29657],{"class":39,"line":201},[37,29656,29612],{"class":61},[37,29658,25020],{"class":61},[37,29660,29661],{"class":39,"line":207},[37,29662,29083],{"class":185},[37,29664,29665],{"class":39,"line":213},[37,29666,2757],{"emptyLinePlaceholder":454},[37,29668,29669,29671,29673,29675],{"class":39,"line":218},[37,29670,26895],{"class":2320},[37,29672,29515],{"class":185},[37,29674,29074],{"class":185},[37,29676,25020],{"class":61},[37,29678,29679,29681,29683],{"class":39,"line":227},[37,29680,29638],{"class":50},[37,29682,29641],{"class":185},[37,29684,25020],{"class":61},[37,29686,29687,29689,29692],{"class":39,"line":232},[37,29688,29077],{"class":61},[37,29690,29691],{"class":185}," tungchiahui\u002Fros:humble-jammy",[37,29693,25020],{"class":61},[37,29695,29696,29698],{"class":39,"line":238},[37,29697,29612],{"class":61},[37,29699,25020],{"class":61},[37,29701,29702],{"class":39,"line":244},[37,29703,29083],{"class":185},[37,29705,29706],{"class":39,"line":250},[37,29707,2757],{"emptyLinePlaceholder":454},[37,29709,29710,29712,29714,29716],{"class":39,"line":256},[37,29711,26895],{"class":2320},[37,29713,29515],{"class":185},[37,29715,29074],{"class":185},[37,29717,25020],{"class":61},[37,29719,29720,29722,29724],{"class":39,"line":261},[37,29721,29638],{"class":50},[37,29723,29641],{"class":185},[37,29725,25020],{"class":61},[37,29727,29728,29730,29733],{"class":39,"line":267},[37,29729,29077],{"class":61},[37,29731,29732],{"class":185}," tungchiahui\u002Fros:jazzy-noble",[37,29734,25020],{"class":61},[37,29736,29737,29739],{"class":39,"line":283},[37,29738,29612],{"class":61},[37,29740,25020],{"class":61},[37,29742,29743],{"class":39,"line":288},[37,29744,29083],{"class":185},[37,29746,29747],{"class":39,"line":294},[37,29748,2757],{"emptyLinePlaceholder":454},[37,29750,29751,29753,29755,29757],{"class":39,"line":300},[37,29752,26662],{"class":2320},[37,29754,29515],{"class":185},[37,29756,29074],{"class":185},[37,29758,25020],{"class":61},[37,29760,29761,29763,29765],{"class":39,"line":306},[37,29762,29638],{"class":50},[37,29764,29641],{"class":185},[37,29766,25020],{"class":61},[37,29768,29769,29771,29774],{"class":39,"line":312},[37,29770,29077],{"class":61},[37,29772,29773],{"class":185}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[37,29775,25020],{"class":61},[37,29777,29778,29780],{"class":39,"line":317},[37,29779,29612],{"class":61},[37,29781,25020],{"class":61},[37,29783,29784],{"class":39,"line":323},[37,29785,29083],{"class":185},[37,29787,29788],{"class":39,"line":337},[37,29789,2757],{"emptyLinePlaceholder":454},[37,29791,29792,29794,29796,29798],{"class":39,"line":342},[37,29793,26895],{"class":2320},[37,29795,29515],{"class":185},[37,29797,29074],{"class":185},[37,29799,25020],{"class":61},[37,29801,29802,29804,29806],{"class":39,"line":347},[37,29803,29638],{"class":50},[37,29805,29641],{"class":185},[37,29807,25020],{"class":61},[37,29809,29810,29812,29815],{"class":39,"line":352},[37,29811,29077],{"class":61},[37,29813,29814],{"class":185}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[37,29816,25020],{"class":61},[37,29818,29819,29821],{"class":39,"line":357},[37,29820,29612],{"class":61},[37,29822,25020],{"class":61},[37,29824,29825],{"class":39,"line":362},[37,29826,29083],{"class":185},[37,29828,29829],{"class":39,"line":367},[37,29830,2757],{"emptyLinePlaceholder":454},[37,29832,29833,29835,29837,29839],{"class":39,"line":373},[37,29834,26662],{"class":2320},[37,29836,29515],{"class":185},[37,29838,29074],{"class":185},[37,29840,25020],{"class":61},[37,29842,29843,29845,29847],{"class":39,"line":392},[37,29844,29638],{"class":50},[37,29846,29641],{"class":185},[37,29848,25020],{"class":61},[37,29850,29851,29853,29856],{"class":39,"line":398},[37,29852,29077],{"class":61},[37,29854,29855],{"class":185}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[37,29857,25020],{"class":61},[37,29859,29860,29862],{"class":39,"line":409},[37,29861,29612],{"class":61},[37,29863,25020],{"class":61},[37,29865,29866],{"class":39,"line":415},[37,29867,29083],{"class":185},[37,29869,29870],{"class":39,"line":420},[37,29871,2757],{"emptyLinePlaceholder":454},[37,29873,29874,29876,29878,29880],{"class":39,"line":425},[37,29875,26895],{"class":2320},[37,29877,29515],{"class":185},[37,29879,29074],{"class":185},[37,29881,25020],{"class":61},[37,29883,29884,29886,29888],{"class":39,"line":431},[37,29885,29638],{"class":50},[37,29887,29641],{"class":185},[37,29889,25020],{"class":61},[37,29891,29892,29894,29897],{"class":39,"line":436},[37,29893,29077],{"class":61},[37,29895,29896],{"class":185}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[37,29898,25020],{"class":61},[37,29900,29901,29903],{"class":39,"line":442},[37,29902,29612],{"class":61},[37,29904,25020],{"class":61},[37,29906,29907],{"class":39,"line":8374},[37,29908,29083],{"class":185},[37,29910,29911],{"class":39,"line":8386},[37,29912,2757],{"emptyLinePlaceholder":454},[37,29914,29915,29917,29919,29921],{"class":39,"line":8398},[37,29916,26895],{"class":2320},[37,29918,29515],{"class":185},[37,29920,29074],{"class":185},[37,29922,25020],{"class":61},[37,29924,29925,29927,29929],{"class":39,"line":10057},[37,29926,29638],{"class":50},[37,29928,29641],{"class":185},[37,29930,25020],{"class":61},[37,29932,29933,29935,29938],{"class":39,"line":10082},[37,29934,29077],{"class":61},[37,29936,29937],{"class":185}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[37,29939,25020],{"class":61},[37,29941,29942,29944],{"class":39,"line":10105},[37,29943,29612],{"class":61},[37,29945,25020],{"class":61},[37,29947,29948],{"class":39,"line":10129},[37,29949,29083],{"class":185},[37,29951,29952],{"class":39,"line":10134},[37,29953,2757],{"emptyLinePlaceholder":454},[37,29955,29956,29958,29960,29962],{"class":39,"line":10139},[37,29957,26662],{"class":2320},[37,29959,29515],{"class":185},[37,29961,29074],{"class":185},[37,29963,25020],{"class":61},[37,29965,29966,29968,29970],{"class":39,"line":10144},[37,29967,29638],{"class":50},[37,29969,29641],{"class":185},[37,29971,25020],{"class":61},[37,29973,29974,29976,29979],{"class":39,"line":10153},[37,29975,29077],{"class":61},[37,29977,29978],{"class":185}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[37,29980,25020],{"class":61},[37,29982,29983,29985],{"class":39,"line":10158},[37,29984,29612],{"class":61},[37,29986,25020],{"class":61},[37,29988,29989],{"class":39,"line":10164},[37,29990,29083],{"class":185},[37,29992,29993],{"class":39,"line":10185},[37,29994,2757],{"emptyLinePlaceholder":454},[37,29996,29997,30000,30002,30004],{"class":39,"line":10191},[37,29998,29999],{"class":2320},"  docker",[37,30001,29515],{"class":185},[37,30003,29074],{"class":185},[37,30005,25020],{"class":61},[37,30007,30008,30010,30012],{"class":39,"line":10205},[37,30009,29638],{"class":50},[37,30011,29641],{"class":185},[37,30013,25020],{"class":61},[37,30015,30016,30018,30021],{"class":39,"line":10211},[37,30017,29077],{"class":61},[37,30019,30020],{"class":185}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[37,30022,25020],{"class":61},[37,30024,30025,30027],{"class":39,"line":10238},[37,30026,29612],{"class":61},[37,30028,25020],{"class":61},[37,30030,30031],{"class":39,"line":10247},[37,30032,29083],{"class":185},[14,30034,30035],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,30037,30038],{},[1838,30039],{"alt":32,"src":30040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,30042,30043],{},[1838,30044],{"alt":32,"src":30045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22339,30047,30049],{"id":30048},"_623清除构建缓存","6.2.3.清除构建缓存",[27,30051,30053],{"className":24163,"code":30052,"language":24165,"meta":32,"style":32},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[34,30054,30055,30060],{"__ignoreMap":32},[37,30056,30057],{"class":39,"line":40},[37,30058,30059],{"class":43},"# 清理BuildKit构建缓存\n",[37,30061,30062,30064,30067,30070],{"class":39,"line":47},[37,30063,26895],{"class":2320},[37,30065,30066],{"class":185}," builder",[37,30068,30069],{"class":185}," prune",[37,30071,30072],{"class":61}," -f\n",[14,30074,30075],{},[1838,30076],{"alt":32,"src":30077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[498,30079,30081],{"id":30080},"_63补充","6.3.补充",[22339,30083,30085],{"id":30084},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,30087,30088],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,30090,30091],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,30093,30094],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[27,30096,30098],{"className":24163,"code":30097,"language":24165,"meta":32,"style":32},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[34,30099,30100,30107],{"__ignoreMap":32},[37,30101,30102,30104],{"class":39,"line":40},[37,30103,27712],{"class":2320},[37,30105,30106],{"class":185}," nginx\n",[37,30108,30109,30111,30114,30117,30119],{"class":39,"line":47},[37,30110,28897],{"class":2320},[37,30112,30113],{"class":185}," echo",[37,30115,30116],{"class":185}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[37,30118,26564],{"class":54},[37,30120,30121],{"class":185}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,30123,30124],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,30126,30127],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[27,30129,30131],{"className":24163,"code":30130,"language":24165,"meta":32,"style":32},"docker build -t nginx:tuling .\n",[34,30132,30133],{"__ignoreMap":32},[37,30134,30135,30137,30139,30141,30144],{"class":39,"line":40},[37,30136,26895],{"class":2320},[37,30138,29074],{"class":185},[37,30140,29077],{"class":61},[37,30142,30143],{"class":185}," nginx:tuling",[37,30145,29083],{"class":185},[14,30147,30148],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,30150,30151],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[27,30153,30155],{"className":24163,"code":30154,"language":24165,"meta":32,"style":32},"docker run -d -p 92:80 nginx:tuling\n",[34,30156,30157],{"__ignoreMap":32},[37,30158,30159,30161,30163,30166,30168,30171],{"class":39,"line":40},[37,30160,26895],{"class":2320},[37,30162,27572],{"class":185},[37,30164,30165],{"class":61}," -d",[37,30167,29558],{"class":61},[37,30169,30170],{"class":185}," 92:80",[37,30172,30173],{"class":185}," nginx:tuling\n",[14,30175,30176,30177],{},"4、访问 ",[51,30178,30181],{"href":30179,"rel":30180},"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",[24206],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,30183,30184],{},[1838,30185],{"alt":32,"src":30186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,30188,30189],{},[1838,30190],{"alt":32,"src":30191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22339,30193,30195],{"id":30194},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,30197,30198],{},"只需要知道大体流程即可",[14,30200,30201],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,30203,30204],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,30206,30207],{},"2、在Dockerfile中添加以下内容",[27,30209,30211],{"className":26433,"code":30210,"language":26435,"meta":32,"style":32},"# 基于哪个镜像\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",[34,30212,30213,30218,30223,30228,30233,30238,30243,30248],{"__ignoreMap":32},[37,30214,30215],{"class":39,"line":40},[37,30216,30217],{},"# 基于哪个镜像\n",[37,30219,30220],{"class":39,"line":47},[37,30221,30222],{},"From java:8\n",[37,30224,30225],{"class":39,"line":104},[37,30226,30227],{},"# 复制文件到容器\n",[37,30229,30230],{"class":39,"line":113},[37,30231,30232],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[37,30234,30235],{"class":39,"line":189},[37,30236,30237],{},"# 声明需要暴露的端口\n",[37,30239,30240],{"class":39,"line":195},[37,30241,30242],{},"EXPOSE 8877\n",[37,30244,30245],{"class":39,"line":201},[37,30246,30247],{},"# 配置容器启动后执行的命令\n",[37,30249,30250],{"class":39,"line":207},[37,30251,30252],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,30254,30255],{},"3、使用docker build命令构建镜像",[27,30257,30259],{"className":24163,"code":30258,"language":24165,"meta":32,"style":32},"docker build -t tulingmall-member:0.0.5 .\n",[34,30260,30261],{"__ignoreMap":32},[37,30262,30263,30265,30267,30269,30272],{"class":39,"line":40},[37,30264,26895],{"class":2320},[37,30266,29074],{"class":185},[37,30268,29077],{"class":61},[37,30270,30271],{"class":185}," tulingmall-member:0.0.5",[37,30273,29083],{"class":185},[14,30275,30276],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30278,30279],{},[1838,30280],{"alt":32,"src":30281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30283,30284],{},"4、启动镜像，加-d可在后台启动",[27,30286,30288],{"className":24163,"code":30287,"language":24165,"meta":32,"style":32},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[34,30289,30290],{"__ignoreMap":32},[37,30291,30292,30294,30296,30298,30300,30303],{"class":39,"line":40},[37,30293,26895],{"class":2320},[37,30295,27572],{"class":185},[37,30297,30165],{"class":61},[37,30299,29558],{"class":61},[37,30301,30302],{"class":185}," 8877:8877",[37,30304,30305],{"class":185}," tulingmall-member:0.0.5\n",[14,30307,30308],{},"加上JVM参数：",[27,30310,30312],{"className":24163,"code":30311,"language":24165,"meta":32,"style":32},"# --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",[34,30313,30314,30319,30334,30344,30353,30360],{"__ignoreMap":32},[37,30315,30316],{"class":39,"line":40},[37,30317,30318],{"class":43},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[37,30320,30321,30323,30325,30328,30330,30332],{"class":39,"line":47},[37,30322,26895],{"class":2320},[37,30324,27572],{"class":185},[37,30326,30327],{"class":61},"  -d",[37,30329,29558],{"class":61},[37,30331,30302],{"class":185},[37,30333,25020],{"class":61},[37,30335,30336,30338,30341],{"class":39,"line":104},[37,30337,28470],{"class":50},[37,30339,30340],{"class":185},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[37,30342,30343],{"class":61},"  \\\n",[37,30345,30346,30348,30351],{"class":39,"line":113},[37,30347,28470],{"class":50},[37,30349,30350],{"class":185},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[37,30352,30343],{"class":61},[37,30354,30355,30358],{"class":39,"line":189},[37,30356,30357],{"class":50},"--cap-add=SYS_PTRACE  ",[37,30359,26517],{"class":61},[37,30361,30362],{"class":39,"line":195},[37,30363,30364],{"class":50},"tulingmall-member:0.0.5\n",[14,30366,30367],{},"5、访问会员服务接口",[14,30369,30370],{},[1838,30371],{"alt":32,"src":30372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22339,30374,30376],{"id":30375},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30378,30379],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30381,30382,30383],{},"阿里云docker镜像仓库：",[51,30384,30385],{"href":30385,"rel":30386},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24206],[14,30388,30389],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30391,30392],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30394,30395],{},[1838,30396],{"alt":32,"src":30397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30399,30400],{},"要把镜像推送到镜像仓库",[27,30402,30404],{"className":24163,"code":30403,"language":24165,"meta":32,"style":32},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[34,30405,30406],{"__ignoreMap":32},[37,30407,30408,30410,30412,30414],{"class":39,"line":40},[37,30409,26895],{"class":2320},[37,30411,29239],{"class":185},[37,30413,30271],{"class":185},[37,30415,30416],{"class":185}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30418,30419],{},"最后将镜像推送到远程仓库",[27,30421,30423],{"className":24163,"code":30422,"language":24165,"meta":32,"style":32},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[34,30424,30425],{"__ignoreMap":32},[37,30426,30427,30429,30431],{"class":39,"line":40},[37,30428,26895],{"class":2320},[37,30430,29358],{"class":185},[37,30432,30416],{"class":185},[446,30434,30435],{},"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":32,"searchDepth":47,"depth":47,"links":30437},[30438,30439,30440],{"id":28825,"depth":104,"text":28826},{"id":29054,"depth":104,"text":29055},{"id":30080,"depth":104,"text":30081},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28817,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30447,"title":30448,"body":30449,"description":32,"extension":452,"meta":30592,"navigation":454,"path":30593,"seo":30594,"stem":30595,"__hash__":30596},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30450,"toc":30590},[30451,30454,30459,30464,30467,30472,30477,30480,30485,30490,30493,30498,30501,30504,30507,30510,30513,30516,30536,30558,30561,30564,30584,30587],[10,30452,30448],{"id":30453},"_7vscode远程开发",[481,30455,30456],{},[484,30457,30458],{},"插件1：微软Docker工具",[14,30460,30461],{},[1838,30462],{"alt":32,"src":30463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30465,30466],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30468,30469],{},[1838,30470],{"alt":32,"src":30471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[481,30473,30474],{"start":47},[484,30475,30476],{},"插件2：微软Docker远程开发工具",[14,30478,30479],{},"下面这是远程开发的插件。",[14,30481,30482],{},[1838,30483],{"alt":32,"src":30484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30486,30487],{},[1838,30488],{"alt":32,"src":30489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30491,30492],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30494,30495],{},[1838,30496],{"alt":32,"src":30497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30499,30500],{},"安装完拓展之后，vscode进行链接：",[14,30502,30503],{},"1.按ctrl+shift+p",[14,30505,30506],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30508,30509],{},"3.选择目前运行的容器",[14,30511,30512],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30514,30515],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[27,30517,30519],{"className":24163,"code":30518,"language":24165,"meta":32,"style":32},"docker run -v 主机目录:容器目录 image-name\n",[34,30520,30521],{"__ignoreMap":32},[37,30522,30523,30525,30527,30530,30533],{"class":39,"line":40},[37,30524,26895],{"class":2320},[37,30526,27572],{"class":185},[37,30528,30529],{"class":61}," -v",[37,30531,30532],{"class":185}," 主机目录:容器目录",[37,30534,30535],{"class":185}," image-name\n",[27,30537,30539],{"className":24163,"code":30538,"language":24165,"meta":32,"style":32},"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",[34,30540,30541],{"__ignoreMap":32},[37,30542,30543,30545,30547,30550,30552,30555],{"class":39,"line":40},[37,30544,26895],{"class":2320},[37,30546,27572],{"class":185},[37,30548,30549],{"class":61}," -it",[37,30551,30529],{"class":61},[37,30553,30554],{"class":185}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[37,30556,30557],{"class":185}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30559,30560],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30562,30563],{},"查看挂载情况：",[27,30565,30567],{"className":24163,"code":30566,"language":24165,"meta":32,"style":32},"mount | grep -i project\n",[34,30568,30569],{"__ignoreMap":32},[37,30570,30571,30574,30576,30579,30581],{"class":39,"line":40},[37,30572,30573],{"class":2320},"mount",[37,30575,25451],{"class":54},[37,30577,30578],{"class":2320}," grep",[37,30580,26772],{"class":61},[37,30582,30583],{"class":185}," project\n",[14,30585,30586],{},"也可以通过ls来进行查看",[446,30588,30589],{},"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":32,"searchDepth":47,"depth":47,"links":30591},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30448,"description":32},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30598,"title":30599,"body":30600,"description":451,"extension":452,"meta":30604,"navigation":454,"path":30606,"seo":30607,"stem":30608,"__hash__":30609},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30601,"toc":30602},[],{"title":32,"searchDepth":47,"depth":47,"links":30603},[],{"category":30605},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30599,"description":451},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30611,"title":30612,"body":30613,"description":451,"extension":452,"meta":30617,"navigation":454,"path":30618,"seo":30619,"stem":30620,"__hash__":30621},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30614,"toc":30615},[],{"title":32,"searchDepth":47,"depth":47,"links":30616},[],{"category":30605},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30612,"description":451},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30623,"title":30624,"body":30625,"description":451,"extension":452,"meta":30915,"navigation":454,"path":30916,"seo":30917,"stem":30918,"__hash__":30919},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30626,"toc":30913},[30627,30630,30638,30653,30658,30709,30712,30718,30902,30907,30910],[10,30628,30624],{"id":30629},"_1验证深度学习环境",[14,30631,30632,30633],{},"关于环境的安装，看",[51,30634,30637],{"href":30635,"rel":30636},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24206],"Pytorch-->深度学习",[14,30639,30640,30641,30644,30645,30648,30649,30652],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[34,30642,30643],{},"pytorch-cuda=12.4"," 是一个“ ",[673,30646,30647],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[673,30650,30651],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30654,30655],{},[1838,30656],{"alt":32,"src":30657},"\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",[27,30659,30661],{"className":24163,"code":30660,"language":24165,"meta":32,"style":32},"# 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",[34,30662,30663,30668],{"__ignoreMap":32},[37,30664,30665],{"class":39,"line":40},[37,30666,30667],{"class":43},"# CUDA 12.4\n",[37,30669,30670,30673,30675,30678,30681,30684,30687,30690,30692,30695,30698,30701,30704,30706],{"class":39,"line":47},[37,30671,30672],{"class":2320},"conda",[37,30674,24175],{"class":185},[37,30676,30677],{"class":185}," pytorch==",[37,30679,30680],{"class":61},"2.5.1",[37,30682,30683],{"class":185}," torchvision==",[37,30685,30686],{"class":61},"0.20.1",[37,30688,30689],{"class":185}," torchaudio==",[37,30691,30680],{"class":61},[37,30693,30694],{"class":185}," pytorch-cuda=",[37,30696,30697],{"class":61},"12.4",[37,30699,30700],{"class":61}," -c",[37,30702,30703],{"class":185}," pytorch",[37,30705,30700],{"class":61},[37,30707,30708],{"class":185}," nvidia\n",[14,30710,30711],{},"）：",[14,30713,30714],{},[51,30715,30716],{"href":30716,"rel":30717},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24206],[27,30719,30721],{"className":29,"code":30720,"language":31,"meta":32,"style":32},"# 对深度学习环境进行测试\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",[34,30722,30723,30728,30736,30741,30751,30767,30772,30782,30819,30826,30837,30853,30858,30868,30880,30890],{"__ignoreMap":32},[37,30724,30725],{"class":39,"line":40},[37,30726,30727],{"class":43},"# 对深度学习环境进行测试\n",[37,30729,30730,30733],{"class":39,"line":47},[37,30731,30732],{"class":54},"import",[37,30734,30735],{"class":50}," torch\n",[37,30737,30738],{"class":39,"line":104},[37,30739,30740],{"class":43},"# 查看cuda是否被激活\n",[37,30742,30743,30746,30748],{"class":39,"line":113},[37,30744,30745],{"class":50},"flag",[37,30747,55],{"class":54},[37,30749,30750],{"class":50},"torch.cuda.is_available()\n",[37,30752,30753,30756,30758,30761,30764],{"class":39,"line":189},[37,30754,30755],{"class":61},"print",[37,30757,165],{"class":50},[37,30759,30760],{"class":185},"\"cuda:\"",[37,30762,30763],{"class":50},", flag)   ",[37,30765,30766],{"class":43},"#返回true的话说明被激活\n",[37,30768,30769],{"class":39,"line":195},[37,30770,30771],{"class":43},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[37,30773,30774,30777,30779],{"class":39,"line":201},[37,30775,30776],{"class":50},"ngpu",[37,30778,55],{"class":54},[37,30780,30781],{"class":61},"1\n",[37,30783,30784,30787,30789,30792,30795,30797,30800,30803,30806,30808,30810,30812,30814,30817],{"class":39,"line":207},[37,30785,30786],{"class":50},"device",[37,30788,55],{"class":54},[37,30790,30791],{"class":50},"torch.device(",[37,30793,30794],{"class":185},"\"cuda:0\"",[37,30796,2069],{"class":54},[37,30798,30799],{"class":50},"(torch.cuda.is_available() ",[37,30801,30802],{"class":54},"and",[37,30804,30805],{"class":50}," ngpu",[37,30807,1468],{"class":54},[37,30809,135],{"class":61},[37,30811,14055],{"class":50},[37,30813,2066],{"class":54},[37,30815,30816],{"class":185}," \"cpu\"",[37,30818,280],{"class":50},[37,30820,30821,30823],{"class":39,"line":213},[37,30822,30755],{"class":61},[37,30824,30825],{"class":50},"(device)\n",[37,30827,30828,30830,30833,30835],{"class":39,"line":218},[37,30829,30755],{"class":61},[37,30831,30832],{"class":50},"(torch.cuda.get_device_name(",[37,30834,135],{"class":61},[37,30836,175],{"class":50},[37,30838,30839,30841,30844,30846,30848,30850],{"class":39,"line":227},[37,30840,30755],{"class":61},[37,30842,30843],{"class":50},"(torch.rand(",[37,30845,62],{"class":61},[37,30847,65],{"class":50},[37,30849,62],{"class":61},[37,30851,30852],{"class":50},").cuda())\n",[37,30854,30855],{"class":39,"line":232},[37,30856,30857],{"class":43},"# 查看cuda和cudnn的版本\n",[37,30859,30860,30863,30865],{"class":39,"line":238},[37,30861,30862],{"class":50},"cuda_version",[37,30864,55],{"class":54},[37,30866,30867],{"class":50},"torch.version.cuda\n",[37,30869,30870,30872,30874,30877],{"class":39,"line":244},[37,30871,30755],{"class":61},[37,30873,165],{"class":50},[37,30875,30876],{"class":185},"\"cuda version\"",[37,30878,30879],{"class":50},",cuda_version)\n",[37,30881,30882,30885,30887],{"class":39,"line":250},[37,30883,30884],{"class":50},"cudnn_version",[37,30886,55],{"class":54},[37,30888,30889],{"class":50},"torch.backends.cudnn.version()\n",[37,30891,30892,30894,30896,30899],{"class":39,"line":256},[37,30893,30755],{"class":61},[37,30895,165],{"class":50},[37,30897,30898],{"class":185},"\"cudnn version\"",[37,30900,30901],{"class":50},",cudnn_version)\n",[14,30903,30904],{},[1838,30905],{"alt":32,"src":30906},"\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",[14,30908,30909],{},"cuda:0 指的是一块显卡",[446,30911,30912],{},"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":32,"searchDepth":47,"depth":47,"links":30914},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30624,"description":451},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30921,"title":30922,"body":30923,"description":451,"extension":452,"meta":50724,"navigation":454,"path":50725,"seo":50726,"stem":50727,"__hash__":50728},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30924,"toc":50718},[30925,30928,30932,30936,30939,30944,30949,30952,30957,30962,30967,30970,30974,30979,30983,30988,30991,30996,30999,31002,31005,31008,31013,31016,31021,31026,31031,31036,31039,31043,31046,31051,31655,31660,31663,31668,31671,31674,32137,32140,32143,32146,32149,34199,34202,34207,34212,35007,35010,35015,35793,35797,37456,37460,38174,38178,38182,38187,38192,38197,38200,38205,38210,38215,38220,38225,38229,38234,39516,39521,39524,39527,39530,39685,39688,39691,40907,40912,41607,41611,41615,41620,41625,41628,41633,41638,41643,41648,41653,41658,41663,41668,41673,41678,41683,41688,41693,41698,41703,41708,41713,41718,41723,41728,41733,41738,41743,41748,41753,41758,41763,41768,41773,41778,41782,41786,41789,43267,43271,44918,44922,45616,45620,45623,45626,46170,46173,46177,46180,47577,47581,47584,48161,49948,49952,49955,50715],[10,30926,30922],{"id":30927},"_2经典神经网络",[498,30929,30931],{"id":30930},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22339,30933,30935],{"id":30934},"_211原理介绍","2.1.1.原理介绍",[14,30937,30938],{},"LeNet-5",[481,30940,30941],{},[484,30942,30943],{},"原理",[14,30945,30946],{},[1838,30947],{"alt":32,"src":30948},"\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",[14,30950,30951],{},"B是batch批次；C是channel通道",[481,30953,30954],{"start":47},[484,30955,30956],{},"网络参数详细",[14,30958,30959],{},[1838,30960],{"alt":32,"src":30961},"\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",[14,30963,30964],{},[1838,30965],{"alt":32,"src":30966},"\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",[14,30968,30969],{},"AlexNet",[481,30971,30972],{},[484,30973,30943],{},[14,30975,30976],{},[1838,30977],{"alt":32,"src":30978},"\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",[481,30980,30981],{"start":47},[484,30982,30956],{},[14,30984,30985],{},[1838,30986],{"alt":32,"src":30987},"\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",[14,30989,30990],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30992,30993],{},[1838,30994],{"alt":32,"src":30995},"\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",[14,30997,30998],{},"数据处理中的图像增强操作:",[14,31000,31001],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,31003,31004],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,31006,31007],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,31009,31010],{},[1838,31011],{"alt":32,"src":31012},"\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",[14,31014,31015],{},"提升网络精确度的方法：LRN正则化",[14,31017,31018],{},[1838,31019],{"alt":32,"src":31020},"\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",[14,31022,31023],{},[1838,31024],{"alt":32,"src":31025},"\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",[481,31027,31028],{"start":104},[484,31029,31030],{},"AlexNet的总结",[14,31032,31033],{},[1838,31034],{"alt":32,"src":31035},"\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",[14,31037,31038],{},"比LeNet模型要深一丢丢",[22339,31040,31042],{"id":31041},"_212代码实现","2.1.2.代码实现",[14,31044,31045],{},"（1）LeNet",[481,31047,31048],{},[484,31049,31050],{},"模型搭建",[27,31052,31054],{"className":29,"code":31053,"language":31,"meta":32,"style":32},"# 导入库\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",[34,31055,31056,31061,31067,31072,31085,31090,31102,31106,31126,31131,31136,31147,31152,31171,31175,31180,31229,31241,31246,31275,31310,31337,31342,31354,31359,31379,31398,31417,31421,31426,31436,31453,31464,31479,31490,31501,31516,31531,31542,31549,31553,31567,31572,31595,31600,31605,31610,31614,31619,31624,31634],{"__ignoreMap":32},[37,31057,31058],{"class":39,"line":40},[37,31059,31060],{"class":43},"# 导入库\n",[37,31062,31063,31065],{"class":39,"line":47},[37,31064,30732],{"class":54},[37,31066,30735],{"class":50},[37,31068,31069],{"class":39,"line":104},[37,31070,31071],{"class":43},"# 导入神经网络层\n",[37,31073,31074,31077,31080,31082],{"class":39,"line":113},[37,31075,31076],{"class":54},"from",[37,31078,31079],{"class":50}," torch ",[37,31081,30732],{"class":54},[37,31083,31084],{"class":50}," nn\n",[37,31086,31087],{"class":39,"line":189},[37,31088,31089],{"class":43},"# 导入展示神经网络参数的包\n",[37,31091,31092,31094,31097,31099],{"class":39,"line":195},[37,31093,31076],{"class":54},[37,31095,31096],{"class":50}," torchsummary ",[37,31098,30732],{"class":54},[37,31100,31101],{"class":50}," summary\n",[37,31103,31104],{"class":39,"line":201},[37,31105,2757],{"emptyLinePlaceholder":454},[37,31107,31108,31110,31113,31115,31118,31120,31123],{"class":39,"line":207},[37,31109,15035],{"class":54},[37,31111,31112],{"class":2320}," LeNet",[37,31114,165],{"class":50},[37,31116,31117],{"class":2320},"nn",[37,31119,1068],{"class":50},[37,31121,31122],{"class":2320},"Module",[37,31124,31125],{"class":50},"):\n",[37,31127,31128],{"class":39,"line":213},[37,31129,31130],{"class":43},"    # 模型初始化:\n",[37,31132,31133],{"class":39,"line":218},[37,31134,31135],{"class":43},"    # 定义一些网络层和激活函数\n",[37,31137,31138,31141,31144],{"class":39,"line":227},[37,31139,31140],{"class":54},"    def",[37,31142,31143],{"class":61}," __init__",[37,31145,31146],{"class":50},"(self):\n",[37,31148,31149],{"class":39,"line":232},[37,31150,31151],{"class":43},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[37,31153,31154,31157,31160,31163,31166,31169],{"class":39,"line":238},[37,31155,31156],{"class":61},"        super",[37,31158,31159],{"class":50},"(LeNet,",[37,31161,31162],{"class":61},"self",[37,31164,31165],{"class":50},").",[37,31167,31168],{"class":61},"__init__",[37,31170,2333],{"class":50},[37,31172,31173],{"class":39,"line":244},[37,31174,2757],{"emptyLinePlaceholder":454},[37,31176,31177],{"class":39,"line":250},[37,31178,31179],{"class":43},"        # 定义网络层\n",[37,31181,31182,31185,31188,31190,31193,31196,31198,31200,31202,31205,31207,31209,31211,31214,31216,31218,31220,31223,31225,31227],{"class":39,"line":256},[37,31183,31184],{"class":61},"        self",[37,31186,31187],{"class":50},".c1",[37,31189,55],{"class":54},[37,31191,31192],{"class":50},"nn.Conv2d(",[37,31194,31195],{"class":159},"in_channels",[37,31197,55],{"class":54},[37,31199,332],{"class":61},[37,31201,65],{"class":50},[37,31203,31204],{"class":159},"out_channels",[37,31206,55],{"class":54},[37,31208,93],{"class":61},[37,31210,65],{"class":50},[37,31212,31213],{"class":159},"kernel_size",[37,31215,55],{"class":54},[37,31217,836],{"class":61},[37,31219,65],{"class":50},[37,31221,31222],{"class":159},"padding",[37,31224,55],{"class":54},[37,31226,602],{"class":61},[37,31228,280],{"class":50},[37,31230,31231,31233,31236,31238],{"class":39,"line":261},[37,31232,31184],{"class":61},[37,31234,31235],{"class":50},".sig",[37,31237,55],{"class":54},[37,31239,31240],{"class":50},"nn.Sigmoid()\n",[37,31242,31243],{"class":39,"line":267},[37,31244,31245],{"class":43},"        # 定义池化\n",[37,31247,31248,31250,31253,31255,31258,31260,31262,31264,31266,31269,31271,31273],{"class":39,"line":283},[37,31249,31184],{"class":61},[37,31251,31252],{"class":50},".s2",[37,31254,55],{"class":54},[37,31256,31257],{"class":50},"nn.AvgPool2d(",[37,31259,31213],{"class":159},[37,31261,55],{"class":54},[37,31263,602],{"class":61},[37,31265,65],{"class":50},[37,31267,31268],{"class":159},"stride",[37,31270,55],{"class":54},[37,31272,602],{"class":61},[37,31274,280],{"class":50},[37,31276,31277,31279,31282,31284,31286,31288,31290,31292,31294,31296,31298,31300,31302,31304,31306,31308],{"class":39,"line":288},[37,31278,31184],{"class":61},[37,31280,31281],{"class":50},".c3",[37,31283,55],{"class":54},[37,31285,31192],{"class":50},[37,31287,31195],{"class":159},[37,31289,55],{"class":54},[37,31291,93],{"class":61},[37,31293,65],{"class":50},[37,31295,31204],{"class":159},[37,31297,55],{"class":54},[37,31299,1111],{"class":61},[37,31301,65],{"class":50},[37,31303,31213],{"class":159},[37,31305,55],{"class":54},[37,31307,836],{"class":61},[37,31309,280],{"class":50},[37,31311,31312,31314,31317,31319,31321,31323,31325,31327,31329,31331,31333,31335],{"class":39,"line":294},[37,31313,31184],{"class":61},[37,31315,31316],{"class":50},".s4",[37,31318,55],{"class":54},[37,31320,31257],{"class":50},[37,31322,31213],{"class":159},[37,31324,55],{"class":54},[37,31326,602],{"class":61},[37,31328,65],{"class":50},[37,31330,31268],{"class":159},[37,31332,55],{"class":54},[37,31334,602],{"class":61},[37,31336,280],{"class":50},[37,31338,31339],{"class":39,"line":300},[37,31340,31341],{"class":43},"        # 定义平展层\n",[37,31343,31344,31346,31349,31351],{"class":39,"line":306},[37,31345,31184],{"class":61},[37,31347,31348],{"class":50},".flatten",[37,31350,55],{"class":54},[37,31352,31353],{"class":50},"nn.Flatten()\n",[37,31355,31356],{"class":39,"line":312},[37,31357,31358],{"class":43},"        # 定义全连接层\n",[37,31360,31361,31363,31366,31368,31371,31373,31375,31377],{"class":39,"line":317},[37,31362,31184],{"class":61},[37,31364,31365],{"class":50},".f5",[37,31367,55],{"class":54},[37,31369,31370],{"class":50},"nn.Linear(",[37,31372,4337],{"class":61},[37,31374,65],{"class":50},[37,31376,1326],{"class":61},[37,31378,280],{"class":50},[37,31380,31381,31383,31386,31388,31390,31392,31394,31396],{"class":39,"line":323},[37,31382,31184],{"class":61},[37,31384,31385],{"class":50},".f6",[37,31387,55],{"class":54},[37,31389,31370],{"class":50},[37,31391,1326],{"class":61},[37,31393,65],{"class":50},[37,31395,1221],{"class":61},[37,31397,280],{"class":50},[37,31399,31400,31402,31405,31407,31409,31411,31413,31415],{"class":39,"line":337},[37,31401,31184],{"class":61},[37,31403,31404],{"class":50},".f7",[37,31406,55],{"class":54},[37,31408,31370],{"class":50},[37,31410,1221],{"class":61},[37,31412,65],{"class":50},[37,31414,98],{"class":61},[37,31416,280],{"class":50},[37,31418,31419],{"class":39,"line":342},[37,31420,2757],{"emptyLinePlaceholder":454},[37,31422,31423],{"class":39,"line":347},[37,31424,31425],{"class":43},"    # 写工具->写前向传播\n",[37,31427,31428,31430,31433],{"class":39,"line":352},[37,31429,31140],{"class":54},[37,31431,31432],{"class":2320}," forward",[37,31434,31435],{"class":50},"(self,x):\n",[37,31437,31438,31441,31443,31445,31448,31450],{"class":39,"line":357},[37,31439,31440],{"class":50},"        x",[37,31442,55],{"class":54},[37,31444,31162],{"class":61},[37,31446,31447],{"class":50},".sig(",[37,31449,31162],{"class":61},[37,31451,31452],{"class":50},".c1(x))\n",[37,31454,31455,31457,31459,31461],{"class":39,"line":362},[37,31456,31440],{"class":50},[37,31458,55],{"class":54},[37,31460,31162],{"class":61},[37,31462,31463],{"class":50},".s2(x)\n",[37,31465,31466,31468,31470,31472,31474,31476],{"class":39,"line":367},[37,31467,31440],{"class":50},[37,31469,55],{"class":54},[37,31471,31162],{"class":61},[37,31473,31447],{"class":50},[37,31475,31162],{"class":61},[37,31477,31478],{"class":50},".c3(x))\n",[37,31480,31481,31483,31485,31487],{"class":39,"line":373},[37,31482,31440],{"class":50},[37,31484,55],{"class":54},[37,31486,31162],{"class":61},[37,31488,31489],{"class":50},".s4(x)\n",[37,31491,31492,31494,31496,31498],{"class":39,"line":392},[37,31493,31440],{"class":50},[37,31495,55],{"class":54},[37,31497,31162],{"class":61},[37,31499,31500],{"class":50},".flatten(x)\n",[37,31502,31503,31505,31507,31509,31511,31513],{"class":39,"line":398},[37,31504,31440],{"class":50},[37,31506,55],{"class":54},[37,31508,31162],{"class":61},[37,31510,31447],{"class":50},[37,31512,31162],{"class":61},[37,31514,31515],{"class":50},".f5(x))\n",[37,31517,31518,31520,31522,31524,31526,31528],{"class":39,"line":409},[37,31519,31440],{"class":50},[37,31521,55],{"class":54},[37,31523,31162],{"class":61},[37,31525,31447],{"class":50},[37,31527,31162],{"class":61},[37,31529,31530],{"class":50},".f6(x))\n",[37,31532,31533,31535,31537,31539],{"class":39,"line":415},[37,31534,31440],{"class":50},[37,31536,55],{"class":54},[37,31538,31162],{"class":61},[37,31540,31541],{"class":50},".f7(x)\n",[37,31543,31544,31546],{"class":39,"line":420},[37,31545,15093],{"class":54},[37,31547,31548],{"class":50}," x\n",[37,31550,31551],{"class":39,"line":425},[37,31552,2757],{"emptyLinePlaceholder":454},[37,31554,31555,31557,31560,31562,31565],{"class":39,"line":431},[37,31556,1907],{"class":54},[37,31558,31559],{"class":61}," __name__",[37,31561,3299],{"class":54},[37,31563,31564],{"class":185},"\"__main__\"",[37,31566,4089],{"class":50},[37,31568,31569],{"class":39,"line":436},[37,31570,31571],{"class":43},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[37,31573,31574,31577,31579,31581,31584,31586,31589,31591,31593],{"class":39,"line":442},[37,31575,31576],{"class":50},"    device",[37,31578,55],{"class":54},[37,31580,30791],{"class":50},[37,31582,31583],{"class":185},"\"cuda\"",[37,31585,2069],{"class":54},[37,31587,31588],{"class":50}," torch.cuda.is_available() ",[37,31590,2066],{"class":54},[37,31592,30816],{"class":185},[37,31594,280],{"class":50},[37,31596,31597],{"class":39,"line":8374},[37,31598,31599],{"class":43},"    # 如果就是想指定用cpu用下方代码:\n",[37,31601,31602],{"class":39,"line":8386},[37,31603,31604],{"class":43},"    # device=\"cpu\"\n",[37,31606,31607],{"class":39,"line":8398},[37,31608,31609],{"class":43},"    # print(device)\n",[37,31611,31612],{"class":39,"line":10057},[37,31613,2757],{"emptyLinePlaceholder":454},[37,31615,31616],{"class":39,"line":10082},[37,31617,31618],{"class":43},"    # 实例化模型\n",[37,31620,31621],{"class":39,"line":10105},[37,31622,31623],{"class":43},"    # 将模型放到设备中去运行\n",[37,31625,31626,31629,31631],{"class":39,"line":10129},[37,31627,31628],{"class":50},"    model",[37,31630,55],{"class":54},[37,31632,31633],{"class":50},"LeNet().to(device)\n",[37,31635,31636,31639,31642,31644,31646,31648,31650,31652],{"class":39,"line":10134},[37,31637,31638],{"class":61},"    print",[37,31640,31641],{"class":50},"(summary(model,(",[37,31643,332],{"class":61},[37,31645,65],{"class":50},[37,31647,1409],{"class":61},[37,31649,65],{"class":50},[37,31651,1409],{"class":61},[37,31653,31654],{"class":50},")))\n",[14,31656,31657],{},[1838,31658],{"alt":32,"src":31659},"\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",[14,31661,31662],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[481,31664,31665],{"start":47},[484,31666,31667],{},"训练",[14,31669,31670],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31672,31673],{},"在训练之前可以将数据展示看一下",[27,31675,31677],{"className":29,"code":31676,"language":31,"meta":32,"style":32},"# 建立画图的函数，用于展示数据\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",[34,31678,31679,31684,31689,31701,31713,31726,31731,31743,31748,31760,31765,31777,31781,31785,31806,31818,31823,31843,31854,31858,31863,31881,31892,31897,31908,31913,31924,31928,31933,31948,31961,31966,31971,31984,31997,32010,32015,32019,32024,32044,32061,32081,32094,32107,32117,32132],{"__ignoreMap":32},[37,31680,31681],{"class":39,"line":40},[37,31682,31683],{"class":43},"# 建立画图的函数，用于展示数据\n",[37,31685,31686],{"class":39,"line":47},[37,31687,31688],{"class":43},"# torchvision中包含很多内置的数据集\n",[37,31690,31691,31693,31696,31698],{"class":39,"line":104},[37,31692,31076],{"class":54},[37,31694,31695],{"class":50}," sklearn.externals.array_api_compat.torch ",[37,31697,30732],{"class":54},[37,31699,31700],{"class":50}," squeeze\n",[37,31702,31703,31705,31708,31710],{"class":39,"line":113},[37,31704,31076],{"class":54},[37,31706,31707],{"class":50}," torchvision.datasets ",[37,31709,30732],{"class":54},[37,31711,31712],{"class":50}," FashionMNIST\n",[37,31714,31715,31717,31720,31723],{"class":39,"line":189},[37,31716,30732],{"class":54},[37,31718,31719],{"class":50}," numpy ",[37,31721,31722],{"class":54},"as",[37,31724,31725],{"class":50}," np\n",[37,31727,31728],{"class":39,"line":195},[37,31729,31730],{"class":43},"# 引入处理数据集的包\n",[37,31732,31733,31735,31738,31740],{"class":39,"line":201},[37,31734,31076],{"class":54},[37,31736,31737],{"class":50}," torchvision ",[37,31739,30732],{"class":54},[37,31741,31742],{"class":50}," transforms\n",[37,31744,31745],{"class":39,"line":207},[37,31746,31747],{"class":43},"# 从torch库中引入数据处理的包\n",[37,31749,31750,31752,31755,31757],{"class":39,"line":213},[37,31751,30732],{"class":54},[37,31753,31754],{"class":50}," torch.utils.data ",[37,31756,31722],{"class":54},[37,31758,31759],{"class":50}," Data\n",[37,31761,31762],{"class":39,"line":218},[37,31763,31764],{"class":43},"# 导入画图的库\n",[37,31766,31767,31769,31772,31774],{"class":39,"line":227},[37,31768,30732],{"class":54},[37,31770,31771],{"class":50}," matplotlib.pyplot ",[37,31773,31722],{"class":54},[37,31775,31776],{"class":50}," plt\n",[37,31778,31779],{"class":39,"line":232},[37,31780,2757],{"emptyLinePlaceholder":454},[37,31782,31783],{"class":39,"line":238},[37,31784,2757],{"emptyLinePlaceholder":454},[37,31786,31787,31790,31792,31795,31798,31800,31803],{"class":39,"line":244},[37,31788,31789],{"class":50},"train_data",[37,31791,55],{"class":54},[37,31793,31794],{"class":50},"FashionMNIST(",[37,31796,31797],{"class":159},"root",[37,31799,55],{"class":54},[37,31801,31802],{"class":185},"'.\u002Fdata'",[37,31804,31805],{"class":50},",\n",[37,31807,31808,31811,31813,31816],{"class":39,"line":250},[37,31809,31810],{"class":159},"                        train",[37,31812,55],{"class":54},[37,31814,31815],{"class":61},"True",[37,31817,31805],{"class":50},[37,31819,31820],{"class":39,"line":256},[37,31821,31822],{"class":43},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[37,31824,31825,31828,31830,31833,31835,31837,31840],{"class":39,"line":261},[37,31826,31827],{"class":159},"                        transform",[37,31829,55],{"class":54},[37,31831,31832],{"class":50},"transforms.Compose([transforms.Resize(",[37,31834,160],{"class":159},[37,31836,55],{"class":54},[37,31838,31839],{"class":61},"224",[37,31841,31842],{"class":50},"),transforms.ToTensor()]),\n",[37,31844,31845,31848,31850,31852],{"class":39,"line":267},[37,31846,31847],{"class":159},"                        download",[37,31849,55],{"class":54},[37,31851,31815],{"class":61},[37,31853,280],{"class":50},[37,31855,31856],{"class":39,"line":283},[37,31857,2757],{"emptyLinePlaceholder":454},[37,31859,31860],{"class":39,"line":288},[37,31861,31862],{"class":43},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[37,31864,31865,31868,31870,31873,31876,31878],{"class":39,"line":294},[37,31866,31867],{"class":50},"train_loader",[37,31869,55],{"class":54},[37,31871,31872],{"class":50},"Data.DataLoader(",[37,31874,31875],{"class":159},"dataset",[37,31877,55],{"class":54},[37,31879,31880],{"class":50},"train_data,\n",[37,31882,31883,31886,31888,31890],{"class":39,"line":300},[37,31884,31885],{"class":159},"                             batch_size",[37,31887,55],{"class":54},[37,31889,726],{"class":61},[37,31891,31805],{"class":50},[37,31893,31894],{"class":39,"line":306},[37,31895,31896],{"class":43},"                             # 数据是否打乱\n",[37,31898,31899,31902,31904,31906],{"class":39,"line":312},[37,31900,31901],{"class":159},"                             shuffle",[37,31903,55],{"class":54},[37,31905,31815],{"class":61},[37,31907,31805],{"class":50},[37,31909,31910],{"class":39,"line":317},[37,31911,31912],{"class":43},"                             # 规定加载数据的进程\n",[37,31914,31915,31918,31920,31922],{"class":39,"line":323},[37,31916,31917],{"class":159},"                             num_workers",[37,31919,55],{"class":54},[37,31921,135],{"class":61},[37,31923,280],{"class":50},[37,31925,31926],{"class":39,"line":337},[37,31927,2757],{"emptyLinePlaceholder":454},[37,31929,31930],{"class":39,"line":342},[37,31931,31932],{"class":43},"# 获得一个batch的数据\n",[37,31934,31935,31937,31940,31942,31945],{"class":39,"line":347},[37,31936,3375],{"class":54},[37,31938,31939],{"class":50}," step,(b_x,b_y) ",[37,31941,26385],{"class":54},[37,31943,31944],{"class":61}," enumerate",[37,31946,31947],{"class":50},"(train_loader):\n",[37,31949,31950,31952,31955,31957,31959],{"class":39,"line":352},[37,31951,3451],{"class":54},[37,31953,31954],{"class":50}," step ",[37,31956,1468],{"class":54},[37,31958,4443],{"class":61},[37,31960,4089],{"class":50},[37,31962,31963],{"class":39,"line":357},[37,31964,31965],{"class":54},"        break\n",[37,31967,31968],{"class":39,"line":362},[37,31969,31970],{"class":43},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[37,31972,31973,31976,31978,31981],{"class":39,"line":367},[37,31974,31975],{"class":50},"batch_x",[37,31977,55],{"class":54},[37,31979,31980],{"class":50},"b_x.squeeze().numpy()  ",[37,31982,31983],{"class":43},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[37,31985,31986,31989,31991,31994],{"class":39,"line":373},[37,31987,31988],{"class":50},"batch_y",[37,31990,55],{"class":54},[37,31992,31993],{"class":50},"b_y.numpy()   ",[37,31995,31996],{"class":43},"#将张量转换成功numpy数组\n",[37,31998,31999,32002,32004,32007],{"class":39,"line":392},[37,32000,32001],{"class":50},"class_label",[37,32003,55],{"class":54},[37,32005,32006],{"class":50},"train_data.classes  ",[37,32008,32009],{"class":43},"#训练集标签\n",[37,32011,32012],{"class":39,"line":398},[37,32013,32014],{"class":43},"# print(class_label)\n",[37,32016,32017],{"class":39,"line":409},[37,32018,2757],{"emptyLinePlaceholder":454},[37,32020,32021],{"class":39,"line":415},[37,32022,32023],{"class":43},"# 可视化一个batch的图像\n",[37,32025,32026,32029,32032,32034,32036,32038,32040,32042],{"class":39,"line":420},[37,32027,32028],{"class":50},"plt.figure(",[37,32030,32031],{"class":159},"figsize",[37,32033,55],{"class":54},[37,32035,165],{"class":50},[37,32037,68],{"class":61},[37,32039,65],{"class":50},[37,32041,836],{"class":61},[37,32043,175],{"class":50},[37,32045,32046,32048,32051,32053,32056,32058],{"class":39,"line":425},[37,32047,3375],{"class":54},[37,32049,32050],{"class":50}," ii ",[37,32052,26385],{"class":54},[37,32054,32055],{"class":50}," np.arange(",[37,32057,7706],{"class":61},[37,32059,32060],{"class":50},"(batch_y)):\n",[37,32062,32063,32066,32068,32070,32072,32075,32077,32079],{"class":39,"line":431},[37,32064,32065],{"class":50},"    plt.subplot(",[37,32067,168],{"class":61},[37,32069,65],{"class":50},[37,32071,1111],{"class":61},[37,32073,32074],{"class":50},",ii ",[37,32076,993],{"class":54},[37,32078,25460],{"class":61},[37,32080,280],{"class":50},[37,32082,32083,32086,32089,32091],{"class":39,"line":436},[37,32084,32085],{"class":50},"    plt.imshow(batch_x[ii,:,:],",[37,32087,32088],{"class":159},"cmap",[37,32090,55],{"class":54},[37,32092,32093],{"class":50},"plt.cm.gray)\n",[37,32095,32096,32099,32101,32103,32105],{"class":39,"line":442},[37,32097,32098],{"class":50},"    plt.title(class_label[batch_y[ii]],",[37,32100,160],{"class":159},[37,32102,55],{"class":54},[37,32104,98],{"class":61},[37,32106,280],{"class":50},[37,32108,32109,32112,32115],{"class":39,"line":8374},[37,32110,32111],{"class":50},"    plt.axis(",[37,32113,32114],{"class":185},"\"off\"",[37,32116,280],{"class":50},[37,32118,32119,32122,32125,32127,32130],{"class":39,"line":8386},[37,32120,32121],{"class":50},"    plt.subplots_adjust(",[37,32123,32124],{"class":159},"wspace",[37,32126,55],{"class":54},[37,32128,32129],{"class":61},"0.05",[37,32131,280],{"class":50},[37,32133,32134],{"class":39,"line":8398},[37,32135,32136],{"class":50},"plt.show()\n",[14,32138,32139],{},"用matplotlib进行展示的过程可以后续再补",[14,32141,32142],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,32144,32145],{},"训练次数就是按照批次过整个训练集数据的次数",[14,32147,32148],{},"模型训练：",[27,32150,32152],{"className":29,"code":32151,"language":31,"meta":32,"style":32},"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",[34,32153,32154,32161,32168,32172,32184,32190,32201,32211,32221,32231,32241,32246,32258,32268,32272,32276,32281,32292,32305,32316,32333,32344,32383,32399,32411,32422,32427,32438,32454,32465,32476,32487,32494,32498,32503,32508,32512,32517,32527,32548,32552,32556,32561,32566,32571,32591,32595,32600,32610,32614,32619,32628,32633,32638,32643,32653,32657,32661,32666,32671,32681,32686,32696,32701,32710,32715,32724,32729,32738,32742,32747,32757,32761,32765,32770,32785,32813,32828,32832,32837,32842,32851,32856,32865,32870,32879,32884,32893,32898,32907,32912,32921,32926,32939,32944,32954,32959,32969,32975,32981,32987,32993,33004,33010,33030,33036,33047,33053,33059,33065,33071,33077,33083,33089,33109,33115,33131,33137,33151,33157,33172,33178,33187,33193,33202,33208,33214,33223,33229,33240,33246,33265,33271,33282,33288,33308,33324,33330,33344,33350,33356,33367,33373,33379,33389,33395,33406,33412,33422,33427,33433,33482,33529,33534,33540,33559,33565,33584,33590,33596,33606,33611,33617,33633,33678,33684,33690,33696,33707,33713,33719,33725,33743,33757,33766,33775,33784,33793,33799,33805,33813,33818,33824,33835,33841,33861,33867,33873,33879,33896,33902,33908,33914,33920,33926,33953,33977,33983,33989,33995,34006,34017,34023,34040,34063,34086,34092,34097,34106,34116,34122,34127,34133,34146,34152,34163,34174,34193],{"__ignoreMap":32},[37,32155,32156,32158],{"class":39,"line":40},[37,32157,30732],{"class":54},[37,32159,32160],{"class":50}," copy\n",[37,32162,32163,32165],{"class":39,"line":47},[37,32164,30732],{"class":54},[37,32166,32167],{"class":50}," time\n",[37,32169,32170],{"class":39,"line":104},[37,32171,2757],{"emptyLinePlaceholder":454},[37,32173,32174,32176,32179,32181],{"class":39,"line":113},[37,32175,30732],{"class":54},[37,32177,32178],{"class":50}," pandas ",[37,32180,31722],{"class":54},[37,32182,32183],{"class":50}," pd\n",[37,32185,32186,32188],{"class":39,"line":189},[37,32187,30732],{"class":54},[37,32189,30735],{"class":50},[37,32191,32192,32194,32196,32198],{"class":39,"line":195},[37,32193,31076],{"class":54},[37,32195,31754],{"class":50},[37,32197,30732],{"class":54},[37,32199,32200],{"class":50}," Dataset\n",[37,32202,32203,32205,32207,32209],{"class":39,"line":201},[37,32204,31076],{"class":54},[37,32206,31707],{"class":50},[37,32208,30732],{"class":54},[37,32210,31712],{"class":50},[37,32212,32213,32215,32217,32219],{"class":39,"line":207},[37,32214,31076],{"class":54},[37,32216,31737],{"class":50},[37,32218,30732],{"class":54},[37,32220,31742],{"class":50},[37,32222,32223,32225,32227,32229],{"class":39,"line":213},[37,32224,30732],{"class":54},[37,32226,31754],{"class":50},[37,32228,31722],{"class":54},[37,32230,31759],{"class":50},[37,32232,32233,32235,32237,32239],{"class":39,"line":218},[37,32234,30732],{"class":54},[37,32236,31771],{"class":50},[37,32238,31722],{"class":54},[37,32240,31776],{"class":50},[37,32242,32243],{"class":39,"line":227},[37,32244,32245],{"class":43},"# 导入模型\n",[37,32247,32248,32250,32253,32255],{"class":39,"line":232},[37,32249,31076],{"class":54},[37,32251,32252],{"class":50}," model ",[37,32254,30732],{"class":54},[37,32256,32257],{"class":50}," LeNet\n",[37,32259,32260,32262,32264,32266],{"class":39,"line":238},[37,32261,31076],{"class":54},[37,32263,31079],{"class":50},[37,32265,30732],{"class":54},[37,32267,31084],{"class":50},[37,32269,32270],{"class":39,"line":244},[37,32271,2757],{"emptyLinePlaceholder":454},[37,32273,32274],{"class":39,"line":250},[37,32275,2757],{"emptyLinePlaceholder":454},[37,32277,32278],{"class":39,"line":256},[37,32279,32280],{"class":43},"# 处理训练集与验证集函数--->划分数据集\n",[37,32282,32283,32286,32289],{"class":39,"line":261},[37,32284,32285],{"class":54},"def",[37,32287,32288],{"class":2320}," train_val_data_process",[37,32290,32291],{"class":50},"():\n",[37,32293,32294,32297,32299,32301,32303],{"class":39,"line":267},[37,32295,32296],{"class":50},"    train_data",[37,32298,55],{"class":54},[37,32300,31794],{"class":50},[37,32302,31802],{"class":185},[37,32304,31805],{"class":50},[37,32306,32307,32310,32312,32314],{"class":39,"line":283},[37,32308,32309],{"class":159},"                            train",[37,32311,55],{"class":54},[37,32313,31815],{"class":61},[37,32315,31805],{"class":50},[37,32317,32318,32321,32323,32325,32327,32329,32331],{"class":39,"line":288},[37,32319,32320],{"class":159},"                            transform",[37,32322,55],{"class":54},[37,32324,31832],{"class":50},[37,32326,160],{"class":159},[37,32328,55],{"class":54},[37,32330,1409],{"class":61},[37,32332,31842],{"class":50},[37,32334,32335,32338,32340,32342],{"class":39,"line":294},[37,32336,32337],{"class":159},"                            download",[37,32339,55],{"class":54},[37,32341,31815],{"class":61},[37,32343,280],{"class":50},[37,32345,32346,32349,32351,32354,32357,32359,32362,32364,32366,32369,32371,32373,32376,32378,32380],{"class":39,"line":300},[37,32347,32348],{"class":50},"    train_data,val_data",[37,32350,55],{"class":54},[37,32352,32353],{"class":50},"Data.random_split(train_data,[",[37,32355,32356],{"class":61},"round",[37,32358,165],{"class":50},[37,32360,32361],{"class":61},"0.8",[37,32363,967],{"class":54},[37,32365,7706],{"class":61},[37,32367,32368],{"class":50},"(train_data)),",[37,32370,32356],{"class":61},[37,32372,165],{"class":50},[37,32374,32375],{"class":61},"0.2",[37,32377,967],{"class":54},[37,32379,7706],{"class":61},[37,32381,32382],{"class":50},"(train_data))])\n",[37,32384,32385,32388,32390,32393,32395,32397],{"class":39,"line":306},[37,32386,32387],{"class":50},"    train_dataloader ",[37,32389,55],{"class":54},[37,32391,32392],{"class":50}," Data.DataLoader(",[37,32394,31875],{"class":159},[37,32396,55],{"class":54},[37,32398,31880],{"class":50},[37,32400,32401,32404,32406,32409],{"class":39,"line":312},[37,32402,32403],{"class":159},"                                       batch_size",[37,32405,55],{"class":54},[37,32407,32408],{"class":61},"128",[37,32410,31805],{"class":50},[37,32412,32413,32416,32418,32420],{"class":39,"line":317},[37,32414,32415],{"class":159},"                                       shuffle",[37,32417,55],{"class":54},[37,32419,31815],{"class":61},[37,32421,31805],{"class":50},[37,32423,32424],{"class":39,"line":323},[37,32425,32426],{"class":43},"                                       # 规定8个进程\n",[37,32428,32429,32432,32434,32436],{"class":39,"line":337},[37,32430,32431],{"class":159},"                                       num_workers",[37,32433,55],{"class":54},[37,32435,73],{"class":61},[37,32437,280],{"class":50},[37,32439,32440,32443,32445,32447,32449,32451],{"class":39,"line":342},[37,32441,32442],{"class":50},"    val_dataloader",[37,32444,55],{"class":54},[37,32446,31872],{"class":50},[37,32448,31875],{"class":159},[37,32450,55],{"class":54},[37,32452,32453],{"class":50},"val_data,\n",[37,32455,32456,32459,32461,32463],{"class":39,"line":347},[37,32457,32458],{"class":159},"                                   batch_size",[37,32460,55],{"class":54},[37,32462,32408],{"class":61},[37,32464,31805],{"class":50},[37,32466,32467,32470,32472,32474],{"class":39,"line":352},[37,32468,32469],{"class":159},"                                   shuffle",[37,32471,55],{"class":54},[37,32473,31815],{"class":61},[37,32475,31805],{"class":50},[37,32477,32478,32481,32483,32485],{"class":39,"line":357},[37,32479,32480],{"class":159},"                                   num_workers",[37,32482,55],{"class":54},[37,32484,73],{"class":61},[37,32486,280],{"class":50},[37,32488,32489,32491],{"class":39,"line":362},[37,32490,4440],{"class":54},[37,32492,32493],{"class":50}," train_dataloader,val_dataloader\n",[37,32495,32496],{"class":39,"line":367},[37,32497,2757],{"emptyLinePlaceholder":454},[37,32499,32500],{"class":39,"line":373},[37,32501,32502],{"class":43},"# 验证是否出错\n",[37,32504,32505],{"class":39,"line":392},[37,32506,32507],{"class":43},"# train_val_data_process()\n",[37,32509,32510],{"class":39,"line":398},[37,32511,2757],{"emptyLinePlaceholder":454},[37,32513,32514],{"class":39,"line":409},[37,32515,32516],{"class":43},"# 定义模型训练函数\n",[37,32518,32519,32521,32524],{"class":39,"line":415},[37,32520,32285],{"class":54},[37,32522,32523],{"class":2320}," train_model_process",[37,32525,32526],{"class":50},"(model,train_dataloader,val_dataloader,num_epochs):\n",[37,32528,32529,32531,32533,32535,32537,32539,32541,32543,32546],{"class":39,"line":420},[37,32530,31576],{"class":50},[37,32532,55],{"class":54},[37,32534,30791],{"class":50},[37,32536,31583],{"class":185},[37,32538,2069],{"class":54},[37,32540,31588],{"class":50},[37,32542,2066],{"class":54},[37,32544,32545],{"class":185}," 'cpu'",[37,32547,280],{"class":50},[37,32549,32550],{"class":39,"line":425},[37,32551,2757],{"emptyLinePlaceholder":454},[37,32553,32554],{"class":39,"line":431},[37,32555,2757],{"emptyLinePlaceholder":454},[37,32557,32558],{"class":39,"line":436},[37,32559,32560],{"class":43},"    # 定义优化器\n",[37,32562,32563],{"class":39,"line":442},[37,32564,32565],{"class":43},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[37,32567,32568],{"class":39,"line":8374},[37,32569,32570],{"class":43},"    # lr为学习率\n",[37,32572,32573,32576,32578,32581,32584,32586,32589],{"class":39,"line":8386},[37,32574,32575],{"class":50},"    optimizer",[37,32577,55],{"class":54},[37,32579,32580],{"class":50},"torch.optim.Adam(model.parameters(),",[37,32582,32583],{"class":159},"lr",[37,32585,55],{"class":54},[37,32587,32588],{"class":61},"0.001",[37,32590,280],{"class":50},[37,32592,32593],{"class":39,"line":8398},[37,32594,2757],{"emptyLinePlaceholder":454},[37,32596,32597],{"class":39,"line":10057},[37,32598,32599],{"class":43},"    # 定义损失函数使用交叉熵损失函数\n",[37,32601,32602,32605,32607],{"class":39,"line":10082},[37,32603,32604],{"class":50},"    criterion",[37,32606,55],{"class":54},[37,32608,32609],{"class":50},"nn.CrossEntropyLoss()\n",[37,32611,32612],{"class":39,"line":10105},[37,32613,2757],{"emptyLinePlaceholder":454},[37,32615,32616],{"class":39,"line":10129},[37,32617,32618],{"class":43},"    # 将模型放到GPU中进行训练\n",[37,32620,32621,32623,32625],{"class":39,"line":10134},[37,32622,31628],{"class":50},[37,32624,55],{"class":54},[37,32626,32627],{"class":50},"model.to(device)\n",[37,32629,32630],{"class":39,"line":10139},[37,32631,32632],{"class":43},"    # 复制当前模型的参数\n",[37,32634,32635],{"class":39,"line":10144},[37,32636,32637],{"class":43},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[37,32639,32640],{"class":39,"line":10153},[37,32641,32642],{"class":43},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[37,32644,32645,32648,32650],{"class":39,"line":10158},[37,32646,32647],{"class":50},"    best_model_wts",[37,32649,55],{"class":54},[37,32651,32652],{"class":50},"copy.deepcopy(model.state_dict())\n",[37,32654,32655],{"class":39,"line":10164},[37,32656,2757],{"emptyLinePlaceholder":454},[37,32658,32659],{"class":39,"line":10185},[37,32660,2757],{"emptyLinePlaceholder":454},[37,32662,32663],{"class":39,"line":10191},[37,32664,32665],{"class":43},"    # 初始化参数\n",[37,32667,32668],{"class":39,"line":10205},[37,32669,32670],{"class":43},"    # 最高准确度\n",[37,32672,32673,32676,32678],{"class":39,"line":10211},[37,32674,32675],{"class":50},"    best_acc",[37,32677,55],{"class":54},[37,32679,32680],{"class":61},"0.0\n",[37,32682,32683],{"class":39,"line":10238},[37,32684,32685],{"class":43},"    # 训练集损失列表\n",[37,32687,32688,32691,32693],{"class":39,"line":10247},[37,32689,32690],{"class":50},"    train_loss_all",[37,32692,55],{"class":54},[37,32694,32695],{"class":50},"[]\n",[37,32697,32698],{"class":39,"line":10253},[37,32699,32700],{"class":43},"    # 验证集函数列表\n",[37,32702,32703,32706,32708],{"class":39,"line":10261},[37,32704,32705],{"class":50},"    val_loss_all",[37,32707,55],{"class":54},[37,32709,32695],{"class":50},[37,32711,32712],{"class":39,"line":10266},[37,32713,32714],{"class":43},"    # 训练集准确度列表\n",[37,32716,32717,32720,32722],{"class":39,"line":16945},[37,32718,32719],{"class":50},"    train_acc_all",[37,32721,55],{"class":54},[37,32723,32695],{"class":50},[37,32725,32726],{"class":39,"line":16951},[37,32727,32728],{"class":43},"    # 验证集准确度列表\n",[37,32730,32731,32734,32736],{"class":39,"line":16974},[37,32732,32733],{"class":50},"    val_acc_all",[37,32735,55],{"class":54},[37,32737,32695],{"class":50},[37,32739,32740],{"class":39,"line":16980},[37,32741,2757],{"emptyLinePlaceholder":454},[37,32743,32744],{"class":39,"line":17003},[37,32745,32746],{"class":43},"    # 保存当前时间--->方便看每轮训练的时间\n",[37,32748,32749,32752,32754],{"class":39,"line":17017},[37,32750,32751],{"class":50},"    since",[37,32753,55],{"class":54},[37,32755,32756],{"class":50},"time.time()\n",[37,32758,32759],{"class":39,"line":17037},[37,32760,2757],{"emptyLinePlaceholder":454},[37,32762,32763],{"class":39,"line":17043},[37,32764,2757],{"emptyLinePlaceholder":454},[37,32766,32767],{"class":39,"line":17054},[37,32768,32769],{"class":43},"    # 准备工作完成--->开始训练模型\n",[37,32771,32772,32774,32777,32779,32782],{"class":39,"line":17077},[37,32773,3551],{"class":54},[37,32775,32776],{"class":50}," epoch ",[37,32778,26385],{"class":54},[37,32780,32781],{"class":61}," range",[37,32783,32784],{"class":50},"(num_epochs):\n",[37,32786,32787,32790,32792,32795,32798,32800,32802,32804,32807,32809,32811],{"class":39,"line":17099},[37,32788,32789],{"class":61},"        print",[37,32791,165],{"class":50},[37,32793,32794],{"class":185},"\"Epoch ",[37,32796,32797],{"class":61},"{}",[37,32799,1094],{"class":185},[37,32801,32797],{"class":61},[37,32803,772],{"class":185},[37,32805,32806],{"class":50},".format(epoch,num_epochs",[37,32808,384],{"class":54},[37,32810,332],{"class":61},[37,32812,175],{"class":50},[37,32814,32815,32817,32819,32822,32824,32826],{"class":39,"line":17104},[37,32816,32789],{"class":61},[37,32818,165],{"class":50},[37,32820,32821],{"class":185},"\"-\"",[37,32823,967],{"class":54},[37,32825,98],{"class":61},[37,32827,280],{"class":50},[37,32829,32830],{"class":39,"line":17110},[37,32831,2757],{"emptyLinePlaceholder":454},[37,32833,32834],{"class":39,"line":17124},[37,32835,32836],{"class":43},"        # 初始化参数\n",[37,32838,32839],{"class":39,"line":17137},[37,32840,32841],{"class":43},"        # 训练集损失函数\n",[37,32843,32844,32847,32849],{"class":39,"line":17142},[37,32845,32846],{"class":50},"        train_loss",[37,32848,55],{"class":54},[37,32850,32680],{"class":61},[37,32852,32853],{"class":39,"line":17156},[37,32854,32855],{"class":43},"        # 训练集准确度\n",[37,32857,32858,32861,32863],{"class":39,"line":17161},[37,32859,32860],{"class":50},"        train_corrects",[37,32862,55],{"class":54},[37,32864,3435],{"class":61},[37,32866,32867],{"class":39,"line":17167},[37,32868,32869],{"class":43},"        # 验证集损失函数\n",[37,32871,32872,32875,32877],{"class":39,"line":17172},[37,32873,32874],{"class":50},"        val_loss",[37,32876,55],{"class":54},[37,32878,32680],{"class":61},[37,32880,32881],{"class":39,"line":17186},[37,32882,32883],{"class":43},"        # 验证集准确度\n",[37,32885,32886,32889,32891],{"class":39,"line":17191},[37,32887,32888],{"class":50},"        val_corrects",[37,32890,55],{"class":54},[37,32892,3435],{"class":61},[37,32894,32895],{"class":39,"line":17196},[37,32896,32897],{"class":43},"        # 训练集样本数量\n",[37,32899,32900,32903,32905],{"class":39,"line":17210},[37,32901,32902],{"class":50},"        train_num",[37,32904,55],{"class":54},[37,32906,3435],{"class":61},[37,32908,32909],{"class":39,"line":17222},[37,32910,32911],{"class":43},"        # 验证集样本数量\n",[37,32913,32914,32917,32919],{"class":39,"line":17227},[37,32915,32916],{"class":50},"        val_num",[37,32918,55],{"class":54},[37,32920,3435],{"class":61},[37,32922,32923],{"class":39,"line":17240},[37,32924,32925],{"class":43},"        # 将数据放到设备,并开始训练\n",[37,32927,32928,32930,32932,32934,32936],{"class":39,"line":17245},[37,32929,3753],{"class":54},[37,32931,31939],{"class":50},[37,32933,26385],{"class":54},[37,32935,31944],{"class":61},[37,32937,32938],{"class":50},"(train_dataloader):\n",[37,32940,32941],{"class":39,"line":17250},[37,32942,32943],{"class":43},"            # 将特征放入到训练设备\n",[37,32945,32946,32949,32951],{"class":39,"line":17255},[37,32947,32948],{"class":50},"            b_x",[37,32950,55],{"class":54},[37,32952,32953],{"class":50},"b_x.to(device)\n",[37,32955,32956],{"class":39,"line":17268},[37,32957,32958],{"class":43},"            # 将标签放入到训练设备当中\n",[37,32960,32961,32964,32966],{"class":39,"line":17273},[37,32962,32963],{"class":50},"            b_y",[37,32965,55],{"class":54},[37,32967,32968],{"class":50},"b_y.to(device)\n",[37,32970,32972],{"class":39,"line":32971},98,[37,32973,32974],{"class":43},"            # 设置模型为训练模式\n",[37,32976,32978],{"class":39,"line":32977},99,[37,32979,32980],{"class":50},"            model.train()\n",[37,32982,32984],{"class":39,"line":32983},100,[37,32985,32986],{"class":43},"            # 将数据放到模型当中,开始前向传播\n",[37,32988,32990],{"class":39,"line":32989},101,[37,32991,32992],{"class":43},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[37,32994,32996,32999,33001],{"class":39,"line":32995},102,[37,32997,32998],{"class":50},"            output",[37,33000,55],{"class":54},[37,33002,33003],{"class":50},"model(b_x)\n",[37,33005,33007],{"class":39,"line":33006},103,[37,33008,33009],{"class":43},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[37,33011,33013,33016,33018,33021,33024,33026,33028],{"class":39,"line":33012},104,[37,33014,33015],{"class":50},"            pre_lab",[37,33017,55],{"class":54},[37,33019,33020],{"class":50},"torch.argmax(output,",[37,33022,33023],{"class":159},"dim",[37,33025,55],{"class":54},[37,33027,332],{"class":61},[37,33029,280],{"class":50},[37,33031,33033],{"class":39,"line":33032},105,[37,33034,33035],{"class":43},"            # 计算每一个batch的损失函数\n",[37,33037,33039,33042,33044],{"class":39,"line":33038},106,[37,33040,33041],{"class":50},"            loss",[37,33043,55],{"class":54},[37,33045,33046],{"class":50},"criterion(output,b_y)\n",[37,33048,33050],{"class":39,"line":33049},107,[37,33051,33052],{"class":43},"            # 将梯度初始化为0\n",[37,33054,33056],{"class":39,"line":33055},108,[37,33057,33058],{"class":50},"            optimizer.zero_grad()\n",[37,33060,33062],{"class":39,"line":33061},109,[37,33063,33064],{"class":43},"            # 梯度置为0后再进行反向传播\n",[37,33066,33068],{"class":39,"line":33067},110,[37,33069,33070],{"class":50},"            loss.backward()\n",[37,33072,33074],{"class":39,"line":33073},111,[37,33075,33076],{"class":43},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[37,33078,33080],{"class":39,"line":33079},112,[37,33081,33082],{"class":50},"            optimizer.step()\n",[37,33084,33086],{"class":39,"line":33085},113,[37,33087,33088],{"class":43},"            # loss.item()指的是batch的平均损失\n",[37,33090,33092,33095,33097,33100,33102,33105,33107],{"class":39,"line":33091},114,[37,33093,33094],{"class":50},"            train_loss",[37,33096,9818],{"class":54},[37,33098,33099],{"class":50},"loss.item()",[37,33101,967],{"class":54},[37,33103,33104],{"class":50},"b_x.size(",[37,33106,135],{"class":61},[37,33108,280],{"class":50},[37,33110,33112],{"class":39,"line":33111},115,[37,33113,33114],{"class":43},"            # 计算每个批次中正确预测的数量\n",[37,33116,33118,33121,33123,33126,33128],{"class":39,"line":33117},116,[37,33119,33120],{"class":50},"            train_corrects",[37,33122,9818],{"class":54},[37,33124,33125],{"class":50},"torch.sum(pre_lab",[37,33127,3299],{"class":54},[37,33129,33130],{"class":50},"b_y.data)\n",[37,33132,33134],{"class":39,"line":33133},117,[37,33135,33136],{"class":43},"            # 计算目前为止一共处理了多少样本\n",[37,33138,33140,33143,33145,33147,33149],{"class":39,"line":33139},118,[37,33141,33142],{"class":50},"            train_num",[37,33144,9818],{"class":54},[37,33146,33104],{"class":50},[37,33148,135],{"class":61},[37,33150,280],{"class":50},[37,33152,33154],{"class":39,"line":33153},119,[37,33155,33156],{"class":43},"        # 验证数据\n",[37,33158,33160,33162,33165,33167,33169],{"class":39,"line":33159},120,[37,33161,3753],{"class":54},[37,33163,33164],{"class":50}," step ,(b_x,b_y) ",[37,33166,26385],{"class":54},[37,33168,31944],{"class":61},[37,33170,33171],{"class":50},"(val_dataloader):\n",[37,33173,33175],{"class":39,"line":33174},121,[37,33176,33177],{"class":43},"            # 将特征放到验证设备当中\n",[37,33179,33181,33183,33185],{"class":39,"line":33180},122,[37,33182,32948],{"class":50},[37,33184,55],{"class":54},[37,33186,32953],{"class":50},[37,33188,33190],{"class":39,"line":33189},123,[37,33191,33192],{"class":43},"            # 将标签放到放到训练设备当中\n",[37,33194,33196,33198,33200],{"class":39,"line":33195},124,[37,33197,32963],{"class":50},[37,33199,55],{"class":54},[37,33201,32968],{"class":50},[37,33203,33205],{"class":39,"line":33204},125,[37,33206,33207],{"class":43},"            # 开启验证模式，设置模型为评估模式\n",[37,33209,33211],{"class":39,"line":33210},126,[37,33212,33213],{"class":50},"            model.eval()\n",[37,33215,33217,33220],{"class":39,"line":33216},127,[37,33218,33219],{"class":54},"            with",[37,33221,33222],{"class":50}," torch.no_grad():\n",[37,33224,33226],{"class":39,"line":33225},128,[37,33227,33228],{"class":43},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[37,33230,33232,33235,33237],{"class":39,"line":33231},129,[37,33233,33234],{"class":50},"                output ",[37,33236,55],{"class":54},[37,33238,33239],{"class":50}," model(b_x)\n",[37,33241,33243],{"class":39,"line":33242},130,[37,33244,33245],{"class":43},"                # 查找每一行中最大值对应的下标\n",[37,33247,33249,33252,33254,33257,33259,33261,33263],{"class":39,"line":33248},131,[37,33250,33251],{"class":50},"                pre_lab ",[37,33253,55],{"class":54},[37,33255,33256],{"class":50}," torch.argmax(output, ",[37,33258,33023],{"class":159},[37,33260,55],{"class":54},[37,33262,332],{"class":61},[37,33264,280],{"class":50},[37,33266,33268],{"class":39,"line":33267},132,[37,33269,33270],{"class":43},"                # 计算验证集上的当前 batch 损失\n",[37,33272,33274,33277,33279],{"class":39,"line":33273},133,[37,33275,33276],{"class":50},"                val_batch_loss ",[37,33278,55],{"class":54},[37,33280,33281],{"class":50}," criterion(output, b_y)\n",[37,33283,33285],{"class":39,"line":33284},134,[37,33286,33287],{"class":43},"                # 对损失函数进行累加（按样本数加权）\n",[37,33289,33291,33294,33296,33299,33301,33304,33306],{"class":39,"line":33290},135,[37,33292,33293],{"class":50},"                val_loss ",[37,33295,9818],{"class":54},[37,33297,33298],{"class":50}," val_batch_loss.item() ",[37,33300,967],{"class":54},[37,33302,33303],{"class":50}," b_x.size(",[37,33305,135],{"class":61},[37,33307,280],{"class":50},[37,33309,33311,33314,33316,33319,33321],{"class":39,"line":33310},136,[37,33312,33313],{"class":50},"                val_corrects ",[37,33315,9818],{"class":54},[37,33317,33318],{"class":50}," torch.sum(pre_lab ",[37,33320,3299],{"class":54},[37,33322,33323],{"class":50}," b_y.data)\n",[37,33325,33327],{"class":39,"line":33326},137,[37,33328,33329],{"class":43},"                # 当前用于验证的样本数量\n",[37,33331,33333,33336,33338,33340,33342],{"class":39,"line":33332},138,[37,33334,33335],{"class":50},"            val_num ",[37,33337,9818],{"class":54},[37,33339,33303],{"class":50},[37,33341,135],{"class":61},[37,33343,280],{"class":50},[37,33345,33347],{"class":39,"line":33346},139,[37,33348,33349],{"class":43},"        # 计算并保存每一次迭代的loss值和准确率\n",[37,33351,33353],{"class":39,"line":33352},140,[37,33354,33355],{"class":43},"        # 计算并保存训练集的loss值\n",[37,33357,33359,33362,33364],{"class":39,"line":33358},141,[37,33360,33361],{"class":50},"        train_loss_all.append(train_loss",[37,33363,1094],{"class":54},[37,33365,33366],{"class":50},"train_num)\n",[37,33368,33370],{"class":39,"line":33369},142,[37,33371,33372],{"class":43},"        # 取双精度\n",[37,33374,33376],{"class":39,"line":33375},143,[37,33377,33378],{"class":43},"        # 计算并保存训练集的准确率\n",[37,33380,33382,33385,33387],{"class":39,"line":33381},144,[37,33383,33384],{"class":50},"        train_acc_all.append(train_corrects.double().item()",[37,33386,1094],{"class":54},[37,33388,33366],{"class":50},[37,33390,33392],{"class":39,"line":33391},145,[37,33393,33394],{"class":43},"        # 计算并保存验证集的loss值\n",[37,33396,33398,33401,33403],{"class":39,"line":33397},146,[37,33399,33400],{"class":50},"        val_loss_all.append(val_loss",[37,33402,1094],{"class":54},[37,33404,33405],{"class":50},"val_num)\n",[37,33407,33409],{"class":39,"line":33408},147,[37,33410,33411],{"class":43},"        # 计算并保存验证集的准确率\n",[37,33413,33415,33418,33420],{"class":39,"line":33414},148,[37,33416,33417],{"class":50},"        val_acc_all.append(val_corrects.double().item()",[37,33419,1094],{"class":54},[37,33421,33405],{"class":50},[37,33423,33425],{"class":39,"line":33424},149,[37,33426,2757],{"emptyLinePlaceholder":454},[37,33428,33430],{"class":39,"line":33429},150,[37,33431,33432],{"class":43},"        # 打印训练一轮的loss值和准确率\n",[37,33434,33436,33438,33440,33442,33444,33447,33449,33452,33454,33457,33459,33461,33463,33465,33468,33470,33472,33475,33477,33479],{"class":39,"line":33435},151,[37,33437,32789],{"class":61},[37,33439,165],{"class":50},[37,33441,3942],{"class":185},[37,33443,32797],{"class":61},[37,33445,33446],{"class":185},"train loss:",[37,33448,1404],{"class":61},[37,33450,33451],{"class":54},":.4f",[37,33453,1454],{"class":61},[37,33455,33456],{"class":185}," train acc:",[37,33458,1404],{"class":61},[37,33460,33451],{"class":54},[37,33462,1454],{"class":61},[37,33464,3942],{"class":185},[37,33466,33467],{"class":50},".format(epoch,train_loss_all[",[37,33469,384],{"class":54},[37,33471,332],{"class":61},[37,33473,33474],{"class":50},"],train_acc_all[",[37,33476,384],{"class":54},[37,33478,332],{"class":61},[37,33480,33481],{"class":50},"]))\n",[37,33483,33485,33487,33489,33491,33493,33496,33498,33500,33502,33505,33507,33509,33511,33513,33516,33518,33520,33523,33525,33527],{"class":39,"line":33484},152,[37,33486,32789],{"class":61},[37,33488,165],{"class":50},[37,33490,3942],{"class":185},[37,33492,32797],{"class":61},[37,33494,33495],{"class":185},"val loss:",[37,33497,1404],{"class":61},[37,33499,33451],{"class":54},[37,33501,1454],{"class":61},[37,33503,33504],{"class":185}," val acc:",[37,33506,1404],{"class":61},[37,33508,33451],{"class":54},[37,33510,1454],{"class":61},[37,33512,3942],{"class":185},[37,33514,33515],{"class":50},".format(epoch,val_loss_all[",[37,33517,384],{"class":54},[37,33519,332],{"class":61},[37,33521,33522],{"class":50},"],val_acc_all[",[37,33524,384],{"class":54},[37,33526,332],{"class":61},[37,33528,33481],{"class":50},[37,33530,33532],{"class":39,"line":33531},153,[37,33533,2757],{"emptyLinePlaceholder":454},[37,33535,33537],{"class":39,"line":33536},154,[37,33538,33539],{"class":43},"        # 判断准确度--->保存最优模型\n",[37,33541,33543,33545,33548,33550,33552,33554,33556],{"class":39,"line":33542},155,[37,33544,2854],{"class":54},[37,33546,33547],{"class":50}," val_acc_all[",[37,33549,384],{"class":54},[37,33551,332],{"class":61},[37,33553,1448],{"class":50},[37,33555,1468],{"class":54},[37,33557,33558],{"class":50},"best_acc:\n",[37,33560,33562],{"class":39,"line":33561},156,[37,33563,33564],{"class":43},"            # 保存当前模型准确度\n",[37,33566,33568,33571,33573,33575,33578,33580,33582],{"class":39,"line":33567},157,[37,33569,33570],{"class":50},"            best_acc:",[37,33572,568],{"class":61},[37,33574,55],{"class":54},[37,33576,33577],{"class":50},"val_acc_all[",[37,33579,384],{"class":54},[37,33581,332],{"class":61},[37,33583,389],{"class":50},[37,33585,33587],{"class":39,"line":33586},158,[37,33588,33589],{"class":43},"            # 保存当前的准确度\n",[37,33591,33593],{"class":39,"line":33592},159,[37,33594,33595],{"class":43},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[37,33597,33599,33602,33604],{"class":39,"line":33598},160,[37,33600,33601],{"class":50},"            best_model_wts",[37,33603,55],{"class":54},[37,33605,32652],{"class":50},[37,33607,33609],{"class":39,"line":33608},161,[37,33610,2757],{"emptyLinePlaceholder":454},[37,33612,33614],{"class":39,"line":33613},162,[37,33615,33616],{"class":43},"        # 计算耗时\n",[37,33618,33620,33623,33625,33628,33630],{"class":39,"line":33619},163,[37,33621,33622],{"class":50},"        time_use",[37,33624,55],{"class":54},[37,33626,33627],{"class":50},"time.time()",[37,33629,384],{"class":54},[37,33631,33632],{"class":50},"since\n",[37,33634,33636,33638,33640,33643,33645,33648,33650,33652,33654,33656,33658,33661,33664,33667,33669,33672,33674,33676],{"class":39,"line":33635},164,[37,33637,32789],{"class":61},[37,33639,165],{"class":50},[37,33641,33642],{"class":185},"'训练和验证耗费的时间",[37,33644,1404],{"class":61},[37,33646,33647],{"class":54},":.0f",[37,33649,1454],{"class":61},[37,33651,1054],{"class":185},[37,33653,1404],{"class":61},[37,33655,33647],{"class":54},[37,33657,1454],{"class":61},[37,33659,33660],{"class":185},"s'",[37,33662,33663],{"class":50},".format(time_use",[37,33665,33666],{"class":54},"\u002F\u002F",[37,33668,1415],{"class":61},[37,33670,33671],{"class":50},",time_use",[37,33673,845],{"class":54},[37,33675,1415],{"class":61},[37,33677,175],{"class":50},[37,33679,33681],{"class":39,"line":33680},165,[37,33682,33683],{"class":43},"    # 选择最优参数\n",[37,33685,33687],{"class":39,"line":33686},166,[37,33688,33689],{"class":43},"    # 加载最高准确率下的模型参数\n",[37,33691,33693],{"class":39,"line":33692},167,[37,33694,33695],{"class":43},"    # model.load_state_dict(best_model_wts)\n",[37,33697,33699,33702,33705],{"class":39,"line":33698},168,[37,33700,33701],{"class":50},"    torch.save(model.state_dict(best_model_wts), ",[37,33703,33704],{"class":185},"'.\u002Fbest_model.pth'",[37,33706,280],{"class":50},[37,33708,33710],{"class":39,"line":33709},169,[37,33711,33712],{"class":43},"    # 或者写成\n",[37,33714,33716],{"class":39,"line":33715},170,[37,33717,33718],{"class":43},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[37,33720,33722],{"class":39,"line":33721},171,[37,33723,33724],{"class":43},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[37,33726,33728,33731,33733,33736,33739,33741],{"class":39,"line":33727},172,[37,33729,33730],{"class":50},"    train_process",[37,33732,55],{"class":54},[37,33734,33735],{"class":50},"pd.DataFrame(",[37,33737,33738],{"class":159},"data",[37,33740,55],{"class":54},[37,33742,1922],{"class":50},[37,33744,33746,33749,33751,33754],{"class":39,"line":33745},173,[37,33747,33748],{"class":185},"        \"epoch\"",[37,33750,1368],{"class":50},[37,33752,33753],{"class":61},"range",[37,33755,33756],{"class":50},"(num_epochs),\n",[37,33758,33760,33763],{"class":39,"line":33759},174,[37,33761,33762],{"class":185},"        \"train_loss_all\"",[37,33764,33765],{"class":50},":train_loss_all,\n",[37,33767,33769,33772],{"class":39,"line":33768},175,[37,33770,33771],{"class":185},"        \"val_loss_all\"",[37,33773,33774],{"class":50},":val_loss_all,\n",[37,33776,33778,33781],{"class":39,"line":33777},176,[37,33779,33780],{"class":185},"        \"train_acc_all\"",[37,33782,33783],{"class":50},":train_acc_all,\n",[37,33785,33787,33790],{"class":39,"line":33786},177,[37,33788,33789],{"class":185},"        \"val_acc_all\"",[37,33791,33792],{"class":50},":val_acc_all\n",[37,33794,33796],{"class":39,"line":33795},178,[37,33797,33798],{"class":50},"    })\n",[37,33800,33802],{"class":39,"line":33801},179,[37,33803,33804],{"class":43},"    # 返回训练保存的过程\n",[37,33806,33808,33810],{"class":39,"line":33807},180,[37,33809,4440],{"class":54},[37,33811,33812],{"class":50}," train_process\n",[37,33814,33816],{"class":39,"line":33815},181,[37,33817,2757],{"emptyLinePlaceholder":454},[37,33819,33821],{"class":39,"line":33820},182,[37,33822,33823],{"class":43},"# 将loss值和精度按照图片的形式展示出来\n",[37,33825,33827,33829,33832],{"class":39,"line":33826},183,[37,33828,32285],{"class":54},[37,33830,33831],{"class":2320}," matplot_acc_loss",[37,33833,33834],{"class":50},"(train_process):\n",[37,33836,33838],{"class":39,"line":33837},184,[37,33839,33840],{"class":43},"    # 设置图的大小\n",[37,33842,33844,33847,33849,33851,33853,33855,33857,33859],{"class":39,"line":33843},185,[37,33845,33846],{"class":50},"    plt.figure(",[37,33848,32031],{"class":159},[37,33850,55],{"class":54},[37,33852,165],{"class":50},[37,33854,68],{"class":61},[37,33856,65],{"class":50},[37,33858,168],{"class":61},[37,33860,175],{"class":50},[37,33862,33864],{"class":39,"line":33863},186,[37,33865,33866],{"class":43},"    # 设置图中有几张图\n",[37,33868,33870],{"class":39,"line":33869},187,[37,33871,33872],{"class":43},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[37,33874,33876],{"class":39,"line":33875},188,[37,33877,33878],{"class":43},"    # ①loss图\n",[37,33880,33882,33884,33886,33888,33890,33892,33894],{"class":39,"line":33881},189,[37,33883,32065],{"class":50},[37,33885,332],{"class":61},[37,33887,65],{"class":50},[37,33889,602],{"class":61},[37,33891,65],{"class":50},[37,33893,332],{"class":61},[37,33895,280],{"class":50},[37,33897,33899],{"class":39,"line":33898},190,[37,33900,33901],{"class":43},"    # 补充:\n",[37,33903,33905],{"class":39,"line":33904},191,[37,33906,33907],{"class":43},"    # plt.subplot(nrows, ncols, index)\n",[37,33909,33911],{"class":39,"line":33910},192,[37,33912,33913],{"class":43},"    # nrows：行数\n",[37,33915,33917],{"class":39,"line":33916},193,[37,33918,33919],{"class":43},"    # ncols：列数\n",[37,33921,33923],{"class":39,"line":33922},194,[37,33924,33925],{"class":43},"    # index：目前选中第几个子图（从1开始）\n",[37,33927,33929,33932,33935,33938,33941,33943,33946,33948,33951],{"class":39,"line":33928},195,[37,33930,33931],{"class":50},"    plt.plot(train_process[",[37,33933,33934],{"class":185},"\"epoch\"",[37,33936,33937],{"class":50},"],train_process.train_loss_all,",[37,33939,33940],{"class":185},"'ro-'",[37,33942,65],{"class":50},[37,33944,33945],{"class":159},"label",[37,33947,55],{"class":54},[37,33949,33950],{"class":185},"'train loss'",[37,33952,280],{"class":50},[37,33954,33956,33958,33960,33963,33966,33968,33970,33972,33975],{"class":39,"line":33955},196,[37,33957,33931],{"class":50},[37,33959,33934],{"class":185},[37,33961,33962],{"class":50},"],train_process.val_loss_all,",[37,33964,33965],{"class":185},"'bs--'",[37,33967,65],{"class":50},[37,33969,33945],{"class":159},[37,33971,55],{"class":54},[37,33973,33974],{"class":185},"'val loss'",[37,33976,280],{"class":50},[37,33978,33980],{"class":39,"line":33979},197,[37,33981,33982],{"class":43},"    # 添加一个图例\n",[37,33984,33986],{"class":39,"line":33985},198,[37,33987,33988],{"class":50},"    plt.legend()\n",[37,33990,33992],{"class":39,"line":33991},199,[37,33993,33994],{"class":43},"    # 给轴添加标签\n",[37,33996,33998,34001,34004],{"class":39,"line":33997},200,[37,33999,34000],{"class":50},"    plt.xlabel(",[37,34002,34003],{"class":185},"'epoch'",[37,34005,280],{"class":50},[37,34007,34009,34012,34015],{"class":39,"line":34008},201,[37,34010,34011],{"class":50},"    plt.ylabel(",[37,34013,34014],{"class":185},"'loss'",[37,34016,280],{"class":50},[37,34018,34020],{"class":39,"line":34019},202,[37,34021,34022],{"class":43},"    # ②准确度图\n",[37,34024,34026,34028,34030,34032,34034,34036,34038],{"class":39,"line":34025},203,[37,34027,32065],{"class":50},[37,34029,332],{"class":61},[37,34031,65],{"class":50},[37,34033,602],{"class":61},[37,34035,65],{"class":50},[37,34037,602],{"class":61},[37,34039,280],{"class":50},[37,34041,34043,34045,34047,34050,34052,34054,34056,34058,34061],{"class":39,"line":34042},204,[37,34044,33931],{"class":50},[37,34046,33934],{"class":185},[37,34048,34049],{"class":50},"],train_process.train_acc_all,",[37,34051,33940],{"class":185},[37,34053,65],{"class":50},[37,34055,33945],{"class":159},[37,34057,55],{"class":54},[37,34059,34060],{"class":185},"'train acc'",[37,34062,280],{"class":50},[37,34064,34066,34068,34070,34073,34075,34077,34079,34081,34084],{"class":39,"line":34065},205,[37,34067,33931],{"class":50},[37,34069,33934],{"class":185},[37,34071,34072],{"class":50},"],train_process.val_acc_all,",[37,34074,33965],{"class":185},[37,34076,65],{"class":50},[37,34078,33945],{"class":159},[37,34080,55],{"class":54},[37,34082,34083],{"class":185},"'val acc'",[37,34085,280],{"class":50},[37,34087,34089],{"class":39,"line":34088},206,[37,34090,34091],{"class":43},"    # 添加图例\n",[37,34093,34095],{"class":39,"line":34094},207,[37,34096,33988],{"class":50},[37,34098,34100,34102,34104],{"class":39,"line":34099},208,[37,34101,34000],{"class":50},[37,34103,33934],{"class":185},[37,34105,280],{"class":50},[37,34107,34109,34111,34114],{"class":39,"line":34108},209,[37,34110,34011],{"class":50},[37,34112,34113],{"class":185},"\"acc\"",[37,34115,280],{"class":50},[37,34117,34119],{"class":39,"line":34118},210,[37,34120,34121],{"class":50},"    plt.show()\n",[37,34123,34125],{"class":39,"line":34124},211,[37,34126,2757],{"emptyLinePlaceholder":454},[37,34128,34130],{"class":39,"line":34129},212,[37,34131,34132],{"class":43},"# 正式开始训练:\n",[37,34134,34136,34138,34140,34142,34144],{"class":39,"line":34135},213,[37,34137,1907],{"class":54},[37,34139,31559],{"class":61},[37,34141,3299],{"class":54},[37,34143,31564],{"class":185},[37,34145,4089],{"class":50},[37,34147,34149],{"class":39,"line":34148},214,[37,34150,34151],{"class":43},"    # 将模型实例化\n",[37,34153,34155,34158,34160],{"class":39,"line":34154},215,[37,34156,34157],{"class":50},"    LeNet",[37,34159,55],{"class":54},[37,34161,34162],{"class":50},"LeNet()\n",[37,34164,34166,34169,34171],{"class":39,"line":34165},216,[37,34167,34168],{"class":50},"    train_dataloader,val_dataloader",[37,34170,55],{"class":54},[37,34172,34173],{"class":50},"train_val_data_process()\n",[37,34175,34177,34179,34181,34184,34187,34189,34191],{"class":39,"line":34176},217,[37,34178,33730],{"class":50},[37,34180,55],{"class":54},[37,34182,34183],{"class":50},"train_model_process(LeNet,train_dataloader,val_dataloader,",[37,34185,34186],{"class":159},"num_epochs",[37,34188,55],{"class":54},[37,34190,1210],{"class":61},[37,34192,280],{"class":50},[37,34194,34196],{"class":39,"line":34195},218,[37,34197,34198],{"class":50},"    matplot_acc_loss(train_process)\n",[14,34200,34201],{},"画图的补充点学习：",[14,34203,34204],{},[1838,34205],{"alt":32,"src":34206},"\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",[481,34208,34209],{"start":104},[484,34210,34211],{},"测试",[27,34213,34215],{"className":29,"code":34214,"language":31,"meta":32,"style":32},"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",[34,34216,34217,34223,34233,34245,34255,34260,34270,34280,34284,34289,34298,34315,34327,34344,34355,34371,34376,34387,34398,34409,34416,34420,34425,34435,34440,34457,34465,34469,34474,34483,34492,34496,34501,34506,34511,34518,34523,34535,34545,34555,34560,34564,34569,34578,34583,34599,34604,34609,34614,34628,34633,34647,34651,34656,34671,34676,34688,34692,34697,34709,34714,34722,34727,34732,34742,34747,34756,34761,34766,34770,34775,34780,34796,34804,34809,34814,34873,34879,34884,34895,34903,34911,34915,34920,34924,34929,34937,34942,34958,34963,34973,34983],{"__ignoreMap":32},[37,34218,34219,34221],{"class":39,"line":40},[37,34220,30732],{"class":54},[37,34222,30735],{"class":50},[37,34224,34225,34227,34229,34231],{"class":39,"line":47},[37,34226,30732],{"class":54},[37,34228,31754],{"class":50},[37,34230,31722],{"class":54},[37,34232,31759],{"class":50},[37,34234,34235,34237,34240,34242],{"class":39,"line":104},[37,34236,31076],{"class":54},[37,34238,34239],{"class":50}," jupyter_client.consoleapp ",[37,34241,30732],{"class":54},[37,34243,34244],{"class":50}," classes\n",[37,34246,34247,34249,34251,34253],{"class":39,"line":113},[37,34248,31076],{"class":54},[37,34250,31737],{"class":50},[37,34252,30732],{"class":54},[37,34254,31742],{"class":50},[37,34256,34257],{"class":39,"line":189},[37,34258,34259],{"class":43},"# 导入数据集\n",[37,34261,34262,34264,34266,34268],{"class":39,"line":195},[37,34263,31076],{"class":54},[37,34265,31707],{"class":50},[37,34267,30732],{"class":54},[37,34269,31712],{"class":50},[37,34271,34272,34274,34276,34278],{"class":39,"line":201},[37,34273,31076],{"class":54},[37,34275,32252],{"class":50},[37,34277,30732],{"class":54},[37,34279,32257],{"class":50},[37,34281,34282],{"class":39,"line":207},[37,34283,2757],{"emptyLinePlaceholder":454},[37,34285,34286],{"class":39,"line":213},[37,34287,34288],{"class":43},"# 测试数据处理\n",[37,34290,34291,34293,34296],{"class":39,"line":218},[37,34292,32285],{"class":54},[37,34294,34295],{"class":2320}," test_data_process",[37,34297,32291],{"class":50},[37,34299,34300,34303,34305,34307,34309,34311,34313],{"class":39,"line":227},[37,34301,34302],{"class":50},"    test_data",[37,34304,55],{"class":54},[37,34306,31794],{"class":50},[37,34308,31797],{"class":159},[37,34310,55],{"class":54},[37,34312,31802],{"class":185},[37,34314,31805],{"class":50},[37,34316,34317,34320,34322,34325],{"class":39,"line":232},[37,34318,34319],{"class":159},"                           train",[37,34321,55],{"class":54},[37,34323,34324],{"class":61},"False",[37,34326,31805],{"class":50},[37,34328,34329,34332,34334,34336,34338,34340,34342],{"class":39,"line":238},[37,34330,34331],{"class":159},"                           transform",[37,34333,55],{"class":54},[37,34335,31832],{"class":50},[37,34337,160],{"class":159},[37,34339,55],{"class":54},[37,34341,1409],{"class":61},[37,34343,31842],{"class":50},[37,34345,34346,34349,34351,34353],{"class":39,"line":244},[37,34347,34348],{"class":159},"                           download",[37,34350,55],{"class":54},[37,34352,31815],{"class":61},[37,34354,280],{"class":50},[37,34356,34357,34360,34362,34364,34366,34368],{"class":39,"line":250},[37,34358,34359],{"class":50},"    test_dataloader",[37,34361,55],{"class":54},[37,34363,31872],{"class":50},[37,34365,31875],{"class":159},[37,34367,55],{"class":54},[37,34369,34370],{"class":50},"test_data,\n",[37,34372,34373],{"class":39,"line":256},[37,34374,34375],{"class":43},"                                    # 这里是一张一张进行测试\n",[37,34377,34378,34381,34383,34385],{"class":39,"line":261},[37,34379,34380],{"class":159},"                                    batch_size",[37,34382,55],{"class":54},[37,34384,332],{"class":61},[37,34386,31805],{"class":50},[37,34388,34389,34392,34394,34396],{"class":39,"line":267},[37,34390,34391],{"class":159},"                                    shuffle",[37,34393,55],{"class":54},[37,34395,31815],{"class":61},[37,34397,31805],{"class":50},[37,34399,34400,34403,34405,34407],{"class":39,"line":283},[37,34401,34402],{"class":159},"                                    num_workers",[37,34404,55],{"class":54},[37,34406,135],{"class":61},[37,34408,280],{"class":50},[37,34410,34411,34413],{"class":39,"line":288},[37,34412,4440],{"class":54},[37,34414,34415],{"class":50}," test_dataloader\n",[37,34417,34418],{"class":39,"line":294},[37,34419,2757],{"emptyLinePlaceholder":454},[37,34421,34422],{"class":39,"line":300},[37,34423,34424],{"class":43},"# 定义模型测试函数\n",[37,34426,34427,34429,34432],{"class":39,"line":306},[37,34428,32285],{"class":54},[37,34430,34431],{"class":2320}," test_model_process",[37,34433,34434],{"class":50},"(model,test_dataloader):\n",[37,34436,34437],{"class":39,"line":312},[37,34438,34439],{"class":43},"    # 将模型放到设备当中，先进行判断\n",[37,34441,34442,34444,34446,34448,34450,34452,34454],{"class":39,"line":317},[37,34443,31576],{"class":50},[37,34445,55],{"class":54},[37,34447,31583],{"class":185},[37,34449,2069],{"class":54},[37,34451,31588],{"class":50},[37,34453,2066],{"class":54},[37,34455,34456],{"class":185}," \"cpu\"\n",[37,34458,34459,34461,34463],{"class":39,"line":323},[37,34460,31628],{"class":50},[37,34462,55],{"class":54},[37,34464,32627],{"class":50},[37,34466,34467],{"class":39,"line":337},[37,34468,2757],{"emptyLinePlaceholder":454},[37,34470,34471],{"class":39,"line":342},[37,34472,34473],{"class":43},"    # 设置初始化参数\n",[37,34475,34476,34479,34481],{"class":39,"line":347},[37,34477,34478],{"class":50},"    test_corrects",[37,34480,55],{"class":54},[37,34482,32680],{"class":61},[37,34484,34485,34488,34490],{"class":39,"line":352},[37,34486,34487],{"class":50},"    test_num",[37,34489,55],{"class":54},[37,34491,3435],{"class":61},[37,34493,34494],{"class":39,"line":357},[37,34495,2757],{"emptyLinePlaceholder":454},[37,34497,34498],{"class":39,"line":362},[37,34499,34500],{"class":43},"    # 进行模型测试\n",[37,34502,34503],{"class":39,"line":367},[37,34504,34505],{"class":43},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[37,34507,34508],{"class":39,"line":373},[37,34509,34510],{"class":43},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[37,34512,34513,34516],{"class":39,"line":392},[37,34514,34515],{"class":54},"    with",[37,34517,33222],{"class":50},[37,34519,34520],{"class":39,"line":398},[37,34521,34522],{"class":43},"        # 从数据中进行\n",[37,34524,34525,34527,34530,34532],{"class":39,"line":409},[37,34526,3753],{"class":54},[37,34528,34529],{"class":50}," test_data_x,test_data_y ",[37,34531,26385],{"class":54},[37,34533,34534],{"class":50}," test_dataloader:\n",[37,34536,34537,34540,34542],{"class":39,"line":415},[37,34538,34539],{"class":50},"            test_data_x",[37,34541,55],{"class":54},[37,34543,34544],{"class":50},"test_data_x.to(device)\n",[37,34546,34547,34550,34552],{"class":39,"line":420},[37,34548,34549],{"class":50},"            test_data_y",[37,34551,55],{"class":54},[37,34553,34554],{"class":50},"test_data_y.to(device)\n",[37,34556,34557],{"class":39,"line":425},[37,34558,34559],{"class":43},"            # 设置为验证模式\n",[37,34561,34562],{"class":39,"line":431},[37,34563,33213],{"class":50},[37,34565,34566],{"class":39,"line":436},[37,34567,34568],{"class":43},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[37,34570,34571,34573,34575],{"class":39,"line":442},[37,34572,32998],{"class":50},[37,34574,55],{"class":54},[37,34576,34577],{"class":50},"model(test_data_x)\n",[37,34579,34580],{"class":39,"line":8374},[37,34581,34582],{"class":43},"            # 查找每一行中最大值对应的下标\n",[37,34584,34585,34587,34589,34591,34593,34595,34597],{"class":39,"line":8386},[37,34586,33015],{"class":50},[37,34588,55],{"class":54},[37,34590,33020],{"class":50},[37,34592,33023],{"class":159},[37,34594,55],{"class":54},[37,34596,332],{"class":61},[37,34598,280],{"class":50},[37,34600,34601],{"class":39,"line":8398},[37,34602,34603],{"class":43},"            # 计算正确率\n",[37,34605,34606],{"class":39,"line":10057},[37,34607,34608],{"class":43},"            # .data表示是一个不带梯度信息的tensor\n",[37,34610,34611],{"class":39,"line":10082},[37,34612,34613],{"class":43},"            # 如果预测正确，则准确度test_corrects加1\n",[37,34615,34616,34619,34621,34623,34625],{"class":39,"line":10105},[37,34617,34618],{"class":50},"            test_corrects",[37,34620,9818],{"class":54},[37,34622,33125],{"class":50},[37,34624,3299],{"class":54},[37,34626,34627],{"class":50},"test_data_y.data)\n",[37,34629,34630],{"class":39,"line":10129},[37,34631,34632],{"class":43},"            # 将所有的测试样本进行累计\n",[37,34634,34635,34638,34640,34643,34645],{"class":39,"line":10134},[37,34636,34637],{"class":50},"            test_num",[37,34639,9818],{"class":54},[37,34641,34642],{"class":50},"test_data_x.size(",[37,34644,135],{"class":61},[37,34646,280],{"class":50},[37,34648,34649],{"class":39,"line":10139},[37,34650,2757],{"emptyLinePlaceholder":454},[37,34652,34653],{"class":39,"line":10144},[37,34654,34655],{"class":43},"        # 计算准确度\n",[37,34657,34658,34661,34663,34666,34668],{"class":39,"line":10153},[37,34659,34660],{"class":50},"        test_acc",[37,34662,55],{"class":54},[37,34664,34665],{"class":50},"test_corrects.double().item()",[37,34667,1094],{"class":54},[37,34669,34670],{"class":50},"test_num\n",[37,34672,34673],{"class":39,"line":10158},[37,34674,34675],{"class":43},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[37,34677,34678,34680,34682,34685],{"class":39,"line":10164},[37,34679,32789],{"class":61},[37,34681,165],{"class":50},[37,34683,34684],{"class":185},"\"测试的准确率：\"",[37,34686,34687],{"class":50},",test_acc)\n",[37,34689,34690],{"class":39,"line":10185},[37,34691,2757],{"emptyLinePlaceholder":454},[37,34693,34694],{"class":39,"line":10191},[37,34695,34696],{"class":43},"# 实现模型的测试功能\n",[37,34698,34699,34701,34703,34705,34707],{"class":39,"line":10205},[37,34700,1907],{"class":54},[37,34702,31559],{"class":61},[37,34704,3299],{"class":54},[37,34706,31564],{"class":185},[37,34708,4089],{"class":50},[37,34710,34711],{"class":39,"line":10211},[37,34712,34713],{"class":43},"    # 加载模型\n",[37,34715,34716,34718,34720],{"class":39,"line":10238},[37,34717,31628],{"class":50},[37,34719,55],{"class":54},[37,34721,34162],{"class":50},[37,34723,34724],{"class":39,"line":10247},[37,34725,34726],{"class":43},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[37,34728,34729],{"class":39,"line":10253},[37,34730,34731],{"class":43},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[37,34733,34734,34737,34740],{"class":39,"line":10261},[37,34735,34736],{"class":50},"    model.load_state_dict(torch.load(",[37,34738,34739],{"class":185},"'best_model.pth'",[37,34741,175],{"class":50},[37,34743,34744],{"class":39,"line":10266},[37,34745,34746],{"class":43},"    # 数据加载\n",[37,34748,34749,34751,34753],{"class":39,"line":16945},[37,34750,34359],{"class":50},[37,34752,55],{"class":54},[37,34754,34755],{"class":50},"test_data_process()\n",[37,34757,34758],{"class":39,"line":16951},[37,34759,34760],{"class":43},"    # 加载模型测试的函数\n",[37,34762,34763],{"class":39,"line":16974},[37,34764,34765],{"class":50},"    test_model_process(model,test_dataloader)\n",[37,34767,34768],{"class":39,"line":16980},[37,34769,2757],{"emptyLinePlaceholder":454},[37,34771,34772],{"class":39,"line":17003},[37,34773,34774],{"class":43},"    # 验证集推理实现：\n",[37,34776,34777],{"class":39,"line":17017},[37,34778,34779],{"class":43},"    # 加载数据加载的更详细一些\n",[37,34781,34782,34784,34786,34788,34790,34792,34794],{"class":39,"line":17037},[37,34783,31576],{"class":50},[37,34785,55],{"class":54},[37,34787,31583],{"class":185},[37,34789,2069],{"class":54},[37,34791,31588],{"class":50},[37,34793,2066],{"class":54},[37,34795,34456],{"class":185},[37,34797,34798,34800,34802],{"class":39,"line":17043},[37,34799,31628],{"class":50},[37,34801,55],{"class":54},[37,34803,32627],{"class":50},[37,34805,34806],{"class":39,"line":17054},[37,34807,34808],{"class":43},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[37,34810,34811],{"class":39,"line":17077},[37,34812,34813],{"class":43},"    # 顺序不可改变\n",[37,34815,34816,34819,34821,34823,34826,34828,34831,34833,34836,34838,34841,34843,34846,34848,34851,34853,34856,34858,34861,34863,34866,34868,34871],{"class":39,"line":17099},[37,34817,34818],{"class":50},"    classes",[37,34820,55],{"class":54},[37,34822,1399],{"class":50},[37,34824,34825],{"class":185},"'T-shirt\u002Ftop'",[37,34827,65],{"class":50},[37,34829,34830],{"class":185},"'Trouser'",[37,34832,65],{"class":50},[37,34834,34835],{"class":185},"'Pullover'",[37,34837,65],{"class":50},[37,34839,34840],{"class":185},"'Dress'",[37,34842,65],{"class":50},[37,34844,34845],{"class":185},"'Coat'",[37,34847,65],{"class":50},[37,34849,34850],{"class":185},"'Sandal'",[37,34852,65],{"class":50},[37,34854,34855],{"class":185},"'Shirt'",[37,34857,65],{"class":50},[37,34859,34860],{"class":185},"'Sneaker'",[37,34862,65],{"class":50},[37,34864,34865],{"class":185},"'Bag'",[37,34867,65],{"class":50},[37,34869,34870],{"class":185},"'Ankle boot'",[37,34872,389],{"class":50},[37,34874,34875,34877],{"class":39,"line":17104},[37,34876,34515],{"class":54},[37,34878,33222],{"class":50},[37,34880,34881],{"class":39,"line":17110},[37,34882,34883],{"class":43},"        # 将数据和标签都放到设备当中\n",[37,34885,34886,34888,34891,34893],{"class":39,"line":17124},[37,34887,3753],{"class":54},[37,34889,34890],{"class":50}," b_x,b_y ",[37,34892,26385],{"class":54},[37,34894,34534],{"class":50},[37,34896,34897,34899,34901],{"class":39,"line":17137},[37,34898,32948],{"class":50},[37,34900,55],{"class":54},[37,34902,32953],{"class":50},[37,34904,34905,34907,34909],{"class":39,"line":17142},[37,34906,32963],{"class":50},[37,34908,55],{"class":54},[37,34910,32968],{"class":50},[37,34912,34913],{"class":39,"line":17156},[37,34914,2757],{"emptyLinePlaceholder":454},[37,34916,34917],{"class":39,"line":17161},[37,34918,34919],{"class":43},"            # 设置模型为验证模式\n",[37,34921,34922],{"class":39,"line":17167},[37,34923,33213],{"class":50},[37,34925,34926],{"class":39,"line":17172},[37,34927,34928],{"class":43},"            # 模型推理结果\n",[37,34930,34931,34933,34935],{"class":39,"line":17186},[37,34932,32998],{"class":50},[37,34934,55],{"class":54},[37,34936,33003],{"class":50},[37,34938,34939],{"class":39,"line":17191},[37,34940,34941],{"class":43},"            # 获取最大下标，最大下标就是类别号\n",[37,34943,34944,34946,34948,34950,34952,34954,34956],{"class":39,"line":17196},[37,34945,33015],{"class":50},[37,34947,55],{"class":54},[37,34949,33020],{"class":50},[37,34951,33023],{"class":159},[37,34953,55],{"class":54},[37,34955,332],{"class":61},[37,34957,280],{"class":50},[37,34959,34960],{"class":39,"line":17210},[37,34961,34962],{"class":43},"            # 取出张量中的数值\n",[37,34964,34965,34968,34970],{"class":39,"line":17222},[37,34966,34967],{"class":50},"            result",[37,34969,55],{"class":54},[37,34971,34972],{"class":50},"pre_lab.item()\n",[37,34974,34975,34978,34980],{"class":39,"line":17227},[37,34976,34977],{"class":50},"            label",[37,34979,55],{"class":54},[37,34981,34982],{"class":50},"b_y.item()\n",[37,34984,34985,34988,34990,34993,34996,34999,35001,35004],{"class":39,"line":17240},[37,34986,34987],{"class":61},"            print",[37,34989,165],{"class":50},[37,34991,34992],{"class":185},"\"预测值：\"",[37,34994,34995],{"class":50},",classes[result],",[37,34997,34998],{"class":185},"\"------\"",[37,35000,65],{"class":50},[37,35002,35003],{"class":185},"\"真实值：\"",[37,35005,35006],{"class":50},",classes[label])\n",[14,35008,35009],{},"（2）AlexNet",[481,35011,35012],{},[484,35013,35014],{},"神经网络构建",[27,35016,35018],{"className":29,"code":35017,"language":31,"meta":32,"style":32},"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",[34,35019,35020,35026,35036,35046,35058,35062,35079,35087,35102,35114,35156,35183,35226,35252,35296,35339,35382,35409,35413,35423,35428,35456,35475,35494,35498,35503,35511,35526,35536,35550,35560,35575,35590,35605,35616,35620,35625,35635,35650,35655,35669,35684,35696,35701,35712,35717,35723,35728,35740,35760,35765,35774],{"__ignoreMap":32},[37,35021,35022,35024],{"class":39,"line":40},[37,35023,30732],{"class":54},[37,35025,30735],{"class":50},[37,35027,35028,35030,35032,35034],{"class":39,"line":47},[37,35029,31076],{"class":54},[37,35031,31079],{"class":50},[37,35033,30732],{"class":54},[37,35035,31084],{"class":50},[37,35037,35038,35040,35042,35044],{"class":39,"line":104},[37,35039,31076],{"class":54},[37,35041,31096],{"class":50},[37,35043,30732],{"class":54},[37,35045,31101],{"class":50},[37,35047,35048,35050,35053,35055],{"class":39,"line":113},[37,35049,30732],{"class":54},[37,35051,35052],{"class":50}," torch.nn.functional ",[37,35054,31722],{"class":54},[37,35056,35057],{"class":50}," F\n",[37,35059,35060],{"class":39,"line":189},[37,35061,2757],{"emptyLinePlaceholder":454},[37,35063,35064,35066,35069,35071,35073,35075,35077],{"class":39,"line":195},[37,35065,15035],{"class":54},[37,35067,35068],{"class":2320}," AlexNet",[37,35070,165],{"class":50},[37,35072,31117],{"class":2320},[37,35074,1068],{"class":50},[37,35076,31122],{"class":2320},[37,35078,31125],{"class":50},[37,35080,35081,35083,35085],{"class":39,"line":201},[37,35082,31140],{"class":54},[37,35084,31143],{"class":61},[37,35086,31146],{"class":50},[37,35088,35089,35091,35094,35096,35098,35100],{"class":39,"line":207},[37,35090,31156],{"class":61},[37,35092,35093],{"class":50},"(AlexNet,",[37,35095,31162],{"class":61},[37,35097,31165],{"class":50},[37,35099,31168],{"class":61},[37,35101,2333],{"class":50},[37,35103,35104,35106,35109,35111],{"class":39,"line":213},[37,35105,31184],{"class":61},[37,35107,35108],{"class":50},".ReLu",[37,35110,55],{"class":54},[37,35112,35113],{"class":50},"nn.ReLU()\n",[37,35115,35116,35118,35120,35122,35124,35126,35128,35130,35132,35134,35136,35138,35140,35142,35144,35146,35148,35150,35152,35154],{"class":39,"line":218},[37,35117,31184],{"class":61},[37,35119,31187],{"class":50},[37,35121,55],{"class":54},[37,35123,31192],{"class":50},[37,35125,31195],{"class":159},[37,35127,55],{"class":54},[37,35129,332],{"class":61},[37,35131,65],{"class":50},[37,35133,31204],{"class":159},[37,35135,55],{"class":54},[37,35137,732],{"class":61},[37,35139,65],{"class":50},[37,35141,31213],{"class":159},[37,35143,55],{"class":54},[37,35145,984],{"class":61},[37,35147,65],{"class":50},[37,35149,31268],{"class":159},[37,35151,55],{"class":54},[37,35153,168],{"class":61},[37,35155,280],{"class":50},[37,35157,35158,35160,35162,35164,35167,35169,35171,35173,35175,35177,35179,35181],{"class":39,"line":227},[37,35159,31184],{"class":61},[37,35161,31252],{"class":50},[37,35163,55],{"class":54},[37,35165,35166],{"class":50},"nn.MaxPool2d(",[37,35168,31213],{"class":159},[37,35170,55],{"class":54},[37,35172,62],{"class":61},[37,35174,65],{"class":50},[37,35176,31268],{"class":159},[37,35178,55],{"class":54},[37,35180,602],{"class":61},[37,35182,280],{"class":50},[37,35184,35185,35187,35189,35191,35193,35195,35197,35199,35201,35203,35205,35208,35210,35212,35214,35216,35218,35220,35222,35224],{"class":39,"line":232},[37,35186,31184],{"class":61},[37,35188,31281],{"class":50},[37,35190,55],{"class":54},[37,35192,31192],{"class":50},[37,35194,31195],{"class":159},[37,35196,55],{"class":54},[37,35198,732],{"class":61},[37,35200,65],{"class":50},[37,35202,31204],{"class":159},[37,35204,55],{"class":54},[37,35206,35207],{"class":61},"256",[37,35209,65],{"class":50},[37,35211,31213],{"class":159},[37,35213,55],{"class":54},[37,35215,836],{"class":61},[37,35217,65],{"class":50},[37,35219,31222],{"class":159},[37,35221,55],{"class":54},[37,35223,602],{"class":61},[37,35225,280],{"class":50},[37,35227,35228,35230,35232,35234,35236,35238,35240,35242,35244,35246,35248,35250],{"class":39,"line":238},[37,35229,31184],{"class":61},[37,35231,31316],{"class":50},[37,35233,55],{"class":54},[37,35235,35166],{"class":50},[37,35237,31213],{"class":159},[37,35239,55],{"class":54},[37,35241,62],{"class":61},[37,35243,65],{"class":50},[37,35245,31268],{"class":159},[37,35247,55],{"class":54},[37,35249,602],{"class":61},[37,35251,280],{"class":50},[37,35253,35254,35256,35259,35261,35263,35265,35267,35269,35271,35273,35275,35278,35280,35282,35284,35286,35288,35290,35292,35294],{"class":39,"line":244},[37,35255,31184],{"class":61},[37,35257,35258],{"class":50},".c5",[37,35260,55],{"class":54},[37,35262,31192],{"class":50},[37,35264,31195],{"class":159},[37,35266,55],{"class":54},[37,35268,35207],{"class":61},[37,35270,65],{"class":50},[37,35272,31204],{"class":159},[37,35274,55],{"class":54},[37,35276,35277],{"class":61},"384",[37,35279,65],{"class":50},[37,35281,31213],{"class":159},[37,35283,55],{"class":54},[37,35285,62],{"class":61},[37,35287,65],{"class":50},[37,35289,31222],{"class":159},[37,35291,55],{"class":54},[37,35293,332],{"class":61},[37,35295,280],{"class":50},[37,35297,35298,35300,35303,35305,35307,35309,35311,35313,35315,35317,35319,35321,35323,35325,35327,35329,35331,35333,35335,35337],{"class":39,"line":250},[37,35299,31184],{"class":61},[37,35301,35302],{"class":50},".c6",[37,35304,55],{"class":54},[37,35306,31192],{"class":50},[37,35308,31195],{"class":159},[37,35310,55],{"class":54},[37,35312,35277],{"class":61},[37,35314,65],{"class":50},[37,35316,31204],{"class":159},[37,35318,55],{"class":54},[37,35320,35277],{"class":61},[37,35322,65],{"class":50},[37,35324,31213],{"class":159},[37,35326,55],{"class":54},[37,35328,62],{"class":61},[37,35330,65],{"class":50},[37,35332,31222],{"class":159},[37,35334,55],{"class":54},[37,35336,332],{"class":61},[37,35338,280],{"class":50},[37,35340,35341,35343,35346,35348,35350,35352,35354,35356,35358,35360,35362,35364,35366,35368,35370,35372,35374,35376,35378,35380],{"class":39,"line":256},[37,35342,31184],{"class":61},[37,35344,35345],{"class":50},".c7",[37,35347,55],{"class":54},[37,35349,31192],{"class":50},[37,35351,31195],{"class":159},[37,35353,55],{"class":54},[37,35355,35277],{"class":61},[37,35357,65],{"class":50},[37,35359,31204],{"class":159},[37,35361,55],{"class":54},[37,35363,35207],{"class":61},[37,35365,65],{"class":50},[37,35367,31213],{"class":159},[37,35369,55],{"class":54},[37,35371,62],{"class":61},[37,35373,65],{"class":50},[37,35375,31222],{"class":159},[37,35377,55],{"class":54},[37,35379,332],{"class":61},[37,35381,280],{"class":50},[37,35383,35384,35386,35389,35391,35393,35395,35397,35399,35401,35403,35405,35407],{"class":39,"line":261},[37,35385,31184],{"class":61},[37,35387,35388],{"class":50},".s8",[37,35390,55],{"class":54},[37,35392,35166],{"class":50},[37,35394,31213],{"class":159},[37,35396,55],{"class":54},[37,35398,62],{"class":61},[37,35400,65],{"class":50},[37,35402,31268],{"class":159},[37,35404,55],{"class":54},[37,35406,602],{"class":61},[37,35408,280],{"class":50},[37,35410,35411],{"class":39,"line":267},[37,35412,31341],{"class":43},[37,35414,35415,35417,35419,35421],{"class":39,"line":283},[37,35416,31184],{"class":61},[37,35418,31348],{"class":50},[37,35420,55],{"class":54},[37,35422,31353],{"class":50},[37,35424,35425],{"class":39,"line":288},[37,35426,35427],{"class":43},"       # 定义全连接层\n",[37,35429,35430,35432,35435,35437,35439,35441,35443,35445,35447,35449,35451,35454],{"class":39,"line":294},[37,35431,31184],{"class":61},[37,35433,35434],{"class":50},".f1",[37,35436,55],{"class":54},[37,35438,31370],{"class":50},[37,35440,93],{"class":61},[37,35442,967],{"class":54},[37,35444,93],{"class":61},[37,35446,967],{"class":54},[37,35448,35207],{"class":61},[37,35450,65],{"class":50},[37,35452,35453],{"class":61},"4096",[37,35455,280],{"class":50},[37,35457,35458,35460,35463,35465,35467,35469,35471,35473],{"class":39,"line":300},[37,35459,31184],{"class":61},[37,35461,35462],{"class":50},".f2",[37,35464,55],{"class":54},[37,35466,31370],{"class":50},[37,35468,35453],{"class":61},[37,35470,65],{"class":50},[37,35472,35453],{"class":61},[37,35474,280],{"class":50},[37,35476,35477,35479,35482,35484,35486,35488,35490,35492],{"class":39,"line":306},[37,35478,31184],{"class":61},[37,35480,35481],{"class":50},".f3",[37,35483,55],{"class":54},[37,35485,31370],{"class":50},[37,35487,35453],{"class":61},[37,35489,65],{"class":50},[37,35491,98],{"class":61},[37,35493,280],{"class":50},[37,35495,35496],{"class":39,"line":312},[37,35497,2757],{"emptyLinePlaceholder":454},[37,35499,35500],{"class":39,"line":317},[37,35501,35502],{"class":43},"    # 定义前向传播\n",[37,35504,35505,35507,35509],{"class":39,"line":323},[37,35506,31140],{"class":54},[37,35508,31432],{"class":2320},[37,35510,31435],{"class":50},[37,35512,35513,35515,35517,35519,35522,35524],{"class":39,"line":337},[37,35514,31440],{"class":50},[37,35516,55],{"class":54},[37,35518,31162],{"class":61},[37,35520,35521],{"class":50},".ReLu(",[37,35523,31162],{"class":61},[37,35525,31452],{"class":50},[37,35527,35528,35530,35532,35534],{"class":39,"line":342},[37,35529,31440],{"class":50},[37,35531,55],{"class":54},[37,35533,31162],{"class":61},[37,35535,31463],{"class":50},[37,35537,35538,35540,35542,35544,35546,35548],{"class":39,"line":347},[37,35539,31440],{"class":50},[37,35541,55],{"class":54},[37,35543,31162],{"class":61},[37,35545,35521],{"class":50},[37,35547,31162],{"class":61},[37,35549,31478],{"class":50},[37,35551,35552,35554,35556,35558],{"class":39,"line":352},[37,35553,31440],{"class":50},[37,35555,55],{"class":54},[37,35557,31162],{"class":61},[37,35559,31489],{"class":50},[37,35561,35562,35564,35566,35568,35570,35572],{"class":39,"line":357},[37,35563,31440],{"class":50},[37,35565,55],{"class":54},[37,35567,31162],{"class":61},[37,35569,35521],{"class":50},[37,35571,31162],{"class":61},[37,35573,35574],{"class":50},".c5(x))\n",[37,35576,35577,35579,35581,35583,35585,35587],{"class":39,"line":362},[37,35578,31440],{"class":50},[37,35580,55],{"class":54},[37,35582,31162],{"class":61},[37,35584,35521],{"class":50},[37,35586,31162],{"class":61},[37,35588,35589],{"class":50},".c6(x))\n",[37,35591,35592,35594,35596,35598,35600,35602],{"class":39,"line":367},[37,35593,31440],{"class":50},[37,35595,55],{"class":54},[37,35597,31162],{"class":61},[37,35599,35521],{"class":50},[37,35601,31162],{"class":61},[37,35603,35604],{"class":50},".c7(x))\n",[37,35606,35607,35609,35611,35613],{"class":39,"line":373},[37,35608,31440],{"class":50},[37,35610,55],{"class":54},[37,35612,31162],{"class":61},[37,35614,35615],{"class":50},".s8(x)\n",[37,35617,35618],{"class":39,"line":392},[37,35619,2757],{"emptyLinePlaceholder":454},[37,35621,35622],{"class":39,"line":398},[37,35623,35624],{"class":43},"        # 展平加线性全连接层\n",[37,35626,35627,35629,35631,35633],{"class":39,"line":409},[37,35628,31440],{"class":50},[37,35630,55],{"class":54},[37,35632,31162],{"class":61},[37,35634,31500],{"class":50},[37,35636,35637,35639,35641,35643,35645,35647],{"class":39,"line":415},[37,35638,31440],{"class":50},[37,35640,55],{"class":54},[37,35642,31162],{"class":61},[37,35644,35521],{"class":50},[37,35646,31162],{"class":61},[37,35648,35649],{"class":50},".f1(x))\n",[37,35651,35652],{"class":39,"line":420},[37,35653,35654],{"class":43},"        # 还需要dropout对神经元随机进行失活\n",[37,35656,35657,35659,35661,35664,35667],{"class":39,"line":425},[37,35658,31440],{"class":50},[37,35660,55],{"class":54},[37,35662,35663],{"class":50},"F.dropout(x,",[37,35665,35666],{"class":61},"0.5",[37,35668,280],{"class":50},[37,35670,35671,35673,35675,35677,35679,35681],{"class":39,"line":431},[37,35672,31440],{"class":50},[37,35674,55],{"class":54},[37,35676,31162],{"class":61},[37,35678,35521],{"class":50},[37,35680,31162],{"class":61},[37,35682,35683],{"class":50},".f2(x))\n",[37,35685,35686,35688,35690,35692,35694],{"class":39,"line":436},[37,35687,31440],{"class":50},[37,35689,55],{"class":54},[37,35691,35663],{"class":50},[37,35693,35666],{"class":61},[37,35695,280],{"class":50},[37,35697,35698],{"class":39,"line":442},[37,35699,35700],{"class":43},"        # 直接输出\n",[37,35702,35703,35705,35707,35709],{"class":39,"line":8374},[37,35704,31440],{"class":50},[37,35706,55],{"class":54},[37,35708,31162],{"class":61},[37,35710,35711],{"class":50},".f3(x)\n",[37,35713,35714],{"class":39,"line":8386},[37,35715,35716],{"class":43},"        # 前向传播输出\n",[37,35718,35719,35721],{"class":39,"line":8398},[37,35720,15093],{"class":54},[37,35722,31548],{"class":50},[37,35724,35725],{"class":39,"line":10057},[37,35726,35727],{"class":43},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[37,35729,35730,35732,35734,35736,35738],{"class":39,"line":10082},[37,35731,1907],{"class":54},[37,35733,31559],{"class":61},[37,35735,3299],{"class":54},[37,35737,31564],{"class":185},[37,35739,4089],{"class":50},[37,35741,35742,35744,35746,35748,35750,35752,35754,35756,35758],{"class":39,"line":10105},[37,35743,31576],{"class":50},[37,35745,55],{"class":54},[37,35747,30791],{"class":50},[37,35749,31583],{"class":185},[37,35751,2069],{"class":54},[37,35753,31588],{"class":50},[37,35755,2066],{"class":54},[37,35757,30816],{"class":185},[37,35759,280],{"class":50},[37,35761,35762],{"class":39,"line":10129},[37,35763,35764],{"class":43},"    # 模型实例化，然后将实例化的模型放到设备中\n",[37,35766,35767,35769,35771],{"class":39,"line":10134},[37,35768,31628],{"class":50},[37,35770,55],{"class":54},[37,35772,35773],{"class":50},"AlexNet().to(device)\n",[37,35775,35776,35778,35780,35782,35784,35787,35789,35791],{"class":39,"line":10139},[37,35777,31638],{"class":61},[37,35779,31641],{"class":50},[37,35781,332],{"class":61},[37,35783,65],{"class":50},[37,35785,35786],{"class":61},"227",[37,35788,65],{"class":50},[37,35790,35786],{"class":61},[37,35792,31654],{"class":50},[481,35794,35795],{"start":47},[484,35796,31667],{},[27,35798,35800],{"className":29,"code":35799,"language":31,"meta":32,"style":32},"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",[34,35801,35802,35808,35814,35824,35830,35840,35850,35860,35870,35880,35884,35895,35905,35909,35913,35917,35925,35937,35947,35963,35973,36005,36019,36029,36039,36043,36053,36067,36077,36087,36097,36103,36107,36111,36115,36119,36123,36131,36151,36155,36159,36163,36167,36171,36187,36191,36195,36203,36207,36211,36219,36223,36227,36231,36239,36243,36247,36251,36255,36263,36267,36275,36279,36287,36291,36299,36303,36311,36315,36319,36327,36331,36335,36339,36351,36375,36389,36393,36397,36401,36409,36413,36421,36425,36433,36437,36445,36449,36457,36461,36469,36473,36485,36489,36497,36501,36509,36513,36517,36521,36525,36533,36537,36553,36557,36565,36569,36573,36577,36581,36585,36589,36593,36609,36613,36625,36629,36641,36645,36657,36661,36669,36673,36681,36685,36689,36694,36700,36704,36713,36717,36734,36738,36747,36751,36769,36782,36787,36800,36804,36808,36816,36820,36824,36832,36836,36844,36848,36856,36860,36864,36906,36948,36952,36956,36972,36976,36992,36996,37000,37008,37012,37016,37028,37066,37071,37076,37085,37089,37103,37113,37119,37125,37131,37137,37141,37145,37151,37155,37159,37167,37171,37189,37193,37197,37201,37217,37221,37225,37229,37233,37237,37257,37277,37281,37285,37289,37297,37305,37309,37325,37345,37365,37369,37373,37381,37389,37393,37397,37401,37413,37417,37427,37435,37452],{"__ignoreMap":32},[37,35803,35804,35806],{"class":39,"line":40},[37,35805,30732],{"class":54},[37,35807,32160],{"class":50},[37,35809,35810,35812],{"class":39,"line":47},[37,35811,30732],{"class":54},[37,35813,32167],{"class":50},[37,35815,35816,35818,35820,35822],{"class":39,"line":104},[37,35817,30732],{"class":54},[37,35819,32178],{"class":50},[37,35821,31722],{"class":54},[37,35823,32183],{"class":50},[37,35825,35826,35828],{"class":39,"line":113},[37,35827,30732],{"class":54},[37,35829,30735],{"class":50},[37,35831,35832,35834,35836,35838],{"class":39,"line":189},[37,35833,31076],{"class":54},[37,35835,31754],{"class":50},[37,35837,30732],{"class":54},[37,35839,32200],{"class":50},[37,35841,35842,35844,35846,35848],{"class":39,"line":195},[37,35843,31076],{"class":54},[37,35845,31707],{"class":50},[37,35847,30732],{"class":54},[37,35849,31712],{"class":50},[37,35851,35852,35854,35856,35858],{"class":39,"line":201},[37,35853,31076],{"class":54},[37,35855,31737],{"class":50},[37,35857,30732],{"class":54},[37,35859,31742],{"class":50},[37,35861,35862,35864,35866,35868],{"class":39,"line":207},[37,35863,30732],{"class":54},[37,35865,31754],{"class":50},[37,35867,31722],{"class":54},[37,35869,31759],{"class":50},[37,35871,35872,35874,35876,35878],{"class":39,"line":213},[37,35873,30732],{"class":54},[37,35875,31771],{"class":50},[37,35877,31722],{"class":54},[37,35879,31776],{"class":50},[37,35881,35882],{"class":39,"line":218},[37,35883,32245],{"class":43},[37,35885,35886,35888,35890,35892],{"class":39,"line":227},[37,35887,31076],{"class":54},[37,35889,32252],{"class":50},[37,35891,30732],{"class":54},[37,35893,35894],{"class":50}," AlexNet\n",[37,35896,35897,35899,35901,35903],{"class":39,"line":232},[37,35898,31076],{"class":54},[37,35900,31079],{"class":50},[37,35902,30732],{"class":54},[37,35904,31084],{"class":50},[37,35906,35907],{"class":39,"line":238},[37,35908,2757],{"emptyLinePlaceholder":454},[37,35910,35911],{"class":39,"line":244},[37,35912,2757],{"emptyLinePlaceholder":454},[37,35914,35915],{"class":39,"line":250},[37,35916,32280],{"class":43},[37,35918,35919,35921,35923],{"class":39,"line":256},[37,35920,32285],{"class":54},[37,35922,32288],{"class":2320},[37,35924,32291],{"class":50},[37,35926,35927,35929,35931,35933,35935],{"class":39,"line":261},[37,35928,32296],{"class":50},[37,35930,55],{"class":54},[37,35932,31794],{"class":50},[37,35934,31802],{"class":185},[37,35936,31805],{"class":50},[37,35938,35939,35941,35943,35945],{"class":39,"line":267},[37,35940,32309],{"class":159},[37,35942,55],{"class":54},[37,35944,31815],{"class":61},[37,35946,31805],{"class":50},[37,35948,35949,35951,35953,35955,35957,35959,35961],{"class":39,"line":283},[37,35950,32320],{"class":159},[37,35952,55],{"class":54},[37,35954,31832],{"class":50},[37,35956,160],{"class":159},[37,35958,55],{"class":54},[37,35960,35786],{"class":61},[37,35962,31842],{"class":50},[37,35964,35965,35967,35969,35971],{"class":39,"line":288},[37,35966,32337],{"class":159},[37,35968,55],{"class":54},[37,35970,31815],{"class":61},[37,35972,280],{"class":50},[37,35974,35975,35977,35979,35981,35983,35985,35987,35989,35991,35993,35995,35997,35999,36001,36003],{"class":39,"line":294},[37,35976,32348],{"class":50},[37,35978,55],{"class":54},[37,35980,32353],{"class":50},[37,35982,32356],{"class":61},[37,35984,165],{"class":50},[37,35986,32361],{"class":61},[37,35988,967],{"class":54},[37,35990,7706],{"class":61},[37,35992,32368],{"class":50},[37,35994,32356],{"class":61},[37,35996,165],{"class":50},[37,35998,32375],{"class":61},[37,36000,967],{"class":54},[37,36002,7706],{"class":61},[37,36004,32382],{"class":50},[37,36006,36007,36009,36011,36013,36015,36017],{"class":39,"line":300},[37,36008,32387],{"class":50},[37,36010,55],{"class":54},[37,36012,32392],{"class":50},[37,36014,31875],{"class":159},[37,36016,55],{"class":54},[37,36018,31880],{"class":50},[37,36020,36021,36023,36025,36027],{"class":39,"line":306},[37,36022,32403],{"class":159},[37,36024,55],{"class":54},[37,36026,32408],{"class":61},[37,36028,31805],{"class":50},[37,36030,36031,36033,36035,36037],{"class":39,"line":312},[37,36032,32415],{"class":159},[37,36034,55],{"class":54},[37,36036,31815],{"class":61},[37,36038,31805],{"class":50},[37,36040,36041],{"class":39,"line":317},[37,36042,32426],{"class":43},[37,36044,36045,36047,36049,36051],{"class":39,"line":323},[37,36046,32431],{"class":159},[37,36048,55],{"class":54},[37,36050,73],{"class":61},[37,36052,280],{"class":50},[37,36054,36055,36057,36059,36061,36063,36065],{"class":39,"line":337},[37,36056,32442],{"class":50},[37,36058,55],{"class":54},[37,36060,31872],{"class":50},[37,36062,31875],{"class":159},[37,36064,55],{"class":54},[37,36066,32453],{"class":50},[37,36068,36069,36071,36073,36075],{"class":39,"line":342},[37,36070,32458],{"class":159},[37,36072,55],{"class":54},[37,36074,32408],{"class":61},[37,36076,31805],{"class":50},[37,36078,36079,36081,36083,36085],{"class":39,"line":347},[37,36080,32469],{"class":159},[37,36082,55],{"class":54},[37,36084,31815],{"class":61},[37,36086,31805],{"class":50},[37,36088,36089,36091,36093,36095],{"class":39,"line":352},[37,36090,32480],{"class":159},[37,36092,55],{"class":54},[37,36094,73],{"class":61},[37,36096,280],{"class":50},[37,36098,36099,36101],{"class":39,"line":357},[37,36100,4440],{"class":54},[37,36102,32493],{"class":50},[37,36104,36105],{"class":39,"line":362},[37,36106,2757],{"emptyLinePlaceholder":454},[37,36108,36109],{"class":39,"line":367},[37,36110,32502],{"class":43},[37,36112,36113],{"class":39,"line":373},[37,36114,32507],{"class":43},[37,36116,36117],{"class":39,"line":392},[37,36118,2757],{"emptyLinePlaceholder":454},[37,36120,36121],{"class":39,"line":398},[37,36122,32516],{"class":43},[37,36124,36125,36127,36129],{"class":39,"line":409},[37,36126,32285],{"class":54},[37,36128,32523],{"class":2320},[37,36130,32526],{"class":50},[37,36132,36133,36135,36137,36139,36141,36143,36145,36147,36149],{"class":39,"line":415},[37,36134,31576],{"class":50},[37,36136,55],{"class":54},[37,36138,30791],{"class":50},[37,36140,31583],{"class":185},[37,36142,2069],{"class":54},[37,36144,31588],{"class":50},[37,36146,2066],{"class":54},[37,36148,32545],{"class":185},[37,36150,280],{"class":50},[37,36152,36153],{"class":39,"line":420},[37,36154,2757],{"emptyLinePlaceholder":454},[37,36156,36157],{"class":39,"line":425},[37,36158,2757],{"emptyLinePlaceholder":454},[37,36160,36161],{"class":39,"line":431},[37,36162,32560],{"class":43},[37,36164,36165],{"class":39,"line":436},[37,36166,32565],{"class":43},[37,36168,36169],{"class":39,"line":442},[37,36170,32570],{"class":43},[37,36172,36173,36175,36177,36179,36181,36183,36185],{"class":39,"line":8374},[37,36174,32575],{"class":50},[37,36176,55],{"class":54},[37,36178,32580],{"class":50},[37,36180,32583],{"class":159},[37,36182,55],{"class":54},[37,36184,32588],{"class":61},[37,36186,280],{"class":50},[37,36188,36189],{"class":39,"line":8386},[37,36190,2757],{"emptyLinePlaceholder":454},[37,36192,36193],{"class":39,"line":8398},[37,36194,32599],{"class":43},[37,36196,36197,36199,36201],{"class":39,"line":10057},[37,36198,32604],{"class":50},[37,36200,55],{"class":54},[37,36202,32609],{"class":50},[37,36204,36205],{"class":39,"line":10082},[37,36206,2757],{"emptyLinePlaceholder":454},[37,36208,36209],{"class":39,"line":10105},[37,36210,32618],{"class":43},[37,36212,36213,36215,36217],{"class":39,"line":10129},[37,36214,31628],{"class":50},[37,36216,55],{"class":54},[37,36218,32627],{"class":50},[37,36220,36221],{"class":39,"line":10134},[37,36222,32632],{"class":43},[37,36224,36225],{"class":39,"line":10139},[37,36226,32637],{"class":43},[37,36228,36229],{"class":39,"line":10144},[37,36230,32642],{"class":43},[37,36232,36233,36235,36237],{"class":39,"line":10153},[37,36234,32647],{"class":50},[37,36236,55],{"class":54},[37,36238,32652],{"class":50},[37,36240,36241],{"class":39,"line":10158},[37,36242,2757],{"emptyLinePlaceholder":454},[37,36244,36245],{"class":39,"line":10164},[37,36246,2757],{"emptyLinePlaceholder":454},[37,36248,36249],{"class":39,"line":10185},[37,36250,32665],{"class":43},[37,36252,36253],{"class":39,"line":10191},[37,36254,32670],{"class":43},[37,36256,36257,36259,36261],{"class":39,"line":10205},[37,36258,32675],{"class":50},[37,36260,55],{"class":54},[37,36262,32680],{"class":61},[37,36264,36265],{"class":39,"line":10211},[37,36266,32685],{"class":43},[37,36268,36269,36271,36273],{"class":39,"line":10238},[37,36270,32690],{"class":50},[37,36272,55],{"class":54},[37,36274,32695],{"class":50},[37,36276,36277],{"class":39,"line":10247},[37,36278,32700],{"class":43},[37,36280,36281,36283,36285],{"class":39,"line":10253},[37,36282,32705],{"class":50},[37,36284,55],{"class":54},[37,36286,32695],{"class":50},[37,36288,36289],{"class":39,"line":10261},[37,36290,32714],{"class":43},[37,36292,36293,36295,36297],{"class":39,"line":10266},[37,36294,32719],{"class":50},[37,36296,55],{"class":54},[37,36298,32695],{"class":50},[37,36300,36301],{"class":39,"line":16945},[37,36302,32728],{"class":43},[37,36304,36305,36307,36309],{"class":39,"line":16951},[37,36306,32733],{"class":50},[37,36308,55],{"class":54},[37,36310,32695],{"class":50},[37,36312,36313],{"class":39,"line":16974},[37,36314,2757],{"emptyLinePlaceholder":454},[37,36316,36317],{"class":39,"line":16980},[37,36318,32746],{"class":43},[37,36320,36321,36323,36325],{"class":39,"line":17003},[37,36322,32751],{"class":50},[37,36324,55],{"class":54},[37,36326,32756],{"class":50},[37,36328,36329],{"class":39,"line":17017},[37,36330,2757],{"emptyLinePlaceholder":454},[37,36332,36333],{"class":39,"line":17037},[37,36334,2757],{"emptyLinePlaceholder":454},[37,36336,36337],{"class":39,"line":17043},[37,36338,32769],{"class":43},[37,36340,36341,36343,36345,36347,36349],{"class":39,"line":17054},[37,36342,3551],{"class":54},[37,36344,32776],{"class":50},[37,36346,26385],{"class":54},[37,36348,32781],{"class":61},[37,36350,32784],{"class":50},[37,36352,36353,36355,36357,36359,36361,36363,36365,36367,36369,36371,36373],{"class":39,"line":17077},[37,36354,32789],{"class":61},[37,36356,165],{"class":50},[37,36358,32794],{"class":185},[37,36360,32797],{"class":61},[37,36362,1094],{"class":185},[37,36364,32797],{"class":61},[37,36366,772],{"class":185},[37,36368,32806],{"class":50},[37,36370,384],{"class":54},[37,36372,332],{"class":61},[37,36374,175],{"class":50},[37,36376,36377,36379,36381,36383,36385,36387],{"class":39,"line":17099},[37,36378,32789],{"class":61},[37,36380,165],{"class":50},[37,36382,32821],{"class":185},[37,36384,967],{"class":54},[37,36386,98],{"class":61},[37,36388,280],{"class":50},[37,36390,36391],{"class":39,"line":17104},[37,36392,2757],{"emptyLinePlaceholder":454},[37,36394,36395],{"class":39,"line":17110},[37,36396,32836],{"class":43},[37,36398,36399],{"class":39,"line":17124},[37,36400,32841],{"class":43},[37,36402,36403,36405,36407],{"class":39,"line":17137},[37,36404,32846],{"class":50},[37,36406,55],{"class":54},[37,36408,32680],{"class":61},[37,36410,36411],{"class":39,"line":17142},[37,36412,32855],{"class":43},[37,36414,36415,36417,36419],{"class":39,"line":17156},[37,36416,32860],{"class":50},[37,36418,55],{"class":54},[37,36420,3435],{"class":61},[37,36422,36423],{"class":39,"line":17161},[37,36424,32869],{"class":43},[37,36426,36427,36429,36431],{"class":39,"line":17167},[37,36428,32874],{"class":50},[37,36430,55],{"class":54},[37,36432,32680],{"class":61},[37,36434,36435],{"class":39,"line":17172},[37,36436,32883],{"class":43},[37,36438,36439,36441,36443],{"class":39,"line":17186},[37,36440,32888],{"class":50},[37,36442,55],{"class":54},[37,36444,3435],{"class":61},[37,36446,36447],{"class":39,"line":17191},[37,36448,32897],{"class":43},[37,36450,36451,36453,36455],{"class":39,"line":17196},[37,36452,32902],{"class":50},[37,36454,55],{"class":54},[37,36456,3435],{"class":61},[37,36458,36459],{"class":39,"line":17210},[37,36460,32911],{"class":43},[37,36462,36463,36465,36467],{"class":39,"line":17222},[37,36464,32916],{"class":50},[37,36466,55],{"class":54},[37,36468,3435],{"class":61},[37,36470,36471],{"class":39,"line":17227},[37,36472,32925],{"class":43},[37,36474,36475,36477,36479,36481,36483],{"class":39,"line":17240},[37,36476,3753],{"class":54},[37,36478,31939],{"class":50},[37,36480,26385],{"class":54},[37,36482,31944],{"class":61},[37,36484,32938],{"class":50},[37,36486,36487],{"class":39,"line":17245},[37,36488,32943],{"class":43},[37,36490,36491,36493,36495],{"class":39,"line":17250},[37,36492,32948],{"class":50},[37,36494,55],{"class":54},[37,36496,32953],{"class":50},[37,36498,36499],{"class":39,"line":17255},[37,36500,32958],{"class":43},[37,36502,36503,36505,36507],{"class":39,"line":17268},[37,36504,32963],{"class":50},[37,36506,55],{"class":54},[37,36508,32968],{"class":50},[37,36510,36511],{"class":39,"line":17273},[37,36512,32974],{"class":43},[37,36514,36515],{"class":39,"line":32971},[37,36516,32980],{"class":50},[37,36518,36519],{"class":39,"line":32977},[37,36520,32986],{"class":43},[37,36522,36523],{"class":39,"line":32983},[37,36524,32992],{"class":43},[37,36526,36527,36529,36531],{"class":39,"line":32989},[37,36528,32998],{"class":50},[37,36530,55],{"class":54},[37,36532,33003],{"class":50},[37,36534,36535],{"class":39,"line":32995},[37,36536,33009],{"class":43},[37,36538,36539,36541,36543,36545,36547,36549,36551],{"class":39,"line":33006},[37,36540,33015],{"class":50},[37,36542,55],{"class":54},[37,36544,33020],{"class":50},[37,36546,33023],{"class":159},[37,36548,55],{"class":54},[37,36550,332],{"class":61},[37,36552,280],{"class":50},[37,36554,36555],{"class":39,"line":33012},[37,36556,33035],{"class":43},[37,36558,36559,36561,36563],{"class":39,"line":33032},[37,36560,33041],{"class":50},[37,36562,55],{"class":54},[37,36564,33046],{"class":50},[37,36566,36567],{"class":39,"line":33038},[37,36568,33052],{"class":43},[37,36570,36571],{"class":39,"line":33049},[37,36572,33058],{"class":50},[37,36574,36575],{"class":39,"line":33055},[37,36576,33064],{"class":43},[37,36578,36579],{"class":39,"line":33061},[37,36580,33070],{"class":50},[37,36582,36583],{"class":39,"line":33067},[37,36584,33076],{"class":43},[37,36586,36587],{"class":39,"line":33073},[37,36588,33082],{"class":50},[37,36590,36591],{"class":39,"line":33079},[37,36592,33088],{"class":43},[37,36594,36595,36597,36599,36601,36603,36605,36607],{"class":39,"line":33085},[37,36596,33094],{"class":50},[37,36598,9818],{"class":54},[37,36600,33099],{"class":50},[37,36602,967],{"class":54},[37,36604,33104],{"class":50},[37,36606,135],{"class":61},[37,36608,280],{"class":50},[37,36610,36611],{"class":39,"line":33091},[37,36612,33114],{"class":43},[37,36614,36615,36617,36619,36621,36623],{"class":39,"line":33111},[37,36616,33120],{"class":50},[37,36618,9818],{"class":54},[37,36620,33125],{"class":50},[37,36622,3299],{"class":54},[37,36624,33130],{"class":50},[37,36626,36627],{"class":39,"line":33117},[37,36628,33136],{"class":43},[37,36630,36631,36633,36635,36637,36639],{"class":39,"line":33133},[37,36632,33142],{"class":50},[37,36634,9818],{"class":54},[37,36636,33104],{"class":50},[37,36638,135],{"class":61},[37,36640,280],{"class":50},[37,36642,36643],{"class":39,"line":33139},[37,36644,33156],{"class":43},[37,36646,36647,36649,36651,36653,36655],{"class":39,"line":33153},[37,36648,3753],{"class":54},[37,36650,33164],{"class":50},[37,36652,26385],{"class":54},[37,36654,31944],{"class":61},[37,36656,33171],{"class":50},[37,36658,36659],{"class":39,"line":33159},[37,36660,33177],{"class":43},[37,36662,36663,36665,36667],{"class":39,"line":33174},[37,36664,32948],{"class":50},[37,36666,55],{"class":54},[37,36668,32953],{"class":50},[37,36670,36671],{"class":39,"line":33180},[37,36672,33192],{"class":43},[37,36674,36675,36677,36679],{"class":39,"line":33189},[37,36676,32963],{"class":50},[37,36678,55],{"class":54},[37,36680,32968],{"class":50},[37,36682,36683],{"class":39,"line":33195},[37,36684,33207],{"class":43},[37,36686,36687],{"class":39,"line":33204},[37,36688,33213],{"class":50},[37,36690,36691],{"class":39,"line":33210},[37,36692,36693],{"class":43},"            # 验证时不计算梯度以节省内存\u002F计算\n",[37,36695,36696,36698],{"class":39,"line":33216},[37,36697,33219],{"class":54},[37,36699,33222],{"class":50},[37,36701,36702],{"class":39,"line":33225},[37,36703,33228],{"class":43},[37,36705,36706,36709,36711],{"class":39,"line":33231},[37,36707,36708],{"class":50},"                output",[37,36710,55],{"class":54},[37,36712,33003],{"class":50},[37,36714,36715],{"class":39,"line":33242},[37,36716,33245],{"class":43},[37,36718,36719,36722,36724,36726,36728,36730,36732],{"class":39,"line":33248},[37,36720,36721],{"class":50},"                pre_lab",[37,36723,55],{"class":54},[37,36725,33020],{"class":50},[37,36727,33023],{"class":159},[37,36729,55],{"class":54},[37,36731,332],{"class":61},[37,36733,280],{"class":50},[37,36735,36736],{"class":39,"line":33267},[37,36737,33270],{"class":43},[37,36739,36740,36743,36745],{"class":39,"line":33273},[37,36741,36742],{"class":50},"                val_batch_loss",[37,36744,55],{"class":54},[37,36746,33046],{"class":50},[37,36748,36749],{"class":39,"line":33284},[37,36750,33287],{"class":43},[37,36752,36753,36756,36758,36761,36763,36765,36767],{"class":39,"line":33290},[37,36754,36755],{"class":50},"                val_loss",[37,36757,9818],{"class":54},[37,36759,36760],{"class":50},"val_batch_loss.item()",[37,36762,967],{"class":54},[37,36764,33104],{"class":50},[37,36766,135],{"class":61},[37,36768,280],{"class":50},[37,36770,36771,36774,36776,36778,36780],{"class":39,"line":33310},[37,36772,36773],{"class":50},"                val_corrects",[37,36775,9818],{"class":54},[37,36777,33125],{"class":50},[37,36779,3299],{"class":54},[37,36781,33130],{"class":50},[37,36783,36784],{"class":39,"line":33326},[37,36785,36786],{"class":43},"            # 当前用于验证的样本数量\n",[37,36788,36789,36792,36794,36796,36798],{"class":39,"line":33332},[37,36790,36791],{"class":50},"            val_num",[37,36793,9818],{"class":54},[37,36795,33104],{"class":50},[37,36797,135],{"class":61},[37,36799,280],{"class":50},[37,36801,36802],{"class":39,"line":33346},[37,36803,33349],{"class":43},[37,36805,36806],{"class":39,"line":33352},[37,36807,33355],{"class":43},[37,36809,36810,36812,36814],{"class":39,"line":33358},[37,36811,33361],{"class":50},[37,36813,1094],{"class":54},[37,36815,33366],{"class":50},[37,36817,36818],{"class":39,"line":33369},[37,36819,33372],{"class":43},[37,36821,36822],{"class":39,"line":33375},[37,36823,33378],{"class":43},[37,36825,36826,36828,36830],{"class":39,"line":33381},[37,36827,33384],{"class":50},[37,36829,1094],{"class":54},[37,36831,33366],{"class":50},[37,36833,36834],{"class":39,"line":33391},[37,36835,33394],{"class":43},[37,36837,36838,36840,36842],{"class":39,"line":33397},[37,36839,33400],{"class":50},[37,36841,1094],{"class":54},[37,36843,33405],{"class":50},[37,36845,36846],{"class":39,"line":33408},[37,36847,33411],{"class":43},[37,36849,36850,36852,36854],{"class":39,"line":33414},[37,36851,33417],{"class":50},[37,36853,1094],{"class":54},[37,36855,33405],{"class":50},[37,36857,36858],{"class":39,"line":33424},[37,36859,2757],{"emptyLinePlaceholder":454},[37,36861,36862],{"class":39,"line":33429},[37,36863,33432],{"class":43},[37,36865,36866,36868,36870,36872,36874,36876,36878,36880,36882,36884,36886,36888,36890,36892,36894,36896,36898,36900,36902,36904],{"class":39,"line":33435},[37,36867,32789],{"class":61},[37,36869,165],{"class":50},[37,36871,3942],{"class":185},[37,36873,32797],{"class":61},[37,36875,33446],{"class":185},[37,36877,1404],{"class":61},[37,36879,33451],{"class":54},[37,36881,1454],{"class":61},[37,36883,33456],{"class":185},[37,36885,1404],{"class":61},[37,36887,33451],{"class":54},[37,36889,1454],{"class":61},[37,36891,3942],{"class":185},[37,36893,33467],{"class":50},[37,36895,384],{"class":54},[37,36897,332],{"class":61},[37,36899,33474],{"class":50},[37,36901,384],{"class":54},[37,36903,332],{"class":61},[37,36905,33481],{"class":50},[37,36907,36908,36910,36912,36914,36916,36918,36920,36922,36924,36926,36928,36930,36932,36934,36936,36938,36940,36942,36944,36946],{"class":39,"line":33484},[37,36909,32789],{"class":61},[37,36911,165],{"class":50},[37,36913,3942],{"class":185},[37,36915,32797],{"class":61},[37,36917,33495],{"class":185},[37,36919,1404],{"class":61},[37,36921,33451],{"class":54},[37,36923,1454],{"class":61},[37,36925,33504],{"class":185},[37,36927,1404],{"class":61},[37,36929,33451],{"class":54},[37,36931,1454],{"class":61},[37,36933,3942],{"class":185},[37,36935,33515],{"class":50},[37,36937,384],{"class":54},[37,36939,332],{"class":61},[37,36941,33522],{"class":50},[37,36943,384],{"class":54},[37,36945,332],{"class":61},[37,36947,33481],{"class":50},[37,36949,36950],{"class":39,"line":33531},[37,36951,2757],{"emptyLinePlaceholder":454},[37,36953,36954],{"class":39,"line":33536},[37,36955,33539],{"class":43},[37,36957,36958,36960,36962,36964,36966,36968,36970],{"class":39,"line":33542},[37,36959,2854],{"class":54},[37,36961,33547],{"class":50},[37,36963,384],{"class":54},[37,36965,332],{"class":61},[37,36967,1448],{"class":50},[37,36969,1468],{"class":54},[37,36971,33558],{"class":50},[37,36973,36974],{"class":39,"line":33561},[37,36975,33564],{"class":43},[37,36977,36978,36980,36982,36984,36986,36988,36990],{"class":39,"line":33567},[37,36979,33570],{"class":50},[37,36981,568],{"class":61},[37,36983,55],{"class":54},[37,36985,33577],{"class":50},[37,36987,384],{"class":54},[37,36989,332],{"class":61},[37,36991,389],{"class":50},[37,36993,36994],{"class":39,"line":33586},[37,36995,33589],{"class":43},[37,36997,36998],{"class":39,"line":33592},[37,36999,33595],{"class":43},[37,37001,37002,37004,37006],{"class":39,"line":33598},[37,37003,33601],{"class":50},[37,37005,55],{"class":54},[37,37007,32652],{"class":50},[37,37009,37010],{"class":39,"line":33608},[37,37011,2757],{"emptyLinePlaceholder":454},[37,37013,37014],{"class":39,"line":33613},[37,37015,33616],{"class":43},[37,37017,37018,37020,37022,37024,37026],{"class":39,"line":33619},[37,37019,33622],{"class":50},[37,37021,55],{"class":54},[37,37023,33627],{"class":50},[37,37025,384],{"class":54},[37,37027,33632],{"class":50},[37,37029,37030,37032,37034,37036,37038,37040,37042,37044,37046,37048,37050,37052,37054,37056,37058,37060,37062,37064],{"class":39,"line":33635},[37,37031,32789],{"class":61},[37,37033,165],{"class":50},[37,37035,33642],{"class":185},[37,37037,1404],{"class":61},[37,37039,33647],{"class":54},[37,37041,1454],{"class":61},[37,37043,1054],{"class":185},[37,37045,1404],{"class":61},[37,37047,33647],{"class":54},[37,37049,1454],{"class":61},[37,37051,33660],{"class":185},[37,37053,33663],{"class":50},[37,37055,33666],{"class":54},[37,37057,1415],{"class":61},[37,37059,33671],{"class":50},[37,37061,845],{"class":54},[37,37063,1415],{"class":61},[37,37065,175],{"class":50},[37,37067,37068],{"class":39,"line":33680},[37,37069,37070],{"class":43},"    # 选择最优参数并保存\n",[37,37072,37073],{"class":39,"line":33686},[37,37074,37075],{"class":43},"    # 保存最佳模型权重字典\n",[37,37077,37078,37081,37083],{"class":39,"line":33692},[37,37079,37080],{"class":50},"    torch.save(best_model_wts,",[37,37082,33704],{"class":185},[37,37084,280],{"class":50},[37,37086,37087],{"class":39,"line":33698},[37,37088,33724],{"class":43},[37,37090,37091,37093,37095,37097,37099,37101],{"class":39,"line":33709},[37,37092,33730],{"class":50},[37,37094,55],{"class":54},[37,37096,33735],{"class":50},[37,37098,33738],{"class":159},[37,37100,55],{"class":54},[37,37102,1922],{"class":50},[37,37104,37105,37107,37109,37111],{"class":39,"line":33715},[37,37106,33748],{"class":185},[37,37108,1368],{"class":50},[37,37110,33753],{"class":61},[37,37112,33756],{"class":50},[37,37114,37115,37117],{"class":39,"line":33721},[37,37116,33762],{"class":185},[37,37118,33765],{"class":50},[37,37120,37121,37123],{"class":39,"line":33727},[37,37122,33771],{"class":185},[37,37124,33774],{"class":50},[37,37126,37127,37129],{"class":39,"line":33745},[37,37128,33780],{"class":185},[37,37130,33783],{"class":50},[37,37132,37133,37135],{"class":39,"line":33759},[37,37134,33789],{"class":185},[37,37136,33792],{"class":50},[37,37138,37139],{"class":39,"line":33768},[37,37140,33798],{"class":50},[37,37142,37143],{"class":39,"line":33777},[37,37144,33804],{"class":43},[37,37146,37147,37149],{"class":39,"line":33786},[37,37148,4440],{"class":54},[37,37150,33812],{"class":50},[37,37152,37153],{"class":39,"line":33795},[37,37154,2757],{"emptyLinePlaceholder":454},[37,37156,37157],{"class":39,"line":33801},[37,37158,33823],{"class":43},[37,37160,37161,37163,37165],{"class":39,"line":33807},[37,37162,32285],{"class":54},[37,37164,33831],{"class":2320},[37,37166,33834],{"class":50},[37,37168,37169],{"class":39,"line":33815},[37,37170,33840],{"class":43},[37,37172,37173,37175,37177,37179,37181,37183,37185,37187],{"class":39,"line":33820},[37,37174,33846],{"class":50},[37,37176,32031],{"class":159},[37,37178,55],{"class":54},[37,37180,165],{"class":50},[37,37182,68],{"class":61},[37,37184,65],{"class":50},[37,37186,168],{"class":61},[37,37188,175],{"class":50},[37,37190,37191],{"class":39,"line":33826},[37,37192,33866],{"class":43},[37,37194,37195],{"class":39,"line":33837},[37,37196,33872],{"class":43},[37,37198,37199],{"class":39,"line":33843},[37,37200,33878],{"class":43},[37,37202,37203,37205,37207,37209,37211,37213,37215],{"class":39,"line":33863},[37,37204,32065],{"class":50},[37,37206,332],{"class":61},[37,37208,65],{"class":50},[37,37210,602],{"class":61},[37,37212,65],{"class":50},[37,37214,332],{"class":61},[37,37216,280],{"class":50},[37,37218,37219],{"class":39,"line":33869},[37,37220,33901],{"class":43},[37,37222,37223],{"class":39,"line":33875},[37,37224,33907],{"class":43},[37,37226,37227],{"class":39,"line":33881},[37,37228,33913],{"class":43},[37,37230,37231],{"class":39,"line":33898},[37,37232,33919],{"class":43},[37,37234,37235],{"class":39,"line":33904},[37,37236,33925],{"class":43},[37,37238,37239,37241,37243,37245,37247,37249,37251,37253,37255],{"class":39,"line":33910},[37,37240,33931],{"class":50},[37,37242,33934],{"class":185},[37,37244,33937],{"class":50},[37,37246,33940],{"class":185},[37,37248,65],{"class":50},[37,37250,33945],{"class":159},[37,37252,55],{"class":54},[37,37254,33950],{"class":185},[37,37256,280],{"class":50},[37,37258,37259,37261,37263,37265,37267,37269,37271,37273,37275],{"class":39,"line":33916},[37,37260,33931],{"class":50},[37,37262,33934],{"class":185},[37,37264,33962],{"class":50},[37,37266,33965],{"class":185},[37,37268,65],{"class":50},[37,37270,33945],{"class":159},[37,37272,55],{"class":54},[37,37274,33974],{"class":185},[37,37276,280],{"class":50},[37,37278,37279],{"class":39,"line":33922},[37,37280,33982],{"class":43},[37,37282,37283],{"class":39,"line":33928},[37,37284,33988],{"class":50},[37,37286,37287],{"class":39,"line":33955},[37,37288,33994],{"class":43},[37,37290,37291,37293,37295],{"class":39,"line":33979},[37,37292,34000],{"class":50},[37,37294,34003],{"class":185},[37,37296,280],{"class":50},[37,37298,37299,37301,37303],{"class":39,"line":33985},[37,37300,34011],{"class":50},[37,37302,34014],{"class":185},[37,37304,280],{"class":50},[37,37306,37307],{"class":39,"line":33991},[37,37308,34022],{"class":43},[37,37310,37311,37313,37315,37317,37319,37321,37323],{"class":39,"line":33997},[37,37312,32065],{"class":50},[37,37314,332],{"class":61},[37,37316,65],{"class":50},[37,37318,602],{"class":61},[37,37320,65],{"class":50},[37,37322,602],{"class":61},[37,37324,280],{"class":50},[37,37326,37327,37329,37331,37333,37335,37337,37339,37341,37343],{"class":39,"line":34008},[37,37328,33931],{"class":50},[37,37330,33934],{"class":185},[37,37332,34049],{"class":50},[37,37334,33940],{"class":185},[37,37336,65],{"class":50},[37,37338,33945],{"class":159},[37,37340,55],{"class":54},[37,37342,34060],{"class":185},[37,37344,280],{"class":50},[37,37346,37347,37349,37351,37353,37355,37357,37359,37361,37363],{"class":39,"line":34019},[37,37348,33931],{"class":50},[37,37350,33934],{"class":185},[37,37352,34072],{"class":50},[37,37354,33965],{"class":185},[37,37356,65],{"class":50},[37,37358,33945],{"class":159},[37,37360,55],{"class":54},[37,37362,34083],{"class":185},[37,37364,280],{"class":50},[37,37366,37367],{"class":39,"line":34025},[37,37368,34091],{"class":43},[37,37370,37371],{"class":39,"line":34042},[37,37372,33988],{"class":50},[37,37374,37375,37377,37379],{"class":39,"line":34065},[37,37376,34000],{"class":50},[37,37378,33934],{"class":185},[37,37380,280],{"class":50},[37,37382,37383,37385,37387],{"class":39,"line":34088},[37,37384,34011],{"class":50},[37,37386,34113],{"class":185},[37,37388,280],{"class":50},[37,37390,37391],{"class":39,"line":34094},[37,37392,34121],{"class":50},[37,37394,37395],{"class":39,"line":34099},[37,37396,2757],{"emptyLinePlaceholder":454},[37,37398,37399],{"class":39,"line":34108},[37,37400,34132],{"class":43},[37,37402,37403,37405,37407,37409,37411],{"class":39,"line":34118},[37,37404,1907],{"class":54},[37,37406,31559],{"class":61},[37,37408,3299],{"class":54},[37,37410,31564],{"class":185},[37,37412,4089],{"class":50},[37,37414,37415],{"class":39,"line":34124},[37,37416,34151],{"class":43},[37,37418,37419,37422,37424],{"class":39,"line":34129},[37,37420,37421],{"class":50},"    AlexNet",[37,37423,55],{"class":54},[37,37425,37426],{"class":50},"AlexNet()\n",[37,37428,37429,37431,37433],{"class":39,"line":34135},[37,37430,34168],{"class":50},[37,37432,55],{"class":54},[37,37434,34173],{"class":50},[37,37436,37437,37439,37441,37444,37446,37448,37450],{"class":39,"line":34148},[37,37438,33730],{"class":50},[37,37440,55],{"class":54},[37,37442,37443],{"class":50},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[37,37445,34186],{"class":159},[37,37447,55],{"class":54},[37,37449,1210],{"class":61},[37,37451,280],{"class":50},[37,37453,37454],{"class":39,"line":34154},[37,37455,34198],{"class":50},[481,37457,37458],{"start":104},[484,37459,34211],{},[27,37461,37463],{"className":29,"code":37462,"language":31,"meta":32,"style":32},"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",[34,37464,37465,37471,37481,37491,37501,37505,37515,37525,37536,37540,37544,37548,37556,37572,37582,37598,37608,37622,37626,37636,37646,37656,37662,37666,37670,37678,37682,37698,37706,37710,37714,37722,37730,37734,37738,37742,37746,37752,37756,37766,37774,37782,37786,37790,37794,37802,37806,37822,37826,37830,37834,37846,37850,37862,37866,37870,37882,37886,37896,37900,37904,37916,37920,37928,37932,37936,37944,37948,37956,37960,37964,37968,37972,37976,37992,38000,38004,38008,38056,38062,38066,38076,38084,38092,38096,38100,38104,38108,38116,38120,38136,38140,38148,38156],{"__ignoreMap":32},[37,37466,37467,37469],{"class":39,"line":40},[37,37468,30732],{"class":54},[37,37470,30735],{"class":50},[37,37472,37473,37475,37477,37479],{"class":39,"line":47},[37,37474,30732],{"class":54},[37,37476,31754],{"class":50},[37,37478,31722],{"class":54},[37,37480,31759],{"class":50},[37,37482,37483,37485,37487,37489],{"class":39,"line":104},[37,37484,31076],{"class":54},[37,37486,34239],{"class":50},[37,37488,30732],{"class":54},[37,37490,34244],{"class":50},[37,37492,37493,37495,37497,37499],{"class":39,"line":113},[37,37494,31076],{"class":54},[37,37496,31737],{"class":50},[37,37498,30732],{"class":54},[37,37500,31742],{"class":50},[37,37502,37503],{"class":39,"line":189},[37,37504,34259],{"class":43},[37,37506,37507,37509,37511,37513],{"class":39,"line":195},[37,37508,31076],{"class":54},[37,37510,31707],{"class":50},[37,37512,30732],{"class":54},[37,37514,31712],{"class":50},[37,37516,37517,37519,37521,37523],{"class":39,"line":201},[37,37518,31076],{"class":54},[37,37520,32252],{"class":50},[37,37522,30732],{"class":54},[37,37524,35894],{"class":50},[37,37526,37527,37529,37532,37534],{"class":39,"line":207},[37,37528,31076],{"class":54},[37,37530,37531],{"class":50}," 练习.AlexNet.model ",[37,37533,30732],{"class":54},[37,37535,35894],{"class":50},[37,37537,37538],{"class":39,"line":213},[37,37539,2757],{"emptyLinePlaceholder":454},[37,37541,37542],{"class":39,"line":218},[37,37543,2757],{"emptyLinePlaceholder":454},[37,37545,37546],{"class":39,"line":227},[37,37547,34288],{"class":43},[37,37549,37550,37552,37554],{"class":39,"line":232},[37,37551,32285],{"class":54},[37,37553,34295],{"class":2320},[37,37555,32291],{"class":50},[37,37557,37558,37560,37562,37564,37566,37568,37570],{"class":39,"line":238},[37,37559,34302],{"class":50},[37,37561,55],{"class":54},[37,37563,31794],{"class":50},[37,37565,31797],{"class":159},[37,37567,55],{"class":54},[37,37569,31802],{"class":185},[37,37571,31805],{"class":50},[37,37573,37574,37576,37578,37580],{"class":39,"line":244},[37,37575,34319],{"class":159},[37,37577,55],{"class":54},[37,37579,34324],{"class":61},[37,37581,31805],{"class":50},[37,37583,37584,37586,37588,37590,37592,37594,37596],{"class":39,"line":250},[37,37585,34331],{"class":159},[37,37587,55],{"class":54},[37,37589,31832],{"class":50},[37,37591,160],{"class":159},[37,37593,55],{"class":54},[37,37595,35786],{"class":61},[37,37597,31842],{"class":50},[37,37599,37600,37602,37604,37606],{"class":39,"line":256},[37,37601,34348],{"class":159},[37,37603,55],{"class":54},[37,37605,31815],{"class":61},[37,37607,280],{"class":50},[37,37609,37610,37612,37614,37616,37618,37620],{"class":39,"line":261},[37,37611,34359],{"class":50},[37,37613,55],{"class":54},[37,37615,31872],{"class":50},[37,37617,31875],{"class":159},[37,37619,55],{"class":54},[37,37621,34370],{"class":50},[37,37623,37624],{"class":39,"line":267},[37,37625,34375],{"class":43},[37,37627,37628,37630,37632,37634],{"class":39,"line":283},[37,37629,34380],{"class":159},[37,37631,55],{"class":54},[37,37633,332],{"class":61},[37,37635,31805],{"class":50},[37,37637,37638,37640,37642,37644],{"class":39,"line":288},[37,37639,34391],{"class":159},[37,37641,55],{"class":54},[37,37643,31815],{"class":61},[37,37645,31805],{"class":50},[37,37647,37648,37650,37652,37654],{"class":39,"line":294},[37,37649,34402],{"class":159},[37,37651,55],{"class":54},[37,37653,135],{"class":61},[37,37655,280],{"class":50},[37,37657,37658,37660],{"class":39,"line":300},[37,37659,4440],{"class":54},[37,37661,34415],{"class":50},[37,37663,37664],{"class":39,"line":306},[37,37665,2757],{"emptyLinePlaceholder":454},[37,37667,37668],{"class":39,"line":312},[37,37669,34424],{"class":43},[37,37671,37672,37674,37676],{"class":39,"line":317},[37,37673,32285],{"class":54},[37,37675,34431],{"class":2320},[37,37677,34434],{"class":50},[37,37679,37680],{"class":39,"line":323},[37,37681,34439],{"class":43},[37,37683,37684,37686,37688,37690,37692,37694,37696],{"class":39,"line":337},[37,37685,31576],{"class":50},[37,37687,55],{"class":54},[37,37689,31583],{"class":185},[37,37691,2069],{"class":54},[37,37693,31588],{"class":50},[37,37695,2066],{"class":54},[37,37697,34456],{"class":185},[37,37699,37700,37702,37704],{"class":39,"line":342},[37,37701,31628],{"class":50},[37,37703,55],{"class":54},[37,37705,32627],{"class":50},[37,37707,37708],{"class":39,"line":347},[37,37709,2757],{"emptyLinePlaceholder":454},[37,37711,37712],{"class":39,"line":352},[37,37713,34473],{"class":43},[37,37715,37716,37718,37720],{"class":39,"line":357},[37,37717,34478],{"class":50},[37,37719,55],{"class":54},[37,37721,32680],{"class":61},[37,37723,37724,37726,37728],{"class":39,"line":362},[37,37725,34487],{"class":50},[37,37727,55],{"class":54},[37,37729,3435],{"class":61},[37,37731,37732],{"class":39,"line":367},[37,37733,2757],{"emptyLinePlaceholder":454},[37,37735,37736],{"class":39,"line":373},[37,37737,34500],{"class":43},[37,37739,37740],{"class":39,"line":392},[37,37741,34505],{"class":43},[37,37743,37744],{"class":39,"line":398},[37,37745,34510],{"class":43},[37,37747,37748,37750],{"class":39,"line":409},[37,37749,34515],{"class":54},[37,37751,33222],{"class":50},[37,37753,37754],{"class":39,"line":415},[37,37755,34522],{"class":43},[37,37757,37758,37760,37762,37764],{"class":39,"line":420},[37,37759,3753],{"class":54},[37,37761,34529],{"class":50},[37,37763,26385],{"class":54},[37,37765,34534],{"class":50},[37,37767,37768,37770,37772],{"class":39,"line":425},[37,37769,34539],{"class":50},[37,37771,55],{"class":54},[37,37773,34544],{"class":50},[37,37775,37776,37778,37780],{"class":39,"line":431},[37,37777,34549],{"class":50},[37,37779,55],{"class":54},[37,37781,34554],{"class":50},[37,37783,37784],{"class":39,"line":436},[37,37785,34559],{"class":43},[37,37787,37788],{"class":39,"line":442},[37,37789,33213],{"class":50},[37,37791,37792],{"class":39,"line":8374},[37,37793,34568],{"class":43},[37,37795,37796,37798,37800],{"class":39,"line":8386},[37,37797,32998],{"class":50},[37,37799,55],{"class":54},[37,37801,34577],{"class":50},[37,37803,37804],{"class":39,"line":8398},[37,37805,34582],{"class":43},[37,37807,37808,37810,37812,37814,37816,37818,37820],{"class":39,"line":10057},[37,37809,33015],{"class":50},[37,37811,55],{"class":54},[37,37813,33020],{"class":50},[37,37815,33023],{"class":159},[37,37817,55],{"class":54},[37,37819,332],{"class":61},[37,37821,280],{"class":50},[37,37823,37824],{"class":39,"line":10082},[37,37825,34603],{"class":43},[37,37827,37828],{"class":39,"line":10105},[37,37829,34608],{"class":43},[37,37831,37832],{"class":39,"line":10129},[37,37833,34613],{"class":43},[37,37835,37836,37838,37840,37842,37844],{"class":39,"line":10134},[37,37837,34618],{"class":50},[37,37839,9818],{"class":54},[37,37841,33125],{"class":50},[37,37843,3299],{"class":54},[37,37845,34627],{"class":50},[37,37847,37848],{"class":39,"line":10139},[37,37849,34632],{"class":43},[37,37851,37852,37854,37856,37858,37860],{"class":39,"line":10144},[37,37853,34637],{"class":50},[37,37855,9818],{"class":54},[37,37857,34642],{"class":50},[37,37859,135],{"class":61},[37,37861,280],{"class":50},[37,37863,37864],{"class":39,"line":10153},[37,37865,2757],{"emptyLinePlaceholder":454},[37,37867,37868],{"class":39,"line":10158},[37,37869,34655],{"class":43},[37,37871,37872,37874,37876,37878,37880],{"class":39,"line":10164},[37,37873,34660],{"class":50},[37,37875,55],{"class":54},[37,37877,34665],{"class":50},[37,37879,1094],{"class":54},[37,37881,34670],{"class":50},[37,37883,37884],{"class":39,"line":10185},[37,37885,34675],{"class":43},[37,37887,37888,37890,37892,37894],{"class":39,"line":10191},[37,37889,32789],{"class":61},[37,37891,165],{"class":50},[37,37893,34684],{"class":185},[37,37895,34687],{"class":50},[37,37897,37898],{"class":39,"line":10205},[37,37899,2757],{"emptyLinePlaceholder":454},[37,37901,37902],{"class":39,"line":10211},[37,37903,34696],{"class":43},[37,37905,37906,37908,37910,37912,37914],{"class":39,"line":10238},[37,37907,1907],{"class":54},[37,37909,31559],{"class":61},[37,37911,3299],{"class":54},[37,37913,31564],{"class":185},[37,37915,4089],{"class":50},[37,37917,37918],{"class":39,"line":10247},[37,37919,34713],{"class":43},[37,37921,37922,37924,37926],{"class":39,"line":10253},[37,37923,31628],{"class":50},[37,37925,55],{"class":54},[37,37927,37426],{"class":50},[37,37929,37930],{"class":39,"line":10261},[37,37931,34726],{"class":43},[37,37933,37934],{"class":39,"line":10266},[37,37935,34731],{"class":43},[37,37937,37938,37940,37942],{"class":39,"line":16945},[37,37939,34736],{"class":50},[37,37941,34739],{"class":185},[37,37943,175],{"class":50},[37,37945,37946],{"class":39,"line":16951},[37,37947,34746],{"class":43},[37,37949,37950,37952,37954],{"class":39,"line":16974},[37,37951,34359],{"class":50},[37,37953,55],{"class":54},[37,37955,34755],{"class":50},[37,37957,37958],{"class":39,"line":16980},[37,37959,34760],{"class":43},[37,37961,37962],{"class":39,"line":17003},[37,37963,34765],{"class":50},[37,37965,37966],{"class":39,"line":17017},[37,37967,2757],{"emptyLinePlaceholder":454},[37,37969,37970],{"class":39,"line":17037},[37,37971,34774],{"class":43},[37,37973,37974],{"class":39,"line":17043},[37,37975,34779],{"class":43},[37,37977,37978,37980,37982,37984,37986,37988,37990],{"class":39,"line":17054},[37,37979,31576],{"class":50},[37,37981,55],{"class":54},[37,37983,31583],{"class":185},[37,37985,2069],{"class":54},[37,37987,31588],{"class":50},[37,37989,2066],{"class":54},[37,37991,34456],{"class":185},[37,37993,37994,37996,37998],{"class":39,"line":17077},[37,37995,31628],{"class":50},[37,37997,55],{"class":54},[37,37999,32627],{"class":50},[37,38001,38002],{"class":39,"line":17099},[37,38003,34808],{"class":43},[37,38005,38006],{"class":39,"line":17104},[37,38007,34813],{"class":43},[37,38009,38010,38012,38014,38016,38018,38020,38022,38024,38026,38028,38030,38032,38034,38036,38038,38040,38042,38044,38046,38048,38050,38052,38054],{"class":39,"line":17110},[37,38011,34818],{"class":50},[37,38013,55],{"class":54},[37,38015,1399],{"class":50},[37,38017,34825],{"class":185},[37,38019,65],{"class":50},[37,38021,34830],{"class":185},[37,38023,65],{"class":50},[37,38025,34835],{"class":185},[37,38027,65],{"class":50},[37,38029,34840],{"class":185},[37,38031,65],{"class":50},[37,38033,34845],{"class":185},[37,38035,65],{"class":50},[37,38037,34850],{"class":185},[37,38039,65],{"class":50},[37,38041,34855],{"class":185},[37,38043,65],{"class":50},[37,38045,34860],{"class":185},[37,38047,65],{"class":50},[37,38049,34865],{"class":185},[37,38051,65],{"class":50},[37,38053,34870],{"class":185},[37,38055,389],{"class":50},[37,38057,38058,38060],{"class":39,"line":17124},[37,38059,34515],{"class":54},[37,38061,33222],{"class":50},[37,38063,38064],{"class":39,"line":17137},[37,38065,34883],{"class":43},[37,38067,38068,38070,38072,38074],{"class":39,"line":17142},[37,38069,3753],{"class":54},[37,38071,34890],{"class":50},[37,38073,26385],{"class":54},[37,38075,34534],{"class":50},[37,38077,38078,38080,38082],{"class":39,"line":17156},[37,38079,32948],{"class":50},[37,38081,55],{"class":54},[37,38083,32953],{"class":50},[37,38085,38086,38088,38090],{"class":39,"line":17161},[37,38087,32963],{"class":50},[37,38089,55],{"class":54},[37,38091,32968],{"class":50},[37,38093,38094],{"class":39,"line":17167},[37,38095,2757],{"emptyLinePlaceholder":454},[37,38097,38098],{"class":39,"line":17172},[37,38099,34919],{"class":43},[37,38101,38102],{"class":39,"line":17186},[37,38103,33213],{"class":50},[37,38105,38106],{"class":39,"line":17191},[37,38107,34928],{"class":43},[37,38109,38110,38112,38114],{"class":39,"line":17196},[37,38111,32998],{"class":50},[37,38113,55],{"class":54},[37,38115,33003],{"class":50},[37,38117,38118],{"class":39,"line":17210},[37,38119,34941],{"class":43},[37,38121,38122,38124,38126,38128,38130,38132,38134],{"class":39,"line":17222},[37,38123,33015],{"class":50},[37,38125,55],{"class":54},[37,38127,33020],{"class":50},[37,38129,33023],{"class":159},[37,38131,55],{"class":54},[37,38133,332],{"class":61},[37,38135,280],{"class":50},[37,38137,38138],{"class":39,"line":17227},[37,38139,34962],{"class":43},[37,38141,38142,38144,38146],{"class":39,"line":17240},[37,38143,34967],{"class":50},[37,38145,55],{"class":54},[37,38147,34972],{"class":50},[37,38149,38150,38152,38154],{"class":39,"line":17245},[37,38151,34977],{"class":50},[37,38153,55],{"class":54},[37,38155,34982],{"class":50},[37,38157,38158,38160,38162,38164,38166,38168,38170,38172],{"class":39,"line":17250},[37,38159,34987],{"class":61},[37,38161,165],{"class":50},[37,38163,34992],{"class":185},[37,38165,34995],{"class":50},[37,38167,34998],{"class":185},[37,38169,65],{"class":50},[37,38171,35003],{"class":185},[37,38173,35006],{"class":50},[498,38175,38177],{"id":38176},"_22vgg","2.2.VGG",[22339,38179,38181],{"id":38180},"_221原理","2.2.1.原理",[14,38183,38184],{},[1838,38185],{"alt":32,"src":38186},"\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",[14,38188,38189],{},[1838,38190],{"alt":32,"src":38191},"\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",[14,38193,38194],{},[1838,38195],{"alt":32,"src":38196},"\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",[14,38198,38199],{},"参数详细描述：",[14,38201,38202],{},[1838,38203],{"alt":32,"src":38204},"\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",[14,38206,38207],{},[1838,38208],{"alt":32,"src":38209},"\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",[14,38211,38212],{},[1838,38213],{"alt":32,"src":38214},"\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",[14,38216,38217],{},[1838,38218],{"alt":32,"src":38219},"\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",[14,38221,38222],{},[1838,38223],{"alt":32,"src":38224},"\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",[22339,38226,38228],{"id":38227},"_222代码实现","2.2.2.代码实现",[481,38230,38231],{},[484,38232,38233],{},"网络搭建",[27,38235,38237],{"className":29,"code":38236,"language":31,"meta":32,"style":32},"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",[34,38238,38239,38245,38257,38267,38277,38281,38298,38306,38325,38330,38335,38347,38385,38390,38426,38430,38459,38464,38469,38480,38516,38520,38556,38560,38588,38592,38597,38608,38644,38648,38684,38688,38724,38728,38756,38760,38765,38776,38813,38817,38853,38857,38893,38897,38925,38929,38934,38945,38981,38985,39021,39025,39061,39065,39093,39097,39102,39113,39118,39123,39128,39149,39153,39165,39169,39181,39185,39189,39194,39199,39214,39219,39229,39234,39249,39254,39273,39278,39287,39292,39302,39307,39312,39326,39331,39345,39353,39357,39361,39369,39380,39391,39402,39413,39424,39435,39441,39445,39450,39463,39483,39489,39498],{"__ignoreMap":32},[37,38240,38241,38243],{"class":39,"line":40},[37,38242,30732],{"class":54},[37,38244,30735],{"class":50},[37,38246,38247,38249,38252,38254],{"class":39,"line":47},[37,38248,31076],{"class":54},[37,38250,38251],{"class":50}," sympy.core.sympify ",[37,38253,30732],{"class":54},[37,38255,38256],{"class":50}," kernS\n",[37,38258,38259,38261,38263,38265],{"class":39,"line":104},[37,38260,31076],{"class":54},[37,38262,31079],{"class":50},[37,38264,30732],{"class":54},[37,38266,31084],{"class":50},[37,38268,38269,38271,38273,38275],{"class":39,"line":113},[37,38270,31076],{"class":54},[37,38272,31096],{"class":50},[37,38274,30732],{"class":54},[37,38276,31101],{"class":50},[37,38278,38279],{"class":39,"line":189},[37,38280,2757],{"emptyLinePlaceholder":454},[37,38282,38283,38285,38288,38290,38292,38294,38296],{"class":39,"line":195},[37,38284,15035],{"class":54},[37,38286,38287],{"class":2320}," VGG16",[37,38289,165],{"class":50},[37,38291,31117],{"class":2320},[37,38293,1068],{"class":50},[37,38295,31122],{"class":2320},[37,38297,31125],{"class":50},[37,38299,38300,38302,38304],{"class":39,"line":201},[37,38301,31140],{"class":54},[37,38303,31143],{"class":61},[37,38305,31146],{"class":50},[37,38307,38308,38310,38312,38315,38317,38319,38321,38323],{"class":39,"line":207},[37,38309,31156],{"class":61},[37,38311,165],{"class":50},[37,38313,38314],{"class":61},"VGG16",[37,38316,12776],{"class":50},[37,38318,31162],{"class":61},[37,38320,31165],{"class":50},[37,38322,31168],{"class":61},[37,38324,2333],{"class":50},[37,38326,38327],{"class":39,"line":213},[37,38328,38329],{"class":43},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[37,38331,38332],{"class":39,"line":218},[37,38333,38334],{"class":43},"        # 这里用的是灰度图\n",[37,38336,38337,38339,38342,38344],{"class":39,"line":227},[37,38338,31184],{"class":61},[37,38340,38341],{"class":50},".block1",[37,38343,55],{"class":54},[37,38345,38346],{"class":50},"nn.Sequential(\n",[37,38348,38349,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376,38378,38380,38382],{"class":39,"line":232},[37,38350,38351],{"class":50},"            nn.Conv2d(",[37,38353,31195],{"class":159},[37,38355,55],{"class":54},[37,38357,332],{"class":61},[37,38359,65],{"class":50},[37,38361,31204],{"class":159},[37,38363,55],{"class":54},[37,38365,726],{"class":61},[37,38367,65],{"class":50},[37,38369,31213],{"class":159},[37,38371,55],{"class":54},[37,38373,62],{"class":61},[37,38375,65],{"class":50},[37,38377,31222],{"class":159},[37,38379,55],{"class":54},[37,38381,332],{"class":61},[37,38383,38384],{"class":50},"),\n",[37,38386,38387],{"class":39,"line":238},[37,38388,38389],{"class":50},"            nn.ReLU(),\n",[37,38391,38392,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414,38416,38418,38420,38422,38424],{"class":39,"line":244},[37,38393,38351],{"class":50},[37,38395,31195],{"class":159},[37,38397,55],{"class":54},[37,38399,726],{"class":61},[37,38401,65],{"class":50},[37,38403,31204],{"class":159},[37,38405,55],{"class":54},[37,38407,726],{"class":61},[37,38409,65],{"class":50},[37,38411,31213],{"class":159},[37,38413,55],{"class":54},[37,38415,62],{"class":61},[37,38417,65],{"class":50},[37,38419,31222],{"class":159},[37,38421,55],{"class":54},[37,38423,332],{"class":61},[37,38425,38384],{"class":50},[37,38427,38428],{"class":39,"line":250},[37,38429,38389],{"class":50},[37,38431,38432,38435,38437,38439,38441,38443,38445,38447,38449,38451,38453,38455,38457],{"class":39,"line":256},[37,38433,38434],{"class":50},"            nn.MaxPool2d(",[37,38436,31213],{"class":159},[37,38438,55],{"class":54},[37,38440,602],{"class":61},[37,38442,65],{"class":50},[37,38444,31268],{"class":159},[37,38446,55],{"class":54},[37,38448,602],{"class":61},[37,38450,65],{"class":50},[37,38452,31222],{"class":159},[37,38454,55],{"class":54},[37,38456,135],{"class":61},[37,38458,280],{"class":50},[37,38460,38461],{"class":39,"line":261},[37,38462,38463],{"class":50},"        )\n",[37,38465,38466],{"class":39,"line":267},[37,38467,38468],{"class":43},"        # 第二层\n",[37,38470,38471,38473,38476,38478],{"class":39,"line":283},[37,38472,31184],{"class":61},[37,38474,38475],{"class":50},".block2",[37,38477,55],{"class":54},[37,38479,38346],{"class":50},[37,38481,38482,38484,38486,38488,38490,38492,38494,38496,38498,38500,38502,38504,38506,38508,38510,38512,38514],{"class":39,"line":288},[37,38483,38351],{"class":50},[37,38485,31195],{"class":159},[37,38487,55],{"class":54},[37,38489,726],{"class":61},[37,38491,65],{"class":50},[37,38493,31204],{"class":159},[37,38495,55],{"class":54},[37,38497,32408],{"class":61},[37,38499,65],{"class":50},[37,38501,31213],{"class":159},[37,38503,55],{"class":54},[37,38505,62],{"class":61},[37,38507,65],{"class":50},[37,38509,31222],{"class":159},[37,38511,55],{"class":54},[37,38513,332],{"class":61},[37,38515,38384],{"class":50},[37,38517,38518],{"class":39,"line":294},[37,38519,38389],{"class":50},[37,38521,38522,38524,38526,38528,38530,38532,38534,38536,38538,38540,38542,38544,38546,38548,38550,38552,38554],{"class":39,"line":300},[37,38523,38351],{"class":50},[37,38525,31195],{"class":159},[37,38527,55],{"class":54},[37,38529,32408],{"class":61},[37,38531,65],{"class":50},[37,38533,31204],{"class":159},[37,38535,55],{"class":54},[37,38537,32408],{"class":61},[37,38539,65],{"class":50},[37,38541,31213],{"class":159},[37,38543,55],{"class":54},[37,38545,62],{"class":61},[37,38547,65],{"class":50},[37,38549,31222],{"class":159},[37,38551,55],{"class":54},[37,38553,332],{"class":61},[37,38555,38384],{"class":50},[37,38557,38558],{"class":39,"line":306},[37,38559,38389],{"class":50},[37,38561,38562,38564,38566,38568,38570,38572,38574,38576,38578,38580,38582,38584,38586],{"class":39,"line":312},[37,38563,38434],{"class":50},[37,38565,31213],{"class":159},[37,38567,55],{"class":54},[37,38569,602],{"class":61},[37,38571,65],{"class":50},[37,38573,31268],{"class":159},[37,38575,55],{"class":54},[37,38577,602],{"class":61},[37,38579,65],{"class":50},[37,38581,31222],{"class":159},[37,38583,55],{"class":54},[37,38585,135],{"class":61},[37,38587,280],{"class":50},[37,38589,38590],{"class":39,"line":317},[37,38591,38463],{"class":50},[37,38593,38594],{"class":39,"line":323},[37,38595,38596],{"class":43},"        # 第三层\n",[37,38598,38599,38601,38604,38606],{"class":39,"line":337},[37,38600,31184],{"class":61},[37,38602,38603],{"class":50},".block3",[37,38605,55],{"class":54},[37,38607,38346],{"class":50},[37,38609,38610,38612,38614,38616,38618,38620,38622,38624,38626,38628,38630,38632,38634,38636,38638,38640,38642],{"class":39,"line":342},[37,38611,38351],{"class":50},[37,38613,31195],{"class":159},[37,38615,55],{"class":54},[37,38617,32408],{"class":61},[37,38619,65],{"class":50},[37,38621,31204],{"class":159},[37,38623,55],{"class":54},[37,38625,35207],{"class":61},[37,38627,65],{"class":50},[37,38629,31213],{"class":159},[37,38631,55],{"class":54},[37,38633,62],{"class":61},[37,38635,65],{"class":50},[37,38637,31222],{"class":159},[37,38639,55],{"class":54},[37,38641,332],{"class":61},[37,38643,38384],{"class":50},[37,38645,38646],{"class":39,"line":347},[37,38647,38389],{"class":50},[37,38649,38650,38652,38654,38656,38658,38660,38662,38664,38666,38668,38670,38672,38674,38676,38678,38680,38682],{"class":39,"line":352},[37,38651,38351],{"class":50},[37,38653,31195],{"class":159},[37,38655,55],{"class":54},[37,38657,35207],{"class":61},[37,38659,65],{"class":50},[37,38661,31204],{"class":159},[37,38663,55],{"class":54},[37,38665,35207],{"class":61},[37,38667,65],{"class":50},[37,38669,31213],{"class":159},[37,38671,55],{"class":54},[37,38673,62],{"class":61},[37,38675,65],{"class":50},[37,38677,31222],{"class":159},[37,38679,55],{"class":54},[37,38681,332],{"class":61},[37,38683,38384],{"class":50},[37,38685,38686],{"class":39,"line":357},[37,38687,38389],{"class":50},[37,38689,38690,38692,38694,38696,38698,38700,38702,38704,38706,38708,38710,38712,38714,38716,38718,38720,38722],{"class":39,"line":362},[37,38691,38351],{"class":50},[37,38693,31195],{"class":159},[37,38695,55],{"class":54},[37,38697,35207],{"class":61},[37,38699,65],{"class":50},[37,38701,31204],{"class":159},[37,38703,55],{"class":54},[37,38705,35207],{"class":61},[37,38707,65],{"class":50},[37,38709,31213],{"class":159},[37,38711,55],{"class":54},[37,38713,62],{"class":61},[37,38715,65],{"class":50},[37,38717,31222],{"class":159},[37,38719,55],{"class":54},[37,38721,332],{"class":61},[37,38723,38384],{"class":50},[37,38725,38726],{"class":39,"line":367},[37,38727,38389],{"class":50},[37,38729,38730,38732,38734,38736,38738,38740,38742,38744,38746,38748,38750,38752,38754],{"class":39,"line":373},[37,38731,38434],{"class":50},[37,38733,31213],{"class":159},[37,38735,55],{"class":54},[37,38737,602],{"class":61},[37,38739,65],{"class":50},[37,38741,31268],{"class":159},[37,38743,55],{"class":54},[37,38745,602],{"class":61},[37,38747,65],{"class":50},[37,38749,31222],{"class":159},[37,38751,55],{"class":54},[37,38753,135],{"class":61},[37,38755,280],{"class":50},[37,38757,38758],{"class":39,"line":392},[37,38759,38463],{"class":50},[37,38761,38762],{"class":39,"line":398},[37,38763,38764],{"class":43},"        # 第四层\n",[37,38766,38767,38769,38772,38774],{"class":39,"line":409},[37,38768,31184],{"class":61},[37,38770,38771],{"class":50},".block4",[37,38773,55],{"class":54},[37,38775,38346],{"class":50},[37,38777,38778,38780,38782,38784,38786,38788,38790,38792,38795,38797,38799,38801,38803,38805,38807,38809,38811],{"class":39,"line":415},[37,38779,38351],{"class":50},[37,38781,31195],{"class":159},[37,38783,55],{"class":54},[37,38785,35207],{"class":61},[37,38787,65],{"class":50},[37,38789,31204],{"class":159},[37,38791,55],{"class":54},[37,38793,38794],{"class":61},"512",[37,38796,65],{"class":50},[37,38798,31213],{"class":159},[37,38800,55],{"class":54},[37,38802,62],{"class":61},[37,38804,65],{"class":50},[37,38806,31222],{"class":159},[37,38808,55],{"class":54},[37,38810,332],{"class":61},[37,38812,38384],{"class":50},[37,38814,38815],{"class":39,"line":420},[37,38816,38389],{"class":50},[37,38818,38819,38821,38823,38825,38827,38829,38831,38833,38835,38837,38839,38841,38843,38845,38847,38849,38851],{"class":39,"line":425},[37,38820,38351],{"class":50},[37,38822,31195],{"class":159},[37,38824,55],{"class":54},[37,38826,38794],{"class":61},[37,38828,65],{"class":50},[37,38830,31204],{"class":159},[37,38832,55],{"class":54},[37,38834,38794],{"class":61},[37,38836,65],{"class":50},[37,38838,31213],{"class":159},[37,38840,55],{"class":54},[37,38842,62],{"class":61},[37,38844,65],{"class":50},[37,38846,31222],{"class":159},[37,38848,55],{"class":54},[37,38850,332],{"class":61},[37,38852,38384],{"class":50},[37,38854,38855],{"class":39,"line":431},[37,38856,38389],{"class":50},[37,38858,38859,38861,38863,38865,38867,38869,38871,38873,38875,38877,38879,38881,38883,38885,38887,38889,38891],{"class":39,"line":436},[37,38860,38351],{"class":50},[37,38862,31195],{"class":159},[37,38864,55],{"class":54},[37,38866,38794],{"class":61},[37,38868,65],{"class":50},[37,38870,31204],{"class":159},[37,38872,55],{"class":54},[37,38874,38794],{"class":61},[37,38876,65],{"class":50},[37,38878,31213],{"class":159},[37,38880,55],{"class":54},[37,38882,62],{"class":61},[37,38884,65],{"class":50},[37,38886,31222],{"class":159},[37,38888,55],{"class":54},[37,38890,332],{"class":61},[37,38892,38384],{"class":50},[37,38894,38895],{"class":39,"line":442},[37,38896,38389],{"class":50},[37,38898,38899,38901,38903,38905,38907,38909,38911,38913,38915,38917,38919,38921,38923],{"class":39,"line":8374},[37,38900,38434],{"class":50},[37,38902,31213],{"class":159},[37,38904,55],{"class":54},[37,38906,602],{"class":61},[37,38908,65],{"class":50},[37,38910,31268],{"class":159},[37,38912,55],{"class":54},[37,38914,602],{"class":61},[37,38916,65],{"class":50},[37,38918,31222],{"class":159},[37,38920,55],{"class":54},[37,38922,135],{"class":61},[37,38924,280],{"class":50},[37,38926,38927],{"class":39,"line":8386},[37,38928,38463],{"class":50},[37,38930,38931],{"class":39,"line":8398},[37,38932,38933],{"class":43},"        # 第五层\n",[37,38935,38936,38938,38941,38943],{"class":39,"line":10057},[37,38937,31184],{"class":61},[37,38939,38940],{"class":50},".block5",[37,38942,55],{"class":54},[37,38944,38346],{"class":50},[37,38946,38947,38949,38951,38953,38955,38957,38959,38961,38963,38965,38967,38969,38971,38973,38975,38977,38979],{"class":39,"line":10082},[37,38948,38351],{"class":50},[37,38950,31195],{"class":159},[37,38952,55],{"class":54},[37,38954,38794],{"class":61},[37,38956,65],{"class":50},[37,38958,31204],{"class":159},[37,38960,55],{"class":54},[37,38962,38794],{"class":61},[37,38964,65],{"class":50},[37,38966,31213],{"class":159},[37,38968,55],{"class":54},[37,38970,62],{"class":61},[37,38972,65],{"class":50},[37,38974,31222],{"class":159},[37,38976,55],{"class":54},[37,38978,332],{"class":61},[37,38980,38384],{"class":50},[37,38982,38983],{"class":39,"line":10105},[37,38984,38389],{"class":50},[37,38986,38987,38989,38991,38993,38995,38997,38999,39001,39003,39005,39007,39009,39011,39013,39015,39017,39019],{"class":39,"line":10129},[37,38988,38351],{"class":50},[37,38990,31195],{"class":159},[37,38992,55],{"class":54},[37,38994,38794],{"class":61},[37,38996,65],{"class":50},[37,38998,31204],{"class":159},[37,39000,55],{"class":54},[37,39002,38794],{"class":61},[37,39004,65],{"class":50},[37,39006,31213],{"class":159},[37,39008,55],{"class":54},[37,39010,62],{"class":61},[37,39012,65],{"class":50},[37,39014,31222],{"class":159},[37,39016,55],{"class":54},[37,39018,332],{"class":61},[37,39020,38384],{"class":50},[37,39022,39023],{"class":39,"line":10134},[37,39024,38389],{"class":50},[37,39026,39027,39029,39031,39033,39035,39037,39039,39041,39043,39045,39047,39049,39051,39053,39055,39057,39059],{"class":39,"line":10139},[37,39028,38351],{"class":50},[37,39030,31195],{"class":159},[37,39032,55],{"class":54},[37,39034,38794],{"class":61},[37,39036,65],{"class":50},[37,39038,31204],{"class":159},[37,39040,55],{"class":54},[37,39042,38794],{"class":61},[37,39044,65],{"class":50},[37,39046,31213],{"class":159},[37,39048,55],{"class":54},[37,39050,62],{"class":61},[37,39052,65],{"class":50},[37,39054,31222],{"class":159},[37,39056,55],{"class":54},[37,39058,332],{"class":61},[37,39060,38384],{"class":50},[37,39062,39063],{"class":39,"line":10144},[37,39064,38389],{"class":50},[37,39066,39067,39069,39071,39073,39075,39077,39079,39081,39083,39085,39087,39089,39091],{"class":39,"line":10153},[37,39068,38434],{"class":50},[37,39070,31213],{"class":159},[37,39072,55],{"class":54},[37,39074,602],{"class":61},[37,39076,65],{"class":50},[37,39078,31268],{"class":159},[37,39080,55],{"class":54},[37,39082,602],{"class":61},[37,39084,65],{"class":50},[37,39086,31222],{"class":159},[37,39088,55],{"class":54},[37,39090,135],{"class":61},[37,39092,280],{"class":50},[37,39094,39095],{"class":39,"line":10158},[37,39096,38463],{"class":50},[37,39098,39099],{"class":39,"line":10164},[37,39100,39101],{"class":43},"        # 全连接层\n",[37,39103,39104,39106,39109,39111],{"class":39,"line":10185},[37,39105,31184],{"class":61},[37,39107,39108],{"class":50},".block6",[37,39110,55],{"class":54},[37,39112,38346],{"class":50},[37,39114,39115],{"class":39,"line":10191},[37,39116,39117],{"class":43},"            # 平展操作\n",[37,39119,39120],{"class":39,"line":10205},[37,39121,39122],{"class":43},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[37,39124,39125],{"class":39,"line":10211},[37,39126,39127],{"class":50},"            nn.Flatten(),\n",[37,39129,39130,39133,39135,39137,39139,39141,39143,39145,39147],{"class":39,"line":10238},[37,39131,39132],{"class":50},"            nn.Linear(",[37,39134,885],{"class":61},[37,39136,967],{"class":54},[37,39138,885],{"class":61},[37,39140,967],{"class":54},[37,39142,38794],{"class":61},[37,39144,65],{"class":50},[37,39146,35207],{"class":61},[37,39148,38384],{"class":50},[37,39150,39151],{"class":39,"line":10247},[37,39152,38389],{"class":50},[37,39154,39155,39157,39159,39161,39163],{"class":39,"line":10253},[37,39156,39132],{"class":50},[37,39158,35207],{"class":61},[37,39160,65],{"class":50},[37,39162,32408],{"class":61},[37,39164,38384],{"class":50},[37,39166,39167],{"class":39,"line":10261},[37,39168,38389],{"class":50},[37,39170,39171,39173,39175,39177,39179],{"class":39,"line":10266},[37,39172,39132],{"class":50},[37,39174,32408],{"class":61},[37,39176,65],{"class":50},[37,39178,98],{"class":61},[37,39180,280],{"class":50},[37,39182,39183],{"class":39,"line":16945},[37,39184,38463],{"class":50},[37,39186,39187],{"class":39,"line":16951},[37,39188,2757],{"emptyLinePlaceholder":454},[37,39190,39191],{"class":39,"line":16974},[37,39192,39193],{"class":43},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[37,39195,39196],{"class":39,"line":16980},[37,39197,39198],{"class":43},"        # 循环遍历模型\n",[37,39200,39201,39203,39206,39208,39211],{"class":39,"line":17003},[37,39202,3753],{"class":54},[37,39204,39205],{"class":50}," m ",[37,39207,26385],{"class":54},[37,39209,39210],{"class":61}," self",[37,39212,39213],{"class":50},".modules():\n",[37,39215,39216],{"class":39,"line":17017},[37,39217,39218],{"class":43},"            # print(m)\n",[37,39220,39221,39223,39226],{"class":39,"line":17037},[37,39222,4992],{"class":54},[37,39224,39225],{"class":61}," isinstance",[37,39227,39228],{"class":50},"(m,nn.Conv2d):\n",[37,39230,39231],{"class":39,"line":17043},[37,39232,39233],{"class":43},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[37,39235,39236,39239,39242,39244,39247],{"class":39,"line":17054},[37,39237,39238],{"class":50},"                nn.init.kaiming_normal_(m.weight,",[37,39240,39241],{"class":159},"nonlinearity",[37,39243,55],{"class":54},[37,39245,39246],{"class":185},"'relu'",[37,39248,280],{"class":50},[37,39250,39251],{"class":39,"line":17077},[37,39252,39253],{"class":43},"                # 判断b参数是否存在\n",[37,39255,39256,39259,39262,39265,39268,39271],{"class":39,"line":17099},[37,39257,39258],{"class":54},"                if",[37,39260,39261],{"class":50}," m.bias ",[37,39263,39264],{"class":54},"is",[37,39266,39267],{"class":54}," not",[37,39269,39270],{"class":61}," None",[37,39272,4089],{"class":50},[37,39274,39275],{"class":39,"line":17104},[37,39276,39277],{"class":43},"                    # 如果参数不存在的化初始化b=0\n",[37,39279,39280,39283,39285],{"class":39,"line":17110},[37,39281,39282],{"class":50},"                    nn.init.constant_(m.bias,",[37,39284,135],{"class":61},[37,39286,280],{"class":50},[37,39288,39289],{"class":39,"line":17124},[37,39290,39291],{"class":43},"            # 全连接层初始化\n",[37,39293,39294,39297,39299],{"class":39,"line":17137},[37,39295,39296],{"class":54},"            elif",[37,39298,39225],{"class":61},[37,39300,39301],{"class":50},"(m,nn.Linear):\n",[37,39303,39304],{"class":39,"line":17142},[37,39305,39306],{"class":43},"                # 这个初始化方法是利用的是正太分布的方式\n",[37,39308,39309],{"class":39,"line":17156},[37,39310,39311],{"class":43},"                # 均值为0，方差为0.01\n",[37,39313,39314,39317,39319,39321,39324],{"class":39,"line":17161},[37,39315,39316],{"class":50},"                nn.init.normal_(m.weight,",[37,39318,135],{"class":61},[37,39320,65],{"class":50},[37,39322,39323],{"class":61},"0.01",[37,39325,280],{"class":50},[37,39327,39328],{"class":39,"line":17167},[37,39329,39330],{"class":43},"                # 初始化b参数\n",[37,39332,39333,39335,39337,39339,39341,39343],{"class":39,"line":17172},[37,39334,39258],{"class":54},[37,39336,39261],{"class":50},[37,39338,39264],{"class":54},[37,39340,39267],{"class":54},[37,39342,39270],{"class":61},[37,39344,4089],{"class":50},[37,39346,39347,39349,39351],{"class":39,"line":17186},[37,39348,39282],{"class":50},[37,39350,135],{"class":61},[37,39352,280],{"class":50},[37,39354,39355],{"class":39,"line":17191},[37,39356,2757],{"emptyLinePlaceholder":454},[37,39358,39359],{"class":39,"line":17196},[37,39360,35502],{"class":43},[37,39362,39363,39365,39367],{"class":39,"line":17210},[37,39364,31140],{"class":54},[37,39366,31432],{"class":2320},[37,39368,31435],{"class":50},[37,39370,39371,39373,39375,39377],{"class":39,"line":17222},[37,39372,31440],{"class":50},[37,39374,55],{"class":54},[37,39376,31162],{"class":61},[37,39378,39379],{"class":50},".block1(x)\n",[37,39381,39382,39384,39386,39388],{"class":39,"line":17227},[37,39383,31440],{"class":50},[37,39385,55],{"class":54},[37,39387,31162],{"class":61},[37,39389,39390],{"class":50},".block2(x)\n",[37,39392,39393,39395,39397,39399],{"class":39,"line":17240},[37,39394,31440],{"class":50},[37,39396,55],{"class":54},[37,39398,31162],{"class":61},[37,39400,39401],{"class":50},".block3(x)\n",[37,39403,39404,39406,39408,39410],{"class":39,"line":17245},[37,39405,31440],{"class":50},[37,39407,55],{"class":54},[37,39409,31162],{"class":61},[37,39411,39412],{"class":50},".block4(x)\n",[37,39414,39415,39417,39419,39421],{"class":39,"line":17250},[37,39416,31440],{"class":50},[37,39418,55],{"class":54},[37,39420,31162],{"class":61},[37,39422,39423],{"class":50},".block5(x)\n",[37,39425,39426,39428,39430,39432],{"class":39,"line":17255},[37,39427,31440],{"class":50},[37,39429,55],{"class":54},[37,39431,31162],{"class":61},[37,39433,39434],{"class":50},".block6(x)\n",[37,39436,39437,39439],{"class":39,"line":17268},[37,39438,15093],{"class":54},[37,39440,31548],{"class":50},[37,39442,39443],{"class":39,"line":17273},[37,39444,2757],{"emptyLinePlaceholder":454},[37,39446,39447],{"class":39,"line":32971},[37,39448,39449],{"class":43},"# 验证模型\n",[37,39451,39452,39454,39456,39458,39461],{"class":39,"line":32977},[37,39453,1907],{"class":54},[37,39455,31559],{"class":61},[37,39457,3299],{"class":54},[37,39459,39460],{"class":185},"'__main__'",[37,39462,4089],{"class":50},[37,39464,39465,39467,39469,39471,39473,39475,39477,39479,39481],{"class":39,"line":32983},[37,39466,31576],{"class":50},[37,39468,55],{"class":54},[37,39470,30791],{"class":50},[37,39472,31583],{"class":185},[37,39474,2069],{"class":54},[37,39476,31588],{"class":50},[37,39478,2066],{"class":54},[37,39480,30816],{"class":185},[37,39482,280],{"class":50},[37,39484,39485,39487],{"class":39,"line":32989},[37,39486,31638],{"class":61},[37,39488,30825],{"class":50},[37,39490,39491,39493,39495],{"class":39,"line":32995},[37,39492,31628],{"class":50},[37,39494,55],{"class":54},[37,39496,39497],{"class":50},"VGG16().to(device)\n",[37,39499,39500,39502,39504,39506,39508,39510,39512,39514],{"class":39,"line":33006},[37,39501,31638],{"class":61},[37,39503,31641],{"class":50},[37,39505,332],{"class":61},[37,39507,65],{"class":50},[37,39509,31839],{"class":61},[37,39511,65],{"class":50},[37,39513,31839],{"class":61},[37,39515,31654],{"class":50},[481,39517,39518],{"start":47},[484,39519,39520],{},"训练代码",[14,39522,39523],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39525,39526],{},"解决方式:",[14,39528,39529],{},"①权重初始化",[27,39531,39533],{"className":29,"code":39532,"language":31,"meta":32,"style":32},"# 权重初始化,保证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",[34,39534,39535,39540,39545,39557,39562,39570,39575,39588,39593,39607,39612,39621,39626,39635,39640,39645,39658,39663,39677],{"__ignoreMap":32},[37,39536,39537],{"class":39,"line":40},[37,39538,39539],{"class":43},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[37,39541,39542],{"class":39,"line":47},[37,39543,39544],{"class":43},"# 循环遍历模型\n",[37,39546,39547,39549,39551,39553,39555],{"class":39,"line":104},[37,39548,3375],{"class":54},[37,39550,39205],{"class":50},[37,39552,26385],{"class":54},[37,39554,39210],{"class":61},[37,39556,39213],{"class":50},[37,39558,39559],{"class":39,"line":113},[37,39560,39561],{"class":43},"    # print(m)\n",[37,39563,39564,39566,39568],{"class":39,"line":189},[37,39565,3451],{"class":54},[37,39567,39225],{"class":61},[37,39569,39228],{"class":50},[37,39571,39572],{"class":39,"line":195},[37,39573,39574],{"class":43},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[37,39576,39577,39580,39582,39584,39586],{"class":39,"line":201},[37,39578,39579],{"class":50},"        nn.init.kaiming_normal_(m.weight,",[37,39581,39241],{"class":159},[37,39583,55],{"class":54},[37,39585,39246],{"class":185},[37,39587,280],{"class":50},[37,39589,39590],{"class":39,"line":207},[37,39591,39592],{"class":43},"        # 判断b参数是否存在\n",[37,39594,39595,39597,39599,39601,39603,39605],{"class":39,"line":213},[37,39596,2854],{"class":54},[37,39598,39261],{"class":50},[37,39600,39264],{"class":54},[37,39602,39267],{"class":54},[37,39604,39270],{"class":61},[37,39606,4089],{"class":50},[37,39608,39609],{"class":39,"line":218},[37,39610,39611],{"class":43},"            # 如果参数不存在的化初始化b=0\n",[37,39613,39614,39617,39619],{"class":39,"line":227},[37,39615,39616],{"class":50},"            nn.init.constant_(m.bias,",[37,39618,135],{"class":61},[37,39620,280],{"class":50},[37,39622,39623],{"class":39,"line":232},[37,39624,39625],{"class":43},"    # 全连接层初始化\n",[37,39627,39628,39631,39633],{"class":39,"line":238},[37,39629,39630],{"class":54},"    elif",[37,39632,39225],{"class":61},[37,39634,39301],{"class":50},[37,39636,39637],{"class":39,"line":244},[37,39638,39639],{"class":43},"        # 这个初始化方法是利用的是正太分布的方式\n",[37,39641,39642],{"class":39,"line":250},[37,39643,39644],{"class":43},"        # 均值为0，方差为0.01\n",[37,39646,39647,39650,39652,39654,39656],{"class":39,"line":256},[37,39648,39649],{"class":50},"        nn.init.normal_(m.weight,",[37,39651,135],{"class":61},[37,39653,65],{"class":50},[37,39655,39323],{"class":61},[37,39657,280],{"class":50},[37,39659,39660],{"class":39,"line":261},[37,39661,39662],{"class":43},"        # 初始化b参数\n",[37,39664,39665,39667,39669,39671,39673,39675],{"class":39,"line":267},[37,39666,2854],{"class":54},[37,39668,39261],{"class":50},[37,39670,39264],{"class":54},[37,39672,39267],{"class":54},[37,39674,39270],{"class":61},[37,39676,4089],{"class":50},[37,39678,39679,39681,39683],{"class":39,"line":283},[37,39680,39616],{"class":50},[37,39682,135],{"class":61},[37,39684,280],{"class":50},[14,39686,39687],{},"②尽可能地增加批次",[14,39689,39690],{},"训练完整代码：",[27,39692,39693],{"className":29,"code":38236,"language":31,"meta":32,"style":32},[34,39694,39695,39701,39711,39721,39731,39735,39751,39759,39777,39781,39785,39795,39831,39835,39871,39875,39903,39907,39911,39921,39957,39961,39997,40001,40029,40033,40037,40047,40083,40087,40123,40127,40163,40167,40195,40199,40203,40213,40249,40253,40289,40293,40329,40333,40361,40365,40369,40379,40415,40419,40455,40459,40495,40499,40527,40531,40535,40545,40549,40553,40557,40577,40581,40593,40597,40609,40613,40617,40621,40625,40637,40641,40649,40653,40665,40669,40683,40687,40695,40699,40707,40711,40715,40727,40731,40745,40753,40757,40761,40769,40779,40789,40799,40809,40819,40829,40835,40839,40843,40855,40875,40881,40889],{"__ignoreMap":32},[37,39696,39697,39699],{"class":39,"line":40},[37,39698,30732],{"class":54},[37,39700,30735],{"class":50},[37,39702,39703,39705,39707,39709],{"class":39,"line":47},[37,39704,31076],{"class":54},[37,39706,38251],{"class":50},[37,39708,30732],{"class":54},[37,39710,38256],{"class":50},[37,39712,39713,39715,39717,39719],{"class":39,"line":104},[37,39714,31076],{"class":54},[37,39716,31079],{"class":50},[37,39718,30732],{"class":54},[37,39720,31084],{"class":50},[37,39722,39723,39725,39727,39729],{"class":39,"line":113},[37,39724,31076],{"class":54},[37,39726,31096],{"class":50},[37,39728,30732],{"class":54},[37,39730,31101],{"class":50},[37,39732,39733],{"class":39,"line":189},[37,39734,2757],{"emptyLinePlaceholder":454},[37,39736,39737,39739,39741,39743,39745,39747,39749],{"class":39,"line":195},[37,39738,15035],{"class":54},[37,39740,38287],{"class":2320},[37,39742,165],{"class":50},[37,39744,31117],{"class":2320},[37,39746,1068],{"class":50},[37,39748,31122],{"class":2320},[37,39750,31125],{"class":50},[37,39752,39753,39755,39757],{"class":39,"line":201},[37,39754,31140],{"class":54},[37,39756,31143],{"class":61},[37,39758,31146],{"class":50},[37,39760,39761,39763,39765,39767,39769,39771,39773,39775],{"class":39,"line":207},[37,39762,31156],{"class":61},[37,39764,165],{"class":50},[37,39766,38314],{"class":61},[37,39768,12776],{"class":50},[37,39770,31162],{"class":61},[37,39772,31165],{"class":50},[37,39774,31168],{"class":61},[37,39776,2333],{"class":50},[37,39778,39779],{"class":39,"line":213},[37,39780,38329],{"class":43},[37,39782,39783],{"class":39,"line":218},[37,39784,38334],{"class":43},[37,39786,39787,39789,39791,39793],{"class":39,"line":227},[37,39788,31184],{"class":61},[37,39790,38341],{"class":50},[37,39792,55],{"class":54},[37,39794,38346],{"class":50},[37,39796,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829],{"class":39,"line":232},[37,39798,38351],{"class":50},[37,39800,31195],{"class":159},[37,39802,55],{"class":54},[37,39804,332],{"class":61},[37,39806,65],{"class":50},[37,39808,31204],{"class":159},[37,39810,55],{"class":54},[37,39812,726],{"class":61},[37,39814,65],{"class":50},[37,39816,31213],{"class":159},[37,39818,55],{"class":54},[37,39820,62],{"class":61},[37,39822,65],{"class":50},[37,39824,31222],{"class":159},[37,39826,55],{"class":54},[37,39828,332],{"class":61},[37,39830,38384],{"class":50},[37,39832,39833],{"class":39,"line":238},[37,39834,38389],{"class":50},[37,39836,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865,39867,39869],{"class":39,"line":244},[37,39838,38351],{"class":50},[37,39840,31195],{"class":159},[37,39842,55],{"class":54},[37,39844,726],{"class":61},[37,39846,65],{"class":50},[37,39848,31204],{"class":159},[37,39850,55],{"class":54},[37,39852,726],{"class":61},[37,39854,65],{"class":50},[37,39856,31213],{"class":159},[37,39858,55],{"class":54},[37,39860,62],{"class":61},[37,39862,65],{"class":50},[37,39864,31222],{"class":159},[37,39866,55],{"class":54},[37,39868,332],{"class":61},[37,39870,38384],{"class":50},[37,39872,39873],{"class":39,"line":250},[37,39874,38389],{"class":50},[37,39876,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901],{"class":39,"line":256},[37,39878,38434],{"class":50},[37,39880,31213],{"class":159},[37,39882,55],{"class":54},[37,39884,602],{"class":61},[37,39886,65],{"class":50},[37,39888,31268],{"class":159},[37,39890,55],{"class":54},[37,39892,602],{"class":61},[37,39894,65],{"class":50},[37,39896,31222],{"class":159},[37,39898,55],{"class":54},[37,39900,135],{"class":61},[37,39902,280],{"class":50},[37,39904,39905],{"class":39,"line":261},[37,39906,38463],{"class":50},[37,39908,39909],{"class":39,"line":267},[37,39910,38468],{"class":43},[37,39912,39913,39915,39917,39919],{"class":39,"line":283},[37,39914,31184],{"class":61},[37,39916,38475],{"class":50},[37,39918,55],{"class":54},[37,39920,38346],{"class":50},[37,39922,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955],{"class":39,"line":288},[37,39924,38351],{"class":50},[37,39926,31195],{"class":159},[37,39928,55],{"class":54},[37,39930,726],{"class":61},[37,39932,65],{"class":50},[37,39934,31204],{"class":159},[37,39936,55],{"class":54},[37,39938,32408],{"class":61},[37,39940,65],{"class":50},[37,39942,31213],{"class":159},[37,39944,55],{"class":54},[37,39946,62],{"class":61},[37,39948,65],{"class":50},[37,39950,31222],{"class":159},[37,39952,55],{"class":54},[37,39954,332],{"class":61},[37,39956,38384],{"class":50},[37,39958,39959],{"class":39,"line":294},[37,39960,38389],{"class":50},[37,39962,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995],{"class":39,"line":300},[37,39964,38351],{"class":50},[37,39966,31195],{"class":159},[37,39968,55],{"class":54},[37,39970,32408],{"class":61},[37,39972,65],{"class":50},[37,39974,31204],{"class":159},[37,39976,55],{"class":54},[37,39978,32408],{"class":61},[37,39980,65],{"class":50},[37,39982,31213],{"class":159},[37,39984,55],{"class":54},[37,39986,62],{"class":61},[37,39988,65],{"class":50},[37,39990,31222],{"class":159},[37,39992,55],{"class":54},[37,39994,332],{"class":61},[37,39996,38384],{"class":50},[37,39998,39999],{"class":39,"line":306},[37,40000,38389],{"class":50},[37,40002,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023,40025,40027],{"class":39,"line":312},[37,40004,38434],{"class":50},[37,40006,31213],{"class":159},[37,40008,55],{"class":54},[37,40010,602],{"class":61},[37,40012,65],{"class":50},[37,40014,31268],{"class":159},[37,40016,55],{"class":54},[37,40018,602],{"class":61},[37,40020,65],{"class":50},[37,40022,31222],{"class":159},[37,40024,55],{"class":54},[37,40026,135],{"class":61},[37,40028,280],{"class":50},[37,40030,40031],{"class":39,"line":317},[37,40032,38463],{"class":50},[37,40034,40035],{"class":39,"line":323},[37,40036,38596],{"class":43},[37,40038,40039,40041,40043,40045],{"class":39,"line":337},[37,40040,31184],{"class":61},[37,40042,38603],{"class":50},[37,40044,55],{"class":54},[37,40046,38346],{"class":50},[37,40048,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081],{"class":39,"line":342},[37,40050,38351],{"class":50},[37,40052,31195],{"class":159},[37,40054,55],{"class":54},[37,40056,32408],{"class":61},[37,40058,65],{"class":50},[37,40060,31204],{"class":159},[37,40062,55],{"class":54},[37,40064,35207],{"class":61},[37,40066,65],{"class":50},[37,40068,31213],{"class":159},[37,40070,55],{"class":54},[37,40072,62],{"class":61},[37,40074,65],{"class":50},[37,40076,31222],{"class":159},[37,40078,55],{"class":54},[37,40080,332],{"class":61},[37,40082,38384],{"class":50},[37,40084,40085],{"class":39,"line":347},[37,40086,38389],{"class":50},[37,40088,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121],{"class":39,"line":352},[37,40090,38351],{"class":50},[37,40092,31195],{"class":159},[37,40094,55],{"class":54},[37,40096,35207],{"class":61},[37,40098,65],{"class":50},[37,40100,31204],{"class":159},[37,40102,55],{"class":54},[37,40104,35207],{"class":61},[37,40106,65],{"class":50},[37,40108,31213],{"class":159},[37,40110,55],{"class":54},[37,40112,62],{"class":61},[37,40114,65],{"class":50},[37,40116,31222],{"class":159},[37,40118,55],{"class":54},[37,40120,332],{"class":61},[37,40122,38384],{"class":50},[37,40124,40125],{"class":39,"line":357},[37,40126,38389],{"class":50},[37,40128,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161],{"class":39,"line":362},[37,40130,38351],{"class":50},[37,40132,31195],{"class":159},[37,40134,55],{"class":54},[37,40136,35207],{"class":61},[37,40138,65],{"class":50},[37,40140,31204],{"class":159},[37,40142,55],{"class":54},[37,40144,35207],{"class":61},[37,40146,65],{"class":50},[37,40148,31213],{"class":159},[37,40150,55],{"class":54},[37,40152,62],{"class":61},[37,40154,65],{"class":50},[37,40156,31222],{"class":159},[37,40158,55],{"class":54},[37,40160,332],{"class":61},[37,40162,38384],{"class":50},[37,40164,40165],{"class":39,"line":367},[37,40166,38389],{"class":50},[37,40168,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193],{"class":39,"line":373},[37,40170,38434],{"class":50},[37,40172,31213],{"class":159},[37,40174,55],{"class":54},[37,40176,602],{"class":61},[37,40178,65],{"class":50},[37,40180,31268],{"class":159},[37,40182,55],{"class":54},[37,40184,602],{"class":61},[37,40186,65],{"class":50},[37,40188,31222],{"class":159},[37,40190,55],{"class":54},[37,40192,135],{"class":61},[37,40194,280],{"class":50},[37,40196,40197],{"class":39,"line":392},[37,40198,38463],{"class":50},[37,40200,40201],{"class":39,"line":398},[37,40202,38764],{"class":43},[37,40204,40205,40207,40209,40211],{"class":39,"line":409},[37,40206,31184],{"class":61},[37,40208,38771],{"class":50},[37,40210,55],{"class":54},[37,40212,38346],{"class":50},[37,40214,40215,40217,40219,40221,40223,40225,40227,40229,40231,40233,40235,40237,40239,40241,40243,40245,40247],{"class":39,"line":415},[37,40216,38351],{"class":50},[37,40218,31195],{"class":159},[37,40220,55],{"class":54},[37,40222,35207],{"class":61},[37,40224,65],{"class":50},[37,40226,31204],{"class":159},[37,40228,55],{"class":54},[37,40230,38794],{"class":61},[37,40232,65],{"class":50},[37,40234,31213],{"class":159},[37,40236,55],{"class":54},[37,40238,62],{"class":61},[37,40240,65],{"class":50},[37,40242,31222],{"class":159},[37,40244,55],{"class":54},[37,40246,332],{"class":61},[37,40248,38384],{"class":50},[37,40250,40251],{"class":39,"line":420},[37,40252,38389],{"class":50},[37,40254,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287],{"class":39,"line":425},[37,40256,38351],{"class":50},[37,40258,31195],{"class":159},[37,40260,55],{"class":54},[37,40262,38794],{"class":61},[37,40264,65],{"class":50},[37,40266,31204],{"class":159},[37,40268,55],{"class":54},[37,40270,38794],{"class":61},[37,40272,65],{"class":50},[37,40274,31213],{"class":159},[37,40276,55],{"class":54},[37,40278,62],{"class":61},[37,40280,65],{"class":50},[37,40282,31222],{"class":159},[37,40284,55],{"class":54},[37,40286,332],{"class":61},[37,40288,38384],{"class":50},[37,40290,40291],{"class":39,"line":431},[37,40292,38389],{"class":50},[37,40294,40295,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317,40319,40321,40323,40325,40327],{"class":39,"line":436},[37,40296,38351],{"class":50},[37,40298,31195],{"class":159},[37,40300,55],{"class":54},[37,40302,38794],{"class":61},[37,40304,65],{"class":50},[37,40306,31204],{"class":159},[37,40308,55],{"class":54},[37,40310,38794],{"class":61},[37,40312,65],{"class":50},[37,40314,31213],{"class":159},[37,40316,55],{"class":54},[37,40318,62],{"class":61},[37,40320,65],{"class":50},[37,40322,31222],{"class":159},[37,40324,55],{"class":54},[37,40326,332],{"class":61},[37,40328,38384],{"class":50},[37,40330,40331],{"class":39,"line":442},[37,40332,38389],{"class":50},[37,40334,40335,40337,40339,40341,40343,40345,40347,40349,40351,40353,40355,40357,40359],{"class":39,"line":8374},[37,40336,38434],{"class":50},[37,40338,31213],{"class":159},[37,40340,55],{"class":54},[37,40342,602],{"class":61},[37,40344,65],{"class":50},[37,40346,31268],{"class":159},[37,40348,55],{"class":54},[37,40350,602],{"class":61},[37,40352,65],{"class":50},[37,40354,31222],{"class":159},[37,40356,55],{"class":54},[37,40358,135],{"class":61},[37,40360,280],{"class":50},[37,40362,40363],{"class":39,"line":8386},[37,40364,38463],{"class":50},[37,40366,40367],{"class":39,"line":8398},[37,40368,38933],{"class":43},[37,40370,40371,40373,40375,40377],{"class":39,"line":10057},[37,40372,31184],{"class":61},[37,40374,38940],{"class":50},[37,40376,55],{"class":54},[37,40378,38346],{"class":50},[37,40380,40381,40383,40385,40387,40389,40391,40393,40395,40397,40399,40401,40403,40405,40407,40409,40411,40413],{"class":39,"line":10082},[37,40382,38351],{"class":50},[37,40384,31195],{"class":159},[37,40386,55],{"class":54},[37,40388,38794],{"class":61},[37,40390,65],{"class":50},[37,40392,31204],{"class":159},[37,40394,55],{"class":54},[37,40396,38794],{"class":61},[37,40398,65],{"class":50},[37,40400,31213],{"class":159},[37,40402,55],{"class":54},[37,40404,62],{"class":61},[37,40406,65],{"class":50},[37,40408,31222],{"class":159},[37,40410,55],{"class":54},[37,40412,332],{"class":61},[37,40414,38384],{"class":50},[37,40416,40417],{"class":39,"line":10105},[37,40418,38389],{"class":50},[37,40420,40421,40423,40425,40427,40429,40431,40433,40435,40437,40439,40441,40443,40445,40447,40449,40451,40453],{"class":39,"line":10129},[37,40422,38351],{"class":50},[37,40424,31195],{"class":159},[37,40426,55],{"class":54},[37,40428,38794],{"class":61},[37,40430,65],{"class":50},[37,40432,31204],{"class":159},[37,40434,55],{"class":54},[37,40436,38794],{"class":61},[37,40438,65],{"class":50},[37,40440,31213],{"class":159},[37,40442,55],{"class":54},[37,40444,62],{"class":61},[37,40446,65],{"class":50},[37,40448,31222],{"class":159},[37,40450,55],{"class":54},[37,40452,332],{"class":61},[37,40454,38384],{"class":50},[37,40456,40457],{"class":39,"line":10134},[37,40458,38389],{"class":50},[37,40460,40461,40463,40465,40467,40469,40471,40473,40475,40477,40479,40481,40483,40485,40487,40489,40491,40493],{"class":39,"line":10139},[37,40462,38351],{"class":50},[37,40464,31195],{"class":159},[37,40466,55],{"class":54},[37,40468,38794],{"class":61},[37,40470,65],{"class":50},[37,40472,31204],{"class":159},[37,40474,55],{"class":54},[37,40476,38794],{"class":61},[37,40478,65],{"class":50},[37,40480,31213],{"class":159},[37,40482,55],{"class":54},[37,40484,62],{"class":61},[37,40486,65],{"class":50},[37,40488,31222],{"class":159},[37,40490,55],{"class":54},[37,40492,332],{"class":61},[37,40494,38384],{"class":50},[37,40496,40497],{"class":39,"line":10144},[37,40498,38389],{"class":50},[37,40500,40501,40503,40505,40507,40509,40511,40513,40515,40517,40519,40521,40523,40525],{"class":39,"line":10153},[37,40502,38434],{"class":50},[37,40504,31213],{"class":159},[37,40506,55],{"class":54},[37,40508,602],{"class":61},[37,40510,65],{"class":50},[37,40512,31268],{"class":159},[37,40514,55],{"class":54},[37,40516,602],{"class":61},[37,40518,65],{"class":50},[37,40520,31222],{"class":159},[37,40522,55],{"class":54},[37,40524,135],{"class":61},[37,40526,280],{"class":50},[37,40528,40529],{"class":39,"line":10158},[37,40530,38463],{"class":50},[37,40532,40533],{"class":39,"line":10164},[37,40534,39101],{"class":43},[37,40536,40537,40539,40541,40543],{"class":39,"line":10185},[37,40538,31184],{"class":61},[37,40540,39108],{"class":50},[37,40542,55],{"class":54},[37,40544,38346],{"class":50},[37,40546,40547],{"class":39,"line":10191},[37,40548,39117],{"class":43},[37,40550,40551],{"class":39,"line":10205},[37,40552,39122],{"class":43},[37,40554,40555],{"class":39,"line":10211},[37,40556,39127],{"class":50},[37,40558,40559,40561,40563,40565,40567,40569,40571,40573,40575],{"class":39,"line":10238},[37,40560,39132],{"class":50},[37,40562,885],{"class":61},[37,40564,967],{"class":54},[37,40566,885],{"class":61},[37,40568,967],{"class":54},[37,40570,38794],{"class":61},[37,40572,65],{"class":50},[37,40574,35207],{"class":61},[37,40576,38384],{"class":50},[37,40578,40579],{"class":39,"line":10247},[37,40580,38389],{"class":50},[37,40582,40583,40585,40587,40589,40591],{"class":39,"line":10253},[37,40584,39132],{"class":50},[37,40586,35207],{"class":61},[37,40588,65],{"class":50},[37,40590,32408],{"class":61},[37,40592,38384],{"class":50},[37,40594,40595],{"class":39,"line":10261},[37,40596,38389],{"class":50},[37,40598,40599,40601,40603,40605,40607],{"class":39,"line":10266},[37,40600,39132],{"class":50},[37,40602,32408],{"class":61},[37,40604,65],{"class":50},[37,40606,98],{"class":61},[37,40608,280],{"class":50},[37,40610,40611],{"class":39,"line":16945},[37,40612,38463],{"class":50},[37,40614,40615],{"class":39,"line":16951},[37,40616,2757],{"emptyLinePlaceholder":454},[37,40618,40619],{"class":39,"line":16974},[37,40620,39193],{"class":43},[37,40622,40623],{"class":39,"line":16980},[37,40624,39198],{"class":43},[37,40626,40627,40629,40631,40633,40635],{"class":39,"line":17003},[37,40628,3753],{"class":54},[37,40630,39205],{"class":50},[37,40632,26385],{"class":54},[37,40634,39210],{"class":61},[37,40636,39213],{"class":50},[37,40638,40639],{"class":39,"line":17017},[37,40640,39218],{"class":43},[37,40642,40643,40645,40647],{"class":39,"line":17037},[37,40644,4992],{"class":54},[37,40646,39225],{"class":61},[37,40648,39228],{"class":50},[37,40650,40651],{"class":39,"line":17043},[37,40652,39233],{"class":43},[37,40654,40655,40657,40659,40661,40663],{"class":39,"line":17054},[37,40656,39238],{"class":50},[37,40658,39241],{"class":159},[37,40660,55],{"class":54},[37,40662,39246],{"class":185},[37,40664,280],{"class":50},[37,40666,40667],{"class":39,"line":17077},[37,40668,39253],{"class":43},[37,40670,40671,40673,40675,40677,40679,40681],{"class":39,"line":17099},[37,40672,39258],{"class":54},[37,40674,39261],{"class":50},[37,40676,39264],{"class":54},[37,40678,39267],{"class":54},[37,40680,39270],{"class":61},[37,40682,4089],{"class":50},[37,40684,40685],{"class":39,"line":17104},[37,40686,39277],{"class":43},[37,40688,40689,40691,40693],{"class":39,"line":17110},[37,40690,39282],{"class":50},[37,40692,135],{"class":61},[37,40694,280],{"class":50},[37,40696,40697],{"class":39,"line":17124},[37,40698,39291],{"class":43},[37,40700,40701,40703,40705],{"class":39,"line":17137},[37,40702,39296],{"class":54},[37,40704,39225],{"class":61},[37,40706,39301],{"class":50},[37,40708,40709],{"class":39,"line":17142},[37,40710,39306],{"class":43},[37,40712,40713],{"class":39,"line":17156},[37,40714,39311],{"class":43},[37,40716,40717,40719,40721,40723,40725],{"class":39,"line":17161},[37,40718,39316],{"class":50},[37,40720,135],{"class":61},[37,40722,65],{"class":50},[37,40724,39323],{"class":61},[37,40726,280],{"class":50},[37,40728,40729],{"class":39,"line":17167},[37,40730,39330],{"class":43},[37,40732,40733,40735,40737,40739,40741,40743],{"class":39,"line":17172},[37,40734,39258],{"class":54},[37,40736,39261],{"class":50},[37,40738,39264],{"class":54},[37,40740,39267],{"class":54},[37,40742,39270],{"class":61},[37,40744,4089],{"class":50},[37,40746,40747,40749,40751],{"class":39,"line":17186},[37,40748,39282],{"class":50},[37,40750,135],{"class":61},[37,40752,280],{"class":50},[37,40754,40755],{"class":39,"line":17191},[37,40756,2757],{"emptyLinePlaceholder":454},[37,40758,40759],{"class":39,"line":17196},[37,40760,35502],{"class":43},[37,40762,40763,40765,40767],{"class":39,"line":17210},[37,40764,31140],{"class":54},[37,40766,31432],{"class":2320},[37,40768,31435],{"class":50},[37,40770,40771,40773,40775,40777],{"class":39,"line":17222},[37,40772,31440],{"class":50},[37,40774,55],{"class":54},[37,40776,31162],{"class":61},[37,40778,39379],{"class":50},[37,40780,40781,40783,40785,40787],{"class":39,"line":17227},[37,40782,31440],{"class":50},[37,40784,55],{"class":54},[37,40786,31162],{"class":61},[37,40788,39390],{"class":50},[37,40790,40791,40793,40795,40797],{"class":39,"line":17240},[37,40792,31440],{"class":50},[37,40794,55],{"class":54},[37,40796,31162],{"class":61},[37,40798,39401],{"class":50},[37,40800,40801,40803,40805,40807],{"class":39,"line":17245},[37,40802,31440],{"class":50},[37,40804,55],{"class":54},[37,40806,31162],{"class":61},[37,40808,39412],{"class":50},[37,40810,40811,40813,40815,40817],{"class":39,"line":17250},[37,40812,31440],{"class":50},[37,40814,55],{"class":54},[37,40816,31162],{"class":61},[37,40818,39423],{"class":50},[37,40820,40821,40823,40825,40827],{"class":39,"line":17255},[37,40822,31440],{"class":50},[37,40824,55],{"class":54},[37,40826,31162],{"class":61},[37,40828,39434],{"class":50},[37,40830,40831,40833],{"class":39,"line":17268},[37,40832,15093],{"class":54},[37,40834,31548],{"class":50},[37,40836,40837],{"class":39,"line":17273},[37,40838,2757],{"emptyLinePlaceholder":454},[37,40840,40841],{"class":39,"line":32971},[37,40842,39449],{"class":43},[37,40844,40845,40847,40849,40851,40853],{"class":39,"line":32977},[37,40846,1907],{"class":54},[37,40848,31559],{"class":61},[37,40850,3299],{"class":54},[37,40852,39460],{"class":185},[37,40854,4089],{"class":50},[37,40856,40857,40859,40861,40863,40865,40867,40869,40871,40873],{"class":39,"line":32983},[37,40858,31576],{"class":50},[37,40860,55],{"class":54},[37,40862,30791],{"class":50},[37,40864,31583],{"class":185},[37,40866,2069],{"class":54},[37,40868,31588],{"class":50},[37,40870,2066],{"class":54},[37,40872,30816],{"class":185},[37,40874,280],{"class":50},[37,40876,40877,40879],{"class":39,"line":32989},[37,40878,31638],{"class":61},[37,40880,30825],{"class":50},[37,40882,40883,40885,40887],{"class":39,"line":32995},[37,40884,31628],{"class":50},[37,40886,55],{"class":54},[37,40888,39497],{"class":50},[37,40890,40891,40893,40895,40897,40899,40901,40903,40905],{"class":39,"line":33006},[37,40892,31638],{"class":61},[37,40894,31641],{"class":50},[37,40896,332],{"class":61},[37,40898,65],{"class":50},[37,40900,31839],{"class":61},[37,40902,65],{"class":50},[37,40904,31839],{"class":61},[37,40906,31654],{"class":50},[481,40908,40909],{"start":104},[484,40910,40911],{},"测试代码",[27,40913,40915],{"className":29,"code":40914,"language":31,"meta":32,"style":32},"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",[34,40916,40917,40923,40933,40943,40947,40957,40968,40972,40976,40980,40988,41004,41014,41030,41040,41054,41058,41068,41078,41088,41094,41098,41102,41110,41114,41130,41138,41142,41146,41154,41162,41166,41170,41174,41178,41184,41188,41198,41206,41214,41218,41222,41226,41234,41238,41254,41258,41262,41266,41278,41282,41294,41298,41302,41314,41318,41328,41332,41336,41348,41352,41361,41365,41369,41377,41381,41389,41393,41397,41401,41405,41409,41425,41433,41437,41441,41489,41495,41499,41509,41517,41525,41529,41533,41537,41541,41549,41553,41569,41573,41581,41589],{"__ignoreMap":32},[37,40918,40919,40921],{"class":39,"line":40},[37,40920,30732],{"class":54},[37,40922,30735],{"class":50},[37,40924,40925,40927,40929,40931],{"class":39,"line":47},[37,40926,30732],{"class":54},[37,40928,31754],{"class":50},[37,40930,31722],{"class":54},[37,40932,31759],{"class":50},[37,40934,40935,40937,40939,40941],{"class":39,"line":104},[37,40936,31076],{"class":54},[37,40938,31737],{"class":50},[37,40940,30732],{"class":54},[37,40942,31742],{"class":50},[37,40944,40945],{"class":39,"line":113},[37,40946,34259],{"class":43},[37,40948,40949,40951,40953,40955],{"class":39,"line":189},[37,40950,31076],{"class":54},[37,40952,31707],{"class":50},[37,40954,30732],{"class":54},[37,40956,31712],{"class":50},[37,40958,40959,40961,40963,40965],{"class":39,"line":195},[37,40960,31076],{"class":54},[37,40962,32252],{"class":50},[37,40964,30732],{"class":54},[37,40966,40967],{"class":61}," VGG16\n",[37,40969,40970],{"class":39,"line":201},[37,40971,2757],{"emptyLinePlaceholder":454},[37,40973,40974],{"class":39,"line":207},[37,40975,2757],{"emptyLinePlaceholder":454},[37,40977,40978],{"class":39,"line":213},[37,40979,34288],{"class":43},[37,40981,40982,40984,40986],{"class":39,"line":218},[37,40983,32285],{"class":54},[37,40985,34295],{"class":2320},[37,40987,32291],{"class":50},[37,40989,40990,40992,40994,40996,40998,41000,41002],{"class":39,"line":227},[37,40991,34302],{"class":50},[37,40993,55],{"class":54},[37,40995,31794],{"class":50},[37,40997,31797],{"class":159},[37,40999,55],{"class":54},[37,41001,31802],{"class":185},[37,41003,31805],{"class":50},[37,41005,41006,41008,41010,41012],{"class":39,"line":232},[37,41007,34319],{"class":159},[37,41009,55],{"class":54},[37,41011,34324],{"class":61},[37,41013,31805],{"class":50},[37,41015,41016,41018,41020,41022,41024,41026,41028],{"class":39,"line":238},[37,41017,34331],{"class":159},[37,41019,55],{"class":54},[37,41021,31832],{"class":50},[37,41023,160],{"class":159},[37,41025,55],{"class":54},[37,41027,31839],{"class":61},[37,41029,31842],{"class":50},[37,41031,41032,41034,41036,41038],{"class":39,"line":244},[37,41033,34348],{"class":159},[37,41035,55],{"class":54},[37,41037,31815],{"class":61},[37,41039,280],{"class":50},[37,41041,41042,41044,41046,41048,41050,41052],{"class":39,"line":250},[37,41043,34359],{"class":50},[37,41045,55],{"class":54},[37,41047,31872],{"class":50},[37,41049,31875],{"class":159},[37,41051,55],{"class":54},[37,41053,34370],{"class":50},[37,41055,41056],{"class":39,"line":256},[37,41057,34375],{"class":43},[37,41059,41060,41062,41064,41066],{"class":39,"line":261},[37,41061,34380],{"class":159},[37,41063,55],{"class":54},[37,41065,332],{"class":61},[37,41067,31805],{"class":50},[37,41069,41070,41072,41074,41076],{"class":39,"line":267},[37,41071,34391],{"class":159},[37,41073,55],{"class":54},[37,41075,31815],{"class":61},[37,41077,31805],{"class":50},[37,41079,41080,41082,41084,41086],{"class":39,"line":283},[37,41081,34402],{"class":159},[37,41083,55],{"class":54},[37,41085,135],{"class":61},[37,41087,280],{"class":50},[37,41089,41090,41092],{"class":39,"line":288},[37,41091,4440],{"class":54},[37,41093,34415],{"class":50},[37,41095,41096],{"class":39,"line":294},[37,41097,2757],{"emptyLinePlaceholder":454},[37,41099,41100],{"class":39,"line":300},[37,41101,34424],{"class":43},[37,41103,41104,41106,41108],{"class":39,"line":306},[37,41105,32285],{"class":54},[37,41107,34431],{"class":2320},[37,41109,34434],{"class":50},[37,41111,41112],{"class":39,"line":312},[37,41113,34439],{"class":43},[37,41115,41116,41118,41120,41122,41124,41126,41128],{"class":39,"line":317},[37,41117,31576],{"class":50},[37,41119,55],{"class":54},[37,41121,31583],{"class":185},[37,41123,2069],{"class":54},[37,41125,31588],{"class":50},[37,41127,2066],{"class":54},[37,41129,34456],{"class":185},[37,41131,41132,41134,41136],{"class":39,"line":323},[37,41133,31628],{"class":50},[37,41135,55],{"class":54},[37,41137,32627],{"class":50},[37,41139,41140],{"class":39,"line":337},[37,41141,2757],{"emptyLinePlaceholder":454},[37,41143,41144],{"class":39,"line":342},[37,41145,34473],{"class":43},[37,41147,41148,41150,41152],{"class":39,"line":347},[37,41149,34478],{"class":50},[37,41151,55],{"class":54},[37,41153,32680],{"class":61},[37,41155,41156,41158,41160],{"class":39,"line":352},[37,41157,34487],{"class":50},[37,41159,55],{"class":54},[37,41161,3435],{"class":61},[37,41163,41164],{"class":39,"line":357},[37,41165,2757],{"emptyLinePlaceholder":454},[37,41167,41168],{"class":39,"line":362},[37,41169,34500],{"class":43},[37,41171,41172],{"class":39,"line":367},[37,41173,34505],{"class":43},[37,41175,41176],{"class":39,"line":373},[37,41177,34510],{"class":43},[37,41179,41180,41182],{"class":39,"line":392},[37,41181,34515],{"class":54},[37,41183,33222],{"class":50},[37,41185,41186],{"class":39,"line":398},[37,41187,34522],{"class":43},[37,41189,41190,41192,41194,41196],{"class":39,"line":409},[37,41191,3753],{"class":54},[37,41193,34529],{"class":50},[37,41195,26385],{"class":54},[37,41197,34534],{"class":50},[37,41199,41200,41202,41204],{"class":39,"line":415},[37,41201,34539],{"class":50},[37,41203,55],{"class":54},[37,41205,34544],{"class":50},[37,41207,41208,41210,41212],{"class":39,"line":420},[37,41209,34549],{"class":50},[37,41211,55],{"class":54},[37,41213,34554],{"class":50},[37,41215,41216],{"class":39,"line":425},[37,41217,34559],{"class":43},[37,41219,41220],{"class":39,"line":431},[37,41221,33213],{"class":50},[37,41223,41224],{"class":39,"line":436},[37,41225,34568],{"class":43},[37,41227,41228,41230,41232],{"class":39,"line":442},[37,41229,32998],{"class":50},[37,41231,55],{"class":54},[37,41233,34577],{"class":50},[37,41235,41236],{"class":39,"line":8374},[37,41237,34582],{"class":43},[37,41239,41240,41242,41244,41246,41248,41250,41252],{"class":39,"line":8386},[37,41241,33015],{"class":50},[37,41243,55],{"class":54},[37,41245,33020],{"class":50},[37,41247,33023],{"class":159},[37,41249,55],{"class":54},[37,41251,332],{"class":61},[37,41253,280],{"class":50},[37,41255,41256],{"class":39,"line":8398},[37,41257,34603],{"class":43},[37,41259,41260],{"class":39,"line":10057},[37,41261,34608],{"class":43},[37,41263,41264],{"class":39,"line":10082},[37,41265,34613],{"class":43},[37,41267,41268,41270,41272,41274,41276],{"class":39,"line":10105},[37,41269,34618],{"class":50},[37,41271,9818],{"class":54},[37,41273,33125],{"class":50},[37,41275,3299],{"class":54},[37,41277,34627],{"class":50},[37,41279,41280],{"class":39,"line":10129},[37,41281,34632],{"class":43},[37,41283,41284,41286,41288,41290,41292],{"class":39,"line":10134},[37,41285,34637],{"class":50},[37,41287,9818],{"class":54},[37,41289,34642],{"class":50},[37,41291,135],{"class":61},[37,41293,280],{"class":50},[37,41295,41296],{"class":39,"line":10139},[37,41297,2757],{"emptyLinePlaceholder":454},[37,41299,41300],{"class":39,"line":10144},[37,41301,34655],{"class":43},[37,41303,41304,41306,41308,41310,41312],{"class":39,"line":10153},[37,41305,34660],{"class":50},[37,41307,55],{"class":54},[37,41309,34665],{"class":50},[37,41311,1094],{"class":54},[37,41313,34670],{"class":50},[37,41315,41316],{"class":39,"line":10158},[37,41317,34675],{"class":43},[37,41319,41320,41322,41324,41326],{"class":39,"line":10164},[37,41321,32789],{"class":61},[37,41323,165],{"class":50},[37,41325,34684],{"class":185},[37,41327,34687],{"class":50},[37,41329,41330],{"class":39,"line":10185},[37,41331,2757],{"emptyLinePlaceholder":454},[37,41333,41334],{"class":39,"line":10191},[37,41335,34696],{"class":43},[37,41337,41338,41340,41342,41344,41346],{"class":39,"line":10205},[37,41339,1907],{"class":54},[37,41341,31559],{"class":61},[37,41343,3299],{"class":54},[37,41345,31564],{"class":185},[37,41347,4089],{"class":50},[37,41349,41350],{"class":39,"line":10211},[37,41351,34713],{"class":43},[37,41353,41354,41356,41358],{"class":39,"line":10238},[37,41355,31628],{"class":50},[37,41357,55],{"class":54},[37,41359,41360],{"class":50},"VGG16()\n",[37,41362,41363],{"class":39,"line":10247},[37,41364,34726],{"class":43},[37,41366,41367],{"class":39,"line":10253},[37,41368,34731],{"class":43},[37,41370,41371,41373,41375],{"class":39,"line":10261},[37,41372,34736],{"class":50},[37,41374,34739],{"class":185},[37,41376,175],{"class":50},[37,41378,41379],{"class":39,"line":10266},[37,41380,34746],{"class":43},[37,41382,41383,41385,41387],{"class":39,"line":16945},[37,41384,34359],{"class":50},[37,41386,55],{"class":54},[37,41388,34755],{"class":50},[37,41390,41391],{"class":39,"line":16951},[37,41392,34760],{"class":43},[37,41394,41395],{"class":39,"line":16974},[37,41396,34765],{"class":50},[37,41398,41399],{"class":39,"line":16980},[37,41400,2757],{"emptyLinePlaceholder":454},[37,41402,41403],{"class":39,"line":17003},[37,41404,34774],{"class":43},[37,41406,41407],{"class":39,"line":17017},[37,41408,34779],{"class":43},[37,41410,41411,41413,41415,41417,41419,41421,41423],{"class":39,"line":17037},[37,41412,31576],{"class":50},[37,41414,55],{"class":54},[37,41416,31583],{"class":185},[37,41418,2069],{"class":54},[37,41420,31588],{"class":50},[37,41422,2066],{"class":54},[37,41424,34456],{"class":185},[37,41426,41427,41429,41431],{"class":39,"line":17043},[37,41428,31628],{"class":50},[37,41430,55],{"class":54},[37,41432,32627],{"class":50},[37,41434,41435],{"class":39,"line":17054},[37,41436,34808],{"class":43},[37,41438,41439],{"class":39,"line":17077},[37,41440,34813],{"class":43},[37,41442,41443,41445,41447,41449,41451,41453,41455,41457,41459,41461,41463,41465,41467,41469,41471,41473,41475,41477,41479,41481,41483,41485,41487],{"class":39,"line":17099},[37,41444,34818],{"class":50},[37,41446,55],{"class":54},[37,41448,1399],{"class":50},[37,41450,34825],{"class":185},[37,41452,65],{"class":50},[37,41454,34830],{"class":185},[37,41456,65],{"class":50},[37,41458,34835],{"class":185},[37,41460,65],{"class":50},[37,41462,34840],{"class":185},[37,41464,65],{"class":50},[37,41466,34845],{"class":185},[37,41468,65],{"class":50},[37,41470,34850],{"class":185},[37,41472,65],{"class":50},[37,41474,34855],{"class":185},[37,41476,65],{"class":50},[37,41478,34860],{"class":185},[37,41480,65],{"class":50},[37,41482,34865],{"class":185},[37,41484,65],{"class":50},[37,41486,34870],{"class":185},[37,41488,389],{"class":50},[37,41490,41491,41493],{"class":39,"line":17104},[37,41492,34515],{"class":54},[37,41494,33222],{"class":50},[37,41496,41497],{"class":39,"line":17110},[37,41498,34883],{"class":43},[37,41500,41501,41503,41505,41507],{"class":39,"line":17124},[37,41502,3753],{"class":54},[37,41504,34890],{"class":50},[37,41506,26385],{"class":54},[37,41508,34534],{"class":50},[37,41510,41511,41513,41515],{"class":39,"line":17137},[37,41512,32948],{"class":50},[37,41514,55],{"class":54},[37,41516,32953],{"class":50},[37,41518,41519,41521,41523],{"class":39,"line":17142},[37,41520,32963],{"class":50},[37,41522,55],{"class":54},[37,41524,32968],{"class":50},[37,41526,41527],{"class":39,"line":17156},[37,41528,2757],{"emptyLinePlaceholder":454},[37,41530,41531],{"class":39,"line":17161},[37,41532,34919],{"class":43},[37,41534,41535],{"class":39,"line":17167},[37,41536,33213],{"class":50},[37,41538,41539],{"class":39,"line":17172},[37,41540,34928],{"class":43},[37,41542,41543,41545,41547],{"class":39,"line":17186},[37,41544,32998],{"class":50},[37,41546,55],{"class":54},[37,41548,33003],{"class":50},[37,41550,41551],{"class":39,"line":17191},[37,41552,34941],{"class":43},[37,41554,41555,41557,41559,41561,41563,41565,41567],{"class":39,"line":17196},[37,41556,33015],{"class":50},[37,41558,55],{"class":54},[37,41560,33020],{"class":50},[37,41562,33023],{"class":159},[37,41564,55],{"class":54},[37,41566,332],{"class":61},[37,41568,280],{"class":50},[37,41570,41571],{"class":39,"line":17210},[37,41572,34962],{"class":43},[37,41574,41575,41577,41579],{"class":39,"line":17222},[37,41576,34967],{"class":50},[37,41578,55],{"class":54},[37,41580,34972],{"class":50},[37,41582,41583,41585,41587],{"class":39,"line":17227},[37,41584,34977],{"class":50},[37,41586,55],{"class":54},[37,41588,34982],{"class":50},[37,41590,41591,41593,41595,41597,41599,41601,41603,41605],{"class":39,"line":17240},[37,41592,34987],{"class":61},[37,41594,165],{"class":50},[37,41596,34992],{"class":185},[37,41598,34995],{"class":50},[37,41600,34998],{"class":185},[37,41602,65],{"class":50},[37,41604,35003],{"class":185},[37,41606,35006],{"class":50},[498,41608,41610],{"id":41609},"_23googlenet","2.3.GoogLeNet",[22339,41612,41614],{"id":41613},"_231原理","2.3.1.原理",[481,41616,41617],{},[484,41618,41619],{},"网络结构",[14,41621,41622],{},[1838,41623],{"alt":32,"src":41624},"\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",[14,41626,41627],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41629,41630],{},[1838,41631],{"alt":32,"src":41632},"\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",[14,41634,41635],{},[1838,41636],{"alt":32,"src":41637},"\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",[14,41639,41640],{},[1838,41641],{"alt":32,"src":41642},"\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",[481,41644,41645],{"start":47},[484,41646,41647],{},"1x1卷积的优点",[14,41649,41650],{},[1838,41651],{"alt":32,"src":41652},"\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",[481,41654,41655],{"start":104},[484,41656,41657],{},"全局平均池化层优点",[14,41659,41660],{},[1838,41661],{"alt":32,"src":41662},"\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",[14,41664,41665],{},[1838,41666],{"alt":32,"src":41667},"\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",[481,41669,41670],{"start":113},[484,41671,41672],{},"参数详细描述",[14,41674,41675],{},[1838,41676],{"alt":32,"src":41677},"\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",[14,41679,41680],{},[1838,41681],{"alt":32,"src":41682},"\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",[14,41684,41685],{},[1838,41686],{"alt":32,"src":41687},"\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",[14,41689,41690],{},[1838,41691],{"alt":32,"src":41692},"\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",[14,41694,41695],{},[1838,41696],{"alt":32,"src":41697},"\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",[14,41699,41700],{},[1838,41701],{"alt":32,"src":41702},"\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",[14,41704,41705],{},[1838,41706],{"alt":32,"src":41707},"\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",[14,41709,41710],{},[1838,41711],{"alt":32,"src":41712},"\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",[14,41714,41715],{},[1838,41716],{"alt":32,"src":41717},"\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",[14,41719,41720],{},[1838,41721],{"alt":32,"src":41722},"\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",[14,41724,41725],{},[1838,41726],{"alt":32,"src":41727},"\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",[14,41729,41730],{},[1838,41731],{"alt":32,"src":41732},"\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",[14,41734,41735],{},[1838,41736],{"alt":32,"src":41737},"\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",[14,41739,41740],{},[1838,41741],{"alt":32,"src":41742},"\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",[14,41744,41745],{},[1838,41746],{"alt":32,"src":41747},"\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",[14,41749,41750],{},[1838,41751],{"alt":32,"src":41752},"\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",[14,41754,41755],{},[1838,41756],{"alt":32,"src":41757},"\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",[14,41759,41760],{},[1838,41761],{"alt":32,"src":41762},"\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",[14,41764,41765],{},[1838,41766],{"alt":32,"src":41767},"\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",[14,41769,41770],{},[1838,41771],{"alt":32,"src":41772},"\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",[14,41774,41775],{},[1838,41776],{"alt":32,"src":41777},"\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",[22339,41779,41781],{"id":41780},"_232代码实现","2.3.2.代码实现",[481,41783,41784],{},[484,41785,31050],{},[14,41787,41788],{},"根据原理一步一步搭建即可",[27,41790,41792],{"className":29,"code":41791,"language":31,"meta":32,"style":32},"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",[34,41793,41794,41800,41810,41820,41824,41841,41850,41865,41875,41880,41913,41918,41955,42002,42007,42043,42090,42095,42100,42135,42167,42171,42179,42195,42219,42244,42265,42270,42285,42289,42293,42298,42315,42320,42329,42344,42355,42399,42403,42431,42435,42446,42474,42478,42515,42519,42547,42551,42562,42598,42630,42658,42662,42673,42707,42739,42771,42804,42838,42866,42870,42881,42914,42946,42960,42964,42977,42981,42986,42998,43006,43028,43033,43038,43043,43048,43053,43058,43072,43080,43089,43102,43117,43126,43130,43138,43149,43160,43171,43182,43193,43199,43203,43208,43220,43240,43249],{"__ignoreMap":32},[37,41795,41796,41798],{"class":39,"line":40},[37,41797,30732],{"class":54},[37,41799,30735],{"class":50},[37,41801,41802,41804,41806,41808],{"class":39,"line":47},[37,41803,31076],{"class":54},[37,41805,31079],{"class":50},[37,41807,30732],{"class":54},[37,41809,31084],{"class":50},[37,41811,41812,41814,41816,41818],{"class":39,"line":104},[37,41813,31076],{"class":54},[37,41815,31096],{"class":50},[37,41817,30732],{"class":54},[37,41819,31101],{"class":50},[37,41821,41822],{"class":39,"line":113},[37,41823,2757],{"emptyLinePlaceholder":454},[37,41825,41826,41828,41831,41833,41835,41837,41839],{"class":39,"line":189},[37,41827,15035],{"class":54},[37,41829,41830],{"class":2320}," Inception",[37,41832,165],{"class":50},[37,41834,31117],{"class":2320},[37,41836,1068],{"class":50},[37,41838,31122],{"class":2320},[37,41840,31125],{"class":50},[37,41842,41843,41845,41847],{"class":39,"line":195},[37,41844,31140],{"class":54},[37,41846,31143],{"class":61},[37,41848,41849],{"class":50},"(self,in_channels,c1,c2,c3,c4):\n",[37,41851,41852,41854,41857,41859,41861,41863],{"class":39,"line":201},[37,41853,31156],{"class":61},[37,41855,41856],{"class":50},"(Inception,",[37,41858,31162],{"class":61},[37,41860,31165],{"class":50},[37,41862,31168],{"class":61},[37,41864,2333],{"class":50},[37,41866,41867,41869,41871,41873],{"class":39,"line":207},[37,41868,31184],{"class":61},[37,41870,35108],{"class":50},[37,41872,55],{"class":54},[37,41874,35113],{"class":50},[37,41876,41877],{"class":39,"line":213},[37,41878,41879],{"class":43},"        # 路线1：定义1*1卷积\n",[37,41881,41882,41884,41887,41889,41891,41893,41895,41898,41900,41902,41905,41907,41909,41911],{"class":39,"line":218},[37,41883,31184],{"class":61},[37,41885,41886],{"class":50},".p1_1",[37,41888,55],{"class":54},[37,41890,31192],{"class":50},[37,41892,31195],{"class":159},[37,41894,55],{"class":54},[37,41896,41897],{"class":50},"in_channels,",[37,41899,31204],{"class":159},[37,41901,55],{"class":54},[37,41903,41904],{"class":50},"c1,",[37,41906,31213],{"class":159},[37,41908,55],{"class":54},[37,41910,332],{"class":61},[37,41912,280],{"class":50},[37,41914,41915],{"class":39,"line":227},[37,41916,41917],{"class":43},"        # 路线2：定义1*1卷积和3*3\n",[37,41919,41920,41922,41925,41927,41929,41931,41933,41935,41937,41939,41942,41944,41947,41949,41951,41953],{"class":39,"line":232},[37,41921,31184],{"class":61},[37,41923,41924],{"class":50},".p2_1",[37,41926,55],{"class":54},[37,41928,31192],{"class":50},[37,41930,31195],{"class":159},[37,41932,55],{"class":54},[37,41934,41897],{"class":50},[37,41936,31204],{"class":159},[37,41938,55],{"class":54},[37,41940,41941],{"class":50},"c2[",[37,41943,135],{"class":61},[37,41945,41946],{"class":50},"],",[37,41948,31213],{"class":159},[37,41950,55],{"class":54},[37,41952,332],{"class":61},[37,41954,280],{"class":50},[37,41956,41957,41959,41962,41964,41966,41968,41970,41972,41974,41976,41978,41980,41982,41984,41986,41988,41990,41992,41994,41996,41998,42000],{"class":39,"line":238},[37,41958,31184],{"class":61},[37,41960,41961],{"class":50},".p2_2",[37,41963,55],{"class":54},[37,41965,31192],{"class":50},[37,41967,31195],{"class":159},[37,41969,55],{"class":54},[37,41971,41941],{"class":50},[37,41973,135],{"class":61},[37,41975,41946],{"class":50},[37,41977,31204],{"class":159},[37,41979,55],{"class":54},[37,41981,41941],{"class":50},[37,41983,332],{"class":61},[37,41985,41946],{"class":50},[37,41987,31213],{"class":159},[37,41989,55],{"class":54},[37,41991,62],{"class":61},[37,41993,65],{"class":50},[37,41995,31222],{"class":159},[37,41997,55],{"class":54},[37,41999,332],{"class":61},[37,42001,280],{"class":50},[37,42003,42004],{"class":39,"line":244},[37,42005,42006],{"class":43},"        # 路线3：定义1*1卷积和5*5\n",[37,42008,42009,42011,42014,42016,42018,42020,42022,42024,42026,42028,42031,42033,42035,42037,42039,42041],{"class":39,"line":250},[37,42010,31184],{"class":61},[37,42012,42013],{"class":50},".p3_1",[37,42015,55],{"class":54},[37,42017,31192],{"class":50},[37,42019,31195],{"class":159},[37,42021,55],{"class":54},[37,42023,41897],{"class":50},[37,42025,31204],{"class":159},[37,42027,55],{"class":54},[37,42029,42030],{"class":50},"c3[",[37,42032,135],{"class":61},[37,42034,41946],{"class":50},[37,42036,31213],{"class":159},[37,42038,55],{"class":54},[37,42040,332],{"class":61},[37,42042,280],{"class":50},[37,42044,42045,42047,42050,42052,42054,42056,42058,42060,42062,42064,42066,42068,42070,42072,42074,42076,42078,42080,42082,42084,42086,42088],{"class":39,"line":256},[37,42046,31184],{"class":61},[37,42048,42049],{"class":50},".p3_2",[37,42051,55],{"class":54},[37,42053,31192],{"class":50},[37,42055,31195],{"class":159},[37,42057,55],{"class":54},[37,42059,42030],{"class":50},[37,42061,135],{"class":61},[37,42063,41946],{"class":50},[37,42065,31204],{"class":159},[37,42067,55],{"class":54},[37,42069,42030],{"class":50},[37,42071,332],{"class":61},[37,42073,41946],{"class":50},[37,42075,31213],{"class":159},[37,42077,55],{"class":54},[37,42079,836],{"class":61},[37,42081,65],{"class":50},[37,42083,31222],{"class":159},[37,42085,55],{"class":54},[37,42087,602],{"class":61},[37,42089,280],{"class":50},[37,42091,42092],{"class":39,"line":261},[37,42093,42094],{"class":43},"        # 路线4：定义3*3最大池化和1*1卷积\n",[37,42096,42097],{"class":39,"line":267},[37,42098,42099],{"class":43},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[37,42101,42102,42104,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125,42127,42129,42131,42133],{"class":39,"line":283},[37,42103,31184],{"class":61},[37,42105,42106],{"class":50},".p4_1",[37,42108,55],{"class":54},[37,42110,35166],{"class":50},[37,42112,31213],{"class":159},[37,42114,55],{"class":54},[37,42116,62],{"class":61},[37,42118,65],{"class":50},[37,42120,31268],{"class":159},[37,42122,55],{"class":54},[37,42124,332],{"class":61},[37,42126,65],{"class":50},[37,42128,31222],{"class":159},[37,42130,55],{"class":54},[37,42132,332],{"class":61},[37,42134,280],{"class":50},[37,42136,42137,42139,42142,42144,42146,42148,42150,42152,42154,42156,42159,42161,42163,42165],{"class":39,"line":288},[37,42138,31184],{"class":61},[37,42140,42141],{"class":50},".p4_2",[37,42143,55],{"class":54},[37,42145,31192],{"class":50},[37,42147,31195],{"class":159},[37,42149,55],{"class":54},[37,42151,41897],{"class":50},[37,42153,31204],{"class":159},[37,42155,55],{"class":54},[37,42157,42158],{"class":50},"c4,",[37,42160,31213],{"class":159},[37,42162,55],{"class":54},[37,42164,332],{"class":61},[37,42166,280],{"class":50},[37,42168,42169],{"class":39,"line":294},[37,42170,2757],{"emptyLinePlaceholder":454},[37,42172,42173,42175,42177],{"class":39,"line":300},[37,42174,31140],{"class":54},[37,42176,31432],{"class":2320},[37,42178,31435],{"class":50},[37,42180,42181,42184,42186,42188,42190,42192],{"class":39,"line":306},[37,42182,42183],{"class":50},"        p1",[37,42185,55],{"class":54},[37,42187,31162],{"class":61},[37,42189,35521],{"class":50},[37,42191,31162],{"class":61},[37,42193,42194],{"class":50},".p1_1(x))\n",[37,42196,42197,42199,42201,42203,42205,42207,42210,42212,42214,42216],{"class":39,"line":312},[37,42198,7433],{"class":50},[37,42200,55],{"class":54},[37,42202,31162],{"class":61},[37,42204,35521],{"class":50},[37,42206,31162],{"class":61},[37,42208,42209],{"class":50},".p2_2(",[37,42211,31162],{"class":61},[37,42213,35521],{"class":50},[37,42215,31162],{"class":61},[37,42217,42218],{"class":50},".p2_1(x))))\n",[37,42220,42221,42224,42226,42228,42230,42232,42235,42237,42239,42241],{"class":39,"line":317},[37,42222,42223],{"class":50},"        p3",[37,42225,55],{"class":54},[37,42227,31162],{"class":61},[37,42229,35521],{"class":50},[37,42231,31162],{"class":61},[37,42233,42234],{"class":50},".p3_2(",[37,42236,31162],{"class":61},[37,42238,35521],{"class":50},[37,42240,31162],{"class":61},[37,42242,42243],{"class":50},".p3_1(x))))\n",[37,42245,42246,42249,42251,42253,42255,42257,42260,42262],{"class":39,"line":323},[37,42247,42248],{"class":50},"        p4",[37,42250,55],{"class":54},[37,42252,31162],{"class":61},[37,42254,35521],{"class":50},[37,42256,31162],{"class":61},[37,42258,42259],{"class":50},".p4_2(",[37,42261,31162],{"class":61},[37,42263,42264],{"class":50},".p4_1(x)))\n",[37,42266,42267],{"class":39,"line":337},[37,42268,42269],{"class":43},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[37,42271,42272,42274,42277,42279,42281,42283],{"class":39,"line":342},[37,42273,15093],{"class":54},[37,42275,42276],{"class":50}," torch.cat((p1,p2,p3,p4),",[37,42278,33023],{"class":159},[37,42280,55],{"class":54},[37,42282,332],{"class":61},[37,42284,280],{"class":50},[37,42286,42287],{"class":39,"line":347},[37,42288,2757],{"emptyLinePlaceholder":454},[37,42290,42291],{"class":39,"line":352},[37,42292,2757],{"emptyLinePlaceholder":454},[37,42294,42295],{"class":39,"line":357},[37,42296,42297],{"class":43},"# 搭建GoogLeNet网络\n",[37,42299,42300,42302,42305,42307,42309,42311,42313],{"class":39,"line":362},[37,42301,15035],{"class":54},[37,42303,42304],{"class":2320}," GoogLeNet",[37,42306,165],{"class":50},[37,42308,31117],{"class":2320},[37,42310,1068],{"class":50},[37,42312,31122],{"class":2320},[37,42314,31125],{"class":50},[37,42316,42317],{"class":39,"line":367},[37,42318,42319],{"class":43},"    # 必须把Inception导入到里边\n",[37,42321,42322,42324,42326],{"class":39,"line":373},[37,42323,31140],{"class":54},[37,42325,31143],{"class":61},[37,42327,42328],{"class":50},"(self,Inception):\n",[37,42330,42331,42333,42336,42338,42340,42342],{"class":39,"line":392},[37,42332,31156],{"class":61},[37,42334,42335],{"class":50},"(GoogLeNet,",[37,42337,31162],{"class":61},[37,42339,31165],{"class":50},[37,42341,31168],{"class":61},[37,42343,2333],{"class":50},[37,42345,42346,42348,42351,42353],{"class":39,"line":398},[37,42347,31184],{"class":61},[37,42349,42350],{"class":50},".b1",[37,42352,55],{"class":54},[37,42354,38346],{"class":50},[37,42356,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385,42387,42389,42391,42393,42395,42397],{"class":39,"line":409},[37,42358,38351],{"class":50},[37,42360,31195],{"class":159},[37,42362,55],{"class":54},[37,42364,332],{"class":61},[37,42366,65],{"class":50},[37,42368,31204],{"class":159},[37,42370,55],{"class":54},[37,42372,726],{"class":61},[37,42374,65],{"class":50},[37,42376,31213],{"class":159},[37,42378,55],{"class":54},[37,42380,885],{"class":61},[37,42382,65],{"class":50},[37,42384,31268],{"class":159},[37,42386,55],{"class":54},[37,42388,602],{"class":61},[37,42390,65],{"class":50},[37,42392,31222],{"class":159},[37,42394,55],{"class":54},[37,42396,62],{"class":61},[37,42398,38384],{"class":50},[37,42400,42401],{"class":39,"line":415},[37,42402,38389],{"class":50},[37,42404,42405,42407,42409,42411,42413,42415,42417,42419,42421,42423,42425,42427,42429],{"class":39,"line":420},[37,42406,38434],{"class":50},[37,42408,31213],{"class":159},[37,42410,55],{"class":54},[37,42412,62],{"class":61},[37,42414,65],{"class":50},[37,42416,31268],{"class":159},[37,42418,55],{"class":54},[37,42420,602],{"class":61},[37,42422,65],{"class":50},[37,42424,31222],{"class":159},[37,42426,55],{"class":54},[37,42428,332],{"class":61},[37,42430,280],{"class":50},[37,42432,42433],{"class":39,"line":425},[37,42434,38463],{"class":50},[37,42436,42437,42439,42442,42444],{"class":39,"line":431},[37,42438,31184],{"class":61},[37,42440,42441],{"class":50},".b2",[37,42443,55],{"class":54},[37,42445,38346],{"class":50},[37,42447,42448,42450,42452,42454,42456,42458,42460,42462,42464,42466,42468,42470,42472],{"class":39,"line":436},[37,42449,38351],{"class":50},[37,42451,31195],{"class":159},[37,42453,55],{"class":54},[37,42455,726],{"class":61},[37,42457,65],{"class":50},[37,42459,31204],{"class":159},[37,42461,55],{"class":54},[37,42463,726],{"class":61},[37,42465,65],{"class":50},[37,42467,31213],{"class":159},[37,42469,55],{"class":54},[37,42471,332],{"class":61},[37,42473,38384],{"class":50},[37,42475,42476],{"class":39,"line":442},[37,42477,38389],{"class":50},[37,42479,42480,42482,42484,42486,42488,42490,42492,42494,42497,42499,42501,42503,42505,42507,42509,42511,42513],{"class":39,"line":8374},[37,42481,38351],{"class":50},[37,42483,31195],{"class":159},[37,42485,55],{"class":54},[37,42487,726],{"class":61},[37,42489,65],{"class":50},[37,42491,31204],{"class":159},[37,42493,55],{"class":54},[37,42495,42496],{"class":61},"192",[37,42498,65],{"class":50},[37,42500,31213],{"class":159},[37,42502,55],{"class":54},[37,42504,62],{"class":61},[37,42506,65],{"class":50},[37,42508,31222],{"class":159},[37,42510,55],{"class":54},[37,42512,332],{"class":61},[37,42514,38384],{"class":50},[37,42516,42517],{"class":39,"line":8386},[37,42518,38389],{"class":50},[37,42520,42521,42523,42525,42527,42529,42531,42533,42535,42537,42539,42541,42543,42545],{"class":39,"line":8398},[37,42522,38434],{"class":50},[37,42524,31213],{"class":159},[37,42526,55],{"class":54},[37,42528,62],{"class":61},[37,42530,65],{"class":50},[37,42532,31268],{"class":159},[37,42534,55],{"class":54},[37,42536,602],{"class":61},[37,42538,65],{"class":50},[37,42540,31222],{"class":159},[37,42542,55],{"class":54},[37,42544,332],{"class":61},[37,42546,280],{"class":50},[37,42548,42549],{"class":39,"line":10057},[37,42550,38463],{"class":50},[37,42552,42553,42555,42558,42560],{"class":39,"line":10082},[37,42554,31184],{"class":61},[37,42556,42557],{"class":50},".b3",[37,42559,55],{"class":54},[37,42561,38346],{"class":50},[37,42563,42564,42567,42569,42571,42573,42576,42578,42580,42582,42585,42587,42589,42591,42594,42596],{"class":39,"line":10105},[37,42565,42566],{"class":50},"            Inception(",[37,42568,42496],{"class":61},[37,42570,65],{"class":50},[37,42572,726],{"class":61},[37,42574,42575],{"class":50},",(",[37,42577,732],{"class":61},[37,42579,65],{"class":50},[37,42581,32408],{"class":61},[37,42583,42584],{"class":50},"),(",[37,42586,1111],{"class":61},[37,42588,65],{"class":50},[37,42590,720],{"class":61},[37,42592,42593],{"class":50},"),",[37,42595,720],{"class":61},[37,42597,38384],{"class":50},[37,42599,42600,42602,42604,42606,42608,42610,42612,42614,42616,42618,42620,42622,42624,42626,42628],{"class":39,"line":10129},[37,42601,42566],{"class":50},[37,42603,35207],{"class":61},[37,42605,65],{"class":50},[37,42607,32408],{"class":61},[37,42609,42575],{"class":50},[37,42611,32408],{"class":61},[37,42613,65],{"class":50},[37,42615,42496],{"class":61},[37,42617,42584],{"class":50},[37,42619,720],{"class":61},[37,42621,65],{"class":50},[37,42623,732],{"class":61},[37,42625,42593],{"class":50},[37,42627,726],{"class":61},[37,42629,38384],{"class":50},[37,42631,42632,42634,42636,42638,42640,42642,42644,42646,42648,42650,42652,42654,42656],{"class":39,"line":10134},[37,42633,38434],{"class":50},[37,42635,31213],{"class":159},[37,42637,55],{"class":54},[37,42639,62],{"class":61},[37,42641,65],{"class":50},[37,42643,31268],{"class":159},[37,42645,55],{"class":54},[37,42647,602],{"class":61},[37,42649,65],{"class":50},[37,42651,31222],{"class":159},[37,42653,55],{"class":54},[37,42655,332],{"class":61},[37,42657,280],{"class":50},[37,42659,42660],{"class":39,"line":10139},[37,42661,38463],{"class":50},[37,42663,42664,42666,42669,42671],{"class":39,"line":10144},[37,42665,31184],{"class":61},[37,42667,42668],{"class":50},".b4",[37,42670,55],{"class":54},[37,42672,38346],{"class":50},[37,42674,42675,42677,42680,42682,42684,42686,42688,42690,42693,42695,42697,42699,42701,42703,42705],{"class":39,"line":10153},[37,42676,42566],{"class":50},[37,42678,42679],{"class":61},"480",[37,42681,65],{"class":50},[37,42683,42496],{"class":61},[37,42685,42575],{"class":50},[37,42687,732],{"class":61},[37,42689,65],{"class":50},[37,42691,42692],{"class":61},"208",[37,42694,42584],{"class":50},[37,42696,1111],{"class":61},[37,42698,65],{"class":50},[37,42700,1117],{"class":61},[37,42702,42593],{"class":50},[37,42704,726],{"class":61},[37,42706,38384],{"class":50},[37,42708,42709,42711,42713,42715,42717,42719,42721,42723,42725,42727,42729,42731,42733,42735,42737],{"class":39,"line":10158},[37,42710,42566],{"class":50},[37,42712,38794],{"class":61},[37,42714,65],{"class":50},[37,42716,21389],{"class":61},[37,42718,42575],{"class":50},[37,42720,1128],{"class":61},[37,42722,65],{"class":50},[37,42724,31839],{"class":61},[37,42726,42584],{"class":50},[37,42728,1309],{"class":61},[37,42730,65],{"class":50},[37,42732,726],{"class":61},[37,42734,42593],{"class":50},[37,42736,726],{"class":61},[37,42738,38384],{"class":50},[37,42740,42741,42743,42745,42747,42749,42751,42753,42755,42757,42759,42761,42763,42765,42767,42769],{"class":39,"line":10164},[37,42742,42566],{"class":50},[37,42744,38794],{"class":61},[37,42746,65],{"class":50},[37,42748,32408],{"class":61},[37,42750,42575],{"class":50},[37,42752,32408],{"class":61},[37,42754,65],{"class":50},[37,42756,35207],{"class":61},[37,42758,42584],{"class":50},[37,42760,1309],{"class":61},[37,42762,65],{"class":50},[37,42764,726],{"class":61},[37,42766,42593],{"class":50},[37,42768,726],{"class":61},[37,42770,38384],{"class":50},[37,42772,42773,42775,42777,42779,42781,42783,42785,42787,42790,42792,42794,42796,42798,42800,42802],{"class":39,"line":10185},[37,42774,42566],{"class":50},[37,42776,38794],{"class":61},[37,42778,65],{"class":50},[37,42780,1128],{"class":61},[37,42782,42575],{"class":50},[37,42784,32408],{"class":61},[37,42786,65],{"class":50},[37,42788,42789],{"class":61},"288",[37,42791,42584],{"class":50},[37,42793,720],{"class":61},[37,42795,65],{"class":50},[37,42797,726],{"class":61},[37,42799,42593],{"class":50},[37,42801,726],{"class":61},[37,42803,38384],{"class":50},[37,42805,42806,42808,42811,42813,42815,42817,42819,42821,42824,42826,42828,42830,42832,42834,42836],{"class":39,"line":10191},[37,42807,42566],{"class":50},[37,42809,42810],{"class":61},"528",[37,42812,65],{"class":50},[37,42814,35207],{"class":61},[37,42816,42575],{"class":50},[37,42818,21389],{"class":61},[37,42820,65],{"class":50},[37,42822,42823],{"class":61},"320",[37,42825,42584],{"class":50},[37,42827,720],{"class":61},[37,42829,65],{"class":50},[37,42831,32408],{"class":61},[37,42833,42593],{"class":50},[37,42835,32408],{"class":61},[37,42837,38384],{"class":50},[37,42839,42840,42842,42844,42846,42848,42850,42852,42854,42856,42858,42860,42862,42864],{"class":39,"line":10205},[37,42841,38434],{"class":50},[37,42843,31213],{"class":159},[37,42845,55],{"class":54},[37,42847,62],{"class":61},[37,42849,65],{"class":50},[37,42851,31268],{"class":159},[37,42853,55],{"class":54},[37,42855,602],{"class":61},[37,42857,65],{"class":50},[37,42859,31222],{"class":159},[37,42861,55],{"class":54},[37,42863,332],{"class":61},[37,42865,280],{"class":50},[37,42867,42868],{"class":39,"line":10211},[37,42869,38463],{"class":50},[37,42871,42872,42874,42877,42879],{"class":39,"line":10238},[37,42873,31184],{"class":61},[37,42875,42876],{"class":50},".b5",[37,42878,55],{"class":54},[37,42880,38346],{"class":50},[37,42882,42883,42885,42888,42890,42892,42894,42896,42898,42900,42902,42904,42906,42908,42910,42912],{"class":39,"line":10247},[37,42884,42566],{"class":50},[37,42886,42887],{"class":61},"832",[37,42889,65],{"class":50},[37,42891,35207],{"class":61},[37,42893,42575],{"class":50},[37,42895,21389],{"class":61},[37,42897,65],{"class":50},[37,42899,42823],{"class":61},[37,42901,42584],{"class":50},[37,42903,720],{"class":61},[37,42905,65],{"class":50},[37,42907,32408],{"class":61},[37,42909,42593],{"class":50},[37,42911,32408],{"class":61},[37,42913,38384],{"class":50},[37,42915,42916,42918,42920,42922,42924,42926,42928,42930,42932,42934,42936,42938,42940,42942,42944],{"class":39,"line":10253},[37,42917,42566],{"class":50},[37,42919,42887],{"class":61},[37,42921,65],{"class":50},[37,42923,35277],{"class":61},[37,42925,42575],{"class":50},[37,42927,42496],{"class":61},[37,42929,65],{"class":50},[37,42931,35277],{"class":61},[37,42933,42584],{"class":50},[37,42935,1117],{"class":61},[37,42937,65],{"class":50},[37,42939,32408],{"class":61},[37,42941,42593],{"class":50},[37,42943,32408],{"class":61},[37,42945,38384],{"class":50},[37,42947,42948,42951,42953,42955,42957],{"class":39,"line":10261},[37,42949,42950],{"class":50},"            nn.AdaptiveAvgPool2d((",[37,42952,332],{"class":61},[37,42954,65],{"class":50},[37,42956,332],{"class":61},[37,42958,42959],{"class":50},")),\n",[37,42961,42962],{"class":39,"line":10266},[37,42963,39127],{"class":50},[37,42965,42966,42968,42971,42973,42975],{"class":39,"line":16945},[37,42967,39132],{"class":50},[37,42969,42970],{"class":61},"1024",[37,42972,65],{"class":50},[37,42974,98],{"class":61},[37,42976,280],{"class":50},[37,42978,42979],{"class":39,"line":16951},[37,42980,38463],{"class":50},[37,42982,42983],{"class":39,"line":16974},[37,42984,42985],{"class":43},"        # 对模型参数初始化\n",[37,42987,42988,42990,42992,42994,42996],{"class":39,"line":16980},[37,42989,3753],{"class":54},[37,42991,39205],{"class":50},[37,42993,26385],{"class":54},[37,42995,39210],{"class":61},[37,42997,39213],{"class":50},[37,42999,43000,43002,43004],{"class":39,"line":17003},[37,43001,4992],{"class":54},[37,43003,39225],{"class":61},[37,43005,39228],{"class":50},[37,43007,43008,43010,43013,43015,43018,43020,43022,43024,43026],{"class":39,"line":17017},[37,43009,39238],{"class":50},[37,43011,43012],{"class":159},"mode",[37,43014,55],{"class":54},[37,43016,43017],{"class":185},"'fan_out'",[37,43019,65],{"class":50},[37,43021,39241],{"class":159},[37,43023,55],{"class":54},[37,43025,39246],{"class":185},[37,43027,280],{"class":50},[37,43029,43030],{"class":39,"line":17037},[37,43031,43032],{"class":43},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[37,43034,43035],{"class":39,"line":17043},[37,43036,43037],{"class":43},"                # ② mode = 'fan_out'决定使用的fan值：\n",[37,43039,43040],{"class":39,"line":17054},[37,43041,43042],{"class":43},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[37,43044,43045],{"class":39,"line":17077},[37,43046,43047],{"class":43},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[37,43049,43050],{"class":39,"line":17099},[37,43051,43052],{"class":43},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[37,43054,43055],{"class":39,"line":17104},[37,43056,43057],{"class":43},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[37,43059,43060,43062,43064,43066,43068,43070],{"class":39,"line":17110},[37,43061,39258],{"class":54},[37,43063,39261],{"class":50},[37,43065,39264],{"class":54},[37,43067,39267],{"class":54},[37,43069,39270],{"class":61},[37,43071,4089],{"class":50},[37,43073,43074,43076,43078],{"class":39,"line":17124},[37,43075,39282],{"class":50},[37,43077,135],{"class":61},[37,43079,280],{"class":50},[37,43081,43082,43085,43087],{"class":39,"line":17137},[37,43083,43084],{"class":54},"                elif",[37,43086,39225],{"class":61},[37,43088,39301],{"class":50},[37,43090,43091,43094,43096,43098,43100],{"class":39,"line":17142},[37,43092,43093],{"class":50},"                    nn.init.normal_(m.weight,",[37,43095,135],{"class":61},[37,43097,65],{"class":50},[37,43099,39323],{"class":61},[37,43101,280],{"class":50},[37,43103,43104,43107,43109,43111,43113,43115],{"class":39,"line":17156},[37,43105,43106],{"class":54},"                    if",[37,43108,39261],{"class":50},[37,43110,39264],{"class":54},[37,43112,39267],{"class":54},[37,43114,39270],{"class":61},[37,43116,4089],{"class":50},[37,43118,43119,43122,43124],{"class":39,"line":17161},[37,43120,43121],{"class":50},"                        nn.init.constant_(m.bias,",[37,43123,135],{"class":61},[37,43125,280],{"class":50},[37,43127,43128],{"class":39,"line":17167},[37,43129,35502],{"class":43},[37,43131,43132,43134,43136],{"class":39,"line":17172},[37,43133,31140],{"class":54},[37,43135,31432],{"class":2320},[37,43137,31435],{"class":50},[37,43139,43140,43142,43144,43146],{"class":39,"line":17186},[37,43141,31440],{"class":50},[37,43143,55],{"class":54},[37,43145,31162],{"class":61},[37,43147,43148],{"class":50},".b1(x)\n",[37,43150,43151,43153,43155,43157],{"class":39,"line":17191},[37,43152,31440],{"class":50},[37,43154,55],{"class":54},[37,43156,31162],{"class":61},[37,43158,43159],{"class":50},".b2(x)\n",[37,43161,43162,43164,43166,43168],{"class":39,"line":17196},[37,43163,31440],{"class":50},[37,43165,55],{"class":54},[37,43167,31162],{"class":61},[37,43169,43170],{"class":50},".b3(x)\n",[37,43172,43173,43175,43177,43179],{"class":39,"line":17210},[37,43174,31440],{"class":50},[37,43176,55],{"class":54},[37,43178,31162],{"class":61},[37,43180,43181],{"class":50},".b4(x)\n",[37,43183,43184,43186,43188,43190],{"class":39,"line":17222},[37,43185,31440],{"class":50},[37,43187,55],{"class":54},[37,43189,31162],{"class":61},[37,43191,43192],{"class":50},".b5(x)\n",[37,43194,43195,43197],{"class":39,"line":17227},[37,43196,15093],{"class":54},[37,43198,31548],{"class":50},[37,43200,43201],{"class":39,"line":17240},[37,43202,2757],{"emptyLinePlaceholder":454},[37,43204,43205],{"class":39,"line":17245},[37,43206,43207],{"class":43},"# 模型展示\n",[37,43209,43210,43212,43214,43216,43218],{"class":39,"line":17250},[37,43211,1907],{"class":54},[37,43213,31559],{"class":61},[37,43215,3299],{"class":54},[37,43217,31564],{"class":185},[37,43219,4089],{"class":50},[37,43221,43222,43224,43226,43228,43230,43232,43234,43236,43238],{"class":39,"line":17255},[37,43223,31576],{"class":50},[37,43225,55],{"class":54},[37,43227,30791],{"class":50},[37,43229,31583],{"class":185},[37,43231,2069],{"class":54},[37,43233,31588],{"class":50},[37,43235,2066],{"class":54},[37,43237,30816],{"class":185},[37,43239,280],{"class":50},[37,43241,43242,43244,43246],{"class":39,"line":17268},[37,43243,31628],{"class":50},[37,43245,55],{"class":54},[37,43247,43248],{"class":50},"GoogLeNet(Inception).to(device)\n",[37,43250,43251,43253,43255,43257,43259,43261,43263,43265],{"class":39,"line":17273},[37,43252,31638],{"class":61},[37,43254,31641],{"class":50},[37,43256,332],{"class":61},[37,43258,65],{"class":50},[37,43260,31839],{"class":61},[37,43262,65],{"class":50},[37,43264,31839],{"class":61},[37,43266,31654],{"class":50},[481,43268,43269],{"start":47},[484,43270,39520],{},[27,43272,43274],{"className":29,"code":43273,"language":31,"meta":32,"style":32},"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",[34,43275,43276,43282,43288,43298,43304,43314,43324,43334,43344,43354,43358,43369,43379,43383,43387,43391,43399,43411,43421,43437,43447,43479,43493,43503,43513,43517,43527,43541,43551,43561,43571,43577,43581,43585,43589,43593,43597,43605,43625,43629,43633,43637,43641,43645,43661,43665,43669,43677,43681,43685,43693,43697,43701,43705,43713,43717,43721,43725,43729,43737,43741,43749,43753,43761,43765,43773,43777,43785,43789,43793,43801,43805,43809,43813,43825,43849,43863,43867,43871,43875,43883,43887,43895,43899,43907,43911,43919,43923,43931,43935,43943,43947,43959,43963,43971,43975,43983,43987,43991,43995,43999,44007,44011,44027,44031,44039,44043,44047,44051,44055,44059,44063,44067,44083,44087,44099,44103,44115,44119,44131,44135,44143,44147,44155,44159,44163,44167,44173,44177,44185,44189,44205,44209,44217,44221,44237,44249,44253,44265,44269,44273,44281,44285,44289,44297,44301,44309,44313,44321,44325,44329,44371,44413,44417,44421,44437,44441,44457,44461,44465,44473,44477,44481,44493,44531,44535,44539,44547,44551,44565,44575,44581,44587,44593,44599,44603,44607,44613,44617,44621,44629,44633,44651,44655,44659,44663,44679,44683,44687,44691,44695,44699,44719,44739,44743,44747,44751,44759,44767,44771,44787,44807,44827,44831,44835,44843,44851,44855,44859,44863,44875,44879,44889,44897,44914],{"__ignoreMap":32},[37,43277,43278,43280],{"class":39,"line":40},[37,43279,30732],{"class":54},[37,43281,32160],{"class":50},[37,43283,43284,43286],{"class":39,"line":47},[37,43285,30732],{"class":54},[37,43287,32167],{"class":50},[37,43289,43290,43292,43294,43296],{"class":39,"line":104},[37,43291,30732],{"class":54},[37,43293,32178],{"class":50},[37,43295,31722],{"class":54},[37,43297,32183],{"class":50},[37,43299,43300,43302],{"class":39,"line":113},[37,43301,30732],{"class":54},[37,43303,30735],{"class":50},[37,43305,43306,43308,43310,43312],{"class":39,"line":189},[37,43307,31076],{"class":54},[37,43309,31754],{"class":50},[37,43311,30732],{"class":54},[37,43313,32200],{"class":50},[37,43315,43316,43318,43320,43322],{"class":39,"line":195},[37,43317,31076],{"class":54},[37,43319,31707],{"class":50},[37,43321,30732],{"class":54},[37,43323,31712],{"class":50},[37,43325,43326,43328,43330,43332],{"class":39,"line":201},[37,43327,31076],{"class":54},[37,43329,31737],{"class":50},[37,43331,30732],{"class":54},[37,43333,31742],{"class":50},[37,43335,43336,43338,43340,43342],{"class":39,"line":207},[37,43337,30732],{"class":54},[37,43339,31754],{"class":50},[37,43341,31722],{"class":54},[37,43343,31759],{"class":50},[37,43345,43346,43348,43350,43352],{"class":39,"line":213},[37,43347,30732],{"class":54},[37,43349,31771],{"class":50},[37,43351,31722],{"class":54},[37,43353,31776],{"class":50},[37,43355,43356],{"class":39,"line":218},[37,43357,32245],{"class":43},[37,43359,43360,43362,43364,43366],{"class":39,"line":227},[37,43361,31076],{"class":54},[37,43363,32252],{"class":50},[37,43365,30732],{"class":54},[37,43367,43368],{"class":50}," GoogLeNet, Inception\n",[37,43370,43371,43373,43375,43377],{"class":39,"line":232},[37,43372,31076],{"class":54},[37,43374,31079],{"class":50},[37,43376,30732],{"class":54},[37,43378,31084],{"class":50},[37,43380,43381],{"class":39,"line":238},[37,43382,2757],{"emptyLinePlaceholder":454},[37,43384,43385],{"class":39,"line":244},[37,43386,2757],{"emptyLinePlaceholder":454},[37,43388,43389],{"class":39,"line":250},[37,43390,32280],{"class":43},[37,43392,43393,43395,43397],{"class":39,"line":256},[37,43394,32285],{"class":54},[37,43396,32288],{"class":2320},[37,43398,32291],{"class":50},[37,43400,43401,43403,43405,43407,43409],{"class":39,"line":261},[37,43402,32296],{"class":50},[37,43404,55],{"class":54},[37,43406,31794],{"class":50},[37,43408,31802],{"class":185},[37,43410,31805],{"class":50},[37,43412,43413,43415,43417,43419],{"class":39,"line":267},[37,43414,32309],{"class":159},[37,43416,55],{"class":54},[37,43418,31815],{"class":61},[37,43420,31805],{"class":50},[37,43422,43423,43425,43427,43429,43431,43433,43435],{"class":39,"line":283},[37,43424,32320],{"class":159},[37,43426,55],{"class":54},[37,43428,31832],{"class":50},[37,43430,160],{"class":159},[37,43432,55],{"class":54},[37,43434,35786],{"class":61},[37,43436,31842],{"class":50},[37,43438,43439,43441,43443,43445],{"class":39,"line":288},[37,43440,32337],{"class":159},[37,43442,55],{"class":54},[37,43444,31815],{"class":61},[37,43446,280],{"class":50},[37,43448,43449,43451,43453,43455,43457,43459,43461,43463,43465,43467,43469,43471,43473,43475,43477],{"class":39,"line":294},[37,43450,32348],{"class":50},[37,43452,55],{"class":54},[37,43454,32353],{"class":50},[37,43456,32356],{"class":61},[37,43458,165],{"class":50},[37,43460,32361],{"class":61},[37,43462,967],{"class":54},[37,43464,7706],{"class":61},[37,43466,32368],{"class":50},[37,43468,32356],{"class":61},[37,43470,165],{"class":50},[37,43472,32375],{"class":61},[37,43474,967],{"class":54},[37,43476,7706],{"class":61},[37,43478,32382],{"class":50},[37,43480,43481,43483,43485,43487,43489,43491],{"class":39,"line":300},[37,43482,32387],{"class":50},[37,43484,55],{"class":54},[37,43486,32392],{"class":50},[37,43488,31875],{"class":159},[37,43490,55],{"class":54},[37,43492,31880],{"class":50},[37,43494,43495,43497,43499,43501],{"class":39,"line":306},[37,43496,32403],{"class":159},[37,43498,55],{"class":54},[37,43500,720],{"class":61},[37,43502,31805],{"class":50},[37,43504,43505,43507,43509,43511],{"class":39,"line":312},[37,43506,32415],{"class":159},[37,43508,55],{"class":54},[37,43510,31815],{"class":61},[37,43512,31805],{"class":50},[37,43514,43515],{"class":39,"line":317},[37,43516,32426],{"class":43},[37,43518,43519,43521,43523,43525],{"class":39,"line":323},[37,43520,32431],{"class":159},[37,43522,55],{"class":54},[37,43524,73],{"class":61},[37,43526,280],{"class":50},[37,43528,43529,43531,43533,43535,43537,43539],{"class":39,"line":337},[37,43530,32442],{"class":50},[37,43532,55],{"class":54},[37,43534,31872],{"class":50},[37,43536,31875],{"class":159},[37,43538,55],{"class":54},[37,43540,32453],{"class":50},[37,43542,43543,43545,43547,43549],{"class":39,"line":342},[37,43544,32458],{"class":159},[37,43546,55],{"class":54},[37,43548,720],{"class":61},[37,43550,31805],{"class":50},[37,43552,43553,43555,43557,43559],{"class":39,"line":347},[37,43554,32469],{"class":159},[37,43556,55],{"class":54},[37,43558,31815],{"class":61},[37,43560,31805],{"class":50},[37,43562,43563,43565,43567,43569],{"class":39,"line":352},[37,43564,32480],{"class":159},[37,43566,55],{"class":54},[37,43568,73],{"class":61},[37,43570,280],{"class":50},[37,43572,43573,43575],{"class":39,"line":357},[37,43574,4440],{"class":54},[37,43576,32493],{"class":50},[37,43578,43579],{"class":39,"line":362},[37,43580,2757],{"emptyLinePlaceholder":454},[37,43582,43583],{"class":39,"line":367},[37,43584,32502],{"class":43},[37,43586,43587],{"class":39,"line":373},[37,43588,32507],{"class":43},[37,43590,43591],{"class":39,"line":392},[37,43592,2757],{"emptyLinePlaceholder":454},[37,43594,43595],{"class":39,"line":398},[37,43596,32516],{"class":43},[37,43598,43599,43601,43603],{"class":39,"line":409},[37,43600,32285],{"class":54},[37,43602,32523],{"class":2320},[37,43604,32526],{"class":50},[37,43606,43607,43609,43611,43613,43615,43617,43619,43621,43623],{"class":39,"line":415},[37,43608,31576],{"class":50},[37,43610,55],{"class":54},[37,43612,30791],{"class":50},[37,43614,31583],{"class":185},[37,43616,2069],{"class":54},[37,43618,31588],{"class":50},[37,43620,2066],{"class":54},[37,43622,32545],{"class":185},[37,43624,280],{"class":50},[37,43626,43627],{"class":39,"line":420},[37,43628,2757],{"emptyLinePlaceholder":454},[37,43630,43631],{"class":39,"line":425},[37,43632,2757],{"emptyLinePlaceholder":454},[37,43634,43635],{"class":39,"line":431},[37,43636,32560],{"class":43},[37,43638,43639],{"class":39,"line":436},[37,43640,32565],{"class":43},[37,43642,43643],{"class":39,"line":442},[37,43644,32570],{"class":43},[37,43646,43647,43649,43651,43653,43655,43657,43659],{"class":39,"line":8374},[37,43648,32575],{"class":50},[37,43650,55],{"class":54},[37,43652,32580],{"class":50},[37,43654,32583],{"class":159},[37,43656,55],{"class":54},[37,43658,32588],{"class":61},[37,43660,280],{"class":50},[37,43662,43663],{"class":39,"line":8386},[37,43664,2757],{"emptyLinePlaceholder":454},[37,43666,43667],{"class":39,"line":8398},[37,43668,32599],{"class":43},[37,43670,43671,43673,43675],{"class":39,"line":10057},[37,43672,32604],{"class":50},[37,43674,55],{"class":54},[37,43676,32609],{"class":50},[37,43678,43679],{"class":39,"line":10082},[37,43680,2757],{"emptyLinePlaceholder":454},[37,43682,43683],{"class":39,"line":10105},[37,43684,32618],{"class":43},[37,43686,43687,43689,43691],{"class":39,"line":10129},[37,43688,31628],{"class":50},[37,43690,55],{"class":54},[37,43692,32627],{"class":50},[37,43694,43695],{"class":39,"line":10134},[37,43696,32632],{"class":43},[37,43698,43699],{"class":39,"line":10139},[37,43700,32637],{"class":43},[37,43702,43703],{"class":39,"line":10144},[37,43704,32642],{"class":43},[37,43706,43707,43709,43711],{"class":39,"line":10153},[37,43708,32647],{"class":50},[37,43710,55],{"class":54},[37,43712,32652],{"class":50},[37,43714,43715],{"class":39,"line":10158},[37,43716,2757],{"emptyLinePlaceholder":454},[37,43718,43719],{"class":39,"line":10164},[37,43720,2757],{"emptyLinePlaceholder":454},[37,43722,43723],{"class":39,"line":10185},[37,43724,32665],{"class":43},[37,43726,43727],{"class":39,"line":10191},[37,43728,32670],{"class":43},[37,43730,43731,43733,43735],{"class":39,"line":10205},[37,43732,32675],{"class":50},[37,43734,55],{"class":54},[37,43736,32680],{"class":61},[37,43738,43739],{"class":39,"line":10211},[37,43740,32685],{"class":43},[37,43742,43743,43745,43747],{"class":39,"line":10238},[37,43744,32690],{"class":50},[37,43746,55],{"class":54},[37,43748,32695],{"class":50},[37,43750,43751],{"class":39,"line":10247},[37,43752,32700],{"class":43},[37,43754,43755,43757,43759],{"class":39,"line":10253},[37,43756,32705],{"class":50},[37,43758,55],{"class":54},[37,43760,32695],{"class":50},[37,43762,43763],{"class":39,"line":10261},[37,43764,32714],{"class":43},[37,43766,43767,43769,43771],{"class":39,"line":10266},[37,43768,32719],{"class":50},[37,43770,55],{"class":54},[37,43772,32695],{"class":50},[37,43774,43775],{"class":39,"line":16945},[37,43776,32728],{"class":43},[37,43778,43779,43781,43783],{"class":39,"line":16951},[37,43780,32733],{"class":50},[37,43782,55],{"class":54},[37,43784,32695],{"class":50},[37,43786,43787],{"class":39,"line":16974},[37,43788,2757],{"emptyLinePlaceholder":454},[37,43790,43791],{"class":39,"line":16980},[37,43792,32746],{"class":43},[37,43794,43795,43797,43799],{"class":39,"line":17003},[37,43796,32751],{"class":50},[37,43798,55],{"class":54},[37,43800,32756],{"class":50},[37,43802,43803],{"class":39,"line":17017},[37,43804,2757],{"emptyLinePlaceholder":454},[37,43806,43807],{"class":39,"line":17037},[37,43808,2757],{"emptyLinePlaceholder":454},[37,43810,43811],{"class":39,"line":17043},[37,43812,32769],{"class":43},[37,43814,43815,43817,43819,43821,43823],{"class":39,"line":17054},[37,43816,3551],{"class":54},[37,43818,32776],{"class":50},[37,43820,26385],{"class":54},[37,43822,32781],{"class":61},[37,43824,32784],{"class":50},[37,43826,43827,43829,43831,43833,43835,43837,43839,43841,43843,43845,43847],{"class":39,"line":17077},[37,43828,32789],{"class":61},[37,43830,165],{"class":50},[37,43832,32794],{"class":185},[37,43834,32797],{"class":61},[37,43836,1094],{"class":185},[37,43838,32797],{"class":61},[37,43840,772],{"class":185},[37,43842,32806],{"class":50},[37,43844,384],{"class":54},[37,43846,332],{"class":61},[37,43848,175],{"class":50},[37,43850,43851,43853,43855,43857,43859,43861],{"class":39,"line":17099},[37,43852,32789],{"class":61},[37,43854,165],{"class":50},[37,43856,32821],{"class":185},[37,43858,967],{"class":54},[37,43860,98],{"class":61},[37,43862,280],{"class":50},[37,43864,43865],{"class":39,"line":17104},[37,43866,2757],{"emptyLinePlaceholder":454},[37,43868,43869],{"class":39,"line":17110},[37,43870,32836],{"class":43},[37,43872,43873],{"class":39,"line":17124},[37,43874,32841],{"class":43},[37,43876,43877,43879,43881],{"class":39,"line":17137},[37,43878,32846],{"class":50},[37,43880,55],{"class":54},[37,43882,32680],{"class":61},[37,43884,43885],{"class":39,"line":17142},[37,43886,32855],{"class":43},[37,43888,43889,43891,43893],{"class":39,"line":17156},[37,43890,32860],{"class":50},[37,43892,55],{"class":54},[37,43894,3435],{"class":61},[37,43896,43897],{"class":39,"line":17161},[37,43898,32869],{"class":43},[37,43900,43901,43903,43905],{"class":39,"line":17167},[37,43902,32874],{"class":50},[37,43904,55],{"class":54},[37,43906,32680],{"class":61},[37,43908,43909],{"class":39,"line":17172},[37,43910,32883],{"class":43},[37,43912,43913,43915,43917],{"class":39,"line":17186},[37,43914,32888],{"class":50},[37,43916,55],{"class":54},[37,43918,3435],{"class":61},[37,43920,43921],{"class":39,"line":17191},[37,43922,32897],{"class":43},[37,43924,43925,43927,43929],{"class":39,"line":17196},[37,43926,32902],{"class":50},[37,43928,55],{"class":54},[37,43930,3435],{"class":61},[37,43932,43933],{"class":39,"line":17210},[37,43934,32911],{"class":43},[37,43936,43937,43939,43941],{"class":39,"line":17222},[37,43938,32916],{"class":50},[37,43940,55],{"class":54},[37,43942,3435],{"class":61},[37,43944,43945],{"class":39,"line":17227},[37,43946,32925],{"class":43},[37,43948,43949,43951,43953,43955,43957],{"class":39,"line":17240},[37,43950,3753],{"class":54},[37,43952,31939],{"class":50},[37,43954,26385],{"class":54},[37,43956,31944],{"class":61},[37,43958,32938],{"class":50},[37,43960,43961],{"class":39,"line":17245},[37,43962,32943],{"class":43},[37,43964,43965,43967,43969],{"class":39,"line":17250},[37,43966,32948],{"class":50},[37,43968,55],{"class":54},[37,43970,32953],{"class":50},[37,43972,43973],{"class":39,"line":17255},[37,43974,32958],{"class":43},[37,43976,43977,43979,43981],{"class":39,"line":17268},[37,43978,32963],{"class":50},[37,43980,55],{"class":54},[37,43982,32968],{"class":50},[37,43984,43985],{"class":39,"line":17273},[37,43986,32974],{"class":43},[37,43988,43989],{"class":39,"line":32971},[37,43990,32980],{"class":50},[37,43992,43993],{"class":39,"line":32977},[37,43994,32986],{"class":43},[37,43996,43997],{"class":39,"line":32983},[37,43998,32992],{"class":43},[37,44000,44001,44003,44005],{"class":39,"line":32989},[37,44002,32998],{"class":50},[37,44004,55],{"class":54},[37,44006,33003],{"class":50},[37,44008,44009],{"class":39,"line":32995},[37,44010,33009],{"class":43},[37,44012,44013,44015,44017,44019,44021,44023,44025],{"class":39,"line":33006},[37,44014,33015],{"class":50},[37,44016,55],{"class":54},[37,44018,33020],{"class":50},[37,44020,33023],{"class":159},[37,44022,55],{"class":54},[37,44024,332],{"class":61},[37,44026,280],{"class":50},[37,44028,44029],{"class":39,"line":33012},[37,44030,33035],{"class":43},[37,44032,44033,44035,44037],{"class":39,"line":33032},[37,44034,33041],{"class":50},[37,44036,55],{"class":54},[37,44038,33046],{"class":50},[37,44040,44041],{"class":39,"line":33038},[37,44042,33052],{"class":43},[37,44044,44045],{"class":39,"line":33049},[37,44046,33058],{"class":50},[37,44048,44049],{"class":39,"line":33055},[37,44050,33064],{"class":43},[37,44052,44053],{"class":39,"line":33061},[37,44054,33070],{"class":50},[37,44056,44057],{"class":39,"line":33067},[37,44058,33076],{"class":43},[37,44060,44061],{"class":39,"line":33073},[37,44062,33082],{"class":50},[37,44064,44065],{"class":39,"line":33079},[37,44066,33088],{"class":43},[37,44068,44069,44071,44073,44075,44077,44079,44081],{"class":39,"line":33085},[37,44070,33094],{"class":50},[37,44072,9818],{"class":54},[37,44074,33099],{"class":50},[37,44076,967],{"class":54},[37,44078,33104],{"class":50},[37,44080,135],{"class":61},[37,44082,280],{"class":50},[37,44084,44085],{"class":39,"line":33091},[37,44086,33114],{"class":43},[37,44088,44089,44091,44093,44095,44097],{"class":39,"line":33111},[37,44090,33120],{"class":50},[37,44092,9818],{"class":54},[37,44094,33125],{"class":50},[37,44096,3299],{"class":54},[37,44098,33130],{"class":50},[37,44100,44101],{"class":39,"line":33117},[37,44102,33136],{"class":43},[37,44104,44105,44107,44109,44111,44113],{"class":39,"line":33133},[37,44106,33142],{"class":50},[37,44108,9818],{"class":54},[37,44110,33104],{"class":50},[37,44112,135],{"class":61},[37,44114,280],{"class":50},[37,44116,44117],{"class":39,"line":33139},[37,44118,33156],{"class":43},[37,44120,44121,44123,44125,44127,44129],{"class":39,"line":33153},[37,44122,3753],{"class":54},[37,44124,33164],{"class":50},[37,44126,26385],{"class":54},[37,44128,31944],{"class":61},[37,44130,33171],{"class":50},[37,44132,44133],{"class":39,"line":33159},[37,44134,33177],{"class":43},[37,44136,44137,44139,44141],{"class":39,"line":33174},[37,44138,32948],{"class":50},[37,44140,55],{"class":54},[37,44142,32953],{"class":50},[37,44144,44145],{"class":39,"line":33180},[37,44146,33192],{"class":43},[37,44148,44149,44151,44153],{"class":39,"line":33189},[37,44150,32963],{"class":50},[37,44152,55],{"class":54},[37,44154,32968],{"class":50},[37,44156,44157],{"class":39,"line":33195},[37,44158,33207],{"class":43},[37,44160,44161],{"class":39,"line":33204},[37,44162,33213],{"class":50},[37,44164,44165],{"class":39,"line":33210},[37,44166,36693],{"class":43},[37,44168,44169,44171],{"class":39,"line":33216},[37,44170,33219],{"class":54},[37,44172,33222],{"class":50},[37,44174,44175],{"class":39,"line":33225},[37,44176,33228],{"class":43},[37,44178,44179,44181,44183],{"class":39,"line":33231},[37,44180,36708],{"class":50},[37,44182,55],{"class":54},[37,44184,33003],{"class":50},[37,44186,44187],{"class":39,"line":33242},[37,44188,33245],{"class":43},[37,44190,44191,44193,44195,44197,44199,44201,44203],{"class":39,"line":33248},[37,44192,36721],{"class":50},[37,44194,55],{"class":54},[37,44196,33020],{"class":50},[37,44198,33023],{"class":159},[37,44200,55],{"class":54},[37,44202,332],{"class":61},[37,44204,280],{"class":50},[37,44206,44207],{"class":39,"line":33267},[37,44208,33270],{"class":43},[37,44210,44211,44213,44215],{"class":39,"line":33273},[37,44212,36742],{"class":50},[37,44214,55],{"class":54},[37,44216,33046],{"class":50},[37,44218,44219],{"class":39,"line":33284},[37,44220,33287],{"class":43},[37,44222,44223,44225,44227,44229,44231,44233,44235],{"class":39,"line":33290},[37,44224,36755],{"class":50},[37,44226,9818],{"class":54},[37,44228,36760],{"class":50},[37,44230,967],{"class":54},[37,44232,33104],{"class":50},[37,44234,135],{"class":61},[37,44236,280],{"class":50},[37,44238,44239,44241,44243,44245,44247],{"class":39,"line":33310},[37,44240,36773],{"class":50},[37,44242,9818],{"class":54},[37,44244,33125],{"class":50},[37,44246,3299],{"class":54},[37,44248,33130],{"class":50},[37,44250,44251],{"class":39,"line":33326},[37,44252,36786],{"class":43},[37,44254,44255,44257,44259,44261,44263],{"class":39,"line":33332},[37,44256,36791],{"class":50},[37,44258,9818],{"class":54},[37,44260,33104],{"class":50},[37,44262,135],{"class":61},[37,44264,280],{"class":50},[37,44266,44267],{"class":39,"line":33346},[37,44268,33349],{"class":43},[37,44270,44271],{"class":39,"line":33352},[37,44272,33355],{"class":43},[37,44274,44275,44277,44279],{"class":39,"line":33358},[37,44276,33361],{"class":50},[37,44278,1094],{"class":54},[37,44280,33366],{"class":50},[37,44282,44283],{"class":39,"line":33369},[37,44284,33372],{"class":43},[37,44286,44287],{"class":39,"line":33375},[37,44288,33378],{"class":43},[37,44290,44291,44293,44295],{"class":39,"line":33381},[37,44292,33384],{"class":50},[37,44294,1094],{"class":54},[37,44296,33366],{"class":50},[37,44298,44299],{"class":39,"line":33391},[37,44300,33394],{"class":43},[37,44302,44303,44305,44307],{"class":39,"line":33397},[37,44304,33400],{"class":50},[37,44306,1094],{"class":54},[37,44308,33405],{"class":50},[37,44310,44311],{"class":39,"line":33408},[37,44312,33411],{"class":43},[37,44314,44315,44317,44319],{"class":39,"line":33414},[37,44316,33417],{"class":50},[37,44318,1094],{"class":54},[37,44320,33405],{"class":50},[37,44322,44323],{"class":39,"line":33424},[37,44324,2757],{"emptyLinePlaceholder":454},[37,44326,44327],{"class":39,"line":33429},[37,44328,33432],{"class":43},[37,44330,44331,44333,44335,44337,44339,44341,44343,44345,44347,44349,44351,44353,44355,44357,44359,44361,44363,44365,44367,44369],{"class":39,"line":33435},[37,44332,32789],{"class":61},[37,44334,165],{"class":50},[37,44336,3942],{"class":185},[37,44338,32797],{"class":61},[37,44340,33446],{"class":185},[37,44342,1404],{"class":61},[37,44344,33451],{"class":54},[37,44346,1454],{"class":61},[37,44348,33456],{"class":185},[37,44350,1404],{"class":61},[37,44352,33451],{"class":54},[37,44354,1454],{"class":61},[37,44356,3942],{"class":185},[37,44358,33467],{"class":50},[37,44360,384],{"class":54},[37,44362,332],{"class":61},[37,44364,33474],{"class":50},[37,44366,384],{"class":54},[37,44368,332],{"class":61},[37,44370,33481],{"class":50},[37,44372,44373,44375,44377,44379,44381,44383,44385,44387,44389,44391,44393,44395,44397,44399,44401,44403,44405,44407,44409,44411],{"class":39,"line":33484},[37,44374,32789],{"class":61},[37,44376,165],{"class":50},[37,44378,3942],{"class":185},[37,44380,32797],{"class":61},[37,44382,33495],{"class":185},[37,44384,1404],{"class":61},[37,44386,33451],{"class":54},[37,44388,1454],{"class":61},[37,44390,33504],{"class":185},[37,44392,1404],{"class":61},[37,44394,33451],{"class":54},[37,44396,1454],{"class":61},[37,44398,3942],{"class":185},[37,44400,33515],{"class":50},[37,44402,384],{"class":54},[37,44404,332],{"class":61},[37,44406,33522],{"class":50},[37,44408,384],{"class":54},[37,44410,332],{"class":61},[37,44412,33481],{"class":50},[37,44414,44415],{"class":39,"line":33531},[37,44416,2757],{"emptyLinePlaceholder":454},[37,44418,44419],{"class":39,"line":33536},[37,44420,33539],{"class":43},[37,44422,44423,44425,44427,44429,44431,44433,44435],{"class":39,"line":33542},[37,44424,2854],{"class":54},[37,44426,33547],{"class":50},[37,44428,384],{"class":54},[37,44430,332],{"class":61},[37,44432,1448],{"class":50},[37,44434,1468],{"class":54},[37,44436,33558],{"class":50},[37,44438,44439],{"class":39,"line":33561},[37,44440,33564],{"class":43},[37,44442,44443,44445,44447,44449,44451,44453,44455],{"class":39,"line":33567},[37,44444,33570],{"class":50},[37,44446,568],{"class":61},[37,44448,55],{"class":54},[37,44450,33577],{"class":50},[37,44452,384],{"class":54},[37,44454,332],{"class":61},[37,44456,389],{"class":50},[37,44458,44459],{"class":39,"line":33586},[37,44460,33589],{"class":43},[37,44462,44463],{"class":39,"line":33592},[37,44464,33595],{"class":43},[37,44466,44467,44469,44471],{"class":39,"line":33598},[37,44468,33601],{"class":50},[37,44470,55],{"class":54},[37,44472,32652],{"class":50},[37,44474,44475],{"class":39,"line":33608},[37,44476,2757],{"emptyLinePlaceholder":454},[37,44478,44479],{"class":39,"line":33613},[37,44480,33616],{"class":43},[37,44482,44483,44485,44487,44489,44491],{"class":39,"line":33619},[37,44484,33622],{"class":50},[37,44486,55],{"class":54},[37,44488,33627],{"class":50},[37,44490,384],{"class":54},[37,44492,33632],{"class":50},[37,44494,44495,44497,44499,44501,44503,44505,44507,44509,44511,44513,44515,44517,44519,44521,44523,44525,44527,44529],{"class":39,"line":33635},[37,44496,32789],{"class":61},[37,44498,165],{"class":50},[37,44500,33642],{"class":185},[37,44502,1404],{"class":61},[37,44504,33647],{"class":54},[37,44506,1454],{"class":61},[37,44508,1054],{"class":185},[37,44510,1404],{"class":61},[37,44512,33647],{"class":54},[37,44514,1454],{"class":61},[37,44516,33660],{"class":185},[37,44518,33663],{"class":50},[37,44520,33666],{"class":54},[37,44522,1415],{"class":61},[37,44524,33671],{"class":50},[37,44526,845],{"class":54},[37,44528,1415],{"class":61},[37,44530,175],{"class":50},[37,44532,44533],{"class":39,"line":33680},[37,44534,37070],{"class":43},[37,44536,44537],{"class":39,"line":33686},[37,44538,37075],{"class":43},[37,44540,44541,44543,44545],{"class":39,"line":33692},[37,44542,37080],{"class":50},[37,44544,33704],{"class":185},[37,44546,280],{"class":50},[37,44548,44549],{"class":39,"line":33698},[37,44550,33724],{"class":43},[37,44552,44553,44555,44557,44559,44561,44563],{"class":39,"line":33709},[37,44554,33730],{"class":50},[37,44556,55],{"class":54},[37,44558,33735],{"class":50},[37,44560,33738],{"class":159},[37,44562,55],{"class":54},[37,44564,1922],{"class":50},[37,44566,44567,44569,44571,44573],{"class":39,"line":33715},[37,44568,33748],{"class":185},[37,44570,1368],{"class":50},[37,44572,33753],{"class":61},[37,44574,33756],{"class":50},[37,44576,44577,44579],{"class":39,"line":33721},[37,44578,33762],{"class":185},[37,44580,33765],{"class":50},[37,44582,44583,44585],{"class":39,"line":33727},[37,44584,33771],{"class":185},[37,44586,33774],{"class":50},[37,44588,44589,44591],{"class":39,"line":33745},[37,44590,33780],{"class":185},[37,44592,33783],{"class":50},[37,44594,44595,44597],{"class":39,"line":33759},[37,44596,33789],{"class":185},[37,44598,33792],{"class":50},[37,44600,44601],{"class":39,"line":33768},[37,44602,33798],{"class":50},[37,44604,44605],{"class":39,"line":33777},[37,44606,33804],{"class":43},[37,44608,44609,44611],{"class":39,"line":33786},[37,44610,4440],{"class":54},[37,44612,33812],{"class":50},[37,44614,44615],{"class":39,"line":33795},[37,44616,2757],{"emptyLinePlaceholder":454},[37,44618,44619],{"class":39,"line":33801},[37,44620,33823],{"class":43},[37,44622,44623,44625,44627],{"class":39,"line":33807},[37,44624,32285],{"class":54},[37,44626,33831],{"class":2320},[37,44628,33834],{"class":50},[37,44630,44631],{"class":39,"line":33815},[37,44632,33840],{"class":43},[37,44634,44635,44637,44639,44641,44643,44645,44647,44649],{"class":39,"line":33820},[37,44636,33846],{"class":50},[37,44638,32031],{"class":159},[37,44640,55],{"class":54},[37,44642,165],{"class":50},[37,44644,68],{"class":61},[37,44646,65],{"class":50},[37,44648,168],{"class":61},[37,44650,175],{"class":50},[37,44652,44653],{"class":39,"line":33826},[37,44654,33866],{"class":43},[37,44656,44657],{"class":39,"line":33837},[37,44658,33872],{"class":43},[37,44660,44661],{"class":39,"line":33843},[37,44662,33878],{"class":43},[37,44664,44665,44667,44669,44671,44673,44675,44677],{"class":39,"line":33863},[37,44666,32065],{"class":50},[37,44668,332],{"class":61},[37,44670,65],{"class":50},[37,44672,602],{"class":61},[37,44674,65],{"class":50},[37,44676,332],{"class":61},[37,44678,280],{"class":50},[37,44680,44681],{"class":39,"line":33869},[37,44682,33901],{"class":43},[37,44684,44685],{"class":39,"line":33875},[37,44686,33907],{"class":43},[37,44688,44689],{"class":39,"line":33881},[37,44690,33913],{"class":43},[37,44692,44693],{"class":39,"line":33898},[37,44694,33919],{"class":43},[37,44696,44697],{"class":39,"line":33904},[37,44698,33925],{"class":43},[37,44700,44701,44703,44705,44707,44709,44711,44713,44715,44717],{"class":39,"line":33910},[37,44702,33931],{"class":50},[37,44704,33934],{"class":185},[37,44706,33937],{"class":50},[37,44708,33940],{"class":185},[37,44710,65],{"class":50},[37,44712,33945],{"class":159},[37,44714,55],{"class":54},[37,44716,33950],{"class":185},[37,44718,280],{"class":50},[37,44720,44721,44723,44725,44727,44729,44731,44733,44735,44737],{"class":39,"line":33916},[37,44722,33931],{"class":50},[37,44724,33934],{"class":185},[37,44726,33962],{"class":50},[37,44728,33965],{"class":185},[37,44730,65],{"class":50},[37,44732,33945],{"class":159},[37,44734,55],{"class":54},[37,44736,33974],{"class":185},[37,44738,280],{"class":50},[37,44740,44741],{"class":39,"line":33922},[37,44742,33982],{"class":43},[37,44744,44745],{"class":39,"line":33928},[37,44746,33988],{"class":50},[37,44748,44749],{"class":39,"line":33955},[37,44750,33994],{"class":43},[37,44752,44753,44755,44757],{"class":39,"line":33979},[37,44754,34000],{"class":50},[37,44756,34003],{"class":185},[37,44758,280],{"class":50},[37,44760,44761,44763,44765],{"class":39,"line":33985},[37,44762,34011],{"class":50},[37,44764,34014],{"class":185},[37,44766,280],{"class":50},[37,44768,44769],{"class":39,"line":33991},[37,44770,34022],{"class":43},[37,44772,44773,44775,44777,44779,44781,44783,44785],{"class":39,"line":33997},[37,44774,32065],{"class":50},[37,44776,332],{"class":61},[37,44778,65],{"class":50},[37,44780,602],{"class":61},[37,44782,65],{"class":50},[37,44784,602],{"class":61},[37,44786,280],{"class":50},[37,44788,44789,44791,44793,44795,44797,44799,44801,44803,44805],{"class":39,"line":34008},[37,44790,33931],{"class":50},[37,44792,33934],{"class":185},[37,44794,34049],{"class":50},[37,44796,33940],{"class":185},[37,44798,65],{"class":50},[37,44800,33945],{"class":159},[37,44802,55],{"class":54},[37,44804,34060],{"class":185},[37,44806,280],{"class":50},[37,44808,44809,44811,44813,44815,44817,44819,44821,44823,44825],{"class":39,"line":34019},[37,44810,33931],{"class":50},[37,44812,33934],{"class":185},[37,44814,34072],{"class":50},[37,44816,33965],{"class":185},[37,44818,65],{"class":50},[37,44820,33945],{"class":159},[37,44822,55],{"class":54},[37,44824,34083],{"class":185},[37,44826,280],{"class":50},[37,44828,44829],{"class":39,"line":34025},[37,44830,34091],{"class":43},[37,44832,44833],{"class":39,"line":34042},[37,44834,33988],{"class":50},[37,44836,44837,44839,44841],{"class":39,"line":34065},[37,44838,34000],{"class":50},[37,44840,33934],{"class":185},[37,44842,280],{"class":50},[37,44844,44845,44847,44849],{"class":39,"line":34088},[37,44846,34011],{"class":50},[37,44848,34113],{"class":185},[37,44850,280],{"class":50},[37,44852,44853],{"class":39,"line":34094},[37,44854,34121],{"class":50},[37,44856,44857],{"class":39,"line":34099},[37,44858,2757],{"emptyLinePlaceholder":454},[37,44860,44861],{"class":39,"line":34108},[37,44862,34132],{"class":43},[37,44864,44865,44867,44869,44871,44873],{"class":39,"line":34118},[37,44866,1907],{"class":54},[37,44868,31559],{"class":61},[37,44870,3299],{"class":54},[37,44872,31564],{"class":185},[37,44874,4089],{"class":50},[37,44876,44877],{"class":39,"line":34124},[37,44878,34151],{"class":43},[37,44880,44881,44884,44886],{"class":39,"line":34129},[37,44882,44883],{"class":50},"    GoogLeNet",[37,44885,55],{"class":54},[37,44887,44888],{"class":50},"GoogLeNet(Inception)\n",[37,44890,44891,44893,44895],{"class":39,"line":34135},[37,44892,34168],{"class":50},[37,44894,55],{"class":54},[37,44896,34173],{"class":50},[37,44898,44899,44901,44903,44906,44908,44910,44912],{"class":39,"line":34148},[37,44900,33730],{"class":50},[37,44902,55],{"class":54},[37,44904,44905],{"class":50},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[37,44907,34186],{"class":159},[37,44909,55],{"class":54},[37,44911,1459],{"class":61},[37,44913,280],{"class":50},[37,44915,44916],{"class":39,"line":34154},[37,44917,34198],{"class":50},[481,44919,44920],{"start":104},[484,44921,40911],{},[27,44923,44925],{"className":29,"code":44924,"language":31,"meta":32,"style":32},"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",[34,44926,44927,44933,44943,44953,44957,44967,44978,44982,44986,44990,44998,45014,45024,45040,45050,45064,45068,45078,45088,45098,45104,45108,45112,45120,45124,45140,45148,45152,45156,45164,45172,45176,45180,45184,45188,45194,45198,45208,45216,45224,45228,45232,45236,45244,45248,45264,45268,45272,45276,45288,45292,45304,45308,45312,45324,45328,45338,45342,45346,45358,45362,45370,45374,45378,45386,45390,45398,45402,45406,45410,45414,45418,45434,45442,45446,45450,45498,45504,45508,45518,45526,45534,45538,45542,45546,45550,45558,45562,45578,45582,45590,45598],{"__ignoreMap":32},[37,44928,44929,44931],{"class":39,"line":40},[37,44930,30732],{"class":54},[37,44932,30735],{"class":50},[37,44934,44935,44937,44939,44941],{"class":39,"line":47},[37,44936,30732],{"class":54},[37,44938,31754],{"class":50},[37,44940,31722],{"class":54},[37,44942,31759],{"class":50},[37,44944,44945,44947,44949,44951],{"class":39,"line":104},[37,44946,31076],{"class":54},[37,44948,31737],{"class":50},[37,44950,30732],{"class":54},[37,44952,31742],{"class":50},[37,44954,44955],{"class":39,"line":113},[37,44956,34259],{"class":43},[37,44958,44959,44961,44963,44965],{"class":39,"line":189},[37,44960,31076],{"class":54},[37,44962,31707],{"class":50},[37,44964,30732],{"class":54},[37,44966,31712],{"class":50},[37,44968,44969,44971,44973,44975],{"class":39,"line":195},[37,44970,31076],{"class":54},[37,44972,32252],{"class":50},[37,44974,30732],{"class":54},[37,44976,44977],{"class":50}," GoogLeNet,Inception\n",[37,44979,44980],{"class":39,"line":201},[37,44981,2757],{"emptyLinePlaceholder":454},[37,44983,44984],{"class":39,"line":207},[37,44985,2757],{"emptyLinePlaceholder":454},[37,44987,44988],{"class":39,"line":213},[37,44989,34288],{"class":43},[37,44991,44992,44994,44996],{"class":39,"line":218},[37,44993,32285],{"class":54},[37,44995,34295],{"class":2320},[37,44997,32291],{"class":50},[37,44999,45000,45002,45004,45006,45008,45010,45012],{"class":39,"line":227},[37,45001,34302],{"class":50},[37,45003,55],{"class":54},[37,45005,31794],{"class":50},[37,45007,31797],{"class":159},[37,45009,55],{"class":54},[37,45011,31802],{"class":185},[37,45013,31805],{"class":50},[37,45015,45016,45018,45020,45022],{"class":39,"line":232},[37,45017,34319],{"class":159},[37,45019,55],{"class":54},[37,45021,34324],{"class":61},[37,45023,31805],{"class":50},[37,45025,45026,45028,45030,45032,45034,45036,45038],{"class":39,"line":238},[37,45027,34331],{"class":159},[37,45029,55],{"class":54},[37,45031,31832],{"class":50},[37,45033,160],{"class":159},[37,45035,55],{"class":54},[37,45037,35786],{"class":61},[37,45039,31842],{"class":50},[37,45041,45042,45044,45046,45048],{"class":39,"line":244},[37,45043,34348],{"class":159},[37,45045,55],{"class":54},[37,45047,31815],{"class":61},[37,45049,280],{"class":50},[37,45051,45052,45054,45056,45058,45060,45062],{"class":39,"line":250},[37,45053,34359],{"class":50},[37,45055,55],{"class":54},[37,45057,31872],{"class":50},[37,45059,31875],{"class":159},[37,45061,55],{"class":54},[37,45063,34370],{"class":50},[37,45065,45066],{"class":39,"line":256},[37,45067,34375],{"class":43},[37,45069,45070,45072,45074,45076],{"class":39,"line":261},[37,45071,34380],{"class":159},[37,45073,55],{"class":54},[37,45075,332],{"class":61},[37,45077,31805],{"class":50},[37,45079,45080,45082,45084,45086],{"class":39,"line":267},[37,45081,34391],{"class":159},[37,45083,55],{"class":54},[37,45085,31815],{"class":61},[37,45087,31805],{"class":50},[37,45089,45090,45092,45094,45096],{"class":39,"line":283},[37,45091,34402],{"class":159},[37,45093,55],{"class":54},[37,45095,135],{"class":61},[37,45097,280],{"class":50},[37,45099,45100,45102],{"class":39,"line":288},[37,45101,4440],{"class":54},[37,45103,34415],{"class":50},[37,45105,45106],{"class":39,"line":294},[37,45107,2757],{"emptyLinePlaceholder":454},[37,45109,45110],{"class":39,"line":300},[37,45111,34424],{"class":43},[37,45113,45114,45116,45118],{"class":39,"line":306},[37,45115,32285],{"class":54},[37,45117,34431],{"class":2320},[37,45119,34434],{"class":50},[37,45121,45122],{"class":39,"line":312},[37,45123,34439],{"class":43},[37,45125,45126,45128,45130,45132,45134,45136,45138],{"class":39,"line":317},[37,45127,31576],{"class":50},[37,45129,55],{"class":54},[37,45131,31583],{"class":185},[37,45133,2069],{"class":54},[37,45135,31588],{"class":50},[37,45137,2066],{"class":54},[37,45139,34456],{"class":185},[37,45141,45142,45144,45146],{"class":39,"line":323},[37,45143,31628],{"class":50},[37,45145,55],{"class":54},[37,45147,32627],{"class":50},[37,45149,45150],{"class":39,"line":337},[37,45151,2757],{"emptyLinePlaceholder":454},[37,45153,45154],{"class":39,"line":342},[37,45155,34473],{"class":43},[37,45157,45158,45160,45162],{"class":39,"line":347},[37,45159,34478],{"class":50},[37,45161,55],{"class":54},[37,45163,32680],{"class":61},[37,45165,45166,45168,45170],{"class":39,"line":352},[37,45167,34487],{"class":50},[37,45169,55],{"class":54},[37,45171,3435],{"class":61},[37,45173,45174],{"class":39,"line":357},[37,45175,2757],{"emptyLinePlaceholder":454},[37,45177,45178],{"class":39,"line":362},[37,45179,34500],{"class":43},[37,45181,45182],{"class":39,"line":367},[37,45183,34505],{"class":43},[37,45185,45186],{"class":39,"line":373},[37,45187,34510],{"class":43},[37,45189,45190,45192],{"class":39,"line":392},[37,45191,34515],{"class":54},[37,45193,33222],{"class":50},[37,45195,45196],{"class":39,"line":398},[37,45197,34522],{"class":43},[37,45199,45200,45202,45204,45206],{"class":39,"line":409},[37,45201,3753],{"class":54},[37,45203,34529],{"class":50},[37,45205,26385],{"class":54},[37,45207,34534],{"class":50},[37,45209,45210,45212,45214],{"class":39,"line":415},[37,45211,34539],{"class":50},[37,45213,55],{"class":54},[37,45215,34544],{"class":50},[37,45217,45218,45220,45222],{"class":39,"line":420},[37,45219,34549],{"class":50},[37,45221,55],{"class":54},[37,45223,34554],{"class":50},[37,45225,45226],{"class":39,"line":425},[37,45227,34559],{"class":43},[37,45229,45230],{"class":39,"line":431},[37,45231,33213],{"class":50},[37,45233,45234],{"class":39,"line":436},[37,45235,34568],{"class":43},[37,45237,45238,45240,45242],{"class":39,"line":442},[37,45239,32998],{"class":50},[37,45241,55],{"class":54},[37,45243,34577],{"class":50},[37,45245,45246],{"class":39,"line":8374},[37,45247,34582],{"class":43},[37,45249,45250,45252,45254,45256,45258,45260,45262],{"class":39,"line":8386},[37,45251,33015],{"class":50},[37,45253,55],{"class":54},[37,45255,33020],{"class":50},[37,45257,33023],{"class":159},[37,45259,55],{"class":54},[37,45261,332],{"class":61},[37,45263,280],{"class":50},[37,45265,45266],{"class":39,"line":8398},[37,45267,34603],{"class":43},[37,45269,45270],{"class":39,"line":10057},[37,45271,34608],{"class":43},[37,45273,45274],{"class":39,"line":10082},[37,45275,34613],{"class":43},[37,45277,45278,45280,45282,45284,45286],{"class":39,"line":10105},[37,45279,34618],{"class":50},[37,45281,9818],{"class":54},[37,45283,33125],{"class":50},[37,45285,3299],{"class":54},[37,45287,34627],{"class":50},[37,45289,45290],{"class":39,"line":10129},[37,45291,34632],{"class":43},[37,45293,45294,45296,45298,45300,45302],{"class":39,"line":10134},[37,45295,34637],{"class":50},[37,45297,9818],{"class":54},[37,45299,34642],{"class":50},[37,45301,135],{"class":61},[37,45303,280],{"class":50},[37,45305,45306],{"class":39,"line":10139},[37,45307,2757],{"emptyLinePlaceholder":454},[37,45309,45310],{"class":39,"line":10144},[37,45311,34655],{"class":43},[37,45313,45314,45316,45318,45320,45322],{"class":39,"line":10153},[37,45315,34660],{"class":50},[37,45317,55],{"class":54},[37,45319,34665],{"class":50},[37,45321,1094],{"class":54},[37,45323,34670],{"class":50},[37,45325,45326],{"class":39,"line":10158},[37,45327,34675],{"class":43},[37,45329,45330,45332,45334,45336],{"class":39,"line":10164},[37,45331,32789],{"class":61},[37,45333,165],{"class":50},[37,45335,34684],{"class":185},[37,45337,34687],{"class":50},[37,45339,45340],{"class":39,"line":10185},[37,45341,2757],{"emptyLinePlaceholder":454},[37,45343,45344],{"class":39,"line":10191},[37,45345,34696],{"class":43},[37,45347,45348,45350,45352,45354,45356],{"class":39,"line":10205},[37,45349,1907],{"class":54},[37,45351,31559],{"class":61},[37,45353,3299],{"class":54},[37,45355,31564],{"class":185},[37,45357,4089],{"class":50},[37,45359,45360],{"class":39,"line":10211},[37,45361,34713],{"class":43},[37,45363,45364,45366,45368],{"class":39,"line":10238},[37,45365,31628],{"class":50},[37,45367,55],{"class":54},[37,45369,44888],{"class":50},[37,45371,45372],{"class":39,"line":10247},[37,45373,34726],{"class":43},[37,45375,45376],{"class":39,"line":10253},[37,45377,34731],{"class":43},[37,45379,45380,45382,45384],{"class":39,"line":10261},[37,45381,34736],{"class":50},[37,45383,34739],{"class":185},[37,45385,175],{"class":50},[37,45387,45388],{"class":39,"line":10266},[37,45389,34746],{"class":43},[37,45391,45392,45394,45396],{"class":39,"line":16945},[37,45393,34359],{"class":50},[37,45395,55],{"class":54},[37,45397,34755],{"class":50},[37,45399,45400],{"class":39,"line":16951},[37,45401,34760],{"class":43},[37,45403,45404],{"class":39,"line":16974},[37,45405,34765],{"class":50},[37,45407,45408],{"class":39,"line":16980},[37,45409,2757],{"emptyLinePlaceholder":454},[37,45411,45412],{"class":39,"line":17003},[37,45413,34774],{"class":43},[37,45415,45416],{"class":39,"line":17017},[37,45417,34779],{"class":43},[37,45419,45420,45422,45424,45426,45428,45430,45432],{"class":39,"line":17037},[37,45421,31576],{"class":50},[37,45423,55],{"class":54},[37,45425,31583],{"class":185},[37,45427,2069],{"class":54},[37,45429,31588],{"class":50},[37,45431,2066],{"class":54},[37,45433,34456],{"class":185},[37,45435,45436,45438,45440],{"class":39,"line":17043},[37,45437,31628],{"class":50},[37,45439,55],{"class":54},[37,45441,32627],{"class":50},[37,45443,45444],{"class":39,"line":17054},[37,45445,34808],{"class":43},[37,45447,45448],{"class":39,"line":17077},[37,45449,34813],{"class":43},[37,45451,45452,45454,45456,45458,45460,45462,45464,45466,45468,45470,45472,45474,45476,45478,45480,45482,45484,45486,45488,45490,45492,45494,45496],{"class":39,"line":17099},[37,45453,34818],{"class":50},[37,45455,55],{"class":54},[37,45457,1399],{"class":50},[37,45459,34825],{"class":185},[37,45461,65],{"class":50},[37,45463,34830],{"class":185},[37,45465,65],{"class":50},[37,45467,34835],{"class":185},[37,45469,65],{"class":50},[37,45471,34840],{"class":185},[37,45473,65],{"class":50},[37,45475,34845],{"class":185},[37,45477,65],{"class":50},[37,45479,34850],{"class":185},[37,45481,65],{"class":50},[37,45483,34855],{"class":185},[37,45485,65],{"class":50},[37,45487,34860],{"class":185},[37,45489,65],{"class":50},[37,45491,34865],{"class":185},[37,45493,65],{"class":50},[37,45495,34870],{"class":185},[37,45497,389],{"class":50},[37,45499,45500,45502],{"class":39,"line":17104},[37,45501,34515],{"class":54},[37,45503,33222],{"class":50},[37,45505,45506],{"class":39,"line":17110},[37,45507,34883],{"class":43},[37,45509,45510,45512,45514,45516],{"class":39,"line":17124},[37,45511,3753],{"class":54},[37,45513,34890],{"class":50},[37,45515,26385],{"class":54},[37,45517,34534],{"class":50},[37,45519,45520,45522,45524],{"class":39,"line":17137},[37,45521,32948],{"class":50},[37,45523,55],{"class":54},[37,45525,32953],{"class":50},[37,45527,45528,45530,45532],{"class":39,"line":17142},[37,45529,32963],{"class":50},[37,45531,55],{"class":54},[37,45533,32968],{"class":50},[37,45535,45536],{"class":39,"line":17156},[37,45537,2757],{"emptyLinePlaceholder":454},[37,45539,45540],{"class":39,"line":17161},[37,45541,34919],{"class":43},[37,45543,45544],{"class":39,"line":17167},[37,45545,33213],{"class":50},[37,45547,45548],{"class":39,"line":17172},[37,45549,34928],{"class":43},[37,45551,45552,45554,45556],{"class":39,"line":17186},[37,45553,32998],{"class":50},[37,45555,55],{"class":54},[37,45557,33003],{"class":50},[37,45559,45560],{"class":39,"line":17191},[37,45561,34941],{"class":43},[37,45563,45564,45566,45568,45570,45572,45574,45576],{"class":39,"line":17196},[37,45565,33015],{"class":50},[37,45567,55],{"class":54},[37,45569,33020],{"class":50},[37,45571,33023],{"class":159},[37,45573,55],{"class":54},[37,45575,332],{"class":61},[37,45577,280],{"class":50},[37,45579,45580],{"class":39,"line":17210},[37,45581,34962],{"class":43},[37,45583,45584,45586,45588],{"class":39,"line":17222},[37,45585,34967],{"class":50},[37,45587,55],{"class":54},[37,45589,34972],{"class":50},[37,45591,45592,45594,45596],{"class":39,"line":17227},[37,45593,34977],{"class":50},[37,45595,55],{"class":54},[37,45597,34982],{"class":50},[37,45599,45600,45602,45604,45606,45608,45610,45612,45614],{"class":39,"line":17240},[37,45601,34987],{"class":61},[37,45603,165],{"class":50},[37,45605,34992],{"class":185},[37,45607,34995],{"class":50},[37,45609,34998],{"class":185},[37,45611,65],{"class":50},[37,45613,35003],{"class":185},[37,45615,35006],{"class":50},[498,45617,45619],{"id":45618},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45621,45622],{},"猫狗分类任务",[14,45624,45625],{},"划分数据集和验证集",[27,45627,45629],{"className":29,"code":45628,"language":31,"meta":32,"style":32},"# 创建脚本，用于划分数据集和验证集\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",[34,45630,45631,45636,45643,45648,45659,45666,45670,45680,45694,45703,45707,45712,45722,45742,45746,45751,45761,45772,45785,45789,45794,45803,45813,45824,45828,45833,45843,45847,45852,45857,45862,45867,45872,45876,45886,45913,45926,45938,45965,45970,45975,45989,45994,46006,46021,46036,46044,46048,46053,46059,46071,46084,46089,46094,46099,46149,46155,46159],{"__ignoreMap":32},[37,45632,45633],{"class":39,"line":40},[37,45634,45635],{"class":43},"# 创建脚本，用于划分数据集和验证集\n",[37,45637,45638,45640],{"class":39,"line":47},[37,45639,30732],{"class":54},[37,45641,45642],{"class":50}," os\n",[37,45644,45645],{"class":39,"line":104},[37,45646,45647],{"class":43},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[37,45649,45650,45652,45655,45657],{"class":39,"line":113},[37,45651,31076],{"class":54},[37,45653,45654],{"class":50}," shutil ",[37,45656,30732],{"class":54},[37,45658,32160],{"class":50},[37,45660,45661,45663],{"class":39,"line":189},[37,45662,30732],{"class":54},[37,45664,45665],{"class":50}," random\n",[37,45667,45668],{"class":39,"line":195},[37,45669,2757],{"emptyLinePlaceholder":454},[37,45671,45672,45674,45677],{"class":39,"line":201},[37,45673,32285],{"class":54},[37,45675,45676],{"class":2320}," mkfile",[37,45678,45679],{"class":50},"(file):\n",[37,45681,45682,45684,45686,45689,45692],{"class":39,"line":207},[37,45683,3451],{"class":54},[37,45685,39267],{"class":54},[37,45687,45688],{"class":50}," os.path.exists(",[37,45690,45691],{"class":159},"file",[37,45693,31125],{"class":50},[37,45695,45696,45699,45701],{"class":39,"line":213},[37,45697,45698],{"class":50},"        os.makedirs(",[37,45700,45691],{"class":159},[37,45702,280],{"class":50},[37,45704,45705],{"class":39,"line":218},[37,45706,2757],{"emptyLinePlaceholder":454},[37,45708,45709],{"class":39,"line":227},[37,45710,45711],{"class":43},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[37,45713,45714,45717,45719],{"class":39,"line":232},[37,45715,45716],{"class":50},"file_path",[37,45718,55],{"class":54},[37,45720,45721],{"class":185},"'data_cat_dog'\n",[37,45723,45724,45727,45729,45732,45734,45737,45739],{"class":39,"line":238},[37,45725,45726],{"class":50},"flower_class",[37,45728,55],{"class":54},[37,45730,45731],{"class":50},"[cla ",[37,45733,3375],{"class":54},[37,45735,45736],{"class":50}," cla ",[37,45738,26385],{"class":54},[37,45740,45741],{"class":50}," os.listdir(file_path)]\n",[37,45743,45744],{"class":39,"line":244},[37,45745,2757],{"emptyLinePlaceholder":454},[37,45747,45748],{"class":39,"line":250},[37,45749,45750],{"class":43},"# 创建训练集train文件夹\n",[37,45752,45753,45756,45759],{"class":39,"line":256},[37,45754,45755],{"class":50},"mkfile(",[37,45757,45758],{"class":185},"'data\u002Ftrain'",[37,45760,280],{"class":50},[37,45762,45763,45765,45767,45769],{"class":39,"line":261},[37,45764,3375],{"class":54},[37,45766,45736],{"class":50},[37,45768,26385],{"class":54},[37,45770,45771],{"class":50}," flower_class:\n",[37,45773,45774,45777,45780,45782],{"class":39,"line":267},[37,45775,45776],{"class":50},"    mkfile(",[37,45778,45779],{"class":185},"'data\u002Ftrain\u002F'",[37,45781,993],{"class":54},[37,45783,45784],{"class":50},"cla)\n",[37,45786,45787],{"class":39,"line":283},[37,45788,2757],{"emptyLinePlaceholder":454},[37,45790,45791],{"class":39,"line":288},[37,45792,45793],{"class":43},"# 创建验证集val文件夹\n",[37,45795,45796,45798,45801],{"class":39,"line":294},[37,45797,45755],{"class":50},[37,45799,45800],{"class":185},"'data\u002Ftest'",[37,45802,280],{"class":50},[37,45804,45805,45807,45809,45811],{"class":39,"line":300},[37,45806,3375],{"class":54},[37,45808,45736],{"class":50},[37,45810,26385],{"class":54},[37,45812,45771],{"class":50},[37,45814,45815,45817,45820,45822],{"class":39,"line":306},[37,45816,45776],{"class":50},[37,45818,45819],{"class":185},"'data\u002Ftest\u002F'",[37,45821,993],{"class":54},[37,45823,45784],{"class":50},[37,45825,45826],{"class":39,"line":312},[37,45827,2757],{"emptyLinePlaceholder":454},[37,45829,45830],{"class":39,"line":317},[37,45831,45832],{"class":43},"# 划分比例，训练集：测试集=9：1\n",[37,45834,45835,45838,45840],{"class":39,"line":323},[37,45836,45837],{"class":50},"split_rate",[37,45839,55],{"class":54},[37,45841,45842],{"class":61},"0.1\n",[37,45844,45845],{"class":39,"line":337},[37,45846,2757],{"emptyLinePlaceholder":454},[37,45848,45849],{"class":39,"line":342},[37,45850,45851],{"class":43},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[37,45853,45854],{"class":39,"line":347},[37,45855,45856],{"class":43},"# cla_path：当前类别的原始图片路径\n",[37,45858,45859],{"class":39,"line":352},[37,45860,45861],{"class":43},"# images：当前类别下所有图片的文件名列表\n",[37,45863,45864],{"class":39,"line":357},[37,45865,45866],{"class":43},"# num：该类别图片总数\n",[37,45868,45869],{"class":39,"line":362},[37,45870,45871],{"class":43},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[37,45873,45874],{"class":39,"line":367},[37,45875,2757],{"emptyLinePlaceholder":454},[37,45877,45878,45880,45882,45884],{"class":39,"line":373},[37,45879,3375],{"class":54},[37,45881,45736],{"class":50},[37,45883,26385],{"class":54},[37,45885,45771],{"class":50},[37,45887,45888,45891,45893,45896,45898,45901,45904,45906,45908,45910],{"class":39,"line":392},[37,45889,45890],{"class":50},"    cla_path ",[37,45892,55],{"class":54},[37,45894,45895],{"class":50}," file_path ",[37,45897,993],{"class":54},[37,45899,45900],{"class":185}," '\u002F'",[37,45902,45903],{"class":54}," +",[37,45905,45736],{"class":50},[37,45907,993],{"class":54},[37,45909,45900],{"class":185},[37,45911,45912],{"class":43},"  # 某一类别的子目录\n",[37,45914,45915,45918,45920,45923],{"class":39,"line":398},[37,45916,45917],{"class":50},"    images ",[37,45919,55],{"class":54},[37,45921,45922],{"class":50}," os.listdir(cla_path)  ",[37,45924,45925],{"class":43},"# iamges 列表存储了该目录下所有图像的名称\n",[37,45927,45928,45931,45933,45935],{"class":39,"line":409},[37,45929,45930],{"class":50},"    num ",[37,45932,55],{"class":54},[37,45934,7679],{"class":61},[37,45936,45937],{"class":50},"(images)\n",[37,45939,45940,45943,45945,45948,45950,45952,45954,45957,45959,45962],{"class":39,"line":415},[37,45941,45942],{"class":50},"    eval_index ",[37,45944,55],{"class":54},[37,45946,45947],{"class":50}," random.sample(images, ",[37,45949,1005],{"class":159},[37,45951,55],{"class":54},[37,45953,533],{"class":61},[37,45955,45956],{"class":50},"(num ",[37,45958,967],{"class":54},[37,45960,45961],{"class":50}," split_rate))  ",[37,45963,45964],{"class":43},"# 从images列表中随机抽取 k 个图像名称\n",[37,45966,45967],{"class":39,"line":420},[37,45968,45969],{"class":43},"    # 遍历该类别下的所有图片\n",[37,45971,45972],{"class":39,"line":425},[37,45973,45974],{"class":43},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[37,45976,45977,45979,45982,45984,45986],{"class":39,"line":431},[37,45978,3551],{"class":54},[37,45980,45981],{"class":50}," index, image ",[37,45983,26385],{"class":54},[37,45985,31944],{"class":61},[37,45987,45988],{"class":50},"(images):\n",[37,45990,45991],{"class":39,"line":436},[37,45992,45993],{"class":43},"        # eval_index 中保存验证集val的图像名称\n",[37,45995,45996,45998,46001,46003],{"class":39,"line":442},[37,45997,2854],{"class":54},[37,45999,46000],{"class":50}," image ",[37,46002,26385],{"class":54},[37,46004,46005],{"class":50}," eval_index:\n",[37,46007,46008,46011,46013,46016,46018],{"class":39,"line":8374},[37,46009,46010],{"class":50},"            image_path ",[37,46012,55],{"class":54},[37,46014,46015],{"class":50}," cla_path ",[37,46017,993],{"class":54},[37,46019,46020],{"class":50}," image\n",[37,46022,46023,46026,46028,46031,46033],{"class":39,"line":8386},[37,46024,46025],{"class":50},"            new_path ",[37,46027,55],{"class":54},[37,46029,46030],{"class":185}," 'data\u002Ftest\u002F'",[37,46032,45903],{"class":54},[37,46034,46035],{"class":50}," cla\n",[37,46037,46038,46041],{"class":39,"line":8398},[37,46039,46040],{"class":50},"            copy(image_path, new_path)  ",[37,46042,46043],{"class":43},"# 将选中的图像复制到新路径\n",[37,46045,46046],{"class":39,"line":10057},[37,46047,2757],{"emptyLinePlaceholder":454},[37,46049,46050],{"class":39,"line":10082},[37,46051,46052],{"class":43},"        # 其余的图像保存在训练集train中\n",[37,46054,46055,46057],{"class":39,"line":10105},[37,46056,2891],{"class":54},[37,46058,4089],{"class":50},[37,46060,46061,46063,46065,46067,46069],{"class":39,"line":10129},[37,46062,46010],{"class":50},[37,46064,55],{"class":54},[37,46066,46015],{"class":50},[37,46068,993],{"class":54},[37,46070,46020],{"class":50},[37,46072,46073,46075,46077,46080,46082],{"class":39,"line":10134},[37,46074,46025],{"class":50},[37,46076,55],{"class":54},[37,46078,46079],{"class":185}," 'data\u002Ftrain\u002F'",[37,46081,45903],{"class":54},[37,46083,46035],{"class":50},[37,46085,46086],{"class":39,"line":10139},[37,46087,46088],{"class":50},"            copy(image_path, new_path)\n",[37,46090,46091],{"class":39,"line":10144},[37,46092,46093],{"class":43},"            # 打印进度条信息\n",[37,46095,46096],{"class":39,"line":10153},[37,46097,46098],{"class":43},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[37,46100,46101,46103,46105,46107,46110,46112,46114,46117,46119,46121,46123,46126,46129,46131,46133,46136,46139,46141,46143,46146],{"class":39,"line":10158},[37,46102,32789],{"class":61},[37,46104,165],{"class":50},[37,46106,772],{"class":185},[37,46108,46109],{"class":61},"\\r",[37,46111,1399],{"class":185},[37,46113,32797],{"class":61},[37,46115,46116],{"class":185},"] processing [",[37,46118,32797],{"class":61},[37,46120,1094],{"class":185},[37,46122,32797],{"class":61},[37,46124,46125],{"class":185},"]\"",[37,46127,46128],{"class":50},".format(cla, index ",[37,46130,993],{"class":54},[37,46132,25460],{"class":61},[37,46134,46135],{"class":50},", num), ",[37,46137,46138],{"class":159},"end",[37,46140,55],{"class":54},[37,46142,8000],{"class":185},[37,46144,46145],{"class":50},")  ",[37,46147,46148],{"class":43},"# processing bar\n",[37,46150,46151,46153],{"class":39,"line":10164},[37,46152,31638],{"class":61},[37,46154,2333],{"class":50},[37,46156,46157],{"class":39,"line":10185},[37,46158,2757],{"emptyLinePlaceholder":454},[37,46160,46161,46163,46165,46168],{"class":39,"line":10191},[37,46162,30755],{"class":61},[37,46164,165],{"class":50},[37,46166,46167],{"class":185},"\"processing done!\"",[37,46169,280],{"class":50},[14,46171,46172],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22339,46174,46176],{"id":46175},"_242模型代码","2.4.2.模型代码",[14,46178,46179],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[27,46181,46183],{"className":29,"code":46182,"language":31,"meta":32,"style":32},"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",[34,46184,46185,46191,46201,46211,46215,46231,46239,46253,46263,46267,46297,46301,46335,46381,46385,46419,46465,46469,46473,46507,46537,46541,46549,46563,46585,46607,46625,46629,46643,46647,46651,46667,46671,46679,46693,46703,46747,46751,46779,46783,46793,46821,46825,46861,46865,46893,46897,46907,46939,46971,46999,47003,47013,47045,47077,47109,47141,47173,47201,47205,47215,47247,47279,47291,47295,47307,47311,47315,47327,47335,47355,47359,47363,47367,47371,47375,47379,47393,47401,47409,47421,47435,47443,47447,47455,47465,47475,47485,47495,47505,47511,47515,47519,47531,47551,47559],{"__ignoreMap":32},[37,46186,46187,46189],{"class":39,"line":40},[37,46188,30732],{"class":54},[37,46190,30735],{"class":50},[37,46192,46193,46195,46197,46199],{"class":39,"line":47},[37,46194,31076],{"class":54},[37,46196,31079],{"class":50},[37,46198,30732],{"class":54},[37,46200,31084],{"class":50},[37,46202,46203,46205,46207,46209],{"class":39,"line":104},[37,46204,31076],{"class":54},[37,46206,31096],{"class":50},[37,46208,30732],{"class":54},[37,46210,31101],{"class":50},[37,46212,46213],{"class":39,"line":113},[37,46214,2757],{"emptyLinePlaceholder":454},[37,46216,46217,46219,46221,46223,46225,46227,46229],{"class":39,"line":189},[37,46218,15035],{"class":54},[37,46220,41830],{"class":2320},[37,46222,165],{"class":50},[37,46224,31117],{"class":2320},[37,46226,1068],{"class":50},[37,46228,31122],{"class":2320},[37,46230,31125],{"class":50},[37,46232,46233,46235,46237],{"class":39,"line":195},[37,46234,31140],{"class":54},[37,46236,31143],{"class":61},[37,46238,41849],{"class":50},[37,46240,46241,46243,46245,46247,46249,46251],{"class":39,"line":201},[37,46242,31156],{"class":61},[37,46244,41856],{"class":50},[37,46246,31162],{"class":61},[37,46248,31165],{"class":50},[37,46250,31168],{"class":61},[37,46252,2333],{"class":50},[37,46254,46255,46257,46259,46261],{"class":39,"line":207},[37,46256,31184],{"class":61},[37,46258,35108],{"class":50},[37,46260,55],{"class":54},[37,46262,35113],{"class":50},[37,46264,46265],{"class":39,"line":213},[37,46266,41879],{"class":43},[37,46268,46269,46271,46273,46275,46277,46279,46281,46283,46285,46287,46289,46291,46293,46295],{"class":39,"line":218},[37,46270,31184],{"class":61},[37,46272,41886],{"class":50},[37,46274,55],{"class":54},[37,46276,31192],{"class":50},[37,46278,31195],{"class":159},[37,46280,55],{"class":54},[37,46282,41897],{"class":50},[37,46284,31204],{"class":159},[37,46286,55],{"class":54},[37,46288,41904],{"class":50},[37,46290,31213],{"class":159},[37,46292,55],{"class":54},[37,46294,332],{"class":61},[37,46296,280],{"class":50},[37,46298,46299],{"class":39,"line":227},[37,46300,41917],{"class":43},[37,46302,46303,46305,46307,46309,46311,46313,46315,46317,46319,46321,46323,46325,46327,46329,46331,46333],{"class":39,"line":232},[37,46304,31184],{"class":61},[37,46306,41924],{"class":50},[37,46308,55],{"class":54},[37,46310,31192],{"class":50},[37,46312,31195],{"class":159},[37,46314,55],{"class":54},[37,46316,41897],{"class":50},[37,46318,31204],{"class":159},[37,46320,55],{"class":54},[37,46322,41941],{"class":50},[37,46324,135],{"class":61},[37,46326,41946],{"class":50},[37,46328,31213],{"class":159},[37,46330,55],{"class":54},[37,46332,332],{"class":61},[37,46334,280],{"class":50},[37,46336,46337,46339,46341,46343,46345,46347,46349,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379],{"class":39,"line":238},[37,46338,31184],{"class":61},[37,46340,41961],{"class":50},[37,46342,55],{"class":54},[37,46344,31192],{"class":50},[37,46346,31195],{"class":159},[37,46348,55],{"class":54},[37,46350,41941],{"class":50},[37,46352,135],{"class":61},[37,46354,41946],{"class":50},[37,46356,31204],{"class":159},[37,46358,55],{"class":54},[37,46360,41941],{"class":50},[37,46362,332],{"class":61},[37,46364,41946],{"class":50},[37,46366,31213],{"class":159},[37,46368,55],{"class":54},[37,46370,62],{"class":61},[37,46372,65],{"class":50},[37,46374,31222],{"class":159},[37,46376,55],{"class":54},[37,46378,332],{"class":61},[37,46380,280],{"class":50},[37,46382,46383],{"class":39,"line":244},[37,46384,42006],{"class":43},[37,46386,46387,46389,46391,46393,46395,46397,46399,46401,46403,46405,46407,46409,46411,46413,46415,46417],{"class":39,"line":250},[37,46388,31184],{"class":61},[37,46390,42013],{"class":50},[37,46392,55],{"class":54},[37,46394,31192],{"class":50},[37,46396,31195],{"class":159},[37,46398,55],{"class":54},[37,46400,41897],{"class":50},[37,46402,31204],{"class":159},[37,46404,55],{"class":54},[37,46406,42030],{"class":50},[37,46408,135],{"class":61},[37,46410,41946],{"class":50},[37,46412,31213],{"class":159},[37,46414,55],{"class":54},[37,46416,332],{"class":61},[37,46418,280],{"class":50},[37,46420,46421,46423,46425,46427,46429,46431,46433,46435,46437,46439,46441,46443,46445,46447,46449,46451,46453,46455,46457,46459,46461,46463],{"class":39,"line":256},[37,46422,31184],{"class":61},[37,46424,42049],{"class":50},[37,46426,55],{"class":54},[37,46428,31192],{"class":50},[37,46430,31195],{"class":159},[37,46432,55],{"class":54},[37,46434,42030],{"class":50},[37,46436,135],{"class":61},[37,46438,41946],{"class":50},[37,46440,31204],{"class":159},[37,46442,55],{"class":54},[37,46444,42030],{"class":50},[37,46446,332],{"class":61},[37,46448,41946],{"class":50},[37,46450,31213],{"class":159},[37,46452,55],{"class":54},[37,46454,836],{"class":61},[37,46456,65],{"class":50},[37,46458,31222],{"class":159},[37,46460,55],{"class":54},[37,46462,602],{"class":61},[37,46464,280],{"class":50},[37,46466,46467],{"class":39,"line":261},[37,46468,42094],{"class":43},[37,46470,46471],{"class":39,"line":267},[37,46472,42099],{"class":43},[37,46474,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505],{"class":39,"line":283},[37,46476,31184],{"class":61},[37,46478,42106],{"class":50},[37,46480,55],{"class":54},[37,46482,35166],{"class":50},[37,46484,31213],{"class":159},[37,46486,55],{"class":54},[37,46488,62],{"class":61},[37,46490,65],{"class":50},[37,46492,31268],{"class":159},[37,46494,55],{"class":54},[37,46496,332],{"class":61},[37,46498,65],{"class":50},[37,46500,31222],{"class":159},[37,46502,55],{"class":54},[37,46504,332],{"class":61},[37,46506,280],{"class":50},[37,46508,46509,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535],{"class":39,"line":288},[37,46510,31184],{"class":61},[37,46512,42141],{"class":50},[37,46514,55],{"class":54},[37,46516,31192],{"class":50},[37,46518,31195],{"class":159},[37,46520,55],{"class":54},[37,46522,41897],{"class":50},[37,46524,31204],{"class":159},[37,46526,55],{"class":54},[37,46528,42158],{"class":50},[37,46530,31213],{"class":159},[37,46532,55],{"class":54},[37,46534,332],{"class":61},[37,46536,280],{"class":50},[37,46538,46539],{"class":39,"line":294},[37,46540,2757],{"emptyLinePlaceholder":454},[37,46542,46543,46545,46547],{"class":39,"line":300},[37,46544,31140],{"class":54},[37,46546,31432],{"class":2320},[37,46548,31435],{"class":50},[37,46550,46551,46553,46555,46557,46559,46561],{"class":39,"line":306},[37,46552,42183],{"class":50},[37,46554,55],{"class":54},[37,46556,31162],{"class":61},[37,46558,35521],{"class":50},[37,46560,31162],{"class":61},[37,46562,42194],{"class":50},[37,46564,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583],{"class":39,"line":312},[37,46566,7433],{"class":50},[37,46568,55],{"class":54},[37,46570,31162],{"class":61},[37,46572,35521],{"class":50},[37,46574,31162],{"class":61},[37,46576,42209],{"class":50},[37,46578,31162],{"class":61},[37,46580,35521],{"class":50},[37,46582,31162],{"class":61},[37,46584,42218],{"class":50},[37,46586,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605],{"class":39,"line":317},[37,46588,42223],{"class":50},[37,46590,55],{"class":54},[37,46592,31162],{"class":61},[37,46594,35521],{"class":50},[37,46596,31162],{"class":61},[37,46598,42234],{"class":50},[37,46600,31162],{"class":61},[37,46602,35521],{"class":50},[37,46604,31162],{"class":61},[37,46606,42243],{"class":50},[37,46608,46609,46611,46613,46615,46617,46619,46621,46623],{"class":39,"line":323},[37,46610,42248],{"class":50},[37,46612,55],{"class":54},[37,46614,31162],{"class":61},[37,46616,35521],{"class":50},[37,46618,31162],{"class":61},[37,46620,42259],{"class":50},[37,46622,31162],{"class":61},[37,46624,42264],{"class":50},[37,46626,46627],{"class":39,"line":337},[37,46628,42269],{"class":43},[37,46630,46631,46633,46635,46637,46639,46641],{"class":39,"line":342},[37,46632,15093],{"class":54},[37,46634,42276],{"class":50},[37,46636,33023],{"class":159},[37,46638,55],{"class":54},[37,46640,332],{"class":61},[37,46642,280],{"class":50},[37,46644,46645],{"class":39,"line":347},[37,46646,2757],{"emptyLinePlaceholder":454},[37,46648,46649],{"class":39,"line":352},[37,46650,42297],{"class":43},[37,46652,46653,46655,46657,46659,46661,46663,46665],{"class":39,"line":357},[37,46654,15035],{"class":54},[37,46656,42304],{"class":2320},[37,46658,165],{"class":50},[37,46660,31117],{"class":2320},[37,46662,1068],{"class":50},[37,46664,31122],{"class":2320},[37,46666,31125],{"class":50},[37,46668,46669],{"class":39,"line":362},[37,46670,42319],{"class":43},[37,46672,46673,46675,46677],{"class":39,"line":367},[37,46674,31140],{"class":54},[37,46676,31143],{"class":61},[37,46678,42328],{"class":50},[37,46680,46681,46683,46685,46687,46689,46691],{"class":39,"line":373},[37,46682,31156],{"class":61},[37,46684,42335],{"class":50},[37,46686,31162],{"class":61},[37,46688,31165],{"class":50},[37,46690,31168],{"class":61},[37,46692,2333],{"class":50},[37,46694,46695,46697,46699,46701],{"class":39,"line":392},[37,46696,31184],{"class":61},[37,46698,42350],{"class":50},[37,46700,55],{"class":54},[37,46702,38346],{"class":50},[37,46704,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745],{"class":39,"line":398},[37,46706,38351],{"class":50},[37,46708,31195],{"class":159},[37,46710,55],{"class":54},[37,46712,62],{"class":61},[37,46714,65],{"class":50},[37,46716,31204],{"class":159},[37,46718,55],{"class":54},[37,46720,726],{"class":61},[37,46722,65],{"class":50},[37,46724,31213],{"class":159},[37,46726,55],{"class":54},[37,46728,885],{"class":61},[37,46730,65],{"class":50},[37,46732,31268],{"class":159},[37,46734,55],{"class":54},[37,46736,602],{"class":61},[37,46738,65],{"class":50},[37,46740,31222],{"class":159},[37,46742,55],{"class":54},[37,46744,62],{"class":61},[37,46746,38384],{"class":50},[37,46748,46749],{"class":39,"line":409},[37,46750,38389],{"class":50},[37,46752,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777],{"class":39,"line":415},[37,46754,38434],{"class":50},[37,46756,31213],{"class":159},[37,46758,55],{"class":54},[37,46760,62],{"class":61},[37,46762,65],{"class":50},[37,46764,31268],{"class":159},[37,46766,55],{"class":54},[37,46768,602],{"class":61},[37,46770,65],{"class":50},[37,46772,31222],{"class":159},[37,46774,55],{"class":54},[37,46776,332],{"class":61},[37,46778,280],{"class":50},[37,46780,46781],{"class":39,"line":420},[37,46782,38463],{"class":50},[37,46784,46785,46787,46789,46791],{"class":39,"line":425},[37,46786,31184],{"class":61},[37,46788,42441],{"class":50},[37,46790,55],{"class":54},[37,46792,38346],{"class":50},[37,46794,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819],{"class":39,"line":431},[37,46796,38351],{"class":50},[37,46798,31195],{"class":159},[37,46800,55],{"class":54},[37,46802,726],{"class":61},[37,46804,65],{"class":50},[37,46806,31204],{"class":159},[37,46808,55],{"class":54},[37,46810,726],{"class":61},[37,46812,65],{"class":50},[37,46814,31213],{"class":159},[37,46816,55],{"class":54},[37,46818,332],{"class":61},[37,46820,38384],{"class":50},[37,46822,46823],{"class":39,"line":436},[37,46824,38389],{"class":50},[37,46826,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851,46853,46855,46857,46859],{"class":39,"line":442},[37,46828,38351],{"class":50},[37,46830,31195],{"class":159},[37,46832,55],{"class":54},[37,46834,726],{"class":61},[37,46836,65],{"class":50},[37,46838,31204],{"class":159},[37,46840,55],{"class":54},[37,46842,42496],{"class":61},[37,46844,65],{"class":50},[37,46846,31213],{"class":159},[37,46848,55],{"class":54},[37,46850,62],{"class":61},[37,46852,65],{"class":50},[37,46854,31222],{"class":159},[37,46856,55],{"class":54},[37,46858,332],{"class":61},[37,46860,38384],{"class":50},[37,46862,46863],{"class":39,"line":8374},[37,46864,38389],{"class":50},[37,46866,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889,46891],{"class":39,"line":8386},[37,46868,38434],{"class":50},[37,46870,31213],{"class":159},[37,46872,55],{"class":54},[37,46874,62],{"class":61},[37,46876,65],{"class":50},[37,46878,31268],{"class":159},[37,46880,55],{"class":54},[37,46882,602],{"class":61},[37,46884,65],{"class":50},[37,46886,31222],{"class":159},[37,46888,55],{"class":54},[37,46890,332],{"class":61},[37,46892,280],{"class":50},[37,46894,46895],{"class":39,"line":8398},[37,46896,38463],{"class":50},[37,46898,46899,46901,46903,46905],{"class":39,"line":10057},[37,46900,31184],{"class":61},[37,46902,42557],{"class":50},[37,46904,55],{"class":54},[37,46906,38346],{"class":50},[37,46908,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937],{"class":39,"line":10082},[37,46910,42566],{"class":50},[37,46912,42496],{"class":61},[37,46914,65],{"class":50},[37,46916,726],{"class":61},[37,46918,42575],{"class":50},[37,46920,732],{"class":61},[37,46922,65],{"class":50},[37,46924,32408],{"class":61},[37,46926,42584],{"class":50},[37,46928,1111],{"class":61},[37,46930,65],{"class":50},[37,46932,720],{"class":61},[37,46934,42593],{"class":50},[37,46936,720],{"class":61},[37,46938,38384],{"class":50},[37,46940,46941,46943,46945,46947,46949,46951,46953,46955,46957,46959,46961,46963,46965,46967,46969],{"class":39,"line":10105},[37,46942,42566],{"class":50},[37,46944,35207],{"class":61},[37,46946,65],{"class":50},[37,46948,32408],{"class":61},[37,46950,42575],{"class":50},[37,46952,32408],{"class":61},[37,46954,65],{"class":50},[37,46956,42496],{"class":61},[37,46958,42584],{"class":50},[37,46960,720],{"class":61},[37,46962,65],{"class":50},[37,46964,732],{"class":61},[37,46966,42593],{"class":50},[37,46968,726],{"class":61},[37,46970,38384],{"class":50},[37,46972,46973,46975,46977,46979,46981,46983,46985,46987,46989,46991,46993,46995,46997],{"class":39,"line":10129},[37,46974,38434],{"class":50},[37,46976,31213],{"class":159},[37,46978,55],{"class":54},[37,46980,62],{"class":61},[37,46982,65],{"class":50},[37,46984,31268],{"class":159},[37,46986,55],{"class":54},[37,46988,602],{"class":61},[37,46990,65],{"class":50},[37,46992,31222],{"class":159},[37,46994,55],{"class":54},[37,46996,332],{"class":61},[37,46998,280],{"class":50},[37,47000,47001],{"class":39,"line":10134},[37,47002,38463],{"class":50},[37,47004,47005,47007,47009,47011],{"class":39,"line":10139},[37,47006,31184],{"class":61},[37,47008,42668],{"class":50},[37,47010,55],{"class":54},[37,47012,38346],{"class":50},[37,47014,47015,47017,47019,47021,47023,47025,47027,47029,47031,47033,47035,47037,47039,47041,47043],{"class":39,"line":10144},[37,47016,42566],{"class":50},[37,47018,42679],{"class":61},[37,47020,65],{"class":50},[37,47022,42496],{"class":61},[37,47024,42575],{"class":50},[37,47026,732],{"class":61},[37,47028,65],{"class":50},[37,47030,42692],{"class":61},[37,47032,42584],{"class":50},[37,47034,1111],{"class":61},[37,47036,65],{"class":50},[37,47038,1117],{"class":61},[37,47040,42593],{"class":50},[37,47042,726],{"class":61},[37,47044,38384],{"class":50},[37,47046,47047,47049,47051,47053,47055,47057,47059,47061,47063,47065,47067,47069,47071,47073,47075],{"class":39,"line":10153},[37,47048,42566],{"class":50},[37,47050,38794],{"class":61},[37,47052,65],{"class":50},[37,47054,21389],{"class":61},[37,47056,42575],{"class":50},[37,47058,1128],{"class":61},[37,47060,65],{"class":50},[37,47062,31839],{"class":61},[37,47064,42584],{"class":50},[37,47066,1309],{"class":61},[37,47068,65],{"class":50},[37,47070,726],{"class":61},[37,47072,42593],{"class":50},[37,47074,726],{"class":61},[37,47076,38384],{"class":50},[37,47078,47079,47081,47083,47085,47087,47089,47091,47093,47095,47097,47099,47101,47103,47105,47107],{"class":39,"line":10158},[37,47080,42566],{"class":50},[37,47082,38794],{"class":61},[37,47084,65],{"class":50},[37,47086,32408],{"class":61},[37,47088,42575],{"class":50},[37,47090,32408],{"class":61},[37,47092,65],{"class":50},[37,47094,35207],{"class":61},[37,47096,42584],{"class":50},[37,47098,1309],{"class":61},[37,47100,65],{"class":50},[37,47102,726],{"class":61},[37,47104,42593],{"class":50},[37,47106,726],{"class":61},[37,47108,38384],{"class":50},[37,47110,47111,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133,47135,47137,47139],{"class":39,"line":10164},[37,47112,42566],{"class":50},[37,47114,38794],{"class":61},[37,47116,65],{"class":50},[37,47118,1128],{"class":61},[37,47120,42575],{"class":50},[37,47122,32408],{"class":61},[37,47124,65],{"class":50},[37,47126,42789],{"class":61},[37,47128,42584],{"class":50},[37,47130,720],{"class":61},[37,47132,65],{"class":50},[37,47134,726],{"class":61},[37,47136,42593],{"class":50},[37,47138,726],{"class":61},[37,47140,38384],{"class":50},[37,47142,47143,47145,47147,47149,47151,47153,47155,47157,47159,47161,47163,47165,47167,47169,47171],{"class":39,"line":10185},[37,47144,42566],{"class":50},[37,47146,42810],{"class":61},[37,47148,65],{"class":50},[37,47150,35207],{"class":61},[37,47152,42575],{"class":50},[37,47154,21389],{"class":61},[37,47156,65],{"class":50},[37,47158,42823],{"class":61},[37,47160,42584],{"class":50},[37,47162,720],{"class":61},[37,47164,65],{"class":50},[37,47166,32408],{"class":61},[37,47168,42593],{"class":50},[37,47170,32408],{"class":61},[37,47172,38384],{"class":50},[37,47174,47175,47177,47179,47181,47183,47185,47187,47189,47191,47193,47195,47197,47199],{"class":39,"line":10191},[37,47176,38434],{"class":50},[37,47178,31213],{"class":159},[37,47180,55],{"class":54},[37,47182,62],{"class":61},[37,47184,65],{"class":50},[37,47186,31268],{"class":159},[37,47188,55],{"class":54},[37,47190,602],{"class":61},[37,47192,65],{"class":50},[37,47194,31222],{"class":159},[37,47196,55],{"class":54},[37,47198,332],{"class":61},[37,47200,280],{"class":50},[37,47202,47203],{"class":39,"line":10205},[37,47204,38463],{"class":50},[37,47206,47207,47209,47211,47213],{"class":39,"line":10211},[37,47208,31184],{"class":61},[37,47210,42876],{"class":50},[37,47212,55],{"class":54},[37,47214,38346],{"class":50},[37,47216,47217,47219,47221,47223,47225,47227,47229,47231,47233,47235,47237,47239,47241,47243,47245],{"class":39,"line":10238},[37,47218,42566],{"class":50},[37,47220,42887],{"class":61},[37,47222,65],{"class":50},[37,47224,35207],{"class":61},[37,47226,42575],{"class":50},[37,47228,21389],{"class":61},[37,47230,65],{"class":50},[37,47232,42823],{"class":61},[37,47234,42584],{"class":50},[37,47236,720],{"class":61},[37,47238,65],{"class":50},[37,47240,32408],{"class":61},[37,47242,42593],{"class":50},[37,47244,32408],{"class":61},[37,47246,38384],{"class":50},[37,47248,47249,47251,47253,47255,47257,47259,47261,47263,47265,47267,47269,47271,47273,47275,47277],{"class":39,"line":10247},[37,47250,42566],{"class":50},[37,47252,42887],{"class":61},[37,47254,65],{"class":50},[37,47256,35277],{"class":61},[37,47258,42575],{"class":50},[37,47260,42496],{"class":61},[37,47262,65],{"class":50},[37,47264,35277],{"class":61},[37,47266,42584],{"class":50},[37,47268,1117],{"class":61},[37,47270,65],{"class":50},[37,47272,32408],{"class":61},[37,47274,42593],{"class":50},[37,47276,32408],{"class":61},[37,47278,38384],{"class":50},[37,47280,47281,47283,47285,47287,47289],{"class":39,"line":10253},[37,47282,42950],{"class":50},[37,47284,332],{"class":61},[37,47286,65],{"class":50},[37,47288,332],{"class":61},[37,47290,42959],{"class":50},[37,47292,47293],{"class":39,"line":10261},[37,47294,39127],{"class":50},[37,47296,47297,47299,47301,47303,47305],{"class":39,"line":10266},[37,47298,39132],{"class":50},[37,47300,42970],{"class":61},[37,47302,65],{"class":50},[37,47304,602],{"class":61},[37,47306,280],{"class":50},[37,47308,47309],{"class":39,"line":16945},[37,47310,38463],{"class":50},[37,47312,47313],{"class":39,"line":16951},[37,47314,42985],{"class":43},[37,47316,47317,47319,47321,47323,47325],{"class":39,"line":16974},[37,47318,3753],{"class":54},[37,47320,39205],{"class":50},[37,47322,26385],{"class":54},[37,47324,39210],{"class":61},[37,47326,39213],{"class":50},[37,47328,47329,47331,47333],{"class":39,"line":16980},[37,47330,4992],{"class":54},[37,47332,39225],{"class":61},[37,47334,39228],{"class":50},[37,47336,47337,47339,47341,47343,47345,47347,47349,47351,47353],{"class":39,"line":17003},[37,47338,39238],{"class":50},[37,47340,43012],{"class":159},[37,47342,55],{"class":54},[37,47344,43017],{"class":185},[37,47346,65],{"class":50},[37,47348,39241],{"class":159},[37,47350,55],{"class":54},[37,47352,39246],{"class":185},[37,47354,280],{"class":50},[37,47356,47357],{"class":39,"line":17017},[37,47358,43032],{"class":43},[37,47360,47361],{"class":39,"line":17037},[37,47362,43037],{"class":43},[37,47364,47365],{"class":39,"line":17043},[37,47366,43042],{"class":43},[37,47368,47369],{"class":39,"line":17054},[37,47370,43047],{"class":43},[37,47372,47373],{"class":39,"line":17077},[37,47374,43052],{"class":43},[37,47376,47377],{"class":39,"line":17099},[37,47378,43057],{"class":43},[37,47380,47381,47383,47385,47387,47389,47391],{"class":39,"line":17104},[37,47382,39258],{"class":54},[37,47384,39261],{"class":50},[37,47386,39264],{"class":54},[37,47388,39267],{"class":54},[37,47390,39270],{"class":61},[37,47392,4089],{"class":50},[37,47394,47395,47397,47399],{"class":39,"line":17110},[37,47396,39282],{"class":50},[37,47398,135],{"class":61},[37,47400,280],{"class":50},[37,47402,47403,47405,47407],{"class":39,"line":17124},[37,47404,43084],{"class":54},[37,47406,39225],{"class":61},[37,47408,39301],{"class":50},[37,47410,47411,47413,47415,47417,47419],{"class":39,"line":17137},[37,47412,43093],{"class":50},[37,47414,135],{"class":61},[37,47416,65],{"class":50},[37,47418,39323],{"class":61},[37,47420,280],{"class":50},[37,47422,47423,47425,47427,47429,47431,47433],{"class":39,"line":17142},[37,47424,43106],{"class":54},[37,47426,39261],{"class":50},[37,47428,39264],{"class":54},[37,47430,39267],{"class":54},[37,47432,39270],{"class":61},[37,47434,4089],{"class":50},[37,47436,47437,47439,47441],{"class":39,"line":17156},[37,47438,43121],{"class":50},[37,47440,135],{"class":61},[37,47442,280],{"class":50},[37,47444,47445],{"class":39,"line":17161},[37,47446,35502],{"class":43},[37,47448,47449,47451,47453],{"class":39,"line":17167},[37,47450,31140],{"class":54},[37,47452,31432],{"class":2320},[37,47454,31435],{"class":50},[37,47456,47457,47459,47461,47463],{"class":39,"line":17172},[37,47458,31440],{"class":50},[37,47460,55],{"class":54},[37,47462,31162],{"class":61},[37,47464,43148],{"class":50},[37,47466,47467,47469,47471,47473],{"class":39,"line":17186},[37,47468,31440],{"class":50},[37,47470,55],{"class":54},[37,47472,31162],{"class":61},[37,47474,43159],{"class":50},[37,47476,47477,47479,47481,47483],{"class":39,"line":17191},[37,47478,31440],{"class":50},[37,47480,55],{"class":54},[37,47482,31162],{"class":61},[37,47484,43170],{"class":50},[37,47486,47487,47489,47491,47493],{"class":39,"line":17196},[37,47488,31440],{"class":50},[37,47490,55],{"class":54},[37,47492,31162],{"class":61},[37,47494,43181],{"class":50},[37,47496,47497,47499,47501,47503],{"class":39,"line":17210},[37,47498,31440],{"class":50},[37,47500,55],{"class":54},[37,47502,31162],{"class":61},[37,47504,43192],{"class":50},[37,47506,47507,47509],{"class":39,"line":17222},[37,47508,15093],{"class":54},[37,47510,31548],{"class":50},[37,47512,47513],{"class":39,"line":17227},[37,47514,2757],{"emptyLinePlaceholder":454},[37,47516,47517],{"class":39,"line":17240},[37,47518,43207],{"class":43},[37,47520,47521,47523,47525,47527,47529],{"class":39,"line":17245},[37,47522,1907],{"class":54},[37,47524,31559],{"class":61},[37,47526,3299],{"class":54},[37,47528,31564],{"class":185},[37,47530,4089],{"class":50},[37,47532,47533,47535,47537,47539,47541,47543,47545,47547,47549],{"class":39,"line":17250},[37,47534,31576],{"class":50},[37,47536,55],{"class":54},[37,47538,30791],{"class":50},[37,47540,31583],{"class":185},[37,47542,2069],{"class":54},[37,47544,31588],{"class":50},[37,47546,2066],{"class":54},[37,47548,30816],{"class":185},[37,47550,280],{"class":50},[37,47552,47553,47555,47557],{"class":39,"line":17255},[37,47554,31628],{"class":50},[37,47556,55],{"class":54},[37,47558,43248],{"class":50},[37,47560,47561,47563,47565,47567,47569,47571,47573,47575],{"class":39,"line":17268},[37,47562,31638],{"class":61},[37,47564,31641],{"class":50},[37,47566,332],{"class":61},[37,47568,65],{"class":50},[37,47570,31839],{"class":61},[37,47572,65],{"class":50},[37,47574,31839],{"class":61},[37,47576,31654],{"class":50},[22339,47578,47580],{"id":47579},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47582,47583],{},"计算图片的均值与方差，用于训练中归一化处理操作",[27,47585,47587],{"className":29,"code":47586,"language":31,"meta":32,"style":32},"# 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",[34,47588,47589,47594,47607,47612,47618,47623,47633,47637,47642,47652,47656,47661,47671,47688,47692,47697,47709,47721,47752,47761,47771,47781,47785,47790,47805,47809,47814,47819,47824,47834,47839,47863,47867,47872,47887,47891,47904,47908,47913,47918,47923,47928,47933,47943,47953,47976,47984,47992,48000,48004,48016,48020,48025,48029,48033,48040,48060,48084,48091,48105,48110,48115,48119,48133,48137,48149],{"__ignoreMap":32},[37,47590,47591],{"class":39,"line":40},[37,47592,47593],{"class":43},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[37,47595,47596,47598,47601,47604],{"class":39,"line":47},[37,47597,31076],{"class":54},[37,47599,47600],{"class":61}," PIL",[37,47602,47603],{"class":54}," import",[37,47605,47606],{"class":50}," Image\n",[37,47608,47609],{"class":39,"line":104},[37,47610,47611],{"class":43},"# os 用来处理文件夹和文件路径\n",[37,47613,47614,47616],{"class":39,"line":113},[37,47615,30732],{"class":54},[37,47617,45642],{"class":50},[37,47619,47620],{"class":39,"line":189},[37,47621,47622],{"class":43},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[37,47624,47625,47627,47629,47631],{"class":39,"line":195},[37,47626,30732],{"class":54},[37,47628,31719],{"class":50},[37,47630,31722],{"class":54},[37,47632,31725],{"class":50},[37,47634,47635],{"class":39,"line":201},[37,47636,2757],{"emptyLinePlaceholder":454},[37,47638,47639],{"class":39,"line":207},[37,47640,47641],{"class":43},"# 文件夹路径，包含所有图片文件\n",[37,47643,47644,47647,47649],{"class":39,"line":213},[37,47645,47646],{"class":50},"folder_path ",[37,47648,55],{"class":54},[37,47650,47651],{"class":185}," 'data_cat_dog'\n",[37,47653,47654],{"class":39,"line":218},[37,47655,2757],{"emptyLinePlaceholder":454},[37,47657,47658],{"class":39,"line":227},[37,47659,47660],{"class":43},"# 初始化累积变量\n",[37,47662,47663,47666,47668],{"class":39,"line":232},[37,47664,47665],{"class":50},"total_pixels ",[37,47667,55],{"class":54},[37,47669,47670],{"class":61}," 0\n",[37,47672,47673,47676,47678,47681,47683,47685],{"class":39,"line":238},[37,47674,47675],{"class":50},"sum_normalized_pixel_values ",[37,47677,55],{"class":54},[37,47679,47680],{"class":50}," np.zeros(",[37,47682,62],{"class":61},[37,47684,46145],{"class":50},[37,47686,47687],{"class":43},"# 如果是RGB图像，需要三个通道的均值和方差\n",[37,47689,47690],{"class":39,"line":244},[37,47691,2757],{"emptyLinePlaceholder":454},[37,47693,47694],{"class":39,"line":250},[37,47695,47696],{"class":43},"# 遍历文件夹中的图片文件\n",[37,47698,47699,47701,47704,47706],{"class":39,"line":256},[37,47700,3375],{"class":54},[37,47702,47703],{"class":50}," root, dirs, files ",[37,47705,26385],{"class":54},[37,47707,47708],{"class":50}," os.walk(folder_path):\n",[37,47710,47711,47713,47716,47718],{"class":39,"line":261},[37,47712,3551],{"class":54},[37,47714,47715],{"class":50}," filename ",[37,47717,26385],{"class":54},[37,47719,47720],{"class":50}," files:\n",[37,47722,47723,47725,47728,47731,47733,47736,47738,47741,47743,47746,47749],{"class":39,"line":267},[37,47724,2854],{"class":54},[37,47726,47727],{"class":50}," filename.endswith((",[37,47729,47730],{"class":185},"'.jpg'",[37,47732,12776],{"class":50},[37,47734,47735],{"class":185},"'.jpeg'",[37,47737,12776],{"class":50},[37,47739,47740],{"class":185},"'.png'",[37,47742,12776],{"class":50},[37,47744,47745],{"class":185},"'.bmp'",[37,47747,47748],{"class":50},")):  ",[37,47750,47751],{"class":43},"# 可根据实际情况添加其他格式\n",[37,47753,47754,47756,47758],{"class":39,"line":283},[37,47755,46010],{"class":50},[37,47757,55],{"class":54},[37,47759,47760],{"class":50}," os.path.join(root, filename)\n",[37,47762,47763,47766,47768],{"class":39,"line":288},[37,47764,47765],{"class":50},"            image ",[37,47767,55],{"class":54},[37,47769,47770],{"class":50}," Image.open(image_path)\n",[37,47772,47773,47776,47778],{"class":39,"line":294},[37,47774,47775],{"class":50},"            image_array ",[37,47777,55],{"class":54},[37,47779,47780],{"class":50}," np.array(image)\n",[37,47782,47783],{"class":39,"line":300},[37,47784,2757],{"emptyLinePlaceholder":454},[37,47786,47787],{"class":39,"line":306},[37,47788,47789],{"class":43},"            # 归一化像素值到0-1之间\n",[37,47791,47792,47795,47797,47800,47802],{"class":39,"line":312},[37,47793,47794],{"class":50},"            normalized_image_array ",[37,47796,55],{"class":54},[37,47798,47799],{"class":50}," image_array ",[37,47801,1094],{"class":54},[37,47803,47804],{"class":61}," 255.0\n",[37,47806,47807],{"class":39,"line":317},[37,47808,2757],{"emptyLinePlaceholder":454},[37,47810,47811],{"class":39,"line":323},[37,47812,47813],{"class":43},"            # print(image_path)\n",[37,47815,47816],{"class":39,"line":337},[37,47817,47818],{"class":43},"            # print(normalized_image_array.shape)\n",[37,47820,47821],{"class":39,"line":342},[37,47822,47823],{"class":43},"            # 累积归一化后的像素值和像素数量\n",[37,47825,47826,47829,47831],{"class":39,"line":347},[37,47827,47828],{"class":50},"            total_pixels ",[37,47830,9818],{"class":54},[37,47832,47833],{"class":50}," normalized_image_array.size\n",[37,47835,47836],{"class":39,"line":352},[37,47837,47838],{"class":43},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[37,47840,47841,47844,47846,47849,47851,47853,47855,47857,47859,47861],{"class":39,"line":357},[37,47842,47843],{"class":50},"            sum_normalized_pixel_values ",[37,47845,9818],{"class":54},[37,47847,47848],{"class":50}," np.sum(normalized_image_array, ",[37,47850,273],{"class":159},[37,47852,55],{"class":54},[37,47854,165],{"class":50},[37,47856,135],{"class":61},[37,47858,12776],{"class":50},[37,47860,332],{"class":61},[37,47862,175],{"class":50},[37,47864,47865],{"class":39,"line":362},[37,47866,2757],{"emptyLinePlaceholder":454},[37,47868,47869],{"class":39,"line":367},[37,47870,47871],{"class":43},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[37,47873,47874,47877,47879,47882,47884],{"class":39,"line":373},[37,47875,47876],{"class":50},"mean ",[37,47878,55],{"class":54},[37,47880,47881],{"class":50}," sum_normalized_pixel_values ",[37,47883,1094],{"class":54},[37,47885,47886],{"class":50}," total_pixels\n",[37,47888,47889],{"class":39,"line":392},[37,47890,2757],{"emptyLinePlaceholder":454},[37,47892,47893,47896,47898,47900,47902],{"class":39,"line":398},[37,47894,47895],{"class":50},"sum_squared_diff ",[37,47897,55],{"class":54},[37,47899,47680],{"class":50},[37,47901,62],{"class":61},[37,47903,280],{"class":50},[37,47905,47906],{"class":39,"line":409},[37,47907,2757],{"emptyLinePlaceholder":454},[37,47909,47910],{"class":39,"line":415},[37,47911,47912],{"class":43},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[37,47914,47915],{"class":39,"line":420},[37,47916,47917],{"class":43},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[37,47919,47920],{"class":39,"line":425},[37,47921,47922],{"class":43},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[37,47924,47925],{"class":39,"line":431},[37,47926,47927],{"class":43},"# Image.open(image_path)：打开图片\n",[37,47929,47930],{"class":39,"line":436},[37,47931,47932],{"class":43},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[37,47934,47935,47937,47939,47941],{"class":39,"line":442},[37,47936,3375],{"class":54},[37,47938,47703],{"class":50},[37,47940,26385],{"class":54},[37,47942,47708],{"class":50},[37,47944,47945,47947,47949,47951],{"class":39,"line":8374},[37,47946,3551],{"class":54},[37,47948,47715],{"class":50},[37,47950,26385],{"class":54},[37,47952,47720],{"class":50},[37,47954,47955,47957,47959,47961,47963,47965,47967,47969,47971,47973],{"class":39,"line":8386},[37,47956,2854],{"class":54},[37,47958,47727],{"class":50},[37,47960,47730],{"class":185},[37,47962,12776],{"class":50},[37,47964,47735],{"class":185},[37,47966,12776],{"class":50},[37,47968,47740],{"class":185},[37,47970,12776],{"class":50},[37,47972,47745],{"class":185},[37,47974,47975],{"class":50},")):\n",[37,47977,47978,47980,47982],{"class":39,"line":8398},[37,47979,46010],{"class":50},[37,47981,55],{"class":54},[37,47983,47760],{"class":50},[37,47985,47986,47988,47990],{"class":39,"line":10057},[37,47987,47765],{"class":50},[37,47989,55],{"class":54},[37,47991,47770],{"class":50},[37,47993,47994,47996,47998],{"class":39,"line":10082},[37,47995,47775],{"class":50},[37,47997,55],{"class":54},[37,47999,47780],{"class":50},[37,48001,48002],{"class":39,"line":10105},[37,48003,47789],{"class":43},[37,48005,48006,48008,48010,48012,48014],{"class":39,"line":10129},[37,48007,47794],{"class":50},[37,48009,55],{"class":54},[37,48011,47799],{"class":50},[37,48013,1094],{"class":54},[37,48015,47804],{"class":61},[37,48017,48018],{"class":39,"line":10134},[37,48019,47818],{"class":43},[37,48021,48022],{"class":39,"line":10139},[37,48023,48024],{"class":43},"            # print(mean.shape)\n",[37,48026,48027],{"class":39,"line":10144},[37,48028,47813],{"class":43},[37,48030,48031],{"class":39,"line":10153},[37,48032,2757],{"emptyLinePlaceholder":454},[37,48034,48035,48038],{"class":39,"line":10158},[37,48036,48037],{"class":54},"            try",[37,48039,4089],{"class":50},[37,48041,48042,48045,48047,48050,48052,48055,48057],{"class":39,"line":10164},[37,48043,48044],{"class":50},"                diff ",[37,48046,55],{"class":54},[37,48048,48049],{"class":50}," (normalized_image_array ",[37,48051,384],{"class":54},[37,48053,48054],{"class":50}," mean) ",[37,48056,11002],{"class":54},[37,48058,48059],{"class":61}," 2\n",[37,48061,48062,48065,48067,48070,48072,48074,48076,48078,48080,48082],{"class":39,"line":10185},[37,48063,48064],{"class":50},"                sum_squared_diff ",[37,48066,9818],{"class":54},[37,48068,48069],{"class":50}," np.sum(diff, ",[37,48071,273],{"class":159},[37,48073,55],{"class":54},[37,48075,165],{"class":50},[37,48077,135],{"class":61},[37,48079,12776],{"class":50},[37,48081,332],{"class":61},[37,48083,175],{"class":50},[37,48085,48086,48089],{"class":39,"line":10191},[37,48087,48088],{"class":54},"            except",[37,48090,4089],{"class":50},[37,48092,48093,48096,48098,48100,48103],{"class":39,"line":10205},[37,48094,48095],{"class":61},"                print",[37,48097,165],{"class":50},[37,48099,579],{"class":54},[37,48101,48102],{"class":185},"\"捕获到自定义异常\"",[37,48104,280],{"class":50},[37,48106,48107],{"class":39,"line":10211},[37,48108,48109],{"class":43},"            # diff = (normalized_image_array - mean) ** 2\n",[37,48111,48112],{"class":39,"line":10238},[37,48113,48114],{"class":43},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[37,48116,48117],{"class":39,"line":10247},[37,48118,2757],{"emptyLinePlaceholder":454},[37,48120,48121,48124,48126,48129,48131],{"class":39,"line":10253},[37,48122,48123],{"class":50},"variance ",[37,48125,55],{"class":54},[37,48127,48128],{"class":50}," sum_squared_diff ",[37,48130,1094],{"class":54},[37,48132,47886],{"class":50},[37,48134,48135],{"class":39,"line":10261},[37,48136,2757],{"emptyLinePlaceholder":454},[37,48138,48139,48141,48143,48146],{"class":39,"line":10266},[37,48140,30755],{"class":61},[37,48142,165],{"class":50},[37,48144,48145],{"class":185},"\"Mean:\"",[37,48147,48148],{"class":50},", mean)\n",[37,48150,48151,48153,48155,48158],{"class":39,"line":16945},[37,48152,30755],{"class":61},[37,48154,165],{"class":50},[37,48156,48157],{"class":185},"\"Variance:\"",[37,48159,48160],{"class":50},", variance)\n",[27,48162,48164],{"className":29,"code":48163,"language":31,"meta":32,"style":32},"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",[34,48165,48166,48172,48178,48188,48194,48204,48218,48228,48238,48248,48252,48262,48272,48276,48280,48288,48293,48298,48317,48321,48326,48331,48336,48341,48382,48387,48397,48402,48415,48420,48425,48430,48435,48440,48444,48449,48454,48476,48480,48512,48526,48536,48546,48550,48560,48574,48584,48594,48604,48610,48614,48618,48622,48626,48630,48638,48658,48662,48666,48670,48674,48690,48694,48698,48706,48710,48714,48722,48726,48730,48734,48742,48746,48750,48754,48762,48766,48774,48778,48786,48790,48798,48802,48810,48814,48818,48826,48830,48834,48846,48870,48884,48888,48892,48896,48904,48908,48916,48920,48928,48932,48940,48944,48952,48956,48964,48968,48980,48984,48992,48996,49004,49008,49012,49016,49020,49028,49032,49048,49052,49060,49064,49068,49072,49076,49080,49084,49088,49104,49108,49120,49124,49136,49140,49152,49156,49164,49168,49176,49180,49184,49188,49194,49198,49206,49210,49226,49230,49238,49242,49258,49270,49274,49286,49290,49294,49302,49306,49310,49318,49322,49330,49334,49342,49346,49350,49392,49434,49438,49442,49458,49462,49478,49482,49486,49494,49498,49502,49514,49552,49556,49560,49568,49572,49586,49596,49602,49608,49614,49620,49624,49628,49634,49638,49642,49650,49654,49672,49676,49680,49684,49700,49704,49708,49712,49716,49720,49740,49760,49764,49768,49772,49780,49788,49792,49808,49828,49848,49852,49857,49866,49875,49880,49885,49890,49903,49908,49917,49926,49943],{"__ignoreMap":32},[37,48167,48168,48170],{"class":39,"line":40},[37,48169,30732],{"class":54},[37,48171,32160],{"class":50},[37,48173,48174,48176],{"class":39,"line":47},[37,48175,30732],{"class":54},[37,48177,32167],{"class":50},[37,48179,48180,48182,48184,48186],{"class":39,"line":104},[37,48181,30732],{"class":54},[37,48183,32178],{"class":50},[37,48185,31722],{"class":54},[37,48187,32183],{"class":50},[37,48189,48190,48192],{"class":39,"line":113},[37,48191,30732],{"class":54},[37,48193,30735],{"class":50},[37,48195,48196,48198,48200,48202],{"class":39,"line":189},[37,48197,31076],{"class":54},[37,48199,31754],{"class":50},[37,48201,30732],{"class":54},[37,48203,32200],{"class":50},[37,48205,48206,48208,48210,48212,48215],{"class":39,"line":195},[37,48207,31076],{"class":54},[37,48209,31707],{"class":50},[37,48211,30732],{"class":54},[37,48213,48214],{"class":50}," ImageFolder ",[37,48216,48217],{"class":43},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[37,48219,48220,48222,48224,48226],{"class":39,"line":201},[37,48221,31076],{"class":54},[37,48223,31737],{"class":50},[37,48225,30732],{"class":54},[37,48227,31742],{"class":50},[37,48229,48230,48232,48234,48236],{"class":39,"line":207},[37,48231,30732],{"class":54},[37,48233,31754],{"class":50},[37,48235,31722],{"class":54},[37,48237,31759],{"class":50},[37,48239,48240,48242,48244,48246],{"class":39,"line":213},[37,48241,30732],{"class":54},[37,48243,31771],{"class":50},[37,48245,31722],{"class":54},[37,48247,31776],{"class":50},[37,48249,48250],{"class":39,"line":218},[37,48251,32245],{"class":43},[37,48253,48254,48256,48258,48260],{"class":39,"line":227},[37,48255,31076],{"class":54},[37,48257,32252],{"class":50},[37,48259,30732],{"class":54},[37,48261,43368],{"class":50},[37,48263,48264,48266,48268,48270],{"class":39,"line":232},[37,48265,31076],{"class":54},[37,48267,31079],{"class":50},[37,48269,30732],{"class":54},[37,48271,31084],{"class":50},[37,48273,48274],{"class":39,"line":238},[37,48275,2757],{"emptyLinePlaceholder":454},[37,48277,48278],{"class":39,"line":244},[37,48279,32280],{"class":43},[37,48281,48282,48284,48286],{"class":39,"line":250},[37,48283,32285],{"class":54},[37,48285,32288],{"class":2320},[37,48287,32291],{"class":50},[37,48289,48290],{"class":39,"line":256},[37,48291,48292],{"class":43},"    # 导入自己的数据集，并进行数据处理\n",[37,48294,48295],{"class":39,"line":261},[37,48296,48297],{"class":43},"    # 定义数据集的路径\n",[37,48299,48300,48303,48305,48307,48309,48311,48315],{"class":39,"line":267},[37,48301,48302],{"class":61},"    ROOT_PATH",[37,48304,55],{"class":54},[37,48306,1180],{"class":54},[37,48308,772],{"class":185},[37,48310,1068],{"class":61},[37,48312,48314],{"class":48313},"sA_wV","\u002Fdata\u002Ftrain",[37,48316,25475],{"class":185},[37,48318,48319],{"class":39,"line":283},[37,48320,2757],{"emptyLinePlaceholder":454},[37,48322,48323],{"class":39,"line":288},[37,48324,48325],{"class":43},"    # 定义归一化方法\n",[37,48327,48328],{"class":39,"line":294},[37,48329,48330],{"class":43},"    # 这里需要先计算一下数据集的均值和方差\n",[37,48332,48333],{"class":39,"line":300},[37,48334,48335],{"class":43},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[37,48337,48338],{"class":39,"line":306},[37,48339,48340],{"class":43},"    # 第一个参数是均值，第二个参数是方差\n",[37,48342,48343,48346,48348,48351,48354,48356,48359,48361,48364,48367,48370,48372,48375,48377,48380],{"class":39,"line":312},[37,48344,48345],{"class":50},"    normalize",[37,48347,55],{"class":54},[37,48349,48350],{"class":50},"transforms.Normalize([",[37,48352,48353],{"class":61},"0.162",[37,48355,65],{"class":50},[37,48357,48358],{"class":61},"0.151",[37,48360,65],{"class":50},[37,48362,48363],{"class":61},"0.138",[37,48365,48366],{"class":50},"],[",[37,48368,48369],{"class":61},"0.058",[37,48371,65],{"class":50},[37,48373,48374],{"class":61},"0.052",[37,48376,65],{"class":50},[37,48378,48379],{"class":61},"0.048",[37,48381,101],{"class":50},[37,48383,48384],{"class":39,"line":317},[37,48385,48386],{"class":43},"    # 定义数据集处理方法变量\n",[37,48388,48389,48392,48394],{"class":39,"line":323},[37,48390,48391],{"class":50},"    train_transform",[37,48393,55],{"class":54},[37,48395,48396],{"class":50},"transforms.Compose([\n",[37,48398,48399],{"class":39,"line":337},[37,48400,48401],{"class":43},"        # 调整图像大小为224*224\n",[37,48403,48404,48407,48409,48411,48413],{"class":39,"line":342},[37,48405,48406],{"class":50},"        transforms.Resize((",[37,48408,31839],{"class":61},[37,48410,65],{"class":50},[37,48412,31839],{"class":61},[37,48414,42959],{"class":50},[37,48416,48417],{"class":39,"line":347},[37,48418,48419],{"class":43},"        # 将图像转换为张量\n",[37,48421,48422],{"class":39,"line":352},[37,48423,48424],{"class":50},"        transforms.ToTensor(),\n",[37,48426,48427],{"class":39,"line":357},[37,48428,48429],{"class":50},"        normalize])\n",[37,48431,48432],{"class":39,"line":362},[37,48433,48434],{"class":43},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[37,48436,48437],{"class":39,"line":367},[37,48438,48439],{"class":43},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[37,48441,48442],{"class":39,"line":373},[37,48443,2757],{"emptyLinePlaceholder":454},[37,48445,48446],{"class":39,"line":392},[37,48447,48448],{"class":43},"    # 加载数据集\n",[37,48450,48451],{"class":39,"line":398},[37,48452,48453],{"class":43},"    # 传入数据集路径与处理方法\n",[37,48455,48456,48458,48460,48463,48466,48468,48471,48473],{"class":39,"line":409},[37,48457,32296],{"class":50},[37,48459,55],{"class":54},[37,48461,48462],{"class":50},"ImageFolder(",[37,48464,48465],{"class":61},"ROOT_PATH",[37,48467,65],{"class":50},[37,48469,48470],{"class":159},"transform",[37,48472,55],{"class":54},[37,48474,48475],{"class":50},"train_transform)\n",[37,48477,48478],{"class":39,"line":415},[37,48479,2757],{"emptyLinePlaceholder":454},[37,48481,48482,48484,48486,48488,48490,48492,48494,48496,48498,48500,48502,48504,48506,48508,48510],{"class":39,"line":420},[37,48483,32348],{"class":50},[37,48485,55],{"class":54},[37,48487,32353],{"class":50},[37,48489,32356],{"class":61},[37,48491,165],{"class":50},[37,48493,32361],{"class":61},[37,48495,967],{"class":54},[37,48497,7706],{"class":61},[37,48499,32368],{"class":50},[37,48501,32356],{"class":61},[37,48503,165],{"class":50},[37,48505,32375],{"class":61},[37,48507,967],{"class":54},[37,48509,7706],{"class":61},[37,48511,32382],{"class":50},[37,48513,48514,48516,48518,48520,48522,48524],{"class":39,"line":425},[37,48515,32387],{"class":50},[37,48517,55],{"class":54},[37,48519,32392],{"class":50},[37,48521,31875],{"class":159},[37,48523,55],{"class":54},[37,48525,31880],{"class":50},[37,48527,48528,48530,48532,48534],{"class":39,"line":431},[37,48529,32403],{"class":159},[37,48531,55],{"class":54},[37,48533,720],{"class":61},[37,48535,31805],{"class":50},[37,48537,48538,48540,48542,48544],{"class":39,"line":436},[37,48539,32415],{"class":159},[37,48541,55],{"class":54},[37,48543,31815],{"class":61},[37,48545,31805],{"class":50},[37,48547,48548],{"class":39,"line":442},[37,48549,32426],{"class":43},[37,48551,48552,48554,48556,48558],{"class":39,"line":8374},[37,48553,32431],{"class":159},[37,48555,55],{"class":54},[37,48557,73],{"class":61},[37,48559,280],{"class":50},[37,48561,48562,48564,48566,48568,48570,48572],{"class":39,"line":8386},[37,48563,32442],{"class":50},[37,48565,55],{"class":54},[37,48567,31872],{"class":50},[37,48569,31875],{"class":159},[37,48571,55],{"class":54},[37,48573,32453],{"class":50},[37,48575,48576,48578,48580,48582],{"class":39,"line":8398},[37,48577,32458],{"class":159},[37,48579,55],{"class":54},[37,48581,720],{"class":61},[37,48583,31805],{"class":50},[37,48585,48586,48588,48590,48592],{"class":39,"line":10057},[37,48587,32469],{"class":159},[37,48589,55],{"class":54},[37,48591,31815],{"class":61},[37,48593,31805],{"class":50},[37,48595,48596,48598,48600,48602],{"class":39,"line":10082},[37,48597,32480],{"class":159},[37,48599,55],{"class":54},[37,48601,73],{"class":61},[37,48603,280],{"class":50},[37,48605,48606,48608],{"class":39,"line":10105},[37,48607,4440],{"class":54},[37,48609,32493],{"class":50},[37,48611,48612],{"class":39,"line":10129},[37,48613,2757],{"emptyLinePlaceholder":454},[37,48615,48616],{"class":39,"line":10134},[37,48617,32502],{"class":43},[37,48619,48620],{"class":39,"line":10139},[37,48621,32507],{"class":43},[37,48623,48624],{"class":39,"line":10144},[37,48625,2757],{"emptyLinePlaceholder":454},[37,48627,48628],{"class":39,"line":10153},[37,48629,32516],{"class":43},[37,48631,48632,48634,48636],{"class":39,"line":10158},[37,48633,32285],{"class":54},[37,48635,32523],{"class":2320},[37,48637,32526],{"class":50},[37,48639,48640,48642,48644,48646,48648,48650,48652,48654,48656],{"class":39,"line":10164},[37,48641,31576],{"class":50},[37,48643,55],{"class":54},[37,48645,30791],{"class":50},[37,48647,31583],{"class":185},[37,48649,2069],{"class":54},[37,48651,31588],{"class":50},[37,48653,2066],{"class":54},[37,48655,32545],{"class":185},[37,48657,280],{"class":50},[37,48659,48660],{"class":39,"line":10185},[37,48661,2757],{"emptyLinePlaceholder":454},[37,48663,48664],{"class":39,"line":10191},[37,48665,32560],{"class":43},[37,48667,48668],{"class":39,"line":10205},[37,48669,32565],{"class":43},[37,48671,48672],{"class":39,"line":10211},[37,48673,32570],{"class":43},[37,48675,48676,48678,48680,48682,48684,48686,48688],{"class":39,"line":10238},[37,48677,32575],{"class":50},[37,48679,55],{"class":54},[37,48681,32580],{"class":50},[37,48683,32583],{"class":159},[37,48685,55],{"class":54},[37,48687,32588],{"class":61},[37,48689,280],{"class":50},[37,48691,48692],{"class":39,"line":10247},[37,48693,2757],{"emptyLinePlaceholder":454},[37,48695,48696],{"class":39,"line":10253},[37,48697,32599],{"class":43},[37,48699,48700,48702,48704],{"class":39,"line":10261},[37,48701,32604],{"class":50},[37,48703,55],{"class":54},[37,48705,32609],{"class":50},[37,48707,48708],{"class":39,"line":10266},[37,48709,2757],{"emptyLinePlaceholder":454},[37,48711,48712],{"class":39,"line":16945},[37,48713,32618],{"class":43},[37,48715,48716,48718,48720],{"class":39,"line":16951},[37,48717,31628],{"class":50},[37,48719,55],{"class":54},[37,48721,32627],{"class":50},[37,48723,48724],{"class":39,"line":16974},[37,48725,32632],{"class":43},[37,48727,48728],{"class":39,"line":16980},[37,48729,32637],{"class":43},[37,48731,48732],{"class":39,"line":17003},[37,48733,32642],{"class":43},[37,48735,48736,48738,48740],{"class":39,"line":17017},[37,48737,32647],{"class":50},[37,48739,55],{"class":54},[37,48741,32652],{"class":50},[37,48743,48744],{"class":39,"line":17037},[37,48745,2757],{"emptyLinePlaceholder":454},[37,48747,48748],{"class":39,"line":17043},[37,48749,32665],{"class":43},[37,48751,48752],{"class":39,"line":17054},[37,48753,32670],{"class":43},[37,48755,48756,48758,48760],{"class":39,"line":17077},[37,48757,32675],{"class":50},[37,48759,55],{"class":54},[37,48761,32680],{"class":61},[37,48763,48764],{"class":39,"line":17099},[37,48765,32685],{"class":43},[37,48767,48768,48770,48772],{"class":39,"line":17104},[37,48769,32690],{"class":50},[37,48771,55],{"class":54},[37,48773,32695],{"class":50},[37,48775,48776],{"class":39,"line":17110},[37,48777,32700],{"class":43},[37,48779,48780,48782,48784],{"class":39,"line":17124},[37,48781,32705],{"class":50},[37,48783,55],{"class":54},[37,48785,32695],{"class":50},[37,48787,48788],{"class":39,"line":17137},[37,48789,32714],{"class":43},[37,48791,48792,48794,48796],{"class":39,"line":17142},[37,48793,32719],{"class":50},[37,48795,55],{"class":54},[37,48797,32695],{"class":50},[37,48799,48800],{"class":39,"line":17156},[37,48801,32728],{"class":43},[37,48803,48804,48806,48808],{"class":39,"line":17161},[37,48805,32733],{"class":50},[37,48807,55],{"class":54},[37,48809,32695],{"class":50},[37,48811,48812],{"class":39,"line":17167},[37,48813,2757],{"emptyLinePlaceholder":454},[37,48815,48816],{"class":39,"line":17172},[37,48817,32746],{"class":43},[37,48819,48820,48822,48824],{"class":39,"line":17186},[37,48821,32751],{"class":50},[37,48823,55],{"class":54},[37,48825,32756],{"class":50},[37,48827,48828],{"class":39,"line":17191},[37,48829,2757],{"emptyLinePlaceholder":454},[37,48831,48832],{"class":39,"line":17196},[37,48833,32769],{"class":43},[37,48835,48836,48838,48840,48842,48844],{"class":39,"line":17210},[37,48837,3551],{"class":54},[37,48839,32776],{"class":50},[37,48841,26385],{"class":54},[37,48843,32781],{"class":61},[37,48845,32784],{"class":50},[37,48847,48848,48850,48852,48854,48856,48858,48860,48862,48864,48866,48868],{"class":39,"line":17222},[37,48849,32789],{"class":61},[37,48851,165],{"class":50},[37,48853,32794],{"class":185},[37,48855,32797],{"class":61},[37,48857,1094],{"class":185},[37,48859,32797],{"class":61},[37,48861,772],{"class":185},[37,48863,32806],{"class":50},[37,48865,384],{"class":54},[37,48867,332],{"class":61},[37,48869,175],{"class":50},[37,48871,48872,48874,48876,48878,48880,48882],{"class":39,"line":17227},[37,48873,32789],{"class":61},[37,48875,165],{"class":50},[37,48877,32821],{"class":185},[37,48879,967],{"class":54},[37,48881,98],{"class":61},[37,48883,280],{"class":50},[37,48885,48886],{"class":39,"line":17240},[37,48887,2757],{"emptyLinePlaceholder":454},[37,48889,48890],{"class":39,"line":17245},[37,48891,32836],{"class":43},[37,48893,48894],{"class":39,"line":17250},[37,48895,32841],{"class":43},[37,48897,48898,48900,48902],{"class":39,"line":17255},[37,48899,32846],{"class":50},[37,48901,55],{"class":54},[37,48903,32680],{"class":61},[37,48905,48906],{"class":39,"line":17268},[37,48907,32855],{"class":43},[37,48909,48910,48912,48914],{"class":39,"line":17273},[37,48911,32860],{"class":50},[37,48913,55],{"class":54},[37,48915,3435],{"class":61},[37,48917,48918],{"class":39,"line":32971},[37,48919,32869],{"class":43},[37,48921,48922,48924,48926],{"class":39,"line":32977},[37,48923,32874],{"class":50},[37,48925,55],{"class":54},[37,48927,32680],{"class":61},[37,48929,48930],{"class":39,"line":32983},[37,48931,32883],{"class":43},[37,48933,48934,48936,48938],{"class":39,"line":32989},[37,48935,32888],{"class":50},[37,48937,55],{"class":54},[37,48939,3435],{"class":61},[37,48941,48942],{"class":39,"line":32995},[37,48943,32897],{"class":43},[37,48945,48946,48948,48950],{"class":39,"line":33006},[37,48947,32902],{"class":50},[37,48949,55],{"class":54},[37,48951,3435],{"class":61},[37,48953,48954],{"class":39,"line":33012},[37,48955,32911],{"class":43},[37,48957,48958,48960,48962],{"class":39,"line":33032},[37,48959,32916],{"class":50},[37,48961,55],{"class":54},[37,48963,3435],{"class":61},[37,48965,48966],{"class":39,"line":33038},[37,48967,32925],{"class":43},[37,48969,48970,48972,48974,48976,48978],{"class":39,"line":33049},[37,48971,3753],{"class":54},[37,48973,31939],{"class":50},[37,48975,26385],{"class":54},[37,48977,31944],{"class":61},[37,48979,32938],{"class":50},[37,48981,48982],{"class":39,"line":33055},[37,48983,32943],{"class":43},[37,48985,48986,48988,48990],{"class":39,"line":33061},[37,48987,32948],{"class":50},[37,48989,55],{"class":54},[37,48991,32953],{"class":50},[37,48993,48994],{"class":39,"line":33067},[37,48995,32958],{"class":43},[37,48997,48998,49000,49002],{"class":39,"line":33073},[37,48999,32963],{"class":50},[37,49001,55],{"class":54},[37,49003,32968],{"class":50},[37,49005,49006],{"class":39,"line":33079},[37,49007,32974],{"class":43},[37,49009,49010],{"class":39,"line":33085},[37,49011,32980],{"class":50},[37,49013,49014],{"class":39,"line":33091},[37,49015,32986],{"class":43},[37,49017,49018],{"class":39,"line":33111},[37,49019,32992],{"class":43},[37,49021,49022,49024,49026],{"class":39,"line":33117},[37,49023,32998],{"class":50},[37,49025,55],{"class":54},[37,49027,33003],{"class":50},[37,49029,49030],{"class":39,"line":33133},[37,49031,33009],{"class":43},[37,49033,49034,49036,49038,49040,49042,49044,49046],{"class":39,"line":33139},[37,49035,33015],{"class":50},[37,49037,55],{"class":54},[37,49039,33020],{"class":50},[37,49041,33023],{"class":159},[37,49043,55],{"class":54},[37,49045,332],{"class":61},[37,49047,280],{"class":50},[37,49049,49050],{"class":39,"line":33153},[37,49051,33035],{"class":43},[37,49053,49054,49056,49058],{"class":39,"line":33159},[37,49055,33041],{"class":50},[37,49057,55],{"class":54},[37,49059,33046],{"class":50},[37,49061,49062],{"class":39,"line":33174},[37,49063,33052],{"class":43},[37,49065,49066],{"class":39,"line":33180},[37,49067,33058],{"class":50},[37,49069,49070],{"class":39,"line":33189},[37,49071,33064],{"class":43},[37,49073,49074],{"class":39,"line":33195},[37,49075,33070],{"class":50},[37,49077,49078],{"class":39,"line":33204},[37,49079,33076],{"class":43},[37,49081,49082],{"class":39,"line":33210},[37,49083,33082],{"class":50},[37,49085,49086],{"class":39,"line":33216},[37,49087,33088],{"class":43},[37,49089,49090,49092,49094,49096,49098,49100,49102],{"class":39,"line":33225},[37,49091,33094],{"class":50},[37,49093,9818],{"class":54},[37,49095,33099],{"class":50},[37,49097,967],{"class":54},[37,49099,33104],{"class":50},[37,49101,135],{"class":61},[37,49103,280],{"class":50},[37,49105,49106],{"class":39,"line":33231},[37,49107,33114],{"class":43},[37,49109,49110,49112,49114,49116,49118],{"class":39,"line":33242},[37,49111,33120],{"class":50},[37,49113,9818],{"class":54},[37,49115,33125],{"class":50},[37,49117,3299],{"class":54},[37,49119,33130],{"class":50},[37,49121,49122],{"class":39,"line":33248},[37,49123,33136],{"class":43},[37,49125,49126,49128,49130,49132,49134],{"class":39,"line":33267},[37,49127,33142],{"class":50},[37,49129,9818],{"class":54},[37,49131,33104],{"class":50},[37,49133,135],{"class":61},[37,49135,280],{"class":50},[37,49137,49138],{"class":39,"line":33273},[37,49139,33156],{"class":43},[37,49141,49142,49144,49146,49148,49150],{"class":39,"line":33284},[37,49143,3753],{"class":54},[37,49145,33164],{"class":50},[37,49147,26385],{"class":54},[37,49149,31944],{"class":61},[37,49151,33171],{"class":50},[37,49153,49154],{"class":39,"line":33290},[37,49155,33177],{"class":43},[37,49157,49158,49160,49162],{"class":39,"line":33310},[37,49159,32948],{"class":50},[37,49161,55],{"class":54},[37,49163,32953],{"class":50},[37,49165,49166],{"class":39,"line":33326},[37,49167,33192],{"class":43},[37,49169,49170,49172,49174],{"class":39,"line":33332},[37,49171,32963],{"class":50},[37,49173,55],{"class":54},[37,49175,32968],{"class":50},[37,49177,49178],{"class":39,"line":33346},[37,49179,33207],{"class":43},[37,49181,49182],{"class":39,"line":33352},[37,49183,33213],{"class":50},[37,49185,49186],{"class":39,"line":33358},[37,49187,36693],{"class":43},[37,49189,49190,49192],{"class":39,"line":33369},[37,49191,33219],{"class":54},[37,49193,33222],{"class":50},[37,49195,49196],{"class":39,"line":33375},[37,49197,33228],{"class":43},[37,49199,49200,49202,49204],{"class":39,"line":33381},[37,49201,36708],{"class":50},[37,49203,55],{"class":54},[37,49205,33003],{"class":50},[37,49207,49208],{"class":39,"line":33391},[37,49209,33245],{"class":43},[37,49211,49212,49214,49216,49218,49220,49222,49224],{"class":39,"line":33397},[37,49213,36721],{"class":50},[37,49215,55],{"class":54},[37,49217,33020],{"class":50},[37,49219,33023],{"class":159},[37,49221,55],{"class":54},[37,49223,332],{"class":61},[37,49225,280],{"class":50},[37,49227,49228],{"class":39,"line":33408},[37,49229,33270],{"class":43},[37,49231,49232,49234,49236],{"class":39,"line":33414},[37,49233,36742],{"class":50},[37,49235,55],{"class":54},[37,49237,33046],{"class":50},[37,49239,49240],{"class":39,"line":33424},[37,49241,33287],{"class":43},[37,49243,49244,49246,49248,49250,49252,49254,49256],{"class":39,"line":33429},[37,49245,36755],{"class":50},[37,49247,9818],{"class":54},[37,49249,36760],{"class":50},[37,49251,967],{"class":54},[37,49253,33104],{"class":50},[37,49255,135],{"class":61},[37,49257,280],{"class":50},[37,49259,49260,49262,49264,49266,49268],{"class":39,"line":33435},[37,49261,36773],{"class":50},[37,49263,9818],{"class":54},[37,49265,33125],{"class":50},[37,49267,3299],{"class":54},[37,49269,33130],{"class":50},[37,49271,49272],{"class":39,"line":33484},[37,49273,36786],{"class":43},[37,49275,49276,49278,49280,49282,49284],{"class":39,"line":33531},[37,49277,36791],{"class":50},[37,49279,9818],{"class":54},[37,49281,33104],{"class":50},[37,49283,135],{"class":61},[37,49285,280],{"class":50},[37,49287,49288],{"class":39,"line":33536},[37,49289,33349],{"class":43},[37,49291,49292],{"class":39,"line":33542},[37,49293,33355],{"class":43},[37,49295,49296,49298,49300],{"class":39,"line":33561},[37,49297,33361],{"class":50},[37,49299,1094],{"class":54},[37,49301,33366],{"class":50},[37,49303,49304],{"class":39,"line":33567},[37,49305,33372],{"class":43},[37,49307,49308],{"class":39,"line":33586},[37,49309,33378],{"class":43},[37,49311,49312,49314,49316],{"class":39,"line":33592},[37,49313,33384],{"class":50},[37,49315,1094],{"class":54},[37,49317,33366],{"class":50},[37,49319,49320],{"class":39,"line":33598},[37,49321,33394],{"class":43},[37,49323,49324,49326,49328],{"class":39,"line":33608},[37,49325,33400],{"class":50},[37,49327,1094],{"class":54},[37,49329,33405],{"class":50},[37,49331,49332],{"class":39,"line":33613},[37,49333,33411],{"class":43},[37,49335,49336,49338,49340],{"class":39,"line":33619},[37,49337,33417],{"class":50},[37,49339,1094],{"class":54},[37,49341,33405],{"class":50},[37,49343,49344],{"class":39,"line":33635},[37,49345,2757],{"emptyLinePlaceholder":454},[37,49347,49348],{"class":39,"line":33680},[37,49349,33432],{"class":43},[37,49351,49352,49354,49356,49358,49360,49362,49364,49366,49368,49370,49372,49374,49376,49378,49380,49382,49384,49386,49388,49390],{"class":39,"line":33686},[37,49353,32789],{"class":61},[37,49355,165],{"class":50},[37,49357,3942],{"class":185},[37,49359,32797],{"class":61},[37,49361,33446],{"class":185},[37,49363,1404],{"class":61},[37,49365,33451],{"class":54},[37,49367,1454],{"class":61},[37,49369,33456],{"class":185},[37,49371,1404],{"class":61},[37,49373,33451],{"class":54},[37,49375,1454],{"class":61},[37,49377,3942],{"class":185},[37,49379,33467],{"class":50},[37,49381,384],{"class":54},[37,49383,332],{"class":61},[37,49385,33474],{"class":50},[37,49387,384],{"class":54},[37,49389,332],{"class":61},[37,49391,33481],{"class":50},[37,49393,49394,49396,49398,49400,49402,49404,49406,49408,49410,49412,49414,49416,49418,49420,49422,49424,49426,49428,49430,49432],{"class":39,"line":33692},[37,49395,32789],{"class":61},[37,49397,165],{"class":50},[37,49399,3942],{"class":185},[37,49401,32797],{"class":61},[37,49403,33495],{"class":185},[37,49405,1404],{"class":61},[37,49407,33451],{"class":54},[37,49409,1454],{"class":61},[37,49411,33504],{"class":185},[37,49413,1404],{"class":61},[37,49415,33451],{"class":54},[37,49417,1454],{"class":61},[37,49419,3942],{"class":185},[37,49421,33515],{"class":50},[37,49423,384],{"class":54},[37,49425,332],{"class":61},[37,49427,33522],{"class":50},[37,49429,384],{"class":54},[37,49431,332],{"class":61},[37,49433,33481],{"class":50},[37,49435,49436],{"class":39,"line":33698},[37,49437,2757],{"emptyLinePlaceholder":454},[37,49439,49440],{"class":39,"line":33709},[37,49441,33539],{"class":43},[37,49443,49444,49446,49448,49450,49452,49454,49456],{"class":39,"line":33715},[37,49445,2854],{"class":54},[37,49447,33547],{"class":50},[37,49449,384],{"class":54},[37,49451,332],{"class":61},[37,49453,1448],{"class":50},[37,49455,1468],{"class":54},[37,49457,33558],{"class":50},[37,49459,49460],{"class":39,"line":33721},[37,49461,33564],{"class":43},[37,49463,49464,49466,49468,49470,49472,49474,49476],{"class":39,"line":33727},[37,49465,33570],{"class":50},[37,49467,568],{"class":61},[37,49469,55],{"class":54},[37,49471,33577],{"class":50},[37,49473,384],{"class":54},[37,49475,332],{"class":61},[37,49477,389],{"class":50},[37,49479,49480],{"class":39,"line":33745},[37,49481,33589],{"class":43},[37,49483,49484],{"class":39,"line":33759},[37,49485,33595],{"class":43},[37,49487,49488,49490,49492],{"class":39,"line":33768},[37,49489,33601],{"class":50},[37,49491,55],{"class":54},[37,49493,32652],{"class":50},[37,49495,49496],{"class":39,"line":33777},[37,49497,2757],{"emptyLinePlaceholder":454},[37,49499,49500],{"class":39,"line":33786},[37,49501,33616],{"class":43},[37,49503,49504,49506,49508,49510,49512],{"class":39,"line":33795},[37,49505,33622],{"class":50},[37,49507,55],{"class":54},[37,49509,33627],{"class":50},[37,49511,384],{"class":54},[37,49513,33632],{"class":50},[37,49515,49516,49518,49520,49522,49524,49526,49528,49530,49532,49534,49536,49538,49540,49542,49544,49546,49548,49550],{"class":39,"line":33801},[37,49517,32789],{"class":61},[37,49519,165],{"class":50},[37,49521,33642],{"class":185},[37,49523,1404],{"class":61},[37,49525,33647],{"class":54},[37,49527,1454],{"class":61},[37,49529,1054],{"class":185},[37,49531,1404],{"class":61},[37,49533,33647],{"class":54},[37,49535,1454],{"class":61},[37,49537,33660],{"class":185},[37,49539,33663],{"class":50},[37,49541,33666],{"class":54},[37,49543,1415],{"class":61},[37,49545,33671],{"class":50},[37,49547,845],{"class":54},[37,49549,1415],{"class":61},[37,49551,175],{"class":50},[37,49553,49554],{"class":39,"line":33807},[37,49555,37070],{"class":43},[37,49557,49558],{"class":39,"line":33815},[37,49559,37075],{"class":43},[37,49561,49562,49564,49566],{"class":39,"line":33820},[37,49563,37080],{"class":50},[37,49565,33704],{"class":185},[37,49567,280],{"class":50},[37,49569,49570],{"class":39,"line":33826},[37,49571,33724],{"class":43},[37,49573,49574,49576,49578,49580,49582,49584],{"class":39,"line":33837},[37,49575,33730],{"class":50},[37,49577,55],{"class":54},[37,49579,33735],{"class":50},[37,49581,33738],{"class":159},[37,49583,55],{"class":54},[37,49585,1922],{"class":50},[37,49587,49588,49590,49592,49594],{"class":39,"line":33843},[37,49589,33748],{"class":185},[37,49591,1368],{"class":50},[37,49593,33753],{"class":61},[37,49595,33756],{"class":50},[37,49597,49598,49600],{"class":39,"line":33863},[37,49599,33762],{"class":185},[37,49601,33765],{"class":50},[37,49603,49604,49606],{"class":39,"line":33869},[37,49605,33771],{"class":185},[37,49607,33774],{"class":50},[37,49609,49610,49612],{"class":39,"line":33875},[37,49611,33780],{"class":185},[37,49613,33783],{"class":50},[37,49615,49616,49618],{"class":39,"line":33881},[37,49617,33789],{"class":185},[37,49619,33792],{"class":50},[37,49621,49622],{"class":39,"line":33898},[37,49623,33798],{"class":50},[37,49625,49626],{"class":39,"line":33904},[37,49627,33804],{"class":43},[37,49629,49630,49632],{"class":39,"line":33910},[37,49631,4440],{"class":54},[37,49633,33812],{"class":50},[37,49635,49636],{"class":39,"line":33916},[37,49637,2757],{"emptyLinePlaceholder":454},[37,49639,49640],{"class":39,"line":33922},[37,49641,33823],{"class":43},[37,49643,49644,49646,49648],{"class":39,"line":33928},[37,49645,32285],{"class":54},[37,49647,33831],{"class":2320},[37,49649,33834],{"class":50},[37,49651,49652],{"class":39,"line":33955},[37,49653,33840],{"class":43},[37,49655,49656,49658,49660,49662,49664,49666,49668,49670],{"class":39,"line":33979},[37,49657,33846],{"class":50},[37,49659,32031],{"class":159},[37,49661,55],{"class":54},[37,49663,165],{"class":50},[37,49665,68],{"class":61},[37,49667,65],{"class":50},[37,49669,168],{"class":61},[37,49671,175],{"class":50},[37,49673,49674],{"class":39,"line":33985},[37,49675,33866],{"class":43},[37,49677,49678],{"class":39,"line":33991},[37,49679,33872],{"class":43},[37,49681,49682],{"class":39,"line":33997},[37,49683,33878],{"class":43},[37,49685,49686,49688,49690,49692,49694,49696,49698],{"class":39,"line":34008},[37,49687,32065],{"class":50},[37,49689,332],{"class":61},[37,49691,65],{"class":50},[37,49693,602],{"class":61},[37,49695,65],{"class":50},[37,49697,332],{"class":61},[37,49699,280],{"class":50},[37,49701,49702],{"class":39,"line":34019},[37,49703,33901],{"class":43},[37,49705,49706],{"class":39,"line":34025},[37,49707,33907],{"class":43},[37,49709,49710],{"class":39,"line":34042},[37,49711,33913],{"class":43},[37,49713,49714],{"class":39,"line":34065},[37,49715,33919],{"class":43},[37,49717,49718],{"class":39,"line":34088},[37,49719,33925],{"class":43},[37,49721,49722,49724,49726,49728,49730,49732,49734,49736,49738],{"class":39,"line":34094},[37,49723,33931],{"class":50},[37,49725,33934],{"class":185},[37,49727,33937],{"class":50},[37,49729,33940],{"class":185},[37,49731,65],{"class":50},[37,49733,33945],{"class":159},[37,49735,55],{"class":54},[37,49737,33950],{"class":185},[37,49739,280],{"class":50},[37,49741,49742,49744,49746,49748,49750,49752,49754,49756,49758],{"class":39,"line":34099},[37,49743,33931],{"class":50},[37,49745,33934],{"class":185},[37,49747,33962],{"class":50},[37,49749,33965],{"class":185},[37,49751,65],{"class":50},[37,49753,33945],{"class":159},[37,49755,55],{"class":54},[37,49757,33974],{"class":185},[37,49759,280],{"class":50},[37,49761,49762],{"class":39,"line":34108},[37,49763,33982],{"class":43},[37,49765,49766],{"class":39,"line":34118},[37,49767,33988],{"class":50},[37,49769,49770],{"class":39,"line":34124},[37,49771,33994],{"class":43},[37,49773,49774,49776,49778],{"class":39,"line":34129},[37,49775,34000],{"class":50},[37,49777,34003],{"class":185},[37,49779,280],{"class":50},[37,49781,49782,49784,49786],{"class":39,"line":34135},[37,49783,34011],{"class":50},[37,49785,34014],{"class":185},[37,49787,280],{"class":50},[37,49789,49790],{"class":39,"line":34148},[37,49791,34022],{"class":43},[37,49793,49794,49796,49798,49800,49802,49804,49806],{"class":39,"line":34154},[37,49795,32065],{"class":50},[37,49797,332],{"class":61},[37,49799,65],{"class":50},[37,49801,602],{"class":61},[37,49803,65],{"class":50},[37,49805,602],{"class":61},[37,49807,280],{"class":50},[37,49809,49810,49812,49814,49816,49818,49820,49822,49824,49826],{"class":39,"line":34165},[37,49811,33931],{"class":50},[37,49813,33934],{"class":185},[37,49815,34049],{"class":50},[37,49817,33940],{"class":185},[37,49819,65],{"class":50},[37,49821,33945],{"class":159},[37,49823,55],{"class":54},[37,49825,34060],{"class":185},[37,49827,280],{"class":50},[37,49829,49830,49832,49834,49836,49838,49840,49842,49844,49846],{"class":39,"line":34176},[37,49831,33931],{"class":50},[37,49833,33934],{"class":185},[37,49835,34072],{"class":50},[37,49837,33965],{"class":185},[37,49839,65],{"class":50},[37,49841,33945],{"class":159},[37,49843,55],{"class":54},[37,49845,34083],{"class":185},[37,49847,280],{"class":50},[37,49849,49850],{"class":39,"line":34195},[37,49851,34091],{"class":43},[37,49853,49855],{"class":39,"line":49854},219,[37,49856,33988],{"class":50},[37,49858,49860,49862,49864],{"class":39,"line":49859},220,[37,49861,34000],{"class":50},[37,49863,33934],{"class":185},[37,49865,280],{"class":50},[37,49867,49869,49871,49873],{"class":39,"line":49868},221,[37,49870,34011],{"class":50},[37,49872,34113],{"class":185},[37,49874,280],{"class":50},[37,49876,49878],{"class":39,"line":49877},222,[37,49879,34121],{"class":50},[37,49881,49883],{"class":39,"line":49882},223,[37,49884,2757],{"emptyLinePlaceholder":454},[37,49886,49888],{"class":39,"line":49887},224,[37,49889,34132],{"class":43},[37,49891,49893,49895,49897,49899,49901],{"class":39,"line":49892},225,[37,49894,1907],{"class":54},[37,49896,31559],{"class":61},[37,49898,3299],{"class":54},[37,49900,31564],{"class":185},[37,49902,4089],{"class":50},[37,49904,49906],{"class":39,"line":49905},226,[37,49907,34151],{"class":43},[37,49909,49911,49913,49915],{"class":39,"line":49910},227,[37,49912,44883],{"class":50},[37,49914,55],{"class":54},[37,49916,44888],{"class":50},[37,49918,49920,49922,49924],{"class":39,"line":49919},228,[37,49921,34168],{"class":50},[37,49923,55],{"class":54},[37,49925,34173],{"class":50},[37,49927,49929,49931,49933,49935,49937,49939,49941],{"class":39,"line":49928},229,[37,49930,33730],{"class":50},[37,49932,55],{"class":54},[37,49934,44905],{"class":50},[37,49936,34186],{"class":159},[37,49938,55],{"class":54},[37,49940,1415],{"class":61},[37,49942,280],{"class":50},[37,49944,49946],{"class":39,"line":49945},230,[37,49947,34198],{"class":50},[22339,49949,49951],{"id":49950},"_242测试代码","2.4.2.测试代码",[14,49953,49954],{},"使用测试集进行测试与推理",[27,49956,49958],{"className":29,"code":49957,"language":31,"meta":32,"style":32},"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",[34,49959,49960,49966,49976,49986,49997,50007,50011,50015,50023,50028,50032,50049,50053,50057,50061,50065,50069,50101,50105,50113,50117,50129,50133,50137,50141,50145,50149,50153,50157,50161,50179,50193,50197,50207,50217,50227,50233,50237,50241,50249,50253,50269,50277,50281,50285,50293,50301,50305,50309,50313,50317,50323,50327,50337,50345,50353,50357,50361,50365,50373,50377,50393,50397,50401,50405,50417,50421,50433,50437,50441,50453,50457,50467,50471,50475,50487,50491,50499,50503,50507,50515,50519,50527,50531,50535,50539,50543,50547,50563,50571,50575,50579,50597,50603,50607,50617,50625,50633,50637,50641,50645,50649,50657,50661,50677,50681,50689,50697],{"__ignoreMap":32},[37,49961,49962,49964],{"class":39,"line":40},[37,49963,30732],{"class":54},[37,49965,30735],{"class":50},[37,49967,49968,49970,49972,49974],{"class":39,"line":47},[37,49969,30732],{"class":54},[37,49971,31754],{"class":50},[37,49973,31722],{"class":54},[37,49975,31759],{"class":50},[37,49977,49978,49980,49982,49984],{"class":39,"line":104},[37,49979,31076],{"class":54},[37,49981,31737],{"class":50},[37,49983,30732],{"class":54},[37,49985,31742],{"class":50},[37,49987,49988,49990,49992,49994],{"class":39,"line":113},[37,49989,31076],{"class":54},[37,49991,31707],{"class":50},[37,49993,30732],{"class":54},[37,49995,49996],{"class":50}," ImageFolder\n",[37,49998,49999,50001,50003,50005],{"class":39,"line":189},[37,50000,31076],{"class":54},[37,50002,32252],{"class":50},[37,50004,30732],{"class":54},[37,50006,44977],{"class":50},[37,50008,50009],{"class":39,"line":195},[37,50010,2757],{"emptyLinePlaceholder":454},[37,50012,50013],{"class":39,"line":201},[37,50014,34288],{"class":43},[37,50016,50017,50019,50021],{"class":39,"line":207},[37,50018,32285],{"class":54},[37,50020,34295],{"class":2320},[37,50022,32291],{"class":50},[37,50024,50025],{"class":39,"line":213},[37,50026,50027],{"class":43},"   # 导入自己的数据集，并进行数据处理\n",[37,50029,50030],{"class":39,"line":218},[37,50031,48297],{"class":43},[37,50033,50034,50036,50038,50040,50042,50044,50047],{"class":39,"line":227},[37,50035,48302],{"class":61},[37,50037,55],{"class":54},[37,50039,1180],{"class":54},[37,50041,772],{"class":185},[37,50043,1068],{"class":61},[37,50045,50046],{"class":48313},"\u002Fdata\u002Ftest",[37,50048,25475],{"class":185},[37,50050,50051],{"class":39,"line":232},[37,50052,2757],{"emptyLinePlaceholder":454},[37,50054,50055],{"class":39,"line":238},[37,50056,48325],{"class":43},[37,50058,50059],{"class":39,"line":244},[37,50060,48330],{"class":43},[37,50062,50063],{"class":39,"line":250},[37,50064,48335],{"class":43},[37,50066,50067],{"class":39,"line":256},[37,50068,48340],{"class":43},[37,50070,50071,50073,50075,50077,50079,50081,50083,50085,50087,50089,50091,50093,50095,50097,50099],{"class":39,"line":261},[37,50072,48345],{"class":50},[37,50074,55],{"class":54},[37,50076,48350],{"class":50},[37,50078,48353],{"class":61},[37,50080,65],{"class":50},[37,50082,48358],{"class":61},[37,50084,65],{"class":50},[37,50086,48363],{"class":61},[37,50088,48366],{"class":50},[37,50090,48369],{"class":61},[37,50092,65],{"class":50},[37,50094,48374],{"class":61},[37,50096,65],{"class":50},[37,50098,48379],{"class":61},[37,50100,101],{"class":50},[37,50102,50103],{"class":39,"line":267},[37,50104,48386],{"class":43},[37,50106,50107,50109,50111],{"class":39,"line":283},[37,50108,48391],{"class":50},[37,50110,55],{"class":54},[37,50112,48396],{"class":50},[37,50114,50115],{"class":39,"line":288},[37,50116,48401],{"class":43},[37,50118,50119,50121,50123,50125,50127],{"class":39,"line":294},[37,50120,48406],{"class":50},[37,50122,31839],{"class":61},[37,50124,65],{"class":50},[37,50126,31839],{"class":61},[37,50128,42959],{"class":50},[37,50130,50131],{"class":39,"line":300},[37,50132,48419],{"class":43},[37,50134,50135],{"class":39,"line":306},[37,50136,48424],{"class":50},[37,50138,50139],{"class":39,"line":312},[37,50140,48429],{"class":50},[37,50142,50143],{"class":39,"line":317},[37,50144,48434],{"class":43},[37,50146,50147],{"class":39,"line":323},[37,50148,48439],{"class":43},[37,50150,50151],{"class":39,"line":337},[37,50152,2757],{"emptyLinePlaceholder":454},[37,50154,50155],{"class":39,"line":342},[37,50156,48448],{"class":43},[37,50158,50159],{"class":39,"line":347},[37,50160,48453],{"class":43},[37,50162,50163,50165,50167,50169,50171,50173,50175,50177],{"class":39,"line":352},[37,50164,34302],{"class":50},[37,50166,55],{"class":54},[37,50168,48462],{"class":50},[37,50170,48465],{"class":61},[37,50172,65],{"class":50},[37,50174,48470],{"class":159},[37,50176,55],{"class":54},[37,50178,48475],{"class":50},[37,50180,50181,50183,50185,50187,50189,50191],{"class":39,"line":357},[37,50182,34359],{"class":50},[37,50184,55],{"class":54},[37,50186,31872],{"class":50},[37,50188,31875],{"class":159},[37,50190,55],{"class":54},[37,50192,34370],{"class":50},[37,50194,50195],{"class":39,"line":362},[37,50196,34375],{"class":43},[37,50198,50199,50201,50203,50205],{"class":39,"line":367},[37,50200,34380],{"class":159},[37,50202,55],{"class":54},[37,50204,332],{"class":61},[37,50206,31805],{"class":50},[37,50208,50209,50211,50213,50215],{"class":39,"line":373},[37,50210,34391],{"class":159},[37,50212,55],{"class":54},[37,50214,31815],{"class":61},[37,50216,31805],{"class":50},[37,50218,50219,50221,50223,50225],{"class":39,"line":392},[37,50220,34402],{"class":159},[37,50222,55],{"class":54},[37,50224,135],{"class":61},[37,50226,280],{"class":50},[37,50228,50229,50231],{"class":39,"line":398},[37,50230,4440],{"class":54},[37,50232,34415],{"class":50},[37,50234,50235],{"class":39,"line":409},[37,50236,2757],{"emptyLinePlaceholder":454},[37,50238,50239],{"class":39,"line":415},[37,50240,34424],{"class":43},[37,50242,50243,50245,50247],{"class":39,"line":420},[37,50244,32285],{"class":54},[37,50246,34431],{"class":2320},[37,50248,34434],{"class":50},[37,50250,50251],{"class":39,"line":425},[37,50252,34439],{"class":43},[37,50254,50255,50257,50259,50261,50263,50265,50267],{"class":39,"line":431},[37,50256,31576],{"class":50},[37,50258,55],{"class":54},[37,50260,31583],{"class":185},[37,50262,2069],{"class":54},[37,50264,31588],{"class":50},[37,50266,2066],{"class":54},[37,50268,34456],{"class":185},[37,50270,50271,50273,50275],{"class":39,"line":436},[37,50272,31628],{"class":50},[37,50274,55],{"class":54},[37,50276,32627],{"class":50},[37,50278,50279],{"class":39,"line":442},[37,50280,2757],{"emptyLinePlaceholder":454},[37,50282,50283],{"class":39,"line":8374},[37,50284,34473],{"class":43},[37,50286,50287,50289,50291],{"class":39,"line":8386},[37,50288,34478],{"class":50},[37,50290,55],{"class":54},[37,50292,32680],{"class":61},[37,50294,50295,50297,50299],{"class":39,"line":8398},[37,50296,34487],{"class":50},[37,50298,55],{"class":54},[37,50300,3435],{"class":61},[37,50302,50303],{"class":39,"line":10057},[37,50304,2757],{"emptyLinePlaceholder":454},[37,50306,50307],{"class":39,"line":10082},[37,50308,34500],{"class":43},[37,50310,50311],{"class":39,"line":10105},[37,50312,34505],{"class":43},[37,50314,50315],{"class":39,"line":10129},[37,50316,34510],{"class":43},[37,50318,50319,50321],{"class":39,"line":10134},[37,50320,34515],{"class":54},[37,50322,33222],{"class":50},[37,50324,50325],{"class":39,"line":10139},[37,50326,34522],{"class":43},[37,50328,50329,50331,50333,50335],{"class":39,"line":10144},[37,50330,3753],{"class":54},[37,50332,34529],{"class":50},[37,50334,26385],{"class":54},[37,50336,34534],{"class":50},[37,50338,50339,50341,50343],{"class":39,"line":10153},[37,50340,34539],{"class":50},[37,50342,55],{"class":54},[37,50344,34544],{"class":50},[37,50346,50347,50349,50351],{"class":39,"line":10158},[37,50348,34549],{"class":50},[37,50350,55],{"class":54},[37,50352,34554],{"class":50},[37,50354,50355],{"class":39,"line":10164},[37,50356,34559],{"class":43},[37,50358,50359],{"class":39,"line":10185},[37,50360,33213],{"class":50},[37,50362,50363],{"class":39,"line":10191},[37,50364,34568],{"class":43},[37,50366,50367,50369,50371],{"class":39,"line":10205},[37,50368,32998],{"class":50},[37,50370,55],{"class":54},[37,50372,34577],{"class":50},[37,50374,50375],{"class":39,"line":10211},[37,50376,34582],{"class":43},[37,50378,50379,50381,50383,50385,50387,50389,50391],{"class":39,"line":10238},[37,50380,33015],{"class":50},[37,50382,55],{"class":54},[37,50384,33020],{"class":50},[37,50386,33023],{"class":159},[37,50388,55],{"class":54},[37,50390,332],{"class":61},[37,50392,280],{"class":50},[37,50394,50395],{"class":39,"line":10247},[37,50396,34603],{"class":43},[37,50398,50399],{"class":39,"line":10253},[37,50400,34608],{"class":43},[37,50402,50403],{"class":39,"line":10261},[37,50404,34613],{"class":43},[37,50406,50407,50409,50411,50413,50415],{"class":39,"line":10266},[37,50408,34618],{"class":50},[37,50410,9818],{"class":54},[37,50412,33125],{"class":50},[37,50414,3299],{"class":54},[37,50416,34627],{"class":50},[37,50418,50419],{"class":39,"line":16945},[37,50420,34632],{"class":43},[37,50422,50423,50425,50427,50429,50431],{"class":39,"line":16951},[37,50424,34637],{"class":50},[37,50426,9818],{"class":54},[37,50428,34642],{"class":50},[37,50430,135],{"class":61},[37,50432,280],{"class":50},[37,50434,50435],{"class":39,"line":16974},[37,50436,2757],{"emptyLinePlaceholder":454},[37,50438,50439],{"class":39,"line":16980},[37,50440,34655],{"class":43},[37,50442,50443,50445,50447,50449,50451],{"class":39,"line":17003},[37,50444,34660],{"class":50},[37,50446,55],{"class":54},[37,50448,34665],{"class":50},[37,50450,1094],{"class":54},[37,50452,34670],{"class":50},[37,50454,50455],{"class":39,"line":17017},[37,50456,34675],{"class":43},[37,50458,50459,50461,50463,50465],{"class":39,"line":17037},[37,50460,32789],{"class":61},[37,50462,165],{"class":50},[37,50464,34684],{"class":185},[37,50466,34687],{"class":50},[37,50468,50469],{"class":39,"line":17043},[37,50470,2757],{"emptyLinePlaceholder":454},[37,50472,50473],{"class":39,"line":17054},[37,50474,34696],{"class":43},[37,50476,50477,50479,50481,50483,50485],{"class":39,"line":17077},[37,50478,1907],{"class":54},[37,50480,31559],{"class":61},[37,50482,3299],{"class":54},[37,50484,31564],{"class":185},[37,50486,4089],{"class":50},[37,50488,50489],{"class":39,"line":17099},[37,50490,34713],{"class":43},[37,50492,50493,50495,50497],{"class":39,"line":17104},[37,50494,31628],{"class":50},[37,50496,55],{"class":54},[37,50498,44888],{"class":50},[37,50500,50501],{"class":39,"line":17110},[37,50502,34726],{"class":43},[37,50504,50505],{"class":39,"line":17124},[37,50506,34731],{"class":43},[37,50508,50509,50511,50513],{"class":39,"line":17137},[37,50510,34736],{"class":50},[37,50512,34739],{"class":185},[37,50514,175],{"class":50},[37,50516,50517],{"class":39,"line":17142},[37,50518,34746],{"class":43},[37,50520,50521,50523,50525],{"class":39,"line":17156},[37,50522,34359],{"class":50},[37,50524,55],{"class":54},[37,50526,34755],{"class":50},[37,50528,50529],{"class":39,"line":17161},[37,50530,34760],{"class":43},[37,50532,50533],{"class":39,"line":17167},[37,50534,34765],{"class":50},[37,50536,50537],{"class":39,"line":17172},[37,50538,2757],{"emptyLinePlaceholder":454},[37,50540,50541],{"class":39,"line":17186},[37,50542,34774],{"class":43},[37,50544,50545],{"class":39,"line":17191},[37,50546,34779],{"class":43},[37,50548,50549,50551,50553,50555,50557,50559,50561],{"class":39,"line":17196},[37,50550,31576],{"class":50},[37,50552,55],{"class":54},[37,50554,31583],{"class":185},[37,50556,2069],{"class":54},[37,50558,31588],{"class":50},[37,50560,2066],{"class":54},[37,50562,34456],{"class":185},[37,50564,50565,50567,50569],{"class":39,"line":17210},[37,50566,31628],{"class":50},[37,50568,55],{"class":54},[37,50570,32627],{"class":50},[37,50572,50573],{"class":39,"line":17222},[37,50574,34808],{"class":43},[37,50576,50577],{"class":39,"line":17227},[37,50578,34813],{"class":43},[37,50580,50581,50583,50585,50587,50590,50592,50595],{"class":39,"line":17240},[37,50582,34818],{"class":50},[37,50584,55],{"class":54},[37,50586,1399],{"class":50},[37,50588,50589],{"class":185},"'猫'",[37,50591,65],{"class":50},[37,50593,50594],{"class":185},"'狗'",[37,50596,389],{"class":50},[37,50598,50599,50601],{"class":39,"line":17245},[37,50600,34515],{"class":54},[37,50602,33222],{"class":50},[37,50604,50605],{"class":39,"line":17250},[37,50606,34883],{"class":43},[37,50608,50609,50611,50613,50615],{"class":39,"line":17255},[37,50610,3753],{"class":54},[37,50612,34890],{"class":50},[37,50614,26385],{"class":54},[37,50616,34534],{"class":50},[37,50618,50619,50621,50623],{"class":39,"line":17268},[37,50620,32948],{"class":50},[37,50622,55],{"class":54},[37,50624,32953],{"class":50},[37,50626,50627,50629,50631],{"class":39,"line":17273},[37,50628,32963],{"class":50},[37,50630,55],{"class":54},[37,50632,32968],{"class":50},[37,50634,50635],{"class":39,"line":32971},[37,50636,2757],{"emptyLinePlaceholder":454},[37,50638,50639],{"class":39,"line":32977},[37,50640,34919],{"class":43},[37,50642,50643],{"class":39,"line":32983},[37,50644,33213],{"class":50},[37,50646,50647],{"class":39,"line":32989},[37,50648,34928],{"class":43},[37,50650,50651,50653,50655],{"class":39,"line":32995},[37,50652,32998],{"class":50},[37,50654,55],{"class":54},[37,50656,33003],{"class":50},[37,50658,50659],{"class":39,"line":33006},[37,50660,34941],{"class":43},[37,50662,50663,50665,50667,50669,50671,50673,50675],{"class":39,"line":33012},[37,50664,33015],{"class":50},[37,50666,55],{"class":54},[37,50668,33020],{"class":50},[37,50670,33023],{"class":159},[37,50672,55],{"class":54},[37,50674,332],{"class":61},[37,50676,280],{"class":50},[37,50678,50679],{"class":39,"line":33032},[37,50680,34962],{"class":43},[37,50682,50683,50685,50687],{"class":39,"line":33038},[37,50684,34967],{"class":50},[37,50686,55],{"class":54},[37,50688,34972],{"class":50},[37,50690,50691,50693,50695],{"class":39,"line":33049},[37,50692,34977],{"class":50},[37,50694,55],{"class":54},[37,50696,34982],{"class":50},[37,50698,50699,50701,50703,50705,50707,50709,50711,50713],{"class":39,"line":33055},[37,50700,34987],{"class":61},[37,50702,165],{"class":50},[37,50704,34992],{"class":185},[37,50706,34995],{"class":50},[37,50708,34998],{"class":185},[37,50710,65],{"class":50},[37,50712,35003],{"class":185},[37,50714,35006],{"class":50},[446,50716,50717],{},"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":32,"searchDepth":47,"depth":47,"links":50719},[50720,50721,50722,50723],{"id":30930,"depth":104,"text":30931},{"id":38176,"depth":104,"text":38177},{"id":41609,"depth":104,"text":41610},{"id":45618,"depth":104,"text":45619},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30922,"description":451},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50730,"title":50731,"body":50732,"description":451,"extension":452,"meta":50739,"navigation":454,"path":50740,"seo":50741,"stem":50742,"__hash__":50743},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50733,"toc":50737},[50734],[10,50735,50731],{"id":50736},"_3yolo模型学习",{"title":32,"searchDepth":47,"depth":47,"links":50738},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50731,"description":451},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50745,"title":50746,"body":50747,"description":50754,"extension":452,"meta":50755,"navigation":454,"path":50757,"seo":50758,"stem":50759,"__hash__":50760},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50748,"toc":50752},[50749],[14,50750,50751],{},"yolo模型还未补充",{"title":32,"searchDepth":47,"depth":47,"links":50753},[],"深度学习学习",{"category":50756},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50746,"description":50754},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50762,"title":50763,"body":50764,"description":451,"extension":452,"meta":50789,"navigation":454,"path":50790,"seo":50791,"stem":50792,"__hash__":50793},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50765,"toc":50787},[50766,50769,50772,50777,50784],[10,50767,50763],{"id":50768},"_1工具",[14,50770,50771],{},"提示错误插件：有问题会提前报错",[14,50773,50774],{},[1838,50775],{"alt":32,"src":50776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50778,50779],{},[51,50780,50783],{"href":50781,"rel":50782},"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",[24206],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50785,50786],{},"alt键加上下箭头可以实现语句的移动",{"title":32,"searchDepth":47,"depth":47,"links":50788},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50763,"description":451},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50795,"title":50796,"body":50797,"description":451,"extension":452,"meta":53661,"navigation":454,"path":53662,"seo":53663,"stem":53664,"__hash__":53665},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50798,"toc":53612},[50799,50802,50806,50810,50815,50818,50823,50827,50834,50839,50846,50851,50858,50863,50867,50872,50875,50879,50884,50888,50893,50896,50899,50902,50905,50908,50911,50914,50917,50922,50927,50932,50936,50939,50942,50946,50951,50954,50962,50967,50984,50992,50997,51002,51007,51012,51017,51020,51025,51030,51034,51043,51048,51053,51057,51062,51065,51069,51074,51082,51087,51092,51095,51100,51105,51110,51113,51116,51119,51124,51129,51132,51137,51140,51145,51148,51151,51154,51159,51162,51165,51180,51185,51190,51195,51198,51201,51204,51218,51221,51226,51231,51234,51237,51240,51243,51246,51249,51252,51256,51260,51265,51269,51272,51277,51282,51285,51290,51293,51297,51302,51305,51308,51311,51314,51317,51320,51323,51326,51329,51333,51338,51343,51348,51351,51354,51358,51363,51366,51370,51373,51376,51381,51384,51387,51391,51395,51398,51403,51408,51411,51440,51445,51450,51455,51460,51464,51469,51473,51478,51481,51485,51489,51494,51498,51503,51508,51512,51517,51520,51522,51525,51530,51534,51539,51543,51547,51552,51557,51562,51567,51571,51576,51581,51586,51589,51592,51597,51600,51605,51610,51615,51620,51624,52431,52435,52778,52783,52786,52789,52792,52795,52798,52801,52804,52807,52809,52812,52814,52817,52821,52826,52829,52832,52835,52839,52844,52849,52869,52872,52876,52881,52886,52903,52907,52936,52940,52962,52964,53003,53011,53017,53021,53024,53027,53032,53037,53040,53043,53046,53051,53056,53059,53062,53065,53068,53071,53074,53077,53080,53083,53086,53089,53091,53094,53097,53100,53103,53106,53109,53112,53115,53119,53124,53127,53132,53135,53138,53141,53144,53147,53150,53153,53155,53158,53161,53164,53167,53170,53173,53177,53180,53189,53192,53197,53200,53205,53208,53211,53214,53217,53220,53223,53226,53230,53234,53237,53240,53245,53250,53255,53259,53264,53269,53272,53275,53278,53281,53284,53289,53292,53297,53299,53304,53307,53311,53316,53319,53322,53327,53331,53334,53339,53342,53345,53374,53379,53382,53385,53388,53391,53394,53398,53401,53487,53491,53494,53499,53504,53511,53514,53517,53520,53523,53526,53531,53536,53539,53542,53545,53548,53551,53554,53557,53560,53563,53565,53568,53572,53577,53582,53587,53590,53595,53600,53603,53606,53609],[10,50800,50796],{"id":50801},"_2基础语法",[469,50803,50805],{"id":50804},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[498,50807,50809],{"id":50808},"_211-js组成","2.1.1 js组成",[481,50811,50812],{},[484,50813,50814],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50816,50817],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[481,50819,50820],{"start":47},[484,50821,50822],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[498,50824,50826],{"id":50825},"_212-js书写位置","2.1.2 js书写位置",[481,50828,50829],{},[484,50830,50831],{},[673,50832,50833],{},"内部 JavaScript",[14,50835,50836],{},[1838,50837],{"alt":32,"src":50838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[481,50840,50841],{"start":47},[484,50842,50843],{},[673,50844,50845],{},"外部 JavaScript",[14,50847,50848],{},[1838,50849],{"alt":32,"src":50850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[481,50852,50853],{"start":104},[484,50854,50855],{},[673,50856,50857],{},"内联 JavaScript",[14,50859,50860],{},[1838,50861],{"alt":32,"src":50862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[498,50864,50866],{"id":50865},"_213-javascript注释","2.1.3 JavaScript注释",[14,50868,50869],{},[1838,50870],{"alt":32,"src":50871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50873,50874],{},"alt+shift+a一定要记住！",[498,50876,50878],{"id":50877},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50880,50881],{},[1838,50882],{"alt":32,"src":50883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[498,50885,50887],{"id":50886},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[481,50889,50890],{},[484,50891,50892],{},"输出语法：",[14,50894,50895],{},"①document.write('要出的内容')",[14,50897,50898],{},"向body内输出内容；",[14,50900,50901],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50903,50904],{},"②alert('要出的内容')",[14,50906,50907],{},"页面弹出警告对话框",[14,50909,50910],{},"③console.log('控制台打印')",[14,50912,50913],{},"控制台输出语法，程序员调试使用",[14,50915,50916],{},"输入log就行，自动生成：",[14,50918,50919],{},[1838,50920],{"alt":32,"src":50921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[481,50923,50924],{"start":47},[484,50925,50926],{},"输入语法：",[14,50928,50929],{},[1838,50930],{"alt":32,"src":50931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[498,50933,50935],{"id":50934},"_2116-字面量","21.1.6 字面量",[14,50937,50938],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50940,50941],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[469,50943,50945],{"id":50944},"_22-变量","2.2 变量",[481,50947,50948],{},[484,50949,50950],{},"变量声明",[14,50952,50953],{},"let 变量名",[1515,50955,50956,50959],{},[484,50957,50958],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[484,50960,50961],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[481,50963,50964],{"start":47},[484,50965,50966],{},"变量赋值",[27,50968,50972],{"className":50969,"code":50970,"language":50971,"meta":32,"style":32},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[34,50973,50974,50979],{"__ignoreMap":32},[37,50975,50976],{"class":39,"line":40},[37,50977,50978],{"class":50},"let age\n",[37,50980,50981],{"class":39,"line":47},[37,50982,50983],{"class":50},"age=18\n",[481,50985,50986,50989],{"start":104},[484,50987,50988],{},"连这些（变量的初始化）：let age=18",[484,50990,50991],{},"更新变量",[14,50993,50994],{},[1838,50995],{"alt":32,"src":50996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[481,50998,50999],{"start":189},[484,51000,51001],{},"声明多个变量",[14,51003,51004],{},[1838,51005],{"alt":32,"src":51006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[481,51008,51009],{"start":195},[484,51010,51011],{},"变量命名规则与规范",[14,51013,51014],{},[1838,51015],{"alt":32,"src":51016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,51018,51019],{},"遵守小驼峰！",[481,51021,51022],{"start":201},[484,51023,51024],{},"变量拓展-let和var的区别",[14,51026,51027],{},[1838,51028],{"alt":32,"src":51029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[469,51031,51033],{"id":51032},"_23-数组","2.3 数组",[27,51035,51037],{"className":50969,"code":51036,"language":50971,"meta":32,"style":32},"let arr = []\n",[34,51038,51039],{"__ignoreMap":32},[37,51040,51041],{"class":39,"line":40},[37,51042,51036],{"class":50},[14,51044,51045],{},[1838,51046],{"alt":32,"src":51047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,51049,51050],{},[1838,51051],{"alt":32,"src":51052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[469,51054,51056],{"id":51055},"_24-常量","2.4 常量",[14,51058,51059],{},[1838,51060],{"alt":32,"src":51061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,51063,51064],{},"const — 类似于 let ，但是变量的值无法被修改",[469,51066,51068],{"id":51067},"_25-数据类型","2.5 数据类型",[14,51070,51071],{},[1838,51072],{"alt":32,"src":51073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[481,51075,51076,51079],{},[484,51077,51078],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[484,51080,51081],{},"算数运算符：",[14,51083,51084],{},[1838,51085],{"alt":32,"src":51086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[481,51088,51089],{"start":104},[484,51090,51091],{},"数字类型（Number）",[14,51093,51094],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,51096,51097],{},[1838,51098],{"alt":32,"src":51099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[481,51101,51102],{"start":113},[484,51103,51104],{},"字符串类型（string）",[14,51106,51107],{},[1838,51108],{"alt":32,"src":51109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,51111,51112],{},"反引号也是可以使用的",[14,51114,51115],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,51117,51118],{},"例如：document.write(\"我今年\"+age+\"岁\")",[481,51120,51121],{"start":189},[484,51122,51123],{},"模板字符串",[14,51125,51126],{},[1838,51127],{"alt":32,"src":51128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,51130,51131],{},"类似于python的字符串格式化",[481,51133,51134],{"start":195},[484,51135,51136],{},"布尔类型",[14,51138,51139],{},"true 和 false",[481,51141,51142],{"start":201},[484,51143,51144],{},"未定义类型（underfined）",[14,51146,51147],{},"表示没有赋值",[14,51149,51150],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,51152,51153],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[481,51155,51156],{"start":207},[484,51157,51158],{},"null（空类型）",[14,51160,51161],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,51163,51164],{},"赋值了，但是内容为空",[27,51166,51168],{"className":50969,"code":51167,"language":50971,"meta":32,"style":32},"typeof null\n输出的是'object'，是一个对象数据类型\n",[34,51169,51170,51175],{"__ignoreMap":32},[37,51171,51172],{"class":39,"line":40},[37,51173,51174],{"class":50},"typeof null\n",[37,51176,51177],{"class":39,"line":47},[37,51178,51179],{"class":50},"输出的是'object'，是一个对象数据类型\n",[481,51181,51182],{"start":213},[484,51183,51184],{},"控制台检测数据类型",[14,51186,51187],{},[1838,51188],{"alt":32,"src":51189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[481,51191,51192],{"start":218},[484,51193,51194],{},"类型转换",[14,51196,51197],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,51199,51200],{},"转换方式：隐式转换和显示转换",[14,51202,51203],{},"①隐式转换",[1515,51205,51206,51209,51212,51215],{},[484,51207,51208],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[484,51210,51211],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[484,51213,51214],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[484,51216,51217],{},"任何数据和字符串相加结果都是字符串",[14,51219,51220],{},"②显示转换",[14,51222,51223],{},[1838,51224],{"alt":32,"src":51225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,51227,51228],{},[1838,51229],{"alt":32,"src":51230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,51232,51233],{},"在输入的时候要用好隐式转换，简单写起来",[14,51235,51236],{},"let num = +prompt(’请输入数字：‘)",[14,51238,51239],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,51241,51242],{},"console.log(parseInt('12.333px'))",[14,51244,51245],{},"输出为：12",[14,51247,51248],{},"console.log(parseInt('a'a'a12.333px'))",[14,51250,51251],{},"输出：NaN",[469,51253,51255],{"id":51254},"_26-运算符","2.6 运算符",[498,51257,51259],{"id":51258},"_261-赋值运算符","2.6.1 赋值运算符",[14,51261,51262],{},[1838,51263],{"alt":32,"src":51264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[498,51266,51268],{"id":51267},"_262-一元运算符","2.6.2 一元运算符",[14,51270,51271],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51273,51274],{},[1838,51275],{"alt":32,"src":51276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51278,51279],{},[1838,51280],{"alt":32,"src":51281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51283,51284],{},"两者的区别：",[14,51286,51287],{},[1838,51288],{"alt":32,"src":51289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51291,51292],{},"前置先自加；后置后加，代码执行完之后再加",[498,51294,51296],{"id":51295},"_263-比较运算符","2.6.3 比较运算符",[14,51298,51299],{},[1838,51300],{"alt":32,"src":51301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51303,51304],{},"比较运算符也有隐式转换",[14,51306,51307],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51309,51310],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51312,51313],{},"要使用三等，开发的时候",[14,51315,51316],{},"NaN不等于任何人，包括它自己",[14,51318,51319],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51321,51322],{},"7\u002F10=0.7",[14,51324,51325],{},"最后：0.5+0.2=0.7",[14,51327,51328],{},"字符串比较，比较的是字符对应的ASCII码",[498,51330,51332],{"id":51331},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51334,51335],{},[1838,51336],{"alt":32,"src":51337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51339,51340],{},[1838,51341],{"alt":32,"src":51342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51344,51345],{},[1838,51346],{"alt":32,"src":51347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51349,51350],{},"上述题目选D",[14,51352,51353],{},"与真2假1；或真1假2",[498,51355,51357],{"id":51356},"_265-运算符优先级","2.6.5 运算符优先级",[14,51359,51360],{},[1838,51361],{"alt":32,"src":51362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51364,51365],{},"先算逻辑与，后算逻辑或",[469,51367,51369],{"id":51368},"_27-语句","2.7 语句",[14,51371,51372],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51374,51375],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51377,51378],{},[1838,51379],{"alt":32,"src":51380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51382,51383],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51385,51386],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[498,51388,51390],{"id":51389},"_271-分支语句","2.7.1 分支语句",[22339,51392,51394],{"id":51393},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51396,51397],{},"if语句单行简单的话，可以不写{}，写在一行就行",[481,51399,51400],{},[484,51401,51402],{},"单分支语句",[14,51404,51405],{},[1838,51406],{"alt":32,"src":51407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51409,51410],{},"除了0，所有数字都为真",[27,51412,51414],{"className":50969,"code":51413,"language":50971,"meta":32,"style":32},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[34,51415,51416,51421,51426,51431,51435],{"__ignoreMap":32},[37,51417,51418],{"class":39,"line":40},[37,51419,51420],{"class":50},"if（0) {\n",[37,51422,51423],{"class":39,"line":47},[37,51424,51425],{"class":50},"    let a=1\n",[37,51427,51428],{"class":39,"line":104},[37,51429,51430],{"class":50},"    alert(typeof a)\n",[37,51432,51433],{"class":39,"line":113},[37,51434,1941],{"class":50},[37,51436,51437],{"class":39,"line":189},[37,51438,51439],{"class":50},"不输出，括号为假\n",[481,51441,51442],{"start":47},[484,51443,51444],{},"双分支语句",[14,51446,51447],{},[1838,51448],{"alt":32,"src":51449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[481,51451,51452],{"start":104},[484,51453,51454],{},"多分支语句",[14,51456,51457],{},[1838,51458],{"alt":32,"src":51459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22339,51461,51463],{"id":51462},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51465,51466],{},[1838,51467],{"alt":32,"src":51468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22339,51470,51472],{"id":51471},"_2713-switch语句","2.7.1.3 switch语句",[14,51474,51475],{},[1838,51476],{"alt":32,"src":51477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51479,51480],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[498,51482,51484],{"id":51483},"_272-循环语句","2.7.2 循环语句",[22339,51486,51488],{"id":51487},"_2721-断点演示","2.7.2.1 断点演示",[14,51490,51491],{},[1838,51492],{"alt":32,"src":51493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22339,51495,51497],{"id":51496},"_2722-while循环","2.7.2.2 while循环",[14,51499,51500],{},[1838,51501],{"alt":32,"src":51502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51504,51505],{},[1838,51506],{"alt":32,"src":51507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22339,51509,51511],{"id":51510},"_2723-for循环","2.7.2.3 for循环",[14,51513,51514],{},[1838,51515],{"alt":32,"src":51516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51518,51519],{},"for(;;) {",[14,51521,1454],{},[14,51523,51524],{},"表示无限循环",[14,51526,51527],{},[1838,51528],{"alt":32,"src":51529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22339,51531,51533],{"id":51532},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51535,51536],{},[1838,51537],{"alt":32,"src":51538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[469,51540,51542],{"id":51541},"_28-数组","2.8 数组",[498,51544,51546],{"id":51545},"_281-基础认识","2.8.1 基础认识",[14,51548,51549],{},[1838,51550],{"alt":32,"src":51551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51553,51554],{},[1838,51555],{"alt":32,"src":51556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51558,51559],{},[1838,51560],{"alt":32,"src":51561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51563,51564],{},[1838,51565],{"alt":32,"src":51566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[498,51568,51570],{"id":51569},"_282-操作数组","2.8.2 操作数组",[14,51572,51573],{},[1838,51574],{"alt":32,"src":51575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[481,51577,51578],{},[484,51579,51580],{},"添加元素",[14,51582,51583],{},[1838,51584],{"alt":32,"src":51585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51587,51588],{},"console.log(arr.push('green'))",[14,51590,51591],{},"输出结果：为新数组的长度",[14,51593,51594],{},[1838,51595],{"alt":32,"src":51596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51598,51599],{},"push用的非常多，一定要记住",[481,51601,51602],{},[484,51603,51604],{},"删除元素",[14,51606,51607],{},[1838,51608],{"alt":32,"src":51609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51611,51612],{},[1838,51613],{"alt":32,"src":51614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51616,51617],{},[1838,51618],{"alt":32,"src":51619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[498,51621,51623],{"id":51622},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[27,51625,51627],{"className":50969,"code":51626,"language":50971,"meta":32,"style":32},"\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",[34,51628,51629,51644,51660,51664,51673,51691,51715,51737,51751,51759,51766,51778,51789,51793,51797,51804,51816,51831,51844,51863,51880,51895,51907,51919,51931,51935,51939,51950,51960,51972,51984,51996,52007,52011,52015,52027,52031,52045,52049,52053,52064,52078,52090,52104,52108,52117,52126,52130,52139,52143,52152,52157,52162,52175,52203,52208,52213,52238,52243,52247,52252,52257,52272,52276,52281,52311,52323,52339,52355,52369,52374,52381,52385,52390,52403,52411,52419,52423],{"__ignoreMap":32},[37,51630,51631,51634,51638,51641],{"class":39,"line":40},[37,51632,51633],{"class":50},"\u003C!",[37,51635,51637],{"class":51636},"s9eBZ","DOCTYPE",[37,51639,51640],{"class":2320}," html",[37,51642,51643],{"class":50},">\n",[37,51645,51646,51648,51650,51653,51655,51658],{"class":39,"line":47},[37,51647,1418],{"class":50},[37,51649,50971],{"class":51636},[37,51651,51652],{"class":2320}," lang",[37,51654,55],{"class":50},[37,51656,51657],{"class":185},"\"en\"",[37,51659,51643],{"class":50},[37,51661,51662],{"class":39,"line":104},[37,51663,2757],{"emptyLinePlaceholder":454},[37,51665,51666,51668,51671],{"class":39,"line":113},[37,51667,1418],{"class":50},[37,51669,51670],{"class":51636},"head",[37,51672,51643],{"class":50},[37,51674,51675,51678,51681,51684,51686,51689],{"class":39,"line":189},[37,51676,51677],{"class":50},"    \u003C",[37,51679,51680],{"class":51636},"meta",[37,51682,51683],{"class":2320}," charset",[37,51685,55],{"class":50},[37,51687,51688],{"class":185},"\"UTF-8\"",[37,51690,51643],{"class":50},[37,51692,51693,51695,51697,51700,51702,51705,51708,51710,51713],{"class":39,"line":195},[37,51694,51677],{"class":50},[37,51696,51680],{"class":51636},[37,51698,51699],{"class":2320}," http-equiv",[37,51701,55],{"class":50},[37,51703,51704],{"class":185},"\"X-UA-Compatible\"",[37,51706,51707],{"class":2320}," content",[37,51709,55],{"class":50},[37,51711,51712],{"class":185},"\"IE=edge\"",[37,51714,51643],{"class":50},[37,51716,51717,51719,51721,51723,51725,51728,51730,51732,51735],{"class":39,"line":201},[37,51718,51677],{"class":50},[37,51720,51680],{"class":51636},[37,51722,15261],{"class":2320},[37,51724,55],{"class":50},[37,51726,51727],{"class":185},"\"viewport\"",[37,51729,51707],{"class":2320},[37,51731,55],{"class":50},[37,51733,51734],{"class":185},"\"width=device-width, initial-scale=1.0\"",[37,51736,51643],{"class":50},[37,51738,51739,51741,51744,51747,51749],{"class":39,"line":207},[37,51740,51677],{"class":50},[37,51742,51743],{"class":51636},"title",[37,51745,51746],{"class":50},">Document\u003C\u002F",[37,51748,51743],{"class":51636},[37,51750,51643],{"class":50},[37,51752,51753,51755,51757],{"class":39,"line":213},[37,51754,51677],{"class":50},[37,51756,446],{"class":51636},[37,51758,51643],{"class":50},[37,51760,51761,51764],{"class":39,"line":218},[37,51762,51763],{"class":51636},"        *",[37,51765,15913],{"class":50},[37,51767,51768,51771,51774,51776],{"class":39,"line":227},[37,51769,51770],{"class":61},"            margin",[37,51772,51773],{"class":50},": ",[37,51775,135],{"class":61},[37,51777,1669],{"class":50},[37,51779,51780,51783,51785,51787],{"class":39,"line":232},[37,51781,51782],{"class":61},"            padding",[37,51784,51773],{"class":50},[37,51786,135],{"class":61},[37,51788,1669],{"class":50},[37,51790,51791],{"class":39,"line":238},[37,51792,2886],{"class":50},[37,51794,51795],{"class":39,"line":244},[37,51796,2757],{"emptyLinePlaceholder":454},[37,51798,51799,51802],{"class":39,"line":250},[37,51800,51801],{"class":2320},"        .box",[37,51803,15913],{"class":50},[37,51805,51806,51809,51811,51814],{"class":39,"line":256},[37,51807,51808],{"class":61},"            display",[37,51810,51773],{"class":50},[37,51812,51813],{"class":61},"flex",[37,51815,1669],{"class":50},[37,51817,51818,51821,51823,51826,51829],{"class":39,"line":261},[37,51819,51820],{"class":61},"            width",[37,51822,51773],{"class":50},[37,51824,51825],{"class":61},"700",[37,51827,51828],{"class":54},"px",[37,51830,1669],{"class":50},[37,51832,51833,51836,51838,51840,51842],{"class":39,"line":267},[37,51834,51835],{"class":61},"            height",[37,51837,51773],{"class":50},[37,51839,4323],{"class":61},[37,51841,51828],{"class":54},[37,51843,1669],{"class":50},[37,51845,51846,51849,51851,51853,51855,51858,51861],{"class":39,"line":283},[37,51847,51848],{"class":61},"            border-left",[37,51850,51773],{"class":50},[37,51852,332],{"class":61},[37,51854,51828],{"class":54},[37,51856,51857],{"class":61}," solid",[37,51859,51860],{"class":61}," pink",[37,51862,1669],{"class":50},[37,51864,51865,51868,51870,51872,51874,51876,51878],{"class":39,"line":288},[37,51866,51867],{"class":61},"            border-bottom",[37,51869,51773],{"class":50},[37,51871,332],{"class":61},[37,51873,51828],{"class":54},[37,51875,51857],{"class":61},[37,51877,51860],{"class":61},[37,51879,1669],{"class":50},[37,51881,51882,51884,51886,51888,51890,51893],{"class":39,"line":294},[37,51883,51770],{"class":61},[37,51885,51773],{"class":50},[37,51887,1166],{"class":61},[37,51889,51828],{"class":54},[37,51891,51892],{"class":61}," auto",[37,51894,1669],{"class":50},[37,51896,51897,51900,51902,51905],{"class":39,"line":300},[37,51898,51899],{"class":61},"            justify-content",[37,51901,51773],{"class":50},[37,51903,51904],{"class":61},"space-around",[37,51906,1669],{"class":50},[37,51908,51909,51912,51914,51917],{"class":39,"line":306},[37,51910,51911],{"class":61},"            align-items",[37,51913,51773],{"class":50},[37,51915,51916],{"class":61},"flex-end",[37,51918,1669],{"class":50},[37,51920,51921,51924,51926,51929],{"class":39,"line":312},[37,51922,51923],{"class":61},"            text-align",[37,51925,51773],{"class":50},[37,51927,51928],{"class":61},"center",[37,51930,1669],{"class":50},[37,51932,51933],{"class":39,"line":317},[37,51934,2886],{"class":50},[37,51936,51937],{"class":39,"line":323},[37,51938,2757],{"emptyLinePlaceholder":454},[37,51940,51941,51943,51945,51948],{"class":39,"line":337},[37,51942,51801],{"class":2320},[37,51944,1468],{"class":54},[37,51946,51947],{"class":51636},"div",[37,51949,15913],{"class":50},[37,51951,51952,51954,51956,51958],{"class":39,"line":342},[37,51953,51808],{"class":61},[37,51955,51773],{"class":50},[37,51957,51813],{"class":61},[37,51959,1669],{"class":50},[37,51961,51962,51964,51966,51968,51970],{"class":39,"line":347},[37,51963,51820],{"class":61},[37,51965,51773],{"class":50},[37,51967,1166],{"class":61},[37,51969,51828],{"class":54},[37,51971,1669],{"class":50},[37,51973,51974,51977,51979,51982],{"class":39,"line":352},[37,51975,51976],{"class":61},"            background-color",[37,51978,51773],{"class":50},[37,51980,51981],{"class":61},"pink",[37,51983,1669],{"class":50},[37,51985,51986,51989,51991,51994],{"class":39,"line":357},[37,51987,51988],{"class":61},"            flex-direction",[37,51990,51773],{"class":50},[37,51992,51993],{"class":61},"column",[37,51995,1669],{"class":50},[37,51997,51998,52000,52002,52005],{"class":39,"line":362},[37,51999,51899],{"class":61},[37,52001,51773],{"class":50},[37,52003,52004],{"class":61},"space-between",[37,52006,1669],{"class":50},[37,52008,52009],{"class":39,"line":367},[37,52010,2886],{"class":50},[37,52012,52013],{"class":39,"line":373},[37,52014,2757],{"emptyLinePlaceholder":454},[37,52016,52017,52019,52022,52025],{"class":39,"line":392},[37,52018,51801],{"class":2320},[37,52020,52021],{"class":51636}," div",[37,52023,52024],{"class":51636}," span",[37,52026,15913],{"class":50},[37,52028,52029],{"class":39,"line":398},[37,52030,2757],{"emptyLinePlaceholder":454},[37,52032,52033,52036,52038,52041,52043],{"class":39,"line":409},[37,52034,52035],{"class":61},"            margin-top",[37,52037,51773],{"class":50},[37,52039,52040],{"class":61},"-20",[37,52042,51828],{"class":54},[37,52044,1669],{"class":50},[37,52046,52047],{"class":39,"line":415},[37,52048,2886],{"class":50},[37,52050,52051],{"class":39,"line":420},[37,52052,2757],{"emptyLinePlaceholder":454},[37,52054,52055,52057,52059,52062],{"class":39,"line":425},[37,52056,51801],{"class":2320},[37,52058,52021],{"class":51636},[37,52060,52061],{"class":51636}," h4",[37,52063,15913],{"class":50},[37,52065,52066,52069,52071,52074,52076],{"class":39,"line":431},[37,52067,52068],{"class":61},"            margin-bottom",[37,52070,51773],{"class":50},[37,52072,52073],{"class":61},"-35",[37,52075,51828],{"class":54},[37,52077,1669],{"class":50},[37,52079,52080,52082,52084,52086,52088],{"class":39,"line":436},[37,52081,51820],{"class":61},[37,52083,51773],{"class":50},[37,52085,872],{"class":61},[37,52087,51828],{"class":54},[37,52089,1669],{"class":50},[37,52091,52092,52095,52097,52100,52102],{"class":39,"line":442},[37,52093,52094],{"class":61},"            margin-left",[37,52096,51773],{"class":50},[37,52098,52099],{"class":61},"-10",[37,52101,51828],{"class":54},[37,52103,1669],{"class":50},[37,52105,52106],{"class":39,"line":8374},[37,52107,2886],{"class":50},[37,52109,52110,52113,52115],{"class":39,"line":8386},[37,52111,52112],{"class":50},"    \u003C\u002F",[37,52114,446],{"class":51636},[37,52116,51643],{"class":50},[37,52118,52119,52122,52124],{"class":39,"line":8398},[37,52120,52121],{"class":50},"\u003C\u002F",[37,52123,51670],{"class":51636},[37,52125,51643],{"class":50},[37,52127,52128],{"class":39,"line":10057},[37,52129,2757],{"emptyLinePlaceholder":454},[37,52131,52132,52134,52137],{"class":39,"line":10082},[37,52133,1418],{"class":50},[37,52135,52136],{"class":51636},"body",[37,52138,51643],{"class":50},[37,52140,52141],{"class":39,"line":10105},[37,52142,2757],{"emptyLinePlaceholder":454},[37,52144,52145,52147,52150],{"class":39,"line":10129},[37,52146,51677],{"class":50},[37,52148,52149],{"class":51636},"script",[37,52151,51643],{"class":50},[37,52153,52154],{"class":39,"line":10134},[37,52155,52156],{"class":43},"        \u002F\u002F 1. 四次弹框效果\n",[37,52158,52159],{"class":39,"line":10139},[37,52160,52161],{"class":43},"        \u002F\u002F 声明一个新的数组\n",[37,52163,52164,52167,52170,52172],{"class":39,"line":10144},[37,52165,52166],{"class":54},"        let",[37,52168,52169],{"class":50}," arr ",[37,52171,55],{"class":54},[37,52173,52174],{"class":50}," []\n",[37,52176,52177,52179,52181,52184,52186,52188,52190,52192,52194,52197,52199,52201],{"class":39,"line":10153},[37,52178,3753],{"class":54},[37,52180,2027],{"class":50},[37,52182,52183],{"class":54},"let",[37,52185,9779],{"class":50},[37,52187,55],{"class":54},[37,52189,25460],{"class":61},[37,52191,9786],{"class":50},[37,52193,1964],{"class":54},[37,52195,52196],{"class":61}," 4",[37,52198,3564],{"class":50},[37,52200,2649],{"class":54},[37,52202,12783],{"class":50},[37,52204,52205],{"class":39,"line":10158},[37,52206,52207],{"class":43},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[37,52209,52210],{"class":39,"line":10164},[37,52211,52212],{"class":43},"            \u002F\u002F arr.push(num)\n",[37,52214,52215,52218,52221,52223,52226,52228,52231,52233,52236],{"class":39,"line":10185},[37,52216,52217],{"class":50},"            arr.",[37,52219,52220],{"class":2320},"push",[37,52222,165],{"class":50},[37,52224,52225],{"class":2320},"prompt",[37,52227,165],{"class":50},[37,52229,52230],{"class":185},"`请输入第${",[37,52232,954],{"class":50},[37,52234,52235],{"class":185},"}季度的数据:`",[37,52237,175],{"class":50},[37,52239,52240],{"class":39,"line":10191},[37,52241,52242],{"class":43},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[37,52244,52245],{"class":39,"line":10205},[37,52246,2886],{"class":50},[37,52248,52249],{"class":39,"line":10211},[37,52250,52251],{"class":43},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[37,52253,52254],{"class":39,"line":10238},[37,52255,52256],{"class":43},"        \u002F\u002F 盒子开头\n",[37,52258,52259,52262,52265,52267,52270],{"class":39,"line":10247},[37,52260,52261],{"class":50},"        document.",[37,52263,52264],{"class":2320},"write",[37,52266,165],{"class":50},[37,52268,52269],{"class":185},"` \u003Cdiv class=\"box\">`",[37,52271,280],{"class":50},[37,52273,52274],{"class":39,"line":10253},[37,52275,2757],{"emptyLinePlaceholder":454},[37,52277,52278],{"class":39,"line":10261},[37,52279,52280],{"class":43},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[37,52282,52283,52285,52287,52289,52291,52293,52295,52297,52299,52302,52305,52307,52309],{"class":39,"line":10266},[37,52284,3753],{"class":54},[37,52286,2027],{"class":50},[37,52288,52183],{"class":54},[37,52290,9779],{"class":50},[37,52292,55],{"class":54},[37,52294,4443],{"class":61},[37,52296,9786],{"class":50},[37,52298,1418],{"class":54},[37,52300,52301],{"class":50}," arr.",[37,52303,52304],{"class":61},"length",[37,52306,3564],{"class":50},[37,52308,2649],{"class":54},[37,52310,12783],{"class":50},[37,52312,52313,52316,52318,52320],{"class":39,"line":16945},[37,52314,52315],{"class":50},"            document.",[37,52317,52264],{"class":2320},[37,52319,165],{"class":50},[37,52321,52322],{"class":185},"`\n",[37,52324,52325,52328,52330,52332,52334,52336],{"class":39,"line":16951},[37,52326,52327],{"class":185},"              \u003Cdiv style=\"height: ${",[37,52329,4230],{"class":50},[37,52331,1399],{"class":185},[37,52333,954],{"class":50},[37,52335,1448],{"class":185},[37,52337,52338],{"class":185},"}px;\">\n",[37,52340,52341,52344,52346,52348,52350,52352],{"class":39,"line":16974},[37,52342,52343],{"class":185},"                \u003Cspan>${",[37,52345,4230],{"class":50},[37,52347,1399],{"class":185},[37,52349,954],{"class":50},[37,52351,1448],{"class":185},[37,52353,52354],{"class":185},"}\u003C\u002Fspan>\n",[37,52356,52357,52360,52362,52364,52366],{"class":39,"line":16980},[37,52358,52359],{"class":185},"                \u003Ch4>第${",[37,52361,954],{"class":50},[37,52363,45903],{"class":54},[37,52365,25460],{"class":61},[37,52367,52368],{"class":185},"}季度\u003C\u002Fh4>\n",[37,52370,52371],{"class":39,"line":17003},[37,52372,52373],{"class":185},"              \u003C\u002Fdiv>          \n",[37,52375,52376,52379],{"class":39,"line":17017},[37,52377,52378],{"class":185},"            `",[37,52380,280],{"class":50},[37,52382,52383],{"class":39,"line":17037},[37,52384,2886],{"class":50},[37,52386,52387],{"class":39,"line":17043},[37,52388,52389],{"class":43},"        \u002F\u002F 盒子结尾\n",[37,52391,52392,52394,52396,52398,52401],{"class":39,"line":17054},[37,52393,52261],{"class":50},[37,52395,52264],{"class":2320},[37,52397,165],{"class":50},[37,52399,52400],{"class":185},"` \u003C\u002Fdiv>`",[37,52402,280],{"class":50},[37,52404,52405,52407,52409],{"class":39,"line":17077},[37,52406,52112],{"class":50},[37,52408,52149],{"class":51636},[37,52410,51643],{"class":50},[37,52412,52413,52415,52417],{"class":39,"line":17099},[37,52414,52121],{"class":50},[37,52416,52136],{"class":51636},[37,52418,51643],{"class":50},[37,52420,52421],{"class":39,"line":17104},[37,52422,2757],{"emptyLinePlaceholder":454},[37,52424,52425,52427,52429],{"class":39,"line":17110},[37,52426,52121],{"class":50},[37,52428,50971],{"class":51636},[37,52430,51643],{"class":50},[498,52432,52434],{"id":52433},"_284-冒泡排序","2.8.4 冒泡排序",[27,52436,52438],{"className":50969,"code":52437,"language":50971,"meta":32,"style":32},"\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",[34,52439,52440,52450,52464,52468,52476,52491,52511,52523,52531,52535,52543,52551,52583,52616,52653,52658,52677,52682,52695,52710,52726,52730,52735,52739,52749,52758,52766,52770],{"__ignoreMap":32},[37,52441,52442,52444,52446,52448],{"class":39,"line":40},[37,52443,51633],{"class":50},[37,52445,51637],{"class":51636},[37,52447,51640],{"class":2320},[37,52449,51643],{"class":50},[37,52451,52452,52454,52456,52458,52460,52462],{"class":39,"line":47},[37,52453,1418],{"class":50},[37,52455,50971],{"class":51636},[37,52457,51652],{"class":2320},[37,52459,55],{"class":50},[37,52461,51657],{"class":185},[37,52463,51643],{"class":50},[37,52465,52466],{"class":39,"line":104},[37,52467,2757],{"emptyLinePlaceholder":454},[37,52469,52470,52472,52474],{"class":39,"line":113},[37,52471,1418],{"class":50},[37,52473,51670],{"class":51636},[37,52475,51643],{"class":50},[37,52477,52478,52481,52483,52485,52487,52489],{"class":39,"line":189},[37,52479,52480],{"class":50},"  \u003C",[37,52482,51680],{"class":51636},[37,52484,51683],{"class":2320},[37,52486,55],{"class":50},[37,52488,51688],{"class":185},[37,52490,51643],{"class":50},[37,52492,52493,52495,52497,52499,52501,52503,52505,52507,52509],{"class":39,"line":195},[37,52494,52480],{"class":50},[37,52496,51680],{"class":51636},[37,52498,15261],{"class":2320},[37,52500,55],{"class":50},[37,52502,51727],{"class":185},[37,52504,51707],{"class":2320},[37,52506,55],{"class":50},[37,52508,51734],{"class":185},[37,52510,51643],{"class":50},[37,52512,52513,52515,52517,52519,52521],{"class":39,"line":201},[37,52514,52480],{"class":50},[37,52516,51743],{"class":51636},[37,52518,51746],{"class":50},[37,52520,51743],{"class":51636},[37,52522,51643],{"class":50},[37,52524,52525,52527,52529],{"class":39,"line":207},[37,52526,52121],{"class":50},[37,52528,51670],{"class":51636},[37,52530,51643],{"class":50},[37,52532,52533],{"class":39,"line":213},[37,52534,2757],{"emptyLinePlaceholder":454},[37,52536,52537,52539,52541],{"class":39,"line":218},[37,52538,1418],{"class":50},[37,52540,52136],{"class":51636},[37,52542,51643],{"class":50},[37,52544,52545,52547,52549],{"class":39,"line":227},[37,52546,52480],{"class":50},[37,52548,52149],{"class":51636},[37,52550,51643],{"class":50},[37,52552,52553,52556,52558,52560,52563,52565,52567,52569,52571,52573,52575,52577,52579,52581],{"class":39,"line":232},[37,52554,52555],{"class":54},"    let",[37,52557,52169],{"class":50},[37,52559,55],{"class":54},[37,52561,52562],{"class":50}," [",[37,52564,836],{"class":61},[37,52566,12776],{"class":50},[37,52568,168],{"class":61},[37,52570,12776],{"class":50},[37,52572,62],{"class":61},[37,52574,12776],{"class":50},[37,52576,602],{"class":61},[37,52578,12776],{"class":50},[37,52580,332],{"class":61},[37,52582,389],{"class":50},[37,52584,52585,52587,52589,52591,52593,52595,52597,52599,52601,52603,52605,52608,52610,52612,52614],{"class":39,"line":238},[37,52586,3551],{"class":54},[37,52588,2027],{"class":50},[37,52590,52183],{"class":54},[37,52592,9779],{"class":50},[37,52594,55],{"class":54},[37,52596,4443],{"class":61},[37,52598,9786],{"class":50},[37,52600,1418],{"class":54},[37,52602,52301],{"class":50},[37,52604,52304],{"class":61},[37,52606,52607],{"class":54}," -",[37,52609,25460],{"class":61},[37,52611,3564],{"class":50},[37,52613,2649],{"class":54},[37,52615,12783],{"class":50},[37,52617,52618,52621,52623,52625,52627,52629,52631,52633,52635,52637,52639,52641,52643,52645,52647,52649,52651],{"class":39,"line":244},[37,52619,52620],{"class":54},"      for",[37,52622,2027],{"class":50},[37,52624,52183],{"class":54},[37,52626,9841],{"class":50},[37,52628,55],{"class":54},[37,52630,4443],{"class":61},[37,52632,9848],{"class":50},[37,52634,1418],{"class":54},[37,52636,52301],{"class":50},[37,52638,52304],{"class":61},[37,52640,52607],{"class":54},[37,52642,9779],{"class":50},[37,52644,384],{"class":54},[37,52646,25460],{"class":61},[37,52648,9855],{"class":50},[37,52650,2649],{"class":54},[37,52652,12783],{"class":50},[37,52654,52655],{"class":39,"line":250},[37,52656,52657],{"class":43},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[37,52659,52660,52662,52665,52667,52670,52672,52674],{"class":39,"line":256},[37,52661,2854],{"class":54},[37,52663,52664],{"class":50}," (arr[j] ",[37,52666,1468],{"class":54},[37,52668,52669],{"class":50}," arr[j ",[37,52671,993],{"class":54},[37,52673,25460],{"class":61},[37,52675,52676],{"class":50},"]) {\n",[37,52678,52679],{"class":39,"line":261},[37,52680,52681],{"class":43},"          \u002F\u002F 交换两个变量\n",[37,52683,52684,52687,52690,52692],{"class":39,"line":267},[37,52685,52686],{"class":54},"          let",[37,52688,52689],{"class":50}," tmp ",[37,52691,55],{"class":54},[37,52693,52694],{"class":50}," arr[j]\n",[37,52696,52697,52700,52702,52704,52706,52708],{"class":39,"line":283},[37,52698,52699],{"class":50},"          arr[j] ",[37,52701,55],{"class":54},[37,52703,52669],{"class":50},[37,52705,993],{"class":54},[37,52707,25460],{"class":61},[37,52709,389],{"class":50},[37,52711,52712,52715,52717,52719,52721,52723],{"class":39,"line":288},[37,52713,52714],{"class":50},"          arr[j ",[37,52716,993],{"class":54},[37,52718,25460],{"class":61},[37,52720,4793],{"class":50},[37,52722,55],{"class":54},[37,52724,52725],{"class":50}," tmp\n",[37,52727,52728],{"class":39,"line":294},[37,52729,2886],{"class":50},[37,52731,52732],{"class":39,"line":300},[37,52733,52734],{"class":50},"      }\n",[37,52736,52737],{"class":39,"line":306},[37,52738,2544],{"class":50},[37,52740,52741,52744,52746],{"class":39,"line":312},[37,52742,52743],{"class":50},"    document.",[37,52745,52264],{"class":2320},[37,52747,52748],{"class":50},"(arr)\n",[37,52750,52751,52754,52756],{"class":39,"line":317},[37,52752,52753],{"class":50},"  \u003C\u002F",[37,52755,52149],{"class":51636},[37,52757,51643],{"class":50},[37,52759,52760,52762,52764],{"class":39,"line":323},[37,52761,52121],{"class":50},[37,52763,52136],{"class":51636},[37,52765,51643],{"class":50},[37,52767,52768],{"class":39,"line":337},[37,52769,2757],{"emptyLinePlaceholder":454},[37,52771,52772,52774,52776],{"class":39,"line":342},[37,52773,52121],{"class":50},[37,52775,50971],{"class":51636},[37,52777,51643],{"class":50},[14,52779,52780],{},[1838,52781],{"alt":32,"src":52782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52784,52785],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52787,52788],{},"let arr = [4, 2, 5, 1, 3]",[14,52790,52791],{},"\u002F\u002F 1.升序排列写法",[14,52793,52794],{},"arr.sort(function (a, b) {",[14,52796,52797],{},"return a - b",[14,52799,52800],{},"})",[14,52802,52803],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52805,52806],{},"\u002F\u002F 降序排列写法",[14,52808,52794],{},[14,52810,52811],{},"return b - a",[14,52813,52800],{},[14,52815,52816],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[469,52818,52820],{"id":52819},"_29-函数","2.9 函数",[14,52822,52823],{},[1838,52824],{"alt":32,"src":52825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52827,52828],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52830,52831],{},"函数的声明用function",[14,52833,52834],{},"函数里边可以嵌套函数",[498,52836,52838],{"id":52837},"_291-函数传参","2.9.1 函数传参",[14,52840,52841],{},[1838,52842],{"alt":32,"src":52843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52845,52846],{},[1838,52847],{"alt":32,"src":52848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1515,52850,52851,52854,52857,52860,52863,52866],{},[484,52852,52853],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[484,52855,52856],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[484,52858,52859],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[484,52861,52862],{},"开发中尽量保持形参和实参个数一致",[484,52864,52865],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[484,52867,52868],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52870,52871],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[498,52873,52875],{"id":52874},"_292-函数的返回值","2.9.2 函数的返回值",[14,52877,52878],{},[1838,52879],{"alt":32,"src":52880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52882,52883],{},[1838,52884],{"alt":32,"src":52885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1515,52887,52888,52891,52894,52897,52900],{},[484,52889,52890],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[484,52892,52893],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[484,52895,52896],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[484,52898,52899],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[484,52901,52902],{},"断点调试:进入函数内部看执行过程F11",[498,52904,52906],{"id":52905},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[27,52908,52910],{"className":50969,"code":52909,"language":50971,"meta":32,"style":32},"    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",[34,52911,52912,52917,52922,52926,52931],{"__ignoreMap":32},[37,52913,52914],{"class":39,"line":40},[37,52915,52916],{"class":50},"    function fn(a, b) {\n",[37,52918,52919],{"class":39,"line":47},[37,52920,52921],{"class":50},"      console.log(a + b);\n",[37,52923,52924],{"class":39,"line":104},[37,52925,2544],{"class":50},[37,52927,52928],{"class":39,"line":113},[37,52929,52930],{"class":50},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[37,52932,52933],{"class":39,"line":189},[37,52934,52935],{"class":50},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[498,52937,52939],{"id":52938},"_294-作用域","2.9.4 作用域",[1515,52941,52942,52948,52953,52956,52959],{},[484,52943,52944,52945],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[673,52946,52947],{},"作用域",[484,52949,52950],{},[673,52951,52952],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[484,52954,52955],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[484,52957,52958],{},"函数内部可以直接所使用全局变量",[484,52960,52961],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52963,14974],{},[27,52965,52967],{"className":50969,"code":52966,"language":50971,"meta":32,"style":32},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[34,52968,52969,52974,52979,52983,52988,52993,52998],{"__ignoreMap":32},[37,52970,52971],{"class":39,"line":40},[37,52972,52973],{"class":50},"    function fun() {\n",[37,52975,52976],{"class":39,"line":47},[37,52977,52978],{"class":50},"      num = 10\n",[37,52980,52981],{"class":39,"line":104},[37,52982,2544],{"class":50},[37,52984,52985],{"class":39,"line":113},[37,52986,52987],{"class":50},"    fun()\n",[37,52989,52990],{"class":39,"line":189},[37,52991,52992],{"class":50},"    console.log(num)\n",[37,52994,52995],{"class":39,"line":195},[37,52996,52997],{"class":50},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[37,52999,53000],{"class":39,"line":201},[37,53001,53002],{"class":50},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1515,53004,53005,53008],{},[484,53006,53007],{},"函数内部的形参可以看做是局部变量",[484,53009,53010],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,53012,53013,53014],{},"变量访问原则： ",[673,53015,53016],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[498,53018,53020],{"id":53019},"_295-匿名函数","2.9.5 匿名函数",[14,53022,53023],{},"函数可以分为具名函数和匿名函数",[14,53025,53026],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[481,53028,53029],{},[484,53030,53031],{},"函数表达式",[14,53033,53034],{},[1838,53035],{"alt":32,"src":53036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,53038,53039],{},"里边也可以写参数",[14,53041,53042],{},"具名函数调用位置可以随意调整；",[14,53044,53045],{},"匿名函数函数表达式形式只能在声明后才可以使用",[481,53047,53048],{"start":47},[484,53049,53050],{},"立即执行函数",[14,53052,53053],{},[1838,53054],{"alt":32,"src":53055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,53057,53058],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,53060,53061],{},"写法：两个小括号，然后在第一个小括号中写function",[14,53063,53064],{},"(function () {})();",[14,53066,53067],{},"不要落下最后的;",[14,53069,53070],{},"立即执行函数必须要加;",[14,53072,53073],{},"分号写前写后都没问题",[14,53075,53076],{},"写前：",[14,53078,53079],{},"(function() {})()",[14,53081,53082],{},";(function () {})();",[14,53084,53085],{},"写后:",[14,53087,53088],{},"(function() {})();",[14,53090,53064],{},[14,53092,53093],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,53095,53096],{},"还有一种写法：",[14,53098,53099],{},"(function(){}());",[14,53101,53102],{},"或者:",[14,53104,53105],{},"!function(){}();",[14,53107,53108],{},"立即执行函数有时候也是可以加名字的：",[14,53110,53111],{},"(function flexible(window,document) {}(window,document));",[14,53113,53114],{},"省一些调用方法",[498,53116,53118],{"id":53117},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,53120,53121],{},[1838,53122],{"alt":32,"src":53123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,53125,53126],{},"这样就不用非得给x,y初始化了",[14,53128,53129],{},[1838,53130],{"alt":32,"src":53131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,53133,53134],{},"代码执行时先看左边",[14,53136,53137],{},"例如：console.log(false && 3+5)",[14,53139,53140],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,53142,53143],{},"&&都是真时，就返回最后一个真值",[14,53145,53146],{},"console.log(11 && 22)",[14,53148,53149],{},"输出22",[14,53151,53152],{},"逻辑与：遇真则真",[14,53154,14974],{},[14,53156,53157],{},"let age=1",[14,53159,53160],{},"console.log(11 || age++)",[14,53162,53163],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,53165,53166],{},"console.log(11 || 22)",[14,53168,53169],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,53171,53172],{},"||如果都是假的话，就取最后一个假的值了",[498,53174,53176],{"id":53175},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,53178,53179],{},"显示转换：",[14,53181,53182,53185,53186],{},[673,53183,53184],{},"记忆","： ",[673,53187,53188],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,53190,53191],{},"空字符串为假，其他字符串全为真",[14,53193,53194],{},[1838,53195],{"alt":32,"src":53196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,53198,53199],{},"隐式转换：",[14,53201,53202],{},[1838,53203],{"alt":32,"src":53204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,53206,53207],{},"隐式转换:",[14,53209,53210],{},"null+3=3",[14,53212,53213],{},"undefined+3=NaN",[14,53215,53216],{},"null==undefined 输出true,他两个都当0看",[14,53218,53219],{},"null===undefined 输出false",[14,53221,53222],{},"undefined做任何操作都是NaN",[14,53224,53225],{},"NaN不等于NaN，NaN表示计算错误",[469,53227,53229],{"id":53228},"_210-对象","2.10 对象",[498,53231,53233],{"id":53232},"_2101-对象的介绍","2.10.1 对象的介绍",[14,53235,53236],{},"对象也是一种数据类型，里边的数据是无序的",[14,53238,53239],{},"对象由属性和方法组成",[14,53241,53242],{},[1838,53243],{"alt":32,"src":53244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,53246,53247],{},[1838,53248],{"alt":32,"src":53249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,53251,53252],{},[1838,53253],{"alt":32,"src":53254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[498,53256,53258],{"id":53257},"_2102-对象属性","2.10.2 对象属性",[14,53260,53261],{},[1838,53262],{"alt":32,"src":53263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[481,53265,53266],{},[484,53267,53268],{},"查询对象",[14,53270,53271],{},"对象名.属性 goods.uname",[14,53273,53274],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53276,53277],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53279,53280],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53282,53283],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[481,53285,53286],{"start":47},[484,53287,53288],{},"重新赋值",[14,53290,53291],{},"对象名.属性=新值",[481,53293,53294],{"start":104},[484,53295,53296],{},"增加新数据",[14,53298,53291],{},[481,53300,53301],{"start":113},[484,53302,53303],{},"删除对象中的属性",[14,53305,53306],{},"delete 对象名.属性",[498,53308,53310],{"id":53309},"_2103-对象方法","2.10.3 对象方法",[14,53312,53313],{},[1838,53314],{"alt":32,"src":53315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53317,53318],{},"后边跟的是匿名函数",[14,53320,53321],{},"对象外面的叫函数；对象内部的叫方法",[14,53323,53324],{},[1838,53325],{"alt":32,"src":53326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[498,53328,53330],{"id":53329},"_2104-遍历对象","2.10.4 遍历对象",[14,53332,53333],{},"理解为加括号的python字典遍历",[14,53335,53336],{},[1838,53337],{"alt":32,"src":53338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53340,53341],{},"k是字符串类型",[14,53343,53344],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[27,53346,53348],{"className":50969,"code":53347,"language":50971,"meta":32,"style":32},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[34,53349,53350,53355,53360,53365,53370],{"__ignoreMap":32},[37,53351,53352],{"class":39,"line":40},[37,53353,53354],{"class":50},"   let arr = [1, 2, 3]\n",[37,53356,53357],{"class":39,"line":47},[37,53358,53359],{"class":50},"    for (let k in arr) {\n",[37,53361,53362],{"class":39,"line":104},[37,53363,53364],{"class":50},"      console.log(k)\n",[37,53366,53367],{"class":39,"line":113},[37,53368,53369],{"class":50},"      console.log(arr[k])\n",[37,53371,53372],{"class":39,"line":189},[37,53373,2544],{"class":50},[14,53375,53376],{},[1838,53377],{"alt":32,"src":53378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53380,53381],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53383,53384],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53386,53387],{},"for in 得到的k是属性名",[52149,53389,53390],{},"\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",[14,53392,53393],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[498,53395,53397],{"id":53396},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53399,53400],{},"数组中放对象信息",[27,53402,53406],{"className":53403,"code":53404,"language":53405,"meta":32,"style":32},"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",[34,53407,53408,53416,53421,53426,53431,53436,53441,53446,53451,53456,53461,53466,53471,53475,53479],{"__ignoreMap":32},[37,53409,53410,53412,53414],{"class":39,"line":40},[37,53411,1418],{"class":50},[37,53413,52149],{"class":51636},[37,53415,51643],{"class":50},[37,53417,53418],{"class":39,"line":47},[37,53419,53420],{"class":50},"    let students = [\n",[37,53422,53423],{"class":39,"line":104},[37,53424,53425],{"class":50},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[37,53427,53428],{"class":39,"line":113},[37,53429,53430],{"class":50},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[37,53432,53433],{"class":39,"line":189},[37,53434,53435],{"class":50},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[37,53437,53438],{"class":39,"line":195},[37,53439,53440],{"class":50},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[37,53442,53443],{"class":39,"line":201},[37,53444,53445],{"class":50},"    ]\n",[37,53447,53448],{"class":39,"line":207},[37,53449,53450],{"class":50},"    for (let i = 0; i \u003C students.length; i++) {\n",[37,53452,53453],{"class":39,"line":213},[37,53454,53455],{"class":50},"      for (let k in students[i]) {\n",[37,53457,53458],{"class":39,"line":218},[37,53459,53460],{"class":50},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[37,53462,53463],{"class":39,"line":227},[37,53464,53465],{"class":50},"        \u002F\u002F输出每个人的名字：\n",[37,53467,53468],{"class":39,"line":232},[37,53469,53470],{"class":50},"        \u002F\u002Fconsole.log(students[i].name)\n",[37,53472,53473],{"class":39,"line":238},[37,53474,52734],{"class":50},[37,53476,53477],{"class":39,"line":244},[37,53478,2544],{"class":50},[37,53480,53481,53483,53485],{"class":39,"line":250},[37,53482,52753],{"class":50},[37,53484,52149],{"class":51636},[37,53486,51643],{"class":50},[498,53488,53490],{"id":53489},"_2106-内置对象","2.10.6 内置对象",[14,53492,53493],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[481,53495,53496],{},[484,53497,53498],{},"数学对象Math",[14,53500,53501],{},[1838,53502],{"alt":32,"src":53503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53505,53506],{},[51,53507,53510],{"href":53508,"rel":53509},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24206],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53512,53513],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53515,53516],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53518,53519],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53521,53522],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53524,53525],{},"null属于对象数据类型",[481,53527,53528],{"start":47},[484,53529,53530],{},"生成任意范围随机数",[14,53532,53533],{},[1838,53534],{"alt":32,"src":53535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53537,53538],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53540,53541],{},"乘以几就取不到几",[14,53543,53544],{},"取数组中的随机元素：",[14,53546,53547],{},"let arr = ['red', 'green', 'blue']",[14,53549,53550],{},"let random = Math.floor(Math.random() * arr.length)",[14,53552,53553],{},"console.log(arr[random])",[14,53555,53556],{},"这个函数得到的是全闭区间",[14,53558,53559],{},"function getRandom(N, M) {",[14,53561,53562],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53564,1454],{},[14,53566,53567],{},"console.log(getRandom(4, 8))",[498,53569,53571],{"id":53570},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53573,53574],{},[1838,53575],{"alt":32,"src":53576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53578,53579],{},[1838,53580],{"alt":32,"src":53581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53583,53584],{},[1838,53585],{"alt":32,"src":53586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53588,53589],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53591,53592],{},[1838,53593],{"alt":32,"src":53594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53596,53597],{},[1838,53598],{"alt":32,"src":53599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53601,53602],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53604,53605],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53607,53608],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[446,53610,53611],{},"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":32,"searchDepth":47,"depth":47,"links":53613},[53614,53622,53623,53624,53625,53626,53633,53637,53643,53652],{"id":50804,"depth":47,"text":50805,"children":53615},[53616,53617,53618,53619,53620,53621],{"id":50808,"depth":104,"text":50809},{"id":50825,"depth":104,"text":50826},{"id":50865,"depth":104,"text":50866},{"id":50877,"depth":104,"text":50878},{"id":50886,"depth":104,"text":50887},{"id":50934,"depth":104,"text":50935},{"id":50944,"depth":47,"text":50945},{"id":51032,"depth":47,"text":51033},{"id":51055,"depth":47,"text":51056},{"id":51067,"depth":47,"text":51068},{"id":51254,"depth":47,"text":51255,"children":53627},[53628,53629,53630,53631,53632],{"id":51258,"depth":104,"text":51259},{"id":51267,"depth":104,"text":51268},{"id":51295,"depth":104,"text":51296},{"id":51331,"depth":104,"text":51332},{"id":51356,"depth":104,"text":51357},{"id":51368,"depth":47,"text":51369,"children":53634},[53635,53636],{"id":51389,"depth":104,"text":51390},{"id":51483,"depth":104,"text":51484},{"id":51541,"depth":47,"text":51542,"children":53638},[53639,53640,53641,53642],{"id":51545,"depth":104,"text":51546},{"id":51569,"depth":104,"text":51570},{"id":51622,"depth":104,"text":51623},{"id":52433,"depth":104,"text":52434},{"id":52819,"depth":47,"text":52820,"children":53644},[53645,53646,53647,53648,53649,53650,53651],{"id":52837,"depth":104,"text":52838},{"id":52874,"depth":104,"text":52875},{"id":52905,"depth":104,"text":52906},{"id":52938,"depth":104,"text":52939},{"id":53019,"depth":104,"text":53020},{"id":53117,"depth":104,"text":53118},{"id":53175,"depth":104,"text":53176},{"id":53228,"depth":47,"text":53229,"children":53653},[53654,53655,53656,53657,53658,53659,53660],{"id":53232,"depth":104,"text":53233},{"id":53257,"depth":104,"text":53258},{"id":53309,"depth":104,"text":53310},{"id":53329,"depth":104,"text":53330},{"id":53396,"depth":104,"text":53397},{"id":53489,"depth":104,"text":53490},{"id":53570,"depth":104,"text":53571},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50796,"description":451},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53667,"title":53668,"body":53669,"description":451,"extension":452,"meta":77008,"navigation":454,"path":77009,"seo":77010,"stem":77011,"__hash__":77012},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53670,"toc":76948},[53671,53674,53677,53680,53685,53688,53691,53694,53698,53702,53708,53713,53721,53728,53731,53735,53740,53745,53750,53753,53756,53767,53770,53774,53777,53780,53785,53790,53795,53798,53801,53893,53896,53901,53904,53909,53912,53915,53920,53923,53928,53932,53935,53949,53953,53958,53961,53964,53968,53973,53976,53980,53984,53989,53993,53998,54001,54004,54007,54010,54013,54016,54021,54026,54054,54057,54060,54063,54068,54071,54074,54077,54080,54084,54113,54117,54122,54127,54130,54133,54136,54141,54256,54261,54266,54427,54432,54435,54439,54444,54449,54452,54455,54458,54461,54464,54467,54470,54473,54476,54479,54482,54485,54488,54491,54493,54496,54499,54502,54507,54511,54908,54911,54917,54921,54926,56208,56213,56216,56219,56222,56227,57423,57427,57433,57438,57441,57446,57451,57455,57459,57464,57467,57472,57475,57478,57482,58390,58393,58397,58618,58621,58624,58627,58853,58856,59080,59083,59087,59092,59095,59098,59326,59329,59362,59365,59369,59374,59378,59381,59384,59387,59390,59393,59396,59399,59404,60684,60688,60691,61784,61788,61791,61794,61797,61800,61804,61807,61810,61812,61820,63301,63305,63308,63311,63314,63523,63526,63530,63534,63539,63544,63547,63550,63555,63559,63564,63567,63676,63680,63685,63690,63693,63696,63700,63705,63710,63715,63718,63721,63732,63735,63740,63745,63748,63751,63824,63828,63833,63836,63838,63849,63853,63858,65184,65187,65190,65193,65195,65198,65201,65204,65207,65210,65213,65216,65219,65222,65225,65228,65231,65233,65235,65238,65242,66336,66339,66342,66358,66372,66375,66380,66386,66391,66395,66399,66404,66408,66413,66855,66860,66863,66867,66872,66875,66878,66882,66887,66891,66896,66901,66905,66910,66915,66918,66923,66928,66932,66937,66942,67046,67049,67053,67058,67424,67427,67430,67433,67436,67439,67442,67445,67448,68744,68748,68753,68758,68761,68764,68767,68770,68772,68777,68782,68785,68789,68794,68799,68804,68807,68810,68813,68816,68819,68824,68827,68831,68836,68841,68845,68850,68853,68858,68861,68864,68867,68870,68873,68878,68881,68884,68887,68890,68894,68899,68902,68906,68911,68914,68917,68921,68950,68953,68957,68961,68966,68970,68975,68978,68981,68984,68987,68990,68993,68996,68999,69002,69005,69008,69011,69014,69017,69021,69026,69031,69034,69038,69042,69047,69050,69054,69057,69060,69065,69070,69075,69080,69085,69088,69091,69096,69101,69105,69110,69113,69118,69121,69124,69127,69130,69135,69138,69147,69151,69156,69159,69162,69166,69169,69174,69178,69181,69187,69193,69197,69223,69226,70787,70790,71286,71289,71294,71299,71304,71308,71313,71318,71323,71327,71332,71335,71338,71341,71344,71348,71351,71356,71359,71364,71368,71373,71376,71381,71386,71391,71394,71397,71402,71407,71410,71413,71417,71420,71425,71428,71433,71436,71441,71446,71451,71454,71459,71524,71527,71538,71542,71547,71719,71723,71728,71731,71734,71737,71741,71752,71756,71759,71764,71769,71772,71775,71778,71781,71784,71786,71789,71792,71795,71800,71803,71808,71811,71815,71818,71821,71835,71839,71842,71897,71902,71905,71908,71913,71916,71920,71925,72055,72059,72064,72069,72150,72155,72159,72162,72167,72172,72178,72181,72184,72187,72191,72196,72199,72210,72214,72231,75277,75281,75284,75287,75290,75311,75315,75318,75326,75329,75334,75337,75340,75345,75350,75354,75375,75379,75384,75387,75390,75393,75396,75400,75405,75408,75412,75417,75420,75425,75428,75433,75436,75441,76644,76648,76653,76656,76661,76945],[10,53672,53668],{"id":53673},"_3web-apis",[14,53675,53676],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53678,53679],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53681,53682],{},[1838,53683],{"alt":32,"src":53684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53686,53687],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53689,53690],{},"建议数组和对象使用 const 来声明",[14,53692,53693],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[469,53695,53697],{"id":53696},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[498,53699,53701],{"id":53700},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53703,53704,53707],{},[34,53705,53706],{},"document"," = HTML 文件解析后的对象化表示；",[14,53709,53710,53712],{},[34,53711,53706],{}," ≠ HTML 文件本身",[14,53714,53715,53720],{},[673,53716,53717],{},[34,53718,53719],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53722,53723,53727],{},[673,53724,53725],{},[34,53726,53706],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53729,53730],{},"document实际上为window.document的简写",[498,53732,53734],{"id":53733},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53736,53737],{},[1838,53738],{"alt":32,"src":53739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53741,53742],{},[1838,53743],{"alt":32,"src":53744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53746,53747],{},[1838,53748],{"alt":32,"src":53749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53751,53752],{},"console.dir()",[14,53754,53755],{},"dir用来打印对象",[1515,53757,53758,53761,53764],{},[484,53759,53760],{},"任何一个标签，都是一个对象",[484,53762,53763],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[484,53765,53766],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53768,53769],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[498,53771,53773],{"id":53772},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53775,53776],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53778,53779],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53781,53782],{},[673,53783,53784],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[481,53786,53787],{},[484,53788,53789],{},"利用CSS选择器来获取标签元素",[14,53791,53792],{},[1838,53793],{"alt":32,"src":53794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53796,53797],{},"里边的选择器必须必须加引号！！！",[14,53799,53800],{},"只选择第一个元素",[27,53802,53804],{"className":53403,"code":53803,"language":53405,"meta":32,"style":32},"\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",[34,53805,53806,53814,53835,53854,53862,53867,53872,53877,53885],{"__ignoreMap":32},[37,53807,53808,53810,53812],{"class":39,"line":40},[37,53809,1418],{"class":50},[37,53811,52136],{"class":51636},[37,53813,51643],{"class":50},[37,53815,53816,53818,53820,53823,53825,53828,53831,53833],{"class":39,"line":47},[37,53817,52480],{"class":50},[37,53819,51947],{"class":51636},[37,53821,53822],{"class":2320}," class",[37,53824,55],{"class":50},[37,53826,53827],{"class":185},"\"box\"",[37,53829,53830],{"class":50},">123\u003C\u002F",[37,53832,51947],{"class":51636},[37,53834,51643],{"class":50},[37,53836,53837,53839,53841,53843,53845,53847,53850,53852],{"class":39,"line":104},[37,53838,52480],{"class":50},[37,53840,51947],{"class":51636},[37,53842,53822],{"class":2320},[37,53844,55],{"class":50},[37,53846,53827],{"class":185},[37,53848,53849],{"class":50},">456\u003C\u002F",[37,53851,51947],{"class":51636},[37,53853,51643],{"class":50},[37,53855,53856,53858,53860],{"class":39,"line":113},[37,53857,52480],{"class":50},[37,53859,52149],{"class":51636},[37,53861,51643],{"class":50},[37,53863,53864],{"class":39,"line":189},[37,53865,53866],{"class":50},"    \u002F\u002F 1.获取匹配的第一个元素\n",[37,53868,53869],{"class":39,"line":195},[37,53870,53871],{"class":50},"    const box = document.querySelector('div')\n",[37,53873,53874],{"class":39,"line":201},[37,53875,53876],{"class":50},"    console.dir(box)\n",[37,53878,53879,53881,53883],{"class":39,"line":207},[37,53880,52753],{"class":50},[37,53882,52149],{"class":51636},[37,53884,51643],{"class":50},[37,53886,53887,53889,53891],{"class":39,"line":213},[37,53888,52121],{"class":50},[37,53890,52136],{"class":51636},[37,53892,51643],{"class":50},[14,53894,53895],{},"只选123，不选456",[14,53897,53898],{},[1838,53899],{"alt":32,"src":53900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53902,53903],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53905,53906],{},[1838,53907],{"alt":32,"src":53908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53910,53911],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53913,53914],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[481,53916,53917],{"start":47},[484,53918,53919],{},"其他方法来获取标签元素",[14,53921,53922],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53924,53925],{},[1838,53926],{"alt":32,"src":53927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[498,53929,53931],{"id":53930},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53933,53934],{},"设置修改DOM元素内容有两种方式：",[1515,53936,53937,53940,53943,53946],{},[484,53938,53939],{},"元素.innerText=''",[484,53941,53942],{},"元素.innerHTML=''",[484,53944,53945],{},"不写字符串输出数字也是可以的",[484,53947,53948],{},"元素.innerHtml=1",[22339,53950,53952],{"id":53951},"_3131-innertext","3.1.3.1 innerText",[14,53954,53955],{},[1838,53956],{"alt":32,"src":53957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53959,53960],{},"思路：实现了修改盒子中的内容！",[14,53962,53963],{},"它只显示纯文本，不解析标签",[22339,53965,53967],{"id":53966},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53969,53970],{},[1838,53971],{"alt":32,"src":53972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53974,53975],{},"相比于innerText，他的强大之处在于可以解析标签",[498,53977,53979],{"id":53978},"_314-操作元素属性","3.1.4 操作元素属性",[22339,53981,53983],{"id":53982},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53985,53986],{},[1838,53987],{"alt":32,"src":53988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22339,53990,53992],{"id":53991},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53994,53995],{},[1838,53996],{"alt":32,"src":53997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53999,54000],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,54002,54003],{},"div.style.backgroundColor = 'hotpink'",[14,54005,54006],{},"如果按照css的写法，-表示减，就会出错",[14,54008,54009],{},"body元素不需要再获取，直接用就行！！！！！！",[14,54011,54012],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,54014,54015],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,54017,54018],{},[1838,54019],{"alt":32,"src":54020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,54022,54023],{},[1838,54024],{"alt":32,"src":54025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[481,54027,54028,54031,54034,54037,54040,54043],{},[484,54029,54030],{},"className这个方式就是修改很多样式的时候来使用的！",[484,54032,54033],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[484,54035,54036],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[484,54038,54039],{},"className为属性名，如果还用class的话就导致与关键字冲突",[484,54041,54042],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[484,54044,54045,54046,54051],{},"解析标签的时候就变为了",[51947,54047],{"className":54048},[54049,54050],"nav","box",[54052,54053],"br",{},[14,54055,54056],{},"例子：",[51947,54058],{"className":54059},[54049],[52149,54061,54062],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,54064,54065],{},[1838,54066],{"alt":32,"src":54067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,54069,54070],{},"追加和删除类名用classList",[14,54072,54073],{},"常用于类似于开关的操作",[14,54075,54076],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,54078,54079],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22339,54081,54083],{"id":54082},"_3143-牢记点","3.1.4.3 牢记点",[481,54085,54086,54089,54092,54095,54098,54101,54104,54107,54110],{},[484,54087,54088],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[484,54090,54091],{},"使用style属性操作css时不要忘记引号",[484,54093,54094],{},"使用className或者classList时也不要忘记引号",[484,54096,54097],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[484,54099,54100],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[484,54102,54103],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[484,54105,54106],{},"若： let arr=['1','2',3] arr[0]=1",[484,54108,54109],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[484,54111,54112],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[498,54114,54116],{"id":54115},"_315-操作表单元素","3.1.5 操作表单元素",[481,54118,54119],{},[484,54120,54121],{},"天生的属性",[14,54123,54124],{},[1838,54125],{"alt":32,"src":54126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,54128,54129],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,54131,54132],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,54134,54135],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,54137,54138],{},[1838,54139],{"alt":32,"src":54140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[27,54142,54144],{"className":50969,"code":54143,"language":50971,"meta":32,"style":32},"在复选框中如果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",[34,54145,54146,54151,54183,54188,54193,54198,54203,54207,54212,54217,54234,54246,54251],{"__ignoreMap":32},[37,54147,54148],{"class":39,"line":40},[37,54149,54150],{"class":50},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[37,54152,54153,54155,54158,54161,54163,54166,54168,54170,54172,54174,54176,54178,54181],{"class":39,"line":47},[37,54154,1418],{"class":50},[37,54156,54157],{"class":51636},"input",[37,54159,54160],{"class":2320}," type",[37,54162,55],{"class":50},[37,54164,54165],{"class":185},"\"checkbox\"",[37,54167,15261],{"class":2320},[37,54169,55],{"class":50},[37,54171,8000],{"class":185},[37,54173,15300],{"class":2320},[37,54175,55],{"class":50},[37,54177,8000],{"class":185},[37,54179,54180],{"class":2320}," checked",[37,54182,51643],{"class":50},[37,54184,54185],{"class":39,"line":104},[37,54186,54187],{"class":50},"不选的话：\n",[37,54189,54190],{"class":39,"line":113},[37,54191,54192],{"class":50},"const input = document.querySelector('input')\n",[37,54194,54195],{"class":39,"line":189},[37,54196,54197],{"class":50},"input.checked=false\n",[37,54199,54200],{"class":39,"line":195},[37,54201,54202],{"class":50},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[37,54204,54205],{"class":39,"line":201},[37,54206,2757],{"emptyLinePlaceholder":454},[37,54208,54209],{"class":39,"line":207},[37,54210,54211],{"class":50},"禁用按钮：\n",[37,54213,54214],{"class":39,"line":213},[37,54215,54216],{"class":50},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[37,54218,54219,54221,54224,54227,54230,54232],{"class":39,"line":218},[37,54220,1418],{"class":50},[37,54222,54223],{"class":51636},"button",[37,54225,54226],{"class":2320}," disabled",[37,54228,54229],{"class":50},">点击\u003C\u002F",[37,54231,54223],{"class":51636},[37,54233,51643],{"class":50},[37,54235,54236,54238,54240,54242,54244],{"class":39,"line":227},[37,54237,1418],{"class":50},[37,54239,54223],{"class":51636},[37,54241,54229],{"class":50},[37,54243,54223],{"class":51636},[37,54245,51643],{"class":50},[37,54247,54248],{"class":39,"line":232},[37,54249,54250],{"class":50},"const bt = document.querySelector('button')\n",[37,54252,54253],{"class":39,"line":238},[37,54254,54255],{"class":50},"bt.disabled = false\n",[481,54257,54258],{"start":47},[484,54259,54260],{},"自定义属性",[14,54262,54263],{},[1838,54264],{"alt":32,"src":54265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[27,54267,54269],{"className":53403,"code":54268,"language":53405,"meta":32,"style":32},"\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",[34,54270,54271,54279,54307,54326,54345,54364,54383,54391,54396,54401,54406,54411,54419],{"__ignoreMap":32},[37,54272,54273,54275,54277],{"class":39,"line":40},[37,54274,1418],{"class":50},[37,54276,52136],{"class":51636},[37,54278,51643],{"class":50},[37,54280,54281,54283,54285,54288,54290,54292,54295,54297,54300,54303,54305],{"class":39,"line":47},[37,54282,52480],{"class":50},[37,54284,51947],{"class":51636},[37,54286,54287],{"class":2320}," data-id",[37,54289,55],{"class":50},[37,54291,4028],{"class":185},[37,54293,54294],{"class":2320}," data-spm",[37,54296,55],{"class":50},[37,54298,54299],{"class":185},"\"我不知道\"",[37,54301,54302],{"class":50},">1\u003C\u002F",[37,54304,51947],{"class":51636},[37,54306,51643],{"class":50},[37,54308,54309,54311,54313,54315,54317,54319,54322,54324],{"class":39,"line":104},[37,54310,52480],{"class":50},[37,54312,51947],{"class":51636},[37,54314,54287],{"class":2320},[37,54316,55],{"class":50},[37,54318,4051],{"class":185},[37,54320,54321],{"class":50},">2\u003C\u002F",[37,54323,51947],{"class":51636},[37,54325,51643],{"class":50},[37,54327,54328,54330,54332,54334,54336,54338,54341,54343],{"class":39,"line":113},[37,54329,52480],{"class":50},[37,54331,51947],{"class":51636},[37,54333,54287],{"class":2320},[37,54335,55],{"class":50},[37,54337,4064],{"class":185},[37,54339,54340],{"class":50},">3\u003C\u002F",[37,54342,51947],{"class":51636},[37,54344,51643],{"class":50},[37,54346,54347,54349,54351,54353,54355,54357,54360,54362],{"class":39,"line":189},[37,54348,52480],{"class":50},[37,54350,51947],{"class":51636},[37,54352,54287],{"class":2320},[37,54354,55],{"class":50},[37,54356,4077],{"class":185},[37,54358,54359],{"class":50},">4\u003C\u002F",[37,54361,51947],{"class":51636},[37,54363,51643],{"class":50},[37,54365,54366,54368,54370,54372,54374,54376,54379,54381],{"class":39,"line":195},[37,54367,52480],{"class":50},[37,54369,51947],{"class":51636},[37,54371,54287],{"class":2320},[37,54373,55],{"class":50},[37,54375,4098],{"class":185},[37,54377,54378],{"class":50},">5\u003C\u002F",[37,54380,51947],{"class":51636},[37,54382,51643],{"class":50},[37,54384,54385,54387,54389],{"class":39,"line":201},[37,54386,52480],{"class":50},[37,54388,52149],{"class":51636},[37,54390,51643],{"class":50},[37,54392,54393],{"class":39,"line":207},[37,54394,54395],{"class":50},"    const one = document.querySelector('div')\n",[37,54397,54398],{"class":39,"line":213},[37,54399,54400],{"class":50},"    console.log(one.dataset)\n",[37,54402,54403],{"class":39,"line":218},[37,54404,54405],{"class":50},"    console.log(one.dataset.id)\n",[37,54407,54408],{"class":39,"line":227},[37,54409,54410],{"class":50},"    console.log(one.dataset.spm)\n",[37,54412,54413,54415,54417],{"class":39,"line":232},[37,54414,52753],{"class":50},[37,54416,52149],{"class":51636},[37,54418,51643],{"class":50},[37,54420,54421,54423,54425],{"class":39,"line":238},[37,54422,52121],{"class":50},[37,54424,52136],{"class":51636},[37,54426,51643],{"class":50},[14,54428,54429],{},[1838,54430],{"alt":32,"src":54431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54433,54434],{},"document.querySelector选择的是第一个对象（元素）",[498,54436,54438],{"id":54437},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54440,54441],{},[1838,54442],{"alt":32,"src":54443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54445,54446],{},[1838,54447],{"alt":32,"src":54448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54450,54451],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52149,54453,54454],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54456,54457],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52149,54459,54460],{},"\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",[14,54462,54463],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54465,54466],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54468,54469],{},"单位为毫秒！！！",[14,54471,54472],{},"可以搭配匿名函数来用！！！",[14,54474,54475],{},"setInterval(function () {",[14,54477,54478],{},"alert('两秒执行一次')",[14,54480,54481],{},"}, 2000)",[14,54483,54484],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54486,54487],{},"function fn() {",[14,54489,54490],{},"document.write(1)",[14,54492,1454],{},[14,54494,54495],{},"setInterval(fn, 1000)",[14,54497,54498],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54500,54501],{},"setInterval('fn()', 1000)",[14,54503,54504],{},[1838,54505],{"alt":32,"src":54506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22339,54508,54510],{"id":54509},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[27,54512,54514],{"className":50969,"code":54513,"language":50971,"meta":32,"style":32},"\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",[34,54515,54516,54526,54540,54544,54552,54566,54586,54598,54606,54610,54618,54655,54660,54665,54670,54678,54686,54708,54716,54721,54743,54748,54753,54764,54769,54789,54797,54812,54827,54838,54843,54853,54863,54867,54876,54880,54888,54896,54900],{"__ignoreMap":32},[37,54517,54518,54520,54522,54524],{"class":39,"line":40},[37,54519,51633],{"class":50},[37,54521,51637],{"class":51636},[37,54523,51640],{"class":2320},[37,54525,51643],{"class":50},[37,54527,54528,54530,54532,54534,54536,54538],{"class":39,"line":47},[37,54529,1418],{"class":50},[37,54531,50971],{"class":51636},[37,54533,51652],{"class":2320},[37,54535,55],{"class":50},[37,54537,51657],{"class":185},[37,54539,51643],{"class":50},[37,54541,54542],{"class":39,"line":104},[37,54543,2757],{"emptyLinePlaceholder":454},[37,54545,54546,54548,54550],{"class":39,"line":113},[37,54547,1418],{"class":50},[37,54549,51670],{"class":51636},[37,54551,51643],{"class":50},[37,54553,54554,54556,54558,54560,54562,54564],{"class":39,"line":189},[37,54555,52480],{"class":50},[37,54557,51680],{"class":51636},[37,54559,51683],{"class":2320},[37,54561,55],{"class":50},[37,54563,51688],{"class":185},[37,54565,51643],{"class":50},[37,54567,54568,54570,54572,54574,54576,54578,54580,54582,54584],{"class":39,"line":195},[37,54569,52480],{"class":50},[37,54571,51680],{"class":51636},[37,54573,15261],{"class":2320},[37,54575,55],{"class":50},[37,54577,51727],{"class":185},[37,54579,51707],{"class":2320},[37,54581,55],{"class":50},[37,54583,51734],{"class":185},[37,54585,51643],{"class":50},[37,54587,54588,54590,54592,54594,54596],{"class":39,"line":201},[37,54589,52480],{"class":50},[37,54591,51743],{"class":51636},[37,54593,51746],{"class":50},[37,54595,51743],{"class":51636},[37,54597,51643],{"class":50},[37,54599,54600,54602,54604],{"class":39,"line":207},[37,54601,52121],{"class":50},[37,54603,51670],{"class":51636},[37,54605,51643],{"class":50},[37,54607,54608],{"class":39,"line":213},[37,54609,2757],{"emptyLinePlaceholder":454},[37,54611,54612,54614,54616],{"class":39,"line":218},[37,54613,1418],{"class":50},[37,54615,52136],{"class":51636},[37,54617,51643],{"class":50},[37,54619,54620,54622,54625,54627,54629,54631,54633,54635,54637,54640,54642,54645,54648,54650,54653],{"class":39,"line":227},[37,54621,52480],{"class":50},[37,54623,54624],{"class":51636},"textarea",[37,54626,15261],{"class":2320},[37,54628,55],{"class":50},[37,54630,8000],{"class":185},[37,54632,15300],{"class":2320},[37,54634,55],{"class":50},[37,54636,8000],{"class":185},[37,54638,54639],{"class":2320}," cols",[37,54641,55],{"class":50},[37,54643,54644],{"class":185},"\"30\"",[37,54646,54647],{"class":2320}," rows",[37,54649,55],{"class":50},[37,54651,54652],{"class":185},"\"10\"",[37,54654,51643],{"class":50},[37,54656,54657],{"class":39,"line":232},[37,54658,54659],{"class":50},"        用户注册协议\n",[37,54661,54662],{"class":39,"line":238},[37,54663,54664],{"class":50},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[37,54666,54667],{"class":39,"line":244},[37,54668,54669],{"class":50},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[37,54671,54672,54674,54676],{"class":39,"line":250},[37,54673,52112],{"class":50},[37,54675,54624],{"class":51636},[37,54677,51643],{"class":50},[37,54679,54680,54682,54684],{"class":39,"line":256},[37,54681,52480],{"class":50},[37,54683,54052],{"class":51636},[37,54685,51643],{"class":50},[37,54687,54688,54690,54692,54694,54696,54699,54701,54704,54706],{"class":39,"line":261},[37,54689,52480],{"class":50},[37,54691,54223],{"class":51636},[37,54693,53822],{"class":2320},[37,54695,55],{"class":50},[37,54697,54698],{"class":185},"\"btn\"",[37,54700,54226],{"class":2320},[37,54702,54703],{"class":50},">我已经阅读用户协议(5)\u003C\u002F",[37,54705,54223],{"class":51636},[37,54707,51643],{"class":50},[37,54709,54710,54712,54714],{"class":39,"line":267},[37,54711,52480],{"class":50},[37,54713,52149],{"class":51636},[37,54715,51643],{"class":50},[37,54717,54718],{"class":39,"line":283},[37,54719,54720],{"class":43},"    \u002F\u002F 1. 获取元素\n",[37,54722,54723,54725,54728,54730,54733,54736,54738,54741],{"class":39,"line":288},[37,54724,11562],{"class":54},[37,54726,54727],{"class":61}," btn",[37,54729,13905],{"class":54},[37,54731,54732],{"class":50}," document.",[37,54734,54735],{"class":2320},"querySelector",[37,54737,165],{"class":50},[37,54739,54740],{"class":185},"'.btn'",[37,54742,280],{"class":50},[37,54744,54745],{"class":39,"line":294},[37,54746,54747],{"class":43},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[37,54749,54750],{"class":39,"line":300},[37,54751,54752],{"class":43},"    \u002F\u002F 2. 倒计时\n",[37,54754,54755,54757,54759,54761],{"class":39,"line":306},[37,54756,52555],{"class":54},[37,54758,9779],{"class":50},[37,54760,55],{"class":54},[37,54762,54763],{"class":61}," 5\n",[37,54765,54766],{"class":39,"line":312},[37,54767,54768],{"class":43},"    \u002F\u002F 2.1 开启定时器\n",[37,54770,54771,54773,54776,54778,54781,54783,54786],{"class":39,"line":317},[37,54772,52555],{"class":54},[37,54774,54775],{"class":50}," n ",[37,54777,55],{"class":54},[37,54779,54780],{"class":2320}," setInterval",[37,54782,165],{"class":50},[37,54784,54785],{"class":54},"function",[37,54787,54788],{"class":50}," () {\n",[37,54790,54791,54794],{"class":39,"line":323},[37,54792,54793],{"class":50},"      i",[37,54795,54796],{"class":54},"--\n",[37,54798,54799,54802,54804,54807,54809],{"class":39,"line":337},[37,54800,54801],{"class":50},"      btn.innerHTML ",[37,54803,55],{"class":54},[37,54805,54806],{"class":185}," `我已经阅读用户协议(${",[37,54808,954],{"class":50},[37,54810,54811],{"class":185},"})`\n",[37,54813,54814,54817,54820,54823,54825],{"class":39,"line":342},[37,54815,54816],{"class":54},"      if",[37,54818,54819],{"class":50}," (i ",[37,54821,54822],{"class":54},"===",[37,54824,4443],{"class":61},[37,54826,12783],{"class":50},[37,54828,54829,54832,54835],{"class":39,"line":347},[37,54830,54831],{"class":2320},"        clearInterval",[37,54833,54834],{"class":50},"(n)  ",[37,54836,54837],{"class":43},"\u002F\u002F 关闭定时器\n",[37,54839,54840],{"class":39,"line":352},[37,54841,54842],{"class":43},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[37,54844,54845,54848,54850],{"class":39,"line":357},[37,54846,54847],{"class":50},"        btn.disabled ",[37,54849,55],{"class":54},[37,54851,54852],{"class":61}," false\n",[37,54854,54855,54858,54860],{"class":39,"line":362},[37,54856,54857],{"class":50},"        btn.innerHTML ",[37,54859,55],{"class":54},[37,54861,54862],{"class":185}," '同意'\n",[37,54864,54865],{"class":39,"line":367},[37,54866,52734],{"class":50},[37,54868,54869,54872,54874],{"class":39,"line":373},[37,54870,54871],{"class":50},"    }, ",[37,54873,6758],{"class":61},[37,54875,280],{"class":50},[37,54877,54878],{"class":39,"line":392},[37,54879,2757],{"emptyLinePlaceholder":454},[37,54881,54882,54884,54886],{"class":39,"line":398},[37,54883,52753],{"class":50},[37,54885,52149],{"class":51636},[37,54887,51643],{"class":50},[37,54889,54890,54892,54894],{"class":39,"line":409},[37,54891,52121],{"class":50},[37,54893,52136],{"class":51636},[37,54895,51643],{"class":50},[37,54897,54898],{"class":39,"line":415},[37,54899,2757],{"emptyLinePlaceholder":454},[37,54901,54902,54904,54906],{"class":39,"line":420},[37,54903,52121],{"class":50},[37,54905,50971],{"class":51636},[37,54907,51643],{"class":50},[14,54909,54910],{},"不要一直想着用死循环,避免死循环",[14,54912,54913,54916],{},[34,54914,54915],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22339,54918,54920],{"id":54919},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[481,54922,54923],{},[484,54924,54925],{},"法1",[27,54927,54929],{"className":50969,"code":54928,"language":50971,"meta":32,"style":32},"\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",[34,54930,54931,54941,54955,54959,54967,54981,55001,55013,55021,55027,55038,55049,55053,55057,55064,55076,55080,55084,55091,55103,55117,55130,55144,55148,55152,55159,55170,55181,55192,55204,55216,55228,55232,55236,55244,55254,55267,55279,55292,55296,55300,55307,55317,55329,55341,55352,55363,55373,55385,55397,55401,55405,55414,55426,55438,55466,55479,55483,55487,55494,55505,55509,55517,55525,55529,55537,55551,55566,55590,55598,55613,55626,55634,55655,55667,55679,55691,55703,55715,55727,55739,55748,55756,55764,55772,55784,55807,55826,55845,55864,55883,55902,55921,55941,55945,55965,55984,56004,56025,56036,56053,56063,56073,56083,56088,56093,56098,56103,56128,56141,56145,56168,56172,56180,56188,56196,56200],{"__ignoreMap":32},[37,54932,54933,54935,54937,54939],{"class":39,"line":40},[37,54934,51633],{"class":50},[37,54936,51637],{"class":51636},[37,54938,51640],{"class":2320},[37,54940,51643],{"class":50},[37,54942,54943,54945,54947,54949,54951,54953],{"class":39,"line":47},[37,54944,1418],{"class":50},[37,54946,50971],{"class":51636},[37,54948,51652],{"class":2320},[37,54950,55],{"class":50},[37,54952,51657],{"class":185},[37,54954,51643],{"class":50},[37,54956,54957],{"class":39,"line":104},[37,54958,2757],{"emptyLinePlaceholder":454},[37,54960,54961,54963,54965],{"class":39,"line":113},[37,54962,1418],{"class":50},[37,54964,51670],{"class":51636},[37,54966,51643],{"class":50},[37,54968,54969,54971,54973,54975,54977,54979],{"class":39,"line":189},[37,54970,52480],{"class":50},[37,54972,51680],{"class":51636},[37,54974,51683],{"class":2320},[37,54976,55],{"class":50},[37,54978,51688],{"class":185},[37,54980,51643],{"class":50},[37,54982,54983,54985,54987,54989,54991,54993,54995,54997,54999],{"class":39,"line":195},[37,54984,52480],{"class":50},[37,54986,51680],{"class":51636},[37,54988,15261],{"class":2320},[37,54990,55],{"class":50},[37,54992,51727],{"class":185},[37,54994,51707],{"class":2320},[37,54996,55],{"class":50},[37,54998,51734],{"class":185},[37,55000,51643],{"class":50},[37,55002,55003,55005,55007,55009,55011],{"class":39,"line":201},[37,55004,52480],{"class":50},[37,55006,51743],{"class":51636},[37,55008,51746],{"class":50},[37,55010,51743],{"class":51636},[37,55012,51643],{"class":50},[37,55014,55015,55017,55019],{"class":39,"line":207},[37,55016,52480],{"class":50},[37,55018,446],{"class":51636},[37,55020,51643],{"class":50},[37,55022,55023,55025],{"class":39,"line":213},[37,55024,6751],{"class":51636},[37,55026,15913],{"class":50},[37,55028,55029,55032,55034,55036],{"class":39,"line":218},[37,55030,55031],{"class":61},"      padding",[37,55033,51773],{"class":50},[37,55035,135],{"class":61},[37,55037,1669],{"class":50},[37,55039,55040,55043,55045,55047],{"class":39,"line":227},[37,55041,55042],{"class":61},"      margin",[37,55044,51773],{"class":50},[37,55046,135],{"class":61},[37,55048,1669],{"class":50},[37,55050,55051],{"class":39,"line":232},[37,55052,2544],{"class":50},[37,55054,55055],{"class":39,"line":238},[37,55056,2757],{"emptyLinePlaceholder":454},[37,55058,55059,55062],{"class":39,"line":244},[37,55060,55061],{"class":51636},"    li",[37,55063,15913],{"class":50},[37,55065,55066,55069,55071,55074],{"class":39,"line":250},[37,55067,55068],{"class":61},"      list-style",[37,55070,51773],{"class":50},[37,55072,55073],{"class":61},"none",[37,55075,1669],{"class":50},[37,55077,55078],{"class":39,"line":256},[37,55079,2544],{"class":50},[37,55081,55082],{"class":39,"line":261},[37,55083,2757],{"emptyLinePlaceholder":454},[37,55085,55086,55089],{"class":39,"line":267},[37,55087,55088],{"class":2320},"    .box",[37,55090,15913],{"class":50},[37,55092,55093,55096,55098,55101],{"class":39,"line":283},[37,55094,55095],{"class":61},"      position",[37,55097,51773],{"class":50},[37,55099,55100],{"class":61},"relative",[37,55102,1669],{"class":50},[37,55104,55105,55108,55110,55113,55115],{"class":39,"line":288},[37,55106,55107],{"class":61},"      width",[37,55109,51773],{"class":50},[37,55111,55112],{"class":61},"976",[37,55114,51828],{"class":54},[37,55116,1669],{"class":50},[37,55118,55119,55122,55124,55126,55128],{"class":39,"line":294},[37,55120,55121],{"class":61},"      height",[37,55123,51773],{"class":50},[37,55125,1915],{"class":61},[37,55127,51828],{"class":54},[37,55129,1669],{"class":50},[37,55131,55132,55134,55136,55138,55140,55142],{"class":39,"line":300},[37,55133,55042],{"class":61},[37,55135,51773],{"class":50},[37,55137,154],{"class":61},[37,55139,51828],{"class":54},[37,55141,51892],{"class":61},[37,55143,1669],{"class":50},[37,55145,55146],{"class":39,"line":306},[37,55147,2544],{"class":50},[37,55149,55150],{"class":39,"line":312},[37,55151,2757],{"emptyLinePlaceholder":454},[37,55153,55154,55157],{"class":39,"line":317},[37,55155,55156],{"class":2320},"    .slider-footer",[37,55158,15913],{"class":50},[37,55160,55161,55163,55165,55168],{"class":39,"line":323},[37,55162,55095],{"class":61},[37,55164,51773],{"class":50},[37,55166,55167],{"class":61},"absolute",[37,55169,1669],{"class":50},[37,55171,55172,55175,55177,55179],{"class":39,"line":337},[37,55173,55174],{"class":61},"      left",[37,55176,51773],{"class":50},[37,55178,135],{"class":61},[37,55180,1669],{"class":50},[37,55182,55183,55186,55188,55190],{"class":39,"line":342},[37,55184,55185],{"class":61},"      bottom",[37,55187,51773],{"class":50},[37,55189,135],{"class":61},[37,55191,1669],{"class":50},[37,55193,55194,55196,55198,55200,55202],{"class":39,"line":347},[37,55195,55107],{"class":61},[37,55197,51773],{"class":50},[37,55199,154],{"class":61},[37,55201,845],{"class":54},[37,55203,1669],{"class":50},[37,55205,55206,55208,55210,55212,55214],{"class":39,"line":352},[37,55207,55121],{"class":61},[37,55209,51773],{"class":50},[37,55211,1085],{"class":61},[37,55213,845],{"class":54},[37,55215,1669],{"class":50},[37,55217,55218,55221,55223,55226],{"class":39,"line":357},[37,55219,55220],{"class":61},"      background-color",[37,55222,51773],{"class":50},[37,55224,55225],{"class":61},"skyblue",[37,55227,1669],{"class":50},[37,55229,55230],{"class":39,"line":362},[37,55231,2544],{"class":50},[37,55233,55234],{"class":39,"line":367},[37,55235,2757],{"emptyLinePlaceholder":454},[37,55237,55238,55240,55242],{"class":39,"line":373},[37,55239,55156],{"class":2320},[37,55241,7173],{"class":51636},[37,55243,15913],{"class":50},[37,55245,55246,55248,55250,55252],{"class":39,"line":392},[37,55247,55095],{"class":61},[37,55249,51773],{"class":50},[37,55251,55167],{"class":61},[37,55253,1669],{"class":50},[37,55255,55256,55259,55261,55263,55265],{"class":39,"line":398},[37,55257,55258],{"class":61},"      font-size",[37,55260,51773],{"class":50},[37,55262,1409],{"class":61},[37,55264,51828],{"class":54},[37,55266,1669],{"class":50},[37,55268,55269,55271,55273,55275,55277],{"class":39,"line":409},[37,55270,55174],{"class":61},[37,55272,51773],{"class":50},[37,55274,1210],{"class":61},[37,55276,51828],{"class":54},[37,55278,1669],{"class":50},[37,55280,55281,55284,55286,55288,55290],{"class":39,"line":415},[37,55282,55283],{"class":61},"      top",[37,55285,51773],{"class":50},[37,55287,836],{"class":61},[37,55289,51828],{"class":54},[37,55291,1669],{"class":50},[37,55293,55294],{"class":39,"line":420},[37,55295,2544],{"class":50},[37,55297,55298],{"class":39,"line":425},[37,55299,2757],{"emptyLinePlaceholder":454},[37,55301,55302,55305],{"class":39,"line":431},[37,55303,55304],{"class":51636},"    ul",[37,55306,15913],{"class":50},[37,55308,55309,55311,55313,55315],{"class":39,"line":436},[37,55310,55095],{"class":61},[37,55312,51773],{"class":50},[37,55314,55167],{"class":61},[37,55316,1669],{"class":50},[37,55318,55319,55321,55323,55325,55327],{"class":39,"line":442},[37,55320,55283],{"class":61},[37,55322,51773],{"class":50},[37,55324,1290],{"class":61},[37,55326,51828],{"class":54},[37,55328,1669],{"class":50},[37,55330,55331,55333,55335,55337,55339],{"class":39,"line":8374},[37,55332,55174],{"class":61},[37,55334,51773],{"class":50},[37,55336,1210],{"class":61},[37,55338,51828],{"class":54},[37,55340,1669],{"class":50},[37,55342,55343,55346,55348,55350],{"class":39,"line":8386},[37,55344,55345],{"class":61},"      display",[37,55347,51773],{"class":50},[37,55349,51813],{"class":61},[37,55351,1669],{"class":50},[37,55353,55354,55357,55359,55361],{"class":39,"line":8398},[37,55355,55356],{"class":61},"      justify-content",[37,55358,51773],{"class":50},[37,55360,52004],{"class":61},[37,55362,1669],{"class":50},[37,55364,55365,55367,55369,55371],{"class":39,"line":10057},[37,55366,55095],{"class":61},[37,55368,51773],{"class":50},[37,55370,55167],{"class":61},[37,55372,1669],{"class":50},[37,55374,55375,55377,55379,55381,55383],{"class":39,"line":10082},[37,55376,55107],{"class":61},[37,55378,51773],{"class":50},[37,55380,4342],{"class":61},[37,55382,51828],{"class":54},[37,55384,1669],{"class":50},[37,55386,55387,55389,55391,55393,55395],{"class":39,"line":10105},[37,55388,55121],{"class":61},[37,55390,51773],{"class":50},[37,55392,1210],{"class":61},[37,55394,51828],{"class":54},[37,55396,1669],{"class":50},[37,55398,55399],{"class":39,"line":10129},[37,55400,2544],{"class":50},[37,55402,55403],{"class":39,"line":10134},[37,55404,2757],{"emptyLinePlaceholder":454},[37,55406,55407,55409,55412],{"class":39,"line":10139},[37,55408,55304],{"class":51636},[37,55410,55411],{"class":51636}," li",[37,55413,15913],{"class":50},[37,55415,55416,55418,55420,55422,55424],{"class":39,"line":10144},[37,55417,55107],{"class":61},[37,55419,51773],{"class":50},[37,55421,1210],{"class":61},[37,55423,51828],{"class":54},[37,55425,1669],{"class":50},[37,55427,55428,55430,55432,55434,55436],{"class":39,"line":10153},[37,55429,55121],{"class":61},[37,55431,51773],{"class":50},[37,55433,1210],{"class":61},[37,55435,51828],{"class":54},[37,55437,1669],{"class":50},[37,55439,55440,55442,55444,55447,55449,55451,55453,55455,55457,55459,55461,55464],{"class":39,"line":10158},[37,55441,55220],{"class":61},[37,55443,51773],{"class":50},[37,55445,55446],{"class":61},"rgba",[37,55448,165],{"class":50},[37,55450,135],{"class":61},[37,55452,12776],{"class":50},[37,55454,135],{"class":61},[37,55456,12776],{"class":50},[37,55458,135],{"class":61},[37,55460,12776],{"class":50},[37,55462,55463],{"class":61},".4",[37,55465,3069],{"class":50},[37,55467,55468,55471,55473,55475,55477],{"class":39,"line":10164},[37,55469,55470],{"class":61},"      border-radius",[37,55472,51773],{"class":50},[37,55474,98],{"class":61},[37,55476,51828],{"class":54},[37,55478,1669],{"class":50},[37,55480,55481],{"class":39,"line":10185},[37,55482,2544],{"class":50},[37,55484,55485],{"class":39,"line":10191},[37,55486,2757],{"emptyLinePlaceholder":454},[37,55488,55489,55492],{"class":39,"line":10205},[37,55490,55491],{"class":2320},"    .activate",[37,55493,15913],{"class":50},[37,55495,55496,55498,55500,55503],{"class":39,"line":10211},[37,55497,55220],{"class":61},[37,55499,51773],{"class":50},[37,55501,55502],{"class":61},"#f7f7f7",[37,55504,1669],{"class":50},[37,55506,55507],{"class":39,"line":10238},[37,55508,2544],{"class":50},[37,55510,55511,55513,55515],{"class":39,"line":10247},[37,55512,52753],{"class":50},[37,55514,446],{"class":51636},[37,55516,51643],{"class":50},[37,55518,55519,55521,55523],{"class":39,"line":10253},[37,55520,52121],{"class":50},[37,55522,51670],{"class":51636},[37,55524,51643],{"class":50},[37,55526,55527],{"class":39,"line":10261},[37,55528,2757],{"emptyLinePlaceholder":454},[37,55530,55531,55533,55535],{"class":39,"line":10266},[37,55532,1418],{"class":50},[37,55534,52136],{"class":51636},[37,55536,51643],{"class":50},[37,55538,55539,55541,55543,55545,55547,55549],{"class":39,"line":16945},[37,55540,52480],{"class":50},[37,55542,51947],{"class":51636},[37,55544,53822],{"class":2320},[37,55546,55],{"class":50},[37,55548,53827],{"class":185},[37,55550,51643],{"class":50},[37,55552,55553,55555,55557,55559,55561,55564],{"class":39,"line":16951},[37,55554,51677],{"class":50},[37,55556,51947],{"class":51636},[37,55558,53822],{"class":2320},[37,55560,55],{"class":50},[37,55562,55563],{"class":185},"\"slider-wrapper\"",[37,55565,51643],{"class":50},[37,55567,55568,55571,55573,55576,55578,55581,55584,55586,55588],{"class":39,"line":16974},[37,55569,55570],{"class":50},"      \u003C",[37,55572,1838],{"class":51636},[37,55574,55575],{"class":2320}," src",[37,55577,55],{"class":50},[37,55579,55580],{"class":185},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[37,55582,55583],{"class":2320}," alt",[37,55585,55],{"class":50},[37,55587,8000],{"class":185},[37,55589,51643],{"class":50},[37,55591,55592,55594,55596],{"class":39,"line":16980},[37,55593,52112],{"class":50},[37,55595,51947],{"class":51636},[37,55597,51643],{"class":50},[37,55599,55600,55602,55604,55606,55608,55611],{"class":39,"line":17003},[37,55601,51677],{"class":50},[37,55603,51947],{"class":51636},[37,55605,53822],{"class":2320},[37,55607,55],{"class":50},[37,55609,55610],{"class":185},"\"slider-footer\"",[37,55612,51643],{"class":50},[37,55614,55615,55617,55619,55622,55624],{"class":39,"line":17017},[37,55616,55570],{"class":50},[37,55618,14],{"class":51636},[37,55620,55621],{"class":50},">对人类来说会不会太超前了?\u003C\u002F",[37,55623,14],{"class":51636},[37,55625,51643],{"class":50},[37,55627,55628,55630,55632],{"class":39,"line":17037},[37,55629,55570],{"class":50},[37,55631,1515],{"class":51636},[37,55633,51643],{"class":50},[37,55635,55636,55639,55641,55643,55645,55648,55651,55653],{"class":39,"line":17043},[37,55637,55638],{"class":50},"        \u003C",[37,55640,484],{"class":51636},[37,55642,53822],{"class":2320},[37,55644,55],{"class":50},[37,55646,55647],{"class":185},"\"activate\"",[37,55649,55650],{"class":50},">\u003C\u002F",[37,55652,484],{"class":51636},[37,55654,51643],{"class":50},[37,55656,55657,55659,55661,55663,55665],{"class":39,"line":17054},[37,55658,55638],{"class":50},[37,55660,484],{"class":51636},[37,55662,55650],{"class":50},[37,55664,484],{"class":51636},[37,55666,51643],{"class":50},[37,55668,55669,55671,55673,55675,55677],{"class":39,"line":17077},[37,55670,55638],{"class":50},[37,55672,484],{"class":51636},[37,55674,55650],{"class":50},[37,55676,484],{"class":51636},[37,55678,51643],{"class":50},[37,55680,55681,55683,55685,55687,55689],{"class":39,"line":17099},[37,55682,55638],{"class":50},[37,55684,484],{"class":51636},[37,55686,55650],{"class":50},[37,55688,484],{"class":51636},[37,55690,51643],{"class":50},[37,55692,55693,55695,55697,55699,55701],{"class":39,"line":17104},[37,55694,55638],{"class":50},[37,55696,484],{"class":51636},[37,55698,55650],{"class":50},[37,55700,484],{"class":51636},[37,55702,51643],{"class":50},[37,55704,55705,55707,55709,55711,55713],{"class":39,"line":17110},[37,55706,55638],{"class":50},[37,55708,484],{"class":51636},[37,55710,55650],{"class":50},[37,55712,484],{"class":51636},[37,55714,51643],{"class":50},[37,55716,55717,55719,55721,55723,55725],{"class":39,"line":17124},[37,55718,55638],{"class":50},[37,55720,484],{"class":51636},[37,55722,55650],{"class":50},[37,55724,484],{"class":51636},[37,55726,51643],{"class":50},[37,55728,55729,55731,55733,55735,55737],{"class":39,"line":17137},[37,55730,55638],{"class":50},[37,55732,484],{"class":51636},[37,55734,55650],{"class":50},[37,55736,484],{"class":51636},[37,55738,51643],{"class":50},[37,55740,55741,55744,55746],{"class":39,"line":17142},[37,55742,55743],{"class":50},"      \u003C\u002F",[37,55745,1515],{"class":51636},[37,55747,51643],{"class":50},[37,55749,55750,55752,55754],{"class":39,"line":17156},[37,55751,52112],{"class":50},[37,55753,51947],{"class":51636},[37,55755,51643],{"class":50},[37,55757,55758,55760,55762],{"class":39,"line":17161},[37,55759,52753],{"class":50},[37,55761,51947],{"class":51636},[37,55763,51643],{"class":50},[37,55765,55766,55768,55770],{"class":39,"line":17167},[37,55767,52480],{"class":50},[37,55769,52149],{"class":51636},[37,55771,51643],{"class":50},[37,55773,55774,55776,55779,55781],{"class":39,"line":17172},[37,55775,11562],{"class":54},[37,55777,55778],{"class":61}," arrImage",[37,55780,13905],{"class":54},[37,55782,55783],{"class":50}," [\n",[37,55785,55786,55789,55792,55795,55798,55801,55804],{"class":39,"line":17186},[37,55787,55788],{"class":50},"      { url: ",[37,55790,55791],{"class":185},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[37,55793,55794],{"class":50},", title: ",[37,55796,55797],{"class":185},"'对人类来说会不会太超前了?'",[37,55799,55800],{"class":50},", color: ",[37,55802,55803],{"class":185},"'rgba(100,67,68)'",[37,55805,55806],{"class":50}," },\n",[37,55808,55809,55811,55814,55816,55819,55821,55824],{"class":39,"line":17191},[37,55810,55788],{"class":50},[37,55812,55813],{"class":185},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[37,55815,55794],{"class":50},[37,55817,55818],{"class":185},"'开启剑与雪的黑暗传说!'",[37,55820,55800],{"class":50},[37,55822,55823],{"class":185},"'rgba(43,35,26)'",[37,55825,55806],{"class":50},[37,55827,55828,55830,55833,55835,55838,55840,55843],{"class":39,"line":17196},[37,55829,55788],{"class":50},[37,55831,55832],{"class":185},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[37,55834,55794],{"class":50},[37,55836,55837],{"class":185},"'真正的jo厨出现了!'",[37,55839,55800],{"class":50},[37,55841,55842],{"class":185},"'rgba(36,31,33)'",[37,55844,55806],{"class":50},[37,55846,55847,55849,55852,55854,55857,55859,55862],{"class":39,"line":17210},[37,55848,55788],{"class":50},[37,55850,55851],{"class":185},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[37,55853,55794],{"class":50},[37,55855,55856],{"class":185},"'李玉刚:让世界通过b站看到东方大国文化'",[37,55858,55800],{"class":50},[37,55860,55861],{"class":185},"'rgba(139,98,66)'",[37,55863,55806],{"class":50},[37,55865,55866,55868,55871,55873,55876,55878,55881],{"class":39,"line":17222},[37,55867,55788],{"class":50},[37,55869,55870],{"class":185},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[37,55872,55794],{"class":50},[37,55874,55875],{"class":185},"'快来分享你的寒假日常吧'",[37,55877,55800],{"class":50},[37,55879,55880],{"class":185},"'rgba(67,90,92)'",[37,55882,55806],{"class":50},[37,55884,55885,55887,55890,55892,55895,55897,55900],{"class":39,"line":17227},[37,55886,55788],{"class":50},[37,55888,55889],{"class":185},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[37,55891,55794],{"class":50},[37,55893,55894],{"class":185},"'哔哩哔哩小年YEAR'",[37,55896,55800],{"class":50},[37,55898,55899],{"class":185},"'rgba(166,131,143)'",[37,55901,55806],{"class":50},[37,55903,55904,55906,55909,55911,55914,55916,55919],{"class":39,"line":17240},[37,55905,55788],{"class":50},[37,55907,55908],{"class":185},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[37,55910,55794],{"class":50},[37,55912,55913],{"class":185},"'一站式解决你的电脑配置问题'",[37,55915,55800],{"class":50},[37,55917,55918],{"class":185},"'rgba(53,29,25)'",[37,55920,55806],{"class":50},[37,55922,55923,55925,55928,55930,55933,55935,55938],{"class":39,"line":17245},[37,55924,55788],{"class":50},[37,55926,55927],{"class":185},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[37,55929,55794],{"class":50},[37,55931,55932],{"class":185},"'谁不想和小猫咪贴贴呢?'",[37,55934,55800],{"class":50},[37,55936,55937],{"class":185},"'rgba(99,72,114)'",[37,55939,55940],{"class":50}," }\n",[37,55942,55943],{"class":39,"line":17250},[37,55944,53445],{"class":50},[37,55946,55947,55949,55952,55954,55956,55958,55960,55963],{"class":39,"line":17255},[37,55948,11562],{"class":54},[37,55950,55951],{"class":61}," img",[37,55953,13905],{"class":54},[37,55955,54732],{"class":50},[37,55957,54735],{"class":2320},[37,55959,165],{"class":50},[37,55961,55962],{"class":185},"'.slider-wrapper img'",[37,55964,280],{"class":50},[37,55966,55967,55969,55971,55973,55975,55977,55979,55982],{"class":39,"line":17268},[37,55968,11562],{"class":54},[37,55970,7173],{"class":61},[37,55972,13905],{"class":54},[37,55974,54732],{"class":50},[37,55976,54735],{"class":2320},[37,55978,165],{"class":50},[37,55980,55981],{"class":185},"'.slider-footer p'",[37,55983,280],{"class":50},[37,55985,55986,55988,55991,55993,55995,55997,55999,56002],{"class":39,"line":17273},[37,55987,11562],{"class":54},[37,55989,55990],{"class":61}," color",[37,55992,13905],{"class":54},[37,55994,54732],{"class":50},[37,55996,54735],{"class":2320},[37,55998,165],{"class":50},[37,56000,56001],{"class":185},"'.slider-footer'",[37,56003,280],{"class":50},[37,56005,56006,56008,56011,56013,56015,56018,56020,56023],{"class":39,"line":32971},[37,56007,11562],{"class":54},[37,56009,56010],{"class":61}," lis",[37,56012,13905],{"class":54},[37,56014,54732],{"class":50},[37,56016,56017],{"class":2320},"querySelectorAll",[37,56019,165],{"class":50},[37,56021,56022],{"class":185},"'.slider-footer ul li'",[37,56024,280],{"class":50},[37,56026,56027,56029,56031,56033],{"class":39,"line":32977},[37,56028,52555],{"class":54},[37,56030,9779],{"class":50},[37,56032,55],{"class":54},[37,56034,56035],{"class":61}," 1\n",[37,56037,56038,56040,56043,56045,56047,56049,56051],{"class":39,"line":32983},[37,56039,52555],{"class":54},[37,56041,56042],{"class":50}," timer ",[37,56044,55],{"class":54},[37,56046,54780],{"class":2320},[37,56048,165],{"class":50},[37,56050,54785],{"class":54},[37,56052,54788],{"class":50},[37,56054,56055,56058,56060],{"class":39,"line":32989},[37,56056,56057],{"class":50},"      img.src ",[37,56059,55],{"class":54},[37,56061,56062],{"class":50}," arrImage[i].url\n",[37,56064,56065,56068,56070],{"class":39,"line":32995},[37,56066,56067],{"class":50},"      p.innerHTML ",[37,56069,55],{"class":54},[37,56071,56072],{"class":50}," arrImage[i].title\n",[37,56074,56075,56078,56080],{"class":39,"line":33006},[37,56076,56077],{"class":50},"      color.style.backgroundColor ",[37,56079,55],{"class":54},[37,56081,56082],{"class":50}," arrImage[i].color\n",[37,56084,56085],{"class":39,"line":33012},[37,56086,56087],{"class":43},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[37,56089,56090],{"class":39,"line":33032},[37,56091,56092],{"class":43},"      \u002F\u002F li.classList.add('activate')\n",[37,56094,56095],{"class":39,"line":33038},[37,56096,56097],{"class":43},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[37,56099,56100],{"class":39,"line":33049},[37,56101,56102],{"class":43},"      \u002F\u002F lis[i].classList.remove('activate')\n",[37,56104,56105,56108,56110,56112,56115,56118,56121,56123,56126],{"class":39,"line":33055},[37,56106,56107],{"class":50},"      document.",[37,56109,54735],{"class":2320},[37,56111,165],{"class":50},[37,56113,56114],{"class":185},"'.activate'",[37,56116,56117],{"class":50},")?.classList.",[37,56119,56120],{"class":2320},"toggle",[37,56122,165],{"class":50},[37,56124,56125],{"class":185},"'activate'",[37,56127,280],{"class":50},[37,56129,56130,56133,56135,56137,56139],{"class":39,"line":33061},[37,56131,56132],{"class":50},"      lis[i].classList.",[37,56134,5682],{"class":2320},[37,56136,165],{"class":50},[37,56138,56125],{"class":185},[37,56140,280],{"class":50},[37,56142,56143],{"class":39,"line":33067},[37,56144,2757],{"emptyLinePlaceholder":454},[37,56146,56147,56150,56152,56154,56156,56158,56160,56162,56165],{"class":39,"line":33073},[37,56148,56149],{"class":50},"      i ",[37,56151,55],{"class":54},[37,56153,54819],{"class":50},[37,56155,993],{"class":54},[37,56157,25460],{"class":61},[37,56159,14055],{"class":50},[37,56161,845],{"class":54},[37,56163,56164],{"class":50}," arrImage.",[37,56166,56167],{"class":61},"length\n",[37,56169,56170],{"class":39,"line":33079},[37,56171,2757],{"emptyLinePlaceholder":454},[37,56173,56174,56176,56178],{"class":39,"line":33085},[37,56175,54871],{"class":50},[37,56177,6758],{"class":61},[37,56179,280],{"class":50},[37,56181,56182,56184,56186],{"class":39,"line":33091},[37,56183,52753],{"class":50},[37,56185,52149],{"class":51636},[37,56187,51643],{"class":50},[37,56189,56190,56192,56194],{"class":39,"line":33111},[37,56191,52121],{"class":50},[37,56193,52136],{"class":51636},[37,56195,51643],{"class":50},[37,56197,56198],{"class":39,"line":33117},[37,56199,2757],{"emptyLinePlaceholder":454},[37,56201,56202,56204,56206],{"class":39,"line":33133},[37,56203,52121],{"class":50},[37,56205,50971],{"class":51636},[37,56207,51643],{"class":50},[14,56209,56210],{},[1838,56211],{"alt":32,"src":56212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,56214,56215],{},"?.就是短路保护,确保输出正常进行",[14,56217,56218],{},"不要忘记取余%,有时候可以用",[14,56220,56221],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[481,56223,56224],{"start":47},[484,56225,56226],{},"法2",[27,56228,56230],{"className":50969,"code":56229,"language":50971,"meta":32,"style":32},"\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",[34,56231,56232,56242,56256,56260,56268,56282,56302,56314,56322,56328,56338,56348,56352,56356,56362,56372,56376,56380,56386,56396,56408,56420,56434,56438,56442,56448,56458,56468,56478,56490,56502,56512,56516,56520,56528,56538,56550,56562,56574,56578,56582,56588,56598,56610,56622,56632,56642,56652,56664,56676,56680,56684,56692,56704,56716,56742,56754,56758,56762,56768,56778,56782,56790,56798,56802,56810,56824,56838,56858,56866,56880,56892,56900,56918,56930,56942,56954,56966,56978,56990,57002,57010,57018,57026,57034,57045,57061,57077,57093,57109,57125,57141,57157,57173,57177,57182,57200,57218,57228,57233,57238,57249,57255,57270,57279,57283,57288,57297,57302,57311,57316,57321,57326,57349,57379,57383,57391,57395,57403,57411,57415],{"__ignoreMap":32},[37,56233,56234,56236,56238,56240],{"class":39,"line":40},[37,56235,51633],{"class":50},[37,56237,51637],{"class":51636},[37,56239,51640],{"class":2320},[37,56241,51643],{"class":50},[37,56243,56244,56246,56248,56250,56252,56254],{"class":39,"line":47},[37,56245,1418],{"class":50},[37,56247,50971],{"class":51636},[37,56249,51652],{"class":2320},[37,56251,55],{"class":50},[37,56253,51657],{"class":185},[37,56255,51643],{"class":50},[37,56257,56258],{"class":39,"line":104},[37,56259,2757],{"emptyLinePlaceholder":454},[37,56261,56262,56264,56266],{"class":39,"line":113},[37,56263,1418],{"class":50},[37,56265,51670],{"class":51636},[37,56267,51643],{"class":50},[37,56269,56270,56272,56274,56276,56278,56280],{"class":39,"line":189},[37,56271,52480],{"class":50},[37,56273,51680],{"class":51636},[37,56275,51683],{"class":2320},[37,56277,55],{"class":50},[37,56279,51688],{"class":185},[37,56281,51643],{"class":50},[37,56283,56284,56286,56288,56290,56292,56294,56296,56298,56300],{"class":39,"line":195},[37,56285,52480],{"class":50},[37,56287,51680],{"class":51636},[37,56289,15261],{"class":2320},[37,56291,55],{"class":50},[37,56293,51727],{"class":185},[37,56295,51707],{"class":2320},[37,56297,55],{"class":50},[37,56299,51734],{"class":185},[37,56301,51643],{"class":50},[37,56303,56304,56306,56308,56310,56312],{"class":39,"line":201},[37,56305,52480],{"class":50},[37,56307,51743],{"class":51636},[37,56309,51746],{"class":50},[37,56311,51743],{"class":51636},[37,56313,51643],{"class":50},[37,56315,56316,56318,56320],{"class":39,"line":207},[37,56317,52480],{"class":50},[37,56319,446],{"class":51636},[37,56321,51643],{"class":50},[37,56323,56324,56326],{"class":39,"line":213},[37,56325,6751],{"class":51636},[37,56327,15913],{"class":50},[37,56329,56330,56332,56334,56336],{"class":39,"line":218},[37,56331,55031],{"class":61},[37,56333,51773],{"class":50},[37,56335,135],{"class":61},[37,56337,1669],{"class":50},[37,56339,56340,56342,56344,56346],{"class":39,"line":227},[37,56341,55042],{"class":61},[37,56343,51773],{"class":50},[37,56345,135],{"class":61},[37,56347,1669],{"class":50},[37,56349,56350],{"class":39,"line":232},[37,56351,2544],{"class":50},[37,56353,56354],{"class":39,"line":238},[37,56355,2757],{"emptyLinePlaceholder":454},[37,56357,56358,56360],{"class":39,"line":244},[37,56359,55061],{"class":51636},[37,56361,15913],{"class":50},[37,56363,56364,56366,56368,56370],{"class":39,"line":250},[37,56365,55068],{"class":61},[37,56367,51773],{"class":50},[37,56369,55073],{"class":61},[37,56371,1669],{"class":50},[37,56373,56374],{"class":39,"line":256},[37,56375,2544],{"class":50},[37,56377,56378],{"class":39,"line":261},[37,56379,2757],{"emptyLinePlaceholder":454},[37,56381,56382,56384],{"class":39,"line":267},[37,56383,55088],{"class":2320},[37,56385,15913],{"class":50},[37,56387,56388,56390,56392,56394],{"class":39,"line":283},[37,56389,55095],{"class":61},[37,56391,51773],{"class":50},[37,56393,55100],{"class":61},[37,56395,1669],{"class":50},[37,56397,56398,56400,56402,56404,56406],{"class":39,"line":288},[37,56399,55107],{"class":61},[37,56401,51773],{"class":50},[37,56403,55112],{"class":61},[37,56405,51828],{"class":54},[37,56407,1669],{"class":50},[37,56409,56410,56412,56414,56416,56418],{"class":39,"line":294},[37,56411,55121],{"class":61},[37,56413,51773],{"class":50},[37,56415,1915],{"class":61},[37,56417,51828],{"class":54},[37,56419,1669],{"class":50},[37,56421,56422,56424,56426,56428,56430,56432],{"class":39,"line":300},[37,56423,55042],{"class":61},[37,56425,51773],{"class":50},[37,56427,154],{"class":61},[37,56429,51828],{"class":54},[37,56431,51892],{"class":61},[37,56433,1669],{"class":50},[37,56435,56436],{"class":39,"line":306},[37,56437,2544],{"class":50},[37,56439,56440],{"class":39,"line":312},[37,56441,2757],{"emptyLinePlaceholder":454},[37,56443,56444,56446],{"class":39,"line":317},[37,56445,55156],{"class":2320},[37,56447,15913],{"class":50},[37,56449,56450,56452,56454,56456],{"class":39,"line":323},[37,56451,55095],{"class":61},[37,56453,51773],{"class":50},[37,56455,55167],{"class":61},[37,56457,1669],{"class":50},[37,56459,56460,56462,56464,56466],{"class":39,"line":337},[37,56461,55174],{"class":61},[37,56463,51773],{"class":50},[37,56465,135],{"class":61},[37,56467,1669],{"class":50},[37,56469,56470,56472,56474,56476],{"class":39,"line":342},[37,56471,55185],{"class":61},[37,56473,51773],{"class":50},[37,56475,135],{"class":61},[37,56477,1669],{"class":50},[37,56479,56480,56482,56484,56486,56488],{"class":39,"line":347},[37,56481,55107],{"class":61},[37,56483,51773],{"class":50},[37,56485,154],{"class":61},[37,56487,845],{"class":54},[37,56489,1669],{"class":50},[37,56491,56492,56494,56496,56498,56500],{"class":39,"line":352},[37,56493,55121],{"class":61},[37,56495,51773],{"class":50},[37,56497,1085],{"class":61},[37,56499,845],{"class":54},[37,56501,1669],{"class":50},[37,56503,56504,56506,56508,56510],{"class":39,"line":357},[37,56505,55220],{"class":61},[37,56507,51773],{"class":50},[37,56509,55225],{"class":61},[37,56511,1669],{"class":50},[37,56513,56514],{"class":39,"line":362},[37,56515,2544],{"class":50},[37,56517,56518],{"class":39,"line":367},[37,56519,2757],{"emptyLinePlaceholder":454},[37,56521,56522,56524,56526],{"class":39,"line":373},[37,56523,55156],{"class":2320},[37,56525,7173],{"class":51636},[37,56527,15913],{"class":50},[37,56529,56530,56532,56534,56536],{"class":39,"line":392},[37,56531,55095],{"class":61},[37,56533,51773],{"class":50},[37,56535,55167],{"class":61},[37,56537,1669],{"class":50},[37,56539,56540,56542,56544,56546,56548],{"class":39,"line":398},[37,56541,55258],{"class":61},[37,56543,51773],{"class":50},[37,56545,1409],{"class":61},[37,56547,51828],{"class":54},[37,56549,1669],{"class":50},[37,56551,56552,56554,56556,56558,56560],{"class":39,"line":409},[37,56553,55174],{"class":61},[37,56555,51773],{"class":50},[37,56557,1210],{"class":61},[37,56559,51828],{"class":54},[37,56561,1669],{"class":50},[37,56563,56564,56566,56568,56570,56572],{"class":39,"line":415},[37,56565,55283],{"class":61},[37,56567,51773],{"class":50},[37,56569,836],{"class":61},[37,56571,51828],{"class":54},[37,56573,1669],{"class":50},[37,56575,56576],{"class":39,"line":420},[37,56577,2544],{"class":50},[37,56579,56580],{"class":39,"line":425},[37,56581,2757],{"emptyLinePlaceholder":454},[37,56583,56584,56586],{"class":39,"line":431},[37,56585,55304],{"class":51636},[37,56587,15913],{"class":50},[37,56589,56590,56592,56594,56596],{"class":39,"line":436},[37,56591,55095],{"class":61},[37,56593,51773],{"class":50},[37,56595,55167],{"class":61},[37,56597,1669],{"class":50},[37,56599,56600,56602,56604,56606,56608],{"class":39,"line":442},[37,56601,55283],{"class":61},[37,56603,51773],{"class":50},[37,56605,1290],{"class":61},[37,56607,51828],{"class":54},[37,56609,1669],{"class":50},[37,56611,56612,56614,56616,56618,56620],{"class":39,"line":8374},[37,56613,55174],{"class":61},[37,56615,51773],{"class":50},[37,56617,1210],{"class":61},[37,56619,51828],{"class":54},[37,56621,1669],{"class":50},[37,56623,56624,56626,56628,56630],{"class":39,"line":8386},[37,56625,55345],{"class":61},[37,56627,51773],{"class":50},[37,56629,51813],{"class":61},[37,56631,1669],{"class":50},[37,56633,56634,56636,56638,56640],{"class":39,"line":8398},[37,56635,55356],{"class":61},[37,56637,51773],{"class":50},[37,56639,52004],{"class":61},[37,56641,1669],{"class":50},[37,56643,56644,56646,56648,56650],{"class":39,"line":10057},[37,56645,55095],{"class":61},[37,56647,51773],{"class":50},[37,56649,55167],{"class":61},[37,56651,1669],{"class":50},[37,56653,56654,56656,56658,56660,56662],{"class":39,"line":10082},[37,56655,55107],{"class":61},[37,56657,51773],{"class":50},[37,56659,4342],{"class":61},[37,56661,51828],{"class":54},[37,56663,1669],{"class":50},[37,56665,56666,56668,56670,56672,56674],{"class":39,"line":10105},[37,56667,55121],{"class":61},[37,56669,51773],{"class":50},[37,56671,1210],{"class":61},[37,56673,51828],{"class":54},[37,56675,1669],{"class":50},[37,56677,56678],{"class":39,"line":10129},[37,56679,2544],{"class":50},[37,56681,56682],{"class":39,"line":10134},[37,56683,2757],{"emptyLinePlaceholder":454},[37,56685,56686,56688,56690],{"class":39,"line":10139},[37,56687,55304],{"class":51636},[37,56689,55411],{"class":51636},[37,56691,15913],{"class":50},[37,56693,56694,56696,56698,56700,56702],{"class":39,"line":10144},[37,56695,55107],{"class":61},[37,56697,51773],{"class":50},[37,56699,1210],{"class":61},[37,56701,51828],{"class":54},[37,56703,1669],{"class":50},[37,56705,56706,56708,56710,56712,56714],{"class":39,"line":10153},[37,56707,55121],{"class":61},[37,56709,51773],{"class":50},[37,56711,1210],{"class":61},[37,56713,51828],{"class":54},[37,56715,1669],{"class":50},[37,56717,56718,56720,56722,56724,56726,56728,56730,56732,56734,56736,56738,56740],{"class":39,"line":10158},[37,56719,55220],{"class":61},[37,56721,51773],{"class":50},[37,56723,55446],{"class":61},[37,56725,165],{"class":50},[37,56727,135],{"class":61},[37,56729,12776],{"class":50},[37,56731,135],{"class":61},[37,56733,12776],{"class":50},[37,56735,135],{"class":61},[37,56737,12776],{"class":50},[37,56739,55463],{"class":61},[37,56741,3069],{"class":50},[37,56743,56744,56746,56748,56750,56752],{"class":39,"line":10164},[37,56745,55470],{"class":61},[37,56747,51773],{"class":50},[37,56749,98],{"class":61},[37,56751,51828],{"class":54},[37,56753,1669],{"class":50},[37,56755,56756],{"class":39,"line":10185},[37,56757,2544],{"class":50},[37,56759,56760],{"class":39,"line":10191},[37,56761,2757],{"emptyLinePlaceholder":454},[37,56763,56764,56766],{"class":39,"line":10205},[37,56765,55491],{"class":2320},[37,56767,15913],{"class":50},[37,56769,56770,56772,56774,56776],{"class":39,"line":10211},[37,56771,55220],{"class":61},[37,56773,51773],{"class":50},[37,56775,55502],{"class":61},[37,56777,1669],{"class":50},[37,56779,56780],{"class":39,"line":10238},[37,56781,2544],{"class":50},[37,56783,56784,56786,56788],{"class":39,"line":10247},[37,56785,52753],{"class":50},[37,56787,446],{"class":51636},[37,56789,51643],{"class":50},[37,56791,56792,56794,56796],{"class":39,"line":10253},[37,56793,52121],{"class":50},[37,56795,51670],{"class":51636},[37,56797,51643],{"class":50},[37,56799,56800],{"class":39,"line":10261},[37,56801,2757],{"emptyLinePlaceholder":454},[37,56803,56804,56806,56808],{"class":39,"line":10266},[37,56805,1418],{"class":50},[37,56807,52136],{"class":51636},[37,56809,51643],{"class":50},[37,56811,56812,56814,56816,56818,56820,56822],{"class":39,"line":16945},[37,56813,52480],{"class":50},[37,56815,51947],{"class":51636},[37,56817,53822],{"class":2320},[37,56819,55],{"class":50},[37,56821,53827],{"class":185},[37,56823,51643],{"class":50},[37,56825,56826,56828,56830,56832,56834,56836],{"class":39,"line":16951},[37,56827,51677],{"class":50},[37,56829,51947],{"class":51636},[37,56831,53822],{"class":2320},[37,56833,55],{"class":50},[37,56835,55563],{"class":185},[37,56837,51643],{"class":50},[37,56839,56840,56842,56844,56846,56848,56850,56852,56854,56856],{"class":39,"line":16974},[37,56841,55570],{"class":50},[37,56843,1838],{"class":51636},[37,56845,55575],{"class":2320},[37,56847,55],{"class":50},[37,56849,55580],{"class":185},[37,56851,55583],{"class":2320},[37,56853,55],{"class":50},[37,56855,8000],{"class":185},[37,56857,51643],{"class":50},[37,56859,56860,56862,56864],{"class":39,"line":16980},[37,56861,52112],{"class":50},[37,56863,51947],{"class":51636},[37,56865,51643],{"class":50},[37,56867,56868,56870,56872,56874,56876,56878],{"class":39,"line":17003},[37,56869,51677],{"class":50},[37,56871,51947],{"class":51636},[37,56873,53822],{"class":2320},[37,56875,55],{"class":50},[37,56877,55610],{"class":185},[37,56879,51643],{"class":50},[37,56881,56882,56884,56886,56888,56890],{"class":39,"line":17017},[37,56883,55570],{"class":50},[37,56885,14],{"class":51636},[37,56887,55621],{"class":50},[37,56889,14],{"class":51636},[37,56891,51643],{"class":50},[37,56893,56894,56896,56898],{"class":39,"line":17037},[37,56895,55570],{"class":50},[37,56897,1515],{"class":51636},[37,56899,51643],{"class":50},[37,56901,56902,56904,56906,56908,56910,56912,56914,56916],{"class":39,"line":17043},[37,56903,55638],{"class":50},[37,56905,484],{"class":51636},[37,56907,53822],{"class":2320},[37,56909,55],{"class":50},[37,56911,55647],{"class":185},[37,56913,55650],{"class":50},[37,56915,484],{"class":51636},[37,56917,51643],{"class":50},[37,56919,56920,56922,56924,56926,56928],{"class":39,"line":17054},[37,56921,55638],{"class":50},[37,56923,484],{"class":51636},[37,56925,55650],{"class":50},[37,56927,484],{"class":51636},[37,56929,51643],{"class":50},[37,56931,56932,56934,56936,56938,56940],{"class":39,"line":17077},[37,56933,55638],{"class":50},[37,56935,484],{"class":51636},[37,56937,55650],{"class":50},[37,56939,484],{"class":51636},[37,56941,51643],{"class":50},[37,56943,56944,56946,56948,56950,56952],{"class":39,"line":17099},[37,56945,55638],{"class":50},[37,56947,484],{"class":51636},[37,56949,55650],{"class":50},[37,56951,484],{"class":51636},[37,56953,51643],{"class":50},[37,56955,56956,56958,56960,56962,56964],{"class":39,"line":17104},[37,56957,55638],{"class":50},[37,56959,484],{"class":51636},[37,56961,55650],{"class":50},[37,56963,484],{"class":51636},[37,56965,51643],{"class":50},[37,56967,56968,56970,56972,56974,56976],{"class":39,"line":17110},[37,56969,55638],{"class":50},[37,56971,484],{"class":51636},[37,56973,55650],{"class":50},[37,56975,484],{"class":51636},[37,56977,51643],{"class":50},[37,56979,56980,56982,56984,56986,56988],{"class":39,"line":17124},[37,56981,55638],{"class":50},[37,56983,484],{"class":51636},[37,56985,55650],{"class":50},[37,56987,484],{"class":51636},[37,56989,51643],{"class":50},[37,56991,56992,56994,56996,56998,57000],{"class":39,"line":17137},[37,56993,55638],{"class":50},[37,56995,484],{"class":51636},[37,56997,55650],{"class":50},[37,56999,484],{"class":51636},[37,57001,51643],{"class":50},[37,57003,57004,57006,57008],{"class":39,"line":17142},[37,57005,55743],{"class":50},[37,57007,1515],{"class":51636},[37,57009,51643],{"class":50},[37,57011,57012,57014,57016],{"class":39,"line":17156},[37,57013,52112],{"class":50},[37,57015,51947],{"class":51636},[37,57017,51643],{"class":50},[37,57019,57020,57022,57024],{"class":39,"line":17161},[37,57021,52753],{"class":50},[37,57023,51947],{"class":51636},[37,57025,51643],{"class":50},[37,57027,57028,57030,57032],{"class":39,"line":17167},[37,57029,52480],{"class":50},[37,57031,52149],{"class":51636},[37,57033,51643],{"class":50},[37,57035,57036,57038,57041,57043],{"class":39,"line":17172},[37,57037,11562],{"class":54},[37,57039,57040],{"class":61}," sliderData",[37,57042,13905],{"class":54},[37,57044,55783],{"class":50},[37,57046,57047,57049,57051,57053,57055,57057,57059],{"class":39,"line":17186},[37,57048,55788],{"class":50},[37,57050,55791],{"class":185},[37,57052,55794],{"class":50},[37,57054,55797],{"class":185},[37,57056,55800],{"class":50},[37,57058,55803],{"class":185},[37,57060,55806],{"class":50},[37,57062,57063,57065,57067,57069,57071,57073,57075],{"class":39,"line":17191},[37,57064,55788],{"class":50},[37,57066,55813],{"class":185},[37,57068,55794],{"class":50},[37,57070,55818],{"class":185},[37,57072,55800],{"class":50},[37,57074,55823],{"class":185},[37,57076,55806],{"class":50},[37,57078,57079,57081,57083,57085,57087,57089,57091],{"class":39,"line":17196},[37,57080,55788],{"class":50},[37,57082,55832],{"class":185},[37,57084,55794],{"class":50},[37,57086,55837],{"class":185},[37,57088,55800],{"class":50},[37,57090,55842],{"class":185},[37,57092,55806],{"class":50},[37,57094,57095,57097,57099,57101,57103,57105,57107],{"class":39,"line":17210},[37,57096,55788],{"class":50},[37,57098,55851],{"class":185},[37,57100,55794],{"class":50},[37,57102,55856],{"class":185},[37,57104,55800],{"class":50},[37,57106,55861],{"class":185},[37,57108,55806],{"class":50},[37,57110,57111,57113,57115,57117,57119,57121,57123],{"class":39,"line":17222},[37,57112,55788],{"class":50},[37,57114,55870],{"class":185},[37,57116,55794],{"class":50},[37,57118,55875],{"class":185},[37,57120,55800],{"class":50},[37,57122,55880],{"class":185},[37,57124,55806],{"class":50},[37,57126,57127,57129,57131,57133,57135,57137,57139],{"class":39,"line":17227},[37,57128,55788],{"class":50},[37,57130,55889],{"class":185},[37,57132,55794],{"class":50},[37,57134,55894],{"class":185},[37,57136,55800],{"class":50},[37,57138,55899],{"class":185},[37,57140,55806],{"class":50},[37,57142,57143,57145,57147,57149,57151,57153,57155],{"class":39,"line":17240},[37,57144,55788],{"class":50},[37,57146,55908],{"class":185},[37,57148,55794],{"class":50},[37,57150,55913],{"class":185},[37,57152,55800],{"class":50},[37,57154,55918],{"class":185},[37,57156,55806],{"class":50},[37,57158,57159,57161,57163,57165,57167,57169,57171],{"class":39,"line":17245},[37,57160,55788],{"class":50},[37,57162,55927],{"class":185},[37,57164,55794],{"class":50},[37,57166,55932],{"class":185},[37,57168,55800],{"class":50},[37,57170,55937],{"class":185},[37,57172,55940],{"class":50},[37,57174,57175],{"class":39,"line":17250},[37,57176,53445],{"class":50},[37,57178,57179],{"class":39,"line":17255},[37,57180,57181],{"class":43},"    \u002F\u002F 1.获取元素\n",[37,57183,57184,57186,57188,57190,57192,57194,57196,57198],{"class":39,"line":17268},[37,57185,11562],{"class":54},[37,57187,55951],{"class":61},[37,57189,13905],{"class":54},[37,57191,54732],{"class":50},[37,57193,54735],{"class":2320},[37,57195,165],{"class":50},[37,57197,55962],{"class":185},[37,57199,280],{"class":50},[37,57201,57202,57204,57206,57208,57210,57212,57214,57216],{"class":39,"line":17273},[37,57203,11562],{"class":54},[37,57205,7173],{"class":61},[37,57207,13905],{"class":54},[37,57209,54732],{"class":50},[37,57211,54735],{"class":2320},[37,57213,165],{"class":50},[37,57215,55981],{"class":185},[37,57217,280],{"class":50},[37,57219,57220,57222,57224,57226],{"class":39,"line":32971},[37,57221,52555],{"class":54},[37,57223,9779],{"class":50},[37,57225,55],{"class":54},[37,57227,47670],{"class":61},[37,57229,57230],{"class":39,"line":32977},[37,57231,57232],{"class":43},"    \u002F\u002F 2.开启定时器\n",[37,57234,57235],{"class":39,"line":32983},[37,57236,57237],{"class":43},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[37,57239,57240,57243,57245,57247],{"class":39,"line":32989},[37,57241,57242],{"class":2320},"    setInterval",[37,57244,165],{"class":50},[37,57246,54785],{"class":54},[37,57248,54788],{"class":50},[37,57250,57251,57253],{"class":39,"line":32995},[37,57252,54793],{"class":50},[37,57254,3052],{"class":54},[37,57256,57257,57259,57261,57263,57266,57268],{"class":39,"line":33006},[37,57258,54816],{"class":54},[37,57260,54819],{"class":50},[37,57262,2075],{"class":54},[37,57264,57265],{"class":50}," sliderData.",[37,57267,52304],{"class":61},[37,57269,12783],{"class":50},[37,57271,57272,57275,57277],{"class":39,"line":33012},[37,57273,57274],{"class":50},"        i ",[37,57276,55],{"class":54},[37,57278,47670],{"class":61},[37,57280,57281],{"class":39,"line":33032},[37,57282,52734],{"class":50},[37,57284,57285],{"class":39,"line":33038},[37,57286,57287],{"class":43},"      \u002F\u002F 更换图片路径\n",[37,57289,57290,57292,57294],{"class":39,"line":33049},[37,57291,56057],{"class":50},[37,57293,55],{"class":54},[37,57295,57296],{"class":50}," sliderData[i].url\n",[37,57298,57299],{"class":39,"line":33055},[37,57300,57301],{"class":43},"      \u002F\u002F 把文字写到p里面\n",[37,57303,57304,57306,57308],{"class":39,"line":33061},[37,57305,56067],{"class":50},[37,57307,55],{"class":54},[37,57309,57310],{"class":50}," sliderData[i].title\n",[37,57312,57313],{"class":39,"line":33067},[37,57314,57315],{"class":43},"      \u002F\u002F 小圆点\n",[37,57317,57318],{"class":39,"line":33073},[37,57319,57320],{"class":43},"      \u002F\u002F 先删除以前的active\n",[37,57322,57323],{"class":39,"line":33079},[37,57324,57325],{"class":43},"      \u002F\u002F 只让当前li添加active\n",[37,57327,57328,57330,57332,57334,57337,57340,57343,57345,57347],{"class":39,"line":33085},[37,57329,56107],{"class":50},[37,57331,54735],{"class":2320},[37,57333,165],{"class":50},[37,57335,57336],{"class":185},"'.slider-footer .activate'",[37,57338,57339],{"class":50},").classList.",[37,57341,57342],{"class":2320},"remove",[37,57344,165],{"class":50},[37,57346,56125],{"class":185},[37,57348,280],{"class":50},[37,57350,57351,57353,57355,57357,57360,57362,57364,57366,57369,57371,57373,57375,57377],{"class":39,"line":33091},[37,57352,56107],{"class":50},[37,57354,54735],{"class":2320},[37,57356,165],{"class":50},[37,57358,57359],{"class":185},"`.slider-footer ul li:nth-child(${",[37,57361,954],{"class":50},[37,57363,45903],{"class":54},[37,57365,25460],{"class":61},[37,57367,57368],{"class":185},"})`",[37,57370,57339],{"class":50},[37,57372,5682],{"class":2320},[37,57374,165],{"class":50},[37,57376,56125],{"class":185},[37,57378,280],{"class":50},[37,57380,57381],{"class":39,"line":33111},[37,57382,2757],{"emptyLinePlaceholder":454},[37,57384,57385,57387,57389],{"class":39,"line":33117},[37,57386,54871],{"class":50},[37,57388,6758],{"class":61},[37,57390,280],{"class":50},[37,57392,57393],{"class":39,"line":33133},[37,57394,2757],{"emptyLinePlaceholder":454},[37,57396,57397,57399,57401],{"class":39,"line":33139},[37,57398,52753],{"class":50},[37,57400,52149],{"class":51636},[37,57402,51643],{"class":50},[37,57404,57405,57407,57409],{"class":39,"line":33153},[37,57406,52121],{"class":50},[37,57408,52136],{"class":51636},[37,57410,51643],{"class":50},[37,57412,57413],{"class":39,"line":33159},[37,57414,2757],{"emptyLinePlaceholder":454},[37,57416,57417,57419,57421],{"class":39,"line":33174},[37,57418,52121],{"class":50},[37,57420,50971],{"class":51636},[37,57422,51643],{"class":50},[498,57424,57426],{"id":57425},"_317-重要知识点","3.1.7 重要知识点",[14,57428,57429,57430],{},"浏览器在渲染文本时， ",[673,57431,57432],{},"没有空格或换行符就没有“断行点”",[14,57434,57435],{},[1838,57436],{"alt":32,"src":57437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57439,57440],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57442,57443],{},[1838,57444],{"alt":32,"src":57445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57447,57448],{},[1838,57449],{"alt":32,"src":57450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[469,57452,57454],{"id":57453},"_32-dom事件基础","3.2 DOM事件基础",[498,57456,57458],{"id":57457},"_321-事件监听","3.2.1 事件监听",[14,57460,57461],{},[1838,57462],{"alt":32,"src":57463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57465,57466],{},"事件监听有响应的发生",[14,57468,57469],{},[1838,57470],{"alt":32,"src":57471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57473,57474],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57476,57477],{},"对于有名函数,要执行的函数名后边不要加()",[498,57479,57481],{"id":57480},"_322-随机点名案例","3.2.2 随机点名案例",[27,57483,57485],{"className":50969,"code":57484,"language":50971,"meta":32,"style":32},"\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",[34,57486,57487,57497,57511,57515,57523,57537,57557,57569,57577,57583,57593,57603,57607,57611,57618,57629,57633,57637,57643,57655,57669,57679,57691,57704,57708,57712,57719,57723,57736,57748,57760,57764,57768,57772,57779,57789,57793,57797,57806,57818,57830,57845,57849,57857,57865,57869,57877,57890,57904,57917,57937,57945,57960,57980,58000,58008,58012,58020,58025,58061,58081,58086,58105,58110,58121,58126,58137,58142,58161,58176,58181,58207,58217,58226,58231,58247,58252,58257,58262,58277,58281,58285,58290,58309,58326,58334,58339,58354,58358,58362,58370,58378,58382],{"__ignoreMap":32},[37,57488,57489,57491,57493,57495],{"class":39,"line":40},[37,57490,51633],{"class":50},[37,57492,51637],{"class":51636},[37,57494,51640],{"class":2320},[37,57496,51643],{"class":50},[37,57498,57499,57501,57503,57505,57507,57509],{"class":39,"line":47},[37,57500,1418],{"class":50},[37,57502,50971],{"class":51636},[37,57504,51652],{"class":2320},[37,57506,55],{"class":50},[37,57508,51657],{"class":185},[37,57510,51643],{"class":50},[37,57512,57513],{"class":39,"line":104},[37,57514,2757],{"emptyLinePlaceholder":454},[37,57516,57517,57519,57521],{"class":39,"line":113},[37,57518,1418],{"class":50},[37,57520,51670],{"class":51636},[37,57522,51643],{"class":50},[37,57524,57525,57527,57529,57531,57533,57535],{"class":39,"line":189},[37,57526,52480],{"class":50},[37,57528,51680],{"class":51636},[37,57530,51683],{"class":2320},[37,57532,55],{"class":50},[37,57534,51688],{"class":185},[37,57536,51643],{"class":50},[37,57538,57539,57541,57543,57545,57547,57549,57551,57553,57555],{"class":39,"line":195},[37,57540,52480],{"class":50},[37,57542,51680],{"class":51636},[37,57544,15261],{"class":2320},[37,57546,55],{"class":50},[37,57548,51727],{"class":185},[37,57550,51707],{"class":2320},[37,57552,55],{"class":50},[37,57554,51734],{"class":185},[37,57556,51643],{"class":50},[37,57558,57559,57561,57563,57565,57567],{"class":39,"line":201},[37,57560,52480],{"class":50},[37,57562,51743],{"class":51636},[37,57564,51746],{"class":50},[37,57566,51743],{"class":51636},[37,57568,51643],{"class":50},[37,57570,57571,57573,57575],{"class":39,"line":207},[37,57572,52480],{"class":50},[37,57574,446],{"class":51636},[37,57576,51643],{"class":50},[37,57578,57579,57581],{"class":39,"line":213},[37,57580,6751],{"class":51636},[37,57582,15913],{"class":50},[37,57584,57585,57587,57589,57591],{"class":39,"line":218},[37,57586,55042],{"class":61},[37,57588,51773],{"class":50},[37,57590,135],{"class":61},[37,57592,1669],{"class":50},[37,57594,57595,57597,57599,57601],{"class":39,"line":227},[37,57596,55031],{"class":61},[37,57598,51773],{"class":50},[37,57600,135],{"class":61},[37,57602,1669],{"class":50},[37,57604,57605],{"class":39,"line":232},[37,57606,2544],{"class":50},[37,57608,57609],{"class":39,"line":238},[37,57610,2757],{"emptyLinePlaceholder":454},[37,57612,57613,57616],{"class":39,"line":244},[37,57614,57615],{"class":51636},"    h2",[37,57617,15913],{"class":50},[37,57619,57620,57623,57625,57627],{"class":39,"line":250},[37,57621,57622],{"class":61},"      text-align",[37,57624,51773],{"class":50},[37,57626,51928],{"class":61},[37,57628,1669],{"class":50},[37,57630,57631],{"class":39,"line":256},[37,57632,2544],{"class":50},[37,57634,57635],{"class":39,"line":261},[37,57636,2757],{"emptyLinePlaceholder":454},[37,57638,57639,57641],{"class":39,"line":267},[37,57640,55088],{"class":2320},[37,57642,15913],{"class":50},[37,57644,57645,57647,57649,57651,57653],{"class":39,"line":283},[37,57646,55107],{"class":61},[37,57648,51773],{"class":50},[37,57650,1915],{"class":61},[37,57652,51828],{"class":54},[37,57654,1669],{"class":50},[37,57656,57657,57659,57661,57663,57665,57667],{"class":39,"line":288},[37,57658,55042],{"class":61},[37,57660,51773],{"class":50},[37,57662,1166],{"class":61},[37,57664,51828],{"class":54},[37,57666,51892],{"class":61},[37,57668,1669],{"class":50},[37,57670,57671,57673,57675,57677],{"class":39,"line":294},[37,57672,55345],{"class":61},[37,57674,51773],{"class":50},[37,57676,51813],{"class":61},[37,57678,1669],{"class":50},[37,57680,57681,57683,57685,57687,57689],{"class":39,"line":300},[37,57682,55258],{"class":61},[37,57684,51773],{"class":50},[37,57686,1334],{"class":61},[37,57688,51828],{"class":54},[37,57690,1669],{"class":50},[37,57692,57693,57696,57698,57700,57702],{"class":39,"line":306},[37,57694,57695],{"class":61},"      line-height",[37,57697,51773],{"class":50},[37,57699,915],{"class":61},[37,57701,51828],{"class":54},[37,57703,1669],{"class":50},[37,57705,57706],{"class":39,"line":312},[37,57707,2544],{"class":50},[37,57709,57710],{"class":39,"line":317},[37,57711,2757],{"emptyLinePlaceholder":454},[37,57713,57714,57717],{"class":39,"line":323},[37,57715,57716],{"class":2320},"    .qs",[37,57718,15913],{"class":50},[37,57720,57721],{"class":39,"line":337},[37,57722,2757],{"emptyLinePlaceholder":454},[37,57724,57725,57727,57729,57732,57734],{"class":39,"line":342},[37,57726,55107],{"class":61},[37,57728,51773],{"class":50},[37,57730,57731],{"class":61},"450",[37,57733,51828],{"class":54},[37,57735,1669],{"class":50},[37,57737,57738,57740,57742,57744,57746],{"class":39,"line":347},[37,57739,55121],{"class":61},[37,57741,51773],{"class":50},[37,57743,915],{"class":61},[37,57745,51828],{"class":54},[37,57747,1669],{"class":50},[37,57749,57750,57753,57755,57758],{"class":39,"line":352},[37,57751,57752],{"class":61},"      color",[37,57754,51773],{"class":50},[37,57756,57757],{"class":61},"red",[37,57759,1669],{"class":50},[37,57761,57762],{"class":39,"line":357},[37,57763,2757],{"emptyLinePlaceholder":454},[37,57765,57766],{"class":39,"line":362},[37,57767,2544],{"class":50},[37,57769,57770],{"class":39,"line":367},[37,57771,2757],{"emptyLinePlaceholder":454},[37,57773,57774,57777],{"class":39,"line":373},[37,57775,57776],{"class":2320},"    .btns",[37,57778,15913],{"class":50},[37,57780,57781,57783,57785,57787],{"class":39,"line":392},[37,57782,57622],{"class":61},[37,57784,51773],{"class":50},[37,57786,51928],{"class":61},[37,57788,1669],{"class":50},[37,57790,57791],{"class":39,"line":398},[37,57792,2544],{"class":50},[37,57794,57795],{"class":39,"line":409},[37,57796,2757],{"emptyLinePlaceholder":454},[37,57798,57799,57801,57804],{"class":39,"line":415},[37,57800,57776],{"class":2320},[37,57802,57803],{"class":51636}," button",[37,57805,15913],{"class":50},[37,57807,57808,57810,57812,57814,57816],{"class":39,"line":420},[37,57809,55107],{"class":61},[37,57811,51773],{"class":50},[37,57813,1326],{"class":61},[37,57815,51828],{"class":54},[37,57817,1669],{"class":50},[37,57819,57820,57822,57824,57826,57828],{"class":39,"line":425},[37,57821,55121],{"class":61},[37,57823,51773],{"class":50},[37,57825,793],{"class":61},[37,57827,51828],{"class":54},[37,57829,1669],{"class":50},[37,57831,57832,57834,57836,57838,57841,57843],{"class":39,"line":431},[37,57833,55042],{"class":61},[37,57835,51773],{"class":50},[37,57837,135],{"class":61},[37,57839,57840],{"class":61}," 50",[37,57842,51828],{"class":54},[37,57844,1669],{"class":50},[37,57846,57847],{"class":39,"line":436},[37,57848,2544],{"class":50},[37,57850,57851,57853,57855],{"class":39,"line":442},[37,57852,52753],{"class":50},[37,57854,446],{"class":51636},[37,57856,51643],{"class":50},[37,57858,57859,57861,57863],{"class":39,"line":8374},[37,57860,52121],{"class":50},[37,57862,51670],{"class":51636},[37,57864,51643],{"class":50},[37,57866,57867],{"class":39,"line":8386},[37,57868,2757],{"emptyLinePlaceholder":454},[37,57870,57871,57873,57875],{"class":39,"line":8398},[37,57872,1418],{"class":50},[37,57874,52136],{"class":51636},[37,57876,51643],{"class":50},[37,57878,57879,57881,57883,57886,57888],{"class":39,"line":10057},[37,57880,52480],{"class":50},[37,57882,469],{"class":51636},[37,57884,57885],{"class":50},">随机点名\u003C\u002F",[37,57887,469],{"class":51636},[37,57889,51643],{"class":50},[37,57891,57892,57894,57896,57898,57900,57902],{"class":39,"line":10082},[37,57893,52480],{"class":50},[37,57895,51947],{"class":51636},[37,57897,53822],{"class":2320},[37,57899,55],{"class":50},[37,57901,53827],{"class":185},[37,57903,51643],{"class":50},[37,57905,57906,57908,57910,57913,57915],{"class":39,"line":10105},[37,57907,51677],{"class":50},[37,57909,37],{"class":51636},[37,57911,57912],{"class":50},">名字是：\u003C\u002F",[37,57914,37],{"class":51636},[37,57916,51643],{"class":50},[37,57918,57919,57921,57923,57925,57927,57930,57933,57935],{"class":39,"line":10129},[37,57920,51677],{"class":50},[37,57922,51947],{"class":51636},[37,57924,53822],{"class":2320},[37,57926,55],{"class":50},[37,57928,57929],{"class":185},"\"qs\"",[37,57931,57932],{"class":50},">这里显示姓名\u003C\u002F",[37,57934,51947],{"class":51636},[37,57936,51643],{"class":50},[37,57938,57939,57941,57943],{"class":39,"line":10134},[37,57940,52753],{"class":50},[37,57942,51947],{"class":51636},[37,57944,51643],{"class":50},[37,57946,57947,57949,57951,57953,57955,57958],{"class":39,"line":10139},[37,57948,52480],{"class":50},[37,57950,51947],{"class":51636},[37,57952,53822],{"class":2320},[37,57954,55],{"class":50},[37,57956,57957],{"class":185},"\"btns\"",[37,57959,51643],{"class":50},[37,57961,57962,57964,57966,57968,57970,57973,57976,57978],{"class":39,"line":10144},[37,57963,51677],{"class":50},[37,57965,54223],{"class":51636},[37,57967,53822],{"class":2320},[37,57969,55],{"class":50},[37,57971,57972],{"class":185},"\"start\"",[37,57974,57975],{"class":50},">开始\u003C\u002F",[37,57977,54223],{"class":51636},[37,57979,51643],{"class":50},[37,57981,57982,57984,57986,57988,57990,57993,57996,57998],{"class":39,"line":10153},[37,57983,51677],{"class":50},[37,57985,54223],{"class":51636},[37,57987,53822],{"class":2320},[37,57989,55],{"class":50},[37,57991,57992],{"class":185},"\"end\"",[37,57994,57995],{"class":50},">结束\u003C\u002F",[37,57997,54223],{"class":51636},[37,57999,51643],{"class":50},[37,58001,58002,58004,58006],{"class":39,"line":10158},[37,58003,52753],{"class":50},[37,58005,51947],{"class":51636},[37,58007,51643],{"class":50},[37,58009,58010],{"class":39,"line":10164},[37,58011,2757],{"emptyLinePlaceholder":454},[37,58013,58014,58016,58018],{"class":39,"line":10185},[37,58015,52480],{"class":50},[37,58017,52149],{"class":51636},[37,58019,51643],{"class":50},[37,58021,58022],{"class":39,"line":10191},[37,58023,58024],{"class":43},"    \u002F\u002F 数据数组\n",[37,58026,58027,58029,58032,58034,58036,58039,58041,58044,58046,58049,58051,58054,58056,58059],{"class":39,"line":10205},[37,58028,11562],{"class":54},[37,58030,58031],{"class":61}," arr",[37,58033,13905],{"class":54},[37,58035,52562],{"class":50},[37,58037,58038],{"class":185},"'马超'",[37,58040,12776],{"class":50},[37,58042,58043],{"class":185},"'黄忠'",[37,58045,12776],{"class":50},[37,58047,58048],{"class":185},"'赵云'",[37,58050,12776],{"class":50},[37,58052,58053],{"class":185},"'关羽'",[37,58055,12776],{"class":50},[37,58057,58058],{"class":185},"'张飞'",[37,58060,389],{"class":50},[37,58062,58063,58065,58068,58070,58072,58074,58076,58079],{"class":39,"line":10211},[37,58064,11562],{"class":54},[37,58066,58067],{"class":61}," qs",[37,58069,13905],{"class":54},[37,58071,54732],{"class":50},[37,58073,54735],{"class":2320},[37,58075,165],{"class":50},[37,58077,58078],{"class":185},"'.qs'",[37,58080,280],{"class":50},[37,58082,58083],{"class":39,"line":10238},[37,58084,58085],{"class":43},"    \u002F\u002F 1.业务1.开始按钮模块\n",[37,58087,58088,58090,58092,58094,58096,58098,58100,58103],{"class":39,"line":10247},[37,58089,11562],{"class":54},[37,58091,4534],{"class":61},[37,58093,13905],{"class":54},[37,58095,54732],{"class":50},[37,58097,54735],{"class":2320},[37,58099,165],{"class":50},[37,58101,58102],{"class":185},"'.start'",[37,58104,280],{"class":50},[37,58106,58107],{"class":39,"line":10253},[37,58108,58109],{"class":43},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[37,58111,58112,58114,58117,58119],{"class":39,"line":10261},[37,58113,52555],{"class":54},[37,58115,58116],{"class":50}," timerId ",[37,58118,55],{"class":54},[37,58120,47670],{"class":61},[37,58122,58123],{"class":39,"line":10266},[37,58124,58125],{"class":43},"    \u002F\u002F 随机号要全局变量\n",[37,58127,58128,58130,58133,58135],{"class":39,"line":16945},[37,58129,52555],{"class":54},[37,58131,58132],{"class":50}," random ",[37,58134,55],{"class":54},[37,58136,47670],{"class":61},[37,58138,58139],{"class":39,"line":16951},[37,58140,58141],{"class":43},"    \u002F\u002F 1.1 添加点击事件\n",[37,58143,58144,58147,58150,58152,58155,58157,58159],{"class":39,"line":16974},[37,58145,58146],{"class":50},"    start.",[37,58148,58149],{"class":2320},"addEventListener",[37,58151,165],{"class":50},[37,58153,58154],{"class":185},"'click'",[37,58156,12776],{"class":50},[37,58158,54785],{"class":54},[37,58160,54788],{"class":50},[37,58162,58163,58166,58168,58170,58172,58174],{"class":39,"line":16980},[37,58164,58165],{"class":50},"      timerId ",[37,58167,55],{"class":54},[37,58169,54780],{"class":2320},[37,58171,165],{"class":50},[37,58173,54785],{"class":54},[37,58175,54788],{"class":50},[37,58177,58178],{"class":39,"line":17003},[37,58179,58180],{"class":43},"        \u002F\u002F 随机数\n",[37,58182,58183,58186,58188,58191,58194,58197,58199,58201,58203,58205],{"class":39,"line":17017},[37,58184,58185],{"class":50},"        random ",[37,58187,55],{"class":54},[37,58189,58190],{"class":2320}," parseInt",[37,58192,58193],{"class":50},"(Math.",[37,58195,58196],{"class":2320},"random",[37,58198,13391],{"class":50},[37,58200,967],{"class":54},[37,58202,52301],{"class":50},[37,58204,52304],{"class":61},[37,58206,280],{"class":50},[37,58208,58209,58212,58214],{"class":39,"line":17037},[37,58210,58211],{"class":50},"        qs.innerHTML ",[37,58213,55],{"class":54},[37,58215,58216],{"class":50}," arr[random]\n",[37,58218,58219,58222,58224],{"class":39,"line":17043},[37,58220,58221],{"class":50},"      }, ",[37,58223,793],{"class":61},[37,58225,280],{"class":50},[37,58227,58228],{"class":39,"line":17054},[37,58229,58230],{"class":43},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[37,58232,58233,58235,58238,58240,58243,58245],{"class":39,"line":17077},[37,58234,54816],{"class":54},[37,58236,58237],{"class":50}," (arr.",[37,58239,52304],{"class":61},[37,58241,58242],{"class":54}," ===",[37,58244,25460],{"class":61},[37,58246,12783],{"class":50},[37,58248,58249],{"class":39,"line":17099},[37,58250,58251],{"class":43},"        \u002F\u002F start.disabled = true\n",[37,58253,58254],{"class":39,"line":17104},[37,58255,58256],{"class":43},"        \u002F\u002F end.disabled = true\n",[37,58258,58259],{"class":39,"line":17110},[37,58260,58261],{"class":43},"        \u002F\u002F 可以合起来写\n",[37,58263,58264,58267,58269,58272,58274],{"class":39,"line":17124},[37,58265,58266],{"class":50},"        start.disabled ",[37,58268,55],{"class":54},[37,58270,58271],{"class":50}," end.disabled ",[37,58273,55],{"class":54},[37,58275,58276],{"class":61}," true\n",[37,58278,58279],{"class":39,"line":17137},[37,58280,52734],{"class":50},[37,58282,58283],{"class":39,"line":17142},[37,58284,33798],{"class":50},[37,58286,58287],{"class":39,"line":17156},[37,58288,58289],{"class":43},"    \u002F\u002F 1.2 关闭按钮模块\n",[37,58291,58292,58294,58296,58298,58300,58302,58304,58307],{"class":39,"line":17161},[37,58293,11562],{"class":54},[37,58295,4550],{"class":61},[37,58297,13905],{"class":54},[37,58299,54732],{"class":50},[37,58301,54735],{"class":2320},[37,58303,165],{"class":50},[37,58305,58306],{"class":185},"'.end'",[37,58308,280],{"class":50},[37,58310,58311,58314,58316,58318,58320,58322,58324],{"class":39,"line":17167},[37,58312,58313],{"class":50},"    end.",[37,58315,58149],{"class":2320},[37,58317,165],{"class":50},[37,58319,58154],{"class":185},[37,58321,12776],{"class":50},[37,58323,54785],{"class":54},[37,58325,54788],{"class":50},[37,58327,58328,58331],{"class":39,"line":17172},[37,58329,58330],{"class":2320},"      clearInterval",[37,58332,58333],{"class":50},"(timerId)\n",[37,58335,58336],{"class":39,"line":17186},[37,58337,58338],{"class":43},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[37,58340,58341,58344,58347,58350,58352],{"class":39,"line":17191},[37,58342,58343],{"class":50},"      arr.",[37,58345,58346],{"class":2320},"splice",[37,58348,58349],{"class":50},"(random, ",[37,58351,332],{"class":61},[37,58353,280],{"class":50},[37,58355,58356],{"class":39,"line":17196},[37,58357,33798],{"class":50},[37,58359,58360],{"class":39,"line":17210},[37,58361,2757],{"emptyLinePlaceholder":454},[37,58363,58364,58366,58368],{"class":39,"line":17222},[37,58365,52753],{"class":50},[37,58367,52149],{"class":51636},[37,58369,51643],{"class":50},[37,58371,58372,58374,58376],{"class":39,"line":17227},[37,58373,52121],{"class":50},[37,58375,52136],{"class":51636},[37,58377,51643],{"class":50},[37,58379,58380],{"class":39,"line":17240},[37,58381,2757],{"emptyLinePlaceholder":454},[37,58383,58384,58386,58388],{"class":39,"line":17245},[37,58385,52121],{"class":50},[37,58387,50971],{"class":51636},[37,58389,51643],{"class":50},[14,58391,58392],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[498,58394,58396],{"id":58395},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[27,58398,58400],{"className":50969,"code":58399,"language":50971,"meta":32,"style":32},"\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",[34,58401,58402,58412,58426,58430,58438,58452,58472,58484,58492,58496,58504,58516,58524,58543,58560,58576,58586,58590,58598,58606,58610],{"__ignoreMap":32},[37,58403,58404,58406,58408,58410],{"class":39,"line":40},[37,58405,51633],{"class":50},[37,58407,51637],{"class":51636},[37,58409,51640],{"class":2320},[37,58411,51643],{"class":50},[37,58413,58414,58416,58418,58420,58422,58424],{"class":39,"line":47},[37,58415,1418],{"class":50},[37,58417,50971],{"class":51636},[37,58419,51652],{"class":2320},[37,58421,55],{"class":50},[37,58423,51657],{"class":185},[37,58425,51643],{"class":50},[37,58427,58428],{"class":39,"line":104},[37,58429,2757],{"emptyLinePlaceholder":454},[37,58431,58432,58434,58436],{"class":39,"line":113},[37,58433,1418],{"class":50},[37,58435,51670],{"class":51636},[37,58437,51643],{"class":50},[37,58439,58440,58442,58444,58446,58448,58450],{"class":39,"line":189},[37,58441,52480],{"class":50},[37,58443,51680],{"class":51636},[37,58445,51683],{"class":2320},[37,58447,55],{"class":50},[37,58449,51688],{"class":185},[37,58451,51643],{"class":50},[37,58453,58454,58456,58458,58460,58462,58464,58466,58468,58470],{"class":39,"line":195},[37,58455,52480],{"class":50},[37,58457,51680],{"class":51636},[37,58459,15261],{"class":2320},[37,58461,55],{"class":50},[37,58463,51727],{"class":185},[37,58465,51707],{"class":2320},[37,58467,55],{"class":50},[37,58469,51734],{"class":185},[37,58471,51643],{"class":50},[37,58473,58474,58476,58478,58480,58482],{"class":39,"line":201},[37,58475,52480],{"class":50},[37,58477,51743],{"class":51636},[37,58479,51746],{"class":50},[37,58481,51743],{"class":51636},[37,58483,51643],{"class":50},[37,58485,58486,58488,58490],{"class":39,"line":207},[37,58487,52121],{"class":50},[37,58489,51670],{"class":51636},[37,58491,51643],{"class":50},[37,58493,58494],{"class":39,"line":213},[37,58495,2757],{"emptyLinePlaceholder":454},[37,58497,58498,58500,58502],{"class":39,"line":218},[37,58499,1418],{"class":50},[37,58501,52136],{"class":51636},[37,58503,51643],{"class":50},[37,58505,58506,58508,58510,58512,58514],{"class":39,"line":227},[37,58507,52480],{"class":50},[37,58509,54223],{"class":51636},[37,58511,54229],{"class":50},[37,58513,54223],{"class":51636},[37,58515,51643],{"class":50},[37,58517,58518,58520,58522],{"class":39,"line":232},[37,58519,52480],{"class":50},[37,58521,52149],{"class":51636},[37,58523,51643],{"class":50},[37,58525,58526,58528,58530,58532,58534,58536,58538,58541],{"class":39,"line":238},[37,58527,11562],{"class":54},[37,58529,54727],{"class":61},[37,58531,13905],{"class":54},[37,58533,54732],{"class":50},[37,58535,54735],{"class":2320},[37,58537,165],{"class":50},[37,58539,58540],{"class":185},"'button'",[37,58542,280],{"class":50},[37,58544,58545,58548,58550,58552,58554,58556,58558],{"class":39,"line":244},[37,58546,58547],{"class":50},"    btn.",[37,58549,58149],{"class":2320},[37,58551,165],{"class":50},[37,58553,58154],{"class":185},[37,58555,12776],{"class":50},[37,58557,54785],{"class":54},[37,58559,54788],{"class":50},[37,58561,58562,58565,58567,58569,58572,58574],{"class":39,"line":250},[37,58563,58564],{"class":54},"      const",[37,58566,2597],{"class":61},[37,58568,13905],{"class":54},[37,58570,58571],{"class":50}," Math.",[37,58573,58196],{"class":2320},[37,58575,2333],{"class":50},[37,58577,58578,58581,58584],{"class":39,"line":256},[37,58579,58580],{"class":50},"      console.",[37,58582,58583],{"class":2320},"log",[37,58585,542],{"class":50},[37,58587,58588],{"class":39,"line":261},[37,58589,33798],{"class":50},[37,58591,58592,58594,58596],{"class":39,"line":267},[37,58593,52753],{"class":50},[37,58595,52149],{"class":51636},[37,58597,51643],{"class":50},[37,58599,58600,58602,58604],{"class":39,"line":283},[37,58601,52121],{"class":50},[37,58603,52136],{"class":51636},[37,58605,51643],{"class":50},[37,58607,58608],{"class":39,"line":288},[37,58609,2757],{"emptyLinePlaceholder":454},[37,58611,58612,58614,58616],{"class":39,"line":294},[37,58613,52121],{"class":50},[37,58615,50971],{"class":51636},[37,58617,51643],{"class":50},[14,58619,58620],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58622,58623],{},"常量不可以重新赋值",[14,58625,58626],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[27,58628,58630],{"className":50969,"code":58629,"language":50971,"meta":32,"style":32},"\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",[34,58631,58632,58642,58656,58660,58668,58682,58702,58714,58722,58726,58734,58746,58754,58765,58783,58799,58813,58821,58825,58833,58841,58845],{"__ignoreMap":32},[37,58633,58634,58636,58638,58640],{"class":39,"line":40},[37,58635,51633],{"class":50},[37,58637,51637],{"class":51636},[37,58639,51640],{"class":2320},[37,58641,51643],{"class":50},[37,58643,58644,58646,58648,58650,58652,58654],{"class":39,"line":47},[37,58645,1418],{"class":50},[37,58647,50971],{"class":51636},[37,58649,51652],{"class":2320},[37,58651,55],{"class":50},[37,58653,51657],{"class":185},[37,58655,51643],{"class":50},[37,58657,58658],{"class":39,"line":104},[37,58659,2757],{"emptyLinePlaceholder":454},[37,58661,58662,58664,58666],{"class":39,"line":113},[37,58663,1418],{"class":50},[37,58665,51670],{"class":51636},[37,58667,51643],{"class":50},[37,58669,58670,58672,58674,58676,58678,58680],{"class":39,"line":189},[37,58671,52480],{"class":50},[37,58673,51680],{"class":51636},[37,58675,51683],{"class":2320},[37,58677,55],{"class":50},[37,58679,51688],{"class":185},[37,58681,51643],{"class":50},[37,58683,58684,58686,58688,58690,58692,58694,58696,58698,58700],{"class":39,"line":195},[37,58685,52480],{"class":50},[37,58687,51680],{"class":51636},[37,58689,15261],{"class":2320},[37,58691,55],{"class":50},[37,58693,51727],{"class":185},[37,58695,51707],{"class":2320},[37,58697,55],{"class":50},[37,58699,51734],{"class":185},[37,58701,51643],{"class":50},[37,58703,58704,58706,58708,58710,58712],{"class":39,"line":201},[37,58705,52480],{"class":50},[37,58707,51743],{"class":51636},[37,58709,51746],{"class":50},[37,58711,51743],{"class":51636},[37,58713,51643],{"class":50},[37,58715,58716,58718,58720],{"class":39,"line":207},[37,58717,52121],{"class":50},[37,58719,51670],{"class":51636},[37,58721,51643],{"class":50},[37,58723,58724],{"class":39,"line":213},[37,58725,2757],{"emptyLinePlaceholder":454},[37,58727,58728,58730,58732],{"class":39,"line":218},[37,58729,1418],{"class":50},[37,58731,52136],{"class":51636},[37,58733,51643],{"class":50},[37,58735,58736,58738,58740,58742,58744],{"class":39,"line":227},[37,58737,52480],{"class":50},[37,58739,54223],{"class":51636},[37,58741,54229],{"class":50},[37,58743,54223],{"class":51636},[37,58745,51643],{"class":50},[37,58747,58748,58750,58752],{"class":39,"line":232},[37,58749,52480],{"class":50},[37,58751,52149],{"class":51636},[37,58753,51643],{"class":50},[37,58755,58756,58758,58760,58762],{"class":39,"line":238},[37,58757,11562],{"class":54},[37,58759,2597],{"class":61},[37,58761,13905],{"class":54},[37,58763,58764],{"class":61}," 10\n",[37,58766,58767,58769,58771,58773,58775,58777,58779,58781],{"class":39,"line":244},[37,58768,11562],{"class":54},[37,58770,54727],{"class":61},[37,58772,13905],{"class":54},[37,58774,54732],{"class":50},[37,58776,54735],{"class":2320},[37,58778,165],{"class":50},[37,58780,58540],{"class":185},[37,58782,280],{"class":50},[37,58784,58785,58787,58789,58791,58793,58795,58797],{"class":39,"line":250},[37,58786,58547],{"class":50},[37,58788,58149],{"class":2320},[37,58790,165],{"class":50},[37,58792,58154],{"class":185},[37,58794,12776],{"class":50},[37,58796,54785],{"class":54},[37,58798,54788],{"class":50},[37,58800,58801,58803,58805,58807,58809,58811],{"class":39,"line":256},[37,58802,58564],{"class":54},[37,58804,2597],{"class":61},[37,58806,13905],{"class":54},[37,58808,58571],{"class":50},[37,58810,58196],{"class":2320},[37,58812,2333],{"class":50},[37,58814,58815,58817,58819],{"class":39,"line":261},[37,58816,58580],{"class":50},[37,58818,58583],{"class":2320},[37,58820,542],{"class":50},[37,58822,58823],{"class":39,"line":267},[37,58824,33798],{"class":50},[37,58826,58827,58829,58831],{"class":39,"line":283},[37,58828,52753],{"class":50},[37,58830,52149],{"class":51636},[37,58832,51643],{"class":50},[37,58834,58835,58837,58839],{"class":39,"line":288},[37,58836,52121],{"class":50},[37,58838,52136],{"class":51636},[37,58840,51643],{"class":50},[37,58842,58843],{"class":39,"line":294},[37,58844,2757],{"emptyLinePlaceholder":454},[37,58846,58847,58849,58851],{"class":39,"line":300},[37,58848,52121],{"class":50},[37,58850,50971],{"class":51636},[37,58852,51643],{"class":50},[14,58854,58855],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[27,58857,58859],{"className":50969,"code":58858,"language":50971,"meta":32,"style":32},"\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",[34,58860,58861,58871,58885,58889,58897,58911,58931,58943,58951,58955,58963,58975,58983,58993,59011,59027,59040,59048,59052,59060,59068,59072],{"__ignoreMap":32},[37,58862,58863,58865,58867,58869],{"class":39,"line":40},[37,58864,51633],{"class":50},[37,58866,51637],{"class":51636},[37,58868,51640],{"class":2320},[37,58870,51643],{"class":50},[37,58872,58873,58875,58877,58879,58881,58883],{"class":39,"line":47},[37,58874,1418],{"class":50},[37,58876,50971],{"class":51636},[37,58878,51652],{"class":2320},[37,58880,55],{"class":50},[37,58882,51657],{"class":185},[37,58884,51643],{"class":50},[37,58886,58887],{"class":39,"line":104},[37,58888,2757],{"emptyLinePlaceholder":454},[37,58890,58891,58893,58895],{"class":39,"line":113},[37,58892,1418],{"class":50},[37,58894,51670],{"class":51636},[37,58896,51643],{"class":50},[37,58898,58899,58901,58903,58905,58907,58909],{"class":39,"line":189},[37,58900,52480],{"class":50},[37,58902,51680],{"class":51636},[37,58904,51683],{"class":2320},[37,58906,55],{"class":50},[37,58908,51688],{"class":185},[37,58910,51643],{"class":50},[37,58912,58913,58915,58917,58919,58921,58923,58925,58927,58929],{"class":39,"line":195},[37,58914,52480],{"class":50},[37,58916,51680],{"class":51636},[37,58918,15261],{"class":2320},[37,58920,55],{"class":50},[37,58922,51727],{"class":185},[37,58924,51707],{"class":2320},[37,58926,55],{"class":50},[37,58928,51734],{"class":185},[37,58930,51643],{"class":50},[37,58932,58933,58935,58937,58939,58941],{"class":39,"line":201},[37,58934,52480],{"class":50},[37,58936,51743],{"class":51636},[37,58938,51746],{"class":50},[37,58940,51743],{"class":51636},[37,58942,51643],{"class":50},[37,58944,58945,58947,58949],{"class":39,"line":207},[37,58946,52121],{"class":50},[37,58948,51670],{"class":51636},[37,58950,51643],{"class":50},[37,58952,58953],{"class":39,"line":213},[37,58954,2757],{"emptyLinePlaceholder":454},[37,58956,58957,58959,58961],{"class":39,"line":218},[37,58958,1418],{"class":50},[37,58960,52136],{"class":51636},[37,58962,51643],{"class":50},[37,58964,58965,58967,58969,58971,58973],{"class":39,"line":227},[37,58966,52480],{"class":50},[37,58968,54223],{"class":51636},[37,58970,54229],{"class":50},[37,58972,54223],{"class":51636},[37,58974,51643],{"class":50},[37,58976,58977,58979,58981],{"class":39,"line":232},[37,58978,52480],{"class":50},[37,58980,52149],{"class":51636},[37,58982,51643],{"class":50},[37,58984,58985,58987,58989,58991],{"class":39,"line":238},[37,58986,11562],{"class":54},[37,58988,2597],{"class":61},[37,58990,13905],{"class":54},[37,58992,58764],{"class":61},[37,58994,58995,58997,58999,59001,59003,59005,59007,59009],{"class":39,"line":244},[37,58996,11562],{"class":54},[37,58998,54727],{"class":61},[37,59000,13905],{"class":54},[37,59002,54732],{"class":50},[37,59004,54735],{"class":2320},[37,59006,165],{"class":50},[37,59008,58540],{"class":185},[37,59010,280],{"class":50},[37,59012,59013,59015,59017,59019,59021,59023,59025],{"class":39,"line":250},[37,59014,58547],{"class":50},[37,59016,58149],{"class":2320},[37,59018,165],{"class":50},[37,59020,58154],{"class":185},[37,59022,12776],{"class":50},[37,59024,54785],{"class":54},[37,59026,54788],{"class":50},[37,59028,59029,59032,59034,59036,59038],{"class":39,"line":256},[37,59030,59031],{"class":50},"      num ",[37,59033,55],{"class":54},[37,59035,58571],{"class":50},[37,59037,58196],{"class":2320},[37,59039,2333],{"class":50},[37,59041,59042,59044,59046],{"class":39,"line":261},[37,59043,58580],{"class":50},[37,59045,58583],{"class":2320},[37,59047,542],{"class":50},[37,59049,59050],{"class":39,"line":267},[37,59051,33798],{"class":50},[37,59053,59054,59056,59058],{"class":39,"line":283},[37,59055,52753],{"class":50},[37,59057,52149],{"class":51636},[37,59059,51643],{"class":50},[37,59061,59062,59064,59066],{"class":39,"line":288},[37,59063,52121],{"class":50},[37,59065,52136],{"class":51636},[37,59067,51643],{"class":50},[37,59069,59070],{"class":39,"line":294},[37,59071,2757],{"emptyLinePlaceholder":454},[37,59073,59074,59076,59078],{"class":39,"line":300},[37,59075,52121],{"class":50},[37,59077,50971],{"class":51636},[37,59079,51643],{"class":50},[14,59081,59082],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[498,59084,59086],{"id":59085},"_324-事件监听版本","3.2.4 事件监听版本",[14,59088,59089],{},[1838,59090],{"alt":32,"src":59091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,59093,59094],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,59096,59097],{},"这种方式会覆盖前边的事件监听:",[27,59099,59101],{"className":50969,"code":59100,"language":50971,"meta":32,"style":32},"\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",[34,59102,59103,59113,59127,59131,59139,59153,59173,59185,59193,59197,59205,59217,59225,59243,59257,59268,59272,59284,59294,59298,59306,59314,59318],{"__ignoreMap":32},[37,59104,59105,59107,59109,59111],{"class":39,"line":40},[37,59106,51633],{"class":50},[37,59108,51637],{"class":51636},[37,59110,51640],{"class":2320},[37,59112,51643],{"class":50},[37,59114,59115,59117,59119,59121,59123,59125],{"class":39,"line":47},[37,59116,1418],{"class":50},[37,59118,50971],{"class":51636},[37,59120,51652],{"class":2320},[37,59122,55],{"class":50},[37,59124,51657],{"class":185},[37,59126,51643],{"class":50},[37,59128,59129],{"class":39,"line":104},[37,59130,2757],{"emptyLinePlaceholder":454},[37,59132,59133,59135,59137],{"class":39,"line":113},[37,59134,1418],{"class":50},[37,59136,51670],{"class":51636},[37,59138,51643],{"class":50},[37,59140,59141,59143,59145,59147,59149,59151],{"class":39,"line":189},[37,59142,52480],{"class":50},[37,59144,51680],{"class":51636},[37,59146,51683],{"class":2320},[37,59148,55],{"class":50},[37,59150,51688],{"class":185},[37,59152,51643],{"class":50},[37,59154,59155,59157,59159,59161,59163,59165,59167,59169,59171],{"class":39,"line":195},[37,59156,52480],{"class":50},[37,59158,51680],{"class":51636},[37,59160,15261],{"class":2320},[37,59162,55],{"class":50},[37,59164,51727],{"class":185},[37,59166,51707],{"class":2320},[37,59168,55],{"class":50},[37,59170,51734],{"class":185},[37,59172,51643],{"class":50},[37,59174,59175,59177,59179,59181,59183],{"class":39,"line":201},[37,59176,52480],{"class":50},[37,59178,51743],{"class":51636},[37,59180,51746],{"class":50},[37,59182,51743],{"class":51636},[37,59184,51643],{"class":50},[37,59186,59187,59189,59191],{"class":39,"line":207},[37,59188,52121],{"class":50},[37,59190,51670],{"class":51636},[37,59192,51643],{"class":50},[37,59194,59195],{"class":39,"line":213},[37,59196,2757],{"emptyLinePlaceholder":454},[37,59198,59199,59201,59203],{"class":39,"line":218},[37,59200,1418],{"class":50},[37,59202,52136],{"class":51636},[37,59204,51643],{"class":50},[37,59206,59207,59209,59211,59213,59215],{"class":39,"line":227},[37,59208,52480],{"class":50},[37,59210,54223],{"class":51636},[37,59212,54229],{"class":50},[37,59214,54223],{"class":51636},[37,59216,51643],{"class":50},[37,59218,59219,59221,59223],{"class":39,"line":232},[37,59220,52480],{"class":50},[37,59222,52149],{"class":51636},[37,59224,51643],{"class":50},[37,59226,59227,59229,59231,59233,59235,59237,59239,59241],{"class":39,"line":238},[37,59228,11562],{"class":54},[37,59230,54727],{"class":61},[37,59232,13905],{"class":54},[37,59234,54732],{"class":50},[37,59236,54735],{"class":2320},[37,59238,165],{"class":50},[37,59240,58540],{"class":185},[37,59242,280],{"class":50},[37,59244,59245,59247,59250,59252,59255],{"class":39,"line":244},[37,59246,58547],{"class":50},[37,59248,59249],{"class":2320},"onclick",[37,59251,13905],{"class":54},[37,59253,59254],{"class":54}," function",[37,59256,54788],{"class":50},[37,59258,59259,59262,59264,59266],{"class":39,"line":250},[37,59260,59261],{"class":2320},"      alert",[37,59263,165],{"class":50},[37,59265,984],{"class":61},[37,59267,280],{"class":50},[37,59269,59270],{"class":39,"line":256},[37,59271,2544],{"class":50},[37,59273,59274,59276,59278,59280,59282],{"class":39,"line":261},[37,59275,58547],{"class":50},[37,59277,59249],{"class":2320},[37,59279,13905],{"class":54},[37,59281,59254],{"class":54},[37,59283,54788],{"class":50},[37,59285,59286,59288,59290,59292],{"class":39,"line":267},[37,59287,59261],{"class":2320},[37,59289,165],{"class":50},[37,59291,1260],{"class":61},[37,59293,280],{"class":50},[37,59295,59296],{"class":39,"line":283},[37,59297,2544],{"class":50},[37,59299,59300,59302,59304],{"class":39,"line":288},[37,59301,52753],{"class":50},[37,59303,52149],{"class":51636},[37,59305,51643],{"class":50},[37,59307,59308,59310,59312],{"class":39,"line":294},[37,59309,52121],{"class":50},[37,59311,52136],{"class":51636},[37,59313,51643],{"class":50},[37,59315,59316],{"class":39,"line":300},[37,59317,2757],{"emptyLinePlaceholder":454},[37,59319,59320,59322,59324],{"class":39,"line":306},[37,59321,52121],{"class":50},[37,59323,50971],{"class":51636},[37,59325,51643],{"class":50},[14,59327,59328],{},"只要点击就输出结果为22,前边11被覆盖了",[27,59330,59332],{"className":50969,"code":59331,"language":50971,"meta":32,"style":32},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[34,59333,59334,59339,59344,59348,59353,59358],{"__ignoreMap":32},[37,59335,59336],{"class":39,"line":40},[37,59337,59338],{"class":50},"  btn.addEventListener('click', function () {\n",[37,59340,59341],{"class":39,"line":47},[37,59342,59343],{"class":50},"      alert(11)\n",[37,59345,59346],{"class":39,"line":104},[37,59347,33798],{"class":50},[37,59349,59350],{"class":39,"line":113},[37,59351,59352],{"class":50},"    btn.addEventListener('click', function () {\n",[37,59354,59355],{"class":39,"line":189},[37,59356,59357],{"class":50},"      alert(22)\n",[37,59359,59360],{"class":39,"line":195},[37,59361,33798],{"class":50},[14,59363,59364],{},"点击第一次输出11,第二次点击为22",[498,59366,59368],{"id":59367},"_325-事件类型","3.2.5 事件类型",[14,59370,59371],{},[1838,59372],{"alt":32,"src":59373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22339,59375,59377],{"id":59376},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59379,59380],{},"补充知识:",[14,59382,59383],{},"轮播图自动播放模块,可以使用",[14,59385,59386],{},"let timerId = setInterval(function () {",[14,59388,59389],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59391,59392],{},"用js方法模拟进行点击事件,click必须加()",[14,59394,59395],{},"next.click()",[14,59397,59398],{},"}, 1000)",[14,59400,59401],{},[1838,59402],{"alt":32,"src":59403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[27,59405,59407],{"className":53403,"code":59406,"language":53405,"meta":32,"style":32},"\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",[34,59408,59409,59413,59423,59437,59441,59449,59464,59484,59504,59517,59525,59530,59535,59539,59543,59548,59553,59558,59563,59567,59571,59576,59581,59586,59590,59594,59599,59603,59608,59613,59617,59621,59626,59631,59636,59641,59646,59650,59654,59659,59664,59669,59674,59679,59683,59687,59692,59697,59702,59707,59712,59717,59722,59727,59732,59737,59741,59745,59750,59755,59759,59763,59768,59773,59777,59782,59787,59791,59795,59800,59804,59809,59814,59818,59823,59827,59831,59836,59841,59846,59851,59856,59861,59866,59870,59874,59878,59883,59888,59893,59898,59902,59910,59918,59922,59930,59945,59959,59980,59988,60002,60015,60030,60049,60061,60073,60085,60097,60109,60121,60133,60141,60156,60180,60204,60212,60220,60228,60236,60241,60246,60251,60256,60261,60266,60271,60276,60281,60286,60290,60295,60300,60305,60310,60315,60320,60325,60330,60335,60339,60344,60349,60354,60359,60364,60369,60374,60379,60384,60389,60394,60399,60403,60407,60412,60417,60422,60426,60431,60436,60441,60446,60451,60455,60460,60464,60468,60472,60476,60480,60484,60489,60494,60499,60504,60509,60514,60519,60524,60529,60533,60537,60542,60547,60552,60557,60562,60566,60571,60576,60581,60586,60591,60596,60600,60604,60609,60613,60618,60622,60627,60632,60637,60642,60647,60652,60656,60664,60672,60676],{"__ignoreMap":32},[37,59410,59411],{"class":39,"line":40},[37,59412,2757],{"emptyLinePlaceholder":454},[37,59414,59415,59417,59419,59421],{"class":39,"line":47},[37,59416,51633],{"class":50},[37,59418,51637],{"class":54},[37,59420,51640],{"class":61},[37,59422,51643],{"class":50},[37,59424,59425,59427,59429,59431,59433,59435],{"class":39,"line":104},[37,59426,1418],{"class":50},[37,59428,50971],{"class":51636},[37,59430,51652],{"class":2320},[37,59432,55],{"class":50},[37,59434,51657],{"class":185},[37,59436,51643],{"class":50},[37,59438,59439],{"class":39,"line":113},[37,59440,2757],{"emptyLinePlaceholder":454},[37,59442,59443,59445,59447],{"class":39,"line":189},[37,59444,1418],{"class":50},[37,59446,51670],{"class":51636},[37,59448,51643],{"class":50},[37,59450,59451,59453,59455,59457,59459,59461],{"class":39,"line":195},[37,59452,52480],{"class":50},[37,59454,51680],{"class":51636},[37,59456,51683],{"class":2320},[37,59458,55],{"class":50},[37,59460,51688],{"class":185},[37,59462,59463],{"class":50}," \u002F>\n",[37,59465,59466,59468,59470,59472,59474,59476,59478,59480,59482],{"class":39,"line":201},[37,59467,52480],{"class":50},[37,59469,51680],{"class":51636},[37,59471,51699],{"class":2320},[37,59473,55],{"class":50},[37,59475,51704],{"class":185},[37,59477,51707],{"class":2320},[37,59479,55],{"class":50},[37,59481,51712],{"class":185},[37,59483,59463],{"class":50},[37,59485,59486,59488,59490,59492,59494,59496,59498,59500,59502],{"class":39,"line":207},[37,59487,52480],{"class":50},[37,59489,51680],{"class":51636},[37,59491,15261],{"class":2320},[37,59493,55],{"class":50},[37,59495,51727],{"class":185},[37,59497,51707],{"class":2320},[37,59499,55],{"class":50},[37,59501,51734],{"class":185},[37,59503,59463],{"class":50},[37,59505,59506,59508,59510,59513,59515],{"class":39,"line":213},[37,59507,52480],{"class":50},[37,59509,51743],{"class":51636},[37,59511,59512],{"class":50},">轮播图点击切换\u003C\u002F",[37,59514,51743],{"class":51636},[37,59516,51643],{"class":50},[37,59518,59519,59521,59523],{"class":39,"line":218},[37,59520,52480],{"class":50},[37,59522,446],{"class":51636},[37,59524,51643],{"class":50},[37,59526,59527],{"class":39,"line":227},[37,59528,59529],{"class":50},"    * {\n",[37,59531,59532],{"class":39,"line":232},[37,59533,59534],{"class":50},"      box-sizing: border-box;\n",[37,59536,59537],{"class":39,"line":238},[37,59538,2544],{"class":50},[37,59540,59541],{"class":39,"line":244},[37,59542,2757],{"emptyLinePlaceholder":454},[37,59544,59545],{"class":39,"line":250},[37,59546,59547],{"class":50},"    .slider {\n",[37,59549,59550],{"class":39,"line":256},[37,59551,59552],{"class":50},"      width: 560px;\n",[37,59554,59555],{"class":39,"line":261},[37,59556,59557],{"class":50},"      height: 400px;\n",[37,59559,59560],{"class":39,"line":267},[37,59561,59562],{"class":50},"      overflow: hidden;\n",[37,59564,59565],{"class":39,"line":283},[37,59566,2544],{"class":50},[37,59568,59569],{"class":39,"line":288},[37,59570,2757],{"emptyLinePlaceholder":454},[37,59572,59573],{"class":39,"line":294},[37,59574,59575],{"class":50},"    .slider-wrapper {\n",[37,59577,59578],{"class":39,"line":300},[37,59579,59580],{"class":50},"      width: 100%;\n",[37,59582,59583],{"class":39,"line":306},[37,59584,59585],{"class":50},"      height: 320px;\n",[37,59587,59588],{"class":39,"line":312},[37,59589,2544],{"class":50},[37,59591,59592],{"class":39,"line":317},[37,59593,2757],{"emptyLinePlaceholder":454},[37,59595,59596],{"class":39,"line":323},[37,59597,59598],{"class":50},"    .slider-wrapper img {\n",[37,59600,59601],{"class":39,"line":337},[37,59602,59580],{"class":50},[37,59604,59605],{"class":39,"line":342},[37,59606,59607],{"class":50},"      height: 100%;\n",[37,59609,59610],{"class":39,"line":347},[37,59611,59612],{"class":50},"      display: block;\n",[37,59614,59615],{"class":39,"line":352},[37,59616,2544],{"class":50},[37,59618,59619],{"class":39,"line":357},[37,59620,2757],{"emptyLinePlaceholder":454},[37,59622,59623],{"class":39,"line":362},[37,59624,59625],{"class":50},"    .slider-footer {\n",[37,59627,59628],{"class":39,"line":367},[37,59629,59630],{"class":50},"      height: 80px;\n",[37,59632,59633],{"class":39,"line":373},[37,59634,59635],{"class":50},"      background-color: rgb(100, 67, 68);\n",[37,59637,59638],{"class":39,"line":392},[37,59639,59640],{"class":50},"      padding: 12px 12px 0 12px;\n",[37,59642,59643],{"class":39,"line":398},[37,59644,59645],{"class":50},"      position: relative;\n",[37,59647,59648],{"class":39,"line":409},[37,59649,2544],{"class":50},[37,59651,59652],{"class":39,"line":415},[37,59653,2757],{"emptyLinePlaceholder":454},[37,59655,59656],{"class":39,"line":420},[37,59657,59658],{"class":50},"    .slider-footer .toggle {\n",[37,59660,59661],{"class":39,"line":425},[37,59662,59663],{"class":50},"      position: absolute;\n",[37,59665,59666],{"class":39,"line":431},[37,59667,59668],{"class":50},"      right: 0;\n",[37,59670,59671],{"class":39,"line":436},[37,59672,59673],{"class":50},"      top: 12px;\n",[37,59675,59676],{"class":39,"line":442},[37,59677,59678],{"class":50},"      display: flex;\n",[37,59680,59681],{"class":39,"line":8374},[37,59682,2544],{"class":50},[37,59684,59685],{"class":39,"line":8386},[37,59686,2757],{"emptyLinePlaceholder":454},[37,59688,59689],{"class":39,"line":8398},[37,59690,59691],{"class":50},"    .slider-footer .toggle button {\n",[37,59693,59694],{"class":39,"line":10057},[37,59695,59696],{"class":50},"      margin-right: 12px;\n",[37,59698,59699],{"class":39,"line":10082},[37,59700,59701],{"class":50},"      width: 28px;\n",[37,59703,59704],{"class":39,"line":10105},[37,59705,59706],{"class":50},"      height: 28px;\n",[37,59708,59709],{"class":39,"line":10129},[37,59710,59711],{"class":50},"      appearance: none;\n",[37,59713,59714],{"class":39,"line":10134},[37,59715,59716],{"class":50},"      border: none;\n",[37,59718,59719],{"class":39,"line":10139},[37,59720,59721],{"class":50},"      background: rgba(255, 255, 255, 0.1);\n",[37,59723,59724],{"class":39,"line":10144},[37,59725,59726],{"class":50},"      color: #fff;\n",[37,59728,59729],{"class":39,"line":10153},[37,59730,59731],{"class":50},"      border-radius: 4px;\n",[37,59733,59734],{"class":39,"line":10158},[37,59735,59736],{"class":50},"      cursor: pointer;\n",[37,59738,59739],{"class":39,"line":10164},[37,59740,2544],{"class":50},[37,59742,59743],{"class":39,"line":10185},[37,59744,2757],{"emptyLinePlaceholder":454},[37,59746,59747],{"class":39,"line":10191},[37,59748,59749],{"class":50},"    .slider-footer .toggle button:hover {\n",[37,59751,59752],{"class":39,"line":10205},[37,59753,59754],{"class":50},"      background: rgba(255, 255, 255, 0.2);\n",[37,59756,59757],{"class":39,"line":10211},[37,59758,2544],{"class":50},[37,59760,59761],{"class":39,"line":10238},[37,59762,2757],{"emptyLinePlaceholder":454},[37,59764,59765],{"class":39,"line":10247},[37,59766,59767],{"class":50},"    .slider-footer p {\n",[37,59769,59770],{"class":39,"line":10253},[37,59771,59772],{"class":50},"      margin: 0;\n",[37,59774,59775],{"class":39,"line":10261},[37,59776,59726],{"class":50},[37,59778,59779],{"class":39,"line":10266},[37,59780,59781],{"class":50},"      font-size: 18px;\n",[37,59783,59784],{"class":39,"line":16945},[37,59785,59786],{"class":50},"      margin-bottom: 10px;\n",[37,59788,59789],{"class":39,"line":16951},[37,59790,2544],{"class":50},[37,59792,59793],{"class":39,"line":16974},[37,59794,2757],{"emptyLinePlaceholder":454},[37,59796,59797],{"class":39,"line":16980},[37,59798,59799],{"class":50},"    .slider-indicator {\n",[37,59801,59802],{"class":39,"line":17003},[37,59803,59772],{"class":50},[37,59805,59806],{"class":39,"line":17017},[37,59807,59808],{"class":50},"      padding: 0;\n",[37,59810,59811],{"class":39,"line":17037},[37,59812,59813],{"class":50},"      list-style: none;\n",[37,59815,59816],{"class":39,"line":17043},[37,59817,59678],{"class":50},[37,59819,59820],{"class":39,"line":17054},[37,59821,59822],{"class":50},"      align-items: center;\n",[37,59824,59825],{"class":39,"line":17077},[37,59826,2544],{"class":50},[37,59828,59829],{"class":39,"line":17099},[37,59830,2757],{"emptyLinePlaceholder":454},[37,59832,59833],{"class":39,"line":17104},[37,59834,59835],{"class":50},"    .slider-indicator li {\n",[37,59837,59838],{"class":39,"line":17110},[37,59839,59840],{"class":50},"      width: 8px;\n",[37,59842,59843],{"class":39,"line":17124},[37,59844,59845],{"class":50},"      height: 8px;\n",[37,59847,59848],{"class":39,"line":17137},[37,59849,59850],{"class":50},"      margin: 4px;\n",[37,59852,59853],{"class":39,"line":17142},[37,59854,59855],{"class":50},"      border-radius: 50%;\n",[37,59857,59858],{"class":39,"line":17156},[37,59859,59860],{"class":50},"      background: #fff;\n",[37,59862,59863],{"class":39,"line":17161},[37,59864,59865],{"class":50},"      opacity: 0.4;\n",[37,59867,59868],{"class":39,"line":17167},[37,59869,59736],{"class":50},[37,59871,59872],{"class":39,"line":17172},[37,59873,2544],{"class":50},[37,59875,59876],{"class":39,"line":17186},[37,59877,2757],{"emptyLinePlaceholder":454},[37,59879,59880],{"class":39,"line":17191},[37,59881,59882],{"class":50},"    .slider-indicator li.active {\n",[37,59884,59885],{"class":39,"line":17196},[37,59886,59887],{"class":50},"      width: 12px;\n",[37,59889,59890],{"class":39,"line":17210},[37,59891,59892],{"class":50},"      height: 12px;\n",[37,59894,59895],{"class":39,"line":17222},[37,59896,59897],{"class":50},"      opacity: 1;\n",[37,59899,59900],{"class":39,"line":17227},[37,59901,2544],{"class":50},[37,59903,59904,59906,59908],{"class":39,"line":17240},[37,59905,52753],{"class":50},[37,59907,446],{"class":51636},[37,59909,51643],{"class":50},[37,59911,59912,59914,59916],{"class":39,"line":17245},[37,59913,52121],{"class":50},[37,59915,51670],{"class":51636},[37,59917,51643],{"class":50},[37,59919,59920],{"class":39,"line":17250},[37,59921,2757],{"emptyLinePlaceholder":454},[37,59923,59924,59926,59928],{"class":39,"line":17255},[37,59925,1418],{"class":50},[37,59927,52136],{"class":51636},[37,59929,51643],{"class":50},[37,59931,59932,59934,59936,59938,59940,59943],{"class":39,"line":17268},[37,59933,52480],{"class":50},[37,59935,51947],{"class":51636},[37,59937,53822],{"class":2320},[37,59939,55],{"class":50},[37,59941,59942],{"class":185},"\"slider\"",[37,59944,51643],{"class":50},[37,59946,59947,59949,59951,59953,59955,59957],{"class":39,"line":17273},[37,59948,51677],{"class":50},[37,59950,51947],{"class":51636},[37,59952,53822],{"class":2320},[37,59954,55],{"class":50},[37,59956,55563],{"class":185},[37,59958,51643],{"class":50},[37,59960,59961,59963,59965,59967,59969,59972,59974,59976,59978],{"class":39,"line":32971},[37,59962,55570],{"class":50},[37,59964,1838],{"class":51636},[37,59966,55575],{"class":2320},[37,59968,55],{"class":50},[37,59970,59971],{"class":185},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[37,59973,55583],{"class":2320},[37,59975,55],{"class":50},[37,59977,8000],{"class":185},[37,59979,59463],{"class":50},[37,59981,59982,59984,59986],{"class":39,"line":32977},[37,59983,52112],{"class":50},[37,59985,51947],{"class":51636},[37,59987,51643],{"class":50},[37,59989,59990,59992,59994,59996,59998,60000],{"class":39,"line":32983},[37,59991,51677],{"class":50},[37,59993,51947],{"class":51636},[37,59995,53822],{"class":2320},[37,59997,55],{"class":50},[37,59999,55610],{"class":185},[37,60001,51643],{"class":50},[37,60003,60004,60006,60008,60011,60013],{"class":39,"line":32989},[37,60005,55570],{"class":50},[37,60007,14],{"class":51636},[37,60009,60010],{"class":50},">对人类来说会不会太超前了？\u003C\u002F",[37,60012,14],{"class":51636},[37,60014,51643],{"class":50},[37,60016,60017,60019,60021,60023,60025,60028],{"class":39,"line":32995},[37,60018,55570],{"class":50},[37,60020,1515],{"class":51636},[37,60022,53822],{"class":2320},[37,60024,55],{"class":50},[37,60026,60027],{"class":185},"\"slider-indicator\"",[37,60029,51643],{"class":50},[37,60031,60032,60034,60036,60038,60040,60043,60045,60047],{"class":39,"line":33006},[37,60033,55638],{"class":50},[37,60035,484],{"class":51636},[37,60037,53822],{"class":2320},[37,60039,55],{"class":50},[37,60041,60042],{"class":185},"\"active\"",[37,60044,55650],{"class":50},[37,60046,484],{"class":51636},[37,60048,51643],{"class":50},[37,60050,60051,60053,60055,60057,60059],{"class":39,"line":33012},[37,60052,55638],{"class":50},[37,60054,484],{"class":51636},[37,60056,55650],{"class":50},[37,60058,484],{"class":51636},[37,60060,51643],{"class":50},[37,60062,60063,60065,60067,60069,60071],{"class":39,"line":33032},[37,60064,55638],{"class":50},[37,60066,484],{"class":51636},[37,60068,55650],{"class":50},[37,60070,484],{"class":51636},[37,60072,51643],{"class":50},[37,60074,60075,60077,60079,60081,60083],{"class":39,"line":33038},[37,60076,55638],{"class":50},[37,60078,484],{"class":51636},[37,60080,55650],{"class":50},[37,60082,484],{"class":51636},[37,60084,51643],{"class":50},[37,60086,60087,60089,60091,60093,60095],{"class":39,"line":33049},[37,60088,55638],{"class":50},[37,60090,484],{"class":51636},[37,60092,55650],{"class":50},[37,60094,484],{"class":51636},[37,60096,51643],{"class":50},[37,60098,60099,60101,60103,60105,60107],{"class":39,"line":33055},[37,60100,55638],{"class":50},[37,60102,484],{"class":51636},[37,60104,55650],{"class":50},[37,60106,484],{"class":51636},[37,60108,51643],{"class":50},[37,60110,60111,60113,60115,60117,60119],{"class":39,"line":33061},[37,60112,55638],{"class":50},[37,60114,484],{"class":51636},[37,60116,55650],{"class":50},[37,60118,484],{"class":51636},[37,60120,51643],{"class":50},[37,60122,60123,60125,60127,60129,60131],{"class":39,"line":33067},[37,60124,55638],{"class":50},[37,60126,484],{"class":51636},[37,60128,55650],{"class":50},[37,60130,484],{"class":51636},[37,60132,51643],{"class":50},[37,60134,60135,60137,60139],{"class":39,"line":33073},[37,60136,55743],{"class":50},[37,60138,1515],{"class":51636},[37,60140,51643],{"class":50},[37,60142,60143,60145,60147,60149,60151,60154],{"class":39,"line":33079},[37,60144,55570],{"class":50},[37,60146,51947],{"class":51636},[37,60148,53822],{"class":2320},[37,60150,55],{"class":50},[37,60152,60153],{"class":185},"\"toggle\"",[37,60155,51643],{"class":50},[37,60157,60158,60160,60162,60164,60166,60169,60171,60174,60176,60178],{"class":39,"line":33085},[37,60159,55638],{"class":50},[37,60161,54223],{"class":51636},[37,60163,53822],{"class":2320},[37,60165,55],{"class":50},[37,60167,60168],{"class":185},"\"prev\"",[37,60170,1468],{"class":50},[37,60172,60173],{"class":61},"&lt;",[37,60175,52121],{"class":50},[37,60177,54223],{"class":51636},[37,60179,51643],{"class":50},[37,60181,60182,60184,60186,60188,60190,60193,60195,60198,60200,60202],{"class":39,"line":33091},[37,60183,55638],{"class":50},[37,60185,54223],{"class":51636},[37,60187,53822],{"class":2320},[37,60189,55],{"class":50},[37,60191,60192],{"class":185},"\"next\"",[37,60194,1468],{"class":50},[37,60196,60197],{"class":61},"&gt;",[37,60199,52121],{"class":50},[37,60201,54223],{"class":51636},[37,60203,51643],{"class":50},[37,60205,60206,60208,60210],{"class":39,"line":33111},[37,60207,55743],{"class":50},[37,60209,51947],{"class":51636},[37,60211,51643],{"class":50},[37,60213,60214,60216,60218],{"class":39,"line":33117},[37,60215,52112],{"class":50},[37,60217,51947],{"class":51636},[37,60219,51643],{"class":50},[37,60221,60222,60224,60226],{"class":39,"line":33133},[37,60223,52753],{"class":50},[37,60225,51947],{"class":51636},[37,60227,51643],{"class":50},[37,60229,60230,60232,60234],{"class":39,"line":33139},[37,60231,52480],{"class":50},[37,60233,52149],{"class":51636},[37,60235,51643],{"class":50},[37,60237,60238],{"class":39,"line":33153},[37,60239,60240],{"class":50},"    \u002F\u002F 1. 初始数据\n",[37,60242,60243],{"class":39,"line":33159},[37,60244,60245],{"class":50},"    const data = [\n",[37,60247,60248],{"class":39,"line":33174},[37,60249,60250],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[37,60252,60253],{"class":39,"line":33180},[37,60254,60255],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[37,60257,60258],{"class":39,"line":33189},[37,60259,60260],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[37,60262,60263],{"class":39,"line":33195},[37,60264,60265],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[37,60267,60268],{"class":39,"line":33204},[37,60269,60270],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[37,60272,60273],{"class":39,"line":33210},[37,60274,60275],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[37,60277,60278],{"class":39,"line":33216},[37,60279,60280],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[37,60282,60283],{"class":39,"line":33225},[37,60284,60285],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[37,60287,60288],{"class":39,"line":33231},[37,60289,53445],{"class":50},[37,60291,60292],{"class":39,"line":33242},[37,60293,60294],{"class":50},"    \u002F\u002F 获取元素\n",[37,60296,60297],{"class":39,"line":33248},[37,60298,60299],{"class":50},"    const img = document.querySelector('.slider-wrapper img')\n",[37,60301,60302],{"class":39,"line":33267},[37,60303,60304],{"class":50},"    const p = document.querySelector('.slider-footer p')\n",[37,60306,60307],{"class":39,"line":33273},[37,60308,60309],{"class":50},"    const footer = document.querySelector('.slider-footer')\n",[37,60311,60312],{"class":39,"line":33284},[37,60313,60314],{"class":50},"    \u002F\u002F 1. 右按钮业务\n",[37,60316,60317],{"class":39,"line":33290},[37,60318,60319],{"class":50},"    \u002F\u002F 1.1 获取右侧按钮 \n",[37,60321,60322],{"class":39,"line":33310},[37,60323,60324],{"class":50},"    const next = document.querySelector('.next')\n",[37,60326,60327],{"class":39,"line":33326},[37,60328,60329],{"class":50},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[37,60331,60332],{"class":39,"line":33332},[37,60333,60334],{"class":50},"    \u002F\u002F 1.2 注册点击事件\n",[37,60336,60337],{"class":39,"line":33346},[37,60338,2757],{"emptyLinePlaceholder":454},[37,60340,60341],{"class":39,"line":33352},[37,60342,60343],{"class":50},"    next.addEventListener('click', function () {\n",[37,60345,60346],{"class":39,"line":33358},[37,60347,60348],{"class":50},"      \u002F\u002F console.log(11)\n",[37,60350,60351],{"class":39,"line":33369},[37,60352,60353],{"class":50},"      i++\n",[37,60355,60356],{"class":39,"line":33375},[37,60357,60358],{"class":50},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[37,60360,60361],{"class":39,"line":33381},[37,60362,60363],{"class":50},"      \u002F\u002F if (i >= 8) {\n",[37,60365,60366],{"class":39,"line":33391},[37,60367,60368],{"class":50},"      \u002F\u002F   i = 0\n",[37,60370,60371],{"class":39,"line":33397},[37,60372,60373],{"class":50},"      \u002F\u002F }\n",[37,60375,60376],{"class":39,"line":33408},[37,60377,60378],{"class":50},"      i = i >= data.length ? 0 : i\n",[37,60380,60381],{"class":39,"line":33414},[37,60382,60383],{"class":50},"      \u002F\u002F 1.3 得到对应的对象\n",[37,60385,60386],{"class":39,"line":33424},[37,60387,60388],{"class":50},"      \u002F\u002F console.log(data[i])\n",[37,60390,60391],{"class":39,"line":33429},[37,60392,60393],{"class":50},"      \u002F\u002F 调用函数\n",[37,60395,60396],{"class":39,"line":33435},[37,60397,60398],{"class":50},"      toggle()\n",[37,60400,60401],{"class":39,"line":33484},[37,60402,33798],{"class":50},[37,60404,60405],{"class":39,"line":33531},[37,60406,2757],{"emptyLinePlaceholder":454},[37,60408,60409],{"class":39,"line":33536},[37,60410,60411],{"class":50},"    \u002F\u002F 2. 左侧按钮业务\n",[37,60413,60414],{"class":39,"line":33542},[37,60415,60416],{"class":50},"    \u002F\u002F 2.1 获取左侧按钮 \n",[37,60418,60419],{"class":39,"line":33561},[37,60420,60421],{"class":50},"    const prev = document.querySelector('.prev')\n",[37,60423,60424],{"class":39,"line":33567},[37,60425,60334],{"class":50},[37,60427,60428],{"class":39,"line":33586},[37,60429,60430],{"class":50},"    prev.addEventListener('click', function () {\n",[37,60432,60433],{"class":39,"line":33592},[37,60434,60435],{"class":50},"      i--\n",[37,60437,60438],{"class":39,"line":33598},[37,60439,60440],{"class":50},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[37,60442,60443],{"class":39,"line":33608},[37,60444,60445],{"class":50},"      \u002F\u002F if (i \u003C 0) {\n",[37,60447,60448],{"class":39,"line":33613},[37,60449,60450],{"class":50},"      \u002F\u002F   i = 7\n",[37,60452,60453],{"class":39,"line":33619},[37,60454,60373],{"class":50},[37,60456,60457],{"class":39,"line":33635},[37,60458,60459],{"class":50},"      i = i \u003C 0 ? data.length - 1 : i\n",[37,60461,60462],{"class":39,"line":33680},[37,60463,60383],{"class":50},[37,60465,60466],{"class":39,"line":33686},[37,60467,60388],{"class":50},[37,60469,60470],{"class":39,"line":33692},[37,60471,60393],{"class":50},[37,60473,60474],{"class":39,"line":33698},[37,60475,60398],{"class":50},[37,60477,60478],{"class":39,"line":33709},[37,60479,33798],{"class":50},[37,60481,60482],{"class":39,"line":33715},[37,60483,2757],{"emptyLinePlaceholder":454},[37,60485,60486],{"class":39,"line":33721},[37,60487,60488],{"class":50},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[37,60490,60491],{"class":39,"line":33727},[37,60492,60493],{"class":50},"    function toggle() {\n",[37,60495,60496],{"class":39,"line":33745},[37,60497,60498],{"class":50},"      \u002F\u002F 1.4 渲染对应的数据\n",[37,60500,60501],{"class":39,"line":33759},[37,60502,60503],{"class":50},"      img.src = data[i].url\n",[37,60505,60506],{"class":39,"line":33768},[37,60507,60508],{"class":50},"      p.innerHTML = data[i].title\n",[37,60510,60511],{"class":39,"line":33777},[37,60512,60513],{"class":50},"      footer.style.backgroundColor = data[i].color\n",[37,60515,60516],{"class":39,"line":33786},[37,60517,60518],{"class":50},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[37,60520,60521],{"class":39,"line":33795},[37,60522,60523],{"class":50},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[37,60525,60526],{"class":39,"line":33801},[37,60527,60528],{"class":50},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[37,60530,60531],{"class":39,"line":33807},[37,60532,2544],{"class":50},[37,60534,60535],{"class":39,"line":33815},[37,60536,2757],{"emptyLinePlaceholder":454},[37,60538,60539],{"class":39,"line":33820},[37,60540,60541],{"class":50},"    \u002F\u002F 3. 自动播放模块\n",[37,60543,60544],{"class":39,"line":33826},[37,60545,60546],{"class":50},"    let timerId = setInterval(function () {\n",[37,60548,60549],{"class":39,"line":33837},[37,60550,60551],{"class":50},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[37,60553,60554],{"class":39,"line":33843},[37,60555,60556],{"class":50},"      next.click()\n",[37,60558,60559],{"class":39,"line":33863},[37,60560,60561],{"class":50},"    }, 1000)\n",[37,60563,60564],{"class":39,"line":33869},[37,60565,2757],{"emptyLinePlaceholder":454},[37,60567,60568],{"class":39,"line":33875},[37,60569,60570],{"class":50},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[37,60572,60573],{"class":39,"line":33881},[37,60574,60575],{"class":50},"    const slider = document.querySelector('.slider')\n",[37,60577,60578],{"class":39,"line":33898},[37,60579,60580],{"class":50},"    \u002F\u002F 注册事件\n",[37,60582,60583],{"class":39,"line":33904},[37,60584,60585],{"class":50},"    slider.addEventListener('mouseenter', function () {\n",[37,60587,60588],{"class":39,"line":33910},[37,60589,60590],{"class":50},"      \u002F\u002F 停止定时器\n",[37,60592,60593],{"class":39,"line":33916},[37,60594,60595],{"class":50},"      clearInterval(timerId)\n",[37,60597,60598],{"class":39,"line":33922},[37,60599,33798],{"class":50},[37,60601,60602],{"class":39,"line":33928},[37,60603,2757],{"emptyLinePlaceholder":454},[37,60605,60606],{"class":39,"line":33955},[37,60607,60608],{"class":50},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[37,60610,60611],{"class":39,"line":33979},[37,60612,60580],{"class":50},[37,60614,60615],{"class":39,"line":33985},[37,60616,60617],{"class":50},"    slider.addEventListener('mouseleave', function () {\n",[37,60619,60620],{"class":39,"line":33991},[37,60621,60590],{"class":50},[37,60623,60624],{"class":39,"line":33997},[37,60625,60626],{"class":50},"      if (timerId) clearInterval(timerId)\n",[37,60628,60629],{"class":39,"line":34008},[37,60630,60631],{"class":50},"      \u002F\u002F 开启定时器\n",[37,60633,60634],{"class":39,"line":34019},[37,60635,60636],{"class":50},"      timerId = setInterval(function () {\n",[37,60638,60639],{"class":39,"line":34025},[37,60640,60641],{"class":50},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[37,60643,60644],{"class":39,"line":34042},[37,60645,60646],{"class":50},"        next.click()\n",[37,60648,60649],{"class":39,"line":34065},[37,60650,60651],{"class":50},"      }, 1000)\n",[37,60653,60654],{"class":39,"line":34088},[37,60655,33798],{"class":50},[37,60657,60658,60660,60662],{"class":39,"line":34094},[37,60659,52753],{"class":50},[37,60661,52149],{"class":51636},[37,60663,51643],{"class":50},[37,60665,60666,60668,60670],{"class":39,"line":34099},[37,60667,52121],{"class":50},[37,60669,52136],{"class":51636},[37,60671,51643],{"class":50},[37,60673,60674],{"class":39,"line":34108},[37,60675,2757],{"emptyLinePlaceholder":454},[37,60677,60678,60680,60682],{"class":39,"line":34118},[37,60679,52121],{"class":50},[37,60681,50971],{"class":51636},[37,60683,51643],{"class":50},[22339,60685,60687],{"id":60686},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60689,60690],{},"小米搜索框案例：",[27,60692,60694],{"className":50969,"code":60693,"language":50971,"meta":32,"style":32},"\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",[34,60695,60696,60706,60720,60724,60732,60746,60766,60786,60798,60806,60812,60822,60832,60844,60848,60852,60859,60863,60874,60878,60882,60889,60900,60913,60927,60931,60935,60944,60956,60968,60982,60995,61008,61026,61037,61041,61045,61054,61071,61075,61079,61086,61096,61106,61117,61130,61142,61158,61169,61181,61185,61189,61197,61208,61225,61237,61249,61260,61264,61268,61279,61290,61294,61302,61306,61314,61318,61326,61341,61364,61379,61410,61437,61464,61491,61518,61545,61572,61581,61589,61597,61602,61622,61642,61647,61652,61670,61675,61685,61690,61704,61709,61714,61731,61740,61752,61756,61764,61772,61776],{"__ignoreMap":32},[37,60697,60698,60700,60702,60704],{"class":39,"line":40},[37,60699,51633],{"class":50},[37,60701,51637],{"class":51636},[37,60703,51640],{"class":2320},[37,60705,51643],{"class":50},[37,60707,60708,60710,60712,60714,60716,60718],{"class":39,"line":47},[37,60709,1418],{"class":50},[37,60711,50971],{"class":51636},[37,60713,51652],{"class":2320},[37,60715,55],{"class":50},[37,60717,51657],{"class":185},[37,60719,51643],{"class":50},[37,60721,60722],{"class":39,"line":104},[37,60723,2757],{"emptyLinePlaceholder":454},[37,60725,60726,60728,60730],{"class":39,"line":113},[37,60727,1418],{"class":50},[37,60729,51670],{"class":51636},[37,60731,51643],{"class":50},[37,60733,60734,60736,60738,60740,60742,60744],{"class":39,"line":189},[37,60735,51677],{"class":50},[37,60737,51680],{"class":51636},[37,60739,51683],{"class":2320},[37,60741,55],{"class":50},[37,60743,51688],{"class":185},[37,60745,51643],{"class":50},[37,60747,60748,60750,60752,60754,60756,60758,60760,60762,60764],{"class":39,"line":195},[37,60749,51677],{"class":50},[37,60751,51680],{"class":51636},[37,60753,51699],{"class":2320},[37,60755,55],{"class":50},[37,60757,51704],{"class":185},[37,60759,51707],{"class":2320},[37,60761,55],{"class":50},[37,60763,51712],{"class":185},[37,60765,51643],{"class":50},[37,60767,60768,60770,60772,60774,60776,60778,60780,60782,60784],{"class":39,"line":201},[37,60769,51677],{"class":50},[37,60771,51680],{"class":51636},[37,60773,15261],{"class":2320},[37,60775,55],{"class":50},[37,60777,51727],{"class":185},[37,60779,51707],{"class":2320},[37,60781,55],{"class":50},[37,60783,51734],{"class":185},[37,60785,51643],{"class":50},[37,60787,60788,60790,60792,60794,60796],{"class":39,"line":207},[37,60789,51677],{"class":50},[37,60791,51743],{"class":51636},[37,60793,51746],{"class":50},[37,60795,51743],{"class":51636},[37,60797,51643],{"class":50},[37,60799,60800,60802,60804],{"class":39,"line":213},[37,60801,51677],{"class":50},[37,60803,446],{"class":51636},[37,60805,51643],{"class":50},[37,60807,60808,60810],{"class":39,"line":218},[37,60809,51763],{"class":51636},[37,60811,15913],{"class":50},[37,60813,60814,60816,60818,60820],{"class":39,"line":227},[37,60815,51770],{"class":61},[37,60817,51773],{"class":50},[37,60819,135],{"class":61},[37,60821,1669],{"class":50},[37,60823,60824,60826,60828,60830],{"class":39,"line":232},[37,60825,51782],{"class":61},[37,60827,51773],{"class":50},[37,60829,135],{"class":61},[37,60831,1669],{"class":50},[37,60833,60834,60837,60839,60842],{"class":39,"line":238},[37,60835,60836],{"class":61},"            box-sizing",[37,60838,51773],{"class":50},[37,60840,60841],{"class":61},"border-box",[37,60843,1669],{"class":50},[37,60845,60846],{"class":39,"line":244},[37,60847,2886],{"class":50},[37,60849,60850],{"class":39,"line":250},[37,60851,2757],{"emptyLinePlaceholder":454},[37,60853,60854,60857],{"class":39,"line":256},[37,60855,60856],{"class":51636},"        ul",[37,60858,15913],{"class":50},[37,60860,60861],{"class":39,"line":261},[37,60862,2757],{"emptyLinePlaceholder":454},[37,60864,60865,60868,60870,60872],{"class":39,"line":267},[37,60866,60867],{"class":61},"            list-style",[37,60869,51773],{"class":50},[37,60871,55073],{"class":61},[37,60873,1669],{"class":50},[37,60875,60876],{"class":39,"line":283},[37,60877,2886],{"class":50},[37,60879,60880],{"class":39,"line":288},[37,60881,2757],{"emptyLinePlaceholder":454},[37,60883,60884,60887],{"class":39,"line":294},[37,60885,60886],{"class":2320},"        .mi",[37,60888,15913],{"class":50},[37,60890,60891,60894,60896,60898],{"class":39,"line":300},[37,60892,60893],{"class":61},"            position",[37,60895,51773],{"class":50},[37,60897,55100],{"class":61},[37,60899,1669],{"class":50},[37,60901,60902,60904,60906,60909,60911],{"class":39,"line":306},[37,60903,51820],{"class":61},[37,60905,51773],{"class":50},[37,60907,60908],{"class":61},"223",[37,60910,51828],{"class":54},[37,60912,1669],{"class":50},[37,60914,60915,60917,60919,60921,60923,60925],{"class":39,"line":312},[37,60916,51770],{"class":61},[37,60918,51773],{"class":50},[37,60920,154],{"class":61},[37,60922,51828],{"class":54},[37,60924,51892],{"class":61},[37,60926,1669],{"class":50},[37,60928,60929],{"class":39,"line":317},[37,60930,2886],{"class":50},[37,60932,60933],{"class":39,"line":323},[37,60934,2757],{"emptyLinePlaceholder":454},[37,60936,60937,60939,60942],{"class":39,"line":337},[37,60938,60886],{"class":2320},[37,60940,60941],{"class":51636}," input",[37,60943,15913],{"class":50},[37,60945,60946,60948,60950,60952,60954],{"class":39,"line":342},[37,60947,51820],{"class":61},[37,60949,51773],{"class":50},[37,60951,60908],{"class":61},[37,60953,51828],{"class":54},[37,60955,1669],{"class":50},[37,60957,60958,60960,60962,60964,60966],{"class":39,"line":347},[37,60959,51835],{"class":61},[37,60961,51773],{"class":50},[37,60963,1117],{"class":61},[37,60965,51828],{"class":54},[37,60967,1669],{"class":50},[37,60969,60970,60972,60974,60976,60978,60980],{"class":39,"line":352},[37,60971,51782],{"class":61},[37,60973,51773],{"class":50},[37,60975,135],{"class":61},[37,60977,2395],{"class":61},[37,60979,51828],{"class":54},[37,60981,1669],{"class":50},[37,60983,60984,60987,60989,60991,60993],{"class":39,"line":357},[37,60985,60986],{"class":61},"            font-size",[37,60988,51773],{"class":50},[37,60990,1059],{"class":61},[37,60992,51828],{"class":54},[37,60994,1669],{"class":50},[37,60996,60997,61000,61002,61004,61006],{"class":39,"line":362},[37,60998,60999],{"class":61},"            line-height",[37,61001,51773],{"class":50},[37,61003,1117],{"class":61},[37,61005,51828],{"class":54},[37,61007,1669],{"class":50},[37,61009,61010,61013,61015,61017,61019,61021,61024],{"class":39,"line":367},[37,61011,61012],{"class":61},"            border",[37,61014,51773],{"class":50},[37,61016,332],{"class":61},[37,61018,51828],{"class":54},[37,61020,51857],{"class":61},[37,61022,61023],{"class":61}," #e0e0e0",[37,61025,1669],{"class":50},[37,61027,61028,61031,61033,61035],{"class":39,"line":373},[37,61029,61030],{"class":61},"            outline",[37,61032,51773],{"class":50},[37,61034,55073],{"class":61},[37,61036,1669],{"class":50},[37,61038,61039],{"class":39,"line":392},[37,61040,2886],{"class":50},[37,61042,61043],{"class":39,"line":398},[37,61044,2757],{"emptyLinePlaceholder":454},[37,61046,61047,61049,61052],{"class":39,"line":409},[37,61048,60886],{"class":2320},[37,61050,61051],{"class":2320}," .search",[37,61053,15913],{"class":50},[37,61055,61056,61058,61060,61062,61064,61066,61069],{"class":39,"line":415},[37,61057,61012],{"class":61},[37,61059,51773],{"class":50},[37,61061,332],{"class":61},[37,61063,51828],{"class":54},[37,61065,51857],{"class":61},[37,61067,61068],{"class":61}," #ff6700",[37,61070,1669],{"class":50},[37,61072,61073],{"class":39,"line":420},[37,61074,2886],{"class":50},[37,61076,61077],{"class":39,"line":425},[37,61078,2757],{"emptyLinePlaceholder":454},[37,61080,61081,61084],{"class":39,"line":431},[37,61082,61083],{"class":2320},"        .result-list",[37,61085,15913],{"class":50},[37,61087,61088,61090,61092,61094],{"class":39,"line":436},[37,61089,51808],{"class":61},[37,61091,51773],{"class":50},[37,61093,55073],{"class":61},[37,61095,1669],{"class":50},[37,61097,61098,61100,61102,61104],{"class":39,"line":442},[37,61099,60893],{"class":61},[37,61101,51773],{"class":50},[37,61103,55167],{"class":61},[37,61105,1669],{"class":50},[37,61107,61108,61111,61113,61115],{"class":39,"line":8374},[37,61109,61110],{"class":61},"            left",[37,61112,51773],{"class":50},[37,61114,135],{"class":61},[37,61116,1669],{"class":50},[37,61118,61119,61122,61124,61126,61128],{"class":39,"line":8386},[37,61120,61121],{"class":61},"            top",[37,61123,51773],{"class":50},[37,61125,1117],{"class":61},[37,61127,51828],{"class":54},[37,61129,1669],{"class":50},[37,61131,61132,61134,61136,61138,61140],{"class":39,"line":8398},[37,61133,51820],{"class":61},[37,61135,51773],{"class":50},[37,61137,60908],{"class":61},[37,61139,51828],{"class":54},[37,61141,1669],{"class":50},[37,61143,61144,61146,61148,61150,61152,61154,61156],{"class":39,"line":10057},[37,61145,61012],{"class":61},[37,61147,51773],{"class":50},[37,61149,332],{"class":61},[37,61151,51828],{"class":54},[37,61153,51857],{"class":61},[37,61155,61068],{"class":61},[37,61157,1669],{"class":50},[37,61159,61160,61163,61165,61167],{"class":39,"line":10082},[37,61161,61162],{"class":61},"            border-top",[37,61164,51773],{"class":50},[37,61166,135],{"class":61},[37,61168,1669],{"class":50},[37,61170,61171,61174,61176,61179],{"class":39,"line":10105},[37,61172,61173],{"class":61},"            background",[37,61175,51773],{"class":50},[37,61177,61178],{"class":61},"#fff",[37,61180,1669],{"class":50},[37,61182,61183],{"class":39,"line":10129},[37,61184,2886],{"class":50},[37,61186,61187],{"class":39,"line":10134},[37,61188,2757],{"emptyLinePlaceholder":454},[37,61190,61191,61193,61195],{"class":39,"line":10139},[37,61192,61083],{"class":2320},[37,61194,1774],{"class":51636},[37,61196,15913],{"class":50},[37,61198,61199,61201,61203,61206],{"class":39,"line":10144},[37,61200,51808],{"class":61},[37,61202,51773],{"class":50},[37,61204,61205],{"class":61},"block",[37,61207,1669],{"class":50},[37,61209,61210,61212,61214,61216,61218,61221,61223],{"class":39,"line":10153},[37,61211,51782],{"class":61},[37,61213,51773],{"class":50},[37,61215,93],{"class":61},[37,61217,51828],{"class":54},[37,61219,61220],{"class":61}," 15",[37,61222,51828],{"class":54},[37,61224,1669],{"class":50},[37,61226,61227,61229,61231,61233,61235],{"class":39,"line":10158},[37,61228,60986],{"class":61},[37,61230,51773],{"class":50},[37,61232,68],{"class":61},[37,61234,51828],{"class":54},[37,61236,1669],{"class":50},[37,61238,61239,61242,61244,61247],{"class":39,"line":10164},[37,61240,61241],{"class":61},"            color",[37,61243,51773],{"class":50},[37,61245,61246],{"class":61},"#424242",[37,61248,1669],{"class":50},[37,61250,61251,61254,61256,61258],{"class":39,"line":10185},[37,61252,61253],{"class":61},"            text-decoration",[37,61255,51773],{"class":50},[37,61257,55073],{"class":61},[37,61259,1669],{"class":50},[37,61261,61262],{"class":39,"line":10191},[37,61263,2886],{"class":50},[37,61265,61266],{"class":39,"line":10205},[37,61267,2757],{"emptyLinePlaceholder":454},[37,61269,61270,61272,61274,61277],{"class":39,"line":10211},[37,61271,61083],{"class":2320},[37,61273,1774],{"class":51636},[37,61275,61276],{"class":2320},":hover",[37,61278,15913],{"class":50},[37,61280,61281,61283,61285,61288],{"class":39,"line":10238},[37,61282,51976],{"class":61},[37,61284,51773],{"class":50},[37,61286,61287],{"class":61},"#eee",[37,61289,1669],{"class":50},[37,61291,61292],{"class":39,"line":10247},[37,61293,2886],{"class":50},[37,61295,61296,61298,61300],{"class":39,"line":10253},[37,61297,52112],{"class":50},[37,61299,446],{"class":51636},[37,61301,51643],{"class":50},[37,61303,61304],{"class":39,"line":10261},[37,61305,2757],{"emptyLinePlaceholder":454},[37,61307,61308,61310,61312],{"class":39,"line":10266},[37,61309,52121],{"class":50},[37,61311,51670],{"class":51636},[37,61313,51643],{"class":50},[37,61315,61316],{"class":39,"line":16945},[37,61317,2757],{"emptyLinePlaceholder":454},[37,61319,61320,61322,61324],{"class":39,"line":16951},[37,61321,1418],{"class":50},[37,61323,52136],{"class":51636},[37,61325,51643],{"class":50},[37,61327,61328,61330,61332,61334,61336,61339],{"class":39,"line":16974},[37,61329,51677],{"class":50},[37,61331,51947],{"class":51636},[37,61333,53822],{"class":2320},[37,61335,55],{"class":50},[37,61337,61338],{"class":185},"\"mi\"",[37,61340,51643],{"class":50},[37,61342,61343,61345,61347,61349,61351,61354,61357,61359,61362],{"class":39,"line":16980},[37,61344,55638],{"class":50},[37,61346,54157],{"class":51636},[37,61348,54160],{"class":2320},[37,61350,55],{"class":50},[37,61352,61353],{"class":185},"\"search\"",[37,61355,61356],{"class":2320}," placeholder",[37,61358,55],{"class":50},[37,61360,61361],{"class":185},"\"小米笔记本\"",[37,61363,51643],{"class":50},[37,61365,61366,61368,61370,61372,61374,61377],{"class":39,"line":17003},[37,61367,55638],{"class":50},[37,61369,1515],{"class":51636},[37,61371,53822],{"class":2320},[37,61373,55],{"class":50},[37,61375,61376],{"class":185},"\"result-list\"",[37,61378,51643],{"class":50},[37,61380,61381,61384,61386,61389,61391,61394,61396,61399,61402,61404,61406,61408],{"class":39,"line":17017},[37,61382,61383],{"class":50},"            \u003C",[37,61385,484],{"class":51636},[37,61387,61388],{"class":50},">\u003C",[37,61390,51],{"class":51636},[37,61392,61393],{"class":2320}," href",[37,61395,55],{"class":50},[37,61397,61398],{"class":185},"\"#\"",[37,61400,61401],{"class":50},">全部商品\u003C\u002F",[37,61403,51],{"class":51636},[37,61405,55650],{"class":50},[37,61407,484],{"class":51636},[37,61409,51643],{"class":50},[37,61411,61412,61414,61416,61418,61420,61422,61424,61426,61429,61431,61433,61435],{"class":39,"line":17037},[37,61413,61383],{"class":50},[37,61415,484],{"class":51636},[37,61417,61388],{"class":50},[37,61419,51],{"class":51636},[37,61421,61393],{"class":2320},[37,61423,55],{"class":50},[37,61425,61398],{"class":185},[37,61427,61428],{"class":50},">小米11\u003C\u002F",[37,61430,51],{"class":51636},[37,61432,55650],{"class":50},[37,61434,484],{"class":51636},[37,61436,51643],{"class":50},[37,61438,61439,61441,61443,61445,61447,61449,61451,61453,61456,61458,61460,61462],{"class":39,"line":17043},[37,61440,61383],{"class":50},[37,61442,484],{"class":51636},[37,61444,61388],{"class":50},[37,61446,51],{"class":51636},[37,61448,61393],{"class":2320},[37,61450,55],{"class":50},[37,61452,61398],{"class":185},[37,61454,61455],{"class":50},">小米10S\u003C\u002F",[37,61457,51],{"class":51636},[37,61459,55650],{"class":50},[37,61461,484],{"class":51636},[37,61463,51643],{"class":50},[37,61465,61466,61468,61470,61472,61474,61476,61478,61480,61483,61485,61487,61489],{"class":39,"line":17054},[37,61467,61383],{"class":50},[37,61469,484],{"class":51636},[37,61471,61388],{"class":50},[37,61473,51],{"class":51636},[37,61475,61393],{"class":2320},[37,61477,55],{"class":50},[37,61479,61398],{"class":185},[37,61481,61482],{"class":50},">小米笔记本\u003C\u002F",[37,61484,51],{"class":51636},[37,61486,55650],{"class":50},[37,61488,484],{"class":51636},[37,61490,51643],{"class":50},[37,61492,61493,61495,61497,61499,61501,61503,61505,61507,61510,61512,61514,61516],{"class":39,"line":17077},[37,61494,61383],{"class":50},[37,61496,484],{"class":51636},[37,61498,61388],{"class":50},[37,61500,51],{"class":51636},[37,61502,61393],{"class":2320},[37,61504,55],{"class":50},[37,61506,61398],{"class":185},[37,61508,61509],{"class":50},">小米手机\u003C\u002F",[37,61511,51],{"class":51636},[37,61513,55650],{"class":50},[37,61515,484],{"class":51636},[37,61517,51643],{"class":50},[37,61519,61520,61522,61524,61526,61528,61530,61532,61534,61537,61539,61541,61543],{"class":39,"line":17099},[37,61521,61383],{"class":50},[37,61523,484],{"class":51636},[37,61525,61388],{"class":50},[37,61527,51],{"class":51636},[37,61529,61393],{"class":2320},[37,61531,55],{"class":50},[37,61533,61398],{"class":185},[37,61535,61536],{"class":50},">黑鲨4\u003C\u002F",[37,61538,51],{"class":51636},[37,61540,55650],{"class":50},[37,61542,484],{"class":51636},[37,61544,51643],{"class":50},[37,61546,61547,61549,61551,61553,61555,61557,61559,61561,61564,61566,61568,61570],{"class":39,"line":17104},[37,61548,61383],{"class":50},[37,61550,484],{"class":51636},[37,61552,61388],{"class":50},[37,61554,51],{"class":51636},[37,61556,61393],{"class":2320},[37,61558,55],{"class":50},[37,61560,61398],{"class":185},[37,61562,61563],{"class":50},">空调\u003C\u002F",[37,61565,51],{"class":51636},[37,61567,55650],{"class":50},[37,61569,484],{"class":51636},[37,61571,51643],{"class":50},[37,61573,61574,61577,61579],{"class":39,"line":17110},[37,61575,61576],{"class":50},"        \u003C\u002F",[37,61578,1515],{"class":51636},[37,61580,51643],{"class":50},[37,61582,61583,61585,61587],{"class":39,"line":17124},[37,61584,52112],{"class":50},[37,61586,51947],{"class":51636},[37,61588,51643],{"class":50},[37,61590,61591,61593,61595],{"class":39,"line":17137},[37,61592,51677],{"class":50},[37,61594,52149],{"class":51636},[37,61596,51643],{"class":50},[37,61598,61599],{"class":39,"line":17142},[37,61600,61601],{"class":43},"        \u002F\u002F 1. 获取元素\n",[37,61603,61604,61607,61609,61611,61613,61615,61617,61620],{"class":39,"line":17156},[37,61605,61606],{"class":54},"        const",[37,61608,60941],{"class":61},[37,61610,13905],{"class":54},[37,61612,54732],{"class":50},[37,61614,54735],{"class":2320},[37,61616,165],{"class":50},[37,61618,61619],{"class":185},"'[type=search]'",[37,61621,280],{"class":50},[37,61623,61624,61626,61629,61631,61633,61635,61637,61640],{"class":39,"line":17161},[37,61625,61606],{"class":54},[37,61627,61628],{"class":61}," ul",[37,61630,13905],{"class":54},[37,61632,54732],{"class":50},[37,61634,54735],{"class":2320},[37,61636,165],{"class":50},[37,61638,61639],{"class":185},"'.result-list'",[37,61641,280],{"class":50},[37,61643,61644],{"class":39,"line":17167},[37,61645,61646],{"class":43},"        \u002F\u002F console.log(input)\n",[37,61648,61649],{"class":39,"line":17172},[37,61650,61651],{"class":43},"        \u002F\u002F 2. 监听事件 获得焦点\n",[37,61653,61654,61657,61659,61661,61664,61666,61668],{"class":39,"line":17186},[37,61655,61656],{"class":50},"        input.",[37,61658,58149],{"class":2320},[37,61660,165],{"class":50},[37,61662,61663],{"class":185},"'focus'",[37,61665,12776],{"class":50},[37,61667,54785],{"class":54},[37,61669,54788],{"class":50},[37,61671,61672],{"class":39,"line":17191},[37,61673,61674],{"class":43},"            \u002F\u002F ul显示\n",[37,61676,61677,61680,61682],{"class":39,"line":17196},[37,61678,61679],{"class":50},"            ul.style.display ",[37,61681,55],{"class":54},[37,61683,61684],{"class":185}," 'block'\n",[37,61686,61687],{"class":39,"line":17210},[37,61688,61689],{"class":43},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[37,61691,61692,61695,61697,61699,61702],{"class":39,"line":17222},[37,61693,61694],{"class":50},"            input.classList.",[37,61696,5682],{"class":2320},[37,61698,165],{"class":50},[37,61700,61701],{"class":185},"'search'",[37,61703,280],{"class":50},[37,61705,61706],{"class":39,"line":17227},[37,61707,61708],{"class":50},"        })\n",[37,61710,61711],{"class":39,"line":17240},[37,61712,61713],{"class":43},"        \u002F\u002F 3. 监听事件 失去焦点\n",[37,61715,61716,61718,61720,61722,61725,61727,61729],{"class":39,"line":17245},[37,61717,61656],{"class":50},[37,61719,58149],{"class":2320},[37,61721,165],{"class":50},[37,61723,61724],{"class":185},"'blur'",[37,61726,12776],{"class":50},[37,61728,54785],{"class":54},[37,61730,54788],{"class":50},[37,61732,61733,61735,61737],{"class":39,"line":17250},[37,61734,61679],{"class":50},[37,61736,55],{"class":54},[37,61738,61739],{"class":185}," 'none'\n",[37,61741,61742,61744,61746,61748,61750],{"class":39,"line":17255},[37,61743,61694],{"class":50},[37,61745,57342],{"class":2320},[37,61747,165],{"class":50},[37,61749,61701],{"class":185},[37,61751,280],{"class":50},[37,61753,61754],{"class":39,"line":17268},[37,61755,61708],{"class":50},[37,61757,61758,61760,61762],{"class":39,"line":17273},[37,61759,52112],{"class":50},[37,61761,52149],{"class":51636},[37,61763,51643],{"class":50},[37,61765,61766,61768,61770],{"class":39,"line":32971},[37,61767,52121],{"class":50},[37,61769,52136],{"class":51636},[37,61771,51643],{"class":50},[37,61773,61774],{"class":39,"line":32977},[37,61775,2757],{"emptyLinePlaceholder":454},[37,61777,61778,61780,61782],{"class":39,"line":32983},[37,61779,52121],{"class":50},[37,61781,50971],{"class":51636},[37,61783,51643],{"class":50},[22339,61785,61787],{"id":61786},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61789,61790],{},"评论字数统计案例",[14,61792,61793],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61795,61796],{},"牢记focus伪类选择器",[51680,61798],{"charSet":61799},"UTF-8",[51680,61801],{"name":61802,"content":61803},"viewport","width=device-width, initial-scale=1.0",[51743,61805,61806],{},"Document",[446,61808,61809],{},"\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",[54157,61811],{"type":5536},[1515,61813,61814,61817],{},[484,61815,61816],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[484,61818,61819],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[27,61821,61823],{"className":50969,"code":61822,"language":50971,"meta":32,"style":32},"\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",[34,61824,61825,61835,61849,61853,61861,61875,61895,61915,61928,61936,61943,61956,61970,61980,61990,61994,61998,62005,62017,62029,62041,62053,62082,62095,62099,62103,62112,62123,62135,62146,62157,62169,62180,62192,62208,62220,62224,62228,62239,62250,62260,62272,62276,62280,62288,62299,62309,62320,62332,62345,62357,62369,62373,62377,62386,62398,62409,62422,62433,62447,62451,62455,62462,62474,62486,62496,62500,62504,62513,62525,62535,62539,62543,62554,62564,62583,62596,62600,62604,62614,62624,62628,62632,62643,62654,62666,62678,62682,62686,62697,62708,62722,62726,62730,62741,62751,62763,62767,62775,62783,62787,62795,62810,62829,62869,62882,62890,62904,62924,62932,62947,62970,62988,63003,63023,63043,63063,63071,63079,63087,63095,63115,63135,63140,63157,63166,63170,63175,63191,63199,63203,63208,63225,63230,63255,63259,63263,63268,63273,63281,63289,63293],{"__ignoreMap":32},[37,61826,61827,61829,61831,61833],{"class":39,"line":40},[37,61828,51633],{"class":50},[37,61830,51637],{"class":51636},[37,61832,51640],{"class":2320},[37,61834,51643],{"class":50},[37,61836,61837,61839,61841,61843,61845,61847],{"class":39,"line":47},[37,61838,1418],{"class":50},[37,61840,50971],{"class":51636},[37,61842,51652],{"class":2320},[37,61844,55],{"class":50},[37,61846,51657],{"class":185},[37,61848,51643],{"class":50},[37,61850,61851],{"class":39,"line":104},[37,61852,2757],{"emptyLinePlaceholder":454},[37,61854,61855,61857,61859],{"class":39,"line":113},[37,61856,1418],{"class":50},[37,61858,51670],{"class":51636},[37,61860,51643],{"class":50},[37,61862,61863,61865,61867,61869,61871,61873],{"class":39,"line":189},[37,61864,52480],{"class":50},[37,61866,51680],{"class":51636},[37,61868,51683],{"class":2320},[37,61870,55],{"class":50},[37,61872,51688],{"class":185},[37,61874,51643],{"class":50},[37,61876,61877,61879,61881,61883,61885,61887,61889,61891,61893],{"class":39,"line":195},[37,61878,52480],{"class":50},[37,61880,51680],{"class":51636},[37,61882,51699],{"class":2320},[37,61884,55],{"class":50},[37,61886,51704],{"class":185},[37,61888,51707],{"class":2320},[37,61890,55],{"class":50},[37,61892,51712],{"class":185},[37,61894,51643],{"class":50},[37,61896,61897,61899,61901,61903,61905,61907,61909,61911,61913],{"class":39,"line":201},[37,61898,52480],{"class":50},[37,61900,51680],{"class":51636},[37,61902,15261],{"class":2320},[37,61904,55],{"class":50},[37,61906,51727],{"class":185},[37,61908,51707],{"class":2320},[37,61910,55],{"class":50},[37,61912,51734],{"class":185},[37,61914,51643],{"class":50},[37,61916,61917,61919,61921,61924,61926],{"class":39,"line":207},[37,61918,52480],{"class":50},[37,61920,51743],{"class":51636},[37,61922,61923],{"class":50},">评论回车发布\u003C\u002F",[37,61925,51743],{"class":51636},[37,61927,51643],{"class":50},[37,61929,61930,61932,61934],{"class":39,"line":213},[37,61931,52480],{"class":50},[37,61933,446],{"class":51636},[37,61935,51643],{"class":50},[37,61937,61938,61941],{"class":39,"line":218},[37,61939,61940],{"class":2320},"    .wrapper",[37,61942,15913],{"class":50},[37,61944,61945,61948,61950,61952,61954],{"class":39,"line":227},[37,61946,61947],{"class":61},"      min-width",[37,61949,51773],{"class":50},[37,61951,4337],{"class":61},[37,61953,51828],{"class":54},[37,61955,1669],{"class":50},[37,61957,61958,61961,61963,61966,61968],{"class":39,"line":232},[37,61959,61960],{"class":61},"      max-width",[37,61962,51773],{"class":50},[37,61964,61965],{"class":61},"800",[37,61967,51828],{"class":54},[37,61969,1669],{"class":50},[37,61971,61972,61974,61976,61978],{"class":39,"line":238},[37,61973,55345],{"class":61},[37,61975,51773],{"class":50},[37,61977,51813],{"class":61},[37,61979,1669],{"class":50},[37,61981,61982,61984,61986,61988],{"class":39,"line":244},[37,61983,55356],{"class":61},[37,61985,51773],{"class":50},[37,61987,51916],{"class":61},[37,61989,1669],{"class":50},[37,61991,61992],{"class":39,"line":250},[37,61993,2544],{"class":50},[37,61995,61996],{"class":39,"line":256},[37,61997,2757],{"emptyLinePlaceholder":454},[37,61999,62000,62003],{"class":39,"line":261},[37,62001,62002],{"class":2320},"    .avatar",[37,62004,15913],{"class":50},[37,62006,62007,62009,62011,62013,62015],{"class":39,"line":267},[37,62008,55107],{"class":61},[37,62010,51773],{"class":50},[37,62012,1117],{"class":61},[37,62014,51828],{"class":54},[37,62016,1669],{"class":50},[37,62018,62019,62021,62023,62025,62027],{"class":39,"line":283},[37,62020,55121],{"class":61},[37,62022,51773],{"class":50},[37,62024,1117],{"class":61},[37,62026,51828],{"class":54},[37,62028,1669],{"class":50},[37,62030,62031,62033,62035,62037,62039],{"class":39,"line":288},[37,62032,55470],{"class":61},[37,62034,51773],{"class":50},[37,62036,1166],{"class":61},[37,62038,845],{"class":54},[37,62040,1669],{"class":50},[37,62042,62043,62046,62048,62051],{"class":39,"line":294},[37,62044,62045],{"class":61},"      overflow",[37,62047,51773],{"class":50},[37,62049,62050],{"class":61},"hidden",[37,62052,1669],{"class":50},[37,62054,62055,62058,62060,62063,62065,62068,62070,62073,62075,62077,62080],{"class":39,"line":300},[37,62056,62057],{"class":61},"      background",[37,62059,51773],{"class":50},[37,62061,62062],{"class":61},"url",[37,62064,165],{"class":50},[37,62066,62067],{"class":159},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[37,62069,14055],{"class":50},[37,62071,62072],{"class":61},"no-repeat",[37,62074,17485],{"class":61},[37,62076,25320],{"class":50},[37,62078,62079],{"class":61},"cover",[37,62081,1669],{"class":50},[37,62083,62084,62087,62089,62091,62093],{"class":39,"line":306},[37,62085,62086],{"class":61},"      margin-right",[37,62088,51773],{"class":50},[37,62090,1210],{"class":61},[37,62092,51828],{"class":54},[37,62094,1669],{"class":50},[37,62096,62097],{"class":39,"line":312},[37,62098,2544],{"class":50},[37,62100,62101],{"class":39,"line":317},[37,62102,2757],{"emptyLinePlaceholder":454},[37,62104,62105,62107,62110],{"class":39,"line":323},[37,62106,61940],{"class":2320},[37,62108,62109],{"class":51636}," textarea",[37,62111,15913],{"class":50},[37,62113,62114,62117,62119,62121],{"class":39,"line":337},[37,62115,62116],{"class":61},"      outline",[37,62118,51773],{"class":50},[37,62120,55073],{"class":61},[37,62122,1669],{"class":50},[37,62124,62125,62128,62130,62133],{"class":39,"line":342},[37,62126,62127],{"class":61},"      border-color",[37,62129,51773],{"class":50},[37,62131,62132],{"class":61},"transparent",[37,62134,1669],{"class":50},[37,62136,62137,62140,62142,62144],{"class":39,"line":347},[37,62138,62139],{"class":61},"      resize",[37,62141,51773],{"class":50},[37,62143,55073],{"class":61},[37,62145,1669],{"class":50},[37,62147,62148,62150,62152,62155],{"class":39,"line":352},[37,62149,62057],{"class":61},[37,62151,51773],{"class":50},[37,62153,62154],{"class":61},"#f5f5f5",[37,62156,1669],{"class":50},[37,62158,62159,62161,62163,62165,62167],{"class":39,"line":357},[37,62160,55470],{"class":61},[37,62162,51773],{"class":50},[37,62164,168],{"class":61},[37,62166,51828],{"class":54},[37,62168,1669],{"class":50},[37,62170,62171,62174,62176,62178],{"class":39,"line":362},[37,62172,62173],{"class":61},"      flex",[37,62175,51773],{"class":50},[37,62177,332],{"class":61},[37,62179,1669],{"class":50},[37,62181,62182,62184,62186,62188,62190],{"class":39,"line":367},[37,62183,55031],{"class":61},[37,62185,51773],{"class":50},[37,62187,98],{"class":61},[37,62189,51828],{"class":54},[37,62191,1669],{"class":50},[37,62193,62194,62197,62199,62201,62204,62206],{"class":39,"line":373},[37,62195,62196],{"class":61},"      transition",[37,62198,51773],{"class":50},[37,62200,28463],{"class":61},[37,62202,62203],{"class":61}," 0.5",[37,62205,1205],{"class":54},[37,62207,1669],{"class":50},[37,62209,62210,62212,62214,62216,62218],{"class":39,"line":392},[37,62211,55121],{"class":61},[37,62213,51773],{"class":50},[37,62215,1459],{"class":61},[37,62217,51828],{"class":54},[37,62219,1669],{"class":50},[37,62221,62222],{"class":39,"line":398},[37,62223,2544],{"class":50},[37,62225,62226],{"class":39,"line":409},[37,62227,2757],{"emptyLinePlaceholder":454},[37,62229,62230,62232,62234,62237],{"class":39,"line":415},[37,62231,61940],{"class":2320},[37,62233,62109],{"class":51636},[37,62235,62236],{"class":2320},":focus",[37,62238,15913],{"class":50},[37,62240,62241,62243,62245,62248],{"class":39,"line":420},[37,62242,62127],{"class":61},[37,62244,51773],{"class":50},[37,62246,62247],{"class":61},"#e4e4e4",[37,62249,1669],{"class":50},[37,62251,62252,62254,62256,62258],{"class":39,"line":425},[37,62253,62057],{"class":61},[37,62255,51773],{"class":50},[37,62257,61178],{"class":61},[37,62259,1669],{"class":50},[37,62261,62262,62264,62266,62268,62270],{"class":39,"line":431},[37,62263,55121],{"class":61},[37,62265,51773],{"class":50},[37,62267,1166],{"class":61},[37,62269,51828],{"class":54},[37,62271,1669],{"class":50},[37,62273,62274],{"class":39,"line":436},[37,62275,2544],{"class":50},[37,62277,62278],{"class":39,"line":442},[37,62279,2757],{"emptyLinePlaceholder":454},[37,62281,62282,62284,62286],{"class":39,"line":8374},[37,62283,61940],{"class":2320},[37,62285,57803],{"class":51636},[37,62287,15913],{"class":50},[37,62289,62290,62292,62294,62297],{"class":39,"line":8386},[37,62291,62057],{"class":61},[37,62293,51773],{"class":50},[37,62295,62296],{"class":61},"#00aeec",[37,62298,1669],{"class":50},[37,62300,62301,62303,62305,62307],{"class":39,"line":8398},[37,62302,57752],{"class":61},[37,62304,51773],{"class":50},[37,62306,61178],{"class":61},[37,62308,1669],{"class":50},[37,62310,62311,62314,62316,62318],{"class":39,"line":10057},[37,62312,62313],{"class":61},"      border",[37,62315,51773],{"class":50},[37,62317,55073],{"class":61},[37,62319,1669],{"class":50},[37,62321,62322,62324,62326,62328,62330],{"class":39,"line":10082},[37,62323,55470],{"class":61},[37,62325,51773],{"class":50},[37,62327,168],{"class":61},[37,62329,51828],{"class":54},[37,62331,1669],{"class":50},[37,62333,62334,62337,62339,62341,62343],{"class":39,"line":10105},[37,62335,62336],{"class":61},"      margin-left",[37,62338,51773],{"class":50},[37,62340,98],{"class":61},[37,62342,51828],{"class":54},[37,62344,1669],{"class":50},[37,62346,62347,62349,62351,62353,62355],{"class":39,"line":10129},[37,62348,55107],{"class":61},[37,62350,51773],{"class":50},[37,62352,872],{"class":61},[37,62354,51828],{"class":54},[37,62356,1669],{"class":50},[37,62358,62359,62362,62364,62367],{"class":39,"line":10134},[37,62360,62361],{"class":61},"      cursor",[37,62363,51773],{"class":50},[37,62365,62366],{"class":61},"pointer",[37,62368,1669],{"class":50},[37,62370,62371],{"class":39,"line":10139},[37,62372,2544],{"class":50},[37,62374,62375],{"class":39,"line":10144},[37,62376,2757],{"emptyLinePlaceholder":454},[37,62378,62379,62381,62384],{"class":39,"line":10153},[37,62380,61940],{"class":2320},[37,62382,62383],{"class":2320}," .total",[37,62385,15913],{"class":50},[37,62387,62388,62390,62392,62394,62396],{"class":39,"line":10158},[37,62389,62086],{"class":61},[37,62391,51773],{"class":50},[37,62393,1122],{"class":61},[37,62395,51828],{"class":54},[37,62397,1669],{"class":50},[37,62399,62400,62402,62404,62407],{"class":39,"line":10164},[37,62401,57752],{"class":61},[37,62403,51773],{"class":50},[37,62405,62406],{"class":61},"#999",[37,62408,1669],{"class":50},[37,62410,62411,62414,62416,62418,62420],{"class":39,"line":10185},[37,62412,62413],{"class":61},"      margin-top",[37,62415,51773],{"class":50},[37,62417,836],{"class":61},[37,62419,51828],{"class":54},[37,62421,1669],{"class":50},[37,62423,62424,62427,62429,62431],{"class":39,"line":10191},[37,62425,62426],{"class":61},"      opacity",[37,62428,51773],{"class":50},[37,62430,135],{"class":61},[37,62432,1669],{"class":50},[37,62434,62435,62437,62439,62441,62443,62445],{"class":39,"line":10205},[37,62436,62196],{"class":61},[37,62438,51773],{"class":50},[37,62440,28463],{"class":61},[37,62442,62203],{"class":61},[37,62444,1205],{"class":54},[37,62446,1669],{"class":50},[37,62448,62449],{"class":39,"line":10211},[37,62450,2544],{"class":50},[37,62452,62453],{"class":39,"line":10238},[37,62454,2757],{"emptyLinePlaceholder":454},[37,62456,62457,62460],{"class":39,"line":10247},[37,62458,62459],{"class":2320},"    .list",[37,62461,15913],{"class":50},[37,62463,62464,62466,62468,62470,62472],{"class":39,"line":10253},[37,62465,61947],{"class":61},[37,62467,51773],{"class":50},[37,62469,4337],{"class":61},[37,62471,51828],{"class":54},[37,62473,1669],{"class":50},[37,62475,62476,62478,62480,62482,62484],{"class":39,"line":10261},[37,62477,61960],{"class":61},[37,62479,51773],{"class":50},[37,62481,61965],{"class":61},[37,62483,51828],{"class":54},[37,62485,1669],{"class":50},[37,62487,62488,62490,62492,62494],{"class":39,"line":10266},[37,62489,55345],{"class":61},[37,62491,51773],{"class":50},[37,62493,51813],{"class":61},[37,62495,1669],{"class":50},[37,62497,62498],{"class":39,"line":16945},[37,62499,2544],{"class":50},[37,62501,62502],{"class":39,"line":16951},[37,62503,2757],{"emptyLinePlaceholder":454},[37,62505,62506,62508,62511],{"class":39,"line":16974},[37,62507,62459],{"class":2320},[37,62509,62510],{"class":2320}," .item",[37,62512,15913],{"class":50},[37,62514,62515,62517,62519,62521,62523],{"class":39,"line":16980},[37,62516,55107],{"class":61},[37,62518,51773],{"class":50},[37,62520,154],{"class":61},[37,62522,845],{"class":54},[37,62524,1669],{"class":50},[37,62526,62527,62529,62531,62533],{"class":39,"line":17003},[37,62528,55345],{"class":61},[37,62530,51773],{"class":50},[37,62532,51813],{"class":61},[37,62534,1669],{"class":50},[37,62536,62537],{"class":39,"line":17017},[37,62538,2544],{"class":50},[37,62540,62541],{"class":39,"line":17037},[37,62542,2757],{"emptyLinePlaceholder":454},[37,62544,62545,62547,62549,62552],{"class":39,"line":17043},[37,62546,62459],{"class":2320},[37,62548,62510],{"class":2320},[37,62550,62551],{"class":2320}," .info",[37,62553,15913],{"class":50},[37,62555,62556,62558,62560,62562],{"class":39,"line":17054},[37,62557,62173],{"class":61},[37,62559,51773],{"class":50},[37,62561,332],{"class":61},[37,62563,1669],{"class":50},[37,62565,62566,62569,62571,62573,62575,62578,62581],{"class":39,"line":17077},[37,62567,62568],{"class":61},"      border-bottom",[37,62570,51773],{"class":50},[37,62572,332],{"class":61},[37,62574,51828],{"class":54},[37,62576,62577],{"class":61}," dashed",[37,62579,62580],{"class":61}," #e4e4e4",[37,62582,1669],{"class":50},[37,62584,62585,62588,62590,62592,62594],{"class":39,"line":17099},[37,62586,62587],{"class":61},"      padding-bottom",[37,62589,51773],{"class":50},[37,62591,98],{"class":61},[37,62593,51828],{"class":54},[37,62595,1669],{"class":50},[37,62597,62598],{"class":39,"line":17104},[37,62599,2544],{"class":50},[37,62601,62602],{"class":39,"line":17110},[37,62603,2757],{"emptyLinePlaceholder":454},[37,62605,62606,62608,62610,62612],{"class":39,"line":17124},[37,62607,62459],{"class":2320},[37,62609,62510],{"class":2320},[37,62611,7173],{"class":51636},[37,62613,15913],{"class":50},[37,62615,62616,62618,62620,62622],{"class":39,"line":17137},[37,62617,55042],{"class":61},[37,62619,51773],{"class":50},[37,62621,135],{"class":61},[37,62623,1669],{"class":50},[37,62625,62626],{"class":39,"line":17142},[37,62627,2544],{"class":50},[37,62629,62630],{"class":39,"line":17156},[37,62631,2757],{"emptyLinePlaceholder":454},[37,62633,62634,62636,62638,62641],{"class":39,"line":17161},[37,62635,62459],{"class":2320},[37,62637,62510],{"class":2320},[37,62639,62640],{"class":2320}," .name",[37,62642,15913],{"class":50},[37,62644,62645,62647,62649,62652],{"class":39,"line":17167},[37,62646,57752],{"class":61},[37,62648,51773],{"class":50},[37,62650,62651],{"class":61},"#FB7299",[37,62653,1669],{"class":50},[37,62655,62656,62658,62660,62662,62664],{"class":39,"line":17172},[37,62657,55258],{"class":61},[37,62659,51773],{"class":50},[37,62661,1059],{"class":61},[37,62663,51828],{"class":54},[37,62665,1669],{"class":50},[37,62667,62668,62671,62673,62676],{"class":39,"line":17186},[37,62669,62670],{"class":61},"      font-weight",[37,62672,51773],{"class":50},[37,62674,62675],{"class":61},"bold",[37,62677,1669],{"class":50},[37,62679,62680],{"class":39,"line":17191},[37,62681,2544],{"class":50},[37,62683,62684],{"class":39,"line":17196},[37,62685,2757],{"emptyLinePlaceholder":454},[37,62687,62688,62690,62692,62695],{"class":39,"line":17210},[37,62689,62459],{"class":2320},[37,62691,62510],{"class":2320},[37,62693,62694],{"class":2320}," .text",[37,62696,15913],{"class":50},[37,62698,62699,62701,62703,62706],{"class":39,"line":17222},[37,62700,57752],{"class":61},[37,62702,51773],{"class":50},[37,62704,62705],{"class":61},"#333",[37,62707,1669],{"class":50},[37,62709,62710,62712,62714,62716,62718,62720],{"class":39,"line":17227},[37,62711,55031],{"class":61},[37,62713,51773],{"class":50},[37,62715,98],{"class":61},[37,62717,51828],{"class":54},[37,62719,4443],{"class":61},[37,62721,1669],{"class":50},[37,62723,62724],{"class":39,"line":17240},[37,62725,2544],{"class":50},[37,62727,62728],{"class":39,"line":17245},[37,62729,2757],{"emptyLinePlaceholder":454},[37,62731,62732,62734,62736,62739],{"class":39,"line":17250},[37,62733,62459],{"class":2320},[37,62735,62510],{"class":2320},[37,62737,62738],{"class":2320}," .time",[37,62740,15913],{"class":50},[37,62742,62743,62745,62747,62749],{"class":39,"line":17255},[37,62744,57752],{"class":61},[37,62746,51773],{"class":50},[37,62748,62406],{"class":61},[37,62750,1669],{"class":50},[37,62752,62753,62755,62757,62759,62761],{"class":39,"line":17268},[37,62754,55258],{"class":61},[37,62756,51773],{"class":50},[37,62758,68],{"class":61},[37,62760,51828],{"class":54},[37,62762,1669],{"class":50},[37,62764,62765],{"class":39,"line":17273},[37,62766,2544],{"class":50},[37,62768,62769,62771,62773],{"class":39,"line":32971},[37,62770,52753],{"class":50},[37,62772,446],{"class":51636},[37,62774,51643],{"class":50},[37,62776,62777,62779,62781],{"class":39,"line":32977},[37,62778,52121],{"class":50},[37,62780,51670],{"class":51636},[37,62782,51643],{"class":50},[37,62784,62785],{"class":39,"line":32983},[37,62786,2757],{"emptyLinePlaceholder":454},[37,62788,62789,62791,62793],{"class":39,"line":32989},[37,62790,1418],{"class":50},[37,62792,52136],{"class":51636},[37,62794,51643],{"class":50},[37,62796,62797,62799,62801,62803,62805,62808],{"class":39,"line":32995},[37,62798,52480],{"class":50},[37,62800,51947],{"class":51636},[37,62802,53822],{"class":2320},[37,62804,55],{"class":50},[37,62806,62807],{"class":185},"\"wrapper\"",[37,62809,51643],{"class":50},[37,62811,62812,62814,62816,62818,62820,62823,62825,62827],{"class":39,"line":33006},[37,62813,51677],{"class":50},[37,62815,954],{"class":51636},[37,62817,53822],{"class":2320},[37,62819,55],{"class":50},[37,62821,62822],{"class":185},"\"avatar\"",[37,62824,55650],{"class":50},[37,62826,954],{"class":51636},[37,62828,51643],{"class":50},[37,62830,62831,62833,62835,62837,62839,62842,62844,62846,62849,62851,62853,62855,62858,62860,62863,62865,62867],{"class":39,"line":33012},[37,62832,51677],{"class":50},[37,62834,54624],{"class":51636},[37,62836,15300],{"class":2320},[37,62838,55],{"class":50},[37,62840,62841],{"class":185},"\"tx\"",[37,62843,61356],{"class":2320},[37,62845,55],{"class":50},[37,62847,62848],{"class":185},"\"发一条友善的评论\"",[37,62850,54647],{"class":2320},[37,62852,55],{"class":50},[37,62854,4051],{"class":185},[37,62856,62857],{"class":2320}," maxlength",[37,62859,55],{"class":50},[37,62861,62862],{"class":185},"\"200\"",[37,62864,55650],{"class":50},[37,62866,54624],{"class":51636},[37,62868,51643],{"class":50},[37,62870,62871,62873,62875,62878,62880],{"class":39,"line":33032},[37,62872,51677],{"class":50},[37,62874,54223],{"class":51636},[37,62876,62877],{"class":50},">发布\u003C\u002F",[37,62879,54223],{"class":51636},[37,62881,51643],{"class":50},[37,62883,62884,62886,62888],{"class":39,"line":33038},[37,62885,52753],{"class":50},[37,62887,51947],{"class":51636},[37,62889,51643],{"class":50},[37,62891,62892,62894,62896,62898,62900,62902],{"class":39,"line":33049},[37,62893,52480],{"class":50},[37,62895,51947],{"class":51636},[37,62897,53822],{"class":2320},[37,62899,55],{"class":50},[37,62901,62807],{"class":185},[37,62903,51643],{"class":50},[37,62905,62906,62908,62910,62912,62914,62917,62920,62922],{"class":39,"line":33055},[37,62907,51677],{"class":50},[37,62909,37],{"class":51636},[37,62911,53822],{"class":2320},[37,62913,55],{"class":50},[37,62915,62916],{"class":185},"\"total\"",[37,62918,62919],{"class":50},">0\u002F200字\u003C\u002F",[37,62921,37],{"class":51636},[37,62923,51643],{"class":50},[37,62925,62926,62928,62930],{"class":39,"line":33061},[37,62927,52753],{"class":50},[37,62929,51947],{"class":51636},[37,62931,51643],{"class":50},[37,62933,62934,62936,62938,62940,62942,62945],{"class":39,"line":33067},[37,62935,52480],{"class":50},[37,62937,51947],{"class":51636},[37,62939,53822],{"class":2320},[37,62941,55],{"class":50},[37,62943,62944],{"class":185},"\"list\"",[37,62946,51643],{"class":50},[37,62948,62949,62951,62953,62955,62957,62960,62963,62965,62968],{"class":39,"line":33073},[37,62950,51677],{"class":50},[37,62952,51947],{"class":51636},[37,62954,53822],{"class":2320},[37,62956,55],{"class":50},[37,62958,62959],{"class":185},"\"item\"",[37,62961,62962],{"class":2320}," style",[37,62964,55],{"class":50},[37,62966,62967],{"class":185},"\"display: none;\"",[37,62969,51643],{"class":50},[37,62971,62972,62974,62976,62978,62980,62982,62984,62986],{"class":39,"line":33079},[37,62973,55570],{"class":50},[37,62975,954],{"class":51636},[37,62977,53822],{"class":2320},[37,62979,55],{"class":50},[37,62981,62822],{"class":185},[37,62983,55650],{"class":50},[37,62985,954],{"class":51636},[37,62987,51643],{"class":50},[37,62989,62990,62992,62994,62996,62998,63001],{"class":39,"line":33085},[37,62991,55570],{"class":50},[37,62993,51947],{"class":51636},[37,62995,53822],{"class":2320},[37,62997,55],{"class":50},[37,62999,63000],{"class":185},"\"info\"",[37,63002,51643],{"class":50},[37,63004,63005,63007,63009,63011,63013,63016,63019,63021],{"class":39,"line":33091},[37,63006,55638],{"class":50},[37,63008,14],{"class":51636},[37,63010,53822],{"class":2320},[37,63012,55],{"class":50},[37,63014,63015],{"class":185},"\"name\"",[37,63017,63018],{"class":50},">清风徐来\u003C\u002F",[37,63020,14],{"class":51636},[37,63022,51643],{"class":50},[37,63024,63025,63027,63029,63031,63033,63036,63039,63041],{"class":39,"line":33111},[37,63026,55638],{"class":50},[37,63028,14],{"class":51636},[37,63030,53822],{"class":2320},[37,63032,55],{"class":50},[37,63034,63035],{"class":185},"\"text\"",[37,63037,63038],{"class":50},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[37,63040,14],{"class":51636},[37,63042,51643],{"class":50},[37,63044,63045,63047,63049,63051,63053,63056,63059,63061],{"class":39,"line":33117},[37,63046,55638],{"class":50},[37,63048,14],{"class":51636},[37,63050,53822],{"class":2320},[37,63052,55],{"class":50},[37,63054,63055],{"class":185},"\"time\"",[37,63057,63058],{"class":50},">2022-10-10 20:29:21\u003C\u002F",[37,63060,14],{"class":51636},[37,63062,51643],{"class":50},[37,63064,63065,63067,63069],{"class":39,"line":33133},[37,63066,55743],{"class":50},[37,63068,51947],{"class":51636},[37,63070,51643],{"class":50},[37,63072,63073,63075,63077],{"class":39,"line":33139},[37,63074,52112],{"class":50},[37,63076,51947],{"class":51636},[37,63078,51643],{"class":50},[37,63080,63081,63083,63085],{"class":39,"line":33153},[37,63082,52753],{"class":50},[37,63084,51947],{"class":51636},[37,63086,51643],{"class":50},[37,63088,63089,63091,63093],{"class":39,"line":33159},[37,63090,52480],{"class":50},[37,63092,52149],{"class":51636},[37,63094,51643],{"class":50},[37,63096,63097,63099,63102,63104,63106,63108,63110,63113],{"class":39,"line":33174},[37,63098,11562],{"class":54},[37,63100,63101],{"class":61}," tx",[37,63103,13905],{"class":54},[37,63105,54732],{"class":50},[37,63107,54735],{"class":2320},[37,63109,165],{"class":50},[37,63111,63112],{"class":185},"'#tx'",[37,63114,280],{"class":50},[37,63116,63117,63119,63122,63124,63126,63128,63130,63133],{"class":39,"line":33180},[37,63118,11562],{"class":54},[37,63120,63121],{"class":61}," total",[37,63123,13905],{"class":54},[37,63125,54732],{"class":50},[37,63127,54735],{"class":2320},[37,63129,165],{"class":50},[37,63131,63132],{"class":185},"'.total'",[37,63134,280],{"class":50},[37,63136,63137],{"class":39,"line":33189},[37,63138,63139],{"class":43},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[37,63141,63142,63145,63147,63149,63151,63153,63155],{"class":39,"line":33195},[37,63143,63144],{"class":50},"    tx.",[37,63146,58149],{"class":2320},[37,63148,165],{"class":50},[37,63150,61663],{"class":185},[37,63152,12776],{"class":50},[37,63154,54785],{"class":54},[37,63156,54788],{"class":50},[37,63158,63159,63162,63164],{"class":39,"line":33204},[37,63160,63161],{"class":50},"      total.style.opacity ",[37,63163,55],{"class":54},[37,63165,56035],{"class":61},[37,63167,63168],{"class":39,"line":33210},[37,63169,33798],{"class":50},[37,63171,63172],{"class":39,"line":33216},[37,63173,63174],{"class":43},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[37,63176,63177,63179,63181,63183,63185,63187,63189],{"class":39,"line":33225},[37,63178,63144],{"class":50},[37,63180,58149],{"class":2320},[37,63182,165],{"class":50},[37,63184,61724],{"class":185},[37,63186,12776],{"class":50},[37,63188,54785],{"class":54},[37,63190,54788],{"class":50},[37,63192,63193,63195,63197],{"class":39,"line":33231},[37,63194,63161],{"class":50},[37,63196,55],{"class":54},[37,63198,47670],{"class":61},[37,63200,63201],{"class":39,"line":33242},[37,63202,33798],{"class":50},[37,63204,63205],{"class":39,"line":33248},[37,63206,63207],{"class":43},"    \u002F\u002F 3. 检测用户输入\n",[37,63209,63210,63212,63214,63216,63219,63221,63223],{"class":39,"line":33267},[37,63211,63144],{"class":50},[37,63213,58149],{"class":2320},[37,63215,165],{"class":50},[37,63217,63218],{"class":185},"'input'",[37,63220,12776],{"class":50},[37,63222,54785],{"class":54},[37,63224,54788],{"class":50},[37,63226,63227],{"class":39,"line":33273},[37,63228,63229],{"class":43},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[37,63231,63232,63235,63237,63240,63243,63245,63248,63250,63252],{"class":39,"line":33284},[37,63233,63234],{"class":50},"      total.innerHTML ",[37,63236,55],{"class":54},[37,63238,63239],{"class":185}," `${",[37,63241,63242],{"class":50},"tx",[37,63244,1068],{"class":185},[37,63246,63247],{"class":50},"value",[37,63249,1068],{"class":185},[37,63251,52304],{"class":61},[37,63253,63254],{"class":185},"}\u002F200字`\n",[37,63256,63257],{"class":39,"line":33290},[37,63258,33798],{"class":50},[37,63260,63261],{"class":39,"line":33310},[37,63262,2757],{"emptyLinePlaceholder":454},[37,63264,63265],{"class":39,"line":33326},[37,63266,63267],{"class":43},"    \u002F\u002F const str = 'andy'\n",[37,63269,63270],{"class":39,"line":33332},[37,63271,63272],{"class":43},"    \u002F\u002F console.log(str.length)\n",[37,63274,63275,63277,63279],{"class":39,"line":33346},[37,63276,52753],{"class":50},[37,63278,52149],{"class":51636},[37,63280,51643],{"class":50},[37,63282,63283,63285,63287],{"class":39,"line":33352},[37,63284,52121],{"class":50},[37,63286,52136],{"class":51636},[37,63288,51643],{"class":50},[37,63290,63291],{"class":39,"line":33358},[37,63292,2757],{"emptyLinePlaceholder":454},[37,63294,63295,63297,63299],{"class":39,"line":33369},[37,63296,52121],{"class":50},[37,63298,50971],{"class":51636},[37,63300,51643],{"class":50},[22339,63302,63304],{"id":63303},"_3254-change事件","3.2.5.4 change事件",[14,63306,63307],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63309,63310],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63312,63313],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[27,63315,63317],{"className":50969,"code":63316,"language":50971,"meta":32,"style":32},"\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",[34,63318,63319,63329,63343,63347,63355,63369,63389,63401,63409,63413,63421,63435,63443,63461,63479,63491,63495,63503,63511,63515],{"__ignoreMap":32},[37,63320,63321,63323,63325,63327],{"class":39,"line":40},[37,63322,51633],{"class":50},[37,63324,51637],{"class":51636},[37,63326,51640],{"class":2320},[37,63328,51643],{"class":50},[37,63330,63331,63333,63335,63337,63339,63341],{"class":39,"line":47},[37,63332,1418],{"class":50},[37,63334,50971],{"class":51636},[37,63336,51652],{"class":2320},[37,63338,55],{"class":50},[37,63340,51657],{"class":185},[37,63342,51643],{"class":50},[37,63344,63345],{"class":39,"line":104},[37,63346,2757],{"emptyLinePlaceholder":454},[37,63348,63349,63351,63353],{"class":39,"line":113},[37,63350,1418],{"class":50},[37,63352,51670],{"class":51636},[37,63354,51643],{"class":50},[37,63356,63357,63359,63361,63363,63365,63367],{"class":39,"line":189},[37,63358,52480],{"class":50},[37,63360,51680],{"class":51636},[37,63362,51683],{"class":2320},[37,63364,55],{"class":50},[37,63366,51688],{"class":185},[37,63368,51643],{"class":50},[37,63370,63371,63373,63375,63377,63379,63381,63383,63385,63387],{"class":39,"line":195},[37,63372,52480],{"class":50},[37,63374,51680],{"class":51636},[37,63376,15261],{"class":2320},[37,63378,55],{"class":50},[37,63380,51727],{"class":185},[37,63382,51707],{"class":2320},[37,63384,55],{"class":50},[37,63386,51734],{"class":185},[37,63388,51643],{"class":50},[37,63390,63391,63393,63395,63397,63399],{"class":39,"line":201},[37,63392,52480],{"class":50},[37,63394,51743],{"class":51636},[37,63396,51746],{"class":50},[37,63398,51743],{"class":51636},[37,63400,51643],{"class":50},[37,63402,63403,63405,63407],{"class":39,"line":207},[37,63404,52121],{"class":50},[37,63406,51670],{"class":51636},[37,63408,51643],{"class":50},[37,63410,63411],{"class":39,"line":213},[37,63412,2757],{"emptyLinePlaceholder":454},[37,63414,63415,63417,63419],{"class":39,"line":218},[37,63416,1418],{"class":50},[37,63418,52136],{"class":51636},[37,63420,51643],{"class":50},[37,63422,63423,63425,63427,63429,63431,63433],{"class":39,"line":227},[37,63424,52480],{"class":50},[37,63426,54157],{"class":51636},[37,63428,54160],{"class":2320},[37,63430,55],{"class":50},[37,63432,63035],{"class":185},[37,63434,51643],{"class":50},[37,63436,63437,63439,63441],{"class":39,"line":232},[37,63438,52480],{"class":50},[37,63440,52149],{"class":51636},[37,63442,51643],{"class":50},[37,63444,63445,63447,63449,63451,63453,63455,63457,63459],{"class":39,"line":238},[37,63446,11562],{"class":54},[37,63448,60941],{"class":61},[37,63450,13905],{"class":54},[37,63452,54732],{"class":50},[37,63454,54735],{"class":2320},[37,63456,165],{"class":50},[37,63458,63218],{"class":185},[37,63460,280],{"class":50},[37,63462,63463,63466,63468,63470,63473,63475,63477],{"class":39,"line":244},[37,63464,63465],{"class":50},"    input.",[37,63467,58149],{"class":2320},[37,63469,165],{"class":50},[37,63471,63472],{"class":185},"'change'",[37,63474,12776],{"class":50},[37,63476,54785],{"class":54},[37,63478,54788],{"class":50},[37,63480,63481,63483,63485,63487,63489],{"class":39,"line":250},[37,63482,58580],{"class":50},[37,63484,58583],{"class":2320},[37,63486,165],{"class":50},[37,63488,1103],{"class":61},[37,63490,280],{"class":50},[37,63492,63493],{"class":39,"line":256},[37,63494,33798],{"class":50},[37,63496,63497,63499,63501],{"class":39,"line":261},[37,63498,52753],{"class":50},[37,63500,52149],{"class":51636},[37,63502,51643],{"class":50},[37,63504,63505,63507,63509],{"class":39,"line":267},[37,63506,52121],{"class":50},[37,63508,52136],{"class":51636},[37,63510,51643],{"class":50},[37,63512,63513],{"class":39,"line":283},[37,63514,2757],{"emptyLinePlaceholder":454},[37,63516,63517,63519,63521],{"class":39,"line":288},[37,63518,52121],{"class":50},[37,63520,50971],{"class":51636},[37,63522,51643],{"class":50},[14,63524,63525],{},"总结：内容发生改变才回去触发",[498,63527,63529],{"id":63528},"_326-事件对象","3.2.6 事件对象",[22339,63531,63533],{"id":63532},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63535,63536],{},[1838,63537],{"alt":32,"src":63538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63540,63541],{},[1838,63542],{"alt":32,"src":63543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63545,63546],{},"点击一次，就输出了事件对象，它是个对象",[14,63548,63549],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63551,63552],{},[1838,63553],{"alt":32,"src":63554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22339,63556,63558],{"id":63557},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63560,63561],{},[1838,63562],{"alt":32,"src":63563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63565,63566],{},"实现按特殊字符才是实现打印输出效果：",[27,63568,63570],{"className":53403,"code":63569,"language":53405,"meta":32,"style":32},"\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",[34,63571,63572,63580,63585,63599,63607,63612,63617,63622,63627,63632,63637,63642,63647,63652,63656,63660,63668],{"__ignoreMap":32},[37,63573,63574,63576,63578],{"class":39,"line":40},[37,63575,1418],{"class":50},[37,63577,52136],{"class":51636},[37,63579,51643],{"class":50},[37,63581,63582],{"class":39,"line":47},[37,63583,63584],{"class":43},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[37,63586,63587,63589,63591,63593,63595,63597],{"class":39,"line":104},[37,63588,52480],{"class":50},[37,63590,54157],{"class":51636},[37,63592,54160],{"class":2320},[37,63594,55],{"class":50},[37,63596,63035],{"class":185},[37,63598,51643],{"class":50},[37,63600,63601,63603,63605],{"class":39,"line":113},[37,63602,52480],{"class":50},[37,63604,52149],{"class":51636},[37,63606,51643],{"class":50},[37,63608,63609],{"class":39,"line":189},[37,63610,63611],{"class":50},"    \u002F\u002F const btn = document.querySelector('button')\n",[37,63613,63614],{"class":39,"line":195},[37,63615,63616],{"class":50},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[37,63618,63619],{"class":39,"line":201},[37,63620,63621],{"class":50},"    \u002F\u002F   console.log(e);\n",[37,63623,63624],{"class":39,"line":207},[37,63625,63626],{"class":50},"    \u002F\u002F })\n",[37,63628,63629],{"class":39,"line":213},[37,63630,63631],{"class":50},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[37,63633,63634],{"class":39,"line":218},[37,63635,63636],{"class":50},"    const input = document.querySelector('input')\n",[37,63638,63639],{"class":39,"line":227},[37,63640,63641],{"class":50},"    input.addEventListener('keyup', function (e) {\n",[37,63643,63644],{"class":39,"line":232},[37,63645,63646],{"class":50},"      if (e.key === 'Enter') {\n",[37,63648,63649],{"class":39,"line":238},[37,63650,63651],{"class":50},"        console.log('我按下了回车键')\n",[37,63653,63654],{"class":39,"line":244},[37,63655,52734],{"class":50},[37,63657,63658],{"class":39,"line":250},[37,63659,33798],{"class":50},[37,63661,63662,63664,63666],{"class":39,"line":256},[37,63663,52753],{"class":50},[37,63665,52149],{"class":51636},[37,63667,51643],{"class":50},[37,63669,63670,63672,63674],{"class":39,"line":261},[37,63671,52121],{"class":50},[37,63673,52136],{"class":51636},[37,63675,51643],{"class":50},[22339,63677,63679],{"id":63678},"_3263-trim方法","3.2.6.3 trim方法",[14,63681,63682],{},[1838,63683],{"alt":32,"src":63684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63686,63687],{},[1838,63688],{"alt":32,"src":63689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63691,63692],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63694,63695],{},"str.trim()",[498,63697,63699],{"id":63698},"_327-环境对象","3.2.7 环境对象",[14,63701,63702],{},[1838,63703],{"alt":32,"src":63704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63706,63707],{},[1838,63708],{"alt":32,"src":63709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63711,63712],{},[1838,63713],{"alt":32,"src":63714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63716,63717],{},"实际函数调用是window.fn()",[14,63719,63720],{},"普通函数里面this指向的是window",[1515,63722,63723,63726,63729],{},[484,63724,63725],{},"在普通函数下，this指向的是window",[484,63727,63728],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[484,63730,63731],{},"箭头函数没有this",[14,63733,63734],{},"粗略记法就是：谁调用，this就指向谁",[14,63736,63737],{},[1838,63738],{"alt":32,"src":63739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63741,63742],{},[1838,63743],{"alt":32,"src":63744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63746,63747],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63749,63750],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[27,63752,63754],{"className":53403,"code":63753,"language":53405,"meta":32,"style":32},"\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",[34,63755,63756,63764,63776,63784,63789,63794,63799,63804,63808,63816],{"__ignoreMap":32},[37,63757,63758,63760,63762],{"class":39,"line":40},[37,63759,1418],{"class":50},[37,63761,52136],{"class":51636},[37,63763,51643],{"class":50},[37,63765,63766,63768,63770,63772,63774],{"class":39,"line":47},[37,63767,52480],{"class":50},[37,63769,54223],{"class":51636},[37,63771,54229],{"class":50},[37,63773,54223],{"class":51636},[37,63775,51643],{"class":50},[37,63777,63778,63780,63782],{"class":39,"line":104},[37,63779,52480],{"class":50},[37,63781,52149],{"class":51636},[37,63783,51643],{"class":50},[37,63785,63786],{"class":39,"line":113},[37,63787,63788],{"class":50},"    const button = document.querySelector('button')\n",[37,63790,63791],{"class":39,"line":189},[37,63792,63793],{"class":50},"    button.addEventListener('click', function () {\n",[37,63795,63796],{"class":39,"line":195},[37,63797,63798],{"class":50},"      \u002F\u002F console.log(this);\n",[37,63800,63801],{"class":39,"line":201},[37,63802,63803],{"class":50},"      this.style.color = 'pink'\n",[37,63805,63806],{"class":39,"line":207},[37,63807,33798],{"class":50},[37,63809,63810,63812,63814],{"class":39,"line":213},[37,63811,52753],{"class":50},[37,63813,52149],{"class":51636},[37,63815,51643],{"class":50},[37,63817,63818,63820,63822],{"class":39,"line":218},[37,63819,52121],{"class":50},[37,63821,52136],{"class":51636},[37,63823,51643],{"class":50},[498,63825,63827],{"id":63826},"_328-回调函数","3.2.8 回调函数",[14,63829,63830],{},[1838,63831],{"alt":32,"src":63832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63834,63835],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63837,11673],{},[1515,63839,63840,63843,63846],{},[484,63841,63842],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[484,63844,63845],{},"回调函数本质还是函数，只不过把它当成参数使用",[484,63847,63848],{},"使用匿名函数做为回调函数比较常见",[498,63850,63852],{"id":63851},"_329-tab栏切换","3.2.9 tab栏切换",[14,63854,63855],{},[1838,63856],{"alt":32,"src":63857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[27,63859,63861],{"className":50969,"code":63860,"language":50971,"meta":32,"style":32},"\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",[34,63862,63863,63873,63887,63891,63899,63913,63933,63953,63966,63974,63980,63990,64000,64004,64008,64015,64028,64041,64053,64069,64073,64077,64084,64096,64108,64120,64130,64140,64144,64148,64157,64169,64180,64192,64196,64200,64208,64218,64228,64238,64242,64246,64256,64270,64282,64286,64290,64302,64313,64330,64340,64344,64348,64363,64374,64384,64388,64392,64399,64414,64418,64422,64430,64440,64444,64448,64457,64467,64471,64479,64487,64491,64499,64514,64529,64542,64550,64584,64611,64638,64665,64692,64700,64708,64723,64760,64795,64830,64865,64900,64908,64916,64924,64929,64934,64954,64959,64988,64993,64998,65016,65021,65026,65031,65053,65058,65074,65078,65083,65088,65109,65114,65143,65147,65152,65156,65164,65172,65176],{"__ignoreMap":32},[37,63864,63865,63867,63869,63871],{"class":39,"line":40},[37,63866,51633],{"class":50},[37,63868,51637],{"class":51636},[37,63870,51640],{"class":2320},[37,63872,51643],{"class":50},[37,63874,63875,63877,63879,63881,63883,63885],{"class":39,"line":47},[37,63876,1418],{"class":50},[37,63878,50971],{"class":51636},[37,63880,51652],{"class":2320},[37,63882,55],{"class":50},[37,63884,51657],{"class":185},[37,63886,51643],{"class":50},[37,63888,63889],{"class":39,"line":104},[37,63890,2757],{"emptyLinePlaceholder":454},[37,63892,63893,63895,63897],{"class":39,"line":113},[37,63894,1418],{"class":50},[37,63896,51670],{"class":51636},[37,63898,51643],{"class":50},[37,63900,63901,63903,63905,63907,63909,63911],{"class":39,"line":189},[37,63902,52480],{"class":50},[37,63904,51680],{"class":51636},[37,63906,51683],{"class":2320},[37,63908,55],{"class":50},[37,63910,51688],{"class":185},[37,63912,59463],{"class":50},[37,63914,63915,63917,63919,63921,63923,63925,63927,63929,63931],{"class":39,"line":195},[37,63916,52480],{"class":50},[37,63918,51680],{"class":51636},[37,63920,51699],{"class":2320},[37,63922,55],{"class":50},[37,63924,51704],{"class":185},[37,63926,51707],{"class":2320},[37,63928,55],{"class":50},[37,63930,51712],{"class":185},[37,63932,59463],{"class":50},[37,63934,63935,63937,63939,63941,63943,63945,63947,63949,63951],{"class":39,"line":201},[37,63936,52480],{"class":50},[37,63938,51680],{"class":51636},[37,63940,15261],{"class":2320},[37,63942,55],{"class":50},[37,63944,51727],{"class":185},[37,63946,51707],{"class":2320},[37,63948,55],{"class":50},[37,63950,51734],{"class":185},[37,63952,59463],{"class":50},[37,63954,63955,63957,63959,63962,63964],{"class":39,"line":207},[37,63956,52480],{"class":50},[37,63958,51743],{"class":51636},[37,63960,63961],{"class":50},">tab栏切换\u003C\u002F",[37,63963,51743],{"class":51636},[37,63965,51643],{"class":50},[37,63967,63968,63970,63972],{"class":39,"line":213},[37,63969,52480],{"class":50},[37,63971,446],{"class":51636},[37,63973,51643],{"class":50},[37,63975,63976,63978],{"class":39,"line":218},[37,63977,6751],{"class":51636},[37,63979,15913],{"class":50},[37,63981,63982,63984,63986,63988],{"class":39,"line":227},[37,63983,55042],{"class":61},[37,63985,51773],{"class":50},[37,63987,135],{"class":61},[37,63989,1669],{"class":50},[37,63991,63992,63994,63996,63998],{"class":39,"line":232},[37,63993,55031],{"class":61},[37,63995,51773],{"class":50},[37,63997,135],{"class":61},[37,63999,1669],{"class":50},[37,64001,64002],{"class":39,"line":238},[37,64003,2544],{"class":50},[37,64005,64006],{"class":39,"line":244},[37,64007,2757],{"emptyLinePlaceholder":454},[37,64009,64010,64013],{"class":39,"line":250},[37,64011,64012],{"class":2320},"    .tab",[37,64014,15913],{"class":50},[37,64016,64017,64019,64021,64024,64026],{"class":39,"line":256},[37,64018,55107],{"class":61},[37,64020,51773],{"class":50},[37,64022,64023],{"class":61},"590",[37,64025,51828],{"class":54},[37,64027,1669],{"class":50},[37,64029,64030,64032,64034,64037,64039],{"class":39,"line":261},[37,64031,55121],{"class":61},[37,64033,51773],{"class":50},[37,64035,64036],{"class":61},"340",[37,64038,51828],{"class":54},[37,64040,1669],{"class":50},[37,64042,64043,64045,64047,64049,64051],{"class":39,"line":267},[37,64044,55042],{"class":61},[37,64046,51773],{"class":50},[37,64048,1210],{"class":61},[37,64050,51828],{"class":54},[37,64052,1669],{"class":50},[37,64054,64055,64057,64059,64061,64063,64065,64067],{"class":39,"line":283},[37,64056,62313],{"class":61},[37,64058,51773],{"class":50},[37,64060,332],{"class":61},[37,64062,51828],{"class":54},[37,64064,51857],{"class":61},[37,64066,62580],{"class":61},[37,64068,1669],{"class":50},[37,64070,64071],{"class":39,"line":288},[37,64072,2544],{"class":50},[37,64074,64075],{"class":39,"line":294},[37,64076,2757],{"emptyLinePlaceholder":454},[37,64078,64079,64082],{"class":39,"line":300},[37,64080,64081],{"class":2320},"    .tab-nav",[37,64083,15913],{"class":50},[37,64085,64086,64088,64090,64092,64094],{"class":39,"line":306},[37,64087,55107],{"class":61},[37,64089,51773],{"class":50},[37,64091,154],{"class":61},[37,64093,845],{"class":54},[37,64095,1669],{"class":50},[37,64097,64098,64100,64102,64104,64106],{"class":39,"line":312},[37,64099,55121],{"class":61},[37,64101,51773],{"class":50},[37,64103,1415],{"class":61},[37,64105,51828],{"class":54},[37,64107,1669],{"class":50},[37,64109,64110,64112,64114,64116,64118],{"class":39,"line":317},[37,64111,57695],{"class":61},[37,64113,51773],{"class":50},[37,64115,1415],{"class":61},[37,64117,51828],{"class":54},[37,64119,1669],{"class":50},[37,64121,64122,64124,64126,64128],{"class":39,"line":323},[37,64123,55345],{"class":61},[37,64125,51773],{"class":50},[37,64127,51813],{"class":61},[37,64129,1669],{"class":50},[37,64131,64132,64134,64136,64138],{"class":39,"line":337},[37,64133,55356],{"class":61},[37,64135,51773],{"class":50},[37,64137,52004],{"class":61},[37,64139,1669],{"class":50},[37,64141,64142],{"class":39,"line":342},[37,64143,2544],{"class":50},[37,64145,64146],{"class":39,"line":347},[37,64147,2757],{"emptyLinePlaceholder":454},[37,64149,64150,64152,64155],{"class":39,"line":352},[37,64151,64081],{"class":2320},[37,64153,64154],{"class":51636}," h3",[37,64156,15913],{"class":50},[37,64158,64159,64161,64163,64165,64167],{"class":39,"line":357},[37,64160,55258],{"class":61},[37,64162,51773],{"class":50},[37,64164,1309],{"class":61},[37,64166,51828],{"class":54},[37,64168,1669],{"class":50},[37,64170,64171,64173,64175,64178],{"class":39,"line":362},[37,64172,62670],{"class":61},[37,64174,51773],{"class":50},[37,64176,64177],{"class":61},"normal",[37,64179,1669],{"class":50},[37,64181,64182,64184,64186,64188,64190],{"class":39,"line":367},[37,64183,62336],{"class":61},[37,64185,51773],{"class":50},[37,64187,1210],{"class":61},[37,64189,51828],{"class":54},[37,64191,1669],{"class":50},[37,64193,64194],{"class":39,"line":373},[37,64195,2544],{"class":50},[37,64197,64198],{"class":39,"line":392},[37,64199,2757],{"emptyLinePlaceholder":454},[37,64201,64202,64204,64206],{"class":39,"line":398},[37,64203,64081],{"class":2320},[37,64205,61628],{"class":51636},[37,64207,15913],{"class":50},[37,64209,64210,64212,64214,64216],{"class":39,"line":409},[37,64211,55068],{"class":61},[37,64213,51773],{"class":50},[37,64215,55073],{"class":61},[37,64217,1669],{"class":50},[37,64219,64220,64222,64224,64226],{"class":39,"line":415},[37,64221,55345],{"class":61},[37,64223,51773],{"class":50},[37,64225,51813],{"class":61},[37,64227,1669],{"class":50},[37,64229,64230,64232,64234,64236],{"class":39,"line":420},[37,64231,55356],{"class":61},[37,64233,51773],{"class":50},[37,64235,51916],{"class":61},[37,64237,1669],{"class":50},[37,64239,64240],{"class":39,"line":425},[37,64241,2544],{"class":50},[37,64243,64244],{"class":39,"line":431},[37,64245,2757],{"emptyLinePlaceholder":454},[37,64247,64248,64250,64252,64254],{"class":39,"line":436},[37,64249,64081],{"class":2320},[37,64251,61628],{"class":51636},[37,64253,55411],{"class":51636},[37,64255,15913],{"class":50},[37,64257,64258,64260,64262,64264,64266,64268],{"class":39,"line":442},[37,64259,55042],{"class":61},[37,64261,51773],{"class":50},[37,64263,135],{"class":61},[37,64265,9291],{"class":61},[37,64267,51828],{"class":54},[37,64269,1669],{"class":50},[37,64271,64272,64274,64276,64278,64280],{"class":39,"line":8374},[37,64273,55258],{"class":61},[37,64275,51773],{"class":50},[37,64277,1059],{"class":61},[37,64279,51828],{"class":54},[37,64281,1669],{"class":50},[37,64283,64284],{"class":39,"line":8386},[37,64285,2544],{"class":50},[37,64287,64288],{"class":39,"line":8398},[37,64289,2757],{"emptyLinePlaceholder":454},[37,64291,64292,64294,64296,64298,64300],{"class":39,"line":10057},[37,64293,64081],{"class":2320},[37,64295,61628],{"class":51636},[37,64297,55411],{"class":51636},[37,64299,1774],{"class":51636},[37,64301,15913],{"class":50},[37,64303,64304,64307,64309,64311],{"class":39,"line":10082},[37,64305,64306],{"class":61},"      text-decoration",[37,64308,51773],{"class":50},[37,64310,55073],{"class":61},[37,64312,1669],{"class":50},[37,64314,64315,64317,64319,64321,64323,64325,64328],{"class":39,"line":10105},[37,64316,62568],{"class":61},[37,64318,51773],{"class":50},[37,64320,602],{"class":61},[37,64322,51828],{"class":54},[37,64324,51857],{"class":61},[37,64326,64327],{"class":61}," transparent",[37,64329,1669],{"class":50},[37,64331,64332,64334,64336,64338],{"class":39,"line":10129},[37,64333,57752],{"class":61},[37,64335,51773],{"class":50},[37,64337,62705],{"class":61},[37,64339,1669],{"class":50},[37,64341,64342],{"class":39,"line":10134},[37,64343,2544],{"class":50},[37,64345,64346],{"class":39,"line":10139},[37,64347,2757],{"emptyLinePlaceholder":454},[37,64349,64350,64352,64354,64356,64358,64361],{"class":39,"line":10144},[37,64351,64081],{"class":2320},[37,64353,61628],{"class":51636},[37,64355,55411],{"class":51636},[37,64357,1774],{"class":51636},[37,64359,64360],{"class":2320},".active",[37,64362,15913],{"class":50},[37,64364,64365,64367,64369,64372],{"class":39,"line":10153},[37,64366,62127],{"class":61},[37,64368,51773],{"class":50},[37,64370,64371],{"class":61},"#e1251b",[37,64373,1669],{"class":50},[37,64375,64376,64378,64380,64382],{"class":39,"line":10158},[37,64377,57752],{"class":61},[37,64379,51773],{"class":50},[37,64381,64371],{"class":61},[37,64383,1669],{"class":50},[37,64385,64386],{"class":39,"line":10164},[37,64387,2544],{"class":50},[37,64389,64390],{"class":39,"line":10185},[37,64391,2757],{"emptyLinePlaceholder":454},[37,64393,64394,64397],{"class":39,"line":10191},[37,64395,64396],{"class":2320},"    .tab-content",[37,64398,15913],{"class":50},[37,64400,64401,64403,64405,64407,64410,64412],{"class":39,"line":10205},[37,64402,55031],{"class":61},[37,64404,51773],{"class":50},[37,64406,135],{"class":61},[37,64408,64409],{"class":61}," 16",[37,64411,51828],{"class":54},[37,64413,1669],{"class":50},[37,64415,64416],{"class":39,"line":10211},[37,64417,2544],{"class":50},[37,64419,64420],{"class":39,"line":10238},[37,64421,2757],{"emptyLinePlaceholder":454},[37,64423,64424,64426,64428],{"class":39,"line":10247},[37,64425,64396],{"class":2320},[37,64427,62510],{"class":2320},[37,64429,15913],{"class":50},[37,64431,64432,64434,64436,64438],{"class":39,"line":10253},[37,64433,55345],{"class":61},[37,64435,51773],{"class":50},[37,64437,55073],{"class":61},[37,64439,1669],{"class":50},[37,64441,64442],{"class":39,"line":10261},[37,64443,2544],{"class":50},[37,64445,64446],{"class":39,"line":10266},[37,64447,2757],{"emptyLinePlaceholder":454},[37,64449,64450,64452,64455],{"class":39,"line":16945},[37,64451,64396],{"class":2320},[37,64453,64454],{"class":2320}," .item.active",[37,64456,15913],{"class":50},[37,64458,64459,64461,64463,64465],{"class":39,"line":16951},[37,64460,55345],{"class":61},[37,64462,51773],{"class":50},[37,64464,61205],{"class":61},[37,64466,1669],{"class":50},[37,64468,64469],{"class":39,"line":16974},[37,64470,2544],{"class":50},[37,64472,64473,64475,64477],{"class":39,"line":16980},[37,64474,52753],{"class":50},[37,64476,446],{"class":51636},[37,64478,51643],{"class":50},[37,64480,64481,64483,64485],{"class":39,"line":17003},[37,64482,52121],{"class":50},[37,64484,51670],{"class":51636},[37,64486,51643],{"class":50},[37,64488,64489],{"class":39,"line":17017},[37,64490,2757],{"emptyLinePlaceholder":454},[37,64492,64493,64495,64497],{"class":39,"line":17037},[37,64494,1418],{"class":50},[37,64496,52136],{"class":51636},[37,64498,51643],{"class":50},[37,64500,64501,64503,64505,64507,64509,64512],{"class":39,"line":17043},[37,64502,52480],{"class":50},[37,64504,51947],{"class":51636},[37,64506,53822],{"class":2320},[37,64508,55],{"class":50},[37,64510,64511],{"class":185},"\"tab\"",[37,64513,51643],{"class":50},[37,64515,64516,64518,64520,64522,64524,64527],{"class":39,"line":17054},[37,64517,51677],{"class":50},[37,64519,51947],{"class":51636},[37,64521,53822],{"class":2320},[37,64523,55],{"class":50},[37,64525,64526],{"class":185},"\"tab-nav\"",[37,64528,51643],{"class":50},[37,64530,64531,64533,64535,64538,64540],{"class":39,"line":17077},[37,64532,55570],{"class":50},[37,64534,498],{"class":51636},[37,64536,64537],{"class":50},">每日特价\u003C\u002F",[37,64539,498],{"class":51636},[37,64541,51643],{"class":50},[37,64543,64544,64546,64548],{"class":39,"line":17099},[37,64545,55570],{"class":50},[37,64547,1515],{"class":51636},[37,64549,51643],{"class":50},[37,64551,64552,64554,64556,64558,64560,64562,64564,64566,64568,64570,64573,64576,64578,64580,64582],{"class":39,"line":17104},[37,64553,55638],{"class":50},[37,64555,484],{"class":51636},[37,64557,61388],{"class":50},[37,64559,51],{"class":51636},[37,64561,53822],{"class":2320},[37,64563,55],{"class":50},[37,64565,60042],{"class":185},[37,64567,61393],{"class":2320},[37,64569,55],{"class":50},[37,64571,64572],{"class":185},"\"javascript:;\"",[37,64574,64575],{"class":50},">精选\u003C\u002F",[37,64577,51],{"class":51636},[37,64579,55650],{"class":50},[37,64581,484],{"class":51636},[37,64583,51643],{"class":50},[37,64585,64586,64588,64590,64592,64594,64596,64598,64600,64603,64605,64607,64609],{"class":39,"line":17110},[37,64587,55638],{"class":50},[37,64589,484],{"class":51636},[37,64591,61388],{"class":50},[37,64593,51],{"class":51636},[37,64595,61393],{"class":2320},[37,64597,55],{"class":50},[37,64599,64572],{"class":185},[37,64601,64602],{"class":50},">美食\u003C\u002F",[37,64604,51],{"class":51636},[37,64606,55650],{"class":50},[37,64608,484],{"class":51636},[37,64610,51643],{"class":50},[37,64612,64613,64615,64617,64619,64621,64623,64625,64627,64630,64632,64634,64636],{"class":39,"line":17124},[37,64614,55638],{"class":50},[37,64616,484],{"class":51636},[37,64618,61388],{"class":50},[37,64620,51],{"class":51636},[37,64622,61393],{"class":2320},[37,64624,55],{"class":50},[37,64626,64572],{"class":185},[37,64628,64629],{"class":50},">百货\u003C\u002F",[37,64631,51],{"class":51636},[37,64633,55650],{"class":50},[37,64635,484],{"class":51636},[37,64637,51643],{"class":50},[37,64639,64640,64642,64644,64646,64648,64650,64652,64654,64657,64659,64661,64663],{"class":39,"line":17137},[37,64641,55638],{"class":50},[37,64643,484],{"class":51636},[37,64645,61388],{"class":50},[37,64647,51],{"class":51636},[37,64649,61393],{"class":2320},[37,64651,55],{"class":50},[37,64653,64572],{"class":185},[37,64655,64656],{"class":50},">个护\u003C\u002F",[37,64658,51],{"class":51636},[37,64660,55650],{"class":50},[37,64662,484],{"class":51636},[37,64664,51643],{"class":50},[37,64666,64667,64669,64671,64673,64675,64677,64679,64681,64684,64686,64688,64690],{"class":39,"line":17142},[37,64668,55638],{"class":50},[37,64670,484],{"class":51636},[37,64672,61388],{"class":50},[37,64674,51],{"class":51636},[37,64676,61393],{"class":2320},[37,64678,55],{"class":50},[37,64680,64572],{"class":185},[37,64682,64683],{"class":50},">预告\u003C\u002F",[37,64685,51],{"class":51636},[37,64687,55650],{"class":50},[37,64689,484],{"class":51636},[37,64691,51643],{"class":50},[37,64693,64694,64696,64698],{"class":39,"line":17156},[37,64695,55743],{"class":50},[37,64697,1515],{"class":51636},[37,64699,51643],{"class":50},[37,64701,64702,64704,64706],{"class":39,"line":17161},[37,64703,52112],{"class":50},[37,64705,51947],{"class":51636},[37,64707,51643],{"class":50},[37,64709,64710,64712,64714,64716,64718,64721],{"class":39,"line":17167},[37,64711,51677],{"class":50},[37,64713,51947],{"class":51636},[37,64715,53822],{"class":2320},[37,64717,55],{"class":50},[37,64719,64720],{"class":185},"\"tab-content\"",[37,64722,51643],{"class":50},[37,64724,64725,64727,64729,64731,64733,64736,64738,64740,64742,64744,64747,64749,64751,64753,64756,64758],{"class":39,"line":17172},[37,64726,55570],{"class":50},[37,64728,51947],{"class":51636},[37,64730,53822],{"class":2320},[37,64732,55],{"class":50},[37,64734,64735],{"class":185},"\"item active\"",[37,64737,61388],{"class":50},[37,64739,1838],{"class":51636},[37,64741,55575],{"class":2320},[37,64743,55],{"class":50},[37,64745,64746],{"class":185},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[37,64748,55583],{"class":2320},[37,64750,55],{"class":50},[37,64752,8000],{"class":185},[37,64754,64755],{"class":50}," \u002F>\u003C\u002F",[37,64757,51947],{"class":51636},[37,64759,51643],{"class":50},[37,64761,64762,64764,64766,64768,64770,64772,64774,64776,64778,64780,64783,64785,64787,64789,64791,64793],{"class":39,"line":17186},[37,64763,55570],{"class":50},[37,64765,51947],{"class":51636},[37,64767,53822],{"class":2320},[37,64769,55],{"class":50},[37,64771,62959],{"class":185},[37,64773,61388],{"class":50},[37,64775,1838],{"class":51636},[37,64777,55575],{"class":2320},[37,64779,55],{"class":50},[37,64781,64782],{"class":185},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[37,64784,55583],{"class":2320},[37,64786,55],{"class":50},[37,64788,8000],{"class":185},[37,64790,64755],{"class":50},[37,64792,51947],{"class":51636},[37,64794,51643],{"class":50},[37,64796,64797,64799,64801,64803,64805,64807,64809,64811,64813,64815,64818,64820,64822,64824,64826,64828],{"class":39,"line":17191},[37,64798,55570],{"class":50},[37,64800,51947],{"class":51636},[37,64802,53822],{"class":2320},[37,64804,55],{"class":50},[37,64806,62959],{"class":185},[37,64808,61388],{"class":50},[37,64810,1838],{"class":51636},[37,64812,55575],{"class":2320},[37,64814,55],{"class":50},[37,64816,64817],{"class":185},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[37,64819,55583],{"class":2320},[37,64821,55],{"class":50},[37,64823,8000],{"class":185},[37,64825,64755],{"class":50},[37,64827,51947],{"class":51636},[37,64829,51643],{"class":50},[37,64831,64832,64834,64836,64838,64840,64842,64844,64846,64848,64850,64853,64855,64857,64859,64861,64863],{"class":39,"line":17196},[37,64833,55570],{"class":50},[37,64835,51947],{"class":51636},[37,64837,53822],{"class":2320},[37,64839,55],{"class":50},[37,64841,62959],{"class":185},[37,64843,61388],{"class":50},[37,64845,1838],{"class":51636},[37,64847,55575],{"class":2320},[37,64849,55],{"class":50},[37,64851,64852],{"class":185},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[37,64854,55583],{"class":2320},[37,64856,55],{"class":50},[37,64858,8000],{"class":185},[37,64860,64755],{"class":50},[37,64862,51947],{"class":51636},[37,64864,51643],{"class":50},[37,64866,64867,64869,64871,64873,64875,64877,64879,64881,64883,64885,64888,64890,64892,64894,64896,64898],{"class":39,"line":17210},[37,64868,55570],{"class":50},[37,64870,51947],{"class":51636},[37,64872,53822],{"class":2320},[37,64874,55],{"class":50},[37,64876,62959],{"class":185},[37,64878,61388],{"class":50},[37,64880,1838],{"class":51636},[37,64882,55575],{"class":2320},[37,64884,55],{"class":50},[37,64886,64887],{"class":185},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[37,64889,55583],{"class":2320},[37,64891,55],{"class":50},[37,64893,8000],{"class":185},[37,64895,64755],{"class":50},[37,64897,51947],{"class":51636},[37,64899,51643],{"class":50},[37,64901,64902,64904,64906],{"class":39,"line":17222},[37,64903,52112],{"class":50},[37,64905,51947],{"class":51636},[37,64907,51643],{"class":50},[37,64909,64910,64912,64914],{"class":39,"line":17227},[37,64911,52753],{"class":50},[37,64913,51947],{"class":51636},[37,64915,51643],{"class":50},[37,64917,64918,64920,64922],{"class":39,"line":17240},[37,64919,52480],{"class":50},[37,64921,52149],{"class":51636},[37,64923,51643],{"class":50},[37,64925,64926],{"class":39,"line":17245},[37,64927,64928],{"class":43},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[37,64930,64931],{"class":39,"line":17250},[37,64932,64933],{"class":43},"    \u002F\u002F 1.1 获取 a 元素 \n",[37,64935,64936,64938,64941,64943,64945,64947,64949,64952],{"class":39,"line":17255},[37,64937,11562],{"class":54},[37,64939,64940],{"class":61}," as",[37,64942,13905],{"class":54},[37,64944,54732],{"class":50},[37,64946,56017],{"class":2320},[37,64948,165],{"class":50},[37,64950,64951],{"class":185},"'.tab-nav a'",[37,64953,280],{"class":50},[37,64955,64956],{"class":39,"line":17268},[37,64957,64958],{"class":43},"    \u002F\u002F console.log(as) \n",[37,64960,64961,64963,64965,64967,64969,64971,64973,64975,64977,64980,64982,64984,64986],{"class":39,"line":17273},[37,64962,3551],{"class":54},[37,64964,2027],{"class":50},[37,64966,52183],{"class":54},[37,64968,9779],{"class":50},[37,64970,55],{"class":54},[37,64972,4443],{"class":61},[37,64974,9786],{"class":50},[37,64976,1418],{"class":54},[37,64978,64979],{"class":50}," as.",[37,64981,52304],{"class":61},[37,64983,3564],{"class":50},[37,64985,2649],{"class":54},[37,64987,12783],{"class":50},[37,64989,64990],{"class":39,"line":32971},[37,64991,64992],{"class":43},"      \u002F\u002F console.log(as[i])\n",[37,64994,64995],{"class":39,"line":32977},[37,64996,64997],{"class":43},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[37,64999,65000,65003,65005,65007,65010,65012,65014],{"class":39,"line":32983},[37,65001,65002],{"class":50},"      as[i].",[37,65004,58149],{"class":2320},[37,65006,165],{"class":50},[37,65008,65009],{"class":185},"'mouseenter'",[37,65011,12776],{"class":50},[37,65013,54785],{"class":54},[37,65015,54788],{"class":50},[37,65017,65018],{"class":39,"line":32989},[37,65019,65020],{"class":43},"        \u002F\u002F console.log('鼠标经过')\n",[37,65022,65023],{"class":39,"line":32995},[37,65024,65025],{"class":43},"        \u002F\u002F 排他思想  \n",[37,65027,65028],{"class":39,"line":33006},[37,65029,65030],{"class":43},"        \u002F\u002F 干掉别人 移除类active\n",[37,65032,65033,65035,65037,65039,65042,65044,65046,65048,65051],{"class":39,"line":33012},[37,65034,52261],{"class":50},[37,65036,54735],{"class":2320},[37,65038,165],{"class":50},[37,65040,65041],{"class":185},"'.tab-nav .active'",[37,65043,57339],{"class":50},[37,65045,57342],{"class":2320},[37,65047,165],{"class":50},[37,65049,65050],{"class":185},"'active'",[37,65052,280],{"class":50},[37,65054,65055],{"class":39,"line":33032},[37,65056,65057],{"class":43},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[37,65059,65060,65063,65066,65068,65070,65072],{"class":39,"line":33038},[37,65061,65062],{"class":61},"        this",[37,65064,65065],{"class":50},".classList.",[37,65067,5682],{"class":2320},[37,65069,165],{"class":50},[37,65071,65050],{"class":185},[37,65073,280],{"class":50},[37,65075,65076],{"class":39,"line":33049},[37,65077,2757],{"emptyLinePlaceholder":454},[37,65079,65080],{"class":39,"line":33055},[37,65081,65082],{"class":43},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[37,65084,65085],{"class":39,"line":33061},[37,65086,65087],{"class":43},"        \u002F\u002F 干掉别人\n",[37,65089,65090,65092,65094,65096,65099,65101,65103,65105,65107],{"class":39,"line":33067},[37,65091,52261],{"class":50},[37,65093,54735],{"class":2320},[37,65095,165],{"class":50},[37,65097,65098],{"class":185},"'.tab-content .active'",[37,65100,57339],{"class":50},[37,65102,57342],{"class":2320},[37,65104,165],{"class":50},[37,65106,65050],{"class":185},[37,65108,280],{"class":50},[37,65110,65111],{"class":39,"line":33073},[37,65112,65113],{"class":43},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[37,65115,65116,65118,65120,65122,65125,65127,65129,65131,65133,65135,65137,65139,65141],{"class":39,"line":33079},[37,65117,52261],{"class":50},[37,65119,54735],{"class":2320},[37,65121,165],{"class":50},[37,65123,65124],{"class":185},"`.tab-content .item:nth-child(${",[37,65126,954],{"class":50},[37,65128,45903],{"class":54},[37,65130,25460],{"class":61},[37,65132,57368],{"class":185},[37,65134,57339],{"class":50},[37,65136,5682],{"class":2320},[37,65138,165],{"class":50},[37,65140,65050],{"class":185},[37,65142,280],{"class":50},[37,65144,65145],{"class":39,"line":33085},[37,65146,2757],{"emptyLinePlaceholder":454},[37,65148,65149],{"class":39,"line":33091},[37,65150,65151],{"class":50},"      })\n",[37,65153,65154],{"class":39,"line":33111},[37,65155,2544],{"class":50},[37,65157,65158,65160,65162],{"class":39,"line":33117},[37,65159,52753],{"class":50},[37,65161,52149],{"class":51636},[37,65163,51643],{"class":50},[37,65165,65166,65168,65170],{"class":39,"line":33133},[37,65167,52121],{"class":50},[37,65169,52136],{"class":51636},[37,65171,51643],{"class":50},[37,65173,65174],{"class":39,"line":33139},[37,65175,2757],{"emptyLinePlaceholder":454},[37,65177,65178,65180,65182],{"class":39,"line":33153},[37,65179,52121],{"class":50},[37,65181,50971],{"class":51636},[37,65183,51643],{"class":50},[14,65185,65186],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,65188,65189],{},"在监听事件中，this指向的就是他的调用者",[14,65191,65192],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,65194,54056],{},[14,65196,65197],{},"(function () {",[14,65199,65200],{},"const list = document.querySelector('.xtx-elevator-list')",[14,65202,65203],{},"list.addEventListener('click', function (e) {",[14,65205,65206],{},"if (e.target.tagName === 'A') {",[14,65208,65209],{},"\u002F\u002F 排他思想",[14,65211,65212],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,65214,65215],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,65217,65218],{},"\u002F\u002F console.log(old);",[14,65220,65221],{},"\u002F\u002F 判断",[14,65223,65224],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,65226,65227],{},"if (old) old.classList.remove('active')",[14,65229,65230],{},"e.target.classList.add('active')",[14,65232,1454],{},[14,65234,52800],{},[14,65236,65237],{},"})();",[498,65239,65241],{"id":65240},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[27,65243,65245],{"className":50969,"code":65244,"language":50971,"meta":32,"style":32},"\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",[34,65246,65247,65257,65261,65269,65273,65287,65301,65313,65321,65327,65337,65347,65351,65355,65362,65374,65385,65402,65415,65429,65439,65443,65447,65454,65465,65483,65493,65505,65509,65513,65520,65537,65548,65560,65564,65568,65575,65587,65591,65599,65607,65611,65619,65627,65635,65650,65694,65702,65715,65728,65741,65749,65757,65765,65793,65801,65813,65826,65839,65847,65855,65863,65889,65897,65910,65922,65935,65943,65951,65959,65985,65993,66006,66018,66031,66039,66047,66055,66060,66080,66085,66105,66110,66127,66132,66140,66145,66174,66187,66191,66195,66200,66204,66232,66237,66254,66259,66264,66269,66274,66300,66304,66308,66316,66324,66328],{"__ignoreMap":32},[37,65248,65249,65251,65253,65255],{"class":39,"line":40},[37,65250,51633],{"class":50},[37,65252,51637],{"class":51636},[37,65254,51640],{"class":2320},[37,65256,51643],{"class":50},[37,65258,65259],{"class":39,"line":47},[37,65260,2757],{"emptyLinePlaceholder":454},[37,65262,65263,65265,65267],{"class":39,"line":104},[37,65264,1418],{"class":50},[37,65266,50971],{"class":51636},[37,65268,51643],{"class":50},[37,65270,65271],{"class":39,"line":113},[37,65272,2757],{"emptyLinePlaceholder":454},[37,65274,65275,65277,65279,65281,65283,65285],{"class":39,"line":189},[37,65276,1418],{"class":50},[37,65278,51670],{"class":51636},[37,65280,51652],{"class":2320},[37,65282,55],{"class":50},[37,65284,51657],{"class":185},[37,65286,51643],{"class":50},[37,65288,65289,65291,65293,65295,65297,65299],{"class":39,"line":195},[37,65290,52480],{"class":50},[37,65292,51680],{"class":51636},[37,65294,51683],{"class":2320},[37,65296,55],{"class":50},[37,65298,51688],{"class":185},[37,65300,51643],{"class":50},[37,65302,65303,65305,65307,65309,65311],{"class":39,"line":201},[37,65304,52480],{"class":50},[37,65306,51743],{"class":51636},[37,65308,55650],{"class":50},[37,65310,51743],{"class":51636},[37,65312,51643],{"class":50},[37,65314,65315,65317,65319],{"class":39,"line":207},[37,65316,52480],{"class":50},[37,65318,446],{"class":51636},[37,65320,51643],{"class":50},[37,65322,65323,65325],{"class":39,"line":213},[37,65324,6751],{"class":51636},[37,65326,15913],{"class":50},[37,65328,65329,65331,65333,65335],{"class":39,"line":218},[37,65330,55042],{"class":61},[37,65332,51773],{"class":50},[37,65334,135],{"class":61},[37,65336,1669],{"class":50},[37,65338,65339,65341,65343,65345],{"class":39,"line":227},[37,65340,55031],{"class":61},[37,65342,51773],{"class":50},[37,65344,135],{"class":61},[37,65346,1669],{"class":50},[37,65348,65349],{"class":39,"line":232},[37,65350,2544],{"class":50},[37,65352,65353],{"class":39,"line":238},[37,65354,2757],{"emptyLinePlaceholder":454},[37,65356,65357,65360],{"class":39,"line":244},[37,65358,65359],{"class":51636},"    table",[37,65361,15913],{"class":50},[37,65363,65364,65367,65369,65372],{"class":39,"line":250},[37,65365,65366],{"class":61},"      border-collapse",[37,65368,51773],{"class":50},[37,65370,65371],{"class":61},"collapse",[37,65373,1669],{"class":50},[37,65375,65376,65379,65381,65383],{"class":39,"line":256},[37,65377,65378],{"class":61},"      border-spacing",[37,65380,51773],{"class":50},[37,65382,135],{"class":61},[37,65384,1669],{"class":50},[37,65386,65387,65389,65391,65393,65395,65397,65400],{"class":39,"line":261},[37,65388,62313],{"class":61},[37,65390,51773],{"class":50},[37,65392,332],{"class":61},[37,65394,51828],{"class":54},[37,65396,51857],{"class":61},[37,65398,65399],{"class":61}," #c0c0c0",[37,65401,1669],{"class":50},[37,65403,65404,65406,65408,65411,65413],{"class":39,"line":267},[37,65405,55107],{"class":61},[37,65407,51773],{"class":50},[37,65409,65410],{"class":61},"500",[37,65412,51828],{"class":54},[37,65414,1669],{"class":50},[37,65416,65417,65419,65421,65423,65425,65427],{"class":39,"line":283},[37,65418,55042],{"class":61},[37,65420,51773],{"class":50},[37,65422,154],{"class":61},[37,65424,51828],{"class":54},[37,65426,51892],{"class":61},[37,65428,1669],{"class":50},[37,65430,65431,65433,65435,65437],{"class":39,"line":288},[37,65432,57622],{"class":61},[37,65434,51773],{"class":50},[37,65436,51928],{"class":61},[37,65438,1669],{"class":50},[37,65440,65441],{"class":39,"line":294},[37,65442,2544],{"class":50},[37,65444,65445],{"class":39,"line":300},[37,65446,2757],{"emptyLinePlaceholder":454},[37,65448,65449,65452],{"class":39,"line":306},[37,65450,65451],{"class":51636},"    th",[37,65453,15913],{"class":50},[37,65455,65456,65458,65460,65463],{"class":39,"line":312},[37,65457,55220],{"class":61},[37,65459,51773],{"class":50},[37,65461,65462],{"class":61},"#09c",[37,65464,1669],{"class":50},[37,65466,65467,65470,65472,65474,65476,65478,65481],{"class":39,"line":317},[37,65468,65469],{"class":61},"      font",[37,65471,51773],{"class":50},[37,65473,62675],{"class":61},[37,65475,64409],{"class":61},[37,65477,51828],{"class":54},[37,65479,65480],{"class":185}," \"微软雅黑\"",[37,65482,1669],{"class":50},[37,65484,65485,65487,65489,65491],{"class":39,"line":323},[37,65486,57752],{"class":61},[37,65488,51773],{"class":50},[37,65490,61178],{"class":61},[37,65492,1669],{"class":50},[37,65494,65495,65497,65499,65501,65503],{"class":39,"line":337},[37,65496,55121],{"class":61},[37,65498,51773],{"class":50},[37,65500,1309],{"class":61},[37,65502,51828],{"class":54},[37,65504,1669],{"class":50},[37,65506,65507],{"class":39,"line":342},[37,65508,2544],{"class":50},[37,65510,65511],{"class":39,"line":347},[37,65512,2757],{"emptyLinePlaceholder":454},[37,65514,65515,65518],{"class":39,"line":352},[37,65516,65517],{"class":51636},"    td",[37,65519,15913],{"class":50},[37,65521,65522,65524,65526,65528,65530,65532,65535],{"class":39,"line":357},[37,65523,62313],{"class":61},[37,65525,51773],{"class":50},[37,65527,332],{"class":61},[37,65529,51828],{"class":54},[37,65531,51857],{"class":61},[37,65533,65534],{"class":61}," #d0d0d0",[37,65536,1669],{"class":50},[37,65538,65539,65541,65543,65546],{"class":39,"line":362},[37,65540,57752],{"class":61},[37,65542,51773],{"class":50},[37,65544,65545],{"class":61},"#404060",[37,65547,1669],{"class":50},[37,65549,65550,65552,65554,65556,65558],{"class":39,"line":367},[37,65551,55031],{"class":61},[37,65553,51773],{"class":50},[37,65555,98],{"class":61},[37,65557,51828],{"class":54},[37,65559,1669],{"class":50},[37,65561,65562],{"class":39,"line":373},[37,65563,2544],{"class":50},[37,65565,65566],{"class":39,"line":392},[37,65567,2757],{"emptyLinePlaceholder":454},[37,65569,65570,65573],{"class":39,"line":398},[37,65571,65572],{"class":2320},"    .allCheck",[37,65574,15913],{"class":50},[37,65576,65577,65579,65581,65583,65585],{"class":39,"line":409},[37,65578,55107],{"class":61},[37,65580,51773],{"class":50},[37,65582,1122],{"class":61},[37,65584,51828],{"class":54},[37,65586,1669],{"class":50},[37,65588,65589],{"class":39,"line":415},[37,65590,2544],{"class":50},[37,65592,65593,65595,65597],{"class":39,"line":420},[37,65594,52753],{"class":50},[37,65596,446],{"class":51636},[37,65598,51643],{"class":50},[37,65600,65601,65603,65605],{"class":39,"line":425},[37,65602,52121],{"class":50},[37,65604,51670],{"class":51636},[37,65606,51643],{"class":50},[37,65608,65609],{"class":39,"line":431},[37,65610,2757],{"emptyLinePlaceholder":454},[37,65612,65613,65615,65617],{"class":39,"line":436},[37,65614,1418],{"class":50},[37,65616,52136],{"class":51636},[37,65618,51643],{"class":50},[37,65620,65621,65623,65625],{"class":39,"line":442},[37,65622,52480],{"class":50},[37,65624,661],{"class":51636},[37,65626,51643],{"class":50},[37,65628,65629,65631,65633],{"class":39,"line":8374},[37,65630,51677],{"class":50},[37,65632,667],{"class":51636},[37,65634,51643],{"class":50},[37,65636,65637,65639,65641,65643,65645,65648],{"class":39,"line":8386},[37,65638,55570],{"class":50},[37,65640,670],{"class":51636},[37,65642,53822],{"class":2320},[37,65644,55],{"class":50},[37,65646,65647],{"class":185},"\"allCheck\"",[37,65649,51643],{"class":50},[37,65651,65652,65654,65656,65658,65660,65662,65664,65666,65668,65670,65672,65675,65678,65680,65682,65684,65687,65690,65692],{"class":39,"line":8398},[37,65653,55638],{"class":50},[37,65655,54157],{"class":51636},[37,65657,54160],{"class":2320},[37,65659,55],{"class":50},[37,65661,54165],{"class":185},[37,65663,15261],{"class":2320},[37,65665,55],{"class":50},[37,65667,8000],{"class":185},[37,65669,15300],{"class":2320},[37,65671,55],{"class":50},[37,65673,65674],{"class":185},"\"checkAll\"",[37,65676,65677],{"class":50},"> \u003C",[37,65679,37],{"class":51636},[37,65681,53822],{"class":2320},[37,65683,55],{"class":50},[37,65685,65686],{"class":185},"\"all\"",[37,65688,65689],{"class":50},">全选\u003C\u002F",[37,65691,37],{"class":51636},[37,65693,51643],{"class":50},[37,65695,65696,65698,65700],{"class":39,"line":10057},[37,65697,55743],{"class":50},[37,65699,670],{"class":51636},[37,65701,51643],{"class":50},[37,65703,65704,65706,65708,65711,65713],{"class":39,"line":10082},[37,65705,55570],{"class":50},[37,65707,670],{"class":51636},[37,65709,65710],{"class":50},">商品\u003C\u002F",[37,65712,670],{"class":51636},[37,65714,51643],{"class":50},[37,65716,65717,65719,65721,65724,65726],{"class":39,"line":10105},[37,65718,55570],{"class":50},[37,65720,670],{"class":51636},[37,65722,65723],{"class":50},">商家\u003C\u002F",[37,65725,670],{"class":51636},[37,65727,51643],{"class":50},[37,65729,65730,65732,65734,65737,65739],{"class":39,"line":10129},[37,65731,55570],{"class":50},[37,65733,670],{"class":51636},[37,65735,65736],{"class":50},">价格\u003C\u002F",[37,65738,670],{"class":51636},[37,65740,51643],{"class":50},[37,65742,65743,65745,65747],{"class":39,"line":10134},[37,65744,52112],{"class":50},[37,65746,667],{"class":51636},[37,65748,51643],{"class":50},[37,65750,65751,65753,65755],{"class":39,"line":10139},[37,65752,51677],{"class":50},[37,65754,667],{"class":51636},[37,65756,51643],{"class":50},[37,65758,65759,65761,65763],{"class":39,"line":10144},[37,65760,55570],{"class":50},[37,65762,713],{"class":51636},[37,65764,51643],{"class":50},[37,65766,65767,65769,65771,65773,65775,65777,65779,65781,65784,65786,65788,65791],{"class":39,"line":10153},[37,65768,55638],{"class":50},[37,65770,54157],{"class":51636},[37,65772,54160],{"class":2320},[37,65774,55],{"class":50},[37,65776,54165],{"class":185},[37,65778,15261],{"class":2320},[37,65780,55],{"class":50},[37,65782,65783],{"class":185},"\"check\"",[37,65785,53822],{"class":2320},[37,65787,55],{"class":50},[37,65789,65790],{"class":185},"\"ck\"",[37,65792,51643],{"class":50},[37,65794,65795,65797,65799],{"class":39,"line":10158},[37,65796,55743],{"class":50},[37,65798,713],{"class":51636},[37,65800,51643],{"class":50},[37,65802,65803,65805,65807,65809,65811],{"class":39,"line":10164},[37,65804,55570],{"class":50},[37,65806,713],{"class":51636},[37,65808,61509],{"class":50},[37,65810,713],{"class":51636},[37,65812,51643],{"class":50},[37,65814,65815,65817,65819,65822,65824],{"class":39,"line":10185},[37,65816,55570],{"class":50},[37,65818,713],{"class":51636},[37,65820,65821],{"class":50},">小米\u003C\u002F",[37,65823,713],{"class":51636},[37,65825,51643],{"class":50},[37,65827,65828,65830,65832,65835,65837],{"class":39,"line":10191},[37,65829,55570],{"class":50},[37,65831,713],{"class":51636},[37,65833,65834],{"class":50},">￥1999\u003C\u002F",[37,65836,713],{"class":51636},[37,65838,51643],{"class":50},[37,65840,65841,65843,65845],{"class":39,"line":10205},[37,65842,52112],{"class":50},[37,65844,667],{"class":51636},[37,65846,51643],{"class":50},[37,65848,65849,65851,65853],{"class":39,"line":10211},[37,65850,51677],{"class":50},[37,65852,667],{"class":51636},[37,65854,51643],{"class":50},[37,65856,65857,65859,65861],{"class":39,"line":10238},[37,65858,55570],{"class":50},[37,65860,713],{"class":51636},[37,65862,51643],{"class":50},[37,65864,65865,65867,65869,65871,65873,65875,65877,65879,65881,65883,65885,65887],{"class":39,"line":10247},[37,65866,55638],{"class":50},[37,65868,54157],{"class":51636},[37,65870,54160],{"class":2320},[37,65872,55],{"class":50},[37,65874,54165],{"class":185},[37,65876,15261],{"class":2320},[37,65878,55],{"class":50},[37,65880,65783],{"class":185},[37,65882,53822],{"class":2320},[37,65884,55],{"class":50},[37,65886,65790],{"class":185},[37,65888,51643],{"class":50},[37,65890,65891,65893,65895],{"class":39,"line":10253},[37,65892,55743],{"class":50},[37,65894,713],{"class":51636},[37,65896,51643],{"class":50},[37,65898,65899,65901,65903,65906,65908],{"class":39,"line":10261},[37,65900,55570],{"class":50},[37,65902,713],{"class":51636},[37,65904,65905],{"class":50},">小米净水器\u003C\u002F",[37,65907,713],{"class":51636},[37,65909,51643],{"class":50},[37,65911,65912,65914,65916,65918,65920],{"class":39,"line":10266},[37,65913,55570],{"class":50},[37,65915,713],{"class":51636},[37,65917,65821],{"class":50},[37,65919,713],{"class":51636},[37,65921,51643],{"class":50},[37,65923,65924,65926,65928,65931,65933],{"class":39,"line":16945},[37,65925,55570],{"class":50},[37,65927,713],{"class":51636},[37,65929,65930],{"class":50},">￥4999\u003C\u002F",[37,65932,713],{"class":51636},[37,65934,51643],{"class":50},[37,65936,65937,65939,65941],{"class":39,"line":16951},[37,65938,52112],{"class":50},[37,65940,667],{"class":51636},[37,65942,51643],{"class":50},[37,65944,65945,65947,65949],{"class":39,"line":16974},[37,65946,51677],{"class":50},[37,65948,667],{"class":51636},[37,65950,51643],{"class":50},[37,65952,65953,65955,65957],{"class":39,"line":16980},[37,65954,55570],{"class":50},[37,65956,713],{"class":51636},[37,65958,51643],{"class":50},[37,65960,65961,65963,65965,65967,65969,65971,65973,65975,65977,65979,65981,65983],{"class":39,"line":17003},[37,65962,55638],{"class":50},[37,65964,54157],{"class":51636},[37,65966,54160],{"class":2320},[37,65968,55],{"class":50},[37,65970,54165],{"class":185},[37,65972,15261],{"class":2320},[37,65974,55],{"class":50},[37,65976,65783],{"class":185},[37,65978,53822],{"class":2320},[37,65980,55],{"class":50},[37,65982,65790],{"class":185},[37,65984,51643],{"class":50},[37,65986,65987,65989,65991],{"class":39,"line":17017},[37,65988,55743],{"class":50},[37,65990,713],{"class":51636},[37,65992,51643],{"class":50},[37,65994,65995,65997,65999,66002,66004],{"class":39,"line":17037},[37,65996,55570],{"class":50},[37,65998,713],{"class":51636},[37,66000,66001],{"class":50},">小米电视\u003C\u002F",[37,66003,713],{"class":51636},[37,66005,51643],{"class":50},[37,66007,66008,66010,66012,66014,66016],{"class":39,"line":17043},[37,66009,55570],{"class":50},[37,66011,713],{"class":51636},[37,66013,65821],{"class":50},[37,66015,713],{"class":51636},[37,66017,51643],{"class":50},[37,66019,66020,66022,66024,66027,66029],{"class":39,"line":17054},[37,66021,55570],{"class":50},[37,66023,713],{"class":51636},[37,66025,66026],{"class":50},">￥5999\u003C\u002F",[37,66028,713],{"class":51636},[37,66030,51643],{"class":50},[37,66032,66033,66035,66037],{"class":39,"line":17077},[37,66034,52112],{"class":50},[37,66036,667],{"class":51636},[37,66038,51643],{"class":50},[37,66040,66041,66043,66045],{"class":39,"line":17099},[37,66042,52753],{"class":50},[37,66044,661],{"class":51636},[37,66046,51643],{"class":50},[37,66048,66049,66051,66053],{"class":39,"line":17104},[37,66050,52480],{"class":50},[37,66052,52149],{"class":51636},[37,66054,51643],{"class":50},[37,66056,66057],{"class":39,"line":17110},[37,66058,66059],{"class":43},"    \u002F\u002F 1. 获取大复选框\n",[37,66061,66062,66064,66067,66069,66071,66073,66075,66078],{"class":39,"line":17124},[37,66063,11562],{"class":54},[37,66065,66066],{"class":61}," checkAll",[37,66068,13905],{"class":54},[37,66070,54732],{"class":50},[37,66072,54735],{"class":2320},[37,66074,165],{"class":50},[37,66076,66077],{"class":185},"'#checkAll'",[37,66079,280],{"class":50},[37,66081,66082],{"class":39,"line":17137},[37,66083,66084],{"class":43},"    \u002F\u002F 2. 获取所有的小复选框\n",[37,66086,66087,66089,66092,66094,66096,66098,66100,66103],{"class":39,"line":17142},[37,66088,11562],{"class":54},[37,66090,66091],{"class":61}," cks",[37,66093,13905],{"class":54},[37,66095,54732],{"class":50},[37,66097,56017],{"class":2320},[37,66099,165],{"class":50},[37,66101,66102],{"class":185},"'.ck'",[37,66104,280],{"class":50},[37,66106,66107],{"class":39,"line":17156},[37,66108,66109],{"class":43},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[37,66111,66112,66115,66117,66119,66121,66123,66125],{"class":39,"line":17161},[37,66113,66114],{"class":50},"    checkAll.",[37,66116,58149],{"class":2320},[37,66118,165],{"class":50},[37,66120,58154],{"class":185},[37,66122,12776],{"class":50},[37,66124,54785],{"class":54},[37,66126,54788],{"class":50},[37,66128,66129],{"class":39,"line":17167},[37,66130,66131],{"class":43},"      \u002F\u002F 得到当前大复选框的选中状态\n",[37,66133,66134,66137],{"class":39,"line":17172},[37,66135,66136],{"class":43},"      \u002F\u002F console.log(checkAll.checked)",[37,66138,66139],{"class":43},"  \u002F\u002F 得到 是 true 或者是 false\n",[37,66141,66142],{"class":39,"line":17186},[37,66143,66144],{"class":43},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[37,66146,66147,66149,66151,66153,66155,66157,66159,66161,66163,66166,66168,66170,66172],{"class":39,"line":17191},[37,66148,52620],{"class":54},[37,66150,2027],{"class":50},[37,66152,52183],{"class":54},[37,66154,9779],{"class":50},[37,66156,55],{"class":54},[37,66158,4443],{"class":61},[37,66160,9786],{"class":50},[37,66162,1418],{"class":54},[37,66164,66165],{"class":50}," cks.",[37,66167,52304],{"class":61},[37,66169,3564],{"class":50},[37,66171,2649],{"class":54},[37,66173,12783],{"class":50},[37,66175,66176,66179,66181,66184],{"class":39,"line":17196},[37,66177,66178],{"class":50},"        cks[i].checked ",[37,66180,55],{"class":54},[37,66182,66183],{"class":61}," this",[37,66185,66186],{"class":50},".checked\n",[37,66188,66189],{"class":39,"line":17210},[37,66190,52734],{"class":50},[37,66192,66193],{"class":39,"line":17222},[37,66194,33798],{"class":50},[37,66196,66197],{"class":39,"line":17227},[37,66198,66199],{"class":43},"    \u002F\u002F 5. 小复选框控制大复选框\n",[37,66201,66202],{"class":39,"line":17240},[37,66203,2757],{"emptyLinePlaceholder":454},[37,66205,66206,66208,66210,66212,66214,66216,66218,66220,66222,66224,66226,66228,66230],{"class":39,"line":17245},[37,66207,3551],{"class":54},[37,66209,2027],{"class":50},[37,66211,52183],{"class":54},[37,66213,9779],{"class":50},[37,66215,55],{"class":54},[37,66217,4443],{"class":61},[37,66219,9786],{"class":50},[37,66221,1418],{"class":54},[37,66223,66165],{"class":50},[37,66225,52304],{"class":61},[37,66227,3564],{"class":50},[37,66229,2649],{"class":54},[37,66231,12783],{"class":50},[37,66233,66234],{"class":39,"line":17250},[37,66235,66236],{"class":43},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[37,66238,66239,66242,66244,66246,66248,66250,66252],{"class":39,"line":17255},[37,66240,66241],{"class":50},"      cks[i].",[37,66243,58149],{"class":2320},[37,66245,165],{"class":50},[37,66247,58154],{"class":185},[37,66249,12776],{"class":50},[37,66251,54785],{"class":54},[37,66253,54788],{"class":50},[37,66255,66256],{"class":39,"line":17268},[37,66257,66258],{"class":43},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[37,66260,66261],{"class":39,"line":17273},[37,66262,66263],{"class":43},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[37,66265,66266],{"class":39,"line":32971},[37,66267,66268],{"class":43},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[37,66270,66271],{"class":39,"line":32977},[37,66272,66273],{"class":43},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[37,66275,66276,66279,66281,66283,66285,66287,66290,66292,66294,66296,66298],{"class":39,"line":32983},[37,66277,66278],{"class":50},"        checkAll.checked ",[37,66280,55],{"class":54},[37,66282,54732],{"class":50},[37,66284,56017],{"class":2320},[37,66286,165],{"class":50},[37,66288,66289],{"class":185},"'.ck:checked'",[37,66291,31165],{"class":50},[37,66293,52304],{"class":61},[37,66295,58242],{"class":54},[37,66297,66165],{"class":50},[37,66299,56167],{"class":61},[37,66301,66302],{"class":39,"line":32989},[37,66303,65151],{"class":50},[37,66305,66306],{"class":39,"line":32995},[37,66307,2544],{"class":50},[37,66309,66310,66312,66314],{"class":39,"line":33006},[37,66311,52753],{"class":50},[37,66313,52149],{"class":51636},[37,66315,51643],{"class":50},[37,66317,66318,66320,66322],{"class":39,"line":33012},[37,66319,52121],{"class":50},[37,66321,52136],{"class":51636},[37,66323,51643],{"class":50},[37,66325,66326],{"class":39,"line":33032},[37,66327,2757],{"emptyLinePlaceholder":454},[37,66329,66330,66332,66334],{"class":39,"line":33038},[37,66331,52121],{"class":50},[37,66333,50971],{"class":51636},[37,66335,51643],{"class":50},[14,66337,66338],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66340,66341],{},"用好之间比较得到的布尔值！！！",[14,66343,66344,66345,66348,66349,2027,66352,1094,66354,66357],{},"在 JS 里访问的时候，",[34,66346,66347],{},"checkbox.checked"," 是一个 ",[673,66350,66351],{},"布尔值",[34,66353,1738],{},[34,66355,66356],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66359,66360,66361,66364,66365],{},"HTML 的 ",[34,66362,66363],{},"checked=\"checked\""," 只是 ",[673,66366,66367,66368,66371],{},"初始值；JS 的 ",[34,66369,66370],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66373,66374],{},"：checked是一个伪类选择器",[14,66376,66377],{},[1838,66378],{"alt":32,"src":66379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66381,66382,66385],{},[66383,66384],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66387,66388],{},[1838,66389],{"alt":32,"src":66390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[469,66392,66394],{"id":66393},"_33-dom事件进阶","3.3 DOM事件进阶",[498,66396,66398],{"id":66397},"_331-事件流","3.3.1 事件流",[14,66400,66401],{},[1838,66402],{"alt":32,"src":66403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22339,66405,66407],{"id":66406},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66409,66410],{},[1838,66411],{"alt":32,"src":66412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[27,66414,66416],{"className":50969,"code":66415,"language":50971,"meta":32,"style":32},"\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",[34,66417,66418,66428,66442,66446,66454,66468,66488,66500,66508,66515,66527,66539,66549,66553,66557,66564,66576,66588,66598,66602,66610,66618,66622,66630,66645,66664,66672,66680,66700,66720,66736,66747,66755,66772,66783,66791,66808,66819,66827,66835,66843,66847],{"__ignoreMap":32},[37,66419,66420,66422,66424,66426],{"class":39,"line":40},[37,66421,51633],{"class":50},[37,66423,51637],{"class":51636},[37,66425,51640],{"class":2320},[37,66427,51643],{"class":50},[37,66429,66430,66432,66434,66436,66438,66440],{"class":39,"line":47},[37,66431,1418],{"class":50},[37,66433,50971],{"class":51636},[37,66435,51652],{"class":2320},[37,66437,55],{"class":50},[37,66439,51657],{"class":185},[37,66441,51643],{"class":50},[37,66443,66444],{"class":39,"line":104},[37,66445,2757],{"emptyLinePlaceholder":454},[37,66447,66448,66450,66452],{"class":39,"line":113},[37,66449,1418],{"class":50},[37,66451,51670],{"class":51636},[37,66453,51643],{"class":50},[37,66455,66456,66458,66460,66462,66464,66466],{"class":39,"line":189},[37,66457,52480],{"class":50},[37,66459,51680],{"class":51636},[37,66461,51683],{"class":2320},[37,66463,55],{"class":50},[37,66465,51688],{"class":185},[37,66467,51643],{"class":50},[37,66469,66470,66472,66474,66476,66478,66480,66482,66484,66486],{"class":39,"line":195},[37,66471,52480],{"class":50},[37,66473,51680],{"class":51636},[37,66475,15261],{"class":2320},[37,66477,55],{"class":50},[37,66479,51727],{"class":185},[37,66481,51707],{"class":2320},[37,66483,55],{"class":50},[37,66485,51734],{"class":185},[37,66487,51643],{"class":50},[37,66489,66490,66492,66494,66496,66498],{"class":39,"line":201},[37,66491,52480],{"class":50},[37,66493,51743],{"class":51636},[37,66495,51746],{"class":50},[37,66497,51743],{"class":51636},[37,66499,51643],{"class":50},[37,66501,66502,66504,66506],{"class":39,"line":207},[37,66503,52480],{"class":50},[37,66505,446],{"class":51636},[37,66507,51643],{"class":50},[37,66509,66510,66513],{"class":39,"line":213},[37,66511,66512],{"class":2320},"    .father",[37,66514,15913],{"class":50},[37,66516,66517,66519,66521,66523,66525],{"class":39,"line":218},[37,66518,55107],{"class":61},[37,66520,51773],{"class":50},[37,66522,65410],{"class":61},[37,66524,51828],{"class":54},[37,66526,1669],{"class":50},[37,66528,66529,66531,66533,66535,66537],{"class":39,"line":227},[37,66530,55121],{"class":61},[37,66532,51773],{"class":50},[37,66534,65410],{"class":61},[37,66536,51828],{"class":54},[37,66538,1669],{"class":50},[37,66540,66541,66543,66545,66547],{"class":39,"line":232},[37,66542,55220],{"class":61},[37,66544,51773],{"class":50},[37,66546,51981],{"class":61},[37,66548,1669],{"class":50},[37,66550,66551],{"class":39,"line":238},[37,66552,2544],{"class":50},[37,66554,66555],{"class":39,"line":244},[37,66556,2757],{"emptyLinePlaceholder":454},[37,66558,66559,66562],{"class":39,"line":250},[37,66560,66561],{"class":2320},"    .son",[37,66563,15913],{"class":50},[37,66565,66566,66568,66570,66572,66574],{"class":39,"line":256},[37,66567,55107],{"class":61},[37,66569,51773],{"class":50},[37,66571,2087],{"class":61},[37,66573,51828],{"class":54},[37,66575,1669],{"class":50},[37,66577,66578,66580,66582,66584,66586],{"class":39,"line":261},[37,66579,55121],{"class":61},[37,66581,51773],{"class":50},[37,66583,2087],{"class":61},[37,66585,51828],{"class":54},[37,66587,1669],{"class":50},[37,66589,66590,66592,66594,66596],{"class":39,"line":267},[37,66591,55220],{"class":61},[37,66593,51773],{"class":50},[37,66595,55225],{"class":61},[37,66597,1669],{"class":50},[37,66599,66600],{"class":39,"line":283},[37,66601,2544],{"class":50},[37,66603,66604,66606,66608],{"class":39,"line":288},[37,66605,52753],{"class":50},[37,66607,446],{"class":51636},[37,66609,51643],{"class":50},[37,66611,66612,66614,66616],{"class":39,"line":294},[37,66613,52121],{"class":50},[37,66615,51670],{"class":51636},[37,66617,51643],{"class":50},[37,66619,66620],{"class":39,"line":300},[37,66621,2757],{"emptyLinePlaceholder":454},[37,66623,66624,66626,66628],{"class":39,"line":306},[37,66625,1418],{"class":50},[37,66627,52136],{"class":51636},[37,66629,51643],{"class":50},[37,66631,66632,66634,66636,66638,66640,66643],{"class":39,"line":312},[37,66633,52480],{"class":50},[37,66635,51947],{"class":51636},[37,66637,53822],{"class":2320},[37,66639,55],{"class":50},[37,66641,66642],{"class":185},"\"father\"",[37,66644,51643],{"class":50},[37,66646,66647,66649,66651,66653,66655,66658,66660,66662],{"class":39,"line":317},[37,66648,51677],{"class":50},[37,66650,51947],{"class":51636},[37,66652,53822],{"class":2320},[37,66654,55],{"class":50},[37,66656,66657],{"class":185},"\"son\"",[37,66659,55650],{"class":50},[37,66661,51947],{"class":51636},[37,66663,51643],{"class":50},[37,66665,66666,66668,66670],{"class":39,"line":323},[37,66667,52753],{"class":50},[37,66669,51947],{"class":51636},[37,66671,51643],{"class":50},[37,66673,66674,66676,66678],{"class":39,"line":337},[37,66675,52480],{"class":50},[37,66677,52149],{"class":51636},[37,66679,51643],{"class":50},[37,66681,66682,66684,66687,66689,66691,66693,66695,66698],{"class":39,"line":342},[37,66683,11562],{"class":54},[37,66685,66686],{"class":61}," fa",[37,66688,13905],{"class":54},[37,66690,54732],{"class":50},[37,66692,54735],{"class":2320},[37,66694,165],{"class":50},[37,66696,66697],{"class":185},"'.father'",[37,66699,280],{"class":50},[37,66701,66702,66704,66707,66709,66711,66713,66715,66718],{"class":39,"line":347},[37,66703,11562],{"class":54},[37,66705,66706],{"class":61}," son",[37,66708,13905],{"class":54},[37,66710,54732],{"class":50},[37,66712,54735],{"class":2320},[37,66714,165],{"class":50},[37,66716,66717],{"class":185},"'.son'",[37,66719,280],{"class":50},[37,66721,66722,66724,66726,66728,66730,66732,66734],{"class":39,"line":352},[37,66723,52743],{"class":50},[37,66725,58149],{"class":2320},[37,66727,165],{"class":50},[37,66729,58154],{"class":185},[37,66731,12776],{"class":50},[37,66733,54785],{"class":54},[37,66735,54788],{"class":50},[37,66737,66738,66740,66742,66745],{"class":39,"line":357},[37,66739,59261],{"class":2320},[37,66741,165],{"class":50},[37,66743,66744],{"class":185},"'woshiu1'",[37,66746,280],{"class":50},[37,66748,66749,66751,66753],{"class":39,"line":362},[37,66750,54871],{"class":50},[37,66752,1738],{"class":61},[37,66754,280],{"class":50},[37,66756,66757,66760,66762,66764,66766,66768,66770],{"class":39,"line":367},[37,66758,66759],{"class":50},"    fa.",[37,66761,58149],{"class":2320},[37,66763,165],{"class":50},[37,66765,58154],{"class":185},[37,66767,12776],{"class":50},[37,66769,54785],{"class":54},[37,66771,54788],{"class":50},[37,66773,66774,66776,66778,66781],{"class":39,"line":373},[37,66775,59261],{"class":2320},[37,66777,165],{"class":50},[37,66779,66780],{"class":185},"'1'",[37,66782,280],{"class":50},[37,66784,66785,66787,66789],{"class":39,"line":392},[37,66786,54871],{"class":50},[37,66788,1738],{"class":61},[37,66790,280],{"class":50},[37,66792,66793,66796,66798,66800,66802,66804,66806],{"class":39,"line":398},[37,66794,66795],{"class":50},"    son.",[37,66797,58149],{"class":2320},[37,66799,165],{"class":50},[37,66801,58154],{"class":185},[37,66803,12776],{"class":50},[37,66805,54785],{"class":54},[37,66807,54788],{"class":50},[37,66809,66810,66812,66814,66817],{"class":39,"line":409},[37,66811,59261],{"class":2320},[37,66813,165],{"class":50},[37,66815,66816],{"class":185},"'2'",[37,66818,280],{"class":50},[37,66820,66821,66823,66825],{"class":39,"line":415},[37,66822,54871],{"class":50},[37,66824,1738],{"class":61},[37,66826,280],{"class":50},[37,66828,66829,66831,66833],{"class":39,"line":420},[37,66830,52753],{"class":50},[37,66832,52149],{"class":51636},[37,66834,51643],{"class":50},[37,66836,66837,66839,66841],{"class":39,"line":425},[37,66838,52121],{"class":50},[37,66840,52136],{"class":51636},[37,66842,51643],{"class":50},[37,66844,66845],{"class":39,"line":431},[37,66846,2757],{"emptyLinePlaceholder":454},[37,66848,66849,66851,66853],{"class":39,"line":436},[37,66850,52121],{"class":50},[37,66852,50971],{"class":51636},[37,66854,51643],{"class":50},[14,66856,66857],{},[1838,66858],{"alt":32,"src":66859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66861,66862],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22339,66864,66866],{"id":66865},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66868,66869],{},[1838,66870],{"alt":32,"src":66871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66873,66874],{},"反着来",[14,66876,66877],{},"注意是同名事件，比如都是‘click’",[22339,66879,66881],{"id":66880},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66883,66884],{},[1838,66885],{"alt":32,"src":66886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22339,66888,66890],{"id":66889},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66892,66893],{},[1838,66894],{"alt":32,"src":66895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66897,66898],{},[1838,66899],{"alt":32,"src":66900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22339,66902,66904],{"id":66903},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[481,66906,66907],{},[484,66908,66909],{},"事件类型的区别",[14,66911,66912],{},[1838,66913],{"alt":32,"src":66914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66916,66917],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[481,66919,66920],{"start":47},[484,66921,66922],{},"注册事件的区别",[14,66924,66925],{},[1838,66926],{"alt":32,"src":66927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22339,66929,66931],{"id":66930},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66933,66934],{},[1838,66935],{"alt":32,"src":66936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66938,66939],{},[1838,66940],{"alt":32,"src":66941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[27,66943,66945],{"className":53403,"code":66944,"language":53405,"meta":32,"style":32},"\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",[34,66946,66947,66955,66972,66995,67003,67008,67013,67018,67022,67030,67038],{"__ignoreMap":32},[37,66948,66949,66951,66953],{"class":39,"line":40},[37,66950,1418],{"class":50},[37,66952,52136],{"class":51636},[37,66954,51643],{"class":50},[37,66956,66957,66959,66962,66965,66967,66970],{"class":39,"line":47},[37,66958,52480],{"class":50},[37,66960,66961],{"class":51636},"form",[37,66963,66964],{"class":2320}," action",[37,66966,55],{"class":50},[37,66968,66969],{"class":185},"\"http:\u002F\u002Fwww.itcast.cn\"",[37,66971,51643],{"class":50},[37,66973,66974,66976,66978,66980,66982,66985,66988,66990,66993],{"class":39,"line":104},[37,66975,51677],{"class":50},[37,66977,54157],{"class":51636},[37,66979,54160],{"class":2320},[37,66981,55],{"class":50},[37,66983,66984],{"class":185},"\"submit\"",[37,66986,66987],{"class":2320}," value",[37,66989,55],{"class":50},[37,66991,66992],{"class":185},"\"免费注册\"",[37,66994,51643],{"class":50},[37,66996,66997,66999,67001],{"class":39,"line":113},[37,66998,51677],{"class":50},[37,67000,52149],{"class":51636},[37,67002,51643],{"class":50},[37,67004,67005],{"class":39,"line":189},[37,67006,67007],{"class":50},"      const form = document.querySelector('form')\n",[37,67009,67010],{"class":39,"line":195},[37,67011,67012],{"class":50},"      form.addEventListener('submit', function (e) {\n",[37,67014,67015],{"class":39,"line":201},[37,67016,67017],{"class":50},"        e.preventDefault()\n",[37,67019,67020],{"class":39,"line":207},[37,67021,65151],{"class":50},[37,67023,67024,67026,67028],{"class":39,"line":213},[37,67025,52112],{"class":50},[37,67027,52149],{"class":51636},[37,67029,51643],{"class":50},[37,67031,67032,67034,67036],{"class":39,"line":218},[37,67033,52753],{"class":50},[37,67035,66961],{"class":51636},[37,67037,51643],{"class":50},[37,67039,67040,67042,67044],{"class":39,"line":227},[37,67041,52121],{"class":50},[37,67043,52136],{"class":51636},[37,67045,51643],{"class":50},[14,67047,67048],{},"点击不在跳转！！！",[498,67050,67052],{"id":67051},"_332-事件委托","3.3.2 事件委托",[14,67054,67055],{},[1838,67056],{"alt":32,"src":67057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[27,67059,67061],{"className":50969,"code":67060,"language":50971,"meta":32,"style":32},"\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",[34,67062,67063,67073,67087,67091,67099,67113,67133,67145,67153,67157,67165,67173,67185,67197,67209,67221,67233,67246,67254,67262,67267,67286,67307,67312,67317,67322,67327,67336,67340,67350,67354,67359,67364,67378,67388,67392,67396,67404,67412,67416],{"__ignoreMap":32},[37,67064,67065,67067,67069,67071],{"class":39,"line":40},[37,67066,51633],{"class":50},[37,67068,51637],{"class":51636},[37,67070,51640],{"class":2320},[37,67072,51643],{"class":50},[37,67074,67075,67077,67079,67081,67083,67085],{"class":39,"line":47},[37,67076,1418],{"class":50},[37,67078,50971],{"class":51636},[37,67080,51652],{"class":2320},[37,67082,55],{"class":50},[37,67084,51657],{"class":185},[37,67086,51643],{"class":50},[37,67088,67089],{"class":39,"line":104},[37,67090,2757],{"emptyLinePlaceholder":454},[37,67092,67093,67095,67097],{"class":39,"line":113},[37,67094,1418],{"class":50},[37,67096,51670],{"class":51636},[37,67098,51643],{"class":50},[37,67100,67101,67103,67105,67107,67109,67111],{"class":39,"line":189},[37,67102,52480],{"class":50},[37,67104,51680],{"class":51636},[37,67106,51683],{"class":2320},[37,67108,55],{"class":50},[37,67110,51688],{"class":185},[37,67112,51643],{"class":50},[37,67114,67115,67117,67119,67121,67123,67125,67127,67129,67131],{"class":39,"line":195},[37,67116,52480],{"class":50},[37,67118,51680],{"class":51636},[37,67120,15261],{"class":2320},[37,67122,55],{"class":50},[37,67124,51727],{"class":185},[37,67126,51707],{"class":2320},[37,67128,55],{"class":50},[37,67130,51734],{"class":185},[37,67132,51643],{"class":50},[37,67134,67135,67137,67139,67141,67143],{"class":39,"line":201},[37,67136,52480],{"class":50},[37,67138,51743],{"class":51636},[37,67140,51746],{"class":50},[37,67142,51743],{"class":51636},[37,67144,51643],{"class":50},[37,67146,67147,67149,67151],{"class":39,"line":207},[37,67148,52121],{"class":50},[37,67150,51670],{"class":51636},[37,67152,51643],{"class":50},[37,67154,67155],{"class":39,"line":213},[37,67156,2757],{"emptyLinePlaceholder":454},[37,67158,67159,67161,67163],{"class":39,"line":218},[37,67160,1418],{"class":50},[37,67162,52136],{"class":51636},[37,67164,51643],{"class":50},[37,67166,67167,67169,67171],{"class":39,"line":227},[37,67168,52480],{"class":50},[37,67170,1515],{"class":51636},[37,67172,51643],{"class":50},[37,67174,67175,67177,67179,67181,67183],{"class":39,"line":232},[37,67176,51677],{"class":50},[37,67178,484],{"class":51636},[37,67180,54302],{"class":50},[37,67182,484],{"class":51636},[37,67184,51643],{"class":50},[37,67186,67187,67189,67191,67193,67195],{"class":39,"line":238},[37,67188,51677],{"class":50},[37,67190,484],{"class":51636},[37,67192,54321],{"class":50},[37,67194,484],{"class":51636},[37,67196,51643],{"class":50},[37,67198,67199,67201,67203,67205,67207],{"class":39,"line":244},[37,67200,51677],{"class":50},[37,67202,484],{"class":51636},[37,67204,54340],{"class":50},[37,67206,484],{"class":51636},[37,67208,51643],{"class":50},[37,67210,67211,67213,67215,67217,67219],{"class":39,"line":250},[37,67212,51677],{"class":50},[37,67214,484],{"class":51636},[37,67216,54359],{"class":50},[37,67218,484],{"class":51636},[37,67220,51643],{"class":50},[37,67222,67223,67225,67227,67229,67231],{"class":39,"line":256},[37,67224,51677],{"class":50},[37,67226,484],{"class":51636},[37,67228,54378],{"class":50},[37,67230,484],{"class":51636},[37,67232,51643],{"class":50},[37,67234,67235,67237,67239,67242,67244],{"class":39,"line":261},[37,67236,51677],{"class":50},[37,67238,14],{"class":51636},[37,67240,67241],{"class":50},">我不需要变色\u003C\u002F",[37,67243,14],{"class":51636},[37,67245,51643],{"class":50},[37,67247,67248,67250,67252],{"class":39,"line":267},[37,67249,52753],{"class":50},[37,67251,1515],{"class":51636},[37,67253,51643],{"class":50},[37,67255,67256,67258,67260],{"class":39,"line":283},[37,67257,52480],{"class":50},[37,67259,52149],{"class":51636},[37,67261,51643],{"class":50},[37,67263,67264],{"class":39,"line":288},[37,67265,67266],{"class":43},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[37,67268,67269,67271,67273,67275,67277,67279,67281,67284],{"class":39,"line":294},[37,67270,11562],{"class":54},[37,67272,61628],{"class":61},[37,67274,13905],{"class":54},[37,67276,54732],{"class":50},[37,67278,54735],{"class":2320},[37,67280,165],{"class":50},[37,67282,67283],{"class":185},"'ul'",[37,67285,280],{"class":50},[37,67287,67288,67291,67293,67295,67297,67299,67301,67303,67305],{"class":39,"line":300},[37,67289,67290],{"class":50},"    ul.",[37,67292,58149],{"class":2320},[37,67294,165],{"class":50},[37,67296,58154],{"class":185},[37,67298,12776],{"class":50},[37,67300,54785],{"class":54},[37,67302,2027],{"class":50},[37,67304,599],{"class":159},[37,67306,12783],{"class":50},[37,67308,67309],{"class":39,"line":306},[37,67310,67311],{"class":43},"      \u002F\u002F alert(1)\n",[37,67313,67314],{"class":39,"line":312},[37,67315,67316],{"class":43},"      \u002F\u002F e.target就是我们点击的对象\n",[37,67318,67319],{"class":39,"line":317},[37,67320,67321],{"class":43},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[37,67323,67324],{"class":39,"line":323},[37,67325,67326],{"class":43},"      \u002F\u002F e.target.style.color = 'red'\n",[37,67328,67329,67331,67333],{"class":39,"line":337},[37,67330,58580],{"class":50},[37,67332,58583],{"class":2320},[37,67334,67335],{"class":50},"(e)\n",[37,67337,67338],{"class":39,"line":342},[37,67339,2757],{"emptyLinePlaceholder":454},[37,67341,67342,67344,67347],{"class":39,"line":347},[37,67343,58580],{"class":50},[37,67345,67346],{"class":2320},"dir",[37,67348,67349],{"class":50},"(e.target)\n",[37,67351,67352],{"class":39,"line":352},[37,67353,2757],{"emptyLinePlaceholder":454},[37,67355,67356],{"class":39,"line":357},[37,67357,67358],{"class":43},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[37,67360,67361],{"class":39,"line":362},[37,67362,67363],{"class":43},"      \u002F\u002F 通过tagName来进行判断\n",[37,67365,67366,67368,67371,67373,67376],{"class":39,"line":367},[37,67367,54816],{"class":54},[37,67369,67370],{"class":50}," (e.target.tagName ",[37,67372,54822],{"class":54},[37,67374,67375],{"class":185}," 'LI'",[37,67377,12783],{"class":50},[37,67379,67380,67383,67385],{"class":39,"line":373},[37,67381,67382],{"class":50},"        e.target.style.color ",[37,67384,55],{"class":54},[37,67386,67387],{"class":185}," 'red'\n",[37,67389,67390],{"class":39,"line":392},[37,67391,52734],{"class":50},[37,67393,67394],{"class":39,"line":398},[37,67395,33798],{"class":50},[37,67397,67398,67400,67402],{"class":39,"line":409},[37,67399,52753],{"class":50},[37,67401,52149],{"class":51636},[37,67403,51643],{"class":50},[37,67405,67406,67408,67410],{"class":39,"line":415},[37,67407,52121],{"class":50},[37,67409,52136],{"class":51636},[37,67411,51643],{"class":50},[37,67413,67414],{"class":39,"line":420},[37,67415,2757],{"emptyLinePlaceholder":454},[37,67417,67418,67420,67422],{"class":39,"line":425},[37,67419,52121],{"class":50},[37,67421,50971],{"class":51636},[37,67423,51643],{"class":50},[14,67425,67426],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67428,67429],{},"if(e.target.ragName==='P') {}",[14,67431,67432],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67434,67435],{},"通过事件委托的方式实现tab栏切换改造：",[14,67437,67438],{},"一定要记住自定义属性！！！！！！",[14,67440,67441],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67443,67444],{},"id是自定义的属性名",[14,67446,67447],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[27,67449,67451],{"className":50969,"code":67450,"language":50971,"meta":32,"style":32},"\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",[34,67452,67453,67463,67477,67481,67489,67503,67523,67543,67555,67563,67569,67579,67589,67593,67597,67603,67615,67627,67639,67655,67659,67663,67669,67681,67693,67705,67715,67725,67729,67733,67741,67753,67763,67775,67779,67783,67791,67801,67811,67821,67825,67829,67839,67853,67865,67869,67873,67885,67895,67911,67921,67925,67929,67943,67953,67963,67967,67971,67977,67991,67995,67999,68007,68017,68021,68025,68034,68044,68048,68056,68064,68068,68076,68090,68104,68116,68124,68163,68195,68227,68259,68291,68299,68307,68321,68355,68389,68423,68457,68491,68499,68507,68515,68520,68525,68544,68549,68569,68577,68582,68595,68616,68629,68633,68638,68643,68656,68676,68704,68708,68712,68716,68724,68732,68736],{"__ignoreMap":32},[37,67454,67455,67457,67459,67461],{"class":39,"line":40},[37,67456,51633],{"class":50},[37,67458,51637],{"class":51636},[37,67460,51640],{"class":2320},[37,67462,51643],{"class":50},[37,67464,67465,67467,67469,67471,67473,67475],{"class":39,"line":47},[37,67466,1418],{"class":50},[37,67468,50971],{"class":51636},[37,67470,51652],{"class":2320},[37,67472,55],{"class":50},[37,67474,51657],{"class":185},[37,67476,51643],{"class":50},[37,67478,67479],{"class":39,"line":104},[37,67480,2757],{"emptyLinePlaceholder":454},[37,67482,67483,67485,67487],{"class":39,"line":113},[37,67484,1418],{"class":50},[37,67486,51670],{"class":51636},[37,67488,51643],{"class":50},[37,67490,67491,67493,67495,67497,67499,67501],{"class":39,"line":189},[37,67492,52480],{"class":50},[37,67494,51680],{"class":51636},[37,67496,51683],{"class":2320},[37,67498,55],{"class":50},[37,67500,51688],{"class":185},[37,67502,59463],{"class":50},[37,67504,67505,67507,67509,67511,67513,67515,67517,67519,67521],{"class":39,"line":195},[37,67506,52480],{"class":50},[37,67508,51680],{"class":51636},[37,67510,51699],{"class":2320},[37,67512,55],{"class":50},[37,67514,51704],{"class":185},[37,67516,51707],{"class":2320},[37,67518,55],{"class":50},[37,67520,51712],{"class":185},[37,67522,59463],{"class":50},[37,67524,67525,67527,67529,67531,67533,67535,67537,67539,67541],{"class":39,"line":201},[37,67526,52480],{"class":50},[37,67528,51680],{"class":51636},[37,67530,15261],{"class":2320},[37,67532,55],{"class":50},[37,67534,51727],{"class":185},[37,67536,51707],{"class":2320},[37,67538,55],{"class":50},[37,67540,51734],{"class":185},[37,67542,59463],{"class":50},[37,67544,67545,67547,67549,67551,67553],{"class":39,"line":207},[37,67546,52480],{"class":50},[37,67548,51743],{"class":51636},[37,67550,63961],{"class":50},[37,67552,51743],{"class":51636},[37,67554,51643],{"class":50},[37,67556,67557,67559,67561],{"class":39,"line":213},[37,67558,52480],{"class":50},[37,67560,446],{"class":51636},[37,67562,51643],{"class":50},[37,67564,67565,67567],{"class":39,"line":218},[37,67566,6751],{"class":51636},[37,67568,15913],{"class":50},[37,67570,67571,67573,67575,67577],{"class":39,"line":227},[37,67572,55042],{"class":61},[37,67574,51773],{"class":50},[37,67576,135],{"class":61},[37,67578,1669],{"class":50},[37,67580,67581,67583,67585,67587],{"class":39,"line":232},[37,67582,55031],{"class":61},[37,67584,51773],{"class":50},[37,67586,135],{"class":61},[37,67588,1669],{"class":50},[37,67590,67591],{"class":39,"line":238},[37,67592,2544],{"class":50},[37,67594,67595],{"class":39,"line":244},[37,67596,2757],{"emptyLinePlaceholder":454},[37,67598,67599,67601],{"class":39,"line":250},[37,67600,64012],{"class":2320},[37,67602,15913],{"class":50},[37,67604,67605,67607,67609,67611,67613],{"class":39,"line":256},[37,67606,55107],{"class":61},[37,67608,51773],{"class":50},[37,67610,64023],{"class":61},[37,67612,51828],{"class":54},[37,67614,1669],{"class":50},[37,67616,67617,67619,67621,67623,67625],{"class":39,"line":261},[37,67618,55121],{"class":61},[37,67620,51773],{"class":50},[37,67622,64036],{"class":61},[37,67624,51828],{"class":54},[37,67626,1669],{"class":50},[37,67628,67629,67631,67633,67635,67637],{"class":39,"line":267},[37,67630,55042],{"class":61},[37,67632,51773],{"class":50},[37,67634,1210],{"class":61},[37,67636,51828],{"class":54},[37,67638,1669],{"class":50},[37,67640,67641,67643,67645,67647,67649,67651,67653],{"class":39,"line":283},[37,67642,62313],{"class":61},[37,67644,51773],{"class":50},[37,67646,332],{"class":61},[37,67648,51828],{"class":54},[37,67650,51857],{"class":61},[37,67652,62580],{"class":61},[37,67654,1669],{"class":50},[37,67656,67657],{"class":39,"line":288},[37,67658,2544],{"class":50},[37,67660,67661],{"class":39,"line":294},[37,67662,2757],{"emptyLinePlaceholder":454},[37,67664,67665,67667],{"class":39,"line":300},[37,67666,64081],{"class":2320},[37,67668,15913],{"class":50},[37,67670,67671,67673,67675,67677,67679],{"class":39,"line":306},[37,67672,55107],{"class":61},[37,67674,51773],{"class":50},[37,67676,154],{"class":61},[37,67678,845],{"class":54},[37,67680,1669],{"class":50},[37,67682,67683,67685,67687,67689,67691],{"class":39,"line":312},[37,67684,55121],{"class":61},[37,67686,51773],{"class":50},[37,67688,1415],{"class":61},[37,67690,51828],{"class":54},[37,67692,1669],{"class":50},[37,67694,67695,67697,67699,67701,67703],{"class":39,"line":317},[37,67696,57695],{"class":61},[37,67698,51773],{"class":50},[37,67700,1415],{"class":61},[37,67702,51828],{"class":54},[37,67704,1669],{"class":50},[37,67706,67707,67709,67711,67713],{"class":39,"line":323},[37,67708,55345],{"class":61},[37,67710,51773],{"class":50},[37,67712,51813],{"class":61},[37,67714,1669],{"class":50},[37,67716,67717,67719,67721,67723],{"class":39,"line":337},[37,67718,55356],{"class":61},[37,67720,51773],{"class":50},[37,67722,52004],{"class":61},[37,67724,1669],{"class":50},[37,67726,67727],{"class":39,"line":342},[37,67728,2544],{"class":50},[37,67730,67731],{"class":39,"line":347},[37,67732,2757],{"emptyLinePlaceholder":454},[37,67734,67735,67737,67739],{"class":39,"line":352},[37,67736,64081],{"class":2320},[37,67738,64154],{"class":51636},[37,67740,15913],{"class":50},[37,67742,67743,67745,67747,67749,67751],{"class":39,"line":357},[37,67744,55258],{"class":61},[37,67746,51773],{"class":50},[37,67748,1309],{"class":61},[37,67750,51828],{"class":54},[37,67752,1669],{"class":50},[37,67754,67755,67757,67759,67761],{"class":39,"line":362},[37,67756,62670],{"class":61},[37,67758,51773],{"class":50},[37,67760,64177],{"class":61},[37,67762,1669],{"class":50},[37,67764,67765,67767,67769,67771,67773],{"class":39,"line":367},[37,67766,62336],{"class":61},[37,67768,51773],{"class":50},[37,67770,1210],{"class":61},[37,67772,51828],{"class":54},[37,67774,1669],{"class":50},[37,67776,67777],{"class":39,"line":373},[37,67778,2544],{"class":50},[37,67780,67781],{"class":39,"line":392},[37,67782,2757],{"emptyLinePlaceholder":454},[37,67784,67785,67787,67789],{"class":39,"line":398},[37,67786,64081],{"class":2320},[37,67788,61628],{"class":51636},[37,67790,15913],{"class":50},[37,67792,67793,67795,67797,67799],{"class":39,"line":409},[37,67794,55068],{"class":61},[37,67796,51773],{"class":50},[37,67798,55073],{"class":61},[37,67800,1669],{"class":50},[37,67802,67803,67805,67807,67809],{"class":39,"line":415},[37,67804,55345],{"class":61},[37,67806,51773],{"class":50},[37,67808,51813],{"class":61},[37,67810,1669],{"class":50},[37,67812,67813,67815,67817,67819],{"class":39,"line":420},[37,67814,55356],{"class":61},[37,67816,51773],{"class":50},[37,67818,51916],{"class":61},[37,67820,1669],{"class":50},[37,67822,67823],{"class":39,"line":425},[37,67824,2544],{"class":50},[37,67826,67827],{"class":39,"line":431},[37,67828,2757],{"emptyLinePlaceholder":454},[37,67830,67831,67833,67835,67837],{"class":39,"line":436},[37,67832,64081],{"class":2320},[37,67834,61628],{"class":51636},[37,67836,55411],{"class":51636},[37,67838,15913],{"class":50},[37,67840,67841,67843,67845,67847,67849,67851],{"class":39,"line":442},[37,67842,55042],{"class":61},[37,67844,51773],{"class":50},[37,67846,135],{"class":61},[37,67848,9291],{"class":61},[37,67850,51828],{"class":54},[37,67852,1669],{"class":50},[37,67854,67855,67857,67859,67861,67863],{"class":39,"line":8374},[37,67856,55258],{"class":61},[37,67858,51773],{"class":50},[37,67860,1059],{"class":61},[37,67862,51828],{"class":54},[37,67864,1669],{"class":50},[37,67866,67867],{"class":39,"line":8386},[37,67868,2544],{"class":50},[37,67870,67871],{"class":39,"line":8398},[37,67872,2757],{"emptyLinePlaceholder":454},[37,67874,67875,67877,67879,67881,67883],{"class":39,"line":10057},[37,67876,64081],{"class":2320},[37,67878,61628],{"class":51636},[37,67880,55411],{"class":51636},[37,67882,1774],{"class":51636},[37,67884,15913],{"class":50},[37,67886,67887,67889,67891,67893],{"class":39,"line":10082},[37,67888,64306],{"class":61},[37,67890,51773],{"class":50},[37,67892,55073],{"class":61},[37,67894,1669],{"class":50},[37,67896,67897,67899,67901,67903,67905,67907,67909],{"class":39,"line":10105},[37,67898,62568],{"class":61},[37,67900,51773],{"class":50},[37,67902,602],{"class":61},[37,67904,51828],{"class":54},[37,67906,51857],{"class":61},[37,67908,64327],{"class":61},[37,67910,1669],{"class":50},[37,67912,67913,67915,67917,67919],{"class":39,"line":10129},[37,67914,57752],{"class":61},[37,67916,51773],{"class":50},[37,67918,62705],{"class":61},[37,67920,1669],{"class":50},[37,67922,67923],{"class":39,"line":10134},[37,67924,2544],{"class":50},[37,67926,67927],{"class":39,"line":10139},[37,67928,2757],{"emptyLinePlaceholder":454},[37,67930,67931,67933,67935,67937,67939,67941],{"class":39,"line":10144},[37,67932,64081],{"class":2320},[37,67934,61628],{"class":51636},[37,67936,55411],{"class":51636},[37,67938,1774],{"class":51636},[37,67940,64360],{"class":2320},[37,67942,15913],{"class":50},[37,67944,67945,67947,67949,67951],{"class":39,"line":10153},[37,67946,62127],{"class":61},[37,67948,51773],{"class":50},[37,67950,64371],{"class":61},[37,67952,1669],{"class":50},[37,67954,67955,67957,67959,67961],{"class":39,"line":10158},[37,67956,57752],{"class":61},[37,67958,51773],{"class":50},[37,67960,64371],{"class":61},[37,67962,1669],{"class":50},[37,67964,67965],{"class":39,"line":10164},[37,67966,2544],{"class":50},[37,67968,67969],{"class":39,"line":10185},[37,67970,2757],{"emptyLinePlaceholder":454},[37,67972,67973,67975],{"class":39,"line":10191},[37,67974,64396],{"class":2320},[37,67976,15913],{"class":50},[37,67978,67979,67981,67983,67985,67987,67989],{"class":39,"line":10205},[37,67980,55031],{"class":61},[37,67982,51773],{"class":50},[37,67984,135],{"class":61},[37,67986,64409],{"class":61},[37,67988,51828],{"class":54},[37,67990,1669],{"class":50},[37,67992,67993],{"class":39,"line":10211},[37,67994,2544],{"class":50},[37,67996,67997],{"class":39,"line":10238},[37,67998,2757],{"emptyLinePlaceholder":454},[37,68000,68001,68003,68005],{"class":39,"line":10247},[37,68002,64396],{"class":2320},[37,68004,62510],{"class":2320},[37,68006,15913],{"class":50},[37,68008,68009,68011,68013,68015],{"class":39,"line":10253},[37,68010,55345],{"class":61},[37,68012,51773],{"class":50},[37,68014,55073],{"class":61},[37,68016,1669],{"class":50},[37,68018,68019],{"class":39,"line":10261},[37,68020,2544],{"class":50},[37,68022,68023],{"class":39,"line":10266},[37,68024,2757],{"emptyLinePlaceholder":454},[37,68026,68027,68029,68032],{"class":39,"line":16945},[37,68028,64396],{"class":2320},[37,68030,68031],{"class":2320}," .active",[37,68033,15913],{"class":50},[37,68035,68036,68038,68040,68042],{"class":39,"line":16951},[37,68037,55345],{"class":61},[37,68039,51773],{"class":50},[37,68041,61205],{"class":61},[37,68043,1669],{"class":50},[37,68045,68046],{"class":39,"line":16974},[37,68047,2544],{"class":50},[37,68049,68050,68052,68054],{"class":39,"line":16980},[37,68051,52753],{"class":50},[37,68053,446],{"class":51636},[37,68055,51643],{"class":50},[37,68057,68058,68060,68062],{"class":39,"line":17003},[37,68059,52121],{"class":50},[37,68061,51670],{"class":51636},[37,68063,51643],{"class":50},[37,68065,68066],{"class":39,"line":17017},[37,68067,2757],{"emptyLinePlaceholder":454},[37,68069,68070,68072,68074],{"class":39,"line":17037},[37,68071,1418],{"class":50},[37,68073,52136],{"class":51636},[37,68075,51643],{"class":50},[37,68077,68078,68080,68082,68084,68086,68088],{"class":39,"line":17043},[37,68079,52480],{"class":50},[37,68081,51947],{"class":51636},[37,68083,53822],{"class":2320},[37,68085,55],{"class":50},[37,68087,64511],{"class":185},[37,68089,51643],{"class":50},[37,68091,68092,68094,68096,68098,68100,68102],{"class":39,"line":17054},[37,68093,51677],{"class":50},[37,68095,51947],{"class":51636},[37,68097,53822],{"class":2320},[37,68099,55],{"class":50},[37,68101,64526],{"class":185},[37,68103,51643],{"class":50},[37,68105,68106,68108,68110,68112,68114],{"class":39,"line":17077},[37,68107,55570],{"class":50},[37,68109,498],{"class":51636},[37,68111,64537],{"class":50},[37,68113,498],{"class":51636},[37,68115,51643],{"class":50},[37,68117,68118,68120,68122],{"class":39,"line":17099},[37,68119,55570],{"class":50},[37,68121,1515],{"class":51636},[37,68123,51643],{"class":50},[37,68125,68126,68128,68130,68132,68134,68136,68138,68140,68142,68144,68146,68148,68150,68153,68155,68157,68159,68161],{"class":39,"line":17104},[37,68127,55638],{"class":50},[37,68129,484],{"class":51636},[37,68131,61388],{"class":50},[37,68133,51],{"class":51636},[37,68135,53822],{"class":2320},[37,68137,55],{"class":50},[37,68139,60042],{"class":185},[37,68141,61393],{"class":2320},[37,68143,55],{"class":50},[37,68145,64572],{"class":185},[37,68147,54287],{"class":2320},[37,68149,55],{"class":50},[37,68151,68152],{"class":185},"\"0\"",[37,68154,64575],{"class":50},[37,68156,51],{"class":51636},[37,68158,55650],{"class":50},[37,68160,484],{"class":51636},[37,68162,51643],{"class":50},[37,68164,68165,68167,68169,68171,68173,68175,68177,68179,68181,68183,68185,68187,68189,68191,68193],{"class":39,"line":17110},[37,68166,55638],{"class":50},[37,68168,484],{"class":51636},[37,68170,61388],{"class":50},[37,68172,51],{"class":51636},[37,68174,61393],{"class":2320},[37,68176,55],{"class":50},[37,68178,64572],{"class":185},[37,68180,54287],{"class":2320},[37,68182,55],{"class":50},[37,68184,4028],{"class":185},[37,68186,64602],{"class":50},[37,68188,51],{"class":51636},[37,68190,55650],{"class":50},[37,68192,484],{"class":51636},[37,68194,51643],{"class":50},[37,68196,68197,68199,68201,68203,68205,68207,68209,68211,68213,68215,68217,68219,68221,68223,68225],{"class":39,"line":17124},[37,68198,55638],{"class":50},[37,68200,484],{"class":51636},[37,68202,61388],{"class":50},[37,68204,51],{"class":51636},[37,68206,61393],{"class":2320},[37,68208,55],{"class":50},[37,68210,64572],{"class":185},[37,68212,54287],{"class":2320},[37,68214,55],{"class":50},[37,68216,4051],{"class":185},[37,68218,64629],{"class":50},[37,68220,51],{"class":51636},[37,68222,55650],{"class":50},[37,68224,484],{"class":51636},[37,68226,51643],{"class":50},[37,68228,68229,68231,68233,68235,68237,68239,68241,68243,68245,68247,68249,68251,68253,68255,68257],{"class":39,"line":17137},[37,68230,55638],{"class":50},[37,68232,484],{"class":51636},[37,68234,61388],{"class":50},[37,68236,51],{"class":51636},[37,68238,61393],{"class":2320},[37,68240,55],{"class":50},[37,68242,64572],{"class":185},[37,68244,54287],{"class":2320},[37,68246,55],{"class":50},[37,68248,4064],{"class":185},[37,68250,64656],{"class":50},[37,68252,51],{"class":51636},[37,68254,55650],{"class":50},[37,68256,484],{"class":51636},[37,68258,51643],{"class":50},[37,68260,68261,68263,68265,68267,68269,68271,68273,68275,68277,68279,68281,68283,68285,68287,68289],{"class":39,"line":17142},[37,68262,55638],{"class":50},[37,68264,484],{"class":51636},[37,68266,61388],{"class":50},[37,68268,51],{"class":51636},[37,68270,61393],{"class":2320},[37,68272,55],{"class":50},[37,68274,64572],{"class":185},[37,68276,54287],{"class":2320},[37,68278,55],{"class":50},[37,68280,4077],{"class":185},[37,68282,64683],{"class":50},[37,68284,51],{"class":51636},[37,68286,55650],{"class":50},[37,68288,484],{"class":51636},[37,68290,51643],{"class":50},[37,68292,68293,68295,68297],{"class":39,"line":17156},[37,68294,55743],{"class":50},[37,68296,1515],{"class":51636},[37,68298,51643],{"class":50},[37,68300,68301,68303,68305],{"class":39,"line":17161},[37,68302,52112],{"class":50},[37,68304,51947],{"class":51636},[37,68306,51643],{"class":50},[37,68308,68309,68311,68313,68315,68317,68319],{"class":39,"line":17167},[37,68310,51677],{"class":50},[37,68312,51947],{"class":51636},[37,68314,53822],{"class":2320},[37,68316,55],{"class":50},[37,68318,64720],{"class":185},[37,68320,51643],{"class":50},[37,68322,68323,68325,68327,68329,68331,68333,68335,68337,68339,68341,68343,68345,68347,68349,68351,68353],{"class":39,"line":17172},[37,68324,55570],{"class":50},[37,68326,51947],{"class":51636},[37,68328,53822],{"class":2320},[37,68330,55],{"class":50},[37,68332,64735],{"class":185},[37,68334,61388],{"class":50},[37,68336,1838],{"class":51636},[37,68338,55575],{"class":2320},[37,68340,55],{"class":50},[37,68342,64746],{"class":185},[37,68344,55583],{"class":2320},[37,68346,55],{"class":50},[37,68348,8000],{"class":185},[37,68350,64755],{"class":50},[37,68352,51947],{"class":51636},[37,68354,51643],{"class":50},[37,68356,68357,68359,68361,68363,68365,68367,68369,68371,68373,68375,68377,68379,68381,68383,68385,68387],{"class":39,"line":17186},[37,68358,55570],{"class":50},[37,68360,51947],{"class":51636},[37,68362,53822],{"class":2320},[37,68364,55],{"class":50},[37,68366,62959],{"class":185},[37,68368,61388],{"class":50},[37,68370,1838],{"class":51636},[37,68372,55575],{"class":2320},[37,68374,55],{"class":50},[37,68376,64782],{"class":185},[37,68378,55583],{"class":2320},[37,68380,55],{"class":50},[37,68382,8000],{"class":185},[37,68384,64755],{"class":50},[37,68386,51947],{"class":51636},[37,68388,51643],{"class":50},[37,68390,68391,68393,68395,68397,68399,68401,68403,68405,68407,68409,68411,68413,68415,68417,68419,68421],{"class":39,"line":17191},[37,68392,55570],{"class":50},[37,68394,51947],{"class":51636},[37,68396,53822],{"class":2320},[37,68398,55],{"class":50},[37,68400,62959],{"class":185},[37,68402,61388],{"class":50},[37,68404,1838],{"class":51636},[37,68406,55575],{"class":2320},[37,68408,55],{"class":50},[37,68410,64817],{"class":185},[37,68412,55583],{"class":2320},[37,68414,55],{"class":50},[37,68416,8000],{"class":185},[37,68418,64755],{"class":50},[37,68420,51947],{"class":51636},[37,68422,51643],{"class":50},[37,68424,68425,68427,68429,68431,68433,68435,68437,68439,68441,68443,68445,68447,68449,68451,68453,68455],{"class":39,"line":17196},[37,68426,55570],{"class":50},[37,68428,51947],{"class":51636},[37,68430,53822],{"class":2320},[37,68432,55],{"class":50},[37,68434,62959],{"class":185},[37,68436,61388],{"class":50},[37,68438,1838],{"class":51636},[37,68440,55575],{"class":2320},[37,68442,55],{"class":50},[37,68444,64852],{"class":185},[37,68446,55583],{"class":2320},[37,68448,55],{"class":50},[37,68450,8000],{"class":185},[37,68452,64755],{"class":50},[37,68454,51947],{"class":51636},[37,68456,51643],{"class":50},[37,68458,68459,68461,68463,68465,68467,68469,68471,68473,68475,68477,68479,68481,68483,68485,68487,68489],{"class":39,"line":17210},[37,68460,55570],{"class":50},[37,68462,51947],{"class":51636},[37,68464,53822],{"class":2320},[37,68466,55],{"class":50},[37,68468,62959],{"class":185},[37,68470,61388],{"class":50},[37,68472,1838],{"class":51636},[37,68474,55575],{"class":2320},[37,68476,55],{"class":50},[37,68478,64887],{"class":185},[37,68480,55583],{"class":2320},[37,68482,55],{"class":50},[37,68484,8000],{"class":185},[37,68486,64755],{"class":50},[37,68488,51947],{"class":51636},[37,68490,51643],{"class":50},[37,68492,68493,68495,68497],{"class":39,"line":17222},[37,68494,52112],{"class":50},[37,68496,51947],{"class":51636},[37,68498,51643],{"class":50},[37,68500,68501,68503,68505],{"class":39,"line":17227},[37,68502,52753],{"class":50},[37,68504,51947],{"class":51636},[37,68506,51643],{"class":50},[37,68508,68509,68511,68513],{"class":39,"line":17240},[37,68510,52480],{"class":50},[37,68512,52149],{"class":51636},[37,68514,51643],{"class":50},[37,68516,68517],{"class":39,"line":17245},[37,68518,68519],{"class":43},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[37,68521,68522],{"class":39,"line":17250},[37,68523,68524],{"class":43},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[37,68526,68527,68529,68531,68533,68535,68537,68539,68542],{"class":39,"line":17255},[37,68528,11562],{"class":54},[37,68530,61628],{"class":61},[37,68532,13905],{"class":54},[37,68534,54732],{"class":50},[37,68536,54735],{"class":2320},[37,68538,165],{"class":50},[37,68540,68541],{"class":185},"'.tab-nav ul'",[37,68543,280],{"class":50},[37,68545,68546],{"class":39,"line":17268},[37,68547,68548],{"class":43},"    \u002F\u002F 2.添加事件\n",[37,68550,68551,68553,68555,68557,68559,68561,68563,68565,68567],{"class":39,"line":17273},[37,68552,67290],{"class":50},[37,68554,58149],{"class":2320},[37,68556,165],{"class":50},[37,68558,58154],{"class":185},[37,68560,12776],{"class":50},[37,68562,54785],{"class":54},[37,68564,2027],{"class":50},[37,68566,599],{"class":159},[37,68568,12783],{"class":50},[37,68570,68571,68573,68575],{"class":39,"line":32971},[37,68572,58580],{"class":50},[37,68574,67346],{"class":2320},[37,68576,67349],{"class":50},[37,68578,68579],{"class":39,"line":32977},[37,68580,68581],{"class":43},"      \u002F\u002Fe.targer是我们点击的对象\n",[37,68583,68584,68586,68588,68590,68593],{"class":39,"line":32983},[37,68585,54816],{"class":54},[37,68587,67370],{"class":50},[37,68589,54822],{"class":54},[37,68591,68592],{"class":185}," 'A'",[37,68594,12783],{"class":50},[37,68596,68597,68599,68601,68603,68606,68608,68610,68612,68614],{"class":39,"line":32989},[37,68598,52261],{"class":50},[37,68600,54735],{"class":2320},[37,68602,165],{"class":50},[37,68604,68605],{"class":185},"'.active'",[37,68607,57339],{"class":50},[37,68609,57342],{"class":2320},[37,68611,165],{"class":50},[37,68613,65050],{"class":185},[37,68615,280],{"class":50},[37,68617,68618,68621,68623,68625,68627],{"class":39,"line":32995},[37,68619,68620],{"class":50},"        e.target.classList.",[37,68622,5682],{"class":2320},[37,68624,165],{"class":50},[37,68626,65050],{"class":185},[37,68628,280],{"class":50},[37,68630,68631],{"class":39,"line":33006},[37,68632,2757],{"emptyLinePlaceholder":454},[37,68634,68635],{"class":39,"line":33012},[37,68636,68637],{"class":43},"        \u002F\u002F 下面大盒子模块\n",[37,68639,68640],{"class":39,"line":33032},[37,68641,68642],{"class":43},"        \u002F\u002F console.log(e.target.dataset.id)\n",[37,68644,68645,68647,68649,68651,68653],{"class":39,"line":33038},[37,68646,61606],{"class":54},[37,68648,3382],{"class":61},[37,68650,13905],{"class":54},[37,68652,45903],{"class":54},[37,68654,68655],{"class":50},"e.target.dataset.id\n",[37,68657,68658,68660,68662,68664,68666,68668,68670,68672,68674],{"class":39,"line":33049},[37,68659,52261],{"class":50},[37,68661,54735],{"class":2320},[37,68663,165],{"class":50},[37,68665,65098],{"class":185},[37,68667,57339],{"class":50},[37,68669,57342],{"class":2320},[37,68671,165],{"class":50},[37,68673,65050],{"class":185},[37,68675,280],{"class":50},[37,68677,68678,68680,68682,68684,68686,68688,68690,68692,68694,68696,68698,68700,68702],{"class":39,"line":33055},[37,68679,52261],{"class":50},[37,68681,54735],{"class":2320},[37,68683,165],{"class":50},[37,68685,65124],{"class":185},[37,68687,954],{"class":50},[37,68689,45903],{"class":54},[37,68691,25460],{"class":61},[37,68693,57368],{"class":185},[37,68695,57339],{"class":50},[37,68697,5682],{"class":2320},[37,68699,165],{"class":50},[37,68701,65050],{"class":185},[37,68703,280],{"class":50},[37,68705,68706],{"class":39,"line":33061},[37,68707,2757],{"emptyLinePlaceholder":454},[37,68709,68710],{"class":39,"line":33067},[37,68711,52734],{"class":50},[37,68713,68714],{"class":39,"line":33073},[37,68715,33798],{"class":50},[37,68717,68718,68720,68722],{"class":39,"line":33079},[37,68719,52753],{"class":50},[37,68721,52149],{"class":51636},[37,68723,51643],{"class":50},[37,68725,68726,68728,68730],{"class":39,"line":33085},[37,68727,52121],{"class":50},[37,68729,52136],{"class":51636},[37,68731,51643],{"class":50},[37,68733,68734],{"class":39,"line":33091},[37,68735,2757],{"emptyLinePlaceholder":454},[37,68737,68738,68740,68742],{"class":39,"line":33111},[37,68739,52121],{"class":50},[37,68741,50971],{"class":51636},[37,68743,51643],{"class":50},[498,68745,68747],{"id":68746},"_333-页面加载事件","3.3.3 页面加载事件",[481,68749,68750],{},[484,68751,68752],{},"load",[14,68754,68755],{},[1838,68756],{"alt":32,"src":68757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68759,68760],{},"window代表整个窗口，比document还要大",[14,68762,68763],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68765,68766],{},"img.addEventListener('load', function () {",[14,68768,68769],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68771,52800],{},[481,68773,68774],{"start":47},[484,68775,68776],{},"DOMContentLoaded",[14,68778,68779],{},[1838,68780],{"alt":32,"src":68781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68783,68784],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[498,68786,68788],{"id":68787},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68790,68791],{},[1838,68792],{"alt":32,"src":68793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68795,68796],{},[1838,68797],{"alt":32,"src":68798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68800,68801],{},[1838,68802],{"alt":32,"src":68803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68805,68806],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68808,68809],{},"获得的是数字型数据，不带单位",[14,68811,68812],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68814,68815],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68817,68818],{},"它是通过document.documentElement来获取",[14,68820,68821],{},[1838,68822],{"alt":32,"src":68823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68825,68826],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[498,68828,68830],{"id":68829},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68832,68833],{},[1838,68834],{"alt":32,"src":68835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68837,68838],{},[1838,68839],{"alt":32,"src":68840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[498,68842,68844],{"id":68843},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68846,68847],{},[1838,68848],{"alt":32,"src":68849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68851,68852],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68854,68855],{},[1838,68856],{"alt":32,"src":68857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68859,68860],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68862,68863],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68865,68866],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68868,68869],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68871,68872],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68874,68875],{},[1838,68876],{"alt":32,"src":68877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68879,68880],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68882,68883],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68885,68886],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68888,68889],{},"e.pageX-box.getBoundingClientRect()",[498,68891,68893],{"id":68892},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68895,68896],{},[1838,68897],{"alt":32,"src":68898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68900,68901],{},"这个是相对于视口来说的，它是个方法，不是属性值",[498,68903,68905],{"id":68904},"_338-总结","3.3.8 总结",[14,68907,68908],{},[1838,68909],{"alt":32,"src":68910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68912,68913],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68915,68916],{},"修改盒子的宽高只能通过width和height来实现",[498,68918,68920],{"id":68919},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[27,68922,68924],{"className":50969,"code":68923,"language":50971,"meta":32,"style":32},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[34,68925,68926,68931,68936,68941,68946],{"__ignoreMap":32},[37,68927,68928],{"class":39,"line":40},[37,68929,68930],{"class":50},"\u002F* 页面滑动 *\u002F\n",[37,68932,68933],{"class":39,"line":47},[37,68934,68935],{"class":50},"html {\n",[37,68937,68938],{"class":39,"line":104},[37,68939,68940],{"class":50},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[37,68942,68943],{"class":39,"line":113},[37,68944,68945],{"class":50},"  scroll-behavior: smooth;\n",[37,68947,68948],{"class":39,"line":189},[37,68949,1941],{"class":50},[14,68951,68952],{},"默认是auto",[498,68954,68956],{"id":68955},"_3310-日期对象","3.3.10 日期对象",[22339,68958,68960],{"id":68959},"_33101-实例化","3.3.10.1 实例化",[14,68962,68963],{},[1838,68964],{"alt":32,"src":68965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22339,68967,68969],{"id":68968},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68971,68972],{},[1838,68973],{"alt":32,"src":68974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68976,68977],{},"月份+1",[14,68979,68980],{},"老外认为第一天为0，星期天",[14,68982,68983],{},"方法使用的时候必须要跟括号",[14,68985,68986],{},"快速获得日期",[14,68988,68989],{},"\u002F\u002F 得到年月日",[14,68991,68992],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68994,68995],{},"\u002F\u002F 得到当地日期",[14,68997,68998],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,69000,69001],{},"\u002F\u002F 得到当地时间",[14,69003,69004],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,69006,69007],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,69009,69010],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52149,69012,69013],{},"\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",[14,69015,69016],{},"学会去封装函数！",[22339,69018,69020],{"id":69019},"_33103-时间戳","3.3.10.3 时间戳",[14,69022,69023],{},[1838,69024],{"alt":32,"src":69025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,69027,69028],{},[1838,69029],{"alt":32,"src":69030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,69032,69033],{},"三种方法记住一个就可以",[498,69035,69037],{"id":69036},"_3311-节点操作","3.3.11 节点操作",[22339,69039,69041],{"id":69040},"_33111-dom节点","3.3.11.1 DOM节点",[14,69043,69044],{},[1838,69045],{"alt":32,"src":69046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,69048,69049],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22339,69051,69053],{"id":69052},"_33112-查找节点","3.3.11.2 查找节点",[14,69055,69056],{},"前边的document.querySelector()是获取的元素",[14,69058,69059],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,69061,69062],{},[1838,69063],{"alt":32,"src":69064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[481,69066,69067],{},[484,69068,69069],{},"父节点",[14,69071,69072],{},[1838,69073],{"alt":32,"src":69074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[481,69076,69077],{"start":47},[484,69078,69079],{},"子节点",[14,69081,69082],{},[1838,69083],{"alt":32,"src":69084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,69086,69087],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,69089,69090],{},"children获得的是伪数组，是亲儿子",[481,69092,69093],{"start":104},[484,69094,69095],{},"兄弟节点",[14,69097,69098],{},[1838,69099],{"alt":32,"src":69100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22339,69102,69104],{"id":69103},"_33113-增加节点","3.3.11.3 增加节点",[14,69106,69107],{},[1838,69108],{"alt":32,"src":69109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,69111,69112],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,69114,69115],{},[1838,69116],{"alt":32,"src":69117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,69119,69120],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,69122,69123],{},"下面是写法的部分展示，就按照下边的格式来写",[14,69125,69126],{},"例：",[52149,69128,69129],{},"\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",[14,69131,69132],{},[1838,69133],{"alt":32,"src":69134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,69136,69137],{},"false只克隆标签，里边的内容不会克隆过来",[27,69139,69141],{"className":50969,"code":69140,"language":50971,"meta":32,"style":32},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[34,69142,69143],{"__ignoreMap":32},[37,69144,69145],{"class":39,"line":40},[37,69146,69140],{"class":50},[22339,69148,69150],{"id":69149},"_33114-删除节点","3.3.11.4 删除节点",[14,69152,69153],{},[1838,69154],{"alt":32,"src":69155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,69157,69158],{},"父亲删儿子",[14,69160,69161],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[498,69163,69165],{"id":69164},"_3312-m端事件","3.3.12 M端事件",[14,69167,69168],{},"M端就是移动端",[14,69170,69171],{},[1838,69172],{"alt":32,"src":69173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[498,69175,69177],{"id":69176},"_3313-插件","3.3.13 插件",[14,69179,69180],{},"要熟悉官网！！！",[14,69182,69183],{},[51,69184,69185],{"href":69185,"rel":69186},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24206],[14,69188,69189],{},[51,69190,69191],{"href":69191,"rel":69192},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24206],[498,69194,69196],{"id":69195},"_3314-学生信息表","3.3.14 学生信息表",[481,69198,69199,69202,69205,69208,69211,69214,69217,69220],{},[484,69200,69201],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[484,69203,69204],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[484,69206,69207],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[484,69209,69210],{},"用好表单元素自带的属性，value,name等",[484,69212,69213],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[484,69215,69216],{},"不要忘记事件对象",[484,69218,69219],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[484,69221,69222],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,69224,69225],{},"结构：",[27,69227,69229],{"className":50969,"code":69228,"language":50971,"meta":32,"style":32},"\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",[34,69230,69231,69241,69255,69259,69267,69281,69301,69322,69335,69359,69367,69371,69379,69392,69413,69441,69469,69474,69496,69516,69535,69543,69571,69593,69613,69633,69653,69673,69693,69701,69721,69729,69733,69746,69754,69762,69770,69783,69796,69809,69822,69835,69848,69861,69869,69877,69885,69890,69895,69900,69905,69910,69915,69920,69925,69930,69935,69940,69945,69950,69958,69966,69974,69978,69998,70017,70037,70057,70077,70097,70101,70106,70126,70131,70141,70146,70151,70171,70193,70198,70208,70212,70216,70221,70226,70255,70269,70284,70288,70292,70296,70301,70312,70325,70330,70335,70340,70345,70350,70354,70359,70364,70373,70378,70383,70395,70400,70407,70411,70416,70426,70431,70441,70446,70474,70495,70505,70525,70543,70560,70577,70594,70611,70615,70625,70630,70635,70640,70651,70655,70659,70663,70668,70673,70694,70706,70711,70716,70721,70735,70740,70747,70751,70755,70763,70767,70775,70779],{"__ignoreMap":32},[37,69232,69233,69235,69237,69239],{"class":39,"line":40},[37,69234,51633],{"class":50},[37,69236,51637],{"class":51636},[37,69238,51640],{"class":2320},[37,69240,51643],{"class":50},[37,69242,69243,69245,69247,69249,69251,69253],{"class":39,"line":47},[37,69244,1418],{"class":50},[37,69246,50971],{"class":51636},[37,69248,51652],{"class":2320},[37,69250,55],{"class":50},[37,69252,51657],{"class":185},[37,69254,51643],{"class":50},[37,69256,69257],{"class":39,"line":104},[37,69258,2757],{"emptyLinePlaceholder":454},[37,69260,69261,69263,69265],{"class":39,"line":113},[37,69262,1418],{"class":50},[37,69264,51670],{"class":51636},[37,69266,51643],{"class":50},[37,69268,69269,69271,69273,69275,69277,69279],{"class":39,"line":189},[37,69270,52480],{"class":50},[37,69272,51680],{"class":51636},[37,69274,51683],{"class":2320},[37,69276,55],{"class":50},[37,69278,51688],{"class":185},[37,69280,59463],{"class":50},[37,69282,69283,69285,69287,69289,69291,69293,69295,69297,69299],{"class":39,"line":195},[37,69284,52480],{"class":50},[37,69286,51680],{"class":51636},[37,69288,15261],{"class":2320},[37,69290,55],{"class":50},[37,69292,51727],{"class":185},[37,69294,51707],{"class":2320},[37,69296,55],{"class":50},[37,69298,51734],{"class":185},[37,69300,59463],{"class":50},[37,69302,69303,69305,69307,69309,69311,69313,69315,69317,69320],{"class":39,"line":201},[37,69304,52480],{"class":50},[37,69306,51680],{"class":51636},[37,69308,51699],{"class":2320},[37,69310,55],{"class":50},[37,69312,51704],{"class":185},[37,69314,51707],{"class":2320},[37,69316,55],{"class":50},[37,69318,69319],{"class":185},"\"ie=edge\"",[37,69321,59463],{"class":50},[37,69323,69324,69326,69328,69331,69333],{"class":39,"line":207},[37,69325,52480],{"class":50},[37,69327,51743],{"class":51636},[37,69329,69330],{"class":50},">学生信息管理\u003C\u002F",[37,69332,51743],{"class":51636},[37,69334,51643],{"class":50},[37,69336,69337,69339,69342,69345,69347,69350,69352,69354,69357],{"class":39,"line":213},[37,69338,52480],{"class":50},[37,69340,69341],{"class":51636},"link",[37,69343,69344],{"class":2320}," rel",[37,69346,55],{"class":50},[37,69348,69349],{"class":185},"\"stylesheet\"",[37,69351,61393],{"class":2320},[37,69353,55],{"class":50},[37,69355,69356],{"class":185},"\"css\u002Findex.css\"",[37,69358,59463],{"class":50},[37,69360,69361,69363,69365],{"class":39,"line":218},[37,69362,52121],{"class":50},[37,69364,51670],{"class":51636},[37,69366,51643],{"class":50},[37,69368,69369],{"class":39,"line":227},[37,69370,2757],{"emptyLinePlaceholder":454},[37,69372,69373,69375,69377],{"class":39,"line":232},[37,69374,1418],{"class":50},[37,69376,52136],{"class":51636},[37,69378,51643],{"class":50},[37,69380,69381,69383,69385,69388,69390],{"class":39,"line":238},[37,69382,52480],{"class":50},[37,69384,10],{"class":51636},[37,69386,69387],{"class":50},">新增学员\u003C\u002F",[37,69389,10],{"class":51636},[37,69391,51643],{"class":50},[37,69393,69394,69396,69398,69400,69402,69404,69407,69409,69411],{"class":39,"line":244},[37,69395,52480],{"class":50},[37,69397,66961],{"class":51636},[37,69399,53822],{"class":2320},[37,69401,55],{"class":50},[37,69403,63000],{"class":185},[37,69405,69406],{"class":2320}," autocomplete",[37,69408,55],{"class":50},[37,69410,32114],{"class":185},[37,69412,51643],{"class":50},[37,69414,69415,69418,69420,69422,69424,69426,69428,69430,69433,69435,69437,69439],{"class":39,"line":250},[37,69416,69417],{"class":50},"    姓名：\u003C",[37,69419,54157],{"class":51636},[37,69421,54160],{"class":2320},[37,69423,55],{"class":50},[37,69425,63035],{"class":185},[37,69427,53822],{"class":2320},[37,69429,55],{"class":50},[37,69431,69432],{"class":185},"\"uname\"",[37,69434,15261],{"class":2320},[37,69436,55],{"class":50},[37,69438,69432],{"class":185},[37,69440,59463],{"class":50},[37,69442,69443,69446,69448,69450,69452,69454,69456,69458,69461,69463,69465,69467],{"class":39,"line":256},[37,69444,69445],{"class":50},"    年龄：\u003C",[37,69447,54157],{"class":51636},[37,69449,54160],{"class":2320},[37,69451,55],{"class":50},[37,69453,63035],{"class":185},[37,69455,53822],{"class":2320},[37,69457,55],{"class":50},[37,69459,69460],{"class":185},"\"age\"",[37,69462,15261],{"class":2320},[37,69464,55],{"class":50},[37,69466,69460],{"class":185},[37,69468,59463],{"class":50},[37,69470,69471],{"class":39,"line":261},[37,69472,69473],{"class":50},"    性别:\n",[37,69475,69476,69478,69481,69483,69485,69488,69490,69492,69494],{"class":39,"line":267},[37,69477,51677],{"class":50},[37,69479,69480],{"class":51636},"select",[37,69482,15261],{"class":2320},[37,69484,55],{"class":50},[37,69486,69487],{"class":185},"\"gender\"",[37,69489,53822],{"class":2320},[37,69491,55],{"class":50},[37,69493,69487],{"class":185},[37,69495,51643],{"class":50},[37,69497,69498,69500,69503,69505,69507,69509,69512,69514],{"class":39,"line":283},[37,69499,55570],{"class":50},[37,69501,69502],{"class":51636},"option",[37,69504,66987],{"class":2320},[37,69506,55],{"class":50},[37,69508,10302],{"class":185},[37,69510,69511],{"class":50},">男\u003C\u002F",[37,69513,69502],{"class":51636},[37,69515,51643],{"class":50},[37,69517,69518,69520,69522,69524,69526,69528,69531,69533],{"class":39,"line":288},[37,69519,55570],{"class":50},[37,69521,69502],{"class":51636},[37,69523,66987],{"class":2320},[37,69525,55],{"class":50},[37,69527,10371],{"class":185},[37,69529,69530],{"class":50},">女\u003C\u002F",[37,69532,69502],{"class":51636},[37,69534,51643],{"class":50},[37,69536,69537,69539,69541],{"class":39,"line":294},[37,69538,52112],{"class":50},[37,69540,69480],{"class":51636},[37,69542,51643],{"class":50},[37,69544,69545,69548,69550,69552,69554,69556,69558,69560,69563,69565,69567,69569],{"class":39,"line":300},[37,69546,69547],{"class":50},"    薪资：\u003C",[37,69549,54157],{"class":51636},[37,69551,54160],{"class":2320},[37,69553,55],{"class":50},[37,69555,63035],{"class":185},[37,69557,53822],{"class":2320},[37,69559,55],{"class":50},[37,69561,69562],{"class":185},"\"salary\"",[37,69564,15261],{"class":2320},[37,69566,55],{"class":50},[37,69568,69562],{"class":185},[37,69570,59463],{"class":50},[37,69572,69573,69576,69578,69580,69582,69585,69587,69589,69591],{"class":39,"line":306},[37,69574,69575],{"class":50},"    就业城市：\u003C",[37,69577,69480],{"class":51636},[37,69579,15261],{"class":2320},[37,69581,55],{"class":50},[37,69583,69584],{"class":185},"\"city\"",[37,69586,53822],{"class":2320},[37,69588,55],{"class":50},[37,69590,69584],{"class":185},[37,69592,51643],{"class":50},[37,69594,69595,69597,69599,69601,69603,69606,69609,69611],{"class":39,"line":312},[37,69596,55570],{"class":50},[37,69598,69502],{"class":51636},[37,69600,66987],{"class":2320},[37,69602,55],{"class":50},[37,69604,69605],{"class":185},"\"北京\"",[37,69607,69608],{"class":50},">北京\u003C\u002F",[37,69610,69502],{"class":51636},[37,69612,51643],{"class":50},[37,69614,69615,69617,69619,69621,69623,69626,69629,69631],{"class":39,"line":317},[37,69616,55570],{"class":50},[37,69618,69502],{"class":51636},[37,69620,66987],{"class":2320},[37,69622,55],{"class":50},[37,69624,69625],{"class":185},"\"上海\"",[37,69627,69628],{"class":50},">上海\u003C\u002F",[37,69630,69502],{"class":51636},[37,69632,51643],{"class":50},[37,69634,69635,69637,69639,69641,69643,69646,69649,69651],{"class":39,"line":323},[37,69636,55570],{"class":50},[37,69638,69502],{"class":51636},[37,69640,66987],{"class":2320},[37,69642,55],{"class":50},[37,69644,69645],{"class":185},"\"广州\"",[37,69647,69648],{"class":50},">广州\u003C\u002F",[37,69650,69502],{"class":51636},[37,69652,51643],{"class":50},[37,69654,69655,69657,69659,69661,69663,69666,69669,69671],{"class":39,"line":337},[37,69656,55570],{"class":50},[37,69658,69502],{"class":51636},[37,69660,66987],{"class":2320},[37,69662,55],{"class":50},[37,69664,69665],{"class":185},"\"深圳\"",[37,69667,69668],{"class":50},">深圳\u003C\u002F",[37,69670,69502],{"class":51636},[37,69672,51643],{"class":50},[37,69674,69675,69677,69679,69681,69683,69686,69689,69691],{"class":39,"line":342},[37,69676,55570],{"class":50},[37,69678,69502],{"class":51636},[37,69680,66987],{"class":2320},[37,69682,55],{"class":50},[37,69684,69685],{"class":185},"\"曹县\"",[37,69687,69688],{"class":50},">曹县\u003C\u002F",[37,69690,69502],{"class":51636},[37,69692,51643],{"class":50},[37,69694,69695,69697,69699],{"class":39,"line":347},[37,69696,52112],{"class":50},[37,69698,69480],{"class":51636},[37,69700,51643],{"class":50},[37,69702,69703,69705,69707,69709,69711,69714,69717,69719],{"class":39,"line":352},[37,69704,51677],{"class":50},[37,69706,54223],{"class":51636},[37,69708,53822],{"class":2320},[37,69710,55],{"class":50},[37,69712,69713],{"class":185},"\"add\"",[37,69715,69716],{"class":50},">录入\u003C\u002F",[37,69718,54223],{"class":51636},[37,69720,51643],{"class":50},[37,69722,69723,69725,69727],{"class":39,"line":357},[37,69724,52753],{"class":50},[37,69726,66961],{"class":51636},[37,69728,51643],{"class":50},[37,69730,69731],{"class":39,"line":362},[37,69732,2757],{"emptyLinePlaceholder":454},[37,69734,69735,69737,69739,69742,69744],{"class":39,"line":367},[37,69736,52480],{"class":50},[37,69738,10],{"class":51636},[37,69740,69741],{"class":50},">就业榜\u003C\u002F",[37,69743,10],{"class":51636},[37,69745,51643],{"class":50},[37,69747,69748,69750,69752],{"class":39,"line":373},[37,69749,52480],{"class":50},[37,69751,661],{"class":51636},[37,69753,51643],{"class":50},[37,69755,69756,69758,69760],{"class":39,"line":392},[37,69757,51677],{"class":50},[37,69759,664],{"class":51636},[37,69761,51643],{"class":50},[37,69763,69764,69766,69768],{"class":39,"line":398},[37,69765,55570],{"class":50},[37,69767,667],{"class":51636},[37,69769,51643],{"class":50},[37,69771,69772,69774,69776,69779,69781],{"class":39,"line":409},[37,69773,55638],{"class":50},[37,69775,670],{"class":51636},[37,69777,69778],{"class":50},">序号\u003C\u002F",[37,69780,670],{"class":51636},[37,69782,51643],{"class":50},[37,69784,69785,69787,69789,69792,69794],{"class":39,"line":415},[37,69786,55638],{"class":50},[37,69788,670],{"class":51636},[37,69790,69791],{"class":50},">姓名\u003C\u002F",[37,69793,670],{"class":51636},[37,69795,51643],{"class":50},[37,69797,69798,69800,69802,69805,69807],{"class":39,"line":420},[37,69799,55638],{"class":50},[37,69801,670],{"class":51636},[37,69803,69804],{"class":50},">年龄\u003C\u002F",[37,69806,670],{"class":51636},[37,69808,51643],{"class":50},[37,69810,69811,69813,69815,69818,69820],{"class":39,"line":425},[37,69812,55638],{"class":50},[37,69814,670],{"class":51636},[37,69816,69817],{"class":50},">性别\u003C\u002F",[37,69819,670],{"class":51636},[37,69821,51643],{"class":50},[37,69823,69824,69826,69828,69831,69833],{"class":39,"line":431},[37,69825,55638],{"class":50},[37,69827,670],{"class":51636},[37,69829,69830],{"class":50},">薪资\u003C\u002F",[37,69832,670],{"class":51636},[37,69834,51643],{"class":50},[37,69836,69837,69839,69841,69844,69846],{"class":39,"line":436},[37,69838,55638],{"class":50},[37,69840,670],{"class":51636},[37,69842,69843],{"class":50},">就业城市\u003C\u002F",[37,69845,670],{"class":51636},[37,69847,51643],{"class":50},[37,69849,69850,69852,69854,69857,69859],{"class":39,"line":442},[37,69851,55638],{"class":50},[37,69853,670],{"class":51636},[37,69855,69856],{"class":50},">操作\u003C\u002F",[37,69858,670],{"class":51636},[37,69860,51643],{"class":50},[37,69862,69863,69865,69867],{"class":39,"line":8374},[37,69864,55743],{"class":50},[37,69866,667],{"class":51636},[37,69868,51643],{"class":50},[37,69870,69871,69873,69875],{"class":39,"line":8386},[37,69872,52112],{"class":50},[37,69874,664],{"class":51636},[37,69876,51643],{"class":50},[37,69878,69879,69881,69883],{"class":39,"line":8398},[37,69880,51677],{"class":50},[37,69882,708],{"class":51636},[37,69884,51643],{"class":50},[37,69886,69887],{"class":39,"line":10057},[37,69888,69889],{"class":43},"      \u003C!-- \n",[37,69891,69892],{"class":39,"line":10082},[37,69893,69894],{"class":43},"        \u003Ctr>\n",[37,69896,69897],{"class":39,"line":10105},[37,69898,69899],{"class":43},"          \u003Ctd>1001\u003C\u002Ftd>\n",[37,69901,69902],{"class":39,"line":10129},[37,69903,69904],{"class":43},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[37,69906,69907],{"class":39,"line":10134},[37,69908,69909],{"class":43},"          \u003Ctd>19\u003C\u002Ftd>\n",[37,69911,69912],{"class":39,"line":10139},[37,69913,69914],{"class":43},"          \u003Ctd>男\u003C\u002Ftd>\n",[37,69916,69917],{"class":39,"line":10144},[37,69918,69919],{"class":43},"          \u003Ctd>15000\u003C\u002Ftd>\n",[37,69921,69922],{"class":39,"line":10153},[37,69923,69924],{"class":43},"          \u003Ctd>上海\u003C\u002Ftd>\n",[37,69926,69927],{"class":39,"line":10158},[37,69928,69929],{"class":43},"          \u003Ctd>\n",[37,69931,69932],{"class":39,"line":10164},[37,69933,69934],{"class":43},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[37,69936,69937],{"class":39,"line":10185},[37,69938,69939],{"class":43},"          \u003C\u002Ftd>\n",[37,69941,69942],{"class":39,"line":10191},[37,69943,69944],{"class":43},"        \u003C\u002Ftr> \n",[37,69946,69947],{"class":39,"line":10205},[37,69948,69949],{"class":43},"        -->\n",[37,69951,69952,69954,69956],{"class":39,"line":10211},[37,69953,52112],{"class":50},[37,69955,708],{"class":51636},[37,69957,51643],{"class":50},[37,69959,69960,69962,69964],{"class":39,"line":10238},[37,69961,52753],{"class":50},[37,69963,661],{"class":51636},[37,69965,51643],{"class":50},[37,69967,69968,69970,69972],{"class":39,"line":10247},[37,69969,52480],{"class":50},[37,69971,52149],{"class":51636},[37,69973,51643],{"class":50},[37,69975,69976],{"class":39,"line":10253},[37,69977,60294],{"class":43},[37,69979,69980,69982,69985,69987,69989,69991,69993,69996],{"class":39,"line":10261},[37,69981,11562],{"class":54},[37,69983,69984],{"class":61}," uname",[37,69986,13905],{"class":54},[37,69988,54732],{"class":50},[37,69990,54735],{"class":2320},[37,69992,165],{"class":50},[37,69994,69995],{"class":185},"'.uname'",[37,69997,280],{"class":50},[37,69999,70000,70002,70004,70006,70008,70010,70012,70015],{"class":39,"line":10266},[37,70001,11562],{"class":54},[37,70003,16030],{"class":61},[37,70005,13905],{"class":54},[37,70007,54732],{"class":50},[37,70009,54735],{"class":2320},[37,70011,165],{"class":50},[37,70013,70014],{"class":185},"'.age'",[37,70016,280],{"class":50},[37,70018,70019,70021,70024,70026,70028,70030,70032,70035],{"class":39,"line":16945},[37,70020,11562],{"class":54},[37,70022,70023],{"class":61}," gender",[37,70025,13905],{"class":54},[37,70027,54732],{"class":50},[37,70029,54735],{"class":2320},[37,70031,165],{"class":50},[37,70033,70034],{"class":185},"'.gender'",[37,70036,280],{"class":50},[37,70038,70039,70041,70044,70046,70048,70050,70052,70055],{"class":39,"line":16951},[37,70040,11562],{"class":54},[37,70042,70043],{"class":61}," salary",[37,70045,13905],{"class":54},[37,70047,54732],{"class":50},[37,70049,54735],{"class":2320},[37,70051,165],{"class":50},[37,70053,70054],{"class":185},"'.salary'",[37,70056,280],{"class":50},[37,70058,70059,70061,70064,70066,70068,70070,70072,70075],{"class":39,"line":16974},[37,70060,11562],{"class":54},[37,70062,70063],{"class":61}," city",[37,70065,13905],{"class":54},[37,70067,54732],{"class":50},[37,70069,54735],{"class":2320},[37,70071,165],{"class":50},[37,70073,70074],{"class":185},"'.city'",[37,70076,280],{"class":50},[37,70078,70079,70081,70084,70086,70088,70090,70092,70095],{"class":39,"line":16980},[37,70080,11562],{"class":54},[37,70082,70083],{"class":61}," tbody",[37,70085,13905],{"class":54},[37,70087,54732],{"class":50},[37,70089,54735],{"class":2320},[37,70091,165],{"class":50},[37,70093,70094],{"class":185},"'tbody'",[37,70096,280],{"class":50},[37,70098,70099],{"class":39,"line":17003},[37,70100,2757],{"emptyLinePlaceholder":454},[37,70102,70103],{"class":39,"line":17017},[37,70104,70105],{"class":43},"    \u002F\u002F 获取所有带有name属性的元素\n",[37,70107,70108,70110,70113,70115,70117,70119,70121,70124],{"class":39,"line":17037},[37,70109,11562],{"class":54},[37,70111,70112],{"class":61}," items",[37,70114,13905],{"class":54},[37,70116,54732],{"class":50},[37,70118,56017],{"class":2320},[37,70120,165],{"class":50},[37,70122,70123],{"class":185},"'[name]'",[37,70125,280],{"class":50},[37,70127,70128],{"class":39,"line":17043},[37,70129,70130],{"class":43},"    \u002F\u002F 声明一个空的数组\n",[37,70132,70133,70135,70137,70139],{"class":39,"line":17054},[37,70134,11562],{"class":54},[37,70136,58031],{"class":61},[37,70138,13905],{"class":54},[37,70140,52174],{"class":50},[37,70142,70143],{"class":39,"line":17077},[37,70144,70145],{"class":43},"    \u002F\u002F 1.录入模块\n",[37,70147,70148],{"class":39,"line":17099},[37,70149,70150],{"class":43},"    \u002F\u002F 1.1这是一个表单提交事件\n",[37,70152,70153,70155,70158,70160,70162,70164,70166,70169],{"class":39,"line":17104},[37,70154,11562],{"class":54},[37,70156,70157],{"class":61}," info",[37,70159,13905],{"class":54},[37,70161,54732],{"class":50},[37,70163,54735],{"class":2320},[37,70165,165],{"class":50},[37,70167,70168],{"class":185},"'.info'",[37,70170,280],{"class":50},[37,70172,70173,70176,70178,70180,70183,70185,70187,70189,70191],{"class":39,"line":17110},[37,70174,70175],{"class":50},"    info.",[37,70177,58149],{"class":2320},[37,70179,165],{"class":50},[37,70181,70182],{"class":185},"'submit'",[37,70184,12776],{"class":50},[37,70186,54785],{"class":54},[37,70188,2027],{"class":50},[37,70190,599],{"class":159},[37,70192,12783],{"class":50},[37,70194,70195],{"class":39,"line":17124},[37,70196,70197],{"class":43},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[37,70199,70200,70203,70206],{"class":39,"line":17137},[37,70201,70202],{"class":50},"      e.",[37,70204,70205],{"class":2320},"preventDefault",[37,70207,2333],{"class":50},[37,70209,70210],{"class":39,"line":17142},[37,70211,60348],{"class":43},[37,70213,70214],{"class":39,"line":17156},[37,70215,2757],{"emptyLinePlaceholder":454},[37,70217,70218],{"class":39,"line":17161},[37,70219,70220],{"class":43},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[37,70222,70223],{"class":39,"line":17167},[37,70224,70225],{"class":43},"      \u002F\u002F 先遍历循环\n",[37,70227,70228,70230,70232,70234,70236,70238,70240,70242,70244,70247,70249,70251,70253],{"class":39,"line":17172},[37,70229,52620],{"class":54},[37,70231,2027],{"class":50},[37,70233,52183],{"class":54},[37,70235,9779],{"class":50},[37,70237,55],{"class":54},[37,70239,4443],{"class":61},[37,70241,9786],{"class":50},[37,70243,1418],{"class":54},[37,70245,70246],{"class":50}," items.",[37,70248,52304],{"class":61},[37,70250,3564],{"class":50},[37,70252,2649],{"class":54},[37,70254,12783],{"class":50},[37,70256,70257,70259,70262,70264,70267],{"class":39,"line":17186},[37,70258,2854],{"class":54},[37,70260,70261],{"class":50}," (items[i].value ",[37,70263,54822],{"class":54},[37,70265,70266],{"class":185}," ''",[37,70268,12783],{"class":50},[37,70270,70271,70274,70277,70279,70282],{"class":39,"line":17191},[37,70272,70273],{"class":54},"          return",[37,70275,70276],{"class":2320}," alert",[37,70278,165],{"class":50},[37,70280,70281],{"class":185},"'输入内容不能为空'",[37,70283,280],{"class":50},[37,70285,70286],{"class":39,"line":17196},[37,70287,2886],{"class":50},[37,70289,70290],{"class":39,"line":17210},[37,70291,52734],{"class":50},[37,70293,70294],{"class":39,"line":17222},[37,70295,2757],{"emptyLinePlaceholder":454},[37,70297,70298],{"class":39,"line":17227},[37,70299,70300],{"class":43},"      \u002F\u002F 创建新的对象\n",[37,70302,70303,70305,70308,70310],{"class":39,"line":17240},[37,70304,58564],{"class":54},[37,70306,70307],{"class":61}," obj",[37,70309,13905],{"class":54},[37,70311,15913],{"class":50},[37,70313,70314,70317,70319,70321,70323],{"class":39,"line":17245},[37,70315,70316],{"class":50},"        stuID: arr.",[37,70318,52304],{"class":61},[37,70320,45903],{"class":54},[37,70322,25460],{"class":61},[37,70324,31805],{"class":50},[37,70326,70327],{"class":39,"line":17250},[37,70328,70329],{"class":50},"        uname: uname.value,\n",[37,70331,70332],{"class":39,"line":17255},[37,70333,70334],{"class":50},"        age: age.value,\n",[37,70336,70337],{"class":39,"line":17268},[37,70338,70339],{"class":50},"        gender: gender.value,\n",[37,70341,70342],{"class":39,"line":17273},[37,70343,70344],{"class":50},"        salary: salary.value,\n",[37,70346,70347],{"class":39,"line":32971},[37,70348,70349],{"class":50},"        city: city.value\n",[37,70351,70352],{"class":39,"line":32977},[37,70353,52734],{"class":50},[37,70355,70356],{"class":39,"line":32983},[37,70357,70358],{"class":43},"      \u002F\u002F console.log(obj);\n",[37,70360,70361],{"class":39,"line":32989},[37,70362,70363],{"class":43},"      \u002F\u002F 追加到数组里面\n",[37,70365,70366,70368,70370],{"class":39,"line":32995},[37,70367,58343],{"class":50},[37,70369,52220],{"class":2320},[37,70371,70372],{"class":50},"(obj)\n",[37,70374,70375],{"class":39,"line":33006},[37,70376,70377],{"class":43},"      \u002F\u002F console.log(arr);\n",[37,70379,70380],{"class":39,"line":33012},[37,70381,70382],{"class":43},"      \u002F\u002F 清空表单  reset重置表单\n",[37,70384,70385,70388,70390,70393],{"class":39,"line":33032},[37,70386,70387],{"class":61},"      this",[37,70389,1068],{"class":50},[37,70391,70392],{"class":2320},"reset",[37,70394,2333],{"class":50},[37,70396,70397],{"class":39,"line":33038},[37,70398,70399],{"class":43},"      \u002F\u002F 调用渲染函数\n",[37,70401,70402,70405],{"class":39,"line":33049},[37,70403,70404],{"class":2320},"      render",[37,70406,2333],{"class":50},[37,70408,70409],{"class":39,"line":33055},[37,70410,33798],{"class":50},[37,70412,70413],{"class":39,"line":33061},[37,70414,70415],{"class":43},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[37,70417,70418,70421,70424],{"class":39,"line":33067},[37,70419,70420],{"class":54},"    function",[37,70422,70423],{"class":2320}," render",[37,70425,11194],{"class":50},[37,70427,70428],{"class":39,"line":33073},[37,70429,70430],{"class":43},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[37,70432,70433,70436,70438],{"class":39,"line":33079},[37,70434,70435],{"class":50},"      tbody.innerHTML ",[37,70437,55],{"class":54},[37,70439,70440],{"class":185}," ''\n",[37,70442,70443],{"class":39,"line":33085},[37,70444,70445],{"class":43},"      \u002F\u002F 遍历数组\n",[37,70447,70448,70450,70452,70454,70456,70458,70460,70462,70464,70466,70468,70470,70472],{"class":39,"line":33091},[37,70449,52620],{"class":54},[37,70451,2027],{"class":50},[37,70453,52183],{"class":54},[37,70455,9779],{"class":50},[37,70457,55],{"class":54},[37,70459,4443],{"class":61},[37,70461,9786],{"class":50},[37,70463,1418],{"class":54},[37,70465,52301],{"class":50},[37,70467,52304],{"class":61},[37,70469,3564],{"class":50},[37,70471,2649],{"class":54},[37,70473,12783],{"class":50},[37,70475,70476,70478,70481,70483,70485,70488,70490,70493],{"class":39,"line":33111},[37,70477,61606],{"class":54},[37,70479,70480],{"class":61}," tr",[37,70482,13905],{"class":54},[37,70484,54732],{"class":50},[37,70486,70487],{"class":2320},"createElement",[37,70489,165],{"class":50},[37,70491,70492],{"class":185},"'tr'",[37,70494,280],{"class":50},[37,70496,70497,70500,70502],{"class":39,"line":33117},[37,70498,70499],{"class":50},"        tr.innerHTML ",[37,70501,55],{"class":54},[37,70503,70504],{"class":185}," `\n",[37,70506,70507,70510,70512,70514,70516,70519,70522],{"class":39,"line":33133},[37,70508,70509],{"class":185},"        \u003Ctd>${",[37,70511,4230],{"class":50},[37,70513,1399],{"class":185},[37,70515,954],{"class":50},[37,70517,70518],{"class":185},"].",[37,70520,70521],{"class":50},"stuID",[37,70523,70524],{"class":185},"}\u003C\u002Ftd>\n",[37,70526,70527,70530,70532,70534,70536,70538,70541],{"class":39,"line":33139},[37,70528,70529],{"class":185},"          \u003Ctd>${",[37,70531,4230],{"class":50},[37,70533,1399],{"class":185},[37,70535,954],{"class":50},[37,70537,70518],{"class":185},[37,70539,70540],{"class":50},"uname",[37,70542,70524],{"class":185},[37,70544,70545,70547,70549,70551,70553,70555,70558],{"class":39,"line":33153},[37,70546,70529],{"class":185},[37,70548,4230],{"class":50},[37,70550,1399],{"class":185},[37,70552,954],{"class":50},[37,70554,70518],{"class":185},[37,70556,70557],{"class":50},"age",[37,70559,70524],{"class":185},[37,70561,70562,70564,70566,70568,70570,70572,70575],{"class":39,"line":33159},[37,70563,70529],{"class":185},[37,70565,4230],{"class":50},[37,70567,1399],{"class":185},[37,70569,954],{"class":50},[37,70571,70518],{"class":185},[37,70573,70574],{"class":50},"gender",[37,70576,70524],{"class":185},[37,70578,70579,70581,70583,70585,70587,70589,70592],{"class":39,"line":33174},[37,70580,70529],{"class":185},[37,70582,4230],{"class":50},[37,70584,1399],{"class":185},[37,70586,954],{"class":50},[37,70588,70518],{"class":185},[37,70590,70591],{"class":50},"salary",[37,70593,70524],{"class":185},[37,70595,70596,70598,70600,70602,70604,70606,70609],{"class":39,"line":33180},[37,70597,70529],{"class":185},[37,70599,4230],{"class":50},[37,70601,1399],{"class":185},[37,70603,954],{"class":50},[37,70605,70518],{"class":185},[37,70607,70608],{"class":50},"city",[37,70610,70524],{"class":185},[37,70612,70613],{"class":39,"line":33189},[37,70614,69929],{"class":185},[37,70616,70617,70620,70622],{"class":39,"line":33195},[37,70618,70619],{"class":185},"            \u003Ca href=\"javascript:\" data-id=${",[37,70621,954],{"class":50},[37,70623,70624],{"class":185},"}>删除\u003C\u002Fa>\n",[37,70626,70627],{"class":39,"line":33204},[37,70628,70629],{"class":185},"          \u003C\u002Ftd> \n",[37,70631,70632],{"class":39,"line":33210},[37,70633,70634],{"class":185},"          `\n",[37,70636,70637],{"class":39,"line":33216},[37,70638,70639],{"class":43},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[37,70641,70642,70645,70648],{"class":39,"line":33225},[37,70643,70644],{"class":50},"        tbody.",[37,70646,70647],{"class":2320},"appendChild",[37,70649,70650],{"class":50},"(tr)\n",[37,70652,70653],{"class":39,"line":33231},[37,70654,52734],{"class":50},[37,70656,70657],{"class":39,"line":33242},[37,70658,2544],{"class":50},[37,70660,70661],{"class":39,"line":33248},[37,70662,2757],{"emptyLinePlaceholder":454},[37,70664,70665],{"class":39,"line":33267},[37,70666,70667],{"class":43},"    \u002F\u002F 3.删除委托\n",[37,70669,70670],{"class":39,"line":33273},[37,70671,70672],{"class":43},"    \u002F\u002F 3.1 事件委托 tbody\n",[37,70674,70675,70678,70680,70682,70684,70686,70688,70690,70692],{"class":39,"line":33284},[37,70676,70677],{"class":50},"    tbody.",[37,70679,58149],{"class":2320},[37,70681,165],{"class":50},[37,70683,58154],{"class":185},[37,70685,12776],{"class":50},[37,70687,54785],{"class":54},[37,70689,2027],{"class":50},[37,70691,599],{"class":159},[37,70693,12783],{"class":50},[37,70695,70696,70698,70700,70702,70704],{"class":39,"line":33290},[37,70697,54816],{"class":54},[37,70699,67370],{"class":50},[37,70701,54822],{"class":54},[37,70703,68592],{"class":185},[37,70705,12783],{"class":50},[37,70707,70708],{"class":39,"line":33310},[37,70709,70710],{"class":43},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[37,70712,70713],{"class":39,"line":33326},[37,70714,70715],{"class":43},"        \u002F\u002F console.log(e.target.dataset.id);\n",[37,70717,70718],{"class":39,"line":33332},[37,70719,70720],{"class":43},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[37,70722,70723,70726,70728,70731,70733],{"class":39,"line":33346},[37,70724,70725],{"class":50},"        arr.",[37,70727,58346],{"class":2320},[37,70729,70730],{"class":50},"(e.target.dataset.id, ",[37,70732,332],{"class":61},[37,70734,280],{"class":50},[37,70736,70737],{"class":39,"line":33352},[37,70738,70739],{"class":43},"        \u002F\u002F 重新渲染一次\n",[37,70741,70742,70745],{"class":39,"line":33358},[37,70743,70744],{"class":2320},"        render",[37,70746,2333],{"class":50},[37,70748,70749],{"class":39,"line":33369},[37,70750,52734],{"class":50},[37,70752,70753],{"class":39,"line":33375},[37,70754,33798],{"class":50},[37,70756,70757,70759,70761],{"class":39,"line":33381},[37,70758,52753],{"class":50},[37,70760,52149],{"class":51636},[37,70762,51643],{"class":50},[37,70764,70765],{"class":39,"line":33391},[37,70766,2757],{"emptyLinePlaceholder":454},[37,70768,70769,70771,70773],{"class":39,"line":33397},[37,70770,52121],{"class":50},[37,70772,52136],{"class":51636},[37,70774,51643],{"class":50},[37,70776,70777],{"class":39,"line":33408},[37,70778,2757],{"emptyLinePlaceholder":454},[37,70780,70781,70783,70785],{"class":39,"line":33414},[37,70782,52121],{"class":50},[37,70784,50971],{"class":51636},[37,70786,51643],{"class":50},[14,70788,70789],{},"样式：",[27,70791,70795],{"className":70792,"code":70793,"language":70794,"meta":32,"style":32},"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",[34,70796,70797,70802,70812,70821,70825,70829,70834,70844,70849,70853,70858,70868,70873,70882,70886,70890,70895,70900,70910,70920,70925,70929,70934,70943,70953,70958,70968,70978,70982,70987,70995,70999,71004,71009,71014,71022,71031,71035,71040,71049,71053,71058,71067,71071,71076,71085,71094,71102,71106,71111,71120,71130,71139,71149,71155,71164,71174,71184,71188,71193,71202,71210,71220,71228,71237,71246,71256,71264,71268,71273,71282],{"__ignoreMap":32},[37,70798,70799],{"class":39,"line":40},[37,70800,70801],{"class":50},"* {\n",[37,70803,70804,70807,70809],{"class":39,"line":47},[37,70805,70806],{"class":51636},"  margin",[37,70808,51773],{"class":50},[37,70810,70811],{"class":185},"0;\n",[37,70813,70814,70817,70819],{"class":39,"line":104},[37,70815,70816],{"class":185},"  padding",[37,70818,51773],{"class":50},[37,70820,70811],{"class":185},[37,70822,70823],{"class":39,"line":113},[37,70824,1941],{"class":50},[37,70826,70827],{"class":39,"line":189},[37,70828,2757],{"emptyLinePlaceholder":454},[37,70830,70831],{"class":39,"line":195},[37,70832,70833],{"class":185},"a {\n",[37,70835,70836,70839,70841],{"class":39,"line":201},[37,70837,70838],{"class":51636},"  text-decoration",[37,70840,51773],{"class":50},[37,70842,70843],{"class":185},"none;\n",[37,70845,70846],{"class":39,"line":207},[37,70847,70848],{"class":185},"  color:#721c24;\n",[37,70850,70851],{"class":39,"line":213},[37,70852,1941],{"class":50},[37,70854,70855],{"class":39,"line":218},[37,70856,70857],{"class":185},"h1 {\n",[37,70859,70860,70863,70865],{"class":39,"line":227},[37,70861,70862],{"class":51636},"  text-align",[37,70864,51773],{"class":50},[37,70866,70867],{"class":185},"center;\n",[37,70869,70870],{"class":39,"line":232},[37,70871,70872],{"class":185},"  color:#333;\n",[37,70874,70875,70877,70879],{"class":39,"line":238},[37,70876,70806],{"class":51636},[37,70878,51773],{"class":50},[37,70880,70881],{"class":185},"20px 0;\n",[37,70883,70884],{"class":39,"line":244},[37,70885,3024],{"class":50},[37,70887,70888],{"class":39,"line":250},[37,70889,1941],{"class":50},[37,70891,70892],{"class":39,"line":256},[37,70893,70894],{"class":185},"table {\n",[37,70896,70897],{"class":39,"line":261},[37,70898,70899],{"class":185},"  margin:0 auto;\n",[37,70901,70902,70905,70907],{"class":39,"line":267},[37,70903,70904],{"class":51636},"  width",[37,70906,51773],{"class":50},[37,70908,70909],{"class":185},"800px;\n",[37,70911,70912,70915,70917],{"class":39,"line":283},[37,70913,70914],{"class":51636},"  border-collapse",[37,70916,51773],{"class":50},[37,70918,70919],{"class":185},"collapse;\n",[37,70921,70922],{"class":39,"line":288},[37,70923,70924],{"class":185},"  color:#004085;\n",[37,70926,70927],{"class":39,"line":294},[37,70928,1941],{"class":50},[37,70930,70931],{"class":39,"line":300},[37,70932,70933],{"class":185},"th {\n",[37,70935,70936,70938,70940],{"class":39,"line":306},[37,70937,70816],{"class":51636},[37,70939,51773],{"class":50},[37,70941,70942],{"class":185},"10px;\n",[37,70944,70945,70948,70950],{"class":39,"line":312},[37,70946,70947],{"class":51636},"  background",[37,70949,51773],{"class":50},[37,70951,70952],{"class":43},"#cfe5ff;\n",[37,70954,70955],{"class":39,"line":317},[37,70956,70957],{"class":50},"  \n",[37,70959,70960,70963,70965],{"class":39,"line":323},[37,70961,70962],{"class":51636},"  font-size",[37,70964,51773],{"class":50},[37,70966,70967],{"class":185},"20px;\n",[37,70969,70970,70973,70975],{"class":39,"line":337},[37,70971,70972],{"class":51636},"  font-weight",[37,70974,51773],{"class":50},[37,70976,70977],{"class":185},"400;\n",[37,70979,70980],{"class":39,"line":342},[37,70981,1941],{"class":50},[37,70983,70984],{"class":39,"line":347},[37,70985,70986],{"class":185},"td,th {\n",[37,70988,70989,70992],{"class":39,"line":352},[37,70990,70991],{"class":185},"  border:1px solid",[37,70993,70994],{"class":43}," #b8daff;\n",[37,70996,70997],{"class":39,"line":357},[37,70998,1941],{"class":50},[37,71000,71001],{"class":39,"line":362},[37,71002,71003],{"class":185},"td {\n",[37,71005,71006],{"class":39,"line":367},[37,71007,71008],{"class":185},"  padding:10px;\n",[37,71010,71011],{"class":39,"line":373},[37,71012,71013],{"class":185},"  color:#666;\n",[37,71015,71016,71018,71020],{"class":39,"line":392},[37,71017,70862],{"class":51636},[37,71019,51773],{"class":50},[37,71021,70867],{"class":185},[37,71023,71024,71026,71028],{"class":39,"line":398},[37,71025,70962],{"class":51636},[37,71027,51773],{"class":50},[37,71029,71030],{"class":185},"16px;\n",[37,71032,71033],{"class":39,"line":409},[37,71034,1941],{"class":50},[37,71036,71037],{"class":39,"line":415},[37,71038,71039],{"class":185},"tbody tr {\n",[37,71041,71042,71044,71046],{"class":39,"line":420},[37,71043,70947],{"class":51636},[37,71045,51773],{"class":50},[37,71047,71048],{"class":43},"#fff;\n",[37,71050,71051],{"class":39,"line":425},[37,71052,1941],{"class":50},[37,71054,71055],{"class":39,"line":431},[37,71056,71057],{"class":185},"tbody tr:hover {\n",[37,71059,71060,71062,71064],{"class":39,"line":436},[37,71061,70947],{"class":51636},[37,71063,51773],{"class":50},[37,71065,71066],{"class":43},"#e1ecf8;\n",[37,71068,71069],{"class":39,"line":442},[37,71070,1941],{"class":50},[37,71072,71073],{"class":39,"line":8374},[37,71074,71075],{"class":185},".info {\n",[37,71077,71078,71080,71082],{"class":39,"line":8386},[37,71079,70904],{"class":51636},[37,71081,51773],{"class":50},[37,71083,71084],{"class":185},"900px;\n",[37,71086,71087,71089,71091],{"class":39,"line":8398},[37,71088,70806],{"class":51636},[37,71090,51773],{"class":50},[37,71092,71093],{"class":185},"50px auto;\n",[37,71095,71096,71098,71100],{"class":39,"line":10057},[37,71097,70862],{"class":51636},[37,71099,51773],{"class":50},[37,71101,70867],{"class":185},[37,71103,71104],{"class":39,"line":10082},[37,71105,1941],{"class":50},[37,71107,71108],{"class":39,"line":10105},[37,71109,71110],{"class":185},".info  input, .info select {\n",[37,71112,71113,71115,71117],{"class":39,"line":10129},[37,71114,70904],{"class":51636},[37,71116,51773],{"class":50},[37,71118,71119],{"class":185},"80px;\n",[37,71121,71122,71125,71127],{"class":39,"line":10134},[37,71123,71124],{"class":51636},"  height",[37,71126,51773],{"class":50},[37,71128,71129],{"class":185},"27px;\n",[37,71131,71132,71135,71137],{"class":39,"line":10139},[37,71133,71134],{"class":51636},"  outline",[37,71136,51773],{"class":50},[37,71138,70843],{"class":185},[37,71140,71141,71144,71146],{"class":39,"line":10144},[37,71142,71143],{"class":51636},"  border-radius",[37,71145,51773],{"class":50},[37,71147,71148],{"class":185},"5px;\n",[37,71150,71151,71153],{"class":39,"line":10153},[37,71152,70991],{"class":185},[37,71154,70994],{"class":43},[37,71156,71157,71160,71162],{"class":39,"line":10158},[37,71158,71159],{"class":51636},"  padding-left",[37,71161,51773],{"class":50},[37,71163,71148],{"class":185},[37,71165,71166,71169,71171],{"class":39,"line":10164},[37,71167,71168],{"class":51636},"  box-sizing",[37,71170,51773],{"class":50},[37,71172,71173],{"class":185},"border-box;\n",[37,71175,71176,71179,71181],{"class":39,"line":10185},[37,71177,71178],{"class":51636},"  margin-right",[37,71180,51773],{"class":50},[37,71182,71183],{"class":185},"15px;\n",[37,71185,71186],{"class":39,"line":10191},[37,71187,1941],{"class":50},[37,71189,71190],{"class":39,"line":10205},[37,71191,71192],{"class":185},".info button {\n",[37,71194,71195,71197,71199],{"class":39,"line":10211},[37,71196,70904],{"class":51636},[37,71198,51773],{"class":50},[37,71200,71201],{"class":185},"60px;\n",[37,71203,71204,71206,71208],{"class":39,"line":10238},[37,71205,71124],{"class":51636},[37,71207,51773],{"class":50},[37,71209,71129],{"class":185},[37,71211,71212,71215,71217],{"class":39,"line":10247},[37,71213,71214],{"class":51636},"  background-color",[37,71216,51773],{"class":50},[37,71218,71219],{"class":43},"#004085;\n",[37,71221,71222,71224,71226],{"class":39,"line":10253},[37,71223,71134],{"class":51636},[37,71225,51773],{"class":50},[37,71227,70843],{"class":185},[37,71229,71230,71233,71235],{"class":39,"line":10261},[37,71231,71232],{"class":51636},"  border",[37,71234,51773],{"class":50},[37,71236,70811],{"class":185},[37,71238,71239,71242,71244],{"class":39,"line":10266},[37,71240,71241],{"class":51636},"  color",[37,71243,51773],{"class":50},[37,71245,71048],{"class":43},[37,71247,71248,71251,71253],{"class":39,"line":16945},[37,71249,71250],{"class":51636},"  cursor",[37,71252,51773],{"class":50},[37,71254,71255],{"class":185},"pointer;\n",[37,71257,71258,71260,71262],{"class":39,"line":16951},[37,71259,71143],{"class":51636},[37,71261,51773],{"class":50},[37,71263,71148],{"class":185},[37,71265,71266],{"class":39,"line":16974},[37,71267,1941],{"class":50},[37,71269,71270],{"class":39,"line":16980},[37,71271,71272],{"class":185},".info .age {\n",[37,71274,71275,71277,71279],{"class":39,"line":17003},[37,71276,70904],{"class":51636},[37,71278,51773],{"class":50},[37,71280,71281],{"class":185},"50px;\n",[37,71283,71284],{"class":39,"line":17017},[37,71285,1941],{"class":50},[14,71287,71288],{},"思路：",[14,71290,71291],{},[1838,71292],{"alt":32,"src":71293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71295,71296],{},[1838,71297],{"alt":32,"src":71298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71300,71301],{},[1838,71302],{"alt":32,"src":71303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[498,71305,71307],{"id":71306},"_3315-重绘回流","3.3.15 重绘回流",[14,71309,71310],{},[1838,71311],{"alt":32,"src":71312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71314,71315],{},[1838,71316],{"alt":32,"src":71317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71319,71320],{},[1838,71321],{"alt":32,"src":71322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[469,71324,71326],{"id":71325},"_34-bom","3.4 BOM",[14,71328,71329],{},[1838,71330],{"alt":32,"src":71331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71333,71334],{},"平时写的document省略了window而已，实际上是window.document",[14,71336,71337],{},"函数也是这样，调用的时候实际为window.fn()",[14,71339,71340],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71342,71343],{},"window大部分情况下可以省略",[498,71345,71347],{"id":71346},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71349,71350],{},"只执行一次",[14,71352,71353],{},[1838,71354],{"alt":32,"src":71355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71357,71358],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71360,71361],{},[1838,71362],{"alt":32,"src":71363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[498,71365,71367],{"id":71366},"_342-js执行机制","3.4.2 JS执行机制",[14,71369,71370],{},[1838,71371],{"alt":32,"src":71372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71374,71375],{},"两个的结果都是1111 3333 2222",[14,71377,71378],{},[1838,71379],{"alt":32,"src":71380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71382,71383],{},[1838,71384],{"alt":32,"src":71385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71387,71388],{},[1838,71389],{"alt":32,"src":71390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71392,71393],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71395,71396],{},"工作流程：",[14,71398,71399],{},[1838,71400],{"alt":32,"src":71401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71403,71404],{},[1838,71405],{"alt":32,"src":71406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71408,71409],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71411,71412],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[498,71414,71416],{"id":71415},"_343-location对象","3.4.3 location对象",[14,71418,71419],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71421,71422],{},[1838,71423],{"alt":32,"src":71424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71426,71427],{},"href可以跳转页面",[481,71429,71430],{},[484,71431,71432],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71434,71435],{},"search得到提交信息之后网站后边的地址",[14,71437,71438],{},[1838,71439],{"alt":32,"src":71440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71442,71443],{},[1838,71444],{"alt":32,"src":71445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[481,71447,71448],{"start":47},[484,71449,71450],{},"hash:这个获取单页面应用#后边的地址",[14,71452,71453],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71455,71456],{},[1838,71457],{"alt":32,"src":71458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[27,71460,71462],{"className":53403,"code":71461,"language":53405,"meta":32,"style":32},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[34,71463,71464,71484,71504],{"__ignoreMap":32},[37,71465,71466,71468,71470,71472,71474,71477,71480,71482],{"class":39,"line":40},[37,71467,52480],{"class":50},[37,71469,51],{"class":51636},[37,71471,61393],{"class":2320},[37,71473,55],{"class":50},[37,71475,71476],{"class":185},"\"#\u002Fmy\"",[37,71478,71479],{"class":50},">我的\u003C\u002F",[37,71481,51],{"class":51636},[37,71483,51643],{"class":50},[37,71485,71486,71488,71490,71492,71494,71497,71500,71502],{"class":39,"line":47},[37,71487,52480],{"class":50},[37,71489,51],{"class":51636},[37,71491,61393],{"class":2320},[37,71493,55],{"class":50},[37,71495,71496],{"class":185},"\"#\u002Ffriend\"",[37,71498,71499],{"class":50},">关注\u003C\u002F",[37,71501,51],{"class":51636},[37,71503,51643],{"class":50},[37,71505,71506,71508,71510,71512,71514,71517,71520,71522],{"class":39,"line":104},[37,71507,52480],{"class":50},[37,71509,51],{"class":51636},[37,71511,61393],{"class":2320},[37,71513,55],{"class":50},[37,71515,71516],{"class":185},"\"#\u002Fdownload\"",[37,71518,71519],{"class":50},">下载\u003C\u002F",[37,71521,51],{"class":51636},[37,71523,51643],{"class":50},[14,71525,71526],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[481,71528,71529],{"start":104},[484,71530,71531,71532,71534,71535,71537],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54052,71533],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54052,71536],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[498,71539,71541],{"id":71540},"_345-navigator对象","3.4.5 navigator对象",[14,71543,71544],{},[1838,71545],{"alt":32,"src":71546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[27,71548,71552],{"className":71549,"code":71550,"language":71551,"meta":32,"style":32},"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",[34,71553,71554,71559,71570,71582,71587,71638,71679,71684,71697,71709,71714],{"__ignoreMap":32},[37,71555,71556],{"class":39,"line":40},[37,71557,71558],{"class":43},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[37,71560,71561,71563,71565,71567],{"class":39,"line":47},[37,71562,748],{"class":54},[37,71564,165],{"class":50},[37,71566,54785],{"class":54},[37,71568,71569],{"class":50}," () { \n",[37,71571,71572,71574,71577,71579],{"class":39,"line":104},[37,71573,7140],{"class":54},[37,71575,71576],{"class":61}," userAgent",[37,71578,13905],{"class":54},[37,71580,71581],{"class":50}," navigator.userAgent \n",[37,71583,71584],{"class":39,"line":113},[37,71585,71586],{"class":43},"\u002F\u002F 验证是否为Android或iPhone \n",[37,71588,71589,71591,71594,71596,71599,71602,71604,71606,71609,71611,71614,71618,71620,71622,71624,71627,71629,71631,71633,71635],{"class":39,"line":189},[37,71590,7140],{"class":54},[37,71592,71593],{"class":61}," android",[37,71595,13905],{"class":54},[37,71597,71598],{"class":50}," userAgent.",[37,71600,71601],{"class":2320},"match",[37,71603,165],{"class":50},[37,71605,1094],{"class":185},[37,71607,71608],{"class":48313},"(Android);",[37,71610,1494],{"class":54},[37,71612,71613],{"class":61},"[\\s",[37,71615,71617],{"class":71616},"snhLl","\\\u002F",[37,71619,1448],{"class":61},[37,71621,993],{"class":54},[37,71623,165],{"class":48313},[37,71625,71626],{"class":61},"[\\d.]",[37,71628,993],{"class":54},[37,71630,138],{"class":48313},[37,71632,1494],{"class":54},[37,71634,1094],{"class":185},[37,71636,71637],{"class":50},") \n",[37,71639,71640,71642,71645,71647,71649,71651,71653,71655,71658,71661,71664,71666,71668,71671,71673,71675,71677],{"class":39,"line":195},[37,71641,7140],{"class":54},[37,71643,71644],{"class":61}," iphone",[37,71646,13905],{"class":54},[37,71648,71598],{"class":50},[37,71650,71601],{"class":2320},[37,71652,165],{"class":50},[37,71654,1094],{"class":185},[37,71656,71657],{"class":48313},"(iPhone",[37,71659,71660],{"class":61},"\\s",[37,71662,71663],{"class":48313},"OS)",[37,71665,71660],{"class":61},[37,71667,165],{"class":48313},[37,71669,71670],{"class":61},"[\\d_]",[37,71672,993],{"class":54},[37,71674,138],{"class":48313},[37,71676,1094],{"class":185},[37,71678,71637],{"class":50},[37,71680,71681],{"class":39,"line":201},[37,71682,71683],{"class":43},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[37,71685,71686,71688,71691,71694],{"class":39,"line":207},[37,71687,1907],{"class":54},[37,71689,71690],{"class":50}," (android ",[37,71692,71693],{"class":54},"||",[37,71695,71696],{"class":50}," iphone) { \n",[37,71698,71699,71702,71704,71707],{"class":39,"line":213},[37,71700,71701],{"class":50},"location.href ",[37,71703,55],{"class":54},[37,71705,71706],{"class":185}," 'http:\u002F\u002Fm.itcast.cn'",[37,71708,3024],{"class":50},[37,71710,71711],{"class":39,"line":218},[37,71712,71713],{"class":50},"} \n",[37,71715,71716],{"class":39,"line":227},[37,71717,71718],{"class":50},"})()\n",[498,71720,71722],{"id":71721},"_346-histroy对象","3.4.6 histroy对象",[14,71724,71725],{},[1838,71726],{"alt":32,"src":71727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71729,71730],{},"浏览器地址的前进与后退!!!",[14,71732,71733],{},"history.back() 等效于 history.go(-1)",[14,71735,71736],{},"history.forward() 等效于 history.go(1)",[469,71738,71740],{"id":71739},"_35-本地存储","3.5 本地存储",[481,71742,71743,71746,71749],{},[484,71744,71745],{},"数据存储在用户浏览器中",[484,71747,71748],{},"设置、读取方便、甚至页面刷新不丢失数据",[484,71750,71751],{},"容量较大，sessionStorage和localStorage约 5M 左右",[498,71753,71755],{"id":71754},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71757,71758],{},"只能存储字符串",[14,71760,71761],{},[1838,71762],{"alt":32,"src":71763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71765,71766],{},[1838,71767],{"alt":32,"src":71768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71770,71771],{},"键值对要加引号,不然就会当变量来看了",[14,71773,71774],{},"localStorage.setItem('uname', 'pink')",[14,71776,71777],{},"刷新之后信息不再丢失",[14,71779,71780],{},"操作key,value会跟着变",[14,71782,71783],{},"删除只删除键就可以,即名字",[14,71785,71774],{},[14,71787,71788],{},"改:",[14,71790,71791],{},"localStorage.setItem('uname','red')",[14,71793,71794],{},"有这个键就是改,没有这个键就是改",[14,71796,71797],{},[1838,71798],{"alt":32,"src":71799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71801,71802],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71804,71805],{},[1838,71806],{"alt":32,"src":71807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71809,71810],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[498,71812,71814],{"id":71813},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71816,71817],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71819,71820],{},"特性:",[481,71822,71823,71826,71829,71832],{},[484,71824,71825],{},"生命周期为关闭浏览器窗口",[484,71827,71828],{},"在同一个窗口(页面)下数据可以共享",[484,71830,71831],{},"以键值对的形式存储使用",[484,71833,71834],{},"用法跟localStorage 基本相同",[498,71836,71838],{"id":71837},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71840,71841],{},"本地只能存储字符串,无法直接存储复杂数据类型",[27,71843,71845],{"className":53403,"code":71844,"language":53405,"meta":32,"style":32},"\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",[34,71846,71847,71855,71860,71865,71870,71875,71879,71884,71889],{"__ignoreMap":32},[37,71848,71849,71851,71853],{"class":39,"line":40},[37,71850,1418],{"class":50},[37,71852,52149],{"class":51636},[37,71854,51643],{"class":50},[37,71856,71857],{"class":39,"line":47},[37,71858,71859],{"class":50},"    const obj = {\n",[37,71861,71862],{"class":39,"line":104},[37,71863,71864],{"class":50},"      uname: 'pink老师',\n",[37,71866,71867],{"class":39,"line":113},[37,71868,71869],{"class":50},"      age: 18,\n",[37,71871,71872],{"class":39,"line":189},[37,71873,71874],{"class":50},"      gender: '女'\n",[37,71876,71877],{"class":39,"line":195},[37,71878,2544],{"class":50},[37,71880,71881],{"class":39,"line":201},[37,71882,71883],{"class":50},"    \u002F\u002F 存储复杂数据类型\n",[37,71885,71886],{"class":39,"line":207},[37,71887,71888],{"class":50},"    localStorage.setItem('obj', obj)\n",[37,71890,71891,71893,71895],{"class":39,"line":213},[37,71892,52753],{"class":50},[37,71894,52149],{"class":51636},[37,71896,51643],{"class":50},[14,71898,71899],{},[1838,71900],{"alt":32,"src":71901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71903,71904],{},"如果获取一下数据:",[14,71906,71907],{},"log(localStorage.getItem('obj'))",[14,71909,71910],{},[1838,71911],{"alt":32,"src":71912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71914,71915],{},"发现直接存对象是使用不了的!!!",[22339,71917,71919],{"id":71918},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71921,71922],{},[1838,71923],{"alt":32,"src":71924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[27,71926,71928],{"className":50969,"code":71927,"language":50971,"meta":32,"style":32},"\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",[34,71929,71930,71938,71948,71958,71967,71975,71979,71983,72009,72028,72036,72040,72045,72050],{"__ignoreMap":32},[37,71931,71932,71934,71936],{"class":39,"line":40},[37,71933,1418],{"class":50},[37,71935,52149],{"class":51636},[37,71937,51643],{"class":50},[37,71939,71940,71942,71944,71946],{"class":39,"line":47},[37,71941,11562],{"class":54},[37,71943,70307],{"class":61},[37,71945,13905],{"class":54},[37,71947,15913],{"class":50},[37,71949,71950,71953,71956],{"class":39,"line":104},[37,71951,71952],{"class":50},"      uname: ",[37,71954,71955],{"class":185},"'pink老师'",[37,71957,31805],{"class":50},[37,71959,71960,71963,71965],{"class":39,"line":113},[37,71961,71962],{"class":50},"      age: ",[37,71964,1160],{"class":61},[37,71966,31805],{"class":50},[37,71968,71969,71972],{"class":39,"line":189},[37,71970,71971],{"class":50},"      gender: ",[37,71973,71974],{"class":185},"'女'\n",[37,71976,71977],{"class":39,"line":195},[37,71978,2544],{"class":50},[37,71980,71981],{"class":39,"line":201},[37,71982,71883],{"class":43},[37,71984,71985,71988,71991,71993,71996,71998,72001,72003,72006],{"class":39,"line":207},[37,71986,71987],{"class":50},"  localStorage.",[37,71989,71990],{"class":2320},"setItem",[37,71992,165],{"class":50},[37,71994,71995],{"class":185},"'obj'",[37,71997,12776],{"class":50},[37,71999,72000],{"class":61},"JSON",[37,72002,1068],{"class":50},[37,72004,72005],{"class":2320},"stringify",[37,72007,72008],{"class":50},"(obj))\n",[37,72010,72011,72014,72016,72019,72022,72024,72026],{"class":39,"line":213},[37,72012,72013],{"class":50},"  console.",[37,72015,58583],{"class":2320},[37,72017,72018],{"class":50},"(localStorage.",[37,72020,72021],{"class":2320},"getItem",[37,72023,165],{"class":50},[37,72025,71995],{"class":185},[37,72027,175],{"class":50},[37,72029,72030,72032,72034],{"class":39,"line":218},[37,72031,52753],{"class":50},[37,72033,52149],{"class":51636},[37,72035,51643],{"class":50},[37,72037,72038],{"class":39,"line":227},[37,72039,70957],{"class":50},[37,72041,72042],{"class":39,"line":232},[37,72043,72044],{"class":50},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[37,72046,72047],{"class":39,"line":238},[37,72048,72049],{"class":50},"  类型是字符串的\n",[37,72051,72052],{"class":39,"line":244},[37,72053,72054],{"class":50},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22339,72056,72058],{"id":72057},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,72060,72061],{},[1838,72062],{"alt":32,"src":72063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,72065,72066],{},[1838,72067],{"alt":32,"src":72068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[27,72070,72072],{"className":53403,"code":72071,"language":53405,"meta":32,"style":32},"  \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",[34,72073,72074,72082,72086,72090,72094,72098,72102,72107,72112,72117,72122,72127,72132,72137,72142],{"__ignoreMap":32},[37,72075,72076,72078,72080],{"class":39,"line":40},[37,72077,52480],{"class":50},[37,72079,52149],{"class":51636},[37,72081,51643],{"class":50},[37,72083,72084],{"class":39,"line":47},[37,72085,71859],{"class":50},[37,72087,72088],{"class":39,"line":104},[37,72089,71864],{"class":50},[37,72091,72092],{"class":39,"line":113},[37,72093,71869],{"class":50},[37,72095,72096],{"class":39,"line":189},[37,72097,71874],{"class":50},[37,72099,72100],{"class":39,"line":195},[37,72101,2544],{"class":50},[37,72103,72104],{"class":39,"line":201},[37,72105,72106],{"class":50},"    \u002F\u002F 1.存储复杂数据类型\n",[37,72108,72109],{"class":39,"line":207},[37,72110,72111],{"class":50},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[37,72113,72114],{"class":39,"line":213},[37,72115,72116],{"class":50},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[37,72118,72119],{"class":39,"line":218},[37,72120,72121],{"class":50},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[37,72123,72124],{"class":39,"line":227},[37,72125,72126],{"class":50},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[37,72128,72129],{"class":39,"line":232},[37,72130,72131],{"class":50},"    \u002F\u002F 取\n",[37,72133,72134],{"class":39,"line":238},[37,72135,72136],{"class":50},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[37,72138,72139],{"class":39,"line":244},[37,72140,72141],{"class":50},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[37,72143,72144,72146,72148],{"class":39,"line":250},[37,72145,52753],{"class":50},[37,72147,52149],{"class":51636},[37,72149,51643],{"class":50},[14,72151,72152],{},[1838,72153],{"alt":32,"src":72154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[498,72156,72158],{"id":72157},"_356-数组map方法","3.5.6 数组map方法",[14,72160,72161],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,72163,72164],{},[1838,72165],{"alt":32,"src":72166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,72168,72169],{},[1838,72170],{"alt":32,"src":72171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,72173,72174,72177],{},[673,72175,72176],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,72179,72180],{},"map有返回值，但是forEach没有返回值",[14,72182,72183],{},"map是个方法。用的时候要加 ()",[14,72185,72186],{},"map返回的是一个数组",[498,72188,72190],{"id":72189},"_357-数组中join方法","3.5.7 数组中join方法",[14,72192,72193],{},[1838,72194],{"alt":32,"src":72195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,72197,72198],{},"类似于python中拼接字符串一样！",[481,72200,72201,72204,72207],{},[484,72202,72203],{},"小括号为空则逗号分开",[484,72205,72206],{},"小括号为空字符串 ''，则元素之间没有分隔符",[484,72208,72209],{},"小括号用啥符号就用进行分割",[498,72211,72213],{"id":72212},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[481,72215,72216,72219,72222,72225,72228],{},[484,72217,72218],{},"记住本地时间获取快速方式：new Date().toDateString()",[484,72220,72221],{},"尽量减少DOM操作，用好map+join的渲染方式",[484,72223,72224],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[484,72226,72227],{},"return可以实现函数的结束",[484,72229,72230],{},"禁止跳转是 preventDefault() 不要忘记",[27,72232,72234],{"className":50969,"code":72233,"language":50971,"meta":32,"style":32},"\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",[34,72235,72236,72246,72260,72264,72272,72286,72306,72318,72326,72332,72342,72352,72356,72360,72366,72376,72388,72392,72396,72403,72415,72429,72439,72443,72447,72454,72461,72468,72480,72492,72502,72514,72518,72522,72529,72536,72548,72560,72570,72582,72612,72616,72620,72627,72639,72651,72675,72685,72695,72699,72703,72711,72722,72734,72746,72758,72775,72787,72799,72803,72807,72814,72826,72838,72850,72861,72879,72892,72904,72928,72939,72943,72947,72955,72965,72969,72973,72979,72991,73002,73012,73016,73020,73026,73048,73052,73056,73062,73068,73080,73090,73102,73132,73145,73162,73166,73170,73181,73203,73213,73217,73221,73234,73244,73256,73268,73280,73292,73302,73312,73322,73333,73346,73350,73358,73366,73370,73378,73391,73411,73444,73477,73510,73536,73554,73572,73580,73606,73624,73642,73660,73678,73696,73704,73712,73730,73738,73767,73775,73783,73791,73804,73816,73828,73840,73852,73864,73877,73889,73897,73905,73913,73918,73923,73927,73931,73935,73939,73943,73947,73952,73957,73962,73967,73975,73983,73991,73996,74001,74006,74011,74016,74021,74026,74031,74036,74041,74046,74051,74056,74061,74065,74070,74075,74085,74094,74098,74103,74112,74128,74170,74210,74249,74314,74322,74326,74331,74349,74357,74362,74367,74396,74402,74407,74420,74432,74444,74456,74468,74480,74492,74496,74506,74510,74515,74520,74524,74533,74537,74542,74547,74566,74571,74591,74595,74600,74604,74609,74627,74645,74663,74682,74701,74720,74725,74731,74752,74758,74767,74773,74779,74785,74812,74825,74830,74840,74846,74852,74858,74864,74869,74875,74881,74887,74893,74926,74931,74936,74941,74946,74952,74958,74964,74975,74980,74986,74993,75007,75013,75037,75042,75047,75053,75059,75080,75086,75099,75105,75111,75117,75123,75128,75134,75140,75146,75164,75178,75184,75192,75198,75220,75225,75230,75235,75240,75245,75254,75263,75268],{"__ignoreMap":32},[37,72237,72238,72240,72242,72244],{"class":39,"line":40},[37,72239,51633],{"class":50},[37,72241,51637],{"class":51636},[37,72243,51640],{"class":2320},[37,72245,51643],{"class":50},[37,72247,72248,72250,72252,72254,72256,72258],{"class":39,"line":47},[37,72249,1418],{"class":50},[37,72251,50971],{"class":51636},[37,72253,51652],{"class":2320},[37,72255,55],{"class":50},[37,72257,51657],{"class":185},[37,72259,51643],{"class":50},[37,72261,72262],{"class":39,"line":104},[37,72263,2757],{"emptyLinePlaceholder":454},[37,72265,72266,72268,72270],{"class":39,"line":113},[37,72267,1418],{"class":50},[37,72269,51670],{"class":51636},[37,72271,51643],{"class":50},[37,72273,72274,72276,72278,72280,72282,72284],{"class":39,"line":189},[37,72275,52480],{"class":50},[37,72277,51680],{"class":51636},[37,72279,51683],{"class":2320},[37,72281,55],{"class":50},[37,72283,51688],{"class":185},[37,72285,51643],{"class":50},[37,72287,72288,72290,72292,72294,72296,72298,72300,72302,72304],{"class":39,"line":195},[37,72289,52480],{"class":50},[37,72291,51680],{"class":51636},[37,72293,15261],{"class":2320},[37,72295,55],{"class":50},[37,72297,51727],{"class":185},[37,72299,51707],{"class":2320},[37,72301,55],{"class":50},[37,72303,51734],{"class":185},[37,72305,51643],{"class":50},[37,72307,72308,72310,72312,72314,72316],{"class":39,"line":201},[37,72309,52480],{"class":50},[37,72311,51743],{"class":51636},[37,72313,51746],{"class":50},[37,72315,51743],{"class":51636},[37,72317,51643],{"class":50},[37,72319,72320,72322,72324],{"class":39,"line":207},[37,72321,52480],{"class":50},[37,72323,446],{"class":51636},[37,72325,51643],{"class":50},[37,72327,72328,72330],{"class":39,"line":213},[37,72329,6751],{"class":51636},[37,72331,15913],{"class":50},[37,72333,72334,72336,72338,72340],{"class":39,"line":218},[37,72335,55031],{"class":61},[37,72337,51773],{"class":50},[37,72339,135],{"class":61},[37,72341,1669],{"class":50},[37,72343,72344,72346,72348,72350],{"class":39,"line":227},[37,72345,55042],{"class":61},[37,72347,51773],{"class":50},[37,72349,135],{"class":61},[37,72351,1669],{"class":50},[37,72353,72354],{"class":39,"line":232},[37,72355,2544],{"class":50},[37,72357,72358],{"class":39,"line":238},[37,72359,2757],{"emptyLinePlaceholder":454},[37,72361,72362,72364],{"class":39,"line":244},[37,72363,57615],{"class":51636},[37,72365,15913],{"class":50},[37,72367,72368,72370,72372,72374],{"class":39,"line":250},[37,72369,57622],{"class":61},[37,72371,51773],{"class":50},[37,72373,51928],{"class":61},[37,72375,1669],{"class":50},[37,72377,72378,72380,72382,72384,72386],{"class":39,"line":256},[37,72379,62413],{"class":61},[37,72381,51773],{"class":50},[37,72383,1210],{"class":61},[37,72385,51828],{"class":54},[37,72387,1669],{"class":50},[37,72389,72390],{"class":39,"line":261},[37,72391,2544],{"class":50},[37,72393,72394],{"class":39,"line":267},[37,72395,2757],{"emptyLinePlaceholder":454},[37,72397,72398,72401],{"class":39,"line":283},[37,72399,72400],{"class":2320},"    .info",[37,72402,15913],{"class":50},[37,72404,72405,72407,72409,72411,72413],{"class":39,"line":288},[37,72406,55107],{"class":61},[37,72408,51773],{"class":50},[37,72410,51825],{"class":61},[37,72412,51828],{"class":54},[37,72414,1669],{"class":50},[37,72416,72417,72419,72421,72423,72425,72427],{"class":39,"line":294},[37,72418,55042],{"class":61},[37,72420,51773],{"class":50},[37,72422,98],{"class":61},[37,72424,51828],{"class":54},[37,72426,51892],{"class":61},[37,72428,1669],{"class":50},[37,72430,72431,72433,72435,72437],{"class":39,"line":300},[37,72432,57622],{"class":61},[37,72434,51773],{"class":50},[37,72436,51928],{"class":61},[37,72438,1669],{"class":50},[37,72440,72441],{"class":39,"line":306},[37,72442,2544],{"class":50},[37,72444,72445],{"class":39,"line":312},[37,72446,2757],{"emptyLinePlaceholder":454},[37,72448,72449,72452],{"class":39,"line":317},[37,72450,72451],{"class":2320},"    .uname",[37,72453,31805],{"class":50},[37,72455,72456,72459],{"class":39,"line":323},[37,72457,72458],{"class":2320},"    .age",[37,72460,31805],{"class":50},[37,72462,72463,72466],{"class":39,"line":337},[37,72464,72465],{"class":2320},"    .salary",[37,72467,15913],{"class":50},[37,72469,72470,72472,72474,72476,72478],{"class":39,"line":342},[37,72471,55107],{"class":61},[37,72473,51773],{"class":50},[37,72475,154],{"class":61},[37,72477,51828],{"class":54},[37,72479,1669],{"class":50},[37,72481,72482,72484,72486,72488,72490],{"class":39,"line":347},[37,72483,55121],{"class":61},[37,72485,51773],{"class":50},[37,72487,1210],{"class":61},[37,72489,51828],{"class":54},[37,72491,1669],{"class":50},[37,72493,72494,72496,72498,72500],{"class":39,"line":352},[37,72495,62116],{"class":61},[37,72497,51773],{"class":50},[37,72499,55073],{"class":61},[37,72501,1669],{"class":50},[37,72503,72504,72506,72508,72510,72512],{"class":39,"line":357},[37,72505,62086],{"class":61},[37,72507,51773],{"class":50},[37,72509,1085],{"class":61},[37,72511,51828],{"class":54},[37,72513,1669],{"class":50},[37,72515,72516],{"class":39,"line":362},[37,72517,2544],{"class":50},[37,72519,72520],{"class":39,"line":367},[37,72521,2757],{"emptyLinePlaceholder":454},[37,72523,72524,72527],{"class":39,"line":373},[37,72525,72526],{"class":2320},"    .gender",[37,72528,31805],{"class":50},[37,72530,72531,72534],{"class":39,"line":392},[37,72532,72533],{"class":2320},"    .city",[37,72535,15913],{"class":50},[37,72537,72538,72540,72542,72544,72546],{"class":39,"line":398},[37,72539,55107],{"class":61},[37,72541,51773],{"class":50},[37,72543,154],{"class":61},[37,72545,51828],{"class":54},[37,72547,1669],{"class":50},[37,72549,72550,72552,72554,72556,72558],{"class":39,"line":409},[37,72551,55121],{"class":61},[37,72553,51773],{"class":50},[37,72555,1334],{"class":61},[37,72557,51828],{"class":54},[37,72559,1669],{"class":50},[37,72561,72562,72564,72566,72568],{"class":39,"line":415},[37,72563,62116],{"class":61},[37,72565,51773],{"class":50},[37,72567,55073],{"class":61},[37,72569,1669],{"class":50},[37,72571,72572,72574,72576,72578,72580],{"class":39,"line":420},[37,72573,62086],{"class":61},[37,72575,51773],{"class":50},[37,72577,1085],{"class":61},[37,72579,51828],{"class":54},[37,72581,1669],{"class":50},[37,72583,72584,72586,72588,72590,72592,72594,72597,72599,72601,72603,72606,72608,72610],{"class":39,"line":425},[37,72585,62313],{"class":61},[37,72587,51773],{"class":50},[37,72589,332],{"class":61},[37,72591,51828],{"class":54},[37,72593,51857],{"class":61},[37,72595,72596],{"class":61}," rgb",[37,72598,165],{"class":50},[37,72600,2087],{"class":61},[37,72602,12776],{"class":50},[37,72604,72605],{"class":61},"197",[37,72607,12776],{"class":50},[37,72609,72605],{"class":61},[37,72611,3069],{"class":50},[37,72613,72614],{"class":39,"line":431},[37,72615,2544],{"class":50},[37,72617,72618],{"class":39,"line":436},[37,72619,2757],{"emptyLinePlaceholder":454},[37,72621,72622,72625],{"class":39,"line":442},[37,72623,72624],{"class":51636},"    button",[37,72626,15913],{"class":50},[37,72628,72629,72631,72633,72635,72637],{"class":39,"line":8374},[37,72630,55121],{"class":61},[37,72632,51773],{"class":50},[37,72634,1334],{"class":61},[37,72636,51828],{"class":54},[37,72638,1669],{"class":50},[37,72640,72641,72643,72645,72647,72649],{"class":39,"line":8386},[37,72642,55107],{"class":61},[37,72644,51773],{"class":50},[37,72646,996],{"class":61},[37,72648,51828],{"class":54},[37,72650,1669],{"class":50},[37,72652,72653,72655,72657,72660,72662,72664,72666,72669,72671,72673],{"class":39,"line":8398},[37,72654,55220],{"class":61},[37,72656,51773],{"class":50},[37,72658,72659],{"class":61},"rgb",[37,72661,165],{"class":50},[37,72663,1477],{"class":61},[37,72665,12776],{"class":50},[37,72667,72668],{"class":61},"187",[37,72670,12776],{"class":50},[37,72672,817],{"class":61},[37,72674,3069],{"class":50},[37,72676,72677,72679,72681,72683],{"class":39,"line":10057},[37,72678,57752],{"class":61},[37,72680,51773],{"class":50},[37,72682,61178],{"class":61},[37,72684,1669],{"class":50},[37,72686,72687,72689,72691,72693],{"class":39,"line":10082},[37,72688,62313],{"class":61},[37,72690,51773],{"class":50},[37,72692,135],{"class":61},[37,72694,1669],{"class":50},[37,72696,72697],{"class":39,"line":10105},[37,72698,2544],{"class":50},[37,72700,72701],{"class":39,"line":10129},[37,72702,2757],{"emptyLinePlaceholder":454},[37,72704,72705,72707,72709],{"class":39,"line":10134},[37,72706,72624],{"class":51636},[37,72708,52024],{"class":51636},[37,72710,15913],{"class":50},[37,72712,72713,72715,72717,72720],{"class":39,"line":10139},[37,72714,55345],{"class":61},[37,72716,51773],{"class":50},[37,72718,72719],{"class":61},"inline-block",[37,72721,1669],{"class":50},[37,72723,72724,72726,72728,72730,72732],{"class":39,"line":10144},[37,72725,55107],{"class":61},[37,72727,51773],{"class":50},[37,72729,98],{"class":61},[37,72731,51828],{"class":54},[37,72733,1669],{"class":50},[37,72735,72736,72738,72740,72742,72744],{"class":39,"line":10153},[37,72737,55121],{"class":61},[37,72739,51773],{"class":50},[37,72741,98],{"class":61},[37,72743,51828],{"class":54},[37,72745,1669],{"class":50},[37,72747,72748,72750,72752,72754,72756],{"class":39,"line":10158},[37,72749,57695],{"class":61},[37,72751,51773],{"class":50},[37,72753,984],{"class":61},[37,72755,51828],{"class":54},[37,72757,1669],{"class":50},[37,72759,72760,72762,72764,72766,72768,72770,72773],{"class":39,"line":10164},[37,72761,62313],{"class":61},[37,72763,51773],{"class":50},[37,72765,332],{"class":61},[37,72767,51828],{"class":54},[37,72769,51857],{"class":61},[37,72771,72772],{"class":61}," #fff",[37,72774,1669],{"class":50},[37,72776,72777,72779,72781,72783,72785],{"class":39,"line":10185},[37,72778,55470],{"class":61},[37,72780,51773],{"class":50},[37,72782,836],{"class":61},[37,72784,51828],{"class":54},[37,72786,1669],{"class":50},[37,72788,72789,72791,72793,72795,72797],{"class":39,"line":10191},[37,72790,62086],{"class":61},[37,72792,51773],{"class":50},[37,72794,332],{"class":61},[37,72796,51828],{"class":54},[37,72798,1669],{"class":50},[37,72800,72801],{"class":39,"line":10205},[37,72802,2544],{"class":50},[37,72804,72805],{"class":39,"line":10211},[37,72806,2757],{"emptyLinePlaceholder":454},[37,72808,72809,72812],{"class":39,"line":10238},[37,72810,72811],{"class":2320},"    .total",[37,72813,15913],{"class":50},[37,72815,72816,72818,72820,72822,72824],{"class":39,"line":10247},[37,72817,55107],{"class":61},[37,72819,51773],{"class":50},[37,72821,61965],{"class":61},[37,72823,51828],{"class":54},[37,72825,1669],{"class":50},[37,72827,72828,72830,72832,72834,72836],{"class":39,"line":10253},[37,72829,55121],{"class":61},[37,72831,51773],{"class":50},[37,72833,915],{"class":61},[37,72835,51828],{"class":54},[37,72837,1669],{"class":50},[37,72839,72840,72842,72844,72846,72848],{"class":39,"line":10261},[37,72841,57695],{"class":61},[37,72843,51773],{"class":50},[37,72845,915],{"class":61},[37,72847,51828],{"class":54},[37,72849,1669],{"class":50},[37,72851,72852,72854,72856,72859],{"class":39,"line":10266},[37,72853,57622],{"class":61},[37,72855,51773],{"class":50},[37,72857,72858],{"class":61},"right",[37,72860,1669],{"class":50},[37,72862,72863,72865,72867,72869,72871,72873,72875,72877],{"class":39,"line":16945},[37,72864,55042],{"class":61},[37,72866,51773],{"class":50},[37,72868,915],{"class":61},[37,72870,51828],{"class":54},[37,72872,51892],{"class":61},[37,72874,2395],{"class":61},[37,72876,51828],{"class":54},[37,72878,1669],{"class":50},[37,72880,72881,72884,72886,72888,72890],{"class":39,"line":16951},[37,72882,72883],{"class":61},"      padding-right",[37,72885,51773],{"class":50},[37,72887,98],{"class":61},[37,72889,51828],{"class":54},[37,72891,1669],{"class":50},[37,72893,72894,72896,72898,72900,72902],{"class":39,"line":16974},[37,72895,55258],{"class":61},[37,72897,51773],{"class":50},[37,72899,1034],{"class":61},[37,72901,51828],{"class":54},[37,72903,1669],{"class":50},[37,72905,72906,72908,72910,72912,72914,72917,72919,72922,72924,72926],{"class":39,"line":16980},[37,72907,55220],{"class":61},[37,72909,51773],{"class":50},[37,72911,72659],{"class":61},[37,72913,165],{"class":50},[37,72915,72916],{"class":61},"237",[37,72918,12776],{"class":50},[37,72920,72921],{"class":61},"235",[37,72923,12776],{"class":50},[37,72925,72921],{"class":61},[37,72927,3069],{"class":50},[37,72929,72930,72933,72935,72937],{"class":39,"line":17003},[37,72931,72932],{"class":61},"      box-sizing",[37,72934,51773],{"class":50},[37,72936,60841],{"class":61},[37,72938,1669],{"class":50},[37,72940,72941],{"class":39,"line":17017},[37,72942,2544],{"class":50},[37,72944,72945],{"class":39,"line":17037},[37,72946,2757],{"emptyLinePlaceholder":454},[37,72948,72949,72951,72953],{"class":39,"line":17043},[37,72950,72811],{"class":2320},[37,72952,52024],{"class":51636},[37,72954,15913],{"class":50},[37,72956,72957,72959,72961,72963],{"class":39,"line":17054},[37,72958,57752],{"class":61},[37,72960,51773],{"class":50},[37,72962,57757],{"class":61},[37,72964,1669],{"class":50},[37,72966,72967],{"class":39,"line":17077},[37,72968,2544],{"class":50},[37,72970,72971],{"class":39,"line":17099},[37,72972,2757],{"emptyLinePlaceholder":454},[37,72974,72975,72977],{"class":39,"line":17104},[37,72976,65359],{"class":51636},[37,72978,15913],{"class":50},[37,72980,72981,72983,72985,72987,72989],{"class":39,"line":17110},[37,72982,55107],{"class":61},[37,72984,51773],{"class":50},[37,72986,61965],{"class":61},[37,72988,51828],{"class":54},[37,72990,1669],{"class":50},[37,72992,72993,72995,72997,73000],{"class":39,"line":17124},[37,72994,55042],{"class":61},[37,72996,51773],{"class":50},[37,72998,72999],{"class":61},"auto",[37,73001,1669],{"class":50},[37,73003,73004,73006,73008,73010],{"class":39,"line":17137},[37,73005,65366],{"class":61},[37,73007,51773],{"class":50},[37,73009,65371],{"class":61},[37,73011,1669],{"class":50},[37,73013,73014],{"class":39,"line":17142},[37,73015,2544],{"class":50},[37,73017,73018],{"class":39,"line":17156},[37,73019,2757],{"emptyLinePlaceholder":454},[37,73021,73022,73024],{"class":39,"line":17161},[37,73023,65451],{"class":51636},[37,73025,15913],{"class":50},[37,73027,73028,73030,73032,73034,73036,73038,73040,73042,73044,73046],{"class":39,"line":17167},[37,73029,55220],{"class":61},[37,73031,51773],{"class":50},[37,73033,72659],{"class":61},[37,73035,165],{"class":50},[37,73037,72916],{"class":61},[37,73039,12776],{"class":50},[37,73041,72921],{"class":61},[37,73043,12776],{"class":50},[37,73045,72921],{"class":61},[37,73047,3069],{"class":50},[37,73049,73050],{"class":39,"line":17172},[37,73051,2544],{"class":50},[37,73053,73054],{"class":39,"line":17186},[37,73055,2757],{"emptyLinePlaceholder":454},[37,73057,73058,73060],{"class":39,"line":17191},[37,73059,65451],{"class":51636},[37,73061,31805],{"class":50},[37,73063,73064,73066],{"class":39,"line":17196},[37,73065,65517],{"class":51636},[37,73067,15913],{"class":50},[37,73069,73070,73072,73074,73076,73078],{"class":39,"line":17210},[37,73071,55121],{"class":61},[37,73073,51773],{"class":50},[37,73075,793],{"class":61},[37,73077,51828],{"class":54},[37,73079,1669],{"class":50},[37,73081,73082,73084,73086,73088],{"class":39,"line":17222},[37,73083,57622],{"class":61},[37,73085,51773],{"class":50},[37,73087,24077],{"class":61},[37,73089,1669],{"class":50},[37,73091,73092,73094,73096,73098,73100],{"class":39,"line":17227},[37,73093,55258],{"class":61},[37,73095,51773],{"class":50},[37,73097,1059],{"class":61},[37,73099,51828],{"class":54},[37,73101,1669],{"class":50},[37,73103,73104,73106,73108,73110,73112,73114,73116,73118,73121,73123,73126,73128,73130],{"class":39,"line":17240},[37,73105,62313],{"class":61},[37,73107,51773],{"class":50},[37,73109,332],{"class":61},[37,73111,51828],{"class":54},[37,73113,51857],{"class":61},[37,73115,72596],{"class":61},[37,73117,165],{"class":50},[37,73119,73120],{"class":61},"228",[37,73122,12776],{"class":50},[37,73124,73125],{"class":61},"225",[37,73127,12776],{"class":50},[37,73129,73125],{"class":61},[37,73131,3069],{"class":50},[37,73133,73134,73137,73139,73141,73143],{"class":39,"line":17245},[37,73135,73136],{"class":61},"      padding-left",[37,73138,51773],{"class":50},[37,73140,836],{"class":61},[37,73142,51828],{"class":54},[37,73144,1669],{"class":50},[37,73146,73147,73149,73151,73153,73156,73158,73160],{"class":39,"line":17250},[37,73148,62196],{"class":61},[37,73150,51773],{"class":50},[37,73152,28463],{"class":61},[37,73154,73155],{"class":61}," linear",[37,73157,62203],{"class":61},[37,73159,1205],{"class":54},[37,73161,1669],{"class":50},[37,73163,73164],{"class":39,"line":17255},[37,73165,2544],{"class":50},[37,73167,73168],{"class":39,"line":17268},[37,73169,2757],{"emptyLinePlaceholder":454},[37,73171,73172,73175,73177,73179],{"class":39,"line":17273},[37,73173,73174],{"class":51636},"    tbody",[37,73176,70480],{"class":51636},[37,73178,61276],{"class":2320},[37,73180,15913],{"class":50},[37,73182,73183,73185,73187,73189,73191,73193,73195,73197,73199,73201],{"class":39,"line":32971},[37,73184,55220],{"class":61},[37,73186,51773],{"class":50},[37,73188,72659],{"class":61},[37,73190,165],{"class":50},[37,73192,72916],{"class":61},[37,73194,12776],{"class":50},[37,73196,72921],{"class":61},[37,73198,12776],{"class":50},[37,73200,72921],{"class":61},[37,73202,3069],{"class":50},[37,73204,73205,73207,73209,73211],{"class":39,"line":32977},[37,73206,62361],{"class":61},[37,73208,51773],{"class":50},[37,73210,62366],{"class":61},[37,73212,1669],{"class":50},[37,73214,73215],{"class":39,"line":32983},[37,73216,2544],{"class":50},[37,73218,73219],{"class":39,"line":32989},[37,73220,2757],{"emptyLinePlaceholder":454},[37,73222,73223,73225,73227,73230,73232],{"class":39,"line":32995},[37,73224,73174],{"class":51636},[37,73226,70480],{"class":51636},[37,73228,73229],{"class":51636}," td",[37,73231,1774],{"class":51636},[37,73233,15913],{"class":50},[37,73235,73236,73238,73240,73242],{"class":39,"line":33006},[37,73237,55345],{"class":61},[37,73239,51773],{"class":50},[37,73241,61205],{"class":61},[37,73243,1669],{"class":50},[37,73245,73246,73248,73250,73252,73254],{"class":39,"line":33012},[37,73247,55107],{"class":61},[37,73249,51773],{"class":50},[37,73251,1415],{"class":61},[37,73253,51828],{"class":54},[37,73255,1669],{"class":50},[37,73257,73258,73260,73262,73264,73266],{"class":39,"line":33032},[37,73259,55121],{"class":61},[37,73261,51773],{"class":50},[37,73263,1334],{"class":61},[37,73265,51828],{"class":54},[37,73267,1669],{"class":50},[37,73269,73270,73272,73274,73276,73278],{"class":39,"line":33038},[37,73271,57695],{"class":61},[37,73273,51773],{"class":50},[37,73275,1334],{"class":61},[37,73277,51828],{"class":54},[37,73279,1669],{"class":50},[37,73281,73282,73284,73286,73288,73290],{"class":39,"line":33049},[37,73283,62413],{"class":61},[37,73285,51773],{"class":50},[37,73287,602],{"class":61},[37,73289,51828],{"class":54},[37,73291,1669],{"class":50},[37,73293,73294,73296,73298,73300],{"class":39,"line":33055},[37,73295,57752],{"class":61},[37,73297,51773],{"class":50},[37,73299,61178],{"class":61},[37,73301,1669],{"class":50},[37,73303,73304,73306,73308,73310],{"class":39,"line":33061},[37,73305,57622],{"class":61},[37,73307,51773],{"class":50},[37,73309,51928],{"class":61},[37,73311,1669],{"class":50},[37,73313,73314,73316,73318,73320],{"class":39,"line":33067},[37,73315,64306],{"class":61},[37,73317,51773],{"class":50},[37,73319,55073],{"class":61},[37,73321,1669],{"class":50},[37,73323,73324,73326,73328,73331],{"class":39,"line":33073},[37,73325,55220],{"class":61},[37,73327,51773],{"class":50},[37,73329,73330],{"class":61},"orange",[37,73332,1669],{"class":50},[37,73334,73335,73337,73339,73342,73344],{"class":39,"line":33079},[37,73336,55470],{"class":61},[37,73338,51773],{"class":50},[37,73340,73341],{"class":61},"12.5",[37,73343,51828],{"class":54},[37,73345,1669],{"class":50},[37,73347,73348],{"class":39,"line":33085},[37,73349,2544],{"class":50},[37,73351,73352,73354,73356],{"class":39,"line":33091},[37,73353,52753],{"class":50},[37,73355,446],{"class":51636},[37,73357,51643],{"class":50},[37,73359,73360,73362,73364],{"class":39,"line":33111},[37,73361,52121],{"class":50},[37,73363,51670],{"class":51636},[37,73365,51643],{"class":50},[37,73367,73368],{"class":39,"line":33117},[37,73369,2757],{"emptyLinePlaceholder":454},[37,73371,73372,73374,73376],{"class":39,"line":33133},[37,73373,1418],{"class":50},[37,73375,52136],{"class":51636},[37,73377,51643],{"class":50},[37,73379,73380,73382,73384,73387,73389],{"class":39,"line":33139},[37,73381,52480],{"class":50},[37,73383,469],{"class":51636},[37,73385,73386],{"class":50},">学生就业统计表\u003C\u002F",[37,73388,469],{"class":51636},[37,73390,51643],{"class":50},[37,73392,73393,73395,73397,73399,73401,73403,73405,73407,73409],{"class":39,"line":33153},[37,73394,52480],{"class":50},[37,73396,66961],{"class":51636},[37,73398,53822],{"class":2320},[37,73400,55],{"class":50},[37,73402,63000],{"class":185},[37,73404,69406],{"class":2320},[37,73406,55],{"class":50},[37,73408,32114],{"class":185},[37,73410,51643],{"class":50},[37,73412,73413,73415,73417,73419,73421,73423,73425,73427,73429,73431,73433,73436,73438,73440,73442],{"class":39,"line":33159},[37,73414,51677],{"class":50},[37,73416,54157],{"class":51636},[37,73418,54160],{"class":2320},[37,73420,55],{"class":50},[37,73422,63035],{"class":185},[37,73424,15261],{"class":2320},[37,73426,55],{"class":50},[37,73428,69432],{"class":185},[37,73430,61356],{"class":2320},[37,73432,55],{"class":50},[37,73434,73435],{"class":185},"\"姓名\"",[37,73437,53822],{"class":2320},[37,73439,55],{"class":50},[37,73441,69432],{"class":185},[37,73443,51643],{"class":50},[37,73445,73446,73448,73450,73452,73454,73456,73458,73460,73462,73464,73466,73469,73471,73473,73475],{"class":39,"line":33174},[37,73447,51677],{"class":50},[37,73449,54157],{"class":51636},[37,73451,54160],{"class":2320},[37,73453,55],{"class":50},[37,73455,63035],{"class":185},[37,73457,15261],{"class":2320},[37,73459,55],{"class":50},[37,73461,69460],{"class":185},[37,73463,61356],{"class":2320},[37,73465,55],{"class":50},[37,73467,73468],{"class":185},"\"年龄\"",[37,73470,53822],{"class":2320},[37,73472,55],{"class":50},[37,73474,69460],{"class":185},[37,73476,51643],{"class":50},[37,73478,73479,73481,73483,73485,73487,73489,73491,73493,73495,73497,73499,73502,73504,73506,73508],{"class":39,"line":33180},[37,73480,51677],{"class":50},[37,73482,54157],{"class":51636},[37,73484,54160],{"class":2320},[37,73486,55],{"class":50},[37,73488,63035],{"class":185},[37,73490,15261],{"class":2320},[37,73492,55],{"class":50},[37,73494,69562],{"class":185},[37,73496,61356],{"class":2320},[37,73498,55],{"class":50},[37,73500,73501],{"class":185},"\"薪资\"",[37,73503,53822],{"class":2320},[37,73505,55],{"class":50},[37,73507,69562],{"class":185},[37,73509,51643],{"class":50},[37,73511,73512,73514,73516,73518,73520,73522,73524,73526,73528,73530,73532,73534],{"class":39,"line":33189},[37,73513,51677],{"class":50},[37,73515,69480],{"class":51636},[37,73517,15261],{"class":2320},[37,73519,55],{"class":50},[37,73521,69487],{"class":185},[37,73523,15300],{"class":2320},[37,73525,55],{"class":50},[37,73527,8000],{"class":185},[37,73529,53822],{"class":2320},[37,73531,55],{"class":50},[37,73533,69487],{"class":185},[37,73535,51643],{"class":50},[37,73537,73538,73540,73542,73544,73546,73548,73550,73552],{"class":39,"line":33195},[37,73539,55570],{"class":50},[37,73541,69502],{"class":51636},[37,73543,66987],{"class":2320},[37,73545,55],{"class":50},[37,73547,10302],{"class":185},[37,73549,69511],{"class":50},[37,73551,69502],{"class":51636},[37,73553,51643],{"class":50},[37,73555,73556,73558,73560,73562,73564,73566,73568,73570],{"class":39,"line":33204},[37,73557,55570],{"class":50},[37,73559,69502],{"class":51636},[37,73561,66987],{"class":2320},[37,73563,55],{"class":50},[37,73565,10371],{"class":185},[37,73567,69530],{"class":50},[37,73569,69502],{"class":51636},[37,73571,51643],{"class":50},[37,73573,73574,73576,73578],{"class":39,"line":33210},[37,73575,52112],{"class":50},[37,73577,69480],{"class":51636},[37,73579,51643],{"class":50},[37,73581,73582,73584,73586,73588,73590,73592,73594,73596,73598,73600,73602,73604],{"class":39,"line":33216},[37,73583,51677],{"class":50},[37,73585,69480],{"class":51636},[37,73587,15261],{"class":2320},[37,73589,55],{"class":50},[37,73591,69584],{"class":185},[37,73593,15300],{"class":2320},[37,73595,55],{"class":50},[37,73597,8000],{"class":185},[37,73599,53822],{"class":2320},[37,73601,55],{"class":50},[37,73603,69584],{"class":185},[37,73605,51643],{"class":50},[37,73607,73608,73610,73612,73614,73616,73618,73620,73622],{"class":39,"line":33225},[37,73609,55570],{"class":50},[37,73611,69502],{"class":51636},[37,73613,66987],{"class":2320},[37,73615,55],{"class":50},[37,73617,69605],{"class":185},[37,73619,69608],{"class":50},[37,73621,69502],{"class":51636},[37,73623,51643],{"class":50},[37,73625,73626,73628,73630,73632,73634,73636,73638,73640],{"class":39,"line":33231},[37,73627,55570],{"class":50},[37,73629,69502],{"class":51636},[37,73631,66987],{"class":2320},[37,73633,55],{"class":50},[37,73635,69625],{"class":185},[37,73637,69628],{"class":50},[37,73639,69502],{"class":51636},[37,73641,51643],{"class":50},[37,73643,73644,73646,73648,73650,73652,73654,73656,73658],{"class":39,"line":33242},[37,73645,55570],{"class":50},[37,73647,69502],{"class":51636},[37,73649,66987],{"class":2320},[37,73651,55],{"class":50},[37,73653,69645],{"class":185},[37,73655,69648],{"class":50},[37,73657,69502],{"class":51636},[37,73659,51643],{"class":50},[37,73661,73662,73664,73666,73668,73670,73672,73674,73676],{"class":39,"line":33248},[37,73663,55570],{"class":50},[37,73665,69502],{"class":51636},[37,73667,66987],{"class":2320},[37,73669,55],{"class":50},[37,73671,69665],{"class":185},[37,73673,69668],{"class":50},[37,73675,69502],{"class":51636},[37,73677,51643],{"class":50},[37,73679,73680,73682,73684,73686,73688,73690,73692,73694],{"class":39,"line":33267},[37,73681,55570],{"class":50},[37,73683,69502],{"class":51636},[37,73685,66987],{"class":2320},[37,73687,55],{"class":50},[37,73689,69685],{"class":185},[37,73691,69688],{"class":50},[37,73693,69502],{"class":51636},[37,73695,51643],{"class":50},[37,73697,73698,73700,73702],{"class":39,"line":33273},[37,73699,52112],{"class":50},[37,73701,69480],{"class":51636},[37,73703,51643],{"class":50},[37,73705,73706,73708,73710],{"class":39,"line":33284},[37,73707,51677],{"class":50},[37,73709,54223],{"class":51636},[37,73711,51643],{"class":50},[37,73713,73714,73716,73718,73721,73723,73726,73728],{"class":39,"line":33290},[37,73715,55570],{"class":50},[37,73717,37],{"class":51636},[37,73719,73720],{"class":50},">+\u003C\u002F",[37,73722,37],{"class":51636},[37,73724,73725],{"class":50},">添加\u003C\u002F",[37,73727,54223],{"class":51636},[37,73729,51643],{"class":50},[37,73731,73732,73734,73736],{"class":39,"line":33310},[37,73733,52753],{"class":50},[37,73735,66961],{"class":51636},[37,73737,51643],{"class":50},[37,73739,73740,73742,73744,73746,73748,73750,73753,73755,73758,73760,73763,73765],{"class":39,"line":33326},[37,73741,52480],{"class":50},[37,73743,51947],{"class":51636},[37,73745,53822],{"class":2320},[37,73747,55],{"class":50},[37,73749,62916],{"class":185},[37,73751,73752],{"class":50},">共有数据 \u003C",[37,73754,37],{"class":51636},[37,73756,73757],{"class":50},">0\u003C\u002F",[37,73759,37],{"class":51636},[37,73761,73762],{"class":50},"> 条\u003C\u002F",[37,73764,51947],{"class":51636},[37,73766,51643],{"class":50},[37,73768,73769,73771,73773],{"class":39,"line":33332},[37,73770,52480],{"class":50},[37,73772,661],{"class":51636},[37,73774,51643],{"class":50},[37,73776,73777,73779,73781],{"class":39,"line":33346},[37,73778,51677],{"class":50},[37,73780,664],{"class":51636},[37,73782,51643],{"class":50},[37,73784,73785,73787,73789],{"class":39,"line":33352},[37,73786,55570],{"class":50},[37,73788,667],{"class":51636},[37,73790,51643],{"class":50},[37,73792,73793,73795,73797,73800,73802],{"class":39,"line":33358},[37,73794,55638],{"class":50},[37,73796,670],{"class":51636},[37,73798,73799],{"class":50},">ID\u003C\u002F",[37,73801,670],{"class":51636},[37,73803,51643],{"class":50},[37,73805,73806,73808,73810,73812,73814],{"class":39,"line":33369},[37,73807,55638],{"class":50},[37,73809,670],{"class":51636},[37,73811,69791],{"class":50},[37,73813,670],{"class":51636},[37,73815,51643],{"class":50},[37,73817,73818,73820,73822,73824,73826],{"class":39,"line":33375},[37,73819,55638],{"class":50},[37,73821,670],{"class":51636},[37,73823,69804],{"class":50},[37,73825,670],{"class":51636},[37,73827,51643],{"class":50},[37,73829,73830,73832,73834,73836,73838],{"class":39,"line":33381},[37,73831,55638],{"class":50},[37,73833,670],{"class":51636},[37,73835,69817],{"class":50},[37,73837,670],{"class":51636},[37,73839,51643],{"class":50},[37,73841,73842,73844,73846,73848,73850],{"class":39,"line":33391},[37,73843,55638],{"class":50},[37,73845,670],{"class":51636},[37,73847,69830],{"class":50},[37,73849,670],{"class":51636},[37,73851,51643],{"class":50},[37,73853,73854,73856,73858,73860,73862],{"class":39,"line":33397},[37,73855,55638],{"class":50},[37,73857,670],{"class":51636},[37,73859,69843],{"class":50},[37,73861,670],{"class":51636},[37,73863,51643],{"class":50},[37,73865,73866,73868,73870,73873,73875],{"class":39,"line":33408},[37,73867,55638],{"class":50},[37,73869,670],{"class":51636},[37,73871,73872],{"class":50},">录入时间\u003C\u002F",[37,73874,670],{"class":51636},[37,73876,51643],{"class":50},[37,73878,73879,73881,73883,73885,73887],{"class":39,"line":33414},[37,73880,55638],{"class":50},[37,73882,670],{"class":51636},[37,73884,69856],{"class":50},[37,73886,670],{"class":51636},[37,73888,51643],{"class":50},[37,73890,73891,73893,73895],{"class":39,"line":33424},[37,73892,55743],{"class":50},[37,73894,667],{"class":51636},[37,73896,51643],{"class":50},[37,73898,73899,73901,73903],{"class":39,"line":33429},[37,73900,52112],{"class":50},[37,73902,664],{"class":51636},[37,73904,51643],{"class":50},[37,73906,73907,73909,73911],{"class":39,"line":33435},[37,73908,51677],{"class":50},[37,73910,708],{"class":51636},[37,73912,51643],{"class":50},[37,73914,73915],{"class":39,"line":33484},[37,73916,73917],{"class":43},"      \u003C!-- \u003Ctr>\n",[37,73919,73920],{"class":39,"line":33531},[37,73921,73922],{"class":43},"        \u003Ctd>1\u003C\u002Ftd>\n",[37,73924,73925],{"class":39,"line":33536},[37,73926,73922],{"class":43},[37,73928,73929],{"class":39,"line":33542},[37,73930,73922],{"class":43},[37,73932,73933],{"class":39,"line":33561},[37,73934,73922],{"class":43},[37,73936,73937],{"class":39,"line":33567},[37,73938,73922],{"class":43},[37,73940,73941],{"class":39,"line":33586},[37,73942,73922],{"class":43},[37,73944,73945],{"class":39,"line":33592},[37,73946,73922],{"class":43},[37,73948,73949],{"class":39,"line":33598},[37,73950,73951],{"class":43},"        \u003Ctd>\n",[37,73953,73954],{"class":39,"line":33608},[37,73955,73956],{"class":43},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[37,73958,73959],{"class":39,"line":33613},[37,73960,73961],{"class":43},"        \u003C\u002Ftd>\n",[37,73963,73964],{"class":39,"line":33619},[37,73965,73966],{"class":43},"      \u003C\u002Ftr> -->\n",[37,73968,73969,73971,73973],{"class":39,"line":33635},[37,73970,52112],{"class":50},[37,73972,708],{"class":51636},[37,73974,51643],{"class":50},[37,73976,73977,73979,73981],{"class":39,"line":33680},[37,73978,52753],{"class":50},[37,73980,661],{"class":51636},[37,73982,51643],{"class":50},[37,73984,73985,73987,73989],{"class":39,"line":33686},[37,73986,52480],{"class":50},[37,73988,52149],{"class":51636},[37,73990,51643],{"class":50},[37,73992,73993],{"class":39,"line":33692},[37,73994,73995],{"class":43},"    \u002F\u002F const initData = [{\n",[37,73997,73998],{"class":39,"line":33698},[37,73999,74000],{"class":43},"    \u002F\u002F   unameId: 1,\n",[37,74002,74003],{"class":39,"line":33709},[37,74004,74005],{"class":43},"    \u002F\u002F   uname: '华晨宇',\n",[37,74007,74008],{"class":39,"line":33715},[37,74009,74010],{"class":43},"    \u002F\u002F   age: 22,\n",[37,74012,74013],{"class":39,"line":33721},[37,74014,74015],{"class":43},"    \u002F\u002F   salary: 12000,\n",[37,74017,74018],{"class":39,"line":33727},[37,74019,74020],{"class":43},"    \u002F\u002F   gender: '男',\n",[37,74022,74023],{"class":39,"line":33745},[37,74024,74025],{"class":43},"    \u002F\u002F   city: '北京',\n",[37,74027,74028],{"class":39,"line":33759},[37,74029,74030],{"class":43},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[37,74032,74033],{"class":39,"line":33768},[37,74034,74035],{"class":43},"    \u002F\u002F }]\n",[37,74037,74038],{"class":39,"line":33777},[37,74039,74040],{"class":43},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[37,74042,74043],{"class":39,"line":33786},[37,74044,74045],{"class":43},"    \u002F\u002F 1.渲染业务\n",[37,74047,74048],{"class":39,"line":33795},[37,74049,74050],{"class":43},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[37,74052,74053],{"class":39,"line":33801},[37,74054,74055],{"class":43},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[37,74057,74058],{"class":39,"line":33807},[37,74059,74060],{"class":43},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[37,74062,74063],{"class":39,"line":33815},[37,74064,2757],{"emptyLinePlaceholder":454},[37,74066,74067],{"class":39,"line":33820},[37,74068,74069],{"class":43},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[37,74071,74072],{"class":39,"line":33826},[37,74073,74074],{"class":43},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[37,74076,74077,74079,74081,74083],{"class":39,"line":33837},[37,74078,11562],{"class":54},[37,74080,58031],{"class":61},[37,74082,13905],{"class":54},[37,74084,52174],{"class":50},[37,74086,74087,74090,74092],{"class":39,"line":33843},[37,74088,74089],{"class":50},"    console.",[37,74091,58583],{"class":2320},[37,74093,52748],{"class":50},[37,74095,74096],{"class":39,"line":33863},[37,74097,2757],{"emptyLinePlaceholder":454},[37,74099,74100],{"class":39,"line":33869},[37,74101,74102],{"class":43},"    \u002F\u002F 时间函数\n",[37,74104,74105,74107,74110],{"class":39,"line":33875},[37,74106,70420],{"class":54},[37,74108,74109],{"class":2320}," getTime",[37,74111,11194],{"class":50},[37,74113,74114,74116,74119,74121,74123,74126],{"class":39,"line":33881},[37,74115,58564],{"class":54},[37,74117,74118],{"class":61}," date",[37,74120,13905],{"class":54},[37,74122,11919],{"class":54},[37,74124,74125],{"class":2320}," Date",[37,74127,2333],{"class":50},[37,74129,74130,74132,74134,74136,74139,74142,74144,74146,74148,74151,74154,74156,74158,74160,74162,74164,74166,74168],{"class":39,"line":33898},[37,74131,58564],{"class":54},[37,74133,16432],{"class":61},[37,74135,13905],{"class":54},[37,74137,74138],{"class":50}," date.",[37,74140,74141],{"class":2320},"getHours",[37,74143,13391],{"class":50},[37,74145,1418],{"class":54},[37,74147,2395],{"class":61},[37,74149,74150],{"class":54}," ?",[37,74152,74153],{"class":185}," '0'",[37,74155,45903],{"class":54},[37,74157,74138],{"class":50},[37,74159,74141],{"class":2320},[37,74161,13391],{"class":50},[37,74163,1368],{"class":54},[37,74165,74138],{"class":50},[37,74167,74141],{"class":2320},[37,74169,2333],{"class":50},[37,74171,74172,74174,74177,74179,74181,74184,74186,74188,74190,74192,74194,74196,74198,74200,74202,74204,74206,74208],{"class":39,"line":33904},[37,74173,58564],{"class":54},[37,74175,74176],{"class":61}," m",[37,74178,13905],{"class":54},[37,74180,74138],{"class":50},[37,74182,74183],{"class":2320},"getMinutes",[37,74185,13391],{"class":50},[37,74187,1418],{"class":54},[37,74189,2395],{"class":61},[37,74191,74150],{"class":54},[37,74193,74153],{"class":185},[37,74195,45903],{"class":54},[37,74197,74138],{"class":50},[37,74199,74183],{"class":2320},[37,74201,13391],{"class":50},[37,74203,1368],{"class":54},[37,74205,74138],{"class":50},[37,74207,74183],{"class":2320},[37,74209,2333],{"class":50},[37,74211,74212,74214,74216,74218,74220,74223,74225,74227,74229,74231,74233,74235,74237,74239,74241,74243,74245,74247],{"class":39,"line":33910},[37,74213,58564],{"class":54},[37,74215,8769],{"class":61},[37,74217,13905],{"class":54},[37,74219,74138],{"class":50},[37,74221,74222],{"class":2320},"getSeconds",[37,74224,13391],{"class":50},[37,74226,1418],{"class":54},[37,74228,2395],{"class":61},[37,74230,74150],{"class":54},[37,74232,74153],{"class":185},[37,74234,45903],{"class":54},[37,74236,74138],{"class":50},[37,74238,74222],{"class":2320},[37,74240,13391],{"class":50},[37,74242,1368],{"class":54},[37,74244,74138],{"class":50},[37,74246,74222],{"class":2320},[37,74248,2333],{"class":50},[37,74250,74251,74253,74256,74258,74260,74263,74265,74268,74270,74273,74275,74277,74280,74282,74284,74286,74288,74290,74292,74295,74297,74300,74302,74305,74307,74309,74311],{"class":39,"line":33916},[37,74252,58564],{"class":54},[37,74254,74255],{"class":61}," str",[37,74257,13905],{"class":54},[37,74259,63239],{"class":185},[37,74261,74262],{"class":50},"date",[37,74264,1068],{"class":185},[37,74266,74267],{"class":2320},"getFullYear",[37,74269,2784],{"class":185},[37,74271,74272],{"class":185},"}\u002F${",[37,74274,74262],{"class":50},[37,74276,1068],{"class":185},[37,74278,74279],{"class":2320},"getMonth",[37,74281,13391],{"class":185},[37,74283,993],{"class":54},[37,74285,25460],{"class":61},[37,74287,74272],{"class":185},[37,74289,74262],{"class":50},[37,74291,1068],{"class":185},[37,74293,74294],{"class":2320},"getDate",[37,74296,2784],{"class":185},[37,74298,74299],{"class":185},"} ${",[37,74301,929],{"class":50},[37,74303,74304],{"class":185},"}:${",[37,74306,1054],{"class":50},[37,74308,74304],{"class":185},[37,74310,1205],{"class":50},[37,74312,74313],{"class":185},"}`\n",[37,74315,74316,74319],{"class":39,"line":33922},[37,74317,74318],{"class":54},"      return",[37,74320,74321],{"class":50}," str\n",[37,74323,74324],{"class":39,"line":33928},[37,74325,2544],{"class":50},[37,74327,74328],{"class":39,"line":33955},[37,74329,74330],{"class":43},"    \u002F\u002F 渲染函数\n",[37,74332,74333,74335,74337,74339,74341,74343,74345,74347],{"class":39,"line":33979},[37,74334,11562],{"class":54},[37,74336,70083],{"class":61},[37,74338,13905],{"class":54},[37,74340,54732],{"class":50},[37,74342,54735],{"class":2320},[37,74344,165],{"class":50},[37,74346,70094],{"class":185},[37,74348,280],{"class":50},[37,74350,74351,74353,74355],{"class":39,"line":33985},[37,74352,70420],{"class":54},[37,74354,70423],{"class":2320},[37,74356,11194],{"class":50},[37,74358,74359],{"class":39,"line":33991},[37,74360,74361],{"class":43},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[37,74363,74364],{"class":39,"line":33997},[37,74365,74366],{"class":43},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[37,74368,74369,74371,74374,74376,74378,74381,74383,74385,74387,74390,74392,74394],{"class":39,"line":34008},[37,74370,58564],{"class":54},[37,74372,74373],{"class":61}," trArr",[37,74375,13905],{"class":54},[37,74377,52301],{"class":50},[37,74379,74380],{"class":2320},"map",[37,74382,165],{"class":50},[37,74384,54785],{"class":54},[37,74386,2027],{"class":50},[37,74388,74389],{"class":159},"ele",[37,74391,12776],{"class":50},[37,74393,401],{"class":159},[37,74395,12783],{"class":50},[37,74397,74398,74400],{"class":39,"line":34019},[37,74399,15093],{"class":54},[37,74401,70504],{"class":185},[37,74403,74404],{"class":39,"line":34025},[37,74405,74406],{"class":185},"      \u003Ctr>\n",[37,74408,74409,74411,74413,74415,74418],{"class":39,"line":34042},[37,74410,70509],{"class":185},[37,74412,74389],{"class":50},[37,74414,1068],{"class":185},[37,74416,74417],{"class":50},"unameId",[37,74419,70524],{"class":185},[37,74421,74422,74424,74426,74428,74430],{"class":39,"line":34065},[37,74423,70509],{"class":185},[37,74425,74389],{"class":50},[37,74427,1068],{"class":185},[37,74429,70540],{"class":50},[37,74431,70524],{"class":185},[37,74433,74434,74436,74438,74440,74442],{"class":39,"line":34088},[37,74435,70509],{"class":185},[37,74437,74389],{"class":50},[37,74439,1068],{"class":185},[37,74441,70557],{"class":50},[37,74443,70524],{"class":185},[37,74445,74446,74448,74450,74452,74454],{"class":39,"line":34094},[37,74447,70509],{"class":185},[37,74449,74389],{"class":50},[37,74451,1068],{"class":185},[37,74453,70574],{"class":50},[37,74455,70524],{"class":185},[37,74457,74458,74460,74462,74464,74466],{"class":39,"line":34099},[37,74459,70509],{"class":185},[37,74461,74389],{"class":50},[37,74463,1068],{"class":185},[37,74465,70591],{"class":50},[37,74467,70524],{"class":185},[37,74469,74470,74472,74474,74476,74478],{"class":39,"line":34108},[37,74471,70509],{"class":185},[37,74473,74389],{"class":50},[37,74475,1068],{"class":185},[37,74477,70608],{"class":50},[37,74479,70524],{"class":185},[37,74481,74482,74484,74486,74488,74490],{"class":39,"line":34118},[37,74483,70509],{"class":185},[37,74485,74389],{"class":50},[37,74487,1068],{"class":185},[37,74489,2744],{"class":50},[37,74491,70524],{"class":185},[37,74493,74494],{"class":39,"line":34124},[37,74495,73951],{"class":185},[37,74497,74498,74501,74503],{"class":39,"line":34129},[37,74499,74500],{"class":185},"          \u003Ca href=\"#\" data-id=\"${",[37,74502,401],{"class":50},[37,74504,74505],{"class":185},"}\">删除\u003C\u002Fa>\n",[37,74507,74508],{"class":39,"line":34135},[37,74509,73961],{"class":185},[37,74511,74512],{"class":39,"line":34148},[37,74513,74514],{"class":185},"      \u003C\u002Ftr>\n",[37,74516,74517],{"class":39,"line":34154},[37,74518,74519],{"class":185},"  `\n",[37,74521,74522],{"class":39,"line":34165},[37,74523,65151],{"class":50},[37,74525,74526,74528,74530],{"class":39,"line":34176},[37,74527,58580],{"class":50},[37,74529,58583],{"class":2320},[37,74531,74532],{"class":50},"(trArr)\n",[37,74534,74535],{"class":39,"line":34195},[37,74536,2757],{"emptyLinePlaceholder":454},[37,74538,74539],{"class":39,"line":49854},[37,74540,74541],{"class":43},"      \u002F\u002F (2) 把数组转换为字符串join\n",[37,74543,74544],{"class":39,"line":49859},[37,74545,74546],{"class":43},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[37,74548,74549,74551,74553,74556,74559,74561,74564],{"class":39,"line":49868},[37,74550,70435],{"class":50},[37,74552,55],{"class":54},[37,74554,74555],{"class":50}," trArr.",[37,74557,74558],{"class":2320},"join",[37,74560,165],{"class":50},[37,74562,74563],{"class":185},"''",[37,74565,280],{"class":50},[37,74567,74568],{"class":39,"line":49877},[37,74569,74570],{"class":43},"      \u002F\u002F 显示共有几条\n",[37,74572,74573,74575,74577,74579,74582,74585,74587,74589],{"class":39,"line":49882},[37,74574,56107],{"class":50},[37,74576,54735],{"class":2320},[37,74578,165],{"class":50},[37,74580,74581],{"class":185},"'.total span'",[37,74583,74584],{"class":50},").innerHTML ",[37,74586,55],{"class":54},[37,74588,52301],{"class":50},[37,74590,56167],{"class":61},[37,74592,74593],{"class":39,"line":49887},[37,74594,2544],{"class":50},[37,74596,74597],{"class":39,"line":49892},[37,74598,74599],{"class":43},"    \u002F\u002F render()\n",[37,74601,74602],{"class":39,"line":49905},[37,74603,2757],{"emptyLinePlaceholder":454},[37,74605,74606],{"class":39,"line":49910},[37,74607,74608],{"class":43},"    \u002F\u002F 获取DOM对象\n",[37,74610,74611,74613,74615,74617,74619,74621,74623,74625],{"class":39,"line":49919},[37,74612,11562],{"class":54},[37,74614,70157],{"class":61},[37,74616,13905],{"class":54},[37,74618,54732],{"class":50},[37,74620,54735],{"class":2320},[37,74622,165],{"class":50},[37,74624,70168],{"class":185},[37,74626,280],{"class":50},[37,74628,74629,74631,74633,74635,74637,74639,74641,74643],{"class":39,"line":49928},[37,74630,11562],{"class":54},[37,74632,69984],{"class":61},[37,74634,13905],{"class":54},[37,74636,54732],{"class":50},[37,74638,54735],{"class":2320},[37,74640,165],{"class":50},[37,74642,69995],{"class":185},[37,74644,280],{"class":50},[37,74646,74647,74649,74651,74653,74655,74657,74659,74661],{"class":39,"line":49945},[37,74648,11562],{"class":54},[37,74650,16030],{"class":61},[37,74652,13905],{"class":54},[37,74654,54732],{"class":50},[37,74656,54735],{"class":2320},[37,74658,165],{"class":50},[37,74660,70014],{"class":185},[37,74662,280],{"class":50},[37,74664,74666,74668,74670,74672,74674,74676,74678,74680],{"class":39,"line":74665},231,[37,74667,11562],{"class":54},[37,74669,70043],{"class":61},[37,74671,13905],{"class":54},[37,74673,54732],{"class":50},[37,74675,54735],{"class":2320},[37,74677,165],{"class":50},[37,74679,70054],{"class":185},[37,74681,280],{"class":50},[37,74683,74685,74687,74689,74691,74693,74695,74697,74699],{"class":39,"line":74684},232,[37,74686,11562],{"class":54},[37,74688,70023],{"class":61},[37,74690,13905],{"class":54},[37,74692,54732],{"class":50},[37,74694,54735],{"class":2320},[37,74696,165],{"class":50},[37,74698,70034],{"class":185},[37,74700,280],{"class":50},[37,74702,74704,74706,74708,74710,74712,74714,74716,74718],{"class":39,"line":74703},233,[37,74705,11562],{"class":54},[37,74707,70063],{"class":61},[37,74709,13905],{"class":54},[37,74711,54732],{"class":50},[37,74713,54735],{"class":2320},[37,74715,165],{"class":50},[37,74717,70074],{"class":185},[37,74719,280],{"class":50},[37,74721,74723],{"class":39,"line":74722},234,[37,74724,2757],{"emptyLinePlaceholder":454},[37,74726,74728],{"class":39,"line":74727},235,[37,74729,74730],{"class":43},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[37,74732,74734,74736,74738,74740,74742,74744,74746,74748,74750],{"class":39,"line":74733},236,[37,74735,70175],{"class":50},[37,74737,58149],{"class":2320},[37,74739,165],{"class":50},[37,74741,70182],{"class":185},[37,74743,12776],{"class":50},[37,74745,54785],{"class":54},[37,74747,2027],{"class":50},[37,74749,599],{"class":159},[37,74751,12783],{"class":50},[37,74753,74755],{"class":39,"line":74754},237,[37,74756,74757],{"class":43},"      \u002F\u002F 禁止浏览器跳转\n",[37,74759,74761,74763,74765],{"class":39,"line":74760},238,[37,74762,70202],{"class":50},[37,74764,70205],{"class":2320},[37,74766,2333],{"class":50},[37,74768,74770],{"class":39,"line":74769},239,[37,74771,74772],{"class":43},"      \u002F\u002F 非空判断\n",[37,74774,74776],{"class":39,"line":74775},240,[37,74777,74778],{"class":43},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[37,74780,74782],{"class":39,"line":74781},241,[37,74783,74784],{"class":43},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[37,74786,74788,74790,74792,74794,74797,74799,74802,74805,74807,74809],{"class":39,"line":74787},242,[37,74789,54816],{"class":54},[37,74791,2027],{"class":50},[37,74793,748],{"class":54},[37,74795,74796],{"class":50},"uname.value ",[37,74798,71693],{"class":54},[37,74800,74801],{"class":54}," !",[37,74803,74804],{"class":50},"age.value ",[37,74806,71693],{"class":54},[37,74808,74801],{"class":54},[37,74810,74811],{"class":50},"salary.value) {\n",[37,74813,74815,74817,74819,74821,74823],{"class":39,"line":74814},243,[37,74816,15093],{"class":54},[37,74818,70276],{"class":2320},[37,74820,165],{"class":50},[37,74822,70281],{"class":185},[37,74824,280],{"class":50},[37,74826,74828],{"class":39,"line":74827},244,[37,74829,52734],{"class":50},[37,74831,74833,74835,74837],{"class":39,"line":74832},245,[37,74834,58343],{"class":50},[37,74836,52220],{"class":2320},[37,74838,74839],{"class":50},"({\n",[37,74841,74843],{"class":39,"line":74842},246,[37,74844,74845],{"class":43},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[37,74847,74849],{"class":39,"line":74848},247,[37,74850,74851],{"class":43},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[37,74853,74855],{"class":39,"line":74854},248,[37,74856,74857],{"class":43},"        \u002F\u002F 对象的序号应为数组长度+1\n",[37,74859,74861],{"class":39,"line":74860},249,[37,74862,74863],{"class":43},"        \u002F\u002F unameId: arr.length + 1,\n",[37,74865,74867],{"class":39,"line":74866},250,[37,74868,2757],{"emptyLinePlaceholder":454},[37,74870,74872],{"class":39,"line":74871},251,[37,74873,74874],{"class":43},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[37,74876,74878],{"class":39,"line":74877},252,[37,74879,74880],{"class":43},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[37,74882,74884],{"class":39,"line":74883},253,[37,74885,74886],{"class":43},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[37,74888,74890],{"class":39,"line":74889},254,[37,74891,74892],{"class":43},"        \u002F\u002F 0当假看\n",[37,74894,74896,74899,74901,74903,74906,74908,74910,74912,74915,74917,74919,74922,74924],{"class":39,"line":74895},255,[37,74897,74898],{"class":50},"        unameId: arr.",[37,74900,52304],{"class":61},[37,74902,74150],{"class":54},[37,74904,74905],{"class":50}," arr[arr.",[37,74907,52304],{"class":61},[37,74909,52607],{"class":54},[37,74911,25460],{"class":61},[37,74913,74914],{"class":50},"].unameId ",[37,74916,993],{"class":54},[37,74918,25460],{"class":61},[37,74920,74921],{"class":54}," :",[37,74923,25460],{"class":61},[37,74925,31805],{"class":50},[37,74927,74929],{"class":39,"line":74928},256,[37,74930,70329],{"class":50},[37,74932,74934],{"class":39,"line":74933},257,[37,74935,70334],{"class":50},[37,74937,74939],{"class":39,"line":74938},258,[37,74940,70344],{"class":50},[37,74942,74944],{"class":39,"line":74943},259,[37,74945,70339],{"class":50},[37,74947,74949],{"class":39,"line":74948},260,[37,74950,74951],{"class":50},"        city: city.value,\n",[37,74953,74955],{"class":39,"line":74954},261,[37,74956,74957],{"class":43},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[37,74959,74961],{"class":39,"line":74960},262,[37,74962,74963],{"class":43},"        \u002F\u002F time: new Date().toDateString()\n",[37,74965,74967,74970,74973],{"class":39,"line":74966},263,[37,74968,74969],{"class":50},"        time: ",[37,74971,74972],{"class":2320},"getTime",[37,74974,2333],{"class":50},[37,74976,74978],{"class":39,"line":74977},264,[37,74979,65151],{"class":50},[37,74981,74983],{"class":39,"line":74982},265,[37,74984,74985],{"class":43},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[37,74987,74989,74991],{"class":39,"line":74988},266,[37,74990,70404],{"class":2320},[37,74992,2333],{"class":50},[37,74994,74996,74998,75000,75002,75004],{"class":39,"line":74995},267,[37,74997,70387],{"class":61},[37,74999,1068],{"class":50},[37,75001,70392],{"class":2320},[37,75003,13391],{"class":50},[37,75005,75006],{"class":43},"\u002F\u002F重置表单\n",[37,75008,75010],{"class":39,"line":75009},268,[37,75011,75012],{"class":43},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[37,75014,75016,75019,75021,75023,75026,75028,75030,75032,75034],{"class":39,"line":75015},269,[37,75017,75018],{"class":50},"      localStorage.",[37,75020,71990],{"class":2320},[37,75022,165],{"class":50},[37,75024,75025],{"class":185},"'data'",[37,75027,12776],{"class":50},[37,75029,72000],{"class":61},[37,75031,1068],{"class":50},[37,75033,72005],{"class":2320},[37,75035,75036],{"class":50},"(arr))\n",[37,75038,75040],{"class":39,"line":75039},270,[37,75041,33798],{"class":50},[37,75043,75045],{"class":39,"line":75044},271,[37,75046,2757],{"emptyLinePlaceholder":454},[37,75048,75050],{"class":39,"line":75049},272,[37,75051,75052],{"class":43},"    \u002F\u002F 3.删除业务\n",[37,75054,75056],{"class":39,"line":75055},273,[37,75057,75058],{"class":43},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[37,75060,75062,75064,75066,75068,75070,75072,75074,75076,75078],{"class":39,"line":75061},274,[37,75063,70677],{"class":50},[37,75065,58149],{"class":2320},[37,75067,165],{"class":50},[37,75069,58154],{"class":185},[37,75071,12776],{"class":50},[37,75073,54785],{"class":54},[37,75075,2027],{"class":50},[37,75077,599],{"class":159},[37,75079,12783],{"class":50},[37,75081,75083],{"class":39,"line":75082},275,[37,75084,75085],{"class":43},"      \u002F\u002F 判断是否点击的是删除按钮\n",[37,75087,75089,75091,75093,75095,75097],{"class":39,"line":75088},276,[37,75090,54816],{"class":54},[37,75092,67370],{"class":50},[37,75094,54822],{"class":54},[37,75096,68592],{"class":185},[37,75098,12783],{"class":50},[37,75100,75102],{"class":39,"line":75101},277,[37,75103,75104],{"class":43},"        \u002F\u002F alert(1)\n",[37,75106,75108],{"class":39,"line":75107},278,[37,75109,75110],{"class":43},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[37,75112,75114],{"class":39,"line":75113},279,[37,75115,75116],{"class":43},"        \u002F\u002F console.log(e.target)\n",[37,75118,75120],{"class":39,"line":75119},280,[37,75121,75122],{"class":43},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[37,75124,75126],{"class":39,"line":75125},281,[37,75127,2757],{"emptyLinePlaceholder":454},[37,75129,75131],{"class":39,"line":75130},282,[37,75132,75133],{"class":43},"        \u002F\u002F 确认框，确然是否真的要删除\n",[37,75135,75137],{"class":39,"line":75136},283,[37,75138,75139],{"class":43},"        \u002F\u002F confirm()为确认框\n",[37,75141,75143],{"class":39,"line":75142},284,[37,75144,75145],{"class":43},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[37,75147,75149,75151,75153,75156,75158,75161],{"class":39,"line":75148},285,[37,75150,2854],{"class":54},[37,75152,2027],{"class":50},[37,75154,75155],{"class":2320},"confirm",[37,75157,165],{"class":50},[37,75159,75160],{"class":185},"'您确定要删除这条数据吗？'",[37,75162,75163],{"class":50},")) {\n",[37,75165,75167,75170,75172,75174,75176],{"class":39,"line":75166},286,[37,75168,75169],{"class":50},"          arr.",[37,75171,58346],{"class":2320},[37,75173,70730],{"class":50},[37,75175,332],{"class":61},[37,75177,280],{"class":50},[37,75179,75181],{"class":39,"line":75180},287,[37,75182,75183],{"class":43},"          \u002F\u002F 3.4 重新渲染页面\n",[37,75185,75187,75190],{"class":39,"line":75186},288,[37,75188,75189],{"class":2320},"          render",[37,75191,2333],{"class":50},[37,75193,75195],{"class":39,"line":75194},289,[37,75196,75197],{"class":43},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[37,75199,75201,75204,75206,75208,75210,75212,75214,75216,75218],{"class":39,"line":75200},290,[37,75202,75203],{"class":50},"          localStorage.",[37,75205,71990],{"class":2320},[37,75207,165],{"class":50},[37,75209,75025],{"class":185},[37,75211,12776],{"class":50},[37,75213,72000],{"class":61},[37,75215,1068],{"class":50},[37,75217,72005],{"class":2320},[37,75219,75036],{"class":50},[37,75221,75223],{"class":39,"line":75222},291,[37,75224,2886],{"class":50},[37,75226,75228],{"class":39,"line":75227},292,[37,75229,52734],{"class":50},[37,75231,75233],{"class":39,"line":75232},293,[37,75234,2757],{"emptyLinePlaceholder":454},[37,75236,75238],{"class":39,"line":75237},294,[37,75239,33798],{"class":50},[37,75241,75243],{"class":39,"line":75242},295,[37,75244,2757],{"emptyLinePlaceholder":454},[37,75246,75248,75250,75252],{"class":39,"line":75247},296,[37,75249,52753],{"class":50},[37,75251,52149],{"class":51636},[37,75253,51643],{"class":50},[37,75255,75257,75259,75261],{"class":39,"line":75256},297,[37,75258,52121],{"class":50},[37,75260,52136],{"class":51636},[37,75262,51643],{"class":50},[37,75264,75266],{"class":39,"line":75265},298,[37,75267,2757],{"emptyLinePlaceholder":454},[37,75269,75271,75273,75275],{"class":39,"line":75270},299,[37,75272,52121],{"class":50},[37,75274,50971],{"class":51636},[37,75276,51643],{"class":50},[469,75278,75280],{"id":75279},"_36-正则表达式","3.6 正则表达式",[14,75282,75283],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75285,75286],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75288,75289],{},"正则表达式的作用：",[1515,75291,75292,75299,75305],{},[484,75293,75294,75295,75298],{},"表单验证（ ",[673,75296,75297],{},"匹配"," ）",[484,75300,75301,75302,75298],{},"过滤敏感词（ ",[673,75303,75304],{},"替换",[484,75306,75307,75308,75298],{},"字符串中提取我们想要的部分（ ",[673,75309,75310],{},"提取",[498,75312,75314],{"id":75313},"_361-语法","3.6.1 语法",[14,75316,75317],{},"正则表达式使用步骤：",[481,75319,75320,75323],{},[484,75321,75322],{},"定义规则",[484,75324,75325],{},"查找是否匹配",[14,75327,75328],{},"正则表达式里边不需要写引号",[14,75330,75331],{},[1838,75332],{"alt":32,"src":75333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75335,75336],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75338,75339],{},"reg.test(str)",[14,75341,75342],{},[1838,75343],{"alt":32,"src":75344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75346,75347],{},[1838,75348],{"alt":32,"src":75349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[498,75351,75353],{"id":75352},"_362-元字符","3.6.2 元字符",[481,75355,75356,75359,75362,75365,75372],{},[484,75357,75358],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[484,75360,75361],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[484,75363,75364],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[484,75366,75367,75368],{},"正则验证工具：",[51,75369,75370],{"href":75370,"rel":75371},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24206],[484,75373,75374],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22339,75376,75378],{"id":75377},"_3621-边界符","3.6.2.1 边界符",[14,75380,75381],{},[1838,75382],{"alt":32,"src":75383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75385,75386],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75388,75389],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75391,75392],{},"只匹配一次",[14,75394,75395],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22339,75397,75399],{"id":75398},"_3622-量词","3.6.2.2 量词",[14,75401,75402],{},[1838,75403],{"alt":32,"src":75404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75406,75407],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22339,75409,75411],{"id":75410},"_3623-元字符","3.6.2.3 元字符",[14,75413,75414],{},[1838,75415],{"alt":32,"src":75416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75418,75419],{},"匹配的是a或b或c []只选一个",[14,75421,75422],{},[1838,75423],{"alt":32,"src":75424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75426,75427],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75429,75430],{},[1838,75431],{"alt":32,"src":75432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75434,75435],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75437,75438],{},[1838,75439],{"alt":32,"src":75440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[27,75442,75444],{"className":50969,"code":75443,"language":50971,"meta":32,"style":32},"\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",[34,75445,75446,75456,75470,75474,75482,75496,75516,75528,75536,75540,75548,75556,75561,75592,75619,75647,75651,75656,75684,75715,75720,75725,75756,75788,75820,75824,75829,75860,75890,75920,75924,75929,75960,75991,76021,76051,76055,76060,76093,76097,76102,76133,76164,76168,76173,76204,76234,76265,76269,76274,76306,76337,76368,76395,76426,76458,76491,76522,76553,76585,76616,76624,76632,76636],{"__ignoreMap":32},[37,75447,75448,75450,75452,75454],{"class":39,"line":40},[37,75449,51633],{"class":50},[37,75451,51637],{"class":51636},[37,75453,51640],{"class":2320},[37,75455,51643],{"class":50},[37,75457,75458,75460,75462,75464,75466,75468],{"class":39,"line":47},[37,75459,1418],{"class":50},[37,75461,50971],{"class":51636},[37,75463,51652],{"class":2320},[37,75465,55],{"class":50},[37,75467,51657],{"class":185},[37,75469,51643],{"class":50},[37,75471,75472],{"class":39,"line":104},[37,75473,2757],{"emptyLinePlaceholder":454},[37,75475,75476,75478,75480],{"class":39,"line":113},[37,75477,1418],{"class":50},[37,75479,51670],{"class":51636},[37,75481,51643],{"class":50},[37,75483,75484,75486,75488,75490,75492,75494],{"class":39,"line":189},[37,75485,52480],{"class":50},[37,75487,51680],{"class":51636},[37,75489,51683],{"class":2320},[37,75491,55],{"class":50},[37,75493,51688],{"class":185},[37,75495,51643],{"class":50},[37,75497,75498,75500,75502,75504,75506,75508,75510,75512,75514],{"class":39,"line":195},[37,75499,52480],{"class":50},[37,75501,51680],{"class":51636},[37,75503,15261],{"class":2320},[37,75505,55],{"class":50},[37,75507,51727],{"class":185},[37,75509,51707],{"class":2320},[37,75511,55],{"class":50},[37,75513,51734],{"class":185},[37,75515,51643],{"class":50},[37,75517,75518,75520,75522,75524,75526],{"class":39,"line":201},[37,75519,52480],{"class":50},[37,75521,51743],{"class":51636},[37,75523,51746],{"class":50},[37,75525,51743],{"class":51636},[37,75527,51643],{"class":50},[37,75529,75530,75532,75534],{"class":39,"line":207},[37,75531,52121],{"class":50},[37,75533,51670],{"class":51636},[37,75535,51643],{"class":50},[37,75537,75538],{"class":39,"line":213},[37,75539,2757],{"emptyLinePlaceholder":454},[37,75541,75542,75544,75546],{"class":39,"line":218},[37,75543,1418],{"class":50},[37,75545,52136],{"class":51636},[37,75547,51643],{"class":50},[37,75549,75550,75552,75554],{"class":39,"line":227},[37,75551,52480],{"class":50},[37,75553,52149],{"class":51636},[37,75555,51643],{"class":50},[37,75557,75558],{"class":39,"line":232},[37,75559,75560],{"class":43},"    \u002F\u002F 元字符中\n",[37,75562,75563,75565,75567,75569,75571,75574,75576,75578,75581,75583,75586,75589],{"class":39,"line":238},[37,75564,74089],{"class":50},[37,75566,58583],{"class":2320},[37,75568,165],{"class":50},[37,75570,1094],{"class":185},[37,75572,75573],{"class":48313},"哈",[37,75575,1094],{"class":185},[37,75577,1068],{"class":50},[37,75579,75580],{"class":2320},"test",[37,75582,165],{"class":50},[37,75584,75585],{"class":185},"'哈'",[37,75587,75588],{"class":50},"))  ",[37,75590,75591],{"class":43},"\u002F\u002Ftrue\n",[37,75593,75594,75596,75598,75600,75602,75604,75606,75608,75610,75612,75615,75617],{"class":39,"line":244},[37,75595,74089],{"class":50},[37,75597,58583],{"class":2320},[37,75599,165],{"class":50},[37,75601,1094],{"class":185},[37,75603,75573],{"class":48313},[37,75605,1094],{"class":185},[37,75607,1068],{"class":50},[37,75609,75580],{"class":2320},[37,75611,165],{"class":50},[37,75613,75614],{"class":185},"'哈哈'",[37,75616,75588],{"class":50},[37,75618,75591],{"class":43},[37,75620,75621,75623,75625,75627,75629,75631,75633,75635,75637,75639,75642,75645],{"class":39,"line":250},[37,75622,74089],{"class":50},[37,75624,58583],{"class":2320},[37,75626,165],{"class":50},[37,75628,1094],{"class":185},[37,75630,75573],{"class":48313},[37,75632,1094],{"class":185},[37,75634,1068],{"class":50},[37,75636,75580],{"class":2320},[37,75638,165],{"class":50},[37,75640,75641],{"class":185},"'二哈'",[37,75643,75644],{"class":50},"))   ",[37,75646,75591],{"class":43},[37,75648,75649],{"class":39,"line":256},[37,75650,2757],{"emptyLinePlaceholder":454},[37,75652,75653],{"class":39,"line":261},[37,75654,75655],{"class":43},"    \u002F\u002F 1.边界符\n",[37,75657,75658,75660,75662,75664,75666,75668,75670,75672,75674,75676,75678,75680,75682],{"class":39,"line":267},[37,75659,74089],{"class":50},[37,75661,58583],{"class":2320},[37,75663,165],{"class":50},[37,75665,1094],{"class":185},[37,75667,1474],{"class":54},[37,75669,75573],{"class":48313},[37,75671,1094],{"class":185},[37,75673,1068],{"class":50},[37,75675,75580],{"class":2320},[37,75677,165],{"class":50},[37,75679,75585],{"class":185},[37,75681,75588],{"class":50},[37,75683,75591],{"class":43},[37,75685,75686,75688,75690,75692,75694,75696,75698,75700,75702,75704,75706,75708,75710,75712],{"class":39,"line":283},[37,75687,74089],{"class":50},[37,75689,58583],{"class":2320},[37,75691,165],{"class":50},[37,75693,1094],{"class":185},[37,75695,1474],{"class":54},[37,75697,75573],{"class":48313},[37,75699,820],{"class":54},[37,75701,1094],{"class":185},[37,75703,1068],{"class":50},[37,75705,75580],{"class":2320},[37,75707,165],{"class":50},[37,75709,75614],{"class":185},[37,75711,75588],{"class":50},[37,75713,75714],{"class":43},"\u002F\u002Ffalse\n",[37,75716,75717],{"class":39,"line":288},[37,75718,75719],{"class":43},"    \u002F\u002F 2.量词\n",[37,75721,75722],{"class":39,"line":294},[37,75723,75724],{"class":43},"    \u002F\u002F 量词 * 类似于 >= 0\n",[37,75726,75727,75729,75731,75733,75735,75737,75739,75742,75744,75746,75748,75750,75752,75754],{"class":39,"line":300},[37,75728,74089],{"class":50},[37,75730,58583],{"class":2320},[37,75732,165],{"class":50},[37,75734,1094],{"class":185},[37,75736,1474],{"class":54},[37,75738,75573],{"class":48313},[37,75740,75741],{"class":54},"*$",[37,75743,1094],{"class":185},[37,75745,1068],{"class":50},[37,75747,75580],{"class":2320},[37,75749,165],{"class":50},[37,75751,75614],{"class":185},[37,75753,75588],{"class":50},[37,75755,75591],{"class":43},[37,75757,75758,75760,75762,75764,75766,75768,75770,75772,75774,75776,75778,75780,75783,75785],{"class":39,"line":306},[37,75759,74089],{"class":50},[37,75761,58583],{"class":2320},[37,75763,165],{"class":50},[37,75765,1094],{"class":185},[37,75767,1474],{"class":54},[37,75769,75573],{"class":48313},[37,75771,75741],{"class":54},[37,75773,1094],{"class":185},[37,75775,1068],{"class":50},[37,75777,75580],{"class":2320},[37,75779,165],{"class":50},[37,75781,75782],{"class":185},"'二哈好傻'",[37,75784,75588],{"class":50},[37,75786,75787],{"class":43},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[37,75789,75790,75792,75794,75796,75798,75800,75802,75804,75806,75808,75810,75812,75815,75817],{"class":39,"line":312},[37,75791,74089],{"class":50},[37,75793,58583],{"class":2320},[37,75795,165],{"class":50},[37,75797,1094],{"class":185},[37,75799,1474],{"class":54},[37,75801,75573],{"class":48313},[37,75803,75741],{"class":54},[37,75805,1094],{"class":185},[37,75807,1068],{"class":50},[37,75809,75580],{"class":2320},[37,75811,165],{"class":50},[37,75813,75814],{"class":185},"'哈好哈'",[37,75816,75644],{"class":50},[37,75818,75819],{"class":43},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[37,75821,75822],{"class":39,"line":317},[37,75823,2757],{"emptyLinePlaceholder":454},[37,75825,75826],{"class":39,"line":323},[37,75827,75828],{"class":43},"    \u002F\u002F +类似于>=1\n",[37,75830,75831,75833,75835,75837,75839,75841,75843,75846,75848,75850,75852,75854,75856,75858],{"class":39,"line":337},[37,75832,74089],{"class":50},[37,75834,58583],{"class":2320},[37,75836,165],{"class":50},[37,75838,1094],{"class":185},[37,75840,1474],{"class":54},[37,75842,75573],{"class":48313},[37,75844,75845],{"class":54},"+$",[37,75847,1094],{"class":185},[37,75849,1068],{"class":50},[37,75851,75580],{"class":2320},[37,75853,165],{"class":50},[37,75855,75614],{"class":185},[37,75857,75588],{"class":50},[37,75859,75591],{"class":43},[37,75861,75862,75864,75866,75868,75870,75872,75874,75876,75878,75880,75882,75884,75886,75888],{"class":39,"line":342},[37,75863,74089],{"class":50},[37,75865,58583],{"class":2320},[37,75867,165],{"class":50},[37,75869,1094],{"class":185},[37,75871,1474],{"class":54},[37,75873,75573],{"class":48313},[37,75875,75845],{"class":54},[37,75877,1094],{"class":185},[37,75879,1068],{"class":50},[37,75881,75580],{"class":2320},[37,75883,165],{"class":50},[37,75885,75782],{"class":185},[37,75887,75588],{"class":50},[37,75889,75787],{"class":43},[37,75891,75892,75894,75896,75898,75900,75902,75904,75906,75908,75910,75912,75914,75916,75918],{"class":39,"line":347},[37,75893,74089],{"class":50},[37,75895,58583],{"class":2320},[37,75897,165],{"class":50},[37,75899,1094],{"class":185},[37,75901,1474],{"class":54},[37,75903,75573],{"class":48313},[37,75905,75845],{"class":54},[37,75907,1094],{"class":185},[37,75909,1068],{"class":50},[37,75911,75580],{"class":2320},[37,75913,165],{"class":50},[37,75915,75814],{"class":185},[37,75917,75644],{"class":50},[37,75919,75714],{"class":43},[37,75921,75922],{"class":39,"line":352},[37,75923,2757],{"emptyLinePlaceholder":454},[37,75925,75926],{"class":39,"line":357},[37,75927,75928],{"class":43},"    \u002F\u002F ?类似于0次或一次\n",[37,75930,75931,75933,75935,75937,75939,75941,75944,75946,75948,75950,75952,75954,75956,75958],{"class":39,"line":362},[37,75932,74089],{"class":50},[37,75934,58583],{"class":2320},[37,75936,165],{"class":50},[37,75938,1094],{"class":185},[37,75940,1474],{"class":54},[37,75942,75943],{"class":48313},"哈？",[37,75945,820],{"class":54},[37,75947,1094],{"class":185},[37,75949,1068],{"class":50},[37,75951,75580],{"class":2320},[37,75953,165],{"class":50},[37,75955,74563],{"class":185},[37,75957,75644],{"class":50},[37,75959,75591],{"class":43},[37,75961,75962,75964,75966,75968,75970,75972,75974,75977,75979,75981,75983,75985,75987,75989],{"class":39,"line":367},[37,75963,74089],{"class":50},[37,75965,58583],{"class":2320},[37,75967,165],{"class":50},[37,75969,1094],{"class":185},[37,75971,1474],{"class":54},[37,75973,75573],{"class":48313},[37,75975,75976],{"class":54},"?$",[37,75978,1094],{"class":185},[37,75980,1068],{"class":50},[37,75982,75580],{"class":2320},[37,75984,165],{"class":50},[37,75986,75614],{"class":185},[37,75988,75588],{"class":50},[37,75990,75714],{"class":43},[37,75992,75993,75995,75997,75999,76001,76003,76005,76007,76009,76011,76013,76015,76017,76019],{"class":39,"line":373},[37,75994,74089],{"class":50},[37,75996,58583],{"class":2320},[37,75998,165],{"class":50},[37,76000,1094],{"class":185},[37,76002,1474],{"class":54},[37,76004,75573],{"class":48313},[37,76006,75976],{"class":54},[37,76008,1094],{"class":185},[37,76010,1068],{"class":50},[37,76012,75580],{"class":2320},[37,76014,165],{"class":50},[37,76016,75782],{"class":185},[37,76018,75588],{"class":50},[37,76020,75787],{"class":43},[37,76022,76023,76025,76027,76029,76031,76033,76035,76037,76039,76041,76043,76045,76047,76049],{"class":39,"line":392},[37,76024,74089],{"class":50},[37,76026,58583],{"class":2320},[37,76028,165],{"class":50},[37,76030,1094],{"class":185},[37,76032,1474],{"class":54},[37,76034,75573],{"class":48313},[37,76036,75976],{"class":54},[37,76038,1094],{"class":185},[37,76040,1068],{"class":50},[37,76042,75580],{"class":2320},[37,76044,165],{"class":50},[37,76046,75814],{"class":185},[37,76048,75588],{"class":50},[37,76050,75714],{"class":43},[37,76052,76053],{"class":39,"line":398},[37,76054,2757],{"emptyLinePlaceholder":454},[37,76056,76057],{"class":39,"line":409},[37,76058,76059],{"class":43},"    \u002F\u002F {n}写几，就必须出现几次\n",[37,76061,76062,76064,76066,76068,76070,76072,76074,76077,76079,76081,76083,76085,76088,76091],{"class":39,"line":415},[37,76063,74089],{"class":50},[37,76065,58583],{"class":2320},[37,76067,165],{"class":50},[37,76069,1094],{"class":185},[37,76071,1474],{"class":54},[37,76073,75573],{"class":48313},[37,76075,76076],{"class":54},"{4}$",[37,76078,1094],{"class":185},[37,76080,1068],{"class":50},[37,76082,75580],{"class":2320},[37,76084,165],{"class":50},[37,76086,76087],{"class":185},"'哈哈哈哈'",[37,76089,76090],{"class":50},")) ",[37,76092,75591],{"class":43},[37,76094,76095],{"class":39,"line":420},[37,76096,2757],{"emptyLinePlaceholder":454},[37,76098,76099],{"class":39,"line":425},[37,76100,76101],{"class":43},"    \u002F\u002F {n,}大于等于n次\n",[37,76103,76104,76106,76108,76110,76112,76114,76116,76119,76121,76123,76125,76127,76129,76131],{"class":39,"line":431},[37,76105,74089],{"class":50},[37,76107,58583],{"class":2320},[37,76109,165],{"class":50},[37,76111,1094],{"class":185},[37,76113,1474],{"class":54},[37,76115,75573],{"class":48313},[37,76117,76118],{"class":54},"{4,}$",[37,76120,1094],{"class":185},[37,76122,1068],{"class":50},[37,76124,75580],{"class":2320},[37,76126,165],{"class":50},[37,76128,76087],{"class":185},[37,76130,76090],{"class":50},[37,76132,75591],{"class":43},[37,76134,76135,76137,76139,76141,76143,76145,76147,76149,76151,76153,76155,76157,76160,76162],{"class":39,"line":436},[37,76136,74089],{"class":50},[37,76138,58583],{"class":2320},[37,76140,165],{"class":50},[37,76142,1094],{"class":185},[37,76144,1474],{"class":54},[37,76146,75573],{"class":48313},[37,76148,76118],{"class":54},[37,76150,1094],{"class":185},[37,76152,1068],{"class":50},[37,76154,75580],{"class":2320},[37,76156,165],{"class":50},[37,76158,76159],{"class":185},"'哈哈哈哈哈'",[37,76161,76090],{"class":50},[37,76163,75591],{"class":43},[37,76165,76166],{"class":39,"line":442},[37,76167,2757],{"emptyLinePlaceholder":454},[37,76169,76170],{"class":39,"line":8374},[37,76171,76172],{"class":43},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[37,76174,76175,76177,76179,76181,76183,76185,76187,76190,76192,76194,76196,76198,76200,76202],{"class":39,"line":8386},[37,76176,74089],{"class":50},[37,76178,58583],{"class":2320},[37,76180,165],{"class":50},[37,76182,1094],{"class":185},[37,76184,1474],{"class":54},[37,76186,75573],{"class":48313},[37,76188,76189],{"class":54},"{4,6}$",[37,76191,1094],{"class":185},[37,76193,1068],{"class":50},[37,76195,75580],{"class":2320},[37,76197,165],{"class":50},[37,76199,76087],{"class":185},[37,76201,76090],{"class":50},[37,76203,75591],{"class":43},[37,76205,76206,76208,76210,76212,76214,76216,76218,76220,76222,76224,76226,76228,76230,76232],{"class":39,"line":8398},[37,76207,74089],{"class":50},[37,76209,58583],{"class":2320},[37,76211,165],{"class":50},[37,76213,1094],{"class":185},[37,76215,1474],{"class":54},[37,76217,75573],{"class":48313},[37,76219,76189],{"class":54},[37,76221,1094],{"class":185},[37,76223,1068],{"class":50},[37,76225,75580],{"class":2320},[37,76227,165],{"class":50},[37,76229,76159],{"class":185},[37,76231,76090],{"class":50},[37,76233,75591],{"class":43},[37,76235,76236,76238,76240,76242,76244,76246,76248,76250,76252,76254,76256,76258,76261,76263],{"class":39,"line":10057},[37,76237,74089],{"class":50},[37,76239,58583],{"class":2320},[37,76241,165],{"class":50},[37,76243,1094],{"class":185},[37,76245,1474],{"class":54},[37,76247,75573],{"class":48313},[37,76249,76189],{"class":54},[37,76251,1094],{"class":185},[37,76253,1068],{"class":50},[37,76255,75580],{"class":2320},[37,76257,165],{"class":50},[37,76259,76260],{"class":185},"'哈哈哈哈哈哈哈'",[37,76262,76090],{"class":50},[37,76264,75714],{"class":43},[37,76266,76267],{"class":39,"line":10082},[37,76268,2757],{"emptyLinePlaceholder":454},[37,76270,76271],{"class":39,"line":10105},[37,76272,76273],{"class":43},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[37,76275,76276,76278,76280,76282,76284,76286,76289,76291,76293,76295,76297,76299,76302,76304],{"class":39,"line":10129},[37,76277,74089],{"class":50},[37,76279,58583],{"class":2320},[37,76281,165],{"class":50},[37,76283,1094],{"class":185},[37,76285,1474],{"class":54},[37,76287,76288],{"class":61},"[abc]",[37,76290,820],{"class":54},[37,76292,1094],{"class":185},[37,76294,1068],{"class":50},[37,76296,75580],{"class":2320},[37,76298,165],{"class":50},[37,76300,76301],{"class":185},"'a'",[37,76303,75588],{"class":50},[37,76305,75591],{"class":43},[37,76307,76308,76310,76312,76314,76316,76318,76320,76322,76324,76326,76328,76330,76333,76335],{"class":39,"line":10134},[37,76309,74089],{"class":50},[37,76311,58583],{"class":2320},[37,76313,165],{"class":50},[37,76315,1094],{"class":185},[37,76317,1474],{"class":54},[37,76319,76288],{"class":61},[37,76321,820],{"class":54},[37,76323,1094],{"class":185},[37,76325,1068],{"class":50},[37,76327,75580],{"class":2320},[37,76329,165],{"class":50},[37,76331,76332],{"class":185},"'b'",[37,76334,75588],{"class":50},[37,76336,75591],{"class":43},[37,76338,76339,76341,76343,76345,76347,76349,76351,76353,76355,76357,76359,76361,76364,76366],{"class":39,"line":10139},[37,76340,74089],{"class":50},[37,76342,58583],{"class":2320},[37,76344,165],{"class":50},[37,76346,1094],{"class":185},[37,76348,1474],{"class":54},[37,76350,76288],{"class":61},[37,76352,820],{"class":54},[37,76354,1094],{"class":185},[37,76356,1068],{"class":50},[37,76358,75580],{"class":2320},[37,76360,165],{"class":50},[37,76362,76363],{"class":185},"'c'",[37,76365,75588],{"class":50},[37,76367,75591],{"class":43},[37,76369,76370,76372,76374,76376,76378,76380,76382,76384,76386,76388,76391,76393],{"class":39,"line":10144},[37,76371,74089],{"class":50},[37,76373,58583],{"class":2320},[37,76375,165],{"class":50},[37,76377,1094],{"class":185},[37,76379,76288],{"class":61},[37,76381,1094],{"class":185},[37,76383,1068],{"class":50},[37,76385,75580],{"class":2320},[37,76387,165],{"class":50},[37,76389,76390],{"class":185},"'ab'",[37,76392,75588],{"class":50},[37,76394,75591],{"class":43},[37,76396,76397,76399,76401,76403,76405,76407,76409,76411,76413,76415,76417,76419,76421,76423],{"class":39,"line":10153},[37,76398,74089],{"class":50},[37,76400,58583],{"class":2320},[37,76402,165],{"class":50},[37,76404,1094],{"class":185},[37,76406,1474],{"class":54},[37,76408,76288],{"class":61},[37,76410,820],{"class":54},[37,76412,1094],{"class":185},[37,76414,1068],{"class":50},[37,76416,75580],{"class":2320},[37,76418,165],{"class":50},[37,76420,76390],{"class":185},[37,76422,75588],{"class":50},[37,76424,76425],{"class":43},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[37,76427,76428,76430,76432,76434,76436,76438,76440,76443,76445,76447,76449,76451,76453,76455],{"class":39,"line":10158},[37,76429,74089],{"class":50},[37,76431,58583],{"class":2320},[37,76433,165],{"class":50},[37,76435,1094],{"class":185},[37,76437,1474],{"class":54},[37,76439,76288],{"class":61},[37,76441,76442],{"class":54},"{2}$",[37,76444,1094],{"class":185},[37,76446,1068],{"class":50},[37,76448,75580],{"class":2320},[37,76450,165],{"class":50},[37,76452,76390],{"class":185},[37,76454,75588],{"class":50},[37,76456,76457],{"class":43},"\u002F\u002Ftrue   可以选两个\n",[37,76459,76460,76462,76464,76466,76468,76470,76473,76475,76477,76479,76481,76483,76486,76488],{"class":39,"line":10164},[37,76461,74089],{"class":50},[37,76463,58583],{"class":2320},[37,76465,165],{"class":50},[37,76467,1094],{"class":185},[37,76469,1474],{"class":54},[37,76471,76472],{"class":61},"[a-z]",[37,76474,820],{"class":54},[37,76476,1094],{"class":185},[37,76478,1068],{"class":50},[37,76480,75580],{"class":2320},[37,76482,165],{"class":50},[37,76484,76485],{"class":185},"'p'",[37,76487,75644],{"class":50},[37,76489,76490],{"class":43},"\u002F\u002Ftrue   依然只能选一个\n",[37,76492,76493,76495,76497,76499,76501,76503,76506,76508,76510,76512,76514,76516,76518,76520],{"class":39,"line":10185},[37,76494,74089],{"class":50},[37,76496,58583],{"class":2320},[37,76498,165],{"class":50},[37,76500,1094],{"class":185},[37,76502,1474],{"class":54},[37,76504,76505],{"class":61},"[A-Z]",[37,76507,820],{"class":54},[37,76509,1094],{"class":185},[37,76511,1068],{"class":50},[37,76513,75580],{"class":2320},[37,76515,165],{"class":50},[37,76517,76485],{"class":185},[37,76519,75644],{"class":50},[37,76521,75714],{"class":43},[37,76523,76524,76526,76528,76530,76532,76534,76536,76538,76540,76542,76544,76546,76549,76551],{"class":39,"line":10191},[37,76525,74089],{"class":50},[37,76527,58583],{"class":2320},[37,76529,165],{"class":50},[37,76531,1094],{"class":185},[37,76533,1474],{"class":54},[37,76535,76505],{"class":61},[37,76537,820],{"class":54},[37,76539,1094],{"class":185},[37,76541,1068],{"class":50},[37,76543,75580],{"class":2320},[37,76545,165],{"class":50},[37,76547,76548],{"class":185},"'P'",[37,76550,75644],{"class":50},[37,76552,75591],{"class":43},[37,76554,76555,76557,76559,76561,76563,76565,76568,76570,76572,76574,76576,76578,76581,76583],{"class":39,"line":10205},[37,76556,74089],{"class":50},[37,76558,58583],{"class":2320},[37,76560,165],{"class":50},[37,76562,1094],{"class":185},[37,76564,1474],{"class":54},[37,76566,76567],{"class":61},"[0-9]",[37,76569,820],{"class":54},[37,76571,1094],{"class":185},[37,76573,1068],{"class":50},[37,76575,75580],{"class":2320},[37,76577,165],{"class":50},[37,76579,76580],{"class":185},"'0'",[37,76582,75644],{"class":50},[37,76584,75591],{"class":43},[37,76586,76587,76589,76591,76593,76595,76597,76600,76602,76604,76606,76608,76610,76612,76614],{"class":39,"line":10211},[37,76588,74089],{"class":50},[37,76590,58583],{"class":2320},[37,76592,165],{"class":50},[37,76594,1094],{"class":185},[37,76596,1474],{"class":54},[37,76598,76599],{"class":61},"[a-zA-Z0-9]",[37,76601,820],{"class":54},[37,76603,1094],{"class":185},[37,76605,1068],{"class":50},[37,76607,75580],{"class":2320},[37,76609,165],{"class":50},[37,76611,76485],{"class":185},[37,76613,75588],{"class":50},[37,76615,75591],{"class":43},[37,76617,76618,76620,76622],{"class":39,"line":10238},[37,76619,52753],{"class":50},[37,76621,52149],{"class":51636},[37,76623,51643],{"class":50},[37,76625,76626,76628,76630],{"class":39,"line":10247},[37,76627,52121],{"class":50},[37,76629,52136],{"class":51636},[37,76631,51643],{"class":50},[37,76633,76634],{"class":39,"line":10253},[37,76635,2757],{"emptyLinePlaceholder":454},[37,76637,76638,76640,76642],{"class":39,"line":10261},[37,76639,52121],{"class":50},[37,76641,50971],{"class":51636},[37,76643,51643],{"class":50},[22339,76645,76647],{"id":76646},"_3624-修饰符","3.6.2.4 修饰符",[14,76649,76650],{},[1838,76651],{"alt":32,"src":76652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76654,76655],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76657,76658],{},[1838,76659],{"alt":32,"src":76660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[27,76662,76664],{"className":50969,"code":76663,"language":50971,"meta":32,"style":32},"\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",[34,76665,76666,76676,76690,76698,76712,76732,76744,76752,76760,76768,76800,76831,76836,76868,76879,76912,76921,76929,76937],{"__ignoreMap":32},[37,76667,76668,76670,76672,76674],{"class":39,"line":40},[37,76669,51633],{"class":50},[37,76671,51637],{"class":51636},[37,76673,51640],{"class":2320},[37,76675,51643],{"class":50},[37,76677,76678,76680,76682,76684,76686,76688],{"class":39,"line":47},[37,76679,1418],{"class":50},[37,76681,50971],{"class":51636},[37,76683,51652],{"class":2320},[37,76685,55],{"class":50},[37,76687,51657],{"class":185},[37,76689,51643],{"class":50},[37,76691,76692,76694,76696],{"class":39,"line":104},[37,76693,1418],{"class":50},[37,76695,51670],{"class":51636},[37,76697,51643],{"class":50},[37,76699,76700,76702,76704,76706,76708,76710],{"class":39,"line":113},[37,76701,52480],{"class":50},[37,76703,51680],{"class":51636},[37,76705,51683],{"class":2320},[37,76707,55],{"class":50},[37,76709,51688],{"class":185},[37,76711,51643],{"class":50},[37,76713,76714,76716,76718,76720,76722,76724,76726,76728,76730],{"class":39,"line":189},[37,76715,52480],{"class":50},[37,76717,51680],{"class":51636},[37,76719,15261],{"class":2320},[37,76721,55],{"class":50},[37,76723,51727],{"class":185},[37,76725,51707],{"class":2320},[37,76727,55],{"class":50},[37,76729,51734],{"class":185},[37,76731,51643],{"class":50},[37,76733,76734,76736,76738,76740,76742],{"class":39,"line":195},[37,76735,52480],{"class":50},[37,76737,51743],{"class":51636},[37,76739,51746],{"class":50},[37,76741,51743],{"class":51636},[37,76743,51643],{"class":50},[37,76745,76746,76748,76750],{"class":39,"line":201},[37,76747,52121],{"class":50},[37,76749,51670],{"class":51636},[37,76751,51643],{"class":50},[37,76753,76754,76756,76758],{"class":39,"line":207},[37,76755,1418],{"class":50},[37,76757,52136],{"class":51636},[37,76759,51643],{"class":50},[37,76761,76762,76764,76766],{"class":39,"line":213},[37,76763,52480],{"class":50},[37,76765,52149],{"class":51636},[37,76767,51643],{"class":50},[37,76769,76770,76772,76774,76776,76778,76780,76783,76785,76787,76789,76791,76793,76796,76798],{"class":39,"line":218},[37,76771,74089],{"class":50},[37,76773,58583],{"class":2320},[37,76775,165],{"class":50},[37,76777,1094],{"class":185},[37,76779,1474],{"class":54},[37,76781,76782],{"class":48313},"java",[37,76784,820],{"class":54},[37,76786,1094],{"class":185},[37,76788,1068],{"class":50},[37,76790,75580],{"class":2320},[37,76792,165],{"class":50},[37,76794,76795],{"class":185},"'java'",[37,76797,76090],{"class":50},[37,76799,75591],{"class":43},[37,76801,76802,76804,76806,76808,76810,76812,76814,76816,76818,76820,76822,76824,76827,76829],{"class":39,"line":227},[37,76803,74089],{"class":50},[37,76805,58583],{"class":2320},[37,76807,165],{"class":50},[37,76809,1094],{"class":185},[37,76811,1474],{"class":54},[37,76813,76782],{"class":48313},[37,76815,820],{"class":54},[37,76817,1094],{"class":185},[37,76819,1068],{"class":50},[37,76821,75580],{"class":2320},[37,76823,165],{"class":50},[37,76825,76826],{"class":185},"'Java'",[37,76828,76090],{"class":50},[37,76830,75714],{"class":43},[37,76832,76833],{"class":39,"line":232},[37,76834,76835],{"class":43},"    \u002F\u002F 不区分大小写、\n",[37,76837,76838,76840,76842,76844,76846,76848,76850,76852,76854,76856,76858,76860,76862,76864,76866],{"class":39,"line":238},[37,76839,74089],{"class":50},[37,76841,58583],{"class":2320},[37,76843,165],{"class":50},[37,76845,1094],{"class":185},[37,76847,1474],{"class":54},[37,76849,76782],{"class":48313},[37,76851,820],{"class":54},[37,76853,1094],{"class":185},[37,76855,954],{"class":54},[37,76857,1068],{"class":50},[37,76859,75580],{"class":2320},[37,76861,165],{"class":50},[37,76863,76826],{"class":185},[37,76865,76090],{"class":50},[37,76867,75591],{"class":43},[37,76869,76870,76872,76874,76876],{"class":39,"line":244},[37,76871,11562],{"class":54},[37,76873,74255],{"class":61},[37,76875,13905],{"class":54},[37,76877,76878],{"class":185}," 'java是一门编程语言，学完java工资很高'\n",[37,76880,76881,76883,76886,76888,76891,76894,76896,76898,76900,76902,76905,76907,76910],{"class":39,"line":250},[37,76882,11562],{"class":54},[37,76884,76885],{"class":61}," result",[37,76887,13905],{"class":54},[37,76889,76890],{"class":50}," str.",[37,76892,76893],{"class":2320},"replace",[37,76895,165],{"class":50},[37,76897,1094],{"class":185},[37,76899,76782],{"class":48313},[37,76901,1094],{"class":185},[37,76903,76904],{"class":54},"ig",[37,76906,12776],{"class":50},[37,76908,76909],{"class":185},"'前端'",[37,76911,280],{"class":50},[37,76913,76914,76916,76918],{"class":39,"line":256},[37,76915,74089],{"class":50},[37,76917,58583],{"class":2320},[37,76919,76920],{"class":50},"(result)\n",[37,76922,76923,76925,76927],{"class":39,"line":261},[37,76924,52753],{"class":50},[37,76926,52149],{"class":51636},[37,76928,51643],{"class":50},[37,76930,76931,76933,76935],{"class":39,"line":267},[37,76932,52121],{"class":50},[37,76934,52136],{"class":51636},[37,76936,51643],{"class":50},[37,76938,76939,76941,76943],{"class":39,"line":283},[37,76940,52121],{"class":50},[37,76942,50971],{"class":51636},[37,76944,51643],{"class":50},[446,76946,76947],{},"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":32,"searchDepth":47,"depth":47,"links":76949},[76950,76960,76972,76989,76996,77004],{"id":53696,"depth":47,"text":53697,"children":76951},[76952,76953,76954,76955,76956,76957,76958,76959],{"id":53700,"depth":104,"text":53701},{"id":53733,"depth":104,"text":53734},{"id":53772,"depth":104,"text":53773},{"id":53930,"depth":104,"text":53931},{"id":53978,"depth":104,"text":53979},{"id":54115,"depth":104,"text":54116},{"id":54437,"depth":104,"text":54438},{"id":57425,"depth":104,"text":57426},{"id":57453,"depth":47,"text":57454,"children":76961},[76962,76963,76964,76965,76966,76967,76968,76969,76970,76971],{"id":57457,"depth":104,"text":57458},{"id":57480,"depth":104,"text":57481},{"id":58395,"depth":104,"text":58396},{"id":59085,"depth":104,"text":59086},{"id":59367,"depth":104,"text":59368},{"id":63528,"depth":104,"text":63529},{"id":63698,"depth":104,"text":63699},{"id":63826,"depth":104,"text":63827},{"id":63851,"depth":104,"text":63852},{"id":65240,"depth":104,"text":65241},{"id":66393,"depth":47,"text":66394,"children":76973},[76974,76975,76976,76977,76978,76979,76980,76981,76982,76983,76984,76985,76986,76987,76988],{"id":66397,"depth":104,"text":66398},{"id":67051,"depth":104,"text":67052},{"id":68746,"depth":104,"text":68747},{"id":68787,"depth":104,"text":68788},{"id":68829,"depth":104,"text":68830},{"id":68843,"depth":104,"text":68844},{"id":68892,"depth":104,"text":68893},{"id":68904,"depth":104,"text":68905},{"id":68919,"depth":104,"text":68920},{"id":68955,"depth":104,"text":68956},{"id":69036,"depth":104,"text":69037},{"id":69164,"depth":104,"text":69165},{"id":69176,"depth":104,"text":69177},{"id":69195,"depth":104,"text":69196},{"id":71306,"depth":104,"text":71307},{"id":71325,"depth":47,"text":71326,"children":76990},[76991,76992,76993,76994,76995],{"id":71346,"depth":104,"text":71347},{"id":71366,"depth":104,"text":71367},{"id":71415,"depth":104,"text":71416},{"id":71540,"depth":104,"text":71541},{"id":71721,"depth":104,"text":71722},{"id":71739,"depth":47,"text":71740,"children":76997},[76998,76999,77000,77001,77002,77003],{"id":71754,"depth":104,"text":71755},{"id":71813,"depth":104,"text":71814},{"id":71837,"depth":104,"text":71838},{"id":72157,"depth":104,"text":72158},{"id":72189,"depth":104,"text":72190},{"id":72212,"depth":104,"text":72213},{"id":75279,"depth":47,"text":75280,"children":77005},[77006,77007],{"id":75313,"depth":104,"text":75314},{"id":75352,"depth":104,"text":75353},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53668,"description":451},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77014,"title":77015,"body":77016,"description":451,"extension":452,"meta":93153,"navigation":454,"path":93154,"seo":93155,"stem":93156,"__hash__":93157},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77017,"toc":93089},[77018,77021,77024,77028,77032,77037,77042,77053,77057,77062,77065,77069,77072,77077,77081,77085,77088,77093,77096,77100,77103,77111,77114,77118,77123,77128,77131,77135,77140,77145,77148,77152,77157,77160,77165,77168,77173,77176,77181,77186,77189,77192,77196,77201,77206,77209,77213,77217,77220,77223,77226,77230,77234,77239,77244,77247,77251,77256,77261,77264,77267,77270,77273,77276,77279,77282,77285,77288,77293,77297,77302,77307,77310,77313,77316,77319,77322,77325,77328,77331,77335,77339,77342,77345,77348,77353,77355,77358,77361,77364,77367,77370,77373,77376,77379,77382,77385,77388,77391,77394,77399,77404,77409,77412,77416,77419,77424,77428,77430,77441,77446,77547,77550,77553,77556,77559,77562,77565,77568,77571,77573,77576,77579,77582,77585,77588,77590,77593,77596,77599,77602,77605,77608,77610,77613,77615,77617,77620,77624,77628,77631,77634,77637,77640,77643,77646,77649,77652,77655,77660,77780,77783,77786,77791,77794,77797,77800,77803,77808,77811,77814,77817,77820,77825,77828,77928,77993,78067,78071,78074,78077,78081,78084,78098,78127,78130,78133,78136,78139,78142,78145,78148,78150,78153,78156,78159,78162,78166,78171,78175,78180,78255,78258,78441,78444,78447,78450,78453,78456,78458,78461,78464,78467,78470,78473,78476,78478,78482,78485,78490,78493,78496,78499,78502,78504,78509,78512,78515,78518,78521,78523,78528,78531,78534,78536,78538,78541,78545,78548,78551,78556,78559,78562,78565,78615,78620,78624,78629,78632,78701,78704,78713,78717,78722,78725,78728,78736,78739,78756,80558,80562,80566,80571,80574,80578,80584,80590,80742,80747,80752,80755,80758,80761,80764,80767,80770,80773,80776,80779,80782,80785,80788,80793,80797,80800,80811,80815,80820,80823,80826,80829,80832,80835,80837,80840,80843,80846,80849,80851,80868,80871,80875,80878,80883,80888,80891,80894,80898,80901,80904,80913,80916,80920,80923,80928,80933,81000,81004,81007,81010,81015,81020,81106,81111,81115,81118,81121,81136,81139,81144,81148,81153,81262,81265,81276,81426,81430,81435,81544,81548,81553,81558,81563,81566,81573,81593,81629,81793,81798,81801,81806,81813,81816,81819,81822,81881,81937,81993,81997,82002,82317,82320,82324,82327,82332,82441,82446,82450,82455,82459,82530,82534,82536,82539,82542,82580,82856,82860,82877,82943,82977,82981,82984,82989,83018,83025,83034,83039,83054,83059,83068,83071,83208,83212,83274,83278,83283,83528,83532,83537,83540,83543,83546,83549,83553,83558,85139,85143,85147,85153,85156,85161,85165,85168,85173,85176,85187,85191,85196,85200,85205,85210,85213,85218,85222,85226,85229,85234,85239,85242,85245,85248,85370,85375,85477,85480,85483,85487,85492,85664,85669,85673,85676,85681,85747,85752,85755,85886,85889,85894,85897,85900,85991,85996,85999,86002,86005,86008,86013,86018,86021,86026,86031,86036,86040,86043,86046,86051,86056,86061,86066,86120,86123,86126,86131,86134,86137,86142,86147,86152,86156,86161,86175,86180,86183,86188,86192,86197,86202,86207,86212,86217,86222,86227,86232,86235,86239,86244,86247,86250,86253,86258,86263,86266,86269,86273,86276,86279,86284,86289,86294,86299,86302,86307,86312,86373,86378,86381,86386,87627,87632,87636,87640,87645,87648,87653,87658,87661,87666,87668,87673,87677,87680,87683,87694,87698,87703,87708,87763,87768,87773,87778,87989,87994,87998,88003,88006,88008,88011,88014,88461,88466,88473,88479,88482,88485,88749,88754,88758,89023,89028,89032,89037,89042,89047,89052,89383,89386,89391,89396,89399,89403,89407,89412,89417,89422,89427,89432,89437,89441,89444,89449,89454,89457,89531,89536,89541,89546,89548,89551,89921,89926,89931,89936,89939,89942,90044,90049,90054,90157,90161,90166,90170,90174,90179,90184,90187,90192,90195,90198,90591,90596,90599,90602,90605,90608,91128,91132,91137,91142,91147,91150,91155,91158,91161,91543,91548,91550,91552,91555,91558,92070,92074,92135,92138,92141,92144,92148,92151,92156,92161,93086],[10,77019,77015],{"id":77020},"_4js进阶",[14,77022,77023],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[469,77025,77027],{"id":77026},"_41-作用域","4.1 作用域",[498,77029,77031],{"id":77030},"_411-局部作用域","4.1.1 局部作用域",[14,77033,77034],{},[1838,77035],{"alt":32,"src":77036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,77038,77039],{},[1838,77040],{"alt":32,"src":77041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1515,77043,77044,77047,77050],{},[484,77045,77046],{},"函数作用域在函数内部",[484,77048,77049],{},"块级作用域在{}",[484,77051,77052],{},"对象的那个{}不是作用域，不是块作用域",[498,77054,77056],{"id":77055},"_412-全局作用域","4.1.2 全局作用域",[14,77058,77059],{},[1838,77060],{"alt":32,"src":77061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,77063,77064],{},"window.a=10不要这样写",[498,77066,77068],{"id":77067},"_413-作用域链","4.1.3 作用域链",[14,77070,77071],{},"变量查找机制",[14,77073,77074],{},[1838,77075],{"alt":32,"src":77076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[469,77078,77080],{"id":77079},"_42-垃圾回收机制","4.2 垃圾回收机制",[498,77082,77084],{"id":77083},"_421-大体介绍","4.2.1 大体介绍",[14,77086,77087],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,77089,77090],{},[1838,77091],{"alt":32,"src":77092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,77094,77095],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[498,77097,77099],{"id":77098},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,77101,77102],{},"堆栈空间分配区别：",[481,77104,77105,77108],{},[484,77106,77107],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[484,77109,77110],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,77112,77113],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22339,77115,77117],{"id":77116},"_4221-引用计数","4.2.2.1 引用计数",[14,77119,77120],{},[1838,77121],{"alt":32,"src":77122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,77124,77125],{},[1838,77126],{"alt":32,"src":77127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,77129,77130],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22339,77132,77134],{"id":77133},"_4222-标记清除法","4.2.2.2 标记清除法",[14,77136,77137],{},[1838,77138],{"alt":32,"src":77139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,77141,77142],{},[1838,77143],{"alt":32,"src":77144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,77146,77147],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[469,77149,77151],{"id":77150},"_43-闭包","4.3 闭包",[14,77153,77154],{},[1838,77155],{"alt":32,"src":77156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,77158,77159],{},"闭包：内层函数+外层函数的变量",[14,77161,77162],{},[1838,77163],{"alt":32,"src":77164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,77166,77167],{},"closure就是闭包",[14,77169,77170],{},[1838,77171],{"alt":32,"src":77172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,77174,77175],{},"内层函数必须包含外层函数的变量才是闭包",[14,77177,77178],{},[1838,77179],{"alt":32,"src":77180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,77182,77183],{},[1838,77184],{"alt":32,"src":77185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,77187,77188],{},"闭包可能会引起内存泄漏",[14,77190,77191],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[469,77193,77195],{"id":77194},"_44-变量提升","4.4 变量提升",[14,77197,77198],{},[1838,77199],{"alt":32,"src":77200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,77202,77203],{},[1838,77204],{"alt":32,"src":77205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,77207,77208],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[469,77210,77212],{"id":77211},"_45-函数进阶","4.5 函数进阶",[498,77214,77216],{"id":77215},"_451-函数提升","4.5.1 函数提升",[14,77218,77219],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,77221,77222],{},"只提升函数声明，不提升函数调用",[52149,77224,77225],{},"\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",[498,77227,77229],{"id":77228},"_452-函数参数","4.5.2 函数参数",[22339,77231,77233],{"id":77232},"_4521-动态参数","4.5.2.1 动态参数",[14,77235,77236],{},[1838,77237],{"alt":32,"src":77238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,77240,77241],{},[1838,77242],{"alt":32,"src":77243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,77245,77246],{},"箭头函数里边没有arguments",[22339,77248,77250],{"id":77249},"_4522-剩余参数","4.5.2.2 剩余参数",[14,77252,77253],{},[1838,77254],{"alt":32,"src":77255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,77257,77258],{},[1838,77259],{"alt":32,"src":77260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,77262,77263],{},"剩余参数使用的时候不需要写...",[14,77265,77266],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77268,77269],{},"  function getSum(a,b,...arr) {",[14,77271,77272],{},"  console.log(11)",[14,77274,77275],{},"  }",[14,77277,77278],{},"  getSum(1,2,3,4)",[14,77280,77281],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77283,77284],{},"  getSum(1,2)",[14,77286,77287],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77289,77290],{},[1838,77291],{"alt":32,"src":77292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22339,77294,77296],{"id":77295},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77298,77299],{},[1838,77300],{"alt":32,"src":77301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77303,77304],{},[1838,77305],{"alt":32,"src":77306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77308,77309],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77311,77312],{},"展开运算符可以用于数组之间的合并：",[14,77314,77315],{},"const arr1 = [1, 2, 3]",[14,77317,77318],{},"const arr2 = [3, 4, 5]",[14,77320,77321],{},"const arr = [...arr1, ...arr2]",[14,77323,77324],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77326,77327],{},"剩余参数：函数参数使用，得到真数组",[14,77329,77330],{},"展开运算符：数组中使用，数组展开",[498,77332,77334],{"id":77333},"_453-箭头函数","4.5.3 箭头函数",[22339,77336,77338],{"id":77337},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77340,77341],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77343,77344],{},"它不是万能的！！！",[14,77346,77347],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77349,77350],{},[1838,77351],{"alt":32,"src":77352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77354,558],{},[14,77356,77357],{},"① 只有一个形参的时候，可以省略小括号：",[14,77359,77360],{},"const fn=x=>{console.log(x)}",[14,77362,77363],{},"② 只有一行代码时可以省略大括号：",[14,77365,77366],{},"const fn=x=>console.log(11)",[14,77368,77369],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77371,77372],{},"const fn=x=>x+x",[14,77374,77375],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77377,77378],{},"⑤ 阻止表单默认提交：",[14,77380,77381],{},"const form = document.querySelector('form')",[14,77383,77384],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77386,77387],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77389,77390],{},"const fn=uname=>({uname:uname})",[14,77392,77393],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77395,77396],{},[1838,77397],{"alt":32,"src":77398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77400,77401],{},[1838,77402],{"alt":32,"src":77403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77405,77406],{},[1838,77407],{"alt":32,"src":77408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77410,77411],{},"一定不要忘记用()，有()就理解为自带return",[22339,77413,77415],{"id":77414},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77417,77418],{},"箭头函数是没有动态参数的arguments",[14,77420,77421],{},[1838,77422],{"alt":32,"src":77423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22339,77425,77427],{"id":77426},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77429,11673],{},[481,77431,77432,77435,77438],{},[484,77433,77434],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[484,77436,77437],{},"事件回调函数使用箭头函数时，this 为全局的 window",[484,77439,77440],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77442,77443],{},[1838,77444],{"alt":32,"src":77445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[27,77447,77449],{"className":53403,"code":77448,"language":53405,"meta":32,"style":32},"  \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",[34,77450,77451,77459,77464,77469,77474,77479,77484,77488,77493,77497,77501,77506,77511,77516,77520,77524,77529,77534,77539],{"__ignoreMap":32},[37,77452,77453,77455,77457],{"class":39,"line":40},[37,77454,52480],{"class":50},[37,77456,52149],{"class":51636},[37,77458,51643],{"class":50},[37,77460,77461],{"class":39,"line":47},[37,77462,77463],{"class":50},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[37,77465,77466],{"class":39,"line":104},[37,77467,77468],{"class":50},"    console.log(this) \u002F\u002F指向window\n",[37,77470,77471],{"class":39,"line":113},[37,77472,77473],{"class":50},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[37,77475,77476],{"class":39,"line":189},[37,77477,77478],{"class":50},"    function fn() {\n",[37,77480,77481],{"class":39,"line":195},[37,77482,77483],{"class":50},"      console.log(this)  \u002F\u002F指向window\n",[37,77485,77486],{"class":39,"line":201},[37,77487,2544],{"class":50},[37,77489,77490],{"class":39,"line":207},[37,77491,77492],{"class":50},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[37,77494,77495],{"class":39,"line":213},[37,77496,2757],{"emptyLinePlaceholder":454},[37,77498,77499],{"class":39,"line":218},[37,77500,71859],{"class":50},[37,77502,77503],{"class":39,"line":227},[37,77504,77505],{"class":50},"      name: 'andy',\n",[37,77507,77508],{"class":39,"line":232},[37,77509,77510],{"class":50},"      sayHai: function () {\n",[37,77512,77513],{"class":39,"line":238},[37,77514,77515],{"class":50},"        console.log(this)\n",[37,77517,77518],{"class":39,"line":244},[37,77519,52734],{"class":50},[37,77521,77522],{"class":39,"line":250},[37,77523,2544],{"class":50},[37,77525,77526],{"class":39,"line":256},[37,77527,77528],{"class":50},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[37,77530,77531],{"class":39,"line":261},[37,77532,77533],{"class":50},"    \u002F\u002F 2.箭头函数的this\n",[37,77535,77536],{"class":39,"line":267},[37,77537,77538],{"class":50},"    const fn = () => console.log(this)\n",[37,77540,77541,77543,77545],{"class":39,"line":283},[37,77542,52753],{"class":50},[37,77544,52149],{"class":51636},[37,77546,51643],{"class":50},[14,77548,77549],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77551,77552],{},"const fn = () => console.log(this)",[14,77554,77555],{},"fn() \u002F\u002F指向window",[14,77557,77558],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77560,77561],{},"①",[14,77563,77564],{},"const obj = {",[14,77566,77567],{},"uname: 'pink老师',",[14,77569,77570],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77572,1454],{},[14,77574,77575],{},"调用对象里边的函数",[14,77577,77578],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77580,77581],{},"obj.sayHai()",[14,77583,77584],{},"②",[14,77586,77587],{},"const obj1 = {",[14,77589,77567],{},[14,77591,77592],{},"sayHai: function () {",[14,77594,77595],{},"let i = 10",[14,77597,77598],{},"const count = () => {",[14,77600,77601],{},"console.log(this)",[14,77603,77604],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77606,77607],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77609,1454],{},[14,77611,77612],{},"count()",[14,77614,1454],{},[14,77616,1454],{},[14,77618,77619],{},"obj1.sayHai()",[469,77621,77623],{"id":77622},"_46-解构赋值","4.6 解构赋值",[498,77625,77627],{"id":77626},"_461-数组解构","4.6.1 数组解构",[14,77629,77630],{},"以前要是使用数组中的值的话：",[14,77632,77633],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77635,77636],{},"const arr=[100,60,80]",[14,77638,77639],{},"const max=arr[0]",[14,77641,77642],{},"const min=arr[1]",[14,77644,77645],{},"const avg=arr[2]",[14,77647,77648],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77650,77651],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77653,77654],{},"这个写法就类似于上边的那种用很多const的方法",[14,77656,77657],{},[1838,77658],{"alt":32,"src":77659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[27,77661,77663],{"className":50969,"code":77662,"language":50971,"meta":32,"style":32},"①变量之间交换值:\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",[34,77664,77665,77670,77675,77680,77685,77690,77694,77698,77703,77707,77712,77717,77721,77726,77731,77742,77752,77757,77762,77767,77771,77775],{"__ignoreMap":32},[37,77666,77667],{"class":39,"line":40},[37,77668,77669],{"class":50},"①变量之间交换值:\n",[37,77671,77672],{"class":39,"line":47},[37,77673,77674],{"class":50},"let a=1\n",[37,77676,77677],{"class":39,"line":104},[37,77678,77679],{"class":50},"let b=2;\n",[37,77681,77682],{"class":39,"line":113},[37,77683,77684],{"class":50},"必须加这行代码，不然就会报错\n",[37,77686,77687],{"class":39,"line":189},[37,77688,77689],{"class":50},"[b,a]=[a,b]\n",[37,77691,77692],{"class":39,"line":195},[37,77693,2757],{"emptyLinePlaceholder":454},[37,77695,77696],{"class":39,"line":201},[37,77697,2757],{"emptyLinePlaceholder":454},[37,77699,77700],{"class":39,"line":207},[37,77701,77702],{"class":50},"可以写成下面的方式：\n",[37,77704,77705],{"class":39,"line":213},[37,77706,77674],{"class":50},[37,77708,77709],{"class":39,"line":218},[37,77710,77711],{"class":50},"let b=2\n",[37,77713,77714],{"class":39,"line":227},[37,77715,77716],{"class":50},";[b,a]=[a,b]\n",[37,77718,77719],{"class":39,"line":232},[37,77720,2757],{"emptyLinePlaceholder":454},[37,77722,77723],{"class":39,"line":238},[37,77724,77725],{"class":50},"②排序\n",[37,77727,77728],{"class":39,"line":244},[37,77729,77730],{"class":50},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[37,77732,77733,77736,77739],{"class":39,"line":250},[37,77734,77735],{"class":50},"for (let i = 0; i ",[37,77737,1418],{"class":77738},"s7hpK",[37,77740,77741],{"class":50}," arr1.length; i++) {\n",[37,77743,77744,77747,77749],{"class":39,"line":256},[37,77745,77746],{"class":50},"   for (let j = 0; j ",[37,77748,1418],{"class":77738},[37,77750,77751],{"class":50}," arr1.length - 1; j++) {\n",[37,77753,77754],{"class":39,"line":261},[37,77755,77756],{"class":50},"      if (arr1[j] > arr1[j + 1]) {\n",[37,77758,77759],{"class":39,"line":267},[37,77760,77761],{"class":50},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[37,77763,77764],{"class":39,"line":283},[37,77765,77766],{"class":50},"       }\n",[37,77768,77769],{"class":39,"line":288},[37,77770,4659],{"class":50},[37,77772,77773],{"class":39,"line":294},[37,77774,1941],{"class":50},[37,77776,77777],{"class":39,"line":300},[37,77778,77779],{"class":50},"console.log(arr1)\n",[14,77781,77782],{},"数组解构的细节：",[14,77784,77785],{},"①变量多，单元值少",[14,77787,77788],{},[1838,77789],{"alt":32,"src":77790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77792,77793],{},"防止出现undefined的方法：",[14,77795,77796],{},"const [a=0,b=0] =[1]",[14,77798,77799],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77801,77802],{},"②变量少，单元值多",[14,77804,77805],{},[1838,77806],{"alt":32,"src":77807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77809,77810],{},"此时可以使用剩余参数来接收多余的值",[14,77812,77813],{},"const [a,b,...c]=[1,2,3,4]",[14,77815,77816],{},"console.log(c) 输出[3,4]",[14,77818,77819],{},"③可以按需导入，忽略某些返回值",[14,77821,77822],{},[1838,77823],{"alt":32,"src":77824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77826,77827],{},"④支持多维数组的结构",[27,77829,77833],{"className":77830,"code":77831,"language":77832,"meta":32,"style":32},"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",[34,77834,77835,77863,77879,77894,77909],{"__ignoreMap":32},[37,77836,77837,77839,77841,77843,77845,77847,77849,77851,77854,77856,77858,77860],{"class":39,"line":40},[37,77838,7140],{"class":54},[37,77840,52169],{"class":50},[37,77842,55],{"class":54},[37,77844,52562],{"class":50},[37,77846,332],{"class":61},[37,77848,12776],{"class":50},[37,77850,602],{"class":61},[37,77852,77853],{"class":50},", [",[37,77855,62],{"class":61},[37,77857,12776],{"class":50},[37,77859,168],{"class":61},[37,77861,77862],{"class":50},"]]\n",[37,77864,77865,77868,77870,77872,77874,77876],{"class":39,"line":47},[37,77866,77867],{"class":50},"console.",[37,77869,58583],{"class":2320},[37,77871,4201],{"class":50},[37,77873,135],{"class":61},[37,77875,4566],{"class":50},[37,77877,77878],{"class":43},"  \u002F\u002F1\n",[37,77880,77881,77883,77885,77887,77889,77891],{"class":39,"line":104},[37,77882,77867],{"class":50},[37,77884,58583],{"class":2320},[37,77886,4201],{"class":50},[37,77888,332],{"class":61},[37,77890,4566],{"class":50},[37,77892,77893],{"class":43},"  \u002F\u002F2\n",[37,77895,77896,77898,77900,77902,77904,77906],{"class":39,"line":113},[37,77897,77867],{"class":50},[37,77899,58583],{"class":2320},[37,77901,4201],{"class":50},[37,77903,602],{"class":61},[37,77905,4566],{"class":50},[37,77907,77908],{"class":43},"  \u002F\u002F[3,4]\n",[37,77910,77911,77913,77915,77917,77919,77921,77923,77925],{"class":39,"line":189},[37,77912,77867],{"class":50},[37,77914,58583],{"class":2320},[37,77916,4201],{"class":50},[37,77918,602],{"class":61},[37,77920,5250],{"class":50},[37,77922,135],{"class":61},[37,77924,4566],{"class":50},[37,77926,77927],{"class":43},"  \u002F\u002F3\n",[27,77929,77931],{"className":77830,"code":77930,"language":77832,"meta":32,"style":32},"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",[34,77932,77933,77960,77971,77982],{"__ignoreMap":32},[37,77934,77935,77937,77940,77942,77944,77946,77948,77950,77952,77954,77956,77958],{"class":39,"line":40},[37,77936,7140],{"class":54},[37,77938,77939],{"class":50}," [a, b, c] ",[37,77941,55],{"class":54},[37,77943,52562],{"class":50},[37,77945,332],{"class":61},[37,77947,12776],{"class":50},[37,77949,602],{"class":61},[37,77951,77853],{"class":50},[37,77953,62],{"class":61},[37,77955,12776],{"class":50},[37,77957,168],{"class":61},[37,77959,77862],{"class":50},[37,77961,77962,77964,77966,77969],{"class":39,"line":47},[37,77963,77867],{"class":50},[37,77965,58583],{"class":2320},[37,77967,77968],{"class":50},"(a)",[37,77970,77878],{"class":43},[37,77972,77973,77975,77977,77980],{"class":39,"line":104},[37,77974,77867],{"class":50},[37,77976,58583],{"class":2320},[37,77978,77979],{"class":50},"(b)",[37,77981,77893],{"class":43},[37,77983,77984,77986,77988,77991],{"class":39,"line":113},[37,77985,77867],{"class":50},[37,77987,58583],{"class":2320},[37,77989,77990],{"class":50},"(c)",[37,77992,77908],{"class":43},[27,77994,77996],{"className":77830,"code":77995,"language":77832,"meta":32,"style":32},"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",[34,77997,77998,78025,78035,78045,78055],{"__ignoreMap":32},[37,77999,78000,78002,78005,78007,78009,78011,78013,78015,78017,78019,78021,78023],{"class":39,"line":40},[37,78001,7140],{"class":54},[37,78003,78004],{"class":50}," [a, b, [c, d]] ",[37,78006,55],{"class":54},[37,78008,52562],{"class":50},[37,78010,332],{"class":61},[37,78012,12776],{"class":50},[37,78014,602],{"class":61},[37,78016,77853],{"class":50},[37,78018,62],{"class":61},[37,78020,12776],{"class":50},[37,78022,168],{"class":61},[37,78024,77862],{"class":50},[37,78026,78027,78029,78031,78033],{"class":39,"line":47},[37,78028,77867],{"class":50},[37,78030,58583],{"class":2320},[37,78032,77968],{"class":50},[37,78034,77878],{"class":43},[37,78036,78037,78039,78041,78043],{"class":39,"line":104},[37,78038,77867],{"class":50},[37,78040,58583],{"class":2320},[37,78042,77979],{"class":50},[37,78044,77893],{"class":43},[37,78046,78047,78049,78051,78053],{"class":39,"line":113},[37,78048,77867],{"class":50},[37,78050,58583],{"class":2320},[37,78052,77990],{"class":50},[37,78054,77927],{"class":43},[37,78056,78057,78059,78061,78064],{"class":39,"line":189},[37,78058,77867],{"class":50},[37,78060,58583],{"class":2320},[37,78062,78063],{"class":50},"(d)",[37,78065,78066],{"class":43},"  \u002F\u002F4\n",[498,78068,78070],{"id":78069},"_462-对象解构","4.6.2 对象解构",[14,78072,78073],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,78075,78076],{},"用的非常非常多！！！！！！",[22339,78078,78080],{"id":78079},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,78082,78083],{},"基本语法：",[481,78085,78086,78089,78092,78095],{},[484,78087,78088],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[484,78090,78091],{},"对象属性的值将被赋值给与属性名相同的变量",[484,78093,78094],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[484,78096,78097],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[27,78099,78101],{"className":50969,"code":78100,"language":50971,"meta":32,"style":32},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[34,78102,78103,78108,78113,78118,78122],{"__ignoreMap":32},[37,78104,78105],{"class":39,"line":40},[37,78106,78107],{"class":50},"const obj = {\n",[37,78109,78110],{"class":39,"line":47},[37,78111,78112],{"class":50},"   uname: 'pink老师',\n",[37,78114,78115],{"class":39,"line":104},[37,78116,78117],{"class":50},"   age: 18,\n",[37,78119,78120],{"class":39,"line":113},[37,78121,1941],{"class":50},[37,78123,78124],{"class":39,"line":189},[37,78125,78126],{"class":50},"const { uname, age } = obj\n",[14,78128,78129],{},"上方代码这样写等价于：",[14,78131,78132],{},"const uname等价于obj.uname",[14,78134,78135],{},"变量名可以重新改名：",[14,78137,78138],{},"const uname='red老师'",[14,78140,78141],{},"const user={",[14,78143,78144],{},"  uname:'pink老师',",[14,78146,78147],{},"  age:18",[14,78149,1454],{},[14,78151,78152],{},"const {uname,age}=user",[14,78154,78155],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,78157,78158],{},"const {旧变量名：新变量名}=对象",[14,78160,78161],{},"const {uname:username,age}=user",[22339,78163,78165],{"id":78164},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,78167,78168],{},[1838,78169],{"alt":32,"src":78170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22339,78172,78174],{"id":78173},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,78176,78177],{},[1838,78178],{"alt":32,"src":78179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[27,78181,78183],{"className":53403,"code":78182,"language":53405,"meta":32,"style":32},"  \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",[34,78184,78185,78193,78198,78203,78208,78213,78218,78223,78228,78233,78237,78242,78247],{"__ignoreMap":32},[37,78186,78187,78189,78191],{"class":39,"line":40},[37,78188,52480],{"class":50},[37,78190,52149],{"class":51636},[37,78192,51643],{"class":50},[37,78194,78195],{"class":39,"line":47},[37,78196,78197],{"class":50},"    const pig = {\n",[37,78199,78200],{"class":39,"line":104},[37,78201,78202],{"class":50},"      name: '佩奇',\n",[37,78204,78205],{"class":39,"line":113},[37,78206,78207],{"class":50},"      family: {\n",[37,78209,78210],{"class":39,"line":189},[37,78211,78212],{"class":50},"        mother: '猪妈妈',\n",[37,78214,78215],{"class":39,"line":195},[37,78216,78217],{"class":50},"        father: '猪爸爸',\n",[37,78219,78220],{"class":39,"line":201},[37,78221,78222],{"class":50},"        sister: '乔治'\n",[37,78224,78225],{"class":39,"line":207},[37,78226,78227],{"class":50},"      },\n",[37,78229,78230],{"class":39,"line":213},[37,78231,78232],{"class":50},"      age: 6\n",[37,78234,78235],{"class":39,"line":218},[37,78236,2544],{"class":50},[37,78238,78239],{"class":39,"line":227},[37,78240,78241],{"class":50},"    \u002F\u002F 多级对象解构\n",[37,78243,78244],{"class":39,"line":232},[37,78245,78246],{"class":50},"    const { name, family: { mother, father, sister }, age } = pig\n",[37,78248,78249,78251,78253],{"class":39,"line":238},[37,78250,52753],{"class":50},[37,78252,52149],{"class":51636},[37,78254,51643],{"class":50},[14,78256,78257],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[27,78259,78262],{"className":78260,"code":78261,"language":76782,"meta":32,"style":32},"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",[34,78263,78264,78269,78280,78292,78304,78313,78317,78328,78340,78350,78355,78359,78369,78380,78389,78393,78397,78408,78419,78428,78432,78437],{"__ignoreMap":32},[37,78265,78266],{"class":39,"line":40},[37,78267,78268],{"class":43},"    \u002F\u002F 这是后台传递过来的数据\n",[37,78270,78271,78273,78276,78278],{"class":39,"line":47},[37,78272,11562],{"class":54},[37,78274,78275],{"class":50}," msg ",[37,78277,55],{"class":54},[37,78279,15913],{"class":50},[37,78281,78282,78285,78287,78290],{"class":39,"line":104},[37,78283,78284],{"class":185},"      \"code\"",[37,78286,1368],{"class":54},[37,78288,78289],{"class":61}," 200",[37,78291,31805],{"class":50},[37,78293,78294,78297,78299,78302],{"class":39,"line":113},[37,78295,78296],{"class":185},"      \"msg\"",[37,78298,1368],{"class":54},[37,78300,78301],{"class":185}," \"获取新闻列表成功\"",[37,78303,31805],{"class":50},[37,78305,78306,78309,78311],{"class":39,"line":189},[37,78307,78308],{"class":185},"      \"data\"",[37,78310,1368],{"class":54},[37,78312,55783],{"class":50},[37,78314,78315],{"class":39,"line":195},[37,78316,2867],{"class":50},[37,78318,78319,78322,78324,78326],{"class":39,"line":201},[37,78320,78321],{"class":185},"          \"id\"",[37,78323,1368],{"class":54},[37,78325,25460],{"class":61},[37,78327,31805],{"class":50},[37,78329,78330,78333,78335,78338],{"class":39,"line":207},[37,78331,78332],{"class":185},"          \"title\"",[37,78334,1368],{"class":54},[37,78336,78337],{"class":185}," \"5G商用自己，三大运用商收入下降\"",[37,78339,31805],{"class":50},[37,78341,78342,78345,78347],{"class":39,"line":213},[37,78343,78344],{"class":185},"          \"count\"",[37,78346,1368],{"class":54},[37,78348,78349],{"class":61}," 58\n",[37,78351,78352],{"class":39,"line":218},[37,78353,78354],{"class":50},"        },\n",[37,78356,78357],{"class":39,"line":227},[37,78358,2867],{"class":50},[37,78360,78361,78363,78365,78367],{"class":39,"line":232},[37,78362,78321],{"class":185},[37,78364,1368],{"class":54},[37,78366,15096],{"class":61},[37,78368,31805],{"class":50},[37,78370,78371,78373,78375,78378],{"class":39,"line":238},[37,78372,78332],{"class":185},[37,78374,1368],{"class":54},[37,78376,78377],{"class":185}," \"国际媒体头条速览\"",[37,78379,31805],{"class":50},[37,78381,78382,78384,78386],{"class":39,"line":244},[37,78383,78344],{"class":185},[37,78385,1368],{"class":54},[37,78387,78388],{"class":61}," 56\n",[37,78390,78391],{"class":39,"line":250},[37,78392,78354],{"class":50},[37,78394,78395],{"class":39,"line":256},[37,78396,2867],{"class":50},[37,78398,78399,78401,78403,78406],{"class":39,"line":261},[37,78400,78321],{"class":185},[37,78402,1368],{"class":54},[37,78404,78405],{"class":61}," 3",[37,78407,31805],{"class":50},[37,78409,78410,78412,78414,78417],{"class":39,"line":267},[37,78411,78332],{"class":185},[37,78413,1368],{"class":54},[37,78415,78416],{"class":185}," \"乌克兰和俄罗斯持续冲突\"",[37,78418,31805],{"class":50},[37,78420,78421,78423,78425],{"class":39,"line":283},[37,78422,78344],{"class":185},[37,78424,1368],{"class":54},[37,78426,78427],{"class":61}," 1669\n",[37,78429,78430],{"class":39,"line":288},[37,78431,78354],{"class":50},[37,78433,78434],{"class":39,"line":294},[37,78435,78436],{"class":50},"      ]\n",[37,78438,78439],{"class":39,"line":300},[37,78440,2544],{"class":50},[14,78442,78443],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78445,78446],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78448,78449],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78451,78452],{},"function({data}) {",[14,78454,78455],{},"console.log(data)",[14,78457,1454],{},[14,78459,78460],{},"render(msg)",[14,78462,78463],{},"实参传递给形参的时候解构了",[14,78465,78466],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78468,78469],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78471,78472],{},"function render({data:mydata}) {",[14,78474,78475],{},"  console.log(data)",[14,78477,1454],{},[498,78479,78481],{"id":78480},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78483,78484],{},"有两种情况：一个是数组结构，一个是立即执行函数",[481,78486,78487],{},[484,78488,78489],{},"如果对一个数组进行遍历，有两种方式：",[14,78491,78492],{},"①法1",[14,78494,78495],{},"const arr=[1,2,3]",[14,78497,78498],{},"arr.map(function(item,index) {",[14,78500,78501],{},"  console.log(item)",[14,78503,52800],{},[14,78505,78506],{},[1838,78507],{"alt":32,"src":78508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78510,78511],{},"②法2",[14,78513,78514],{},"const str='pink'",[14,78516,78517],{},"[1,2,3].map(function(item,index) {",[14,78519,78520],{},"console.log(item)",[14,78522,52800],{},[14,78524,78525],{},[1838,78526],{"alt":32,"src":78527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78529,78530],{},"此时会报错",[14,78532,78533],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78535,78520],{},[14,78537,52800],{},[14,78539,78540],{},"内部会当成这样处理，所以我们用分号进行隔开",[469,78542,78544],{"id":78543},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78546,78547],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78549,78550],{},"可以理解为加强版的for循环",[14,78552,78553],{},[1838,78554],{"alt":32,"src":78555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78557,78558],{},"里边不写return，不返回数组，只遍历不返回",[14,78560,78561],{},"map是返回数组",[14,78563,78564],{},"forEach主要用于遍历数组对象",[27,78566,78568],{"className":53403,"code":78567,"language":53405,"meta":32,"style":32},"  \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",[34,78569,78570,78578,78583,78588,78593,78598,78602,78607],{"__ignoreMap":32},[37,78571,78572,78574,78576],{"class":39,"line":40},[37,78573,52480],{"class":50},[37,78575,52149],{"class":51636},[37,78577,51643],{"class":50},[37,78579,78580],{"class":39,"line":47},[37,78581,78582],{"class":50},"    const arr = ['red', 'green', 'pink']\n",[37,78584,78585],{"class":39,"line":104},[37,78586,78587],{"class":50},"    const result = arr.forEach(function (item, index) {\n",[37,78589,78590],{"class":39,"line":113},[37,78591,78592],{"class":50},"      console.log(item)\n",[37,78594,78595],{"class":39,"line":189},[37,78596,78597],{"class":50},"      console.log(index)\n",[37,78599,78600],{"class":39,"line":195},[37,78601,33798],{"class":50},[37,78603,78604],{"class":39,"line":201},[37,78605,78606],{"class":50},"    console.log(result)\n",[37,78608,78609,78611,78613],{"class":39,"line":207},[37,78610,52753],{"class":50},[37,78612,52149],{"class":51636},[37,78614,51643],{"class":50},[14,78616,78617],{},[1838,78618],{"alt":32,"src":78619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[469,78621,78623],{"id":78622},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78625,78626],{},[1838,78627],{"alt":32,"src":78628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78630,78631],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[27,78633,78635],{"className":53403,"code":78634,"language":53405,"meta":32,"style":32},"\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",[34,78636,78637,78645,78653,78658,78663,78667,78671,78676,78680,78685,78693],{"__ignoreMap":32},[37,78638,78639,78641,78643],{"class":39,"line":40},[37,78640,1418],{"class":50},[37,78642,52136],{"class":51636},[37,78644,51643],{"class":50},[37,78646,78647,78649,78651],{"class":39,"line":47},[37,78648,52480],{"class":50},[37,78650,52149],{"class":51636},[37,78652,51643],{"class":50},[37,78654,78655],{"class":39,"line":104},[37,78656,78657],{"class":50},"    const arr = [10, 20, 30]\n",[37,78659,78660],{"class":39,"line":113},[37,78661,78662],{"class":50},"    const newArr = arr.filter(function (item, index) {\n",[37,78664,78665],{"class":39,"line":189},[37,78666,78592],{"class":50},[37,78668,78669],{"class":39,"line":195},[37,78670,78597],{"class":50},[37,78672,78673],{"class":39,"line":201},[37,78674,78675],{"class":50},"      return item >= 20\n",[37,78677,78678],{"class":39,"line":207},[37,78679,33798],{"class":50},[37,78681,78682],{"class":39,"line":213},[37,78683,78684],{"class":50},"    console.log(newArr)\n",[37,78686,78687,78689,78691],{"class":39,"line":218},[37,78688,52753],{"class":50},[37,78690,52149],{"class":51636},[37,78692,51643],{"class":50},[37,78694,78695,78697,78699],{"class":39,"line":227},[37,78696,52121],{"class":50},[37,78698,52136],{"class":51636},[37,78700,51643],{"class":50},[14,78702,78703],{},"这个也可以写成箭头函数：",[27,78705,78707],{"className":50969,"code":78706,"language":50971,"meta":32,"style":32},"const newArr = arr.filter(item => item >= 20)\n",[34,78708,78709],{"__ignoreMap":32},[37,78710,78711],{"class":39,"line":40},[37,78712,78706],{"class":50},[469,78714,78716],{"id":78715},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78718,78719],{},[1838,78720],{"alt":32,"src":78721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78723,78724],{},"步骤：",[14,78726,78727],{},"①：渲染页面模块",[1515,78729,78730,78733],{},[484,78731,78732],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[484,78734,78735],{},"用forEach+字符串的形式",[14,78737,78738],{},"②：点击不同需求，显示不同页面内容",[1515,78740,78741,78744,78747,78750,78753],{},[484,78742,78743],{},"点击采取事件委托方式 .filter",[484,78745,78746],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[484,78748,78749],{},"筛选条件是根据点击的 data-index 来判断",[484,78751,78752],{},"可以使用对象解构，把事件对象解构",[484,78754,78755],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[27,78757,78759],{"className":50969,"code":78758,"language":50971,"meta":32,"style":32},"\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",[34,78760,78761,78771,78785,78789,78797,78811,78831,78843,78851,78857,78867,78877,78887,78891,78895,78901,78914,78926,78936,78948,78952,78956,78963,78976,78988,79005,79023,79036,79040,79044,79056,79066,79070,79074,79081,79122,79149,79159,79163,79167,79175,79187,79191,79195,79203,79215,79227,79238,79242,79246,79255,79267,79278,79282,79286,79295,79307,79319,79323,79327,79334,79344,79356,79368,79383,79387,79391,79399,79415,79425,79435,79445,79457,79461,79465,79475,79486,79496,79500,79508,79516,79520,79528,79543,79569,79594,79619,79638,79646,79660,79665,79670,79675,79680,79685,79693,79701,79706,79717,79722,79732,79742,79752,79762,79766,79770,79779,79788,79797,79806,79810,79814,79823,79832,79841,79850,79854,79858,79867,79876,79885,79894,79898,79902,79911,79920,79929,79938,79942,79946,79955,79964,79973,79982,79986,79990,79999,80008,80017,80026,80030,80034,80043,80052,80060,80069,80073,80077,80081,80086,80098,80103,80115,80119,80136,80164,80173,80178,80188,80198,80207,80212,80217,80221,80226,80243,80247,80252,80260,80265,80292,80297,80317,80322,80334,80339,80344,80349,80360,80374,80411,80429,80462,80479,80503,80507,80512,80518,80522,80526,80530,80538,80546,80550],{"__ignoreMap":32},[37,78762,78763,78765,78767,78769],{"class":39,"line":40},[37,78764,51633],{"class":50},[37,78766,51637],{"class":51636},[37,78768,51640],{"class":2320},[37,78770,51643],{"class":50},[37,78772,78773,78775,78777,78779,78781,78783],{"class":39,"line":47},[37,78774,1418],{"class":50},[37,78776,50971],{"class":51636},[37,78778,51652],{"class":2320},[37,78780,55],{"class":50},[37,78782,51657],{"class":185},[37,78784,51643],{"class":50},[37,78786,78787],{"class":39,"line":104},[37,78788,2757],{"emptyLinePlaceholder":454},[37,78790,78791,78793,78795],{"class":39,"line":113},[37,78792,1418],{"class":50},[37,78794,51670],{"class":51636},[37,78796,51643],{"class":50},[37,78798,78799,78801,78803,78805,78807,78809],{"class":39,"line":189},[37,78800,52480],{"class":50},[37,78802,51680],{"class":51636},[37,78804,51683],{"class":2320},[37,78806,55],{"class":50},[37,78808,51688],{"class":185},[37,78810,51643],{"class":50},[37,78812,78813,78815,78817,78819,78821,78823,78825,78827,78829],{"class":39,"line":195},[37,78814,52480],{"class":50},[37,78816,51680],{"class":51636},[37,78818,15261],{"class":2320},[37,78820,55],{"class":50},[37,78822,51727],{"class":185},[37,78824,51707],{"class":2320},[37,78826,55],{"class":50},[37,78828,51734],{"class":185},[37,78830,51643],{"class":50},[37,78832,78833,78835,78837,78839,78841],{"class":39,"line":201},[37,78834,52480],{"class":50},[37,78836,51743],{"class":51636},[37,78838,51746],{"class":50},[37,78840,51743],{"class":51636},[37,78842,51643],{"class":50},[37,78844,78845,78847,78849],{"class":39,"line":207},[37,78846,52480],{"class":50},[37,78848,446],{"class":51636},[37,78850,51643],{"class":50},[37,78852,78853,78855],{"class":39,"line":213},[37,78854,6751],{"class":51636},[37,78856,15913],{"class":50},[37,78858,78859,78861,78863,78865],{"class":39,"line":218},[37,78860,55031],{"class":61},[37,78862,51773],{"class":50},[37,78864,135],{"class":61},[37,78866,1669],{"class":50},[37,78868,78869,78871,78873,78875],{"class":39,"line":227},[37,78870,55042],{"class":61},[37,78872,51773],{"class":50},[37,78874,135],{"class":61},[37,78876,1669],{"class":50},[37,78878,78879,78881,78883,78885],{"class":39,"line":232},[37,78880,72932],{"class":61},[37,78882,51773],{"class":50},[37,78884,60841],{"class":61},[37,78886,1669],{"class":50},[37,78888,78889],{"class":39,"line":238},[37,78890,2544],{"class":50},[37,78892,78893],{"class":39,"line":244},[37,78894,2757],{"emptyLinePlaceholder":454},[37,78896,78897,78899],{"class":39,"line":250},[37,78898,62459],{"class":2320},[37,78900,15913],{"class":50},[37,78902,78903,78905,78907,78910,78912],{"class":39,"line":256},[37,78904,55107],{"class":61},[37,78906,51773],{"class":50},[37,78908,78909],{"class":61},"990",[37,78911,51828],{"class":54},[37,78913,1669],{"class":50},[37,78915,78916,78918,78920,78922,78924],{"class":39,"line":261},[37,78917,55042],{"class":61},[37,78919,51773],{"class":50},[37,78921,135],{"class":61},[37,78923,51892],{"class":61},[37,78925,1669],{"class":50},[37,78927,78928,78930,78932,78934],{"class":39,"line":267},[37,78929,55345],{"class":61},[37,78931,51773],{"class":50},[37,78933,51813],{"class":61},[37,78935,1669],{"class":50},[37,78937,78938,78941,78943,78946],{"class":39,"line":283},[37,78939,78940],{"class":61},"      flex-wrap",[37,78942,51773],{"class":50},[37,78944,78945],{"class":61},"wrap",[37,78947,1669],{"class":50},[37,78949,78950],{"class":39,"line":288},[37,78951,2544],{"class":50},[37,78953,78954],{"class":39,"line":294},[37,78955,2757],{"emptyLinePlaceholder":454},[37,78957,78958,78961],{"class":39,"line":300},[37,78959,78960],{"class":2320},"    .item",[37,78962,15913],{"class":50},[37,78964,78965,78967,78969,78972,78974],{"class":39,"line":306},[37,78966,55107],{"class":61},[37,78968,51773],{"class":50},[37,78970,78971],{"class":61},"240",[37,78973,51828],{"class":54},[37,78975,1669],{"class":50},[37,78977,78978,78980,78982,78984,78986],{"class":39,"line":312},[37,78979,62336],{"class":61},[37,78981,51773],{"class":50},[37,78983,98],{"class":61},[37,78985,51828],{"class":54},[37,78987,1669],{"class":50},[37,78989,78990,78992,78994,78996,78998,79001,79003],{"class":39,"line":317},[37,78991,55031],{"class":61},[37,78993,51773],{"class":50},[37,78995,1210],{"class":61},[37,78997,51828],{"class":54},[37,78999,79000],{"class":61}," 30",[37,79002,51828],{"class":54},[37,79004,1669],{"class":50},[37,79006,79007,79009,79011,79013,79016,79019,79021],{"class":39,"line":323},[37,79008,62196],{"class":61},[37,79010,51773],{"class":50},[37,79012,28463],{"class":61},[37,79014,79015],{"class":61}," ease",[37,79017,79018],{"class":61}," .5",[37,79020,1205],{"class":54},[37,79022,1669],{"class":50},[37,79024,79025,79028,79030,79032,79034],{"class":39,"line":337},[37,79026,79027],{"class":61},"      margin-bottom",[37,79029,51773],{"class":50},[37,79031,1210],{"class":61},[37,79033,51828],{"class":54},[37,79035,1669],{"class":50},[37,79037,79038],{"class":39,"line":342},[37,79039,2544],{"class":50},[37,79041,79042],{"class":39,"line":347},[37,79043,2757],{"emptyLinePlaceholder":454},[37,79045,79046,79049,79051,79054],{"class":39,"line":352},[37,79047,79048],{"class":2320},"    .item:nth-child",[37,79050,165],{"class":50},[37,79052,79053],{"class":61},"4n",[37,79055,12783],{"class":50},[37,79057,79058,79060,79062,79064],{"class":39,"line":357},[37,79059,62336],{"class":61},[37,79061,51773],{"class":50},[37,79063,135],{"class":61},[37,79065,1669],{"class":50},[37,79067,79068],{"class":39,"line":362},[37,79069,2544],{"class":50},[37,79071,79072],{"class":39,"line":367},[37,79073,2757],{"emptyLinePlaceholder":454},[37,79075,79076,79079],{"class":39,"line":373},[37,79077,79078],{"class":2320},"    .item:hover",[37,79080,15913],{"class":50},[37,79082,79083,79086,79088,79090,79092,79094,79096,79098,79100,79103,79105,79107,79109,79111,79113,79115,79117,79120],{"class":39,"line":392},[37,79084,79085],{"class":61},"      box-shadow",[37,79087,51773],{"class":50},[37,79089,135],{"class":61},[37,79091,51828],{"class":54},[37,79093,4443],{"class":61},[37,79095,51828],{"class":54},[37,79097,2505],{"class":61},[37,79099,51828],{"class":54},[37,79101,79102],{"class":61}," rgba",[37,79104,165],{"class":50},[37,79106,135],{"class":61},[37,79108,12776],{"class":50},[37,79110,135],{"class":61},[37,79112,12776],{"class":50},[37,79114,135],{"class":61},[37,79116,12776],{"class":50},[37,79118,79119],{"class":61},".2",[37,79121,3069],{"class":50},[37,79123,79124,79127,79129,79132,79134,79136,79138,79141,79143,79145,79147],{"class":39,"line":398},[37,79125,79126],{"class":61},"      transform",[37,79128,51773],{"class":50},[37,79130,79131],{"class":61},"translate3d",[37,79133,165],{"class":50},[37,79135,135],{"class":61},[37,79137,12776],{"class":50},[37,79139,79140],{"class":61},"-4",[37,79142,51828],{"class":54},[37,79144,12776],{"class":50},[37,79146,135],{"class":61},[37,79148,3069],{"class":50},[37,79150,79151,79153,79155,79157],{"class":39,"line":409},[37,79152,62361],{"class":61},[37,79154,51773],{"class":50},[37,79156,62366],{"class":61},[37,79158,1669],{"class":50},[37,79160,79161],{"class":39,"line":415},[37,79162,2544],{"class":50},[37,79164,79165],{"class":39,"line":420},[37,79166,2757],{"emptyLinePlaceholder":454},[37,79168,79169,79171,79173],{"class":39,"line":425},[37,79170,78960],{"class":2320},[37,79172,55951],{"class":51636},[37,79174,15913],{"class":50},[37,79176,79177,79179,79181,79183,79185],{"class":39,"line":431},[37,79178,55107],{"class":61},[37,79180,51773],{"class":50},[37,79182,154],{"class":61},[37,79184,845],{"class":54},[37,79186,1669],{"class":50},[37,79188,79189],{"class":39,"line":436},[37,79190,2544],{"class":50},[37,79192,79193],{"class":39,"line":442},[37,79194,2757],{"emptyLinePlaceholder":454},[37,79196,79197,79199,79201],{"class":39,"line":8374},[37,79198,78960],{"class":2320},[37,79200,62640],{"class":2320},[37,79202,15913],{"class":50},[37,79204,79205,79207,79209,79211,79213],{"class":39,"line":8386},[37,79206,55258],{"class":61},[37,79208,51773],{"class":50},[37,79210,1160],{"class":61},[37,79212,51828],{"class":54},[37,79214,1669],{"class":50},[37,79216,79217,79219,79221,79223,79225],{"class":39,"line":8398},[37,79218,79027],{"class":61},[37,79220,51773],{"class":50},[37,79222,98],{"class":61},[37,79224,51828],{"class":54},[37,79226,1669],{"class":50},[37,79228,79229,79231,79233,79236],{"class":39,"line":10057},[37,79230,57752],{"class":61},[37,79232,51773],{"class":50},[37,79234,79235],{"class":61},"#666",[37,79237,1669],{"class":50},[37,79239,79240],{"class":39,"line":10082},[37,79241,2544],{"class":50},[37,79243,79244],{"class":39,"line":10105},[37,79245,2757],{"emptyLinePlaceholder":454},[37,79247,79248,79250,79253],{"class":39,"line":10129},[37,79249,78960],{"class":2320},[37,79251,79252],{"class":2320}," .price",[37,79254,15913],{"class":50},[37,79256,79257,79259,79261,79263,79265],{"class":39,"line":10134},[37,79258,55258],{"class":61},[37,79260,51773],{"class":50},[37,79262,1260],{"class":61},[37,79264,51828],{"class":54},[37,79266,1669],{"class":50},[37,79268,79269,79271,79273,79276],{"class":39,"line":10139},[37,79270,57752],{"class":61},[37,79272,51773],{"class":50},[37,79274,79275],{"class":61},"firebrick",[37,79277,1669],{"class":50},[37,79279,79280],{"class":39,"line":10144},[37,79281,2544],{"class":50},[37,79283,79284],{"class":39,"line":10153},[37,79285,2757],{"emptyLinePlaceholder":454},[37,79287,79288,79290,79293],{"class":39,"line":10158},[37,79289,78960],{"class":2320},[37,79291,79292],{"class":2320}," .price::before",[37,79294,15913],{"class":50},[37,79296,79297,79300,79302,79305],{"class":39,"line":10164},[37,79298,79299],{"class":61},"      content",[37,79301,51773],{"class":50},[37,79303,79304],{"class":185},"'￥'",[37,79306,1669],{"class":50},[37,79308,79309,79311,79313,79315,79317],{"class":39,"line":10185},[37,79310,55258],{"class":61},[37,79312,51773],{"class":50},[37,79314,1059],{"class":61},[37,79316,51828],{"class":54},[37,79318,1669],{"class":50},[37,79320,79321],{"class":39,"line":10191},[37,79322,2544],{"class":50},[37,79324,79325],{"class":39,"line":10205},[37,79326,2757],{"emptyLinePlaceholder":454},[37,79328,79329,79332],{"class":39,"line":10211},[37,79330,79331],{"class":2320},"    .filter",[37,79333,15913],{"class":50},[37,79335,79336,79338,79340,79342],{"class":39,"line":10238},[37,79337,55345],{"class":61},[37,79339,51773],{"class":50},[37,79341,51813],{"class":61},[37,79343,1669],{"class":50},[37,79345,79346,79348,79350,79352,79354],{"class":39,"line":10247},[37,79347,55107],{"class":61},[37,79349,51773],{"class":50},[37,79351,78909],{"class":61},[37,79353,51828],{"class":54},[37,79355,1669],{"class":50},[37,79357,79358,79360,79362,79364,79366],{"class":39,"line":10253},[37,79359,55042],{"class":61},[37,79361,51773],{"class":50},[37,79363,135],{"class":61},[37,79365,51892],{"class":61},[37,79367,1669],{"class":50},[37,79369,79370,79372,79374,79376,79378,79380],{"class":39,"line":10261},[37,79371,55031],{"class":61},[37,79373,51773],{"class":50},[37,79375,1166],{"class":61},[37,79377,51828],{"class":54},[37,79379,79000],{"class":61},[37,79381,79382],{"class":54},"px\n",[37,79384,79385],{"class":39,"line":10266},[37,79386,2544],{"class":50},[37,79388,79389],{"class":39,"line":16945},[37,79390,2757],{"emptyLinePlaceholder":454},[37,79392,79393,79395,79397],{"class":39,"line":16951},[37,79394,79331],{"class":2320},[37,79396,1774],{"class":51636},[37,79398,15913],{"class":50},[37,79400,79401,79403,79405,79407,79409,79411,79413],{"class":39,"line":16974},[37,79402,55031],{"class":61},[37,79404,51773],{"class":50},[37,79406,98],{"class":61},[37,79408,51828],{"class":54},[37,79410,9291],{"class":61},[37,79412,51828],{"class":54},[37,79414,1669],{"class":50},[37,79416,79417,79419,79421,79423],{"class":39,"line":16980},[37,79418,62057],{"class":61},[37,79420,51773],{"class":50},[37,79422,62154],{"class":61},[37,79424,1669],{"class":50},[37,79426,79427,79429,79431,79433],{"class":39,"line":17003},[37,79428,57752],{"class":61},[37,79430,51773],{"class":50},[37,79432,79235],{"class":61},[37,79434,1669],{"class":50},[37,79436,79437,79439,79441,79443],{"class":39,"line":17017},[37,79438,64306],{"class":61},[37,79440,51773],{"class":50},[37,79442,55073],{"class":61},[37,79444,1669],{"class":50},[37,79446,79447,79449,79451,79453,79455],{"class":39,"line":17037},[37,79448,62086],{"class":61},[37,79450,51773],{"class":50},[37,79452,1210],{"class":61},[37,79454,51828],{"class":54},[37,79456,1669],{"class":50},[37,79458,79459],{"class":39,"line":17043},[37,79460,2544],{"class":50},[37,79462,79463],{"class":39,"line":17054},[37,79464,2757],{"emptyLinePlaceholder":454},[37,79466,79467,79469,79471,79473],{"class":39,"line":17077},[37,79468,79331],{"class":2320},[37,79470,1774],{"class":51636},[37,79472,62236],{"class":2320},[37,79474,15913],{"class":50},[37,79476,79477,79479,79481,79484],{"class":39,"line":17099},[37,79478,55220],{"class":61},[37,79480,51773],{"class":50},[37,79482,79483],{"class":61},"#05943c",[37,79485,1669],{"class":50},[37,79487,79488,79490,79492,79494],{"class":39,"line":17104},[37,79489,57752],{"class":61},[37,79491,51773],{"class":50},[37,79493,61178],{"class":61},[37,79495,1669],{"class":50},[37,79497,79498],{"class":39,"line":17110},[37,79499,2544],{"class":50},[37,79501,79502,79504,79506],{"class":39,"line":17124},[37,79503,52753],{"class":50},[37,79505,446],{"class":51636},[37,79507,51643],{"class":50},[37,79509,79510,79512,79514],{"class":39,"line":17137},[37,79511,52121],{"class":50},[37,79513,51670],{"class":51636},[37,79515,51643],{"class":50},[37,79517,79518],{"class":39,"line":17142},[37,79519,2757],{"emptyLinePlaceholder":454},[37,79521,79522,79524,79526],{"class":39,"line":17156},[37,79523,1418],{"class":50},[37,79525,52136],{"class":51636},[37,79527,51643],{"class":50},[37,79529,79530,79532,79534,79536,79538,79541],{"class":39,"line":17161},[37,79531,52480],{"class":50},[37,79533,51947],{"class":51636},[37,79535,53822],{"class":2320},[37,79537,55],{"class":50},[37,79539,79540],{"class":185},"\"filter\"",[37,79542,51643],{"class":50},[37,79544,79545,79547,79549,79551,79553,79555,79558,79560,79562,79565,79567],{"class":39,"line":17167},[37,79546,51677],{"class":50},[37,79548,51],{"class":51636},[37,79550,61393],{"class":2320},[37,79552,55],{"class":50},[37,79554,61398],{"class":185},[37,79556,79557],{"class":2320}," data-index",[37,79559,55],{"class":50},[37,79561,4028],{"class":185},[37,79563,79564],{"class":50},">0-100元\u003C\u002F",[37,79566,51],{"class":51636},[37,79568,51643],{"class":50},[37,79570,79571,79573,79575,79577,79579,79581,79583,79585,79587,79590,79592],{"class":39,"line":17172},[37,79572,51677],{"class":50},[37,79574,51],{"class":51636},[37,79576,61393],{"class":2320},[37,79578,55],{"class":50},[37,79580,61398],{"class":185},[37,79582,79557],{"class":2320},[37,79584,55],{"class":50},[37,79586,4051],{"class":185},[37,79588,79589],{"class":50},">100-300元\u003C\u002F",[37,79591,51],{"class":51636},[37,79593,51643],{"class":50},[37,79595,79596,79598,79600,79602,79604,79606,79608,79610,79612,79615,79617],{"class":39,"line":17186},[37,79597,51677],{"class":50},[37,79599,51],{"class":51636},[37,79601,61393],{"class":2320},[37,79603,55],{"class":50},[37,79605,61398],{"class":185},[37,79607,79557],{"class":2320},[37,79609,55],{"class":50},[37,79611,4064],{"class":185},[37,79613,79614],{"class":50},">300元以上\u003C\u002F",[37,79616,51],{"class":51636},[37,79618,51643],{"class":50},[37,79620,79621,79623,79625,79627,79629,79631,79634,79636],{"class":39,"line":17191},[37,79622,51677],{"class":50},[37,79624,51],{"class":51636},[37,79626,61393],{"class":2320},[37,79628,55],{"class":50},[37,79630,61398],{"class":185},[37,79632,79633],{"class":50},">全部区间\u003C\u002F",[37,79635,51],{"class":51636},[37,79637,51643],{"class":50},[37,79639,79640,79642,79644],{"class":39,"line":17196},[37,79641,52753],{"class":50},[37,79643,51947],{"class":51636},[37,79645,51643],{"class":50},[37,79647,79648,79650,79652,79654,79656,79658],{"class":39,"line":17210},[37,79649,52480],{"class":50},[37,79651,51947],{"class":51636},[37,79653,53822],{"class":2320},[37,79655,55],{"class":50},[37,79657,62944],{"class":185},[37,79659,51643],{"class":50},[37,79661,79662],{"class":39,"line":17222},[37,79663,79664],{"class":43},"    \u003C!-- \u003Cdiv class=\"item\">\n",[37,79666,79667],{"class":39,"line":17227},[37,79668,79669],{"class":43},"      \u003Cimg src=\"\" alt=\"\">\n",[37,79671,79672],{"class":39,"line":17240},[37,79673,79674],{"class":43},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[37,79676,79677],{"class":39,"line":17245},[37,79678,79679],{"class":43},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[37,79681,79682],{"class":39,"line":17250},[37,79683,79684],{"class":43},"    \u003C\u002Fdiv> -->\n",[37,79686,79687,79689,79691],{"class":39,"line":17255},[37,79688,52753],{"class":50},[37,79690,51947],{"class":51636},[37,79692,51643],{"class":50},[37,79694,79695,79697,79699],{"class":39,"line":17268},[37,79696,52480],{"class":50},[37,79698,52149],{"class":51636},[37,79700,51643],{"class":50},[37,79702,79703],{"class":39,"line":17273},[37,79704,79705],{"class":43},"    \u002F\u002F 2. 初始化数据\n",[37,79707,79708,79710,79713,79715],{"class":39,"line":32971},[37,79709,11562],{"class":54},[37,79711,79712],{"class":61}," goodsList",[37,79714,13905],{"class":54},[37,79716,55783],{"class":50},[37,79718,79719],{"class":39,"line":32977},[37,79720,79721],{"class":50},"      {\n",[37,79723,79724,79727,79730],{"class":39,"line":32983},[37,79725,79726],{"class":50},"        id: ",[37,79728,79729],{"class":185},"'4001172'",[37,79731,31805],{"class":50},[37,79733,79734,79737,79740],{"class":39,"line":32989},[37,79735,79736],{"class":50},"        name: ",[37,79738,79739],{"class":185},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[37,79741,31805],{"class":50},[37,79743,79744,79747,79750],{"class":39,"line":32995},[37,79745,79746],{"class":50},"        price: ",[37,79748,79749],{"class":185},"'289.00'",[37,79751,31805],{"class":50},[37,79753,79754,79757,79760],{"class":39,"line":33006},[37,79755,79756],{"class":50},"        picture: ",[37,79758,79759],{"class":185},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[37,79761,31805],{"class":50},[37,79763,79764],{"class":39,"line":33012},[37,79765,78227],{"class":50},[37,79767,79768],{"class":39,"line":33032},[37,79769,79721],{"class":50},[37,79771,79772,79774,79777],{"class":39,"line":33038},[37,79773,79726],{"class":50},[37,79775,79776],{"class":185},"'4001594'",[37,79778,31805],{"class":50},[37,79780,79781,79783,79786],{"class":39,"line":33049},[37,79782,79736],{"class":50},[37,79784,79785],{"class":185},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[37,79787,31805],{"class":50},[37,79789,79790,79792,79795],{"class":39,"line":33055},[37,79791,79746],{"class":50},[37,79793,79794],{"class":185},"'288.00'",[37,79796,31805],{"class":50},[37,79798,79799,79801,79804],{"class":39,"line":33061},[37,79800,79756],{"class":50},[37,79802,79803],{"class":185},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[37,79805,31805],{"class":50},[37,79807,79808],{"class":39,"line":33067},[37,79809,78227],{"class":50},[37,79811,79812],{"class":39,"line":33073},[37,79813,79721],{"class":50},[37,79815,79816,79818,79821],{"class":39,"line":33079},[37,79817,79726],{"class":50},[37,79819,79820],{"class":185},"'4001009'",[37,79822,31805],{"class":50},[37,79824,79825,79827,79830],{"class":39,"line":33085},[37,79826,79736],{"class":50},[37,79828,79829],{"class":185},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[37,79831,31805],{"class":50},[37,79833,79834,79836,79839],{"class":39,"line":33091},[37,79835,79746],{"class":50},[37,79837,79838],{"class":185},"'109.00'",[37,79840,31805],{"class":50},[37,79842,79843,79845,79848],{"class":39,"line":33111},[37,79844,79756],{"class":50},[37,79846,79847],{"class":185},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[37,79849,31805],{"class":50},[37,79851,79852],{"class":39,"line":33117},[37,79853,78227],{"class":50},[37,79855,79856],{"class":39,"line":33133},[37,79857,79721],{"class":50},[37,79859,79860,79862,79865],{"class":39,"line":33139},[37,79861,79726],{"class":50},[37,79863,79864],{"class":185},"'4001874'",[37,79866,31805],{"class":50},[37,79868,79869,79871,79874],{"class":39,"line":33153},[37,79870,79736],{"class":50},[37,79872,79873],{"class":185},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[37,79875,31805],{"class":50},[37,79877,79878,79880,79883],{"class":39,"line":33159},[37,79879,79746],{"class":50},[37,79881,79882],{"class":185},"'488.00'",[37,79884,31805],{"class":50},[37,79886,79887,79889,79892],{"class":39,"line":33174},[37,79888,79756],{"class":50},[37,79890,79891],{"class":185},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[37,79893,31805],{"class":50},[37,79895,79896],{"class":39,"line":33180},[37,79897,78227],{"class":50},[37,79899,79900],{"class":39,"line":33189},[37,79901,79721],{"class":50},[37,79903,79904,79906,79909],{"class":39,"line":33195},[37,79905,79726],{"class":50},[37,79907,79908],{"class":185},"'4001649'",[37,79910,31805],{"class":50},[37,79912,79913,79915,79918],{"class":39,"line":33204},[37,79914,79736],{"class":50},[37,79916,79917],{"class":185},"'大师监制龙泉青瓷茶叶罐'",[37,79919,31805],{"class":50},[37,79921,79922,79924,79927],{"class":39,"line":33210},[37,79923,79746],{"class":50},[37,79925,79926],{"class":185},"'139.00'",[37,79928,31805],{"class":50},[37,79930,79931,79933,79936],{"class":39,"line":33216},[37,79932,79756],{"class":50},[37,79934,79935],{"class":185},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[37,79937,31805],{"class":50},[37,79939,79940],{"class":39,"line":33225},[37,79941,78227],{"class":50},[37,79943,79944],{"class":39,"line":33231},[37,79945,79721],{"class":50},[37,79947,79948,79950,79953],{"class":39,"line":33242},[37,79949,79726],{"class":50},[37,79951,79952],{"class":185},"'3997185'",[37,79954,31805],{"class":50},[37,79956,79957,79959,79962],{"class":39,"line":33248},[37,79958,79736],{"class":50},[37,79960,79961],{"class":185},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[37,79963,31805],{"class":50},[37,79965,79966,79968,79971],{"class":39,"line":33267},[37,79967,79746],{"class":50},[37,79969,79970],{"class":185},"'108.00'",[37,79972,31805],{"class":50},[37,79974,79975,79977,79980],{"class":39,"line":33273},[37,79976,79756],{"class":50},[37,79978,79979],{"class":185},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[37,79981,31805],{"class":50},[37,79983,79984],{"class":39,"line":33284},[37,79985,78227],{"class":50},[37,79987,79988],{"class":39,"line":33290},[37,79989,79721],{"class":50},[37,79991,79992,79994,79997],{"class":39,"line":33310},[37,79993,79726],{"class":50},[37,79995,79996],{"class":185},"'3997403'",[37,79998,31805],{"class":50},[37,80000,80001,80003,80006],{"class":39,"line":33326},[37,80002,79736],{"class":50},[37,80004,80005],{"class":185},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[37,80007,31805],{"class":50},[37,80009,80010,80012,80015],{"class":39,"line":33332},[37,80011,79746],{"class":50},[37,80013,80014],{"class":185},"'100.00'",[37,80016,31805],{"class":50},[37,80018,80019,80021,80024],{"class":39,"line":33346},[37,80020,79756],{"class":50},[37,80022,80023],{"class":185},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[37,80025,31805],{"class":50},[37,80027,80028],{"class":39,"line":33352},[37,80029,78227],{"class":50},[37,80031,80032],{"class":39,"line":33358},[37,80033,79721],{"class":50},[37,80035,80036,80038,80041],{"class":39,"line":33369},[37,80037,79726],{"class":50},[37,80039,80040],{"class":185},"'3998274'",[37,80042,31805],{"class":50},[37,80044,80045,80047,80050],{"class":39,"line":33375},[37,80046,79736],{"class":50},[37,80048,80049],{"class":185},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[37,80051,31805],{"class":50},[37,80053,80054,80056,80058],{"class":39,"line":33381},[37,80055,79746],{"class":50},[37,80057,79926],{"class":185},[37,80059,31805],{"class":50},[37,80061,80062,80064,80067],{"class":39,"line":33391},[37,80063,79756],{"class":50},[37,80065,80066],{"class":185},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[37,80068,31805],{"class":50},[37,80070,80071],{"class":39,"line":33397},[37,80072,78227],{"class":50},[37,80074,80075],{"class":39,"line":33408},[37,80076,53445],{"class":50},[37,80078,80079],{"class":39,"line":33414},[37,80080,2757],{"emptyLinePlaceholder":454},[37,80082,80083],{"class":39,"line":33424},[37,80084,80085],{"class":43},"    \u002F\u002F 1.渲染函数\n",[37,80087,80088,80090,80092,80094,80096],{"class":39,"line":33429},[37,80089,70420],{"class":54},[37,80091,70423],{"class":2320},[37,80093,165],{"class":50},[37,80095,4230],{"class":159},[37,80097,12783],{"class":50},[37,80099,80100],{"class":39,"line":33435},[37,80101,80102],{"class":43},"      \u002F\u002F 声明空字符串\n",[37,80104,80105,80108,80111,80113],{"class":39,"line":33484},[37,80106,80107],{"class":54},"      let",[37,80109,80110],{"class":50}," str ",[37,80112,55],{"class":54},[37,80114,70440],{"class":185},[37,80116,80117],{"class":39,"line":33531},[37,80118,70445],{"class":43},[37,80120,80121,80123,80126,80128,80131,80134],{"class":39,"line":33536},[37,80122,58343],{"class":50},[37,80124,80125],{"class":2320},"forEach",[37,80127,165],{"class":50},[37,80129,80130],{"class":159},"item",[37,80132,80133],{"class":54}," =>",[37,80135,15913],{"class":50},[37,80137,80138,80140,80143,80146,80148,80151,80153,80156,80159,80161],{"class":39,"line":33542},[37,80139,61606],{"class":54},[37,80141,80142],{"class":50}," { ",[37,80144,80145],{"class":61},"name",[37,80147,12776],{"class":50},[37,80149,80150],{"class":61},"price",[37,80152,12776],{"class":50},[37,80154,80155],{"class":61},"picture",[37,80157,80158],{"class":50}," } ",[37,80160,55],{"class":54},[37,80162,80163],{"class":50}," item\n",[37,80165,80166,80169,80171],{"class":39,"line":33561},[37,80167,80168],{"class":50},"        str ",[37,80170,9818],{"class":54},[37,80172,70504],{"class":185},[37,80174,80175],{"class":39,"line":33567},[37,80176,80177],{"class":185},"          \u003Cdiv class=\"item\">\n",[37,80179,80180,80183,80185],{"class":39,"line":33586},[37,80181,80182],{"class":185},"            \u003Cimg src=\"${",[37,80184,80155],{"class":50},[37,80186,80187],{"class":185},"}\" alt=\"\">\n",[37,80189,80190,80193,80195],{"class":39,"line":33592},[37,80191,80192],{"class":185},"            \u003Cp class=\"name\">${",[37,80194,80145],{"class":50},[37,80196,80197],{"class":185},"}\u003C\u002Fp>\n",[37,80199,80200,80203,80205],{"class":39,"line":33598},[37,80201,80202],{"class":185},"            \u003Cp class=\"price\">${",[37,80204,80150],{"class":50},[37,80206,80197],{"class":185},[37,80208,80209],{"class":39,"line":33608},[37,80210,80211],{"class":185},"          \u003C\u002Fdiv>\n",[37,80213,80214],{"class":39,"line":33613},[37,80215,80216],{"class":185},"        `\n",[37,80218,80219],{"class":39,"line":33619},[37,80220,65151],{"class":50},[37,80222,80223],{"class":39,"line":33635},[37,80224,80225],{"class":43},"      \u002F\u002F 追加给List\n",[37,80227,80228,80230,80232,80234,80237,80239,80241],{"class":39,"line":33680},[37,80229,56107],{"class":50},[37,80231,54735],{"class":2320},[37,80233,165],{"class":50},[37,80235,80236],{"class":185},"'.list'",[37,80238,74584],{"class":50},[37,80240,55],{"class":54},[37,80242,74321],{"class":50},[37,80244,80245],{"class":39,"line":33686},[37,80246,2544],{"class":50},[37,80248,80249],{"class":39,"line":33692},[37,80250,80251],{"class":43},"    \u002F\u002F 页面一打开就需要渲染\n",[37,80253,80254,80257],{"class":39,"line":33698},[37,80255,80256],{"class":2320},"    render",[37,80258,80259],{"class":50},"(goodsList)\n",[37,80261,80262],{"class":39,"line":33709},[37,80263,80264],{"class":43},"    \u002F\u002F 2.过滤筛选\n",[37,80266,80267,80269,80271,80273,80276,80278,80280,80282,80284,80286,80288,80290],{"class":39,"line":33715},[37,80268,52743],{"class":50},[37,80270,54735],{"class":2320},[37,80272,165],{"class":50},[37,80274,80275],{"class":185},"'.filter'",[37,80277,31165],{"class":50},[37,80279,58149],{"class":2320},[37,80281,165],{"class":50},[37,80283,58154],{"class":185},[37,80285,12776],{"class":50},[37,80287,599],{"class":159},[37,80289,80133],{"class":54},[37,80291,15913],{"class":50},[37,80293,80294],{"class":39,"line":33721},[37,80295,80296],{"class":43},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[37,80298,80299,80301,80303,80306,80308,80310,80312,80314],{"class":39,"line":33727},[37,80300,58564],{"class":54},[37,80302,80142],{"class":50},[37,80304,80305],{"class":61},"tagName",[37,80307,12776],{"class":50},[37,80309,31875],{"class":61},[37,80311,80158],{"class":50},[37,80313,55],{"class":54},[37,80315,80316],{"class":50}," e.target\n",[37,80318,80319],{"class":39,"line":33745},[37,80320,80321],{"class":43},"      \u002F\u002F 判断\n",[37,80323,80324,80326,80328,80330,80332],{"class":39,"line":33759},[37,80325,54816],{"class":54},[37,80327,67370],{"class":50},[37,80329,54822],{"class":54},[37,80331,68592],{"class":185},[37,80333,12783],{"class":50},[37,80335,80336],{"class":39,"line":33768},[37,80337,80338],{"class":43},"        \u002F\u002F console.log(11)\n",[37,80340,80341],{"class":39,"line":33777},[37,80342,80343],{"class":43},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[37,80345,80346],{"class":39,"line":33786},[37,80347,80348],{"class":43},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[37,80350,80351,80353,80355,80357],{"class":39,"line":33795},[37,80352,52166],{"class":54},[37,80354,52169],{"class":50},[37,80356,55],{"class":54},[37,80358,80359],{"class":50}," goodsList\n",[37,80361,80362,80364,80367,80369,80372],{"class":39,"line":33801},[37,80363,2854],{"class":54},[37,80365,80366],{"class":50}," (dataset.index ",[37,80368,54822],{"class":54},[37,80370,80371],{"class":185}," '1'",[37,80373,12783],{"class":50},[37,80375,80376,80379,80381,80384,80387,80389,80391,80393,80396,80398,80400,80403,80405,80407,80409],{"class":39,"line":33807},[37,80377,80378],{"class":50},"          arr ",[37,80380,55],{"class":54},[37,80382,80383],{"class":50}," goodsList.",[37,80385,80386],{"class":2320},"filter",[37,80388,165],{"class":50},[37,80390,80130],{"class":159},[37,80392,80133],{"class":54},[37,80394,80395],{"class":50}," item.price ",[37,80397,2075],{"class":54},[37,80399,4443],{"class":61},[37,80401,80402],{"class":54}," &&",[37,80404,80395],{"class":50},[37,80406,1964],{"class":54},[37,80408,6102],{"class":61},[37,80410,280],{"class":50},[37,80412,80413,80416,80418,80420,80422,80424,80427],{"class":39,"line":33815},[37,80414,80415],{"class":50},"        } ",[37,80417,2066],{"class":54},[37,80419,2069],{"class":54},[37,80421,80366],{"class":50},[37,80423,54822],{"class":54},[37,80425,80426],{"class":185}," '2'",[37,80428,12783],{"class":50},[37,80430,80431,80433,80435,80437,80439,80441,80443,80445,80447,80449,80451,80453,80455,80457,80460],{"class":39,"line":33820},[37,80432,80378],{"class":50},[37,80434,55],{"class":54},[37,80436,80383],{"class":50},[37,80438,80386],{"class":2320},[37,80440,165],{"class":50},[37,80442,80130],{"class":159},[37,80444,80133],{"class":54},[37,80446,80395],{"class":50},[37,80448,2075],{"class":54},[37,80450,6102],{"class":61},[37,80452,80402],{"class":54},[37,80454,80395],{"class":50},[37,80456,1964],{"class":54},[37,80458,80459],{"class":61}," 300",[37,80461,280],{"class":50},[37,80463,80464,80466,80468,80470,80472,80474,80477],{"class":39,"line":33826},[37,80465,80415],{"class":50},[37,80467,2066],{"class":54},[37,80469,2069],{"class":54},[37,80471,80366],{"class":50},[37,80473,54822],{"class":54},[37,80475,80476],{"class":185}," '3'",[37,80478,12783],{"class":50},[37,80480,80481,80483,80485,80487,80489,80491,80493,80495,80497,80499,80501],{"class":39,"line":33837},[37,80482,80378],{"class":50},[37,80484,55],{"class":54},[37,80486,80383],{"class":50},[37,80488,80386],{"class":2320},[37,80490,165],{"class":50},[37,80492,80130],{"class":159},[37,80494,80133],{"class":54},[37,80496,80395],{"class":50},[37,80498,2075],{"class":54},[37,80500,80459],{"class":61},[37,80502,280],{"class":50},[37,80504,80505],{"class":39,"line":33843},[37,80506,2886],{"class":50},[37,80508,80509],{"class":39,"line":33863},[37,80510,80511],{"class":43},"        \u002F\u002F 渲染函数\n",[37,80513,80514,80516],{"class":39,"line":33869},[37,80515,70744],{"class":2320},[37,80517,52748],{"class":50},[37,80519,80520],{"class":39,"line":33875},[37,80521,52734],{"class":50},[37,80523,80524],{"class":39,"line":33881},[37,80525,2757],{"emptyLinePlaceholder":454},[37,80527,80528],{"class":39,"line":33898},[37,80529,33798],{"class":50},[37,80531,80532,80534,80536],{"class":39,"line":33904},[37,80533,52753],{"class":50},[37,80535,52149],{"class":51636},[37,80537,51643],{"class":50},[37,80539,80540,80542,80544],{"class":39,"line":33910},[37,80541,52121],{"class":50},[37,80543,52136],{"class":51636},[37,80545,51643],{"class":50},[37,80547,80548],{"class":39,"line":33916},[37,80549,2757],{"emptyLinePlaceholder":454},[37,80551,80552,80554,80556],{"class":39,"line":33922},[37,80553,52121],{"class":50},[37,80555,50971],{"class":51636},[37,80557,51643],{"class":50},[469,80559,80561],{"id":80560},"_410-深入了解对象","4.10 深入了解对象",[498,80563,80565],{"id":80564},"_4101-创建对象","4.10.1 创建对象",[14,80567,80568],{},[1838,80569],{"alt":32,"src":80570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80572,80573],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[498,80575,80577],{"id":80576},"_4102-构造函数","4.10.2 构造函数",[14,80579,80580,80583],{},[673,80581,80582],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80585,80586,80589],{},[673,80587,80588],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[27,80591,80593],{"className":50969,"code":80592,"language":50971,"meta":32,"style":32},"\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",[34,80594,80595,80603,80608,80629,80642,80654,80666,80670,80675,80702,80707,80734],{"__ignoreMap":32},[37,80596,80597,80599,80601],{"class":39,"line":40},[37,80598,1418],{"class":50},[37,80600,52149],{"class":51636},[37,80602,51643],{"class":50},[37,80604,80605],{"class":39,"line":47},[37,80606,80607],{"class":43},"\u002F\u002F例：\n",[37,80609,80610,80612,80615,80617,80619,80621,80623,80625,80627],{"class":39,"line":104},[37,80611,54785],{"class":54},[37,80613,80614],{"class":2320}," Pig",[37,80616,165],{"class":50},[37,80618,80145],{"class":159},[37,80620,65],{"class":50},[37,80622,70557],{"class":159},[37,80624,65],{"class":50},[37,80626,70574],{"class":159},[37,80628,12783],{"class":50},[37,80630,80631,80634,80637,80639],{"class":39,"line":113},[37,80632,80633],{"class":61},"    this",[37,80635,80636],{"class":50},".name",[37,80638,55],{"class":54},[37,80640,80641],{"class":50},"name\n",[37,80643,80644,80646,80649,80651],{"class":39,"line":189},[37,80645,80633],{"class":61},[37,80647,80648],{"class":50},".age",[37,80650,55],{"class":54},[37,80652,80653],{"class":50},"age\n",[37,80655,80656,80658,80661,80663],{"class":39,"line":195},[37,80657,80633],{"class":61},[37,80659,80660],{"class":50},".gender",[37,80662,55],{"class":54},[37,80664,80665],{"class":50},"gender    \n",[37,80667,80668],{"class":39,"line":201},[37,80669,1941],{"class":50},[37,80671,80672],{"class":39,"line":207},[37,80673,80674],{"class":43},"\u002F\u002F创建佩奇对象\n",[37,80676,80677,80679,80682,80684,80686,80688,80691,80693,80695,80697,80700],{"class":39,"line":213},[37,80678,7140],{"class":54},[37,80680,80681],{"class":61}," Peppa",[37,80683,12058],{"class":54},[37,80685,80614],{"class":2320},[37,80687,165],{"class":50},[37,80689,80690],{"class":185},"'佩奇'",[37,80692,65],{"class":50},[37,80694,93],{"class":61},[37,80696,65],{"class":50},[37,80698,80699],{"class":185},"'女'",[37,80701,280],{"class":50},[37,80703,80704],{"class":39,"line":218},[37,80705,80706],{"class":43},"\u002F\u002F创建乔治对象\n",[37,80708,80709,80711,80714,80716,80718,80720,80723,80725,80727,80729,80732],{"class":39,"line":227},[37,80710,7140],{"class":54},[37,80712,80713],{"class":61}," George",[37,80715,12058],{"class":54},[37,80717,80614],{"class":2320},[37,80719,165],{"class":50},[37,80721,80722],{"class":185},"'乔治'",[37,80724,65],{"class":50},[37,80726,62],{"class":61},[37,80728,65],{"class":50},[37,80730,80731],{"class":185},"'男'",[37,80733,280],{"class":50},[37,80735,80736,80738,80740],{"class":39,"line":232},[37,80737,52121],{"class":50},[37,80739,52149],{"class":51636},[37,80741,51643],{"class":50},[14,80743,80744],{},[1838,80745],{"alt":32,"src":80746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80748,80749],{},[1838,80750],{"alt":32,"src":80751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80753,80754],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80756,80757],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80759,80760],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80762,80763],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80765,80766],{},"这里用等号是因为：对象.属性=值",[14,80768,80769],{},"①利用对象字面量创建对象",[14,80771,80772],{},"const o={",[14,80774,80775],{},"name:'pink'",[14,80777,80778],{},"} ②利用new Object创建对象",[14,80780,80781],{},"const o=new Object({name:'pink'})",[14,80783,80784],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80786,80787],{},"构造函数创建对象的执行过程：",[14,80789,80790],{},[1838,80791],{"alt":32,"src":80792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[498,80794,80796],{"id":80795},"_4103-实例成员","4.10.3 实例成员",[14,80798,80799],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[481,80801,80802,80805,80808],{},[484,80803,80804],{},"实例对象的属性和方法即为实例成员",[484,80806,80807],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[484,80809,80810],{},"构造函数创建的实例对象彼此独立互不影响",[498,80812,80814],{"id":80813},"_4104-静态成员","4.10.4 静态成员",[14,80816,80817],{},[1838,80818],{"alt":32,"src":80819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80821,80822],{},"静态成员有Date.now() Math.PI Math.random()",[14,80824,80825],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80827,80828],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80830,80831],{},"function Pig(name) n {",[14,80833,80834],{},"this.name=name",[14,80836,1454],{},[14,80838,80839],{},"Pig.eyes=2",[14,80841,80842],{},"Pig.sayHai=function () { console.log(this) }",[14,80844,80845],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80847,80848],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80850,11673],{},[481,80852,80853,80856,80859,80862,80865],{},[484,80854,80855],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[484,80857,80858],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[484,80860,80861],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[484,80863,80864],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[484,80866,80867],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80869,80870],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[498,80872,80874],{"id":80873},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80876,80877],{},"内置构造函数包含：",[14,80879,80880],{},[1838,80881],{"alt":32,"src":80882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80884,80885],{},[1838,80886],{"alt":32,"src":80887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80889,80890],{},"这些基本数据类型，js对他们进行了包装",[52149,80892,80893],{},"\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",[22339,80895,80897],{"id":80896},"_41051-object","4.10.5.1 Object",[14,80899,80900],{},"Object 是内置的构造函数，用于创建普通对象",[14,80902,80903],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[27,80905,80907],{"className":50969,"code":80906,"language":50971,"meta":32,"style":32},"const user=new Object({name:'小明',age:15})\n",[34,80908,80909],{"__ignoreMap":32},[37,80910,80911],{"class":39,"line":40},[37,80912,80906],{"class":50},[14,80914,80915],{},"三个常用的静态方法：",[23251,80917,80919],{"id":80918},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80921,80922],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80924,80925],{},[1838,80926],{"alt":32,"src":80927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80929,80930],{},[1838,80931],{"alt":32,"src":80932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[27,80934,80936],{"className":53403,"code":80935,"language":53405,"meta":32,"style":32},"\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",[34,80937,80938,80946,80954,80959,80964,80969,80974,80979,80984,80992],{"__ignoreMap":32},[37,80939,80940,80942,80944],{"class":39,"line":40},[37,80941,1418],{"class":50},[37,80943,52136],{"class":51636},[37,80945,51643],{"class":50},[37,80947,80948,80950,80952],{"class":39,"line":47},[37,80949,52480],{"class":50},[37,80951,52149],{"class":51636},[37,80953,51643],{"class":50},[37,80955,80956],{"class":39,"line":104},[37,80957,80958],{"class":50},"    const o = { name: 'pink', age: 6 }\n",[37,80960,80961],{"class":39,"line":113},[37,80962,80963],{"class":50},"    \u002F\u002F 获得所有属性名\n",[37,80965,80966],{"class":39,"line":189},[37,80967,80968],{"class":50},"    const arr = Object.keys(o)\n",[37,80970,80971],{"class":39,"line":195},[37,80972,80973],{"class":50},"    console.log(arr)\n",[37,80975,80976],{"class":39,"line":201},[37,80977,80978],{"class":50},"    \u002F\u002F 获得所有属性值\n",[37,80980,80981],{"class":39,"line":207},[37,80982,80983],{"class":50},"    console.log(Object.values(o))\n",[37,80985,80986,80988,80990],{"class":39,"line":213},[37,80987,52753],{"class":50},[37,80989,52149],{"class":51636},[37,80991,51643],{"class":50},[37,80993,80994,80996,80998],{"class":39,"line":218},[37,80995,52121],{"class":50},[37,80997,52136],{"class":51636},[37,80999,51643],{"class":50},[23251,81001,81003],{"id":81002},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,81005,81006],{},"Object.assign(oo,o)",[14,81008,81009],{},"后的东西添加给前 是追加",[14,81011,81012],{},[1838,81013],{"alt":32,"src":81014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,81016,81017],{},[1838,81018],{"alt":32,"src":81019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[27,81021,81023],{"className":53403,"code":81022,"language":53405,"meta":32,"style":32},"\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",[34,81024,81025,81033,81041,81045,81049,81053,81057,81061,81065,81070,81075,81080,81085,81090,81098],{"__ignoreMap":32},[37,81026,81027,81029,81031],{"class":39,"line":40},[37,81028,1418],{"class":50},[37,81030,52136],{"class":51636},[37,81032,51643],{"class":50},[37,81034,81035,81037,81039],{"class":39,"line":47},[37,81036,52480],{"class":50},[37,81038,52149],{"class":51636},[37,81040,51643],{"class":50},[37,81042,81043],{"class":39,"line":104},[37,81044,80958],{"class":50},[37,81046,81047],{"class":39,"line":113},[37,81048,80963],{"class":50},[37,81050,81051],{"class":39,"line":189},[37,81052,80968],{"class":50},[37,81054,81055],{"class":39,"line":195},[37,81056,80973],{"class":50},[37,81058,81059],{"class":39,"line":201},[37,81060,80978],{"class":50},[37,81062,81063],{"class":39,"line":207},[37,81064,80983],{"class":50},[37,81066,81067],{"class":39,"line":213},[37,81068,81069],{"class":50},"    const oo = {}\n",[37,81071,81072],{"class":39,"line":218},[37,81073,81074],{"class":50},"    Object.assign(oo, o)\n",[37,81076,81077],{"class":39,"line":227},[37,81078,81079],{"class":50},"    console.log(oo)\n",[37,81081,81082],{"class":39,"line":232},[37,81083,81084],{"class":50},"    Object.assign(o, { gender: '女' })\n",[37,81086,81087],{"class":39,"line":238},[37,81088,81089],{"class":50},"    console.log(o)\n",[37,81091,81092,81094,81096],{"class":39,"line":244},[37,81093,52753],{"class":50},[37,81095,52149],{"class":51636},[37,81097,51643],{"class":50},[37,81099,81100,81102,81104],{"class":39,"line":250},[37,81101,52121],{"class":50},[37,81103,52136],{"class":51636},[37,81105,51643],{"class":50},[14,81107,81108],{},[1838,81109],{"alt":32,"src":81110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22339,81112,81114],{"id":81113},"_41052-array","4.10.5.2 Array",[14,81116,81117],{},"Array 是内置的构造函数，用于创建数组",[14,81119,81120],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[27,81122,81124],{"className":50969,"code":81123,"language":50971,"meta":32,"style":32},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[34,81125,81126,81131],{"__ignoreMap":32},[37,81127,81128],{"class":39,"line":40},[37,81129,81130],{"class":50},"const arr=new Array(3,5)\n",[37,81132,81133],{"class":39,"line":47},[37,81134,81135],{"class":50},"console.log(arr)  \u002F\u002F[3,5]\n",[14,81137,81138],{},"Array的实例方法，这个方法是实例成员",[14,81140,81141],{},[1838,81142],{"alt":32,"src":81143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23251,81145,81147],{"id":81146},"_410521-reduce","4.10.5.2.1 reduce",[14,81149,81150],{},[1838,81151],{"alt":32,"src":81152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[27,81154,81156],{"className":53403,"code":81155,"language":53405,"meta":32,"style":32},"\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",[34,81157,81158,81166,81174,81179,81184,81189,81194,81198,81203,81208,81213,81217,81222,81227,81231,81236,81241,81246,81254],{"__ignoreMap":32},[37,81159,81160,81162,81164],{"class":39,"line":40},[37,81161,1418],{"class":50},[37,81163,52136],{"class":51636},[37,81165,51643],{"class":50},[37,81167,81168,81170,81172],{"class":39,"line":47},[37,81169,52480],{"class":50},[37,81171,52149],{"class":51636},[37,81173,51643],{"class":50},[37,81175,81176],{"class":39,"line":104},[37,81177,81178],{"class":50},"    const arr = [1, 5, 8]\n",[37,81180,81181],{"class":39,"line":113},[37,81182,81183],{"class":50},"    \u002F\u002F 1.没有初始值\n",[37,81185,81186],{"class":39,"line":189},[37,81187,81188],{"class":50},"    const total = arr.reduce(function (prev, current) {\n",[37,81190,81191],{"class":39,"line":195},[37,81192,81193],{"class":50},"      return prev + current\n",[37,81195,81196],{"class":39,"line":201},[37,81197,33798],{"class":50},[37,81199,81200],{"class":39,"line":207},[37,81201,81202],{"class":50},"    console.log(total)   \u002F\u002F14\n",[37,81204,81205],{"class":39,"line":213},[37,81206,81207],{"class":50},"    \u002F\u002F 2.有初始值\n",[37,81209,81210],{"class":39,"line":218},[37,81211,81212],{"class":50},"    const total1 = arr.reduce(function (prev, current) {\n",[37,81214,81215],{"class":39,"line":227},[37,81216,81193],{"class":50},[37,81218,81219],{"class":39,"line":232},[37,81220,81221],{"class":50},"    }, 10)\n",[37,81223,81224],{"class":39,"line":238},[37,81225,81226],{"class":50},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[37,81228,81229],{"class":39,"line":244},[37,81230,2757],{"emptyLinePlaceholder":454},[37,81232,81233],{"class":39,"line":250},[37,81234,81235],{"class":50},"    \u002F\u002F 3.箭头函数写法\n",[37,81237,81238],{"class":39,"line":256},[37,81239,81240],{"class":50},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[37,81242,81243],{"class":39,"line":261},[37,81244,81245],{"class":50},"    console.log(total2)   \u002F\u002F24\n",[37,81247,81248,81250,81252],{"class":39,"line":267},[37,81249,52753],{"class":50},[37,81251,52149],{"class":51636},[37,81253,51643],{"class":50},[37,81255,81256,81258,81260],{"class":39,"line":283},[37,81257,52121],{"class":50},[37,81259,52136],{"class":51636},[37,81261,51643],{"class":50},[14,81263,81264],{},"执行过程：",[481,81266,81267,81270,81273],{},[484,81268,81269],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[484,81271,81272],{},"每一次循环，把返回值给作为下一次循环的上一次值",[484,81274,81275],{},"如果有起始值，则起始值作为上一次值",[27,81277,81279],{"className":53403,"code":81278,"language":53405,"meta":32,"style":32},"\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",[34,81280,81281,81289,81297,81301,81305,81309,81313,81317,81321,81326,81331,81336,81341,81346,81350,81354,81358,81362,81366,81370,81375,81379,81384,81388,81393,81398,81402,81406,81410,81418],{"__ignoreMap":32},[37,81282,81283,81285,81287],{"class":39,"line":40},[37,81284,1418],{"class":50},[37,81286,52136],{"class":51636},[37,81288,51643],{"class":50},[37,81290,81291,81293,81295],{"class":39,"line":47},[37,81292,52480],{"class":50},[37,81294,52149],{"class":51636},[37,81296,51643],{"class":50},[37,81298,81299],{"class":39,"line":104},[37,81300,81178],{"class":50},[37,81302,81303],{"class":39,"line":113},[37,81304,81183],{"class":50},[37,81306,81307],{"class":39,"line":189},[37,81308,81188],{"class":50},[37,81310,81311],{"class":39,"line":195},[37,81312,81193],{"class":50},[37,81314,81315],{"class":39,"line":201},[37,81316,33798],{"class":50},[37,81318,81319],{"class":39,"line":207},[37,81320,81202],{"class":50},[37,81322,81323],{"class":39,"line":213},[37,81324,81325],{"class":50},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[37,81327,81328],{"class":39,"line":218},[37,81329,81330],{"class":50},"    \u002F\u002F     1              5                    6\n",[37,81332,81333],{"class":39,"line":227},[37,81334,81335],{"class":50},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[37,81337,81338],{"class":39,"line":232},[37,81339,81340],{"class":50},"    \u002F\u002F     6              8                    14\n",[37,81342,81343],{"class":39,"line":238},[37,81344,81345],{"class":50},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[37,81347,81348],{"class":39,"line":244},[37,81349,81207],{"class":50},[37,81351,81352],{"class":39,"line":250},[37,81353,81212],{"class":50},[37,81355,81356],{"class":39,"line":256},[37,81357,81193],{"class":50},[37,81359,81360],{"class":39,"line":261},[37,81361,81221],{"class":50},[37,81363,81364],{"class":39,"line":267},[37,81365,81226],{"class":50},[37,81367,81368],{"class":39,"line":283},[37,81369,81325],{"class":50},[37,81371,81372],{"class":39,"line":288},[37,81373,81374],{"class":50},"    \u002F\u002F     10             1                     11\n",[37,81376,81377],{"class":39,"line":294},[37,81378,81335],{"class":50},[37,81380,81381],{"class":39,"line":300},[37,81382,81383],{"class":50},"    \u002F\u002F     11             5                    16\n",[37,81385,81386],{"class":39,"line":306},[37,81387,81335],{"class":50},[37,81389,81390],{"class":39,"line":312},[37,81391,81392],{"class":50},"    \u002F\u002F     16             8                    24\n",[37,81394,81395],{"class":39,"line":317},[37,81396,81397],{"class":50},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[37,81399,81400],{"class":39,"line":323},[37,81401,81235],{"class":50},[37,81403,81404],{"class":39,"line":337},[37,81405,81240],{"class":50},[37,81407,81408],{"class":39,"line":342},[37,81409,81245],{"class":50},[37,81411,81412,81414,81416],{"class":39,"line":347},[37,81413,52753],{"class":50},[37,81415,52149],{"class":51636},[37,81417,51643],{"class":50},[37,81419,81420,81422,81424],{"class":39,"line":352},[37,81421,52121],{"class":50},[37,81423,52136],{"class":51636},[37,81425,51643],{"class":50},[23251,81427,81429],{"id":81428},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81431,81432],{},[1838,81433],{"alt":32,"src":81434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[27,81436,81438],{"className":53403,"code":81437,"language":53405,"meta":32,"style":32},"\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",[34,81439,81440,81448,81456,81461,81466,81471,81476,81480,81485,81490,81495,81500,81505,81510,81514,81519,81523,81528,81536],{"__ignoreMap":32},[37,81441,81442,81444,81446],{"class":39,"line":40},[37,81443,1418],{"class":50},[37,81445,52136],{"class":51636},[37,81447,51643],{"class":50},[37,81449,81450,81452,81454],{"class":39,"line":47},[37,81451,52480],{"class":50},[37,81453,52149],{"class":51636},[37,81455,51643],{"class":50},[37,81457,81458],{"class":39,"line":104},[37,81459,81460],{"class":50},"    const arr = [\n",[37,81462,81463],{"class":39,"line":113},[37,81464,81465],{"class":50},"      { name: '张三', salary: 10000 },\n",[37,81467,81468],{"class":39,"line":189},[37,81469,81470],{"class":50},"      { name: '李四', salary: 10000 },\n",[37,81472,81473],{"class":39,"line":195},[37,81474,81475],{"class":50},"      { name: '王五', salary: 10000 }\n",[37,81477,81478],{"class":39,"line":201},[37,81479,53445],{"class":50},[37,81481,81482],{"class":39,"line":207},[37,81483,81484],{"class":50},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[37,81486,81487],{"class":39,"line":213},[37,81488,81489],{"class":50},"    \u002F\u002F prev是累计值\n",[37,81491,81492],{"class":39,"line":218},[37,81493,81494],{"class":50},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[37,81496,81497],{"class":39,"line":227},[37,81498,81499],{"class":50},"    console.log(total)\n",[37,81501,81502],{"class":39,"line":232},[37,81503,81504],{"class":50},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[37,81506,81507],{"class":39,"line":238},[37,81508,81509],{"class":50},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[37,81511,81512],{"class":39,"line":244},[37,81513,81504],{"class":50},[37,81515,81516],{"class":39,"line":250},[37,81517,81518],{"class":50},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[37,81520,81521],{"class":39,"line":256},[37,81522,81504],{"class":50},[37,81524,81525],{"class":39,"line":261},[37,81526,81527],{"class":50},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[37,81529,81530,81532,81534],{"class":39,"line":267},[37,81531,52753],{"class":50},[37,81533,52149],{"class":51636},[37,81535,51643],{"class":50},[37,81537,81538,81540,81542],{"class":39,"line":283},[37,81539,52121],{"class":50},[37,81541,52136],{"class":51636},[37,81543,51643],{"class":50},[23251,81545,81547],{"id":81546},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81549,81550],{},[1838,81551],{"alt":32,"src":81552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81554,81555],{},[1838,81556],{"alt":32,"src":81557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[481,81559,81560],{},[484,81561,81562],{},"find()",[14,81564,81565],{},"循环查找，找到第一个就ok",[14,81567,81568],{},[51,81569,81572],{"href":81570,"rel":81571},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24206],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[27,81574,81576],{"className":50969,"code":81575,"language":50971,"meta":32,"style":32},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[34,81577,81578,81583,81588],{"__ignoreMap":32},[37,81579,81580],{"class":39,"line":40},[37,81581,81582],{"class":50},"const array1 = [5, 12, 8, 130, 44]\n",[37,81584,81585],{"class":39,"line":47},[37,81586,81587],{"class":50},"const found = array1.find((element) => element > 10)\n",[37,81589,81590],{"class":39,"line":104},[37,81591,81592],{"class":50},"console.log(found)  \u002F\u002F12\n",[14,81594,81595,81597,81598,81603,81604,81607,81608,81610,81611,81616,81617,81619,81620,81622,81623,81625,81626],{},[34,81596,81562],{}," 方法是一个",[51,81599,81602],{"href":81600,"rel":81601},"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",[24206],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[34,81605,81606],{},"callbackFn"," 函数，直到 ",[34,81609,81606],{}," 返回一个",[51,81612,81615],{"href":81613,"rel":81614},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24206],"真值","。然后 ",[34,81618,81562],{}," 返回该元素并停止迭代数组。如果 ",[34,81621,81606],{}," 从未返回真值，则 ",[34,81624,81562],{}," 返回 ",[34,81627,81628],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[27,81630,81632],{"className":53403,"code":81631,"language":53405,"meta":32,"style":32},"\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",[34,81633,81634,81642,81650,81655,81660,81665,81669,81674,81679,81683,81688,81693,81697,81701,81706,81711,81715,81719,81724,81729,81734,81739,81744,81748,81753,81758,81763,81768,81772,81777,81785],{"__ignoreMap":32},[37,81635,81636,81638,81640],{"class":39,"line":40},[37,81637,1418],{"class":50},[37,81639,52136],{"class":51636},[37,81641,51643],{"class":50},[37,81643,81644,81646,81648],{"class":39,"line":47},[37,81645,52480],{"class":50},[37,81647,52149],{"class":51636},[37,81649,51643],{"class":50},[37,81651,81652],{"class":39,"line":104},[37,81653,81654],{"class":50},"    const arr = ['red', 'blue', 'green']\n",[37,81656,81657],{"class":39,"line":113},[37,81658,81659],{"class":50},"    const found = arr.find(item => item === 'pink')\n",[37,81661,81662],{"class":39,"line":189},[37,81663,81664],{"class":50},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[37,81666,81667],{"class":39,"line":195},[37,81668,2757],{"emptyLinePlaceholder":454},[37,81670,81671],{"class":39,"line":201},[37,81672,81673],{"class":50},"    \u002F\u002F 使用场景，用于查找数据\n",[37,81675,81676],{"class":39,"line":207},[37,81677,81678],{"class":50},"    const arr1 = [\n",[37,81680,81681],{"class":39,"line":213},[37,81682,79721],{"class":50},[37,81684,81685],{"class":39,"line":218},[37,81686,81687],{"class":50},"        name: '小米',\n",[37,81689,81690],{"class":39,"line":227},[37,81691,81692],{"class":50},"        price: 1999\n",[37,81694,81695],{"class":39,"line":232},[37,81696,78227],{"class":50},[37,81698,81699],{"class":39,"line":238},[37,81700,79721],{"class":50},[37,81702,81703],{"class":39,"line":244},[37,81704,81705],{"class":50},"        name: '华为',\n",[37,81707,81708],{"class":39,"line":250},[37,81709,81710],{"class":50},"        price: 3999\n",[37,81712,81713],{"class":39,"line":256},[37,81714,52734],{"class":50},[37,81716,81717],{"class":39,"line":261},[37,81718,53445],{"class":50},[37,81720,81721],{"class":39,"line":267},[37,81722,81723],{"class":50},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[37,81725,81726],{"class":39,"line":283},[37,81727,81728],{"class":50},"    \u002F\u002F const found1 = arr1.find(item => {\n",[37,81730,81731],{"class":39,"line":288},[37,81732,81733],{"class":50},"    \u002F\u002F   if (item.name === '小米') {\n",[37,81735,81736],{"class":39,"line":294},[37,81737,81738],{"class":50},"    \u002F\u002F     return item\n",[37,81740,81741],{"class":39,"line":300},[37,81742,81743],{"class":50},"    \u002F\u002F   }\n",[37,81745,81746],{"class":39,"line":306},[37,81747,63626],{"class":50},[37,81749,81750],{"class":39,"line":312},[37,81751,81752],{"class":50},"    \u002F\u002F 另一种写法\n",[37,81754,81755],{"class":39,"line":317},[37,81756,81757],{"class":50},"    const found1 = arr1.find(item => {\n",[37,81759,81760],{"class":39,"line":323},[37,81761,81762],{"class":50},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[37,81764,81765],{"class":39,"line":337},[37,81766,81767],{"class":50},"      return item.name = '小米'\n",[37,81769,81770],{"class":39,"line":342},[37,81771,33798],{"class":50},[37,81773,81774],{"class":39,"line":347},[37,81775,81776],{"class":50},"    console.log(found1)\n",[37,81778,81779,81781,81783],{"class":39,"line":352},[37,81780,52753],{"class":50},[37,81782,52149],{"class":51636},[37,81784,51643],{"class":50},[37,81786,81787,81789,81791],{"class":39,"line":357},[37,81788,52121],{"class":50},[37,81790,52136],{"class":51636},[37,81792,51643],{"class":50},[14,81794,81795],{},[1838,81796],{"alt":32,"src":81797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81799,81800],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[481,81802,81803],{"start":47},[484,81804,81805],{},"every()返回的是布尔值",[14,81807,81808],{},[51,81809,81812],{"href":81810,"rel":81811},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24206],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81814,81815],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81817,81818],{},"some是只有有一个就没问题",[14,81820,81821],{},"every是必须全是才行",[27,81823,81827],{"className":81824,"code":81825,"language":81826,"meta":32,"style":32},"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",[34,81828,81829,81845,81859,81863,81872],{"__ignoreMap":32},[37,81830,81831,81833,81836,81838,81840,81843],{"class":39,"line":40},[37,81832,54785],{"class":54},[37,81834,81835],{"class":50}," isBigEnough(element, ",[37,81837,401],{"class":54},[37,81839,12776],{"class":50},[37,81841,81842],{"class":54},"array",[37,81844,12783],{"class":50},[37,81846,81847,81850,81853,81855,81857],{"class":39,"line":47},[37,81848,81849],{"class":54},"  return",[37,81851,81852],{"class":50}," element ",[37,81854,2075],{"class":54},[37,81856,2395],{"class":61},[37,81858,1669],{"class":50},[37,81860,81861],{"class":39,"line":104},[37,81862,1941],{"class":50},[37,81864,81865,81868,81870],{"class":39,"line":113},[37,81866,81867],{"class":50},"[12, 5, 8, 130, 44].every(isBigEnough); ",[37,81869,33666],{"class":54},[37,81871,54852],{"class":50},[37,81873,81874,81877,81879],{"class":39,"line":189},[37,81875,81876],{"class":50},"[12, 54, 18, 130, 44].every(isBigEnough); ",[37,81878,33666],{"class":54},[37,81880,58276],{"class":50},[27,81882,81884],{"className":53403,"code":81883,"language":53405,"meta":32,"style":32},"\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",[34,81885,81886,81894,81902,81907,81911,81916,81921,81929],{"__ignoreMap":32},[37,81887,81888,81890,81892],{"class":39,"line":40},[37,81889,1418],{"class":50},[37,81891,52136],{"class":51636},[37,81893,51643],{"class":50},[37,81895,81896,81898,81900],{"class":39,"line":47},[37,81897,52480],{"class":50},[37,81899,52149],{"class":51636},[37,81901,51643],{"class":50},[37,81903,81904],{"class":39,"line":104},[37,81905,81906],{"class":50},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[37,81908,81909],{"class":39,"line":113},[37,81910,78657],{"class":50},[37,81912,81913],{"class":39,"line":189},[37,81914,81915],{"class":50},"    const flag = arr.every(item => item >= 10)\n",[37,81917,81918],{"class":39,"line":195},[37,81919,81920],{"class":50},"    console.log(flag)    \u002F\u002Ftrue\n",[37,81922,81923,81925,81927],{"class":39,"line":201},[37,81924,52753],{"class":50},[37,81926,52149],{"class":51636},[37,81928,51643],{"class":50},[37,81930,81931,81933,81935],{"class":39,"line":207},[37,81932,52121],{"class":50},[37,81934,52136],{"class":51636},[37,81936,51643],{"class":50},[27,81938,81940],{"className":53403,"code":81939,"language":53405,"meta":32,"style":32},"\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",[34,81941,81942,81950,81958,81962,81967,81972,81977,81985],{"__ignoreMap":32},[37,81943,81944,81946,81948],{"class":39,"line":40},[37,81945,1418],{"class":50},[37,81947,52136],{"class":51636},[37,81949,51643],{"class":50},[37,81951,81952,81954,81956],{"class":39,"line":47},[37,81953,52480],{"class":50},[37,81955,52149],{"class":51636},[37,81957,51643],{"class":50},[37,81959,81960],{"class":39,"line":104},[37,81961,81906],{"class":50},[37,81963,81964],{"class":39,"line":113},[37,81965,81966],{"class":50},"    const arr = [10, 0, 5]\n",[37,81968,81969],{"class":39,"line":189},[37,81970,81971],{"class":50},"    const flag = arr.some(item => item >= 10)\n",[37,81973,81974],{"class":39,"line":195},[37,81975,81976],{"class":50},"    console.log(flag)   \u002F\u002Ftrue\n",[37,81978,81979,81981,81983],{"class":39,"line":201},[37,81980,52753],{"class":50},[37,81982,52149],{"class":51636},[37,81984,51643],{"class":50},[37,81986,81987,81989,81991],{"class":39,"line":207},[37,81988,52121],{"class":50},[37,81990,52136],{"class":51636},[37,81992,51643],{"class":50},[23251,81994,81996],{"id":81995},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81998,81999],{},[1838,82000],{"alt":32,"src":82001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[27,82003,82005],{"className":50969,"code":82004,"language":50971,"meta":32,"style":32},"\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",[34,82006,82007,82017,82031,82035,82043,82057,82077,82089,82097,82104,82116,82128,82140,82152,82162,82172,82176,82184,82192,82196,82204,82216,82224,82246,82251,82256,82289,82297,82305,82309],{"__ignoreMap":32},[37,82008,82009,82011,82013,82015],{"class":39,"line":40},[37,82010,51633],{"class":50},[37,82012,51637],{"class":51636},[37,82014,51640],{"class":2320},[37,82016,51643],{"class":50},[37,82018,82019,82021,82023,82025,82027,82029],{"class":39,"line":47},[37,82020,1418],{"class":50},[37,82022,50971],{"class":51636},[37,82024,51652],{"class":2320},[37,82026,55],{"class":50},[37,82028,51657],{"class":185},[37,82030,51643],{"class":50},[37,82032,82033],{"class":39,"line":104},[37,82034,2757],{"emptyLinePlaceholder":454},[37,82036,82037,82039,82041],{"class":39,"line":113},[37,82038,1418],{"class":50},[37,82040,51670],{"class":51636},[37,82042,51643],{"class":50},[37,82044,82045,82047,82049,82051,82053,82055],{"class":39,"line":189},[37,82046,52480],{"class":50},[37,82048,51680],{"class":51636},[37,82050,51683],{"class":2320},[37,82052,55],{"class":50},[37,82054,51688],{"class":185},[37,82056,51643],{"class":50},[37,82058,82059,82061,82063,82065,82067,82069,82071,82073,82075],{"class":39,"line":195},[37,82060,52480],{"class":50},[37,82062,51680],{"class":51636},[37,82064,15261],{"class":2320},[37,82066,55],{"class":50},[37,82068,51727],{"class":185},[37,82070,51707],{"class":2320},[37,82072,55],{"class":50},[37,82074,51734],{"class":185},[37,82076,51643],{"class":50},[37,82078,82079,82081,82083,82085,82087],{"class":39,"line":201},[37,82080,52480],{"class":50},[37,82082,51743],{"class":51636},[37,82084,51746],{"class":50},[37,82086,51743],{"class":51636},[37,82088,51643],{"class":50},[37,82090,82091,82093,82095],{"class":39,"line":207},[37,82092,52480],{"class":50},[37,82094,446],{"class":51636},[37,82096,51643],{"class":50},[37,82098,82099,82102],{"class":39,"line":213},[37,82100,82101],{"class":51636},"    div",[37,82103,15913],{"class":50},[37,82105,82106,82108,82110,82112,82114],{"class":39,"line":218},[37,82107,55107],{"class":61},[37,82109,51773],{"class":50},[37,82111,2087],{"class":61},[37,82113,51828],{"class":54},[37,82115,1669],{"class":50},[37,82117,82118,82120,82122,82124,82126],{"class":39,"line":227},[37,82119,55121],{"class":61},[37,82121,51773],{"class":50},[37,82123,915],{"class":61},[37,82125,51828],{"class":54},[37,82127,1669],{"class":50},[37,82129,82130,82132,82134,82136,82138],{"class":39,"line":232},[37,82131,57695],{"class":61},[37,82133,51773],{"class":50},[37,82135,915],{"class":61},[37,82137,51828],{"class":54},[37,82139,1669],{"class":50},[37,82141,82142,82144,82146,82148,82150],{"class":39,"line":238},[37,82143,65469],{"class":61},[37,82145,51773],{"class":50},[37,82147,68],{"class":61},[37,82149,51828],{"class":54},[37,82151,1669],{"class":50},[37,82153,82154,82156,82158,82160],{"class":39,"line":244},[37,82155,57622],{"class":61},[37,82157,51773],{"class":50},[37,82159,51928],{"class":61},[37,82161,1669],{"class":50},[37,82163,82164,82166,82168,82170],{"class":39,"line":250},[37,82165,55220],{"class":61},[37,82167,51773],{"class":50},[37,82169,51981],{"class":61},[37,82171,1669],{"class":50},[37,82173,82174],{"class":39,"line":256},[37,82175,2544],{"class":50},[37,82177,82178,82180,82182],{"class":39,"line":261},[37,82179,52753],{"class":50},[37,82181,446],{"class":51636},[37,82183,51643],{"class":50},[37,82185,82186,82188,82190],{"class":39,"line":267},[37,82187,52121],{"class":50},[37,82189,51670],{"class":51636},[37,82191,51643],{"class":50},[37,82193,82194],{"class":39,"line":283},[37,82195,2757],{"emptyLinePlaceholder":454},[37,82197,82198,82200,82202],{"class":39,"line":288},[37,82199,1418],{"class":50},[37,82201,52136],{"class":51636},[37,82203,51643],{"class":50},[37,82205,82206,82208,82210,82212,82214],{"class":39,"line":294},[37,82207,52480],{"class":50},[37,82209,51947],{"class":51636},[37,82211,55650],{"class":50},[37,82213,51947],{"class":51636},[37,82215,51643],{"class":50},[37,82217,82218,82220,82222],{"class":39,"line":300},[37,82219,52480],{"class":50},[37,82221,52149],{"class":51636},[37,82223,51643],{"class":50},[37,82225,82226,82228,82231,82233,82236,82239,82241,82244],{"class":39,"line":306},[37,82227,11562],{"class":54},[37,82229,82230],{"class":61}," spec",[37,82232,13905],{"class":54},[37,82234,82235],{"class":50}," { size: ",[37,82237,82238],{"class":185},"'40cm*40cm'",[37,82240,55800],{"class":50},[37,82242,82243],{"class":185},"'黑色'",[37,82245,55940],{"class":50},[37,82247,82248],{"class":39,"line":312},[37,82249,82250],{"class":43},"    \u002F\u002F const arr = Object.values(spec)\n",[37,82252,82253],{"class":39,"line":317},[37,82254,82255],{"class":43},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[37,82257,82258,82260,82262,82264,82267,82269,82271,82274,82277,82280,82282,82284,82287],{"class":39,"line":323},[37,82259,52743],{"class":50},[37,82261,54735],{"class":2320},[37,82263,165],{"class":50},[37,82265,82266],{"class":185},"'div'",[37,82268,74584],{"class":50},[37,82270,55],{"class":54},[37,82272,82273],{"class":50}," Object.",[37,82275,82276],{"class":2320},"values",[37,82278,82279],{"class":50},"(spec).",[37,82281,74558],{"class":2320},[37,82283,165],{"class":50},[37,82285,82286],{"class":185},"'\u002F'",[37,82288,280],{"class":50},[37,82290,82291,82293,82295],{"class":39,"line":337},[37,82292,52753],{"class":50},[37,82294,52149],{"class":51636},[37,82296,51643],{"class":50},[37,82298,82299,82301,82303],{"class":39,"line":342},[37,82300,52121],{"class":50},[37,82302,52136],{"class":51636},[37,82304,51643],{"class":50},[37,82306,82307],{"class":39,"line":347},[37,82308,2757],{"emptyLinePlaceholder":454},[37,82310,82311,82313,82315],{"class":39,"line":352},[37,82312,52121],{"class":50},[37,82314,50971],{"class":51636},[37,82316,51643],{"class":50},[14,82318,82319],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23251,82321,82323],{"id":82322},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82325,82326],{},"静态方法，将伪数组转换为真数组",[14,82328,82329],{},[1838,82330],{"alt":32,"src":82331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[27,82333,82335],{"className":53403,"code":82334,"language":53405,"meta":32,"style":32},"\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",[34,82336,82337,82345,82353,82365,82377,82389,82397,82405,82410,82415,82420,82425,82433],{"__ignoreMap":32},[37,82338,82339,82341,82343],{"class":39,"line":40},[37,82340,1418],{"class":50},[37,82342,52136],{"class":51636},[37,82344,51643],{"class":50},[37,82346,82347,82349,82351],{"class":39,"line":47},[37,82348,52480],{"class":50},[37,82350,1515],{"class":51636},[37,82352,51643],{"class":50},[37,82354,82355,82357,82359,82361,82363],{"class":39,"line":104},[37,82356,51677],{"class":50},[37,82358,484],{"class":51636},[37,82360,55650],{"class":50},[37,82362,484],{"class":51636},[37,82364,51643],{"class":50},[37,82366,82367,82369,82371,82373,82375],{"class":39,"line":113},[37,82368,51677],{"class":50},[37,82370,484],{"class":51636},[37,82372,55650],{"class":50},[37,82374,484],{"class":51636},[37,82376,51643],{"class":50},[37,82378,82379,82381,82383,82385,82387],{"class":39,"line":189},[37,82380,51677],{"class":50},[37,82382,484],{"class":51636},[37,82384,55650],{"class":50},[37,82386,484],{"class":51636},[37,82388,51643],{"class":50},[37,82390,82391,82393,82395],{"class":39,"line":195},[37,82392,52753],{"class":50},[37,82394,1515],{"class":51636},[37,82396,51643],{"class":50},[37,82398,82399,82401,82403],{"class":39,"line":201},[37,82400,52480],{"class":50},[37,82402,52149],{"class":51636},[37,82404,51643],{"class":50},[37,82406,82407],{"class":39,"line":207},[37,82408,82409],{"class":50},"    const lis = document.querySelectorAll('li')\n",[37,82411,82412],{"class":39,"line":213},[37,82413,82414],{"class":50},"    const liss = Array.from(lis)\n",[37,82416,82417],{"class":39,"line":218},[37,82418,82419],{"class":50},"    liss.pop()\n",[37,82421,82422],{"class":39,"line":227},[37,82423,82424],{"class":50},"    console.log(liss)\n",[37,82426,82427,82429,82431],{"class":39,"line":232},[37,82428,52753],{"class":50},[37,82430,52149],{"class":51636},[37,82432,51643],{"class":50},[37,82434,82435,82437,82439],{"class":39,"line":238},[37,82436,52121],{"class":50},[37,82438,52136],{"class":51636},[37,82440,51643],{"class":50},[14,82442,82443],{},[1838,82444],{"alt":32,"src":82445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22339,82447,82449],{"id":82448},"_41053-string","4.10.5.3 String",[14,82451,82452],{},[1838,82453],{"alt":32,"src":82454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23251,82456,82458],{"id":82457},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[27,82460,82462],{"className":53403,"code":82461,"language":53405,"meta":32,"style":32},"\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",[34,82463,82464,82472,82480,82485,82490,82495,82499,82504,82509,82514,82522],{"__ignoreMap":32},[37,82465,82466,82468,82470],{"class":39,"line":40},[37,82467,1418],{"class":50},[37,82469,52136],{"class":51636},[37,82471,51643],{"class":50},[37,82473,82474,82476,82478],{"class":39,"line":47},[37,82475,52480],{"class":50},[37,82477,52149],{"class":51636},[37,82479,51643],{"class":50},[37,82481,82482],{"class":39,"line":104},[37,82483,82484],{"class":50},"    \u002F\u002F 把字符串转化为数组\n",[37,82486,82487],{"class":39,"line":113},[37,82488,82489],{"class":50},"    const str = 'pink,red'\n",[37,82491,82492],{"class":39,"line":189},[37,82493,82494],{"class":50},"    const arr = str.split(',')\n",[37,82496,82497],{"class":39,"line":195},[37,82498,80973],{"class":50},[37,82500,82501],{"class":39,"line":201},[37,82502,82503],{"class":50},"    const str1 = '2025-8-25'\n",[37,82505,82506],{"class":39,"line":207},[37,82507,82508],{"class":50},"    const arr1 = str1.split('-')\n",[37,82510,82511],{"class":39,"line":213},[37,82512,82513],{"class":50},"    console.log(arr1)\n",[37,82515,82516,82518,82520],{"class":39,"line":218},[37,82517,52753],{"class":50},[37,82519,52149],{"class":51636},[37,82521,51643],{"class":50},[37,82523,82524,82526,82528],{"class":39,"line":227},[37,82525,52121],{"class":50},[37,82527,52136],{"class":51636},[37,82529,51643],{"class":50},[23251,82531,82533],{"id":82532},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82535,5530],{},[14,82537,82538],{},"substring(indexStart)",[14,82540,82541],{},"substring(indexStart, indexEnd)",[1515,82543,82544,82555,82567,82577],{},[484,82545,82546,82547,82550,82551,82554],{},"如果省略了 ",[34,82548,82549],{},"indexEnd","，则 ",[34,82552,82553],{},"substring()"," 提取字符直到字符串的末尾",[484,82556,82557,82558,82561,82562,82550,82564,82566],{},"如果 ",[34,82559,82560],{},"indexStart"," 等于 ",[34,82563,82549],{},[34,82565,82553],{}," 返回一个空字符串",[484,82568,82557,82569,82571,82572,82550,82574,82576],{},[34,82570,82560],{}," 大于 ",[34,82573,82549],{},[34,82575,82553],{}," 的效果就像交换了这两个参数一样",[484,82578,82579],{},"结束的索引号不包含想要截取的部分",[27,82581,82583],{"className":81824,"code":82582,"language":81826,"meta":32,"style":32},"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",[34,82584,82585,82597,82601,82635,82665,82669,82700,82704,82731,82761,82791,82795,82826],{"__ignoreMap":32},[37,82586,82587,82590,82592,82595],{"class":39,"line":40},[37,82588,82589],{"class":50},"const anyString ",[37,82591,55],{"class":54},[37,82593,82594],{"class":185}," \"Mozilla\"",[37,82596,1669],{"class":50},[37,82598,82599],{"class":39,"line":47},[37,82600,2757],{"emptyLinePlaceholder":454},[37,82602,82603,82606,82608,82610,82612,82615,82617,82620,82622,82624,82626,82628,82630,82632],{"class":39,"line":104},[37,82604,82605],{"class":61},"console",[37,82607,1068],{"class":50},[37,82609,58583],{"class":61},[37,82611,165],{"class":50},[37,82613,82614],{"class":61},"anyString",[37,82616,1068],{"class":50},[37,82618,82619],{"class":61},"substring",[37,82621,165],{"class":50},[37,82623,135],{"class":61},[37,82625,12776],{"class":50},[37,82627,332],{"class":61},[37,82629,75588],{"class":50},[37,82631,33666],{"class":54},[37,82633,82634],{"class":185}," 'M'\n",[37,82636,82637,82639,82641,82643,82645,82647,82649,82651,82653,82655,82657,82659,82661,82663],{"class":39,"line":113},[37,82638,82605],{"class":61},[37,82640,1068],{"class":50},[37,82642,58583],{"class":61},[37,82644,165],{"class":50},[37,82646,82614],{"class":61},[37,82648,1068],{"class":50},[37,82650,82619],{"class":61},[37,82652,165],{"class":50},[37,82654,332],{"class":61},[37,82656,12776],{"class":50},[37,82658,135],{"class":61},[37,82660,75588],{"class":50},[37,82662,33666],{"class":54},[37,82664,82634],{"class":185},[37,82666,82667],{"class":39,"line":189},[37,82668,2757],{"emptyLinePlaceholder":454},[37,82670,82671,82673,82675,82677,82679,82681,82683,82685,82687,82689,82691,82693,82695,82697],{"class":39,"line":195},[37,82672,82605],{"class":61},[37,82674,1068],{"class":50},[37,82676,58583],{"class":61},[37,82678,165],{"class":50},[37,82680,82614],{"class":61},[37,82682,1068],{"class":50},[37,82684,82619],{"class":61},[37,82686,165],{"class":50},[37,82688,135],{"class":61},[37,82690,12776],{"class":50},[37,82692,93],{"class":61},[37,82694,75588],{"class":50},[37,82696,33666],{"class":54},[37,82698,82699],{"class":185}," 'Mozill'\n",[37,82701,82702],{"class":39,"line":201},[37,82703,2757],{"emptyLinePlaceholder":454},[37,82705,82706,82708,82710,82712,82714,82716,82718,82720,82722,82724,82726,82728],{"class":39,"line":207},[37,82707,82605],{"class":61},[37,82709,1068],{"class":50},[37,82711,58583],{"class":61},[37,82713,165],{"class":50},[37,82715,82614],{"class":61},[37,82717,1068],{"class":50},[37,82719,82619],{"class":61},[37,82721,165],{"class":50},[37,82723,168],{"class":61},[37,82725,75588],{"class":50},[37,82727,33666],{"class":54},[37,82729,82730],{"class":185}," 'lla'\n",[37,82732,82733,82735,82737,82739,82741,82743,82745,82747,82749,82751,82753,82755,82757,82759],{"class":39,"line":213},[37,82734,82605],{"class":61},[37,82736,1068],{"class":50},[37,82738,58583],{"class":61},[37,82740,165],{"class":50},[37,82742,82614],{"class":61},[37,82744,1068],{"class":50},[37,82746,82619],{"class":61},[37,82748,165],{"class":50},[37,82750,168],{"class":61},[37,82752,12776],{"class":50},[37,82754,885],{"class":61},[37,82756,75644],{"class":50},[37,82758,33666],{"class":54},[37,82760,82730],{"class":185},[37,82762,82763,82765,82767,82769,82771,82773,82775,82777,82779,82781,82783,82785,82787,82789],{"class":39,"line":218},[37,82764,82605],{"class":61},[37,82766,1068],{"class":50},[37,82768,58583],{"class":61},[37,82770,165],{"class":50},[37,82772,82614],{"class":61},[37,82774,1068],{"class":50},[37,82776,82619],{"class":61},[37,82778,165],{"class":50},[37,82780,885],{"class":61},[37,82782,12776],{"class":50},[37,82784,168],{"class":61},[37,82786,75588],{"class":50},[37,82788,33666],{"class":54},[37,82790,82730],{"class":185},[37,82792,82793],{"class":39,"line":227},[37,82794,2757],{"emptyLinePlaceholder":454},[37,82796,82797,82799,82801,82803,82805,82807,82809,82811,82813,82815,82817,82819,82821,82823],{"class":39,"line":232},[37,82798,82605],{"class":61},[37,82800,1068],{"class":50},[37,82802,58583],{"class":61},[37,82804,165],{"class":50},[37,82806,82614],{"class":61},[37,82808,1068],{"class":50},[37,82810,82619],{"class":61},[37,82812,165],{"class":50},[37,82814,135],{"class":61},[37,82816,12776],{"class":50},[37,82818,885],{"class":61},[37,82820,75588],{"class":50},[37,82822,33666],{"class":54},[37,82824,82825],{"class":185}," 'Mozilla'\n",[37,82827,82828,82830,82832,82834,82836,82838,82840,82842,82844,82846,82848,82850,82852,82854],{"class":39,"line":238},[37,82829,82605],{"class":61},[37,82831,1068],{"class":50},[37,82833,58583],{"class":61},[37,82835,165],{"class":50},[37,82837,82614],{"class":61},[37,82839,1068],{"class":50},[37,82841,82619],{"class":61},[37,82843,165],{"class":50},[37,82845,135],{"class":61},[37,82847,12776],{"class":50},[37,82849,98],{"class":61},[37,82851,75588],{"class":50},[37,82853,33666],{"class":54},[37,82855,82825],{"class":185},[23251,82857,82859],{"id":82858},"_410533-startswith","4.10.5.3.3 startsWith",[14,82861,82862,82865,82866,82871,82872,82874,82875],{},[34,82863,82864],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[673,82867,82868],{},[34,82869,82870],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[34,82873,1738],{}," 或 ",[34,82876,66356],{},[27,82878,82880],{"className":77830,"code":82879,"language":77832,"meta":32,"style":32},"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",[34,82881,82882,82894,82913,82918,82938],{"__ignoreMap":32},[37,82883,82884,82886,82889,82891],{"class":39,"line":40},[37,82885,7140],{"class":54},[37,82887,82888],{"class":50}," str1 ",[37,82890,55],{"class":54},[37,82892,82893],{"class":185}," \"Saturday night plans\"\n",[37,82895,82896,82898,82900,82903,82906,82908,82911],{"class":39,"line":47},[37,82897,77867],{"class":50},[37,82899,58583],{"class":2320},[37,82901,82902],{"class":50},"(str1.",[37,82904,82905],{"class":2320},"startsWith",[37,82907,165],{"class":50},[37,82909,82910],{"class":185},"\"Sat\"",[37,82912,175],{"class":50},[37,82914,82915],{"class":39,"line":104},[37,82916,82917],{"class":43},"\u002F\u002F Expected output: true\n",[37,82919,82920,82922,82924,82926,82928,82930,82932,82934,82936],{"class":39,"line":113},[37,82921,77867],{"class":50},[37,82923,58583],{"class":2320},[37,82925,82902],{"class":50},[37,82927,82905],{"class":2320},[37,82929,165],{"class":50},[37,82931,82910],{"class":185},[37,82933,12776],{"class":50},[37,82935,62],{"class":61},[37,82937,175],{"class":50},[37,82939,82940],{"class":39,"line":189},[37,82941,82942],{"class":43},"\u002F\u002F Expected output: false\n",[27,82944,82946],{"className":50969,"code":82945,"language":50971,"meta":32,"style":32},"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",[34,82947,82948,82953,82958,82962,82967,82972],{"__ignoreMap":32},[37,82949,82950],{"class":39,"line":40},[37,82951,82952],{"class":50},"startsWith(searchString)\n",[37,82954,82955],{"class":39,"line":47},[37,82956,82957],{"class":50},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[37,82959,82960],{"class":39,"line":104},[37,82961,2757],{"emptyLinePlaceholder":454},[37,82963,82964],{"class":39,"line":113},[37,82965,82966],{"class":50},"const str3 = 'pink老师上课中'\n",[37,82968,82969],{"class":39,"line":189},[37,82970,82971],{"class":50},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[37,82973,82974],{"class":39,"line":195},[37,82975,82976],{"class":50},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23251,82978,82980],{"id":82979},"_410534-includes","4.10.5.3.4 includes",[14,82982,82983],{},"includes(searchString) includes(searchString, position)",[481,82985,82986],{},[484,82987,82988],{},"searchString:",[14,82990,82991,82992,82994,82995,83000,83001,83006,83007,21841,83010,83013,83014,83017],{},"一个要在 ",[34,82993,1678],{}," 中查找的字符串。",[51,82996,82999],{"href":82997,"rel":82998},"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",[24206],"不能是正则表达式","。所有非正则表达式的值都会被",[51,83002,83005],{"href":83003,"rel":83004},"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",[24206],"强制转换为字符串","，因此如果该参数被省略或传入 ",[34,83008,83009],{},"undefined",[34,83011,83012],{},"includes()"," 方法会在字符串中搜索 ",[34,83015,83016],{},"\"undefined\"","，这通常不是你想要的",[481,83019,83020],{"start":47},[484,83021,83022,1368],{},[34,83023,83024],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,83026,83027,83028,83031,83032],{},"在字符串中开始搜索 ",[34,83029,83030],{},"searchString"," 的位置。默认值为 ",[34,83033,135],{},[481,83035,83036],{"start":104},[484,83037,83038],{},"返回值：",[14,83040,83041,83042,83044,83045,83049,83050],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[34,83043,83030],{}," 为空字符串的情况），则返回 ",[673,83046,83047],{},[34,83048,1738],{}," ，否则返回 ",[673,83051,83052],{},[34,83053,66356],{},[481,83055,83056],{"start":113},[484,83057,83058],{},"异常：",[14,83060,82557,83061,14136,83063,83067],{},[34,83062,83030],{},[51,83064,83066],{"href":82997,"rel":83065},[24206],"是一个正则表达式","，则会抛出",[14,83069,83070],{},"只要是有就是true，不需要非得以谁开头结尾",[27,83072,83074],{"className":77830,"code":83073,"language":77832,"meta":32,"style":32},"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",[34,83075,83076,83087,83110,83129,83149,83171,83190],{"__ignoreMap":32},[37,83077,83078,83080,83082,83084],{"class":39,"line":40},[37,83079,7140],{"class":54},[37,83081,80110],{"class":50},[37,83083,55],{"class":54},[37,83085,83086],{"class":185}," \"To be, or not to be, that is the question.\"\n",[37,83088,83089,83091,83093,83096,83099,83101,83104,83107],{"class":39,"line":47},[37,83090,77867],{"class":50},[37,83092,58583],{"class":2320},[37,83094,83095],{"class":50},"(str.",[37,83097,83098],{"class":2320},"includes",[37,83100,165],{"class":50},[37,83102,83103],{"class":185},"\"To be\"",[37,83105,83106],{"class":50},"))",[37,83108,83109],{"class":43},"  \u002F\u002F true\n",[37,83111,83112,83114,83116,83118,83120,83122,83125,83127],{"class":39,"line":104},[37,83113,77867],{"class":50},[37,83115,58583],{"class":2320},[37,83117,83095],{"class":50},[37,83119,83098],{"class":2320},[37,83121,165],{"class":50},[37,83123,83124],{"class":185},"\"question\"",[37,83126,83106],{"class":50},[37,83128,83109],{"class":43},[37,83130,83131,83133,83135,83137,83139,83141,83144,83146],{"class":39,"line":113},[37,83132,77867],{"class":50},[37,83134,58583],{"class":2320},[37,83136,83095],{"class":50},[37,83138,83098],{"class":2320},[37,83140,165],{"class":50},[37,83142,83143],{"class":185},"\"nonexistent\"",[37,83145,83106],{"class":50},[37,83147,83148],{"class":43},"  \u002F\u002F false\n",[37,83150,83151,83153,83155,83157,83159,83161,83163,83165,83167,83169],{"class":39,"line":189},[37,83152,77867],{"class":50},[37,83154,58583],{"class":2320},[37,83156,83095],{"class":50},[37,83158,83098],{"class":2320},[37,83160,165],{"class":50},[37,83162,83103],{"class":185},[37,83164,12776],{"class":50},[37,83166,332],{"class":61},[37,83168,83106],{"class":50},[37,83170,83148],{"class":43},[37,83172,83173,83175,83177,83179,83181,83183,83186,83188],{"class":39,"line":195},[37,83174,77867],{"class":50},[37,83176,58583],{"class":2320},[37,83178,83095],{"class":50},[37,83180,83098],{"class":2320},[37,83182,165],{"class":50},[37,83184,83185],{"class":185},"\"TO BE\"",[37,83187,83106],{"class":50},[37,83189,83148],{"class":43},[37,83191,83192,83194,83196,83198,83200,83202,83204,83206],{"class":39,"line":201},[37,83193,77867],{"class":50},[37,83195,58583],{"class":2320},[37,83197,83095],{"class":50},[37,83199,83098],{"class":2320},[37,83201,165],{"class":50},[37,83203,8000],{"class":185},[37,83205,83106],{"class":50},[37,83207,83109],{"class":43},[23251,83209,83211],{"id":83210},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[27,83213,83215],{"className":53403,"code":83214,"language":53405,"meta":32,"style":32},"\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",[34,83216,83217,83225,83233,83238,83243,83248,83253,83258,83266],{"__ignoreMap":32},[37,83218,83219,83221,83223],{"class":39,"line":40},[37,83220,1418],{"class":50},[37,83222,52136],{"class":51636},[37,83224,51643],{"class":50},[37,83226,83227,83229,83231],{"class":39,"line":47},[37,83228,52480],{"class":50},[37,83230,52149],{"class":51636},[37,83232,51643],{"class":50},[37,83234,83235],{"class":39,"line":104},[37,83236,83237],{"class":50},"    const num = 10\n",[37,83239,83240],{"class":39,"line":113},[37,83241,83242],{"class":50},"    \u002F\u002F 强制转换\n",[37,83244,83245],{"class":39,"line":189},[37,83246,83247],{"class":50},"    console.log(String(num))\n",[37,83249,83250],{"class":39,"line":195},[37,83251,83252],{"class":50},"    \u002F\u002F toString()方法转换\n",[37,83254,83255],{"class":39,"line":201},[37,83256,83257],{"class":50},"    console.log(num.toString())\n",[37,83259,83260,83262,83264],{"class":39,"line":207},[37,83261,52753],{"class":50},[37,83263,52149],{"class":51636},[37,83265,51643],{"class":50},[37,83267,83268,83270,83272],{"class":39,"line":213},[37,83269,52121],{"class":50},[37,83271,52136],{"class":51636},[37,83273,51643],{"class":50},[23251,83275,83277],{"id":83276},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83279,83280],{},[1838,83281],{"alt":32,"src":83282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[27,83284,83286],{"className":50969,"code":83285,"language":50971,"meta":32,"style":32},"\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",[34,83287,83288,83298,83312,83316,83324,83338,83358,83370,83378,83382,83390,83402,83410,83422,83427,83432,83437,83484,83500,83508,83516,83520],{"__ignoreMap":32},[37,83289,83290,83292,83294,83296],{"class":39,"line":40},[37,83291,51633],{"class":50},[37,83293,51637],{"class":51636},[37,83295,51640],{"class":2320},[37,83297,51643],{"class":50},[37,83299,83300,83302,83304,83306,83308,83310],{"class":39,"line":47},[37,83301,1418],{"class":50},[37,83303,50971],{"class":51636},[37,83305,51652],{"class":2320},[37,83307,55],{"class":50},[37,83309,51657],{"class":185},[37,83311,51643],{"class":50},[37,83313,83314],{"class":39,"line":104},[37,83315,2757],{"emptyLinePlaceholder":454},[37,83317,83318,83320,83322],{"class":39,"line":113},[37,83319,1418],{"class":50},[37,83321,51670],{"class":51636},[37,83323,51643],{"class":50},[37,83325,83326,83328,83330,83332,83334,83336],{"class":39,"line":189},[37,83327,52480],{"class":50},[37,83329,51680],{"class":51636},[37,83331,51683],{"class":2320},[37,83333,55],{"class":50},[37,83335,51688],{"class":185},[37,83337,51643],{"class":50},[37,83339,83340,83342,83344,83346,83348,83350,83352,83354,83356],{"class":39,"line":195},[37,83341,52480],{"class":50},[37,83343,51680],{"class":51636},[37,83345,15261],{"class":2320},[37,83347,55],{"class":50},[37,83349,51727],{"class":185},[37,83351,51707],{"class":2320},[37,83353,55],{"class":50},[37,83355,51734],{"class":185},[37,83357,51643],{"class":50},[37,83359,83360,83362,83364,83366,83368],{"class":39,"line":201},[37,83361,52480],{"class":50},[37,83363,51743],{"class":51636},[37,83365,51746],{"class":50},[37,83367,51743],{"class":51636},[37,83369,51643],{"class":50},[37,83371,83372,83374,83376],{"class":39,"line":207},[37,83373,52121],{"class":50},[37,83375,51670],{"class":51636},[37,83377,51643],{"class":50},[37,83379,83380],{"class":39,"line":213},[37,83381,2757],{"emptyLinePlaceholder":454},[37,83383,83384,83386,83388],{"class":39,"line":218},[37,83385,1418],{"class":50},[37,83387,52136],{"class":51636},[37,83389,51643],{"class":50},[37,83391,83392,83394,83396,83398,83400],{"class":39,"line":227},[37,83393,52480],{"class":50},[37,83395,51947],{"class":51636},[37,83397,55650],{"class":50},[37,83399,51947],{"class":51636},[37,83401,51643],{"class":50},[37,83403,83404,83406,83408],{"class":39,"line":232},[37,83405,52480],{"class":50},[37,83407,52149],{"class":51636},[37,83409,51643],{"class":50},[37,83411,83412,83414,83417,83419],{"class":39,"line":238},[37,83413,11562],{"class":54},[37,83415,83416],{"class":61}," gift",[37,83418,13905],{"class":54},[37,83420,83421],{"class":185}," '50g的茶叶，清洗球'\n",[37,83423,83424],{"class":39,"line":244},[37,83425,83426],{"class":43},"    \u002F\u002F 1.把字符串拆分为数组\n",[37,83428,83429],{"class":39,"line":250},[37,83430,83431],{"class":43},"    \u002F\u002F console.log(gift.split(','))\n",[37,83433,83434],{"class":39,"line":256},[37,83435,83436],{"class":43},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[37,83438,83439,83441,83443,83445,83448,83451,83453,83456,83458,83460,83462,83464,83466,83469,83471,83474,83476,83478,83480,83482],{"class":39,"line":261},[37,83440,11562],{"class":54},[37,83442,74255],{"class":61},[37,83444,13905],{"class":54},[37,83446,83447],{"class":50}," gift.",[37,83449,83450],{"class":2320},"split",[37,83452,165],{"class":50},[37,83454,83455],{"class":185},"'，'",[37,83457,31165],{"class":50},[37,83459,74380],{"class":2320},[37,83461,165],{"class":50},[37,83463,80130],{"class":159},[37,83465,80133],{"class":54},[37,83467,83468],{"class":185}," `\u003Cspan>【赠品】${",[37,83470,80130],{"class":50},[37,83472,83473],{"class":185},"}\u003C\u002Fspan>\u003Cbr>`",[37,83475,31165],{"class":50},[37,83477,74558],{"class":2320},[37,83479,165],{"class":50},[37,83481,74563],{"class":185},[37,83483,280],{"class":50},[37,83485,83486,83488,83490,83492,83494,83496,83498],{"class":39,"line":267},[37,83487,52743],{"class":50},[37,83489,54735],{"class":2320},[37,83491,165],{"class":50},[37,83493,82266],{"class":185},[37,83495,74584],{"class":50},[37,83497,55],{"class":54},[37,83499,74321],{"class":50},[37,83501,83502,83504,83506],{"class":39,"line":283},[37,83503,52753],{"class":50},[37,83505,52149],{"class":51636},[37,83507,51643],{"class":50},[37,83509,83510,83512,83514],{"class":39,"line":288},[37,83511,52121],{"class":50},[37,83513,52136],{"class":51636},[37,83515,51643],{"class":50},[37,83517,83518],{"class":39,"line":294},[37,83519,2757],{"emptyLinePlaceholder":454},[37,83521,83522,83524,83526],{"class":39,"line":300},[37,83523,52121],{"class":50},[37,83525,50971],{"class":51636},[37,83527,51643],{"class":50},[22339,83529,83531],{"id":83530},"_41054-number","4.10.5.4 Number",[14,83533,83534],{},[1838,83535],{"alt":32,"src":83536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83538,83539],{},"整数也可以进行toFixed来保留小数",[14,83541,83542],{},"比如：",[14,83544,83545],{},"const price=10",[14,83547,83548],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22339,83550,83552],{"id":83551},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83554,83555],{},[1838,83556],{"alt":32,"src":83557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[27,83559,83561],{"className":50969,"code":83560,"language":50971,"meta":32,"style":32},"\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",[34,83562,83563,83573,83587,83591,83599,83613,83633,83645,83653,83659,83669,83679,83689,83693,83697,83703,83715,83729,83733,83737,83743,83755,83771,83781,83797,83801,83805,83811,83821,83831,83835,83839,83847,83859,83871,83883,83887,83891,83899,83911,83915,83919,83930,83940,83952,83964,83974,83978,83982,83990,83999,84011,84021,84031,84035,84039,84047,84056,84063,84073,84085,84089,84093,84102,84112,84123,84135,84147,84151,84155,84164,84174,84185,84189,84193,84199,84211,84223,84233,84243,84261,84273,84277,84281,84290,84302,84312,84322,84334,84338,84346,84354,84358,84366,84380,84388,84402,84430,84438,84446,84456,84460,84468,84476,84485,84493,84502,84512,84516,84520,84528,84536,84545,84553,84561,84574,84578,84582,84590,84598,84607,84615,84623,84638,84642,84646,84654,84662,84671,84679,84687,84701,84709,84713,84717,84722,84748,84753,84790,84795,84818,84823,84877,84882,84918,84922,84928,84933,84942,84956,84965,84984,84993,85003,85008,85013,85026,85031,85085,85111,85119,85127,85131],{"__ignoreMap":32},[37,83564,83565,83567,83569,83571],{"class":39,"line":40},[37,83566,51633],{"class":50},[37,83568,51637],{"class":51636},[37,83570,51640],{"class":2320},[37,83572,51643],{"class":50},[37,83574,83575,83577,83579,83581,83583,83585],{"class":39,"line":47},[37,83576,1418],{"class":50},[37,83578,50971],{"class":51636},[37,83580,51652],{"class":2320},[37,83582,55],{"class":50},[37,83584,51657],{"class":185},[37,83586,51643],{"class":50},[37,83588,83589],{"class":39,"line":104},[37,83590,2757],{"emptyLinePlaceholder":454},[37,83592,83593,83595,83597],{"class":39,"line":113},[37,83594,1418],{"class":50},[37,83596,51670],{"class":51636},[37,83598,51643],{"class":50},[37,83600,83601,83603,83605,83607,83609,83611],{"class":39,"line":189},[37,83602,52480],{"class":50},[37,83604,51680],{"class":51636},[37,83606,51683],{"class":2320},[37,83608,55],{"class":50},[37,83610,51688],{"class":185},[37,83612,51643],{"class":50},[37,83614,83615,83617,83619,83621,83623,83625,83627,83629,83631],{"class":39,"line":195},[37,83616,52480],{"class":50},[37,83618,51680],{"class":51636},[37,83620,15261],{"class":2320},[37,83622,55],{"class":50},[37,83624,51727],{"class":185},[37,83626,51707],{"class":2320},[37,83628,55],{"class":50},[37,83630,51734],{"class":185},[37,83632,51643],{"class":50},[37,83634,83635,83637,83639,83641,83643],{"class":39,"line":201},[37,83636,52480],{"class":50},[37,83638,51743],{"class":51636},[37,83640,51746],{"class":50},[37,83642,51743],{"class":51636},[37,83644,51643],{"class":50},[37,83646,83647,83649,83651],{"class":39,"line":207},[37,83648,52480],{"class":50},[37,83650,446],{"class":51636},[37,83652,51643],{"class":50},[37,83654,83655,83657],{"class":39,"line":213},[37,83656,6751],{"class":51636},[37,83658,15913],{"class":50},[37,83660,83661,83663,83665,83667],{"class":39,"line":218},[37,83662,55031],{"class":61},[37,83664,51773],{"class":50},[37,83666,135],{"class":61},[37,83668,1669],{"class":50},[37,83670,83671,83673,83675,83677],{"class":39,"line":227},[37,83672,55042],{"class":61},[37,83674,51773],{"class":50},[37,83676,135],{"class":61},[37,83678,1669],{"class":50},[37,83680,83681,83683,83685,83687],{"class":39,"line":232},[37,83682,72932],{"class":61},[37,83684,51773],{"class":50},[37,83686,60841],{"class":61},[37,83688,1669],{"class":50},[37,83690,83691],{"class":39,"line":238},[37,83692,2544],{"class":50},[37,83694,83695],{"class":39,"line":244},[37,83696,2757],{"emptyLinePlaceholder":454},[37,83698,83699,83701],{"class":39,"line":250},[37,83700,62459],{"class":2320},[37,83702,15913],{"class":50},[37,83704,83705,83707,83709,83711,83713],{"class":39,"line":256},[37,83706,55107],{"class":61},[37,83708,51773],{"class":50},[37,83710,78909],{"class":61},[37,83712,51828],{"class":54},[37,83714,1669],{"class":50},[37,83716,83717,83719,83721,83723,83725,83727],{"class":39,"line":261},[37,83718,55042],{"class":61},[37,83720,51773],{"class":50},[37,83722,154],{"class":61},[37,83724,51828],{"class":54},[37,83726,51892],{"class":61},[37,83728,1669],{"class":50},[37,83730,83731],{"class":39,"line":267},[37,83732,2544],{"class":50},[37,83734,83735],{"class":39,"line":283},[37,83736,2757],{"emptyLinePlaceholder":454},[37,83738,83739,83741],{"class":39,"line":288},[37,83740,78960],{"class":2320},[37,83742,15913],{"class":50},[37,83744,83745,83747,83749,83751,83753],{"class":39,"line":294},[37,83746,55031],{"class":61},[37,83748,51773],{"class":50},[37,83750,1085],{"class":61},[37,83752,51828],{"class":54},[37,83754,1669],{"class":50},[37,83756,83757,83759,83761,83763,83765,83767,83769],{"class":39,"line":300},[37,83758,62196],{"class":61},[37,83760,51773],{"class":50},[37,83762,28463],{"class":61},[37,83764,79015],{"class":61},[37,83766,79018],{"class":61},[37,83768,1205],{"class":54},[37,83770,1669],{"class":50},[37,83772,83773,83775,83777,83779],{"class":39,"line":306},[37,83774,55345],{"class":61},[37,83776,51773],{"class":50},[37,83778,51813],{"class":61},[37,83780,1669],{"class":50},[37,83782,83783,83785,83787,83789,83791,83793,83795],{"class":39,"line":312},[37,83784,62313],{"class":61},[37,83786,51773],{"class":50},[37,83788,332],{"class":61},[37,83790,51828],{"class":54},[37,83792,51857],{"class":61},[37,83794,62580],{"class":61},[37,83796,1669],{"class":50},[37,83798,83799],{"class":39,"line":317},[37,83800,2544],{"class":50},[37,83802,83803],{"class":39,"line":323},[37,83804,2757],{"emptyLinePlaceholder":454},[37,83806,83807,83809],{"class":39,"line":337},[37,83808,79078],{"class":2320},[37,83810,15913],{"class":50},[37,83812,83813,83815,83817,83819],{"class":39,"line":342},[37,83814,62361],{"class":61},[37,83816,51773],{"class":50},[37,83818,62366],{"class":61},[37,83820,1669],{"class":50},[37,83822,83823,83825,83827,83829],{"class":39,"line":347},[37,83824,55220],{"class":61},[37,83826,51773],{"class":50},[37,83828,62154],{"class":61},[37,83830,1669],{"class":50},[37,83832,83833],{"class":39,"line":352},[37,83834,2544],{"class":50},[37,83836,83837],{"class":39,"line":357},[37,83838,2757],{"emptyLinePlaceholder":454},[37,83840,83841,83843,83845],{"class":39,"line":362},[37,83842,78960],{"class":2320},[37,83844,55951],{"class":51636},[37,83846,15913],{"class":50},[37,83848,83849,83851,83853,83855,83857],{"class":39,"line":367},[37,83850,55107],{"class":61},[37,83852,51773],{"class":50},[37,83854,1122],{"class":61},[37,83856,51828],{"class":54},[37,83858,1669],{"class":50},[37,83860,83861,83863,83865,83867,83869],{"class":39,"line":373},[37,83862,55121],{"class":61},[37,83864,51773],{"class":50},[37,83866,1122],{"class":61},[37,83868,51828],{"class":54},[37,83870,1669],{"class":50},[37,83872,83873,83875,83877,83879,83881],{"class":39,"line":392},[37,83874,62086],{"class":61},[37,83876,51773],{"class":50},[37,83878,836],{"class":61},[37,83880,51828],{"class":54},[37,83882,1669],{"class":50},[37,83884,83885],{"class":39,"line":398},[37,83886,2544],{"class":50},[37,83888,83889],{"class":39,"line":409},[37,83890,2757],{"emptyLinePlaceholder":454},[37,83892,83893,83895,83897],{"class":39,"line":415},[37,83894,78960],{"class":2320},[37,83896,62640],{"class":2320},[37,83898,15913],{"class":50},[37,83900,83901,83903,83905,83907,83909],{"class":39,"line":420},[37,83902,55107],{"class":61},[37,83904,51773],{"class":50},[37,83906,2087],{"class":61},[37,83908,51828],{"class":54},[37,83910,1669],{"class":50},[37,83912,83913],{"class":39,"line":425},[37,83914,2544],{"class":50},[37,83916,83917],{"class":39,"line":431},[37,83918,2757],{"emptyLinePlaceholder":454},[37,83920,83921,83923,83925,83928],{"class":39,"line":436},[37,83922,78960],{"class":2320},[37,83924,62640],{"class":2320},[37,83926,83927],{"class":2320}," .tag",[37,83929,15913],{"class":50},[37,83931,83932,83934,83936,83938],{"class":39,"line":442},[37,83933,55345],{"class":61},[37,83935,51773],{"class":50},[37,83937,61205],{"class":61},[37,83939,1669],{"class":50},[37,83941,83942,83944,83946,83948,83950],{"class":39,"line":8374},[37,83943,55031],{"class":61},[37,83945,51773],{"class":50},[37,83947,602],{"class":61},[37,83949,51828],{"class":54},[37,83951,1669],{"class":50},[37,83953,83954,83956,83958,83960,83962],{"class":39,"line":8386},[37,83955,55258],{"class":61},[37,83957,51773],{"class":50},[37,83959,68],{"class":61},[37,83961,51828],{"class":54},[37,83963,1669],{"class":50},[37,83965,83966,83968,83970,83972],{"class":39,"line":8398},[37,83967,57752],{"class":61},[37,83969,51773],{"class":50},[37,83971,62406],{"class":61},[37,83973,1669],{"class":50},[37,83975,83976],{"class":39,"line":10057},[37,83977,2544],{"class":50},[37,83979,83980],{"class":39,"line":10082},[37,83981,2757],{"emptyLinePlaceholder":454},[37,83983,83984,83986,83988],{"class":39,"line":10105},[37,83985,78960],{"class":2320},[37,83987,79252],{"class":2320},[37,83989,31805],{"class":50},[37,83991,83992,83994,83997],{"class":39,"line":10129},[37,83993,78960],{"class":2320},[37,83995,83996],{"class":2320}," .sub-total",[37,83998,15913],{"class":50},[37,84000,84001,84003,84005,84007,84009],{"class":39,"line":10134},[37,84002,55258],{"class":61},[37,84004,51773],{"class":50},[37,84006,1160],{"class":61},[37,84008,51828],{"class":54},[37,84010,1669],{"class":50},[37,84012,84013,84015,84017,84019],{"class":39,"line":10139},[37,84014,57752],{"class":61},[37,84016,51773],{"class":50},[37,84018,79275],{"class":61},[37,84020,1669],{"class":50},[37,84022,84023,84025,84027,84029],{"class":39,"line":10144},[37,84024,62173],{"class":61},[37,84026,51773],{"class":50},[37,84028,332],{"class":61},[37,84030,1669],{"class":50},[37,84032,84033],{"class":39,"line":10153},[37,84034,2544],{"class":50},[37,84036,84037],{"class":39,"line":10158},[37,84038,2757],{"emptyLinePlaceholder":454},[37,84040,84041,84043,84045],{"class":39,"line":10164},[37,84042,78960],{"class":2320},[37,84044,79292],{"class":2320},[37,84046,31805],{"class":50},[37,84048,84049,84051,84054],{"class":39,"line":10185},[37,84050,78960],{"class":2320},[37,84052,84053],{"class":2320}," .sub-total::before",[37,84055,31805],{"class":50},[37,84057,84058,84061],{"class":39,"line":10191},[37,84059,84060],{"class":2320},"    .amount::before",[37,84062,15913],{"class":50},[37,84064,84065,84067,84069,84071],{"class":39,"line":10205},[37,84066,79299],{"class":61},[37,84068,51773],{"class":50},[37,84070,79304],{"class":185},[37,84072,1669],{"class":50},[37,84074,84075,84077,84079,84081,84083],{"class":39,"line":10211},[37,84076,55258],{"class":61},[37,84078,51773],{"class":50},[37,84080,68],{"class":61},[37,84082,51828],{"class":54},[37,84084,1669],{"class":50},[37,84086,84087],{"class":39,"line":10238},[37,84088,2544],{"class":50},[37,84090,84091],{"class":39,"line":10247},[37,84092,2757],{"emptyLinePlaceholder":454},[37,84094,84095,84097,84100],{"class":39,"line":10253},[37,84096,78960],{"class":2320},[37,84098,84099],{"class":2320}," .spec",[37,84101,15913],{"class":50},[37,84103,84104,84106,84108,84110],{"class":39,"line":10261},[37,84105,62173],{"class":61},[37,84107,51773],{"class":50},[37,84109,602],{"class":61},[37,84111,1669],{"class":50},[37,84113,84114,84116,84118,84121],{"class":39,"line":10266},[37,84115,57752],{"class":61},[37,84117,51773],{"class":50},[37,84119,84120],{"class":61},"#888",[37,84122,1669],{"class":50},[37,84124,84125,84127,84129,84131,84133],{"class":39,"line":16945},[37,84126,55258],{"class":61},[37,84128,51773],{"class":50},[37,84130,1059],{"class":61},[37,84132,51828],{"class":54},[37,84134,1669],{"class":50},[37,84136,84137,84139,84141,84143,84145],{"class":39,"line":16951},[37,84138,62336],{"class":61},[37,84140,51773],{"class":50},[37,84142,1210],{"class":61},[37,84144,51828],{"class":54},[37,84146,1669],{"class":50},[37,84148,84149],{"class":39,"line":16974},[37,84150,2544],{"class":50},[37,84152,84153],{"class":39,"line":16980},[37,84154,2757],{"emptyLinePlaceholder":454},[37,84156,84157,84159,84162],{"class":39,"line":17003},[37,84158,78960],{"class":2320},[37,84160,84161],{"class":2320}," .count",[37,84163,15913],{"class":50},[37,84165,84166,84168,84170,84172],{"class":39,"line":17017},[37,84167,62173],{"class":61},[37,84169,51773],{"class":50},[37,84171,332],{"class":61},[37,84173,1669],{"class":50},[37,84175,84176,84178,84180,84183],{"class":39,"line":17037},[37,84177,57752],{"class":61},[37,84179,51773],{"class":50},[37,84181,84182],{"class":61},"#aaa",[37,84184,1669],{"class":50},[37,84186,84187],{"class":39,"line":17043},[37,84188,2544],{"class":50},[37,84190,84191],{"class":39,"line":17054},[37,84192,2757],{"emptyLinePlaceholder":454},[37,84194,84195,84197],{"class":39,"line":17077},[37,84196,72811],{"class":2320},[37,84198,15913],{"class":50},[37,84200,84201,84203,84205,84207,84209],{"class":39,"line":17099},[37,84202,55107],{"class":61},[37,84204,51773],{"class":50},[37,84206,78909],{"class":61},[37,84208,51828],{"class":54},[37,84210,1669],{"class":50},[37,84212,84213,84215,84217,84219,84221],{"class":39,"line":17104},[37,84214,55042],{"class":61},[37,84216,51773],{"class":50},[37,84218,135],{"class":61},[37,84220,51892],{"class":61},[37,84222,1669],{"class":50},[37,84224,84225,84227,84229,84231],{"class":39,"line":17110},[37,84226,55345],{"class":61},[37,84228,51773],{"class":50},[37,84230,51813],{"class":61},[37,84232,1669],{"class":50},[37,84234,84235,84237,84239,84241],{"class":39,"line":17124},[37,84236,55356],{"class":61},[37,84238,51773],{"class":50},[37,84240,51916],{"class":61},[37,84242,1669],{"class":50},[37,84244,84245,84248,84250,84252,84254,84256,84259],{"class":39,"line":17137},[37,84246,84247],{"class":61},"      border-top",[37,84249,51773],{"class":50},[37,84251,332],{"class":61},[37,84253,51828],{"class":54},[37,84255,51857],{"class":61},[37,84257,84258],{"class":61}," #4e4e4e",[37,84260,1669],{"class":50},[37,84262,84263,84265,84267,84269,84271],{"class":39,"line":17142},[37,84264,55031],{"class":61},[37,84266,51773],{"class":50},[37,84268,1210],{"class":61},[37,84270,51828],{"class":54},[37,84272,1669],{"class":50},[37,84274,84275],{"class":39,"line":17156},[37,84276,2544],{"class":50},[37,84278,84279],{"class":39,"line":17161},[37,84280,2757],{"emptyLinePlaceholder":454},[37,84282,84283,84285,84288],{"class":39,"line":17167},[37,84284,72811],{"class":2320},[37,84286,84287],{"class":2320}," .amount",[37,84289,15913],{"class":50},[37,84291,84292,84294,84296,84298,84300],{"class":39,"line":17172},[37,84293,55258],{"class":61},[37,84295,51773],{"class":50},[37,84297,1160],{"class":61},[37,84299,51828],{"class":54},[37,84301,1669],{"class":50},[37,84303,84304,84306,84308,84310],{"class":39,"line":17186},[37,84305,57752],{"class":61},[37,84307,51773],{"class":50},[37,84309,79275],{"class":61},[37,84311,1669],{"class":50},[37,84313,84314,84316,84318,84320],{"class":39,"line":17191},[37,84315,62670],{"class":61},[37,84317,51773],{"class":50},[37,84319,51825],{"class":61},[37,84321,1669],{"class":50},[37,84323,84324,84326,84328,84330,84332],{"class":39,"line":17196},[37,84325,62086],{"class":61},[37,84327,51773],{"class":50},[37,84329,1166],{"class":61},[37,84331,51828],{"class":54},[37,84333,1669],{"class":50},[37,84335,84336],{"class":39,"line":17210},[37,84337,2544],{"class":50},[37,84339,84340,84342,84344],{"class":39,"line":17222},[37,84341,52753],{"class":50},[37,84343,446],{"class":51636},[37,84345,51643],{"class":50},[37,84347,84348,84350,84352],{"class":39,"line":17227},[37,84349,52121],{"class":50},[37,84351,51670],{"class":51636},[37,84353,51643],{"class":50},[37,84355,84356],{"class":39,"line":17240},[37,84357,2757],{"emptyLinePlaceholder":454},[37,84359,84360,84362,84364],{"class":39,"line":17245},[37,84361,1418],{"class":50},[37,84363,52136],{"class":51636},[37,84365,51643],{"class":50},[37,84367,84368,84370,84372,84374,84376,84378],{"class":39,"line":17250},[37,84369,52480],{"class":50},[37,84371,51947],{"class":51636},[37,84373,53822],{"class":2320},[37,84375,55],{"class":50},[37,84377,62944],{"class":185},[37,84379,51643],{"class":50},[37,84381,84382,84384,84386],{"class":39,"line":17255},[37,84383,52753],{"class":50},[37,84385,51947],{"class":51636},[37,84387,51643],{"class":50},[37,84389,84390,84392,84394,84396,84398,84400],{"class":39,"line":17268},[37,84391,52480],{"class":50},[37,84393,51947],{"class":51636},[37,84395,53822],{"class":2320},[37,84397,55],{"class":50},[37,84399,62916],{"class":185},[37,84401,51643],{"class":50},[37,84403,84404,84406,84408,84411,84413,84415,84417,84420,84422,84424,84426,84428],{"class":39,"line":17273},[37,84405,51677],{"class":50},[37,84407,51947],{"class":51636},[37,84409,84410],{"class":50},">合计：\u003C",[37,84412,37],{"class":51636},[37,84414,53822],{"class":2320},[37,84416,55],{"class":50},[37,84418,84419],{"class":185},"\"amount\"",[37,84421,55650],{"class":50},[37,84423,37],{"class":51636},[37,84425,55650],{"class":50},[37,84427,51947],{"class":51636},[37,84429,51643],{"class":50},[37,84431,84432,84434,84436],{"class":39,"line":32971},[37,84433,52753],{"class":50},[37,84435,51947],{"class":51636},[37,84437,51643],{"class":50},[37,84439,84440,84442,84444],{"class":39,"line":32977},[37,84441,52480],{"class":50},[37,84443,52149],{"class":51636},[37,84445,51643],{"class":50},[37,84447,84448,84450,84452,84454],{"class":39,"line":32983},[37,84449,11562],{"class":54},[37,84451,79712],{"class":61},[37,84453,13905],{"class":54},[37,84455,55783],{"class":50},[37,84457,84458],{"class":39,"line":32989},[37,84459,79721],{"class":50},[37,84461,84462,84464,84466],{"class":39,"line":32995},[37,84463,79726],{"class":50},[37,84465,79729],{"class":185},[37,84467,31805],{"class":50},[37,84469,84470,84472,84474],{"class":39,"line":33006},[37,84471,79736],{"class":50},[37,84473,79739],{"class":185},[37,84475,31805],{"class":50},[37,84477,84478,84480,84483],{"class":39,"line":33012},[37,84479,79746],{"class":50},[37,84481,84482],{"class":61},"289.9",[37,84484,31805],{"class":50},[37,84486,84487,84489,84491],{"class":39,"line":33032},[37,84488,79756],{"class":50},[37,84490,79759],{"class":185},[37,84492,31805],{"class":50},[37,84494,84495,84498,84500],{"class":39,"line":33038},[37,84496,84497],{"class":50},"        count: ",[37,84499,602],{"class":61},[37,84501,31805],{"class":50},[37,84503,84504,84507,84510],{"class":39,"line":33049},[37,84505,84506],{"class":50},"        spec: { color: ",[37,84508,84509],{"class":185},"'白色'",[37,84511,55940],{"class":50},[37,84513,84514],{"class":39,"line":33055},[37,84515,78227],{"class":50},[37,84517,84518],{"class":39,"line":33061},[37,84519,79721],{"class":50},[37,84521,84522,84524,84526],{"class":39,"line":33067},[37,84523,79726],{"class":50},[37,84525,79820],{"class":185},[37,84527,31805],{"class":50},[37,84529,84530,84532,84534],{"class":39,"line":33073},[37,84531,79736],{"class":50},[37,84533,79829],{"class":185},[37,84535,31805],{"class":50},[37,84537,84538,84540,84543],{"class":39,"line":33079},[37,84539,79746],{"class":50},[37,84541,84542],{"class":61},"109.8",[37,84544,31805],{"class":50},[37,84546,84547,84549,84551],{"class":39,"line":33085},[37,84548,79756],{"class":50},[37,84550,79847],{"class":185},[37,84552,31805],{"class":50},[37,84554,84555,84557,84559],{"class":39,"line":33091},[37,84556,84497],{"class":50},[37,84558,62],{"class":61},[37,84560,31805],{"class":50},[37,84562,84563,84566,84568,84570,84572],{"class":39,"line":33111},[37,84564,84565],{"class":50},"        spec: { size: ",[37,84567,82238],{"class":185},[37,84569,55800],{"class":50},[37,84571,82243],{"class":185},[37,84573,55940],{"class":50},[37,84575,84576],{"class":39,"line":33117},[37,84577,78227],{"class":50},[37,84579,84580],{"class":39,"line":33133},[37,84581,79721],{"class":50},[37,84583,84584,84586,84588],{"class":39,"line":33139},[37,84585,79726],{"class":50},[37,84587,79864],{"class":185},[37,84589,31805],{"class":50},[37,84591,84592,84594,84596],{"class":39,"line":33153},[37,84593,79736],{"class":50},[37,84595,79873],{"class":185},[37,84597,31805],{"class":50},[37,84599,84600,84602,84605],{"class":39,"line":33159},[37,84601,79746],{"class":50},[37,84603,84604],{"class":61},"488",[37,84606,31805],{"class":50},[37,84608,84609,84611,84613],{"class":39,"line":33174},[37,84610,79756],{"class":50},[37,84612,79891],{"class":185},[37,84614,31805],{"class":50},[37,84616,84617,84619,84621],{"class":39,"line":33180},[37,84618,84497],{"class":50},[37,84620,332],{"class":61},[37,84622,31805],{"class":50},[37,84624,84625,84627,84630,84633,84636],{"class":39,"line":33189},[37,84626,84506],{"class":50},[37,84628,84629],{"class":185},"'青色'",[37,84631,84632],{"class":50},", sum: ",[37,84634,84635],{"class":185},"'一大四小'",[37,84637,55940],{"class":50},[37,84639,84640],{"class":39,"line":33195},[37,84641,78227],{"class":50},[37,84643,84644],{"class":39,"line":33204},[37,84645,79721],{"class":50},[37,84647,84648,84650,84652],{"class":39,"line":33210},[37,84649,79726],{"class":50},[37,84651,79908],{"class":185},[37,84653,31805],{"class":50},[37,84655,84656,84658,84660],{"class":39,"line":33216},[37,84657,79736],{"class":50},[37,84659,79917],{"class":185},[37,84661,31805],{"class":50},[37,84663,84664,84666,84669],{"class":39,"line":33225},[37,84665,79746],{"class":50},[37,84667,84668],{"class":61},"139",[37,84670,31805],{"class":50},[37,84672,84673,84675,84677],{"class":39,"line":33231},[37,84674,79756],{"class":50},[37,84676,79935],{"class":185},[37,84678,31805],{"class":50},[37,84680,84681,84683,84685],{"class":39,"line":33242},[37,84682,84497],{"class":50},[37,84684,332],{"class":61},[37,84686,31805],{"class":50},[37,84688,84689,84691,84694,84696,84699],{"class":39,"line":33248},[37,84690,84565],{"class":50},[37,84692,84693],{"class":185},"'小号'",[37,84695,55800],{"class":50},[37,84697,84698],{"class":185},"'紫色'",[37,84700,55806],{"class":50},[37,84702,84703,84706],{"class":39,"line":33267},[37,84704,84705],{"class":50},"        gift: ",[37,84707,84708],{"class":185},"'50g茶叶,清洗球'\n",[37,84710,84711],{"class":39,"line":33273},[37,84712,52734],{"class":50},[37,84714,84715],{"class":39,"line":33284},[37,84716,53445],{"class":50},[37,84718,84719],{"class":39,"line":33290},[37,84720,84721],{"class":43},"    \u002F\u002F  1.根据数据渲染页面\n",[37,84723,84724,84726,84728,84730,84732,84734,84736,84738,84740,84742,84744,84746],{"class":39,"line":33310},[37,84725,52743],{"class":50},[37,84727,54735],{"class":2320},[37,84729,165],{"class":50},[37,84731,80236],{"class":185},[37,84733,74584],{"class":50},[37,84735,55],{"class":54},[37,84737,80383],{"class":50},[37,84739,74380],{"class":2320},[37,84741,165],{"class":50},[37,84743,80130],{"class":159},[37,84745,80133],{"class":54},[37,84747,15913],{"class":50},[37,84749,84750],{"class":39,"line":33326},[37,84751,84752],{"class":43},"      \u002F\u002F 对象解构\n",[37,84754,84755,84757,84759,84761,84763,84765,84767,84770,84772,84774,84776,84779,84781,84784,84786,84788],{"class":39,"line":33332},[37,84756,58564],{"class":54},[37,84758,80142],{"class":50},[37,84760,80155],{"class":61},[37,84762,12776],{"class":50},[37,84764,80145],{"class":61},[37,84766,12776],{"class":50},[37,84768,84769],{"class":61},"count",[37,84771,12776],{"class":50},[37,84773,80150],{"class":61},[37,84775,12776],{"class":50},[37,84777,84778],{"class":61},"spec",[37,84780,12776],{"class":50},[37,84782,84783],{"class":61},"gift",[37,84785,80158],{"class":50},[37,84787,55],{"class":54},[37,84789,80163],{"class":50},[37,84791,84792],{"class":39,"line":33346},[37,84793,84794],{"class":43},"      \u002F\u002F 规格文字模块处理\n",[37,84796,84797,84799,84802,84804,84806,84808,84810,84812,84814,84816],{"class":39,"line":33352},[37,84798,58564],{"class":54},[37,84800,84801],{"class":61}," text",[37,84803,13905],{"class":54},[37,84805,82273],{"class":50},[37,84807,82276],{"class":2320},[37,84809,82279],{"class":50},[37,84811,74558],{"class":2320},[37,84813,165],{"class":50},[37,84815,82286],{"class":185},[37,84817,280],{"class":50},[37,84819,84820],{"class":39,"line":33358},[37,84821,84822],{"class":43},"      \u002F\u002F 处理赠品模块\n",[37,84824,84825,84827,84829,84831,84834,84836,84838,84840,84842,84845,84847,84849,84851,84853,84855,84858,84860,84863,84865,84867,84869,84871,84873,84875],{"class":39,"line":33369},[37,84826,58564],{"class":54},[37,84828,74255],{"class":61},[37,84830,13905],{"class":54},[37,84832,84833],{"class":50}," gift ",[37,84835,1494],{"class":54},[37,84837,83447],{"class":50},[37,84839,83450],{"class":2320},[37,84841,165],{"class":50},[37,84843,84844],{"class":185},"','",[37,84846,31165],{"class":50},[37,84848,74380],{"class":2320},[37,84850,165],{"class":50},[37,84852,80130],{"class":159},[37,84854,80133],{"class":54},[37,84856,84857],{"class":185}," `\u003Cspan class=\"tag\">【赠品】${",[37,84859,80130],{"class":50},[37,84861,84862],{"class":185},"}\u003C\u002Fspan>`",[37,84864,31165],{"class":50},[37,84866,74558],{"class":2320},[37,84868,165],{"class":50},[37,84870,74563],{"class":185},[37,84872,14055],{"class":50},[37,84874,1368],{"class":54},[37,84876,70440],{"class":185},[37,84878,84879],{"class":39,"line":33375},[37,84880,84881],{"class":43},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[37,84883,84884,84886,84889,84891,84894,84896,84898,84900,84903,84905,84907,84909,84912,84914,84916],{"class":39,"line":33381},[37,84885,58564],{"class":54},[37,84887,84888],{"class":61}," subtotal",[37,84890,13905],{"class":54},[37,84892,84893],{"class":50}," ((price ",[37,84895,967],{"class":54},[37,84897,6102],{"class":61},[37,84899,6866],{"class":54},[37,84901,84902],{"class":50}," count) ",[37,84904,1094],{"class":54},[37,84906,6102],{"class":61},[37,84908,31165],{"class":50},[37,84910,84911],{"class":2320},"toFixed",[37,84913,165],{"class":50},[37,84915,602],{"class":61},[37,84917,280],{"class":50},[37,84919,84920],{"class":39,"line":33391},[37,84921,2757],{"emptyLinePlaceholder":454},[37,84923,84924,84926],{"class":39,"line":33397},[37,84925,74318],{"class":54},[37,84927,70504],{"class":185},[37,84929,84930],{"class":39,"line":33408},[37,84931,84932],{"class":185},"        \u003Cdiv class=\"item\">\n",[37,84934,84935,84938,84940],{"class":39,"line":33414},[37,84936,84937],{"class":185},"          \u003Cimg src=\"${",[37,84939,80155],{"class":50},[37,84941,80187],{"class":185},[37,84943,84944,84947,84949,84952,84954],{"class":39,"line":33424},[37,84945,84946],{"class":185},"          \u003Cp class=\"name\">${",[37,84948,80145],{"class":50},[37,84950,84951],{"class":185},"}${",[37,84953,1678],{"class":50},[37,84955,80197],{"class":185},[37,84957,84958,84961,84963],{"class":39,"line":33429},[37,84959,84960],{"class":185},"          \u003Cp class=\"spec\">${",[37,84962,5536],{"class":50},[37,84964,80197],{"class":185},[37,84966,84967,84970,84972,84974,84976,84978,84980,84982],{"class":39,"line":33435},[37,84968,84969],{"class":185},"          \u003Cp class=\"price\">${",[37,84971,80150],{"class":50},[37,84973,1068],{"class":185},[37,84975,84911],{"class":2320},[37,84977,165],{"class":185},[37,84979,602],{"class":61},[37,84981,138],{"class":185},[37,84983,80197],{"class":185},[37,84985,84986,84989,84991],{"class":39,"line":33484},[37,84987,84988],{"class":185},"          \u003Cp class=\"count\">x${",[37,84990,84769],{"class":50},[37,84992,80197],{"class":185},[37,84994,84995,84998,85001],{"class":39,"line":33531},[37,84996,84997],{"class":185},"          \u003Cp class=\"sub-total\">${",[37,84999,85000],{"class":50},"subtotal",[37,85002,80197],{"class":185},[37,85004,85005],{"class":39,"line":33536},[37,85006,85007],{"class":185},"        \u003C\u002Fdiv> \n",[37,85009,85010],{"class":39,"line":33542},[37,85011,85012],{"class":185},"             `\n",[37,85014,85015,85018,85020,85022,85024],{"class":39,"line":33561},[37,85016,85017],{"class":50},"    }).",[37,85019,74558],{"class":2320},[37,85021,165],{"class":50},[37,85023,74563],{"class":185},[37,85025,280],{"class":50},[37,85027,85028],{"class":39,"line":33567},[37,85029,85030],{"class":43},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[37,85032,85033,85035,85037,85039,85041,85044,85046,85049,85051,85053,85055,85058,85061,85063,85066,85068,85070,85072,85075,85077,85079,85081,85083],{"class":39,"line":33586},[37,85034,11562],{"class":54},[37,85036,63121],{"class":61},[37,85038,13905],{"class":54},[37,85040,80383],{"class":50},[37,85042,85043],{"class":2320},"reduce",[37,85045,2733],{"class":50},[37,85047,85048],{"class":159},"prev",[37,85050,12776],{"class":50},[37,85052,80130],{"class":159},[37,85054,14055],{"class":50},[37,85056,85057],{"class":54},"=>",[37,85059,85060],{"class":50}," prev ",[37,85062,993],{"class":54},[37,85064,85065],{"class":50}," (item.price ",[37,85067,967],{"class":54},[37,85069,6102],{"class":61},[37,85071,6866],{"class":54},[37,85073,85074],{"class":50}," item.count) ",[37,85076,1094],{"class":54},[37,85078,6102],{"class":61},[37,85080,12776],{"class":50},[37,85082,135],{"class":61},[37,85084,280],{"class":50},[37,85086,85087,85089,85091,85093,85096,85098,85100,85103,85105,85107,85109],{"class":39,"line":33592},[37,85088,52743],{"class":50},[37,85090,54735],{"class":2320},[37,85092,165],{"class":50},[37,85094,85095],{"class":185},"'.amount'",[37,85097,74584],{"class":50},[37,85099,55],{"class":54},[37,85101,85102],{"class":50}," total.",[37,85104,84911],{"class":2320},[37,85106,165],{"class":50},[37,85108,602],{"class":61},[37,85110,280],{"class":50},[37,85112,85113,85115,85117],{"class":39,"line":33598},[37,85114,52753],{"class":50},[37,85116,52149],{"class":51636},[37,85118,51643],{"class":50},[37,85120,85121,85123,85125],{"class":39,"line":33608},[37,85122,52121],{"class":50},[37,85124,52136],{"class":51636},[37,85126,51643],{"class":50},[37,85128,85129],{"class":39,"line":33613},[37,85130,2757],{"emptyLinePlaceholder":454},[37,85132,85133,85135,85137],{"class":39,"line":33619},[37,85134,52121],{"class":50},[37,85136,50971],{"class":51636},[37,85138,51643],{"class":50},[469,85140,85142],{"id":85141},"_411-编程思想","4.11 编程思想",[498,85144,85146],{"id":85145},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,85148,85149,85152],{},[673,85150,85151],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,85154,85155],{},"调用就可以了",[14,85157,85158],{},[1838,85159],{"alt":32,"src":85160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[498,85162,85164],{"id":85163},"_4112-面向对象","4.11.2 面向对象",[14,85166,85167],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,85169,85170],{},[1838,85171],{"alt":32,"src":85172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,85174,85175],{},"面向对象的特性：",[1515,85177,85178,85181,85184],{},[484,85179,85180],{},"封装性",[484,85182,85183],{},"继承性",[484,85185,85186],{},"多态性",[498,85188,85190],{"id":85189},"_4113-两者比较","4.11.3 两者比较",[14,85192,85193],{},[1838,85194],{"alt":32,"src":85195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[469,85197,85199],{"id":85198},"_412-构造函数回顾","4.12 构造函数回顾",[14,85201,85202],{},[1838,85203],{"alt":32,"src":85204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,85206,85207],{},[1838,85208],{"alt":32,"src":85209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,85211,85212],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,85214,85215],{},[1838,85216],{"alt":32,"src":85217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[469,85219,85221],{"id":85220},"_413-原型","4.13 原型",[498,85223,85225],{"id":85224},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,85227,85228],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,85230,85231],{},[1838,85232],{"alt":32,"src":85233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,85235,85236],{},[1838,85237],{"alt":32,"src":85238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,85240,85241],{},"原型是构造函数的属性，它也是一个对象",[14,85243,85244],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,85246,85247],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[27,85249,85251],{"className":53403,"code":85250,"language":53405,"meta":32,"style":32},"\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",[34,85252,85253,85261,85266,85274,85279,85284,85289,85294,85299,85303,85307,85311,85316,85321,85325,85330,85335,85340,85345,85350,85354,85362],{"__ignoreMap":32},[37,85254,85255,85257,85259],{"class":39,"line":40},[37,85256,1418],{"class":50},[37,85258,52136],{"class":51636},[37,85260,51643],{"class":50},[37,85262,85263],{"class":39,"line":47},[37,85264,85265],{"class":43},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[37,85267,85268,85270,85272],{"class":39,"line":104},[37,85269,52480],{"class":50},[37,85271,52149],{"class":51636},[37,85273,51643],{"class":50},[37,85275,85276],{"class":39,"line":113},[37,85277,85278],{"class":50},"    function Star(uname, age) {\n",[37,85280,85281],{"class":39,"line":189},[37,85282,85283],{"class":50},"      this.uname = uname,\n",[37,85285,85286],{"class":39,"line":195},[37,85287,85288],{"class":50},"        this.age = age\n",[37,85290,85291],{"class":39,"line":201},[37,85292,85293],{"class":50},"      \u002F\u002F this.sing = function () {\n",[37,85295,85296],{"class":39,"line":207},[37,85297,85298],{"class":50},"      \u002F\u002F   console.log('唱歌')\n",[37,85300,85301],{"class":39,"line":213},[37,85302,2757],{"emptyLinePlaceholder":454},[37,85304,85305],{"class":39,"line":218},[37,85306,60373],{"class":50},[37,85308,85309],{"class":39,"line":227},[37,85310,2544],{"class":50},[37,85312,85313],{"class":39,"line":232},[37,85314,85315],{"class":50},"    Star.prototype.sing = function () {\n",[37,85317,85318],{"class":39,"line":238},[37,85319,85320],{"class":50},"      console.log('唱歌')\n",[37,85322,85323],{"class":39,"line":244},[37,85324,2544],{"class":50},[37,85326,85327],{"class":39,"line":250},[37,85328,85329],{"class":50},"    \u002F\u002F console.dir(Star.prototype)\n",[37,85331,85332],{"class":39,"line":256},[37,85333,85334],{"class":50},"    const pink = new Star('pink', 18)\n",[37,85336,85337],{"class":39,"line":261},[37,85338,85339],{"class":50},"    const red = new Star('red', 20)\n",[37,85341,85342],{"class":39,"line":267},[37,85343,85344],{"class":50},"    pink.sing()\n",[37,85346,85347],{"class":39,"line":283},[37,85348,85349],{"class":50},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[37,85351,85352],{"class":39,"line":288},[37,85353,2757],{"emptyLinePlaceholder":454},[37,85355,85356,85358,85360],{"class":39,"line":294},[37,85357,52753],{"class":50},[37,85359,52149],{"class":51636},[37,85361,51643],{"class":50},[37,85363,85364,85366,85368],{"class":39,"line":300},[37,85365,52121],{"class":50},[37,85367,52136],{"class":51636},[37,85369,51643],{"class":50},[14,85371,85372],{},[1838,85373],{"alt":32,"src":85374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[27,85376,85378],{"className":53403,"code":85377,"language":53405,"meta":32,"style":32},"\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",[34,85379,85380,85388,85396,85401,85406,85411,85416,85420,85425,85430,85435,85439,85444,85448,85452,85457,85461,85469],{"__ignoreMap":32},[37,85381,85382,85384,85386],{"class":39,"line":40},[37,85383,1418],{"class":50},[37,85385,52136],{"class":51636},[37,85387,51643],{"class":50},[37,85389,85390,85392,85394],{"class":39,"line":47},[37,85391,52480],{"class":50},[37,85393,52149],{"class":51636},[37,85395,51643],{"class":50},[37,85397,85398],{"class":39,"line":104},[37,85399,85400],{"class":50},"    let that\n",[37,85402,85403],{"class":39,"line":113},[37,85404,85405],{"class":50},"    function Star(uname) {\n",[37,85407,85408],{"class":39,"line":189},[37,85409,85410],{"class":50},"      this.uname = uname\n",[37,85412,85413],{"class":39,"line":195},[37,85414,85415],{"class":50},"      that = this\n",[37,85417,85418],{"class":39,"line":201},[37,85419,2544],{"class":50},[37,85421,85422],{"class":39,"line":207},[37,85423,85424],{"class":50},"    \u002F\u002F 实例对象是 ldh\n",[37,85426,85427],{"class":39,"line":213},[37,85428,85429],{"class":50},"    const ldh = new Star('刘德华')\n",[37,85431,85432],{"class":39,"line":218},[37,85433,85434],{"class":50},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[37,85436,85437],{"class":39,"line":227},[37,85438,2757],{"emptyLinePlaceholder":454},[37,85440,85441],{"class":39,"line":232},[37,85442,85443],{"class":50},"    Star.sing = function () {\n",[37,85445,85446],{"class":39,"line":238},[37,85447,85320],{"class":50},[37,85449,85450],{"class":39,"line":244},[37,85451,2544],{"class":50},[37,85453,85454],{"class":39,"line":250},[37,85455,85456],{"class":50},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[37,85458,85459],{"class":39,"line":256},[37,85460,2757],{"emptyLinePlaceholder":454},[37,85462,85463,85465,85467],{"class":39,"line":261},[37,85464,52753],{"class":50},[37,85466,52149],{"class":51636},[37,85468,51643],{"class":50},[37,85470,85471,85473,85475],{"class":39,"line":267},[37,85472,52121],{"class":50},[37,85474,52136],{"class":51636},[37,85476,51643],{"class":50},[14,85478,85479],{},"构造函数的this指向的是实例对象；",[14,85481,85482],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[498,85484,85486],{"id":85485},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85488,85489],{},[1838,85490],{"alt":32,"src":85491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[27,85493,85495],{"className":53403,"code":85494,"language":53405,"meta":32,"style":32},"\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",[34,85496,85497,85505,85513,85518,85523,85528,85533,85538,85543,85548,85553,85558,85563,85567,85572,85577,85582,85587,85591,85596,85601,85606,85611,85615,85620,85625,85630,85635,85639,85644,85648,85656],{"__ignoreMap":32},[37,85498,85499,85501,85503],{"class":39,"line":40},[37,85500,1418],{"class":50},[37,85502,52136],{"class":51636},[37,85504,51643],{"class":50},[37,85506,85507,85509,85511],{"class":39,"line":47},[37,85508,52480],{"class":50},[37,85510,52149],{"class":51636},[37,85512,51643],{"class":50},[37,85514,85515],{"class":39,"line":104},[37,85516,85517],{"class":50},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[37,85519,85520],{"class":39,"line":113},[37,85521,85522],{"class":50},"    const arr = [1, 2, 3]\n",[37,85524,85525],{"class":39,"line":189},[37,85526,85527],{"class":50},"    \u002F\u002F 自己定义数组的扩展方法\n",[37,85529,85530],{"class":39,"line":195},[37,85531,85532],{"class":50},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[37,85534,85535],{"class":39,"line":201},[37,85536,85537],{"class":50},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[37,85539,85540],{"class":39,"line":207},[37,85541,85542],{"class":50},"    \u002F\u002F ①.最大值\n",[37,85544,85545],{"class":39,"line":213},[37,85546,85547],{"class":50},"    Array.prototype.max = function () {\n",[37,85549,85550],{"class":39,"line":218},[37,85551,85552],{"class":50},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[37,85554,85555],{"class":39,"line":227},[37,85556,85557],{"class":50},"      return Math.max(...this)\n",[37,85559,85560],{"class":39,"line":232},[37,85561,85562],{"class":50},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[37,85564,85565],{"class":39,"line":238},[37,85566,2544],{"class":50},[37,85568,85569],{"class":39,"line":244},[37,85570,85571],{"class":50},"    console.log(arr.max())\n",[37,85573,85574],{"class":39,"line":250},[37,85575,85576],{"class":50},"    \u002F\u002F ②最小值\n",[37,85578,85579],{"class":39,"line":256},[37,85580,85581],{"class":50},"    Array.prototype.min = function () {\n",[37,85583,85584],{"class":39,"line":261},[37,85585,85586],{"class":50},"      return Math.min(...this)\n",[37,85588,85589],{"class":39,"line":267},[37,85590,2544],{"class":50},[37,85592,85593],{"class":39,"line":283},[37,85594,85595],{"class":50},"    console.log(arr.min())\n",[37,85597,85598],{"class":39,"line":288},[37,85599,85600],{"class":50},"    \u002F\u002F③求和\n",[37,85602,85603],{"class":39,"line":294},[37,85604,85605],{"class":50},"    Array.prototype.sum = function () {\n",[37,85607,85608],{"class":39,"line":300},[37,85609,85610],{"class":50},"      return this.reduce((prev, current) => prev + current, 0)\n",[37,85612,85613],{"class":39,"line":306},[37,85614,2544],{"class":50},[37,85616,85617],{"class":39,"line":312},[37,85618,85619],{"class":50},"    console.log(arr.sum())\n",[37,85621,85622],{"class":39,"line":317},[37,85623,85624],{"class":50},"    \u002F\u002F ③排序\n",[37,85626,85627],{"class":39,"line":323},[37,85628,85629],{"class":50},"    Array.prototype.rever = function () {\n",[37,85631,85632],{"class":39,"line":337},[37,85633,85634],{"class":50},"      return this.reverse()\n",[37,85636,85637],{"class":39,"line":342},[37,85638,2544],{"class":50},[37,85640,85641],{"class":39,"line":347},[37,85642,85643],{"class":50},"    console.log(arr.rever())\n",[37,85645,85646],{"class":39,"line":352},[37,85647,2757],{"emptyLinePlaceholder":454},[37,85649,85650,85652,85654],{"class":39,"line":357},[37,85651,52753],{"class":50},[37,85653,52149],{"class":51636},[37,85655,51643],{"class":50},[37,85657,85658,85660,85662],{"class":39,"line":362},[37,85659,52121],{"class":50},[37,85661,52136],{"class":51636},[37,85663,51643],{"class":50},[14,85665,85666],{},[1838,85667],{"alt":32,"src":85668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[498,85670,85672],{"id":85671},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85674,85675],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85677,85678],{},[1838,85679],{"alt":32,"src":85680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[27,85682,85684],{"className":53403,"code":85683,"language":53405,"meta":32,"style":32},"\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",[34,85685,85686,85694,85702,85707,85712,85716,85721,85726,85731,85739],{"__ignoreMap":32},[37,85687,85688,85690,85692],{"class":39,"line":40},[37,85689,1418],{"class":50},[37,85691,52136],{"class":51636},[37,85693,51643],{"class":50},[37,85695,85696,85698,85700],{"class":39,"line":47},[37,85697,52480],{"class":50},[37,85699,52149],{"class":51636},[37,85701,51643],{"class":50},[37,85703,85704],{"class":39,"line":104},[37,85705,85706],{"class":50},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[37,85708,85709],{"class":39,"line":113},[37,85710,85711],{"class":50},"    function Star() {\n",[37,85713,85714],{"class":39,"line":189},[37,85715,2544],{"class":50},[37,85717,85718],{"class":39,"line":195},[37,85719,85720],{"class":50},"    const ldh = new Star()\n",[37,85722,85723],{"class":39,"line":201},[37,85724,85725],{"class":50},"    console.log(Star.prototype)\n",[37,85727,85728],{"class":39,"line":207},[37,85729,85730],{"class":50},"    console.log(Star.prototype.constructor === Star)\n",[37,85732,85733,85735,85737],{"class":39,"line":213},[37,85734,52753],{"class":50},[37,85736,52149],{"class":51636},[37,85738,51643],{"class":50},[37,85740,85741,85743,85745],{"class":39,"line":218},[37,85742,52121],{"class":50},[37,85744,52136],{"class":51636},[37,85746,51643],{"class":50},[14,85748,85749],{},[1838,85750],{"alt":32,"src":85751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85753,85754],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[27,85756,85758],{"className":53403,"code":85757,"language":53405,"meta":32,"style":32},"  \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",[34,85759,85760,85768,85772,85776,85780,85785,85790,85795,85799,85804,85809,85814,85819,85824,85829,85833,85837,85842,85847,85852,85856,85861,85866,85870,85874,85878],{"__ignoreMap":32},[37,85761,85762,85764,85766],{"class":39,"line":40},[37,85763,52480],{"class":50},[37,85765,52149],{"class":51636},[37,85767,51643],{"class":50},[37,85769,85770],{"class":39,"line":47},[37,85771,85706],{"class":50},[37,85773,85774],{"class":39,"line":104},[37,85775,85711],{"class":50},[37,85777,85778],{"class":39,"line":113},[37,85779,2544],{"class":50},[37,85781,85782],{"class":39,"line":189},[37,85783,85784],{"class":50},"    \u002F\u002F const ldh = new Star()\n",[37,85786,85787],{"class":39,"line":195},[37,85788,85789],{"class":50},"    \u002F\u002F console.log(Star.prototype)\n",[37,85791,85792],{"class":39,"line":201},[37,85793,85794],{"class":50},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[37,85796,85797],{"class":39,"line":207},[37,85798,2757],{"emptyLinePlaceholder":454},[37,85800,85801],{"class":39,"line":213},[37,85802,85803],{"class":50},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[37,85805,85806],{"class":39,"line":218},[37,85807,85808],{"class":50},"    \u002F\u002F Star.prototype.sing = function () {\n",[37,85810,85811],{"class":39,"line":227},[37,85812,85813],{"class":50},"    \u002F\u002F   console.log('唱歌')\n",[37,85815,85816],{"class":39,"line":232},[37,85817,85818],{"class":50},"    \u002F\u002F }\n",[37,85820,85821],{"class":39,"line":238},[37,85822,85823],{"class":50},"    \u002F\u002F Star.prototype.dance = function () {\n",[37,85825,85826],{"class":39,"line":244},[37,85827,85828],{"class":50},"    \u002F\u002F   console.log('跳舞')\n",[37,85830,85831],{"class":39,"line":250},[37,85832,85818],{"class":50},[37,85834,85835],{"class":39,"line":256},[37,85836,85725],{"class":50},[37,85838,85839],{"class":39,"line":261},[37,85840,85841],{"class":50},"    Star.prototype = {\n",[37,85843,85844],{"class":39,"line":267},[37,85845,85846],{"class":50},"      sing: function () {\n",[37,85848,85849],{"class":39,"line":283},[37,85850,85851],{"class":50},"        console.log('唱歌')\n",[37,85853,85854],{"class":39,"line":288},[37,85855,78227],{"class":50},[37,85857,85858],{"class":39,"line":294},[37,85859,85860],{"class":50},"      dance: function () {\n",[37,85862,85863],{"class":39,"line":300},[37,85864,85865],{"class":50},"        console.log('跳舞')\n",[37,85867,85868],{"class":39,"line":306},[37,85869,52734],{"class":50},[37,85871,85872],{"class":39,"line":312},[37,85873,2544],{"class":50},[37,85875,85876],{"class":39,"line":317},[37,85877,85725],{"class":50},[37,85879,85880,85882,85884],{"class":39,"line":323},[37,85881,52753],{"class":50},[37,85883,52149],{"class":51636},[37,85885,51643],{"class":50},[14,85887,85888],{},"进行输出结果后会发现：",[14,85890,85891],{},[1838,85892],{"alt":32,"src":85893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85895,85896],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85898,85899],{},"所以，要重新指回创造这个原型对象的构造函数",[27,85901,85903],{"className":71549,"code":85902,"language":71551,"meta":32,"style":32},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[34,85904,85905,85919,85924,85929,85940,85953,85958,85969,85983,85987],{"__ignoreMap":32},[37,85906,85907,85910,85912,85915,85917],{"class":39,"line":40},[37,85908,85909],{"class":61},"Star",[37,85911,1068],{"class":50},[37,85913,85914],{"class":61},"prototype",[37,85916,13905],{"class":54},[37,85918,15913],{"class":50},[37,85920,85921],{"class":39,"line":47},[37,85922,85923],{"class":43},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[37,85925,85926],{"class":39,"line":104},[37,85927,85928],{"class":50},"  constructor: Star,\n",[37,85930,85931,85934,85936,85938],{"class":39,"line":113},[37,85932,85933],{"class":2320},"  sing",[37,85935,51773],{"class":50},[37,85937,54785],{"class":54},[37,85939,54788],{"class":50},[37,85941,85942,85944,85946,85948,85951],{"class":39,"line":189},[37,85943,74089],{"class":50},[37,85945,58583],{"class":2320},[37,85947,165],{"class":50},[37,85949,85950],{"class":185},"'唱歌'",[37,85952,280],{"class":50},[37,85954,85955],{"class":39,"line":195},[37,85956,85957],{"class":50},"   },\n",[37,85959,85960,85963,85965,85967],{"class":39,"line":201},[37,85961,85962],{"class":2320},"   dance",[37,85964,51773],{"class":50},[37,85966,54785],{"class":54},[37,85968,54788],{"class":50},[37,85970,85971,85974,85976,85978,85981],{"class":39,"line":207},[37,85972,85973],{"class":50},"     console.",[37,85975,58583],{"class":2320},[37,85977,165],{"class":50},[37,85979,85980],{"class":185},"'跳舞'",[37,85982,280],{"class":50},[37,85984,85985],{"class":39,"line":213},[37,85986,4659],{"class":50},[37,85988,85989],{"class":39,"line":218},[37,85990,1941],{"class":50},[14,85992,85993],{},[1838,85994],{"alt":32,"src":85995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85997,85998],{},"总结1：",[14,86000,86001],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,86003,86004],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,86006,86007],{},"constructor指的是他的来源",[14,86009,86010],{},[1838,86011],{"alt":32,"src":86012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,86014,86015],{},[1838,86016],{"alt":32,"src":86017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,86019,86020],{},"总结2：",[14,86022,86023],{},[1838,86024],{"alt":32,"src":86025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,86027,86028],{},[1838,86029],{"alt":32,"src":86030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,86032,86033],{},[1838,86034],{"alt":32,"src":86035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[498,86037,86039],{"id":86038},"_4134-对象原型","4.13.4 对象原型",[14,86041,86042],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,86044,86045],{},"对象原型就是__proto__这个属性",[14,86047,86048],{},[1838,86049],{"alt":32,"src":86050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,86052,86053],{},[1838,86054],{"alt":32,"src":86055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,86057,86058],{},[1838,86059],{"alt":32,"src":86060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,86062,86063],{},[1838,86064],{"alt":32,"src":86065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[27,86067,86069],{"className":53403,"code":86068,"language":53405,"meta":32,"style":32},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[34,86070,86071,86079,86087,86091,86095,86099,86104,86112],{"__ignoreMap":32},[37,86072,86073,86075,86077],{"class":39,"line":40},[37,86074,1418],{"class":50},[37,86076,52136],{"class":51636},[37,86078,51643],{"class":50},[37,86080,86081,86083,86085],{"class":39,"line":47},[37,86082,52480],{"class":50},[37,86084,52149],{"class":51636},[37,86086,51643],{"class":50},[37,86088,86089],{"class":39,"line":104},[37,86090,85711],{"class":50},[37,86092,86093],{"class":39,"line":113},[37,86094,2544],{"class":50},[37,86096,86097],{"class":39,"line":189},[37,86098,85720],{"class":50},[37,86100,86101],{"class":39,"line":195},[37,86102,86103],{"class":50},"    console.log(ldh)\n",[37,86105,86106,86108,86110],{"class":39,"line":201},[37,86107,52753],{"class":50},[37,86109,52149],{"class":51636},[37,86111,51643],{"class":50},[37,86113,86114,86116,86118],{"class":39,"line":207},[37,86115,52121],{"class":50},[37,86117,52136],{"class":51636},[37,86119,51643],{"class":50},[14,86121,86122],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,86124,86125],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,86127,86128],{},[1838,86129],{"alt":32,"src":86130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,86132,86133],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,86135,86136],{},"对象原型指向原型对象",[14,86138,86139],{},[1838,86140],{"alt":32,"src":86141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,86143,86144],{},[1838,86145],{"alt":32,"src":86146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,86148,86149],{},[1838,86150],{"alt":32,"src":86151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[498,86153,86155],{"id":86154},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,86157,86158],{},[1838,86159],{"alt":32,"src":86160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[481,86162,86163,86166,86169,86172],{},[484,86164,86165],{},"构造函数通过new的形式实例化得到实例对象",[484,86167,86168],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[484,86170,86171],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[484,86173,86174],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,86176,86177],{},[1838,86178],{"alt":32,"src":86179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,86181,86182],{},"题目梳理：",[14,86184,86185],{},[1838,86186],{"alt":32,"src":86187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[498,86189,86191],{"id":86190},"_4136-原型继承","4.13.6 原型继承",[14,86193,86194],{},[1838,86195],{"alt":32,"src":86196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,86198,86199],{},[1838,86200],{"alt":32,"src":86201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,86203,86204],{},[1838,86205],{"alt":32,"src":86206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,86208,86209],{},[1838,86210],{"alt":32,"src":86211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,86213,86214],{},[1838,86215],{"alt":32,"src":86216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,86218,86219],{},[1838,86220],{"alt":32,"src":86221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,86223,86224],{},[1838,86225],{"alt":32,"src":86226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,86228,86229],{},[1838,86230],{"alt":32,"src":86231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,86233,86234],{},"回顾：构造函数每次new得到对象都是不同的",[498,86236,86238],{"id":86237},"_4137-原型链","4.13.7 原型链",[14,86240,86241],{},[1838,86242],{"alt":32,"src":86243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,86245,86246],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,86248,86249],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,86251,86252],{},"大哥是Object",[14,86254,86255],{},[1838,86256],{"alt":32,"src":86257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,86259,86260],{},[1838,86261],{"alt":32,"src":86262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,86264,86265],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86267,86268],{},"万物皆对象",[498,86270,86272],{"id":86271},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86274,86275],{},"模态框",[14,86277,86278],{},"以后遇见这个效果直接使用这个就行",[14,86280,86281],{},[1838,86282],{"alt":32,"src":86283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86285,86286],{},[1838,86287],{"alt":32,"src":86288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86290,86291],{},[1838,86292],{"alt":32,"src":86293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86295,86296],{},[1838,86297],{"alt":32,"src":86298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86300,86301],{},"补充知识点：",[481,86303,86304],{},[484,86305,86306],{},"append()",[14,86308,86309],{},[1838,86310],{"alt":32,"src":86311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[27,86313,86315],{"className":50969,"code":86314,"language":50971,"meta":32,"style":32},"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",[34,86316,86317,86322,86327,86332,86336,86340,86344,86349,86354,86359,86363],{"__ignoreMap":32},[37,86318,86319],{"class":39,"line":40},[37,86320,86321],{"class":50},"append(param1)\n",[37,86323,86324],{"class":39,"line":47},[37,86325,86326],{"class":50},"append(param1, param2)\n",[37,86328,86329],{"class":39,"line":104},[37,86330,86331],{"class":50},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[37,86333,86334],{"class":39,"line":113},[37,86335,2757],{"emptyLinePlaceholder":454},[37,86337,86338],{"class":39,"line":189},[37,86339,2757],{"emptyLinePlaceholder":454},[37,86341,86342],{"class":39,"line":195},[37,86343,2757],{"emptyLinePlaceholder":454},[37,86345,86346],{"class":39,"line":201},[37,86347,86348],{"class":50},"let div = document.createElement(\"div\");\n",[37,86350,86351],{"class":39,"line":207},[37,86352,86353],{"class":50},"let p = document.createElement(\"p\");\n",[37,86355,86356],{"class":39,"line":213},[37,86357,86358],{"class":50},"div.append(p);\n",[37,86360,86361],{"class":39,"line":218},[37,86362,2757],{"emptyLinePlaceholder":454},[37,86364,86365,86368,86370],{"class":39,"line":227},[37,86366,86367],{"class":50},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[37,86369,14],{"class":51636},[37,86371,86372],{"class":50},"> ]\n",[481,86374,86375],{"start":47},[484,86376,86377],{},"remove()",[14,86379,86380],{},"自己删自己",[14,86382,86383],{},[1838,86384],{"alt":32,"src":86385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[27,86387,86389],{"className":50969,"code":86388,"language":50971,"meta":32,"style":32},"\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",[34,86390,86391,86401,86415,86419,86427,86441,86461,86473,86481,86488,86500,86513,86548,86560,86571,86583,86595,86607,86634,86644,86648,86652,86661,86673,86687,86697,86709,86713,86717,86727,86738,86748,86758,86771,86784,86794,86798,86802,86811,86821,86833,86837,86841,86850,86860,86870,86882,86886,86890,86900,86916,86927,86937,86947,86959,86971,86983,86987,86991,87004,87015,87019,87027,87035,87039,87047,87067,87087,87095,87100,87126,87131,87136,87155,87160,87172,87177,87188,87198,87208,87213,87218,87222,87227,87232,87237,87257,87262,87282,87287,87301,87306,87311,87316,87332,87336,87341,87370,87375,87380,87385,87396,87400,87404,87408,87413,87438,87443,87468,87473,87482,87486,87491,87516,87520,87545,87549,87558,87562,87567,87585,87595,87599,87607,87615,87619],{"__ignoreMap":32},[37,86392,86393,86395,86397,86399],{"class":39,"line":40},[37,86394,51633],{"class":50},[37,86396,51637],{"class":51636},[37,86398,51640],{"class":2320},[37,86400,51643],{"class":50},[37,86402,86403,86405,86407,86409,86411,86413],{"class":39,"line":47},[37,86404,1418],{"class":50},[37,86406,50971],{"class":51636},[37,86408,51652],{"class":2320},[37,86410,55],{"class":50},[37,86412,51657],{"class":185},[37,86414,51643],{"class":50},[37,86416,86417],{"class":39,"line":104},[37,86418,2757],{"emptyLinePlaceholder":454},[37,86420,86421,86423,86425],{"class":39,"line":113},[37,86422,1418],{"class":50},[37,86424,51670],{"class":51636},[37,86426,51643],{"class":50},[37,86428,86429,86431,86433,86435,86437,86439],{"class":39,"line":189},[37,86430,52480],{"class":50},[37,86432,51680],{"class":51636},[37,86434,51683],{"class":2320},[37,86436,55],{"class":50},[37,86438,51688],{"class":185},[37,86440,51643],{"class":50},[37,86442,86443,86445,86447,86449,86451,86453,86455,86457,86459],{"class":39,"line":195},[37,86444,52480],{"class":50},[37,86446,51680],{"class":51636},[37,86448,15261],{"class":2320},[37,86450,55],{"class":50},[37,86452,51727],{"class":185},[37,86454,51707],{"class":2320},[37,86456,55],{"class":50},[37,86458,51734],{"class":185},[37,86460,51643],{"class":50},[37,86462,86463,86465,86467,86469,86471],{"class":39,"line":201},[37,86464,52480],{"class":50},[37,86466,51743],{"class":51636},[37,86468,51746],{"class":50},[37,86470,51743],{"class":51636},[37,86472,51643],{"class":50},[37,86474,86475,86477,86479],{"class":39,"line":207},[37,86476,52480],{"class":50},[37,86478,446],{"class":51636},[37,86480,51643],{"class":50},[37,86482,86483,86486],{"class":39,"line":213},[37,86484,86485],{"class":2320},"    .modal",[37,86487,15913],{"class":50},[37,86489,86490,86492,86494,86496,86498],{"class":39,"line":218},[37,86491,55107],{"class":61},[37,86493,51773],{"class":50},[37,86495,4323],{"class":61},[37,86497,51828],{"class":54},[37,86499,1669],{"class":50},[37,86501,86502,86505,86507,86509,86511],{"class":39,"line":227},[37,86503,86504],{"class":61},"      min-height",[37,86506,51773],{"class":50},[37,86508,154],{"class":61},[37,86510,51828],{"class":54},[37,86512,1669],{"class":50},[37,86514,86515,86517,86519,86521,86523,86525,86527,86529,86531,86533,86535,86537,86539,86541,86543,86546],{"class":39,"line":232},[37,86516,79085],{"class":61},[37,86518,51773],{"class":50},[37,86520,135],{"class":61},[37,86522,4443],{"class":61},[37,86524,2395],{"class":61},[37,86526,51828],{"class":54},[37,86528,79102],{"class":61},[37,86530,165],{"class":50},[37,86532,135],{"class":61},[37,86534,12776],{"class":50},[37,86536,135],{"class":61},[37,86538,12776],{"class":50},[37,86540,135],{"class":61},[37,86542,12776],{"class":50},[37,86544,86545],{"class":61},"0.1",[37,86547,3069],{"class":50},[37,86549,86550,86552,86554,86556,86558],{"class":39,"line":238},[37,86551,55470],{"class":61},[37,86553,51773],{"class":50},[37,86555,168],{"class":61},[37,86557,51828],{"class":54},[37,86559,1669],{"class":50},[37,86561,86562,86564,86566,86569],{"class":39,"line":244},[37,86563,55095],{"class":61},[37,86565,51773],{"class":50},[37,86567,86568],{"class":61},"fixed",[37,86570,1669],{"class":50},[37,86572,86573,86576,86578,86581],{"class":39,"line":250},[37,86574,86575],{"class":61},"      z-index",[37,86577,51773],{"class":50},[37,86579,86580],{"class":61},"999",[37,86582,1669],{"class":50},[37,86584,86585,86587,86589,86591,86593],{"class":39,"line":256},[37,86586,55174],{"class":61},[37,86588,51773],{"class":50},[37,86590,1166],{"class":61},[37,86592,845],{"class":54},[37,86594,1669],{"class":50},[37,86596,86597,86599,86601,86603,86605],{"class":39,"line":261},[37,86598,55283],{"class":61},[37,86600,51773],{"class":50},[37,86602,1166],{"class":61},[37,86604,845],{"class":54},[37,86606,1669],{"class":50},[37,86608,86609,86611,86613,86615,86617,86620,86622,86624,86626,86628,86630,86632],{"class":39,"line":267},[37,86610,79126],{"class":61},[37,86612,51773],{"class":50},[37,86614,79131],{"class":61},[37,86616,165],{"class":50},[37,86618,86619],{"class":61},"-50",[37,86621,845],{"class":54},[37,86623,12776],{"class":50},[37,86625,86619],{"class":61},[37,86627,845],{"class":54},[37,86629,12776],{"class":50},[37,86631,135],{"class":61},[37,86633,3069],{"class":50},[37,86635,86636,86638,86640,86642],{"class":39,"line":283},[37,86637,55220],{"class":61},[37,86639,51773],{"class":50},[37,86641,61178],{"class":61},[37,86643,1669],{"class":50},[37,86645,86646],{"class":39,"line":288},[37,86647,2544],{"class":50},[37,86649,86650],{"class":39,"line":294},[37,86651,2757],{"emptyLinePlaceholder":454},[37,86653,86654,86656,86659],{"class":39,"line":300},[37,86655,86485],{"class":2320},[37,86657,86658],{"class":2320}," .header",[37,86660,15913],{"class":50},[37,86662,86663,86665,86667,86669,86671],{"class":39,"line":306},[37,86664,57695],{"class":61},[37,86666,51773],{"class":50},[37,86668,915],{"class":61},[37,86670,51828],{"class":54},[37,86672,1669],{"class":50},[37,86674,86675,86677,86679,86681,86683,86685],{"class":39,"line":312},[37,86676,55031],{"class":61},[37,86678,51773],{"class":50},[37,86680,135],{"class":61},[37,86682,2395],{"class":61},[37,86684,51828],{"class":54},[37,86686,1669],{"class":50},[37,86688,86689,86691,86693,86695],{"class":39,"line":317},[37,86690,55095],{"class":61},[37,86692,51773],{"class":50},[37,86694,55100],{"class":61},[37,86696,1669],{"class":50},[37,86698,86699,86701,86703,86705,86707],{"class":39,"line":323},[37,86700,55258],{"class":61},[37,86702,51773],{"class":50},[37,86704,1210],{"class":61},[37,86706,51828],{"class":54},[37,86708,1669],{"class":50},[37,86710,86711],{"class":39,"line":337},[37,86712,2544],{"class":50},[37,86714,86715],{"class":39,"line":342},[37,86716,2757],{"emptyLinePlaceholder":454},[37,86718,86719,86721,86723,86725],{"class":39,"line":347},[37,86720,86485],{"class":2320},[37,86722,86658],{"class":2320},[37,86724,3382],{"class":51636},[37,86726,15913],{"class":50},[37,86728,86729,86732,86734,86736],{"class":39,"line":352},[37,86730,86731],{"class":61},"      font-style",[37,86733,51773],{"class":50},[37,86735,64177],{"class":61},[37,86737,1669],{"class":50},[37,86739,86740,86742,86744,86746],{"class":39,"line":357},[37,86741,57752],{"class":61},[37,86743,51773],{"class":50},[37,86745,62406],{"class":61},[37,86747,1669],{"class":50},[37,86749,86750,86752,86754,86756],{"class":39,"line":362},[37,86751,55095],{"class":61},[37,86753,51773],{"class":50},[37,86755,55167],{"class":61},[37,86757,1669],{"class":50},[37,86759,86760,86763,86765,86767,86769],{"class":39,"line":367},[37,86761,86762],{"class":61},"      right",[37,86764,51773],{"class":50},[37,86766,1085],{"class":61},[37,86768,51828],{"class":54},[37,86770,1669],{"class":50},[37,86772,86773,86775,86777,86780,86782],{"class":39,"line":373},[37,86774,55283],{"class":61},[37,86776,51773],{"class":50},[37,86778,86779],{"class":61},"-2",[37,86781,51828],{"class":54},[37,86783,1669],{"class":50},[37,86785,86786,86788,86790,86792],{"class":39,"line":392},[37,86787,62361],{"class":61},[37,86789,51773],{"class":50},[37,86791,62366],{"class":61},[37,86793,1669],{"class":50},[37,86795,86796],{"class":39,"line":398},[37,86797,2544],{"class":50},[37,86799,86800],{"class":39,"line":409},[37,86801,2757],{"emptyLinePlaceholder":454},[37,86803,86804,86806,86809],{"class":39,"line":415},[37,86805,86485],{"class":2320},[37,86807,86808],{"class":2320}," .body",[37,86810,15913],{"class":50},[37,86812,86813,86815,86817,86819],{"class":39,"line":420},[37,86814,57622],{"class":61},[37,86816,51773],{"class":50},[37,86818,51928],{"class":61},[37,86820,1669],{"class":50},[37,86822,86823,86825,86827,86829,86831],{"class":39,"line":425},[37,86824,55031],{"class":61},[37,86826,51773],{"class":50},[37,86828,98],{"class":61},[37,86830,51828],{"class":54},[37,86832,1669],{"class":50},[37,86834,86835],{"class":39,"line":431},[37,86836,2544],{"class":50},[37,86838,86839],{"class":39,"line":436},[37,86840,2757],{"emptyLinePlaceholder":454},[37,86842,86843,86845,86848],{"class":39,"line":442},[37,86844,86485],{"class":2320},[37,86846,86847],{"class":2320}," .footer",[37,86849,15913],{"class":50},[37,86851,86852,86854,86856,86858],{"class":39,"line":8374},[37,86853,55345],{"class":61},[37,86855,51773],{"class":50},[37,86857,51813],{"class":61},[37,86859,1669],{"class":50},[37,86861,86862,86864,86866,86868],{"class":39,"line":8386},[37,86863,55356],{"class":61},[37,86865,51773],{"class":50},[37,86867,51916],{"class":61},[37,86869,1669],{"class":50},[37,86871,86872,86874,86876,86878,86880],{"class":39,"line":8398},[37,86873,55031],{"class":61},[37,86875,51773],{"class":50},[37,86877,98],{"class":61},[37,86879,51828],{"class":54},[37,86881,1669],{"class":50},[37,86883,86884],{"class":39,"line":10057},[37,86885,2544],{"class":50},[37,86887,86888],{"class":39,"line":10082},[37,86889,2757],{"emptyLinePlaceholder":454},[37,86891,86892,86894,86896,86898],{"class":39,"line":10105},[37,86893,86485],{"class":2320},[37,86895,86847],{"class":2320},[37,86897,1774],{"class":51636},[37,86899,15913],{"class":50},[37,86901,86902,86904,86906,86908,86910,86912,86914],{"class":39,"line":10129},[37,86903,55031],{"class":61},[37,86905,51773],{"class":50},[37,86907,62],{"class":61},[37,86909,51828],{"class":54},[37,86911,2440],{"class":61},[37,86913,51828],{"class":54},[37,86915,1669],{"class":50},[37,86917,86918,86920,86922,86925],{"class":39,"line":10134},[37,86919,62057],{"class":61},[37,86921,51773],{"class":50},[37,86923,86924],{"class":61},"#ccc",[37,86926,1669],{"class":50},[37,86928,86929,86931,86933,86935],{"class":39,"line":10139},[37,86930,64306],{"class":61},[37,86932,51773],{"class":50},[37,86934,55073],{"class":61},[37,86936,1669],{"class":50},[37,86938,86939,86941,86943,86945],{"class":39,"line":10144},[37,86940,57752],{"class":61},[37,86942,51773],{"class":50},[37,86944,61178],{"class":61},[37,86946,1669],{"class":50},[37,86948,86949,86951,86953,86955,86957],{"class":39,"line":10153},[37,86950,55470],{"class":61},[37,86952,51773],{"class":50},[37,86954,602],{"class":61},[37,86956,51828],{"class":54},[37,86958,1669],{"class":50},[37,86960,86961,86963,86965,86967,86969],{"class":39,"line":10158},[37,86962,62086],{"class":61},[37,86964,51773],{"class":50},[37,86966,98],{"class":61},[37,86968,51828],{"class":54},[37,86970,1669],{"class":50},[37,86972,86973,86975,86977,86979,86981],{"class":39,"line":10164},[37,86974,55258],{"class":61},[37,86976,51773],{"class":50},[37,86978,1059],{"class":61},[37,86980,51828],{"class":54},[37,86982,1669],{"class":50},[37,86984,86985],{"class":39,"line":10185},[37,86986,2544],{"class":50},[37,86988,86989],{"class":39,"line":10191},[37,86990,2757],{"emptyLinePlaceholder":454},[37,86992,86993,86995,86997,86999,87002],{"class":39,"line":10205},[37,86994,86485],{"class":2320},[37,86996,86847],{"class":2320},[37,86998,1774],{"class":51636},[37,87000,87001],{"class":2320},".submit",[37,87003,15913],{"class":50},[37,87005,87006,87008,87010,87013],{"class":39,"line":10211},[37,87007,55220],{"class":61},[37,87009,51773],{"class":50},[37,87011,87012],{"class":61},"#369",[37,87014,1669],{"class":50},[37,87016,87017],{"class":39,"line":10238},[37,87018,2544],{"class":50},[37,87020,87021,87023,87025],{"class":39,"line":10247},[37,87022,52753],{"class":50},[37,87024,446],{"class":51636},[37,87026,51643],{"class":50},[37,87028,87029,87031,87033],{"class":39,"line":10253},[37,87030,52121],{"class":50},[37,87032,51670],{"class":51636},[37,87034,51643],{"class":50},[37,87036,87037],{"class":39,"line":10261},[37,87038,2757],{"emptyLinePlaceholder":454},[37,87040,87041,87043,87045],{"class":39,"line":10266},[37,87042,1418],{"class":50},[37,87044,52136],{"class":51636},[37,87046,51643],{"class":50},[37,87048,87049,87051,87053,87055,87057,87060,87063,87065],{"class":39,"line":16945},[37,87050,52480],{"class":50},[37,87052,54223],{"class":51636},[37,87054,15300],{"class":2320},[37,87056,55],{"class":50},[37,87058,87059],{"class":185},"\"delete\"",[37,87061,87062],{"class":50},">删除\u003C\u002F",[37,87064,54223],{"class":51636},[37,87066,51643],{"class":50},[37,87068,87069,87071,87073,87075,87077,87080,87083,87085],{"class":39,"line":16951},[37,87070,52480],{"class":50},[37,87072,54223],{"class":51636},[37,87074,15300],{"class":2320},[37,87076,55],{"class":50},[37,87078,87079],{"class":185},"\"login\"",[37,87081,87082],{"class":50},">登录\u003C\u002F",[37,87084,54223],{"class":51636},[37,87086,51643],{"class":50},[37,87088,87089,87091,87093],{"class":39,"line":16974},[37,87090,52480],{"class":50},[37,87092,52149],{"class":51636},[37,87094,51643],{"class":50},[37,87096,87097],{"class":39,"line":16980},[37,87098,87099],{"class":43},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[37,87101,87102,87104,87107,87109,87111,87113,87115,87117,87120,87122,87124],{"class":39,"line":17003},[37,87103,70420],{"class":54},[37,87105,87106],{"class":2320}," Modal",[37,87108,165],{"class":50},[37,87110,51743],{"class":159},[37,87112,13905],{"class":54},[37,87114,70266],{"class":185},[37,87116,12776],{"class":50},[37,87118,87119],{"class":159},"message",[37,87121,13905],{"class":54},[37,87123,70266],{"class":185},[37,87125,12783],{"class":50},[37,87127,87128],{"class":39,"line":17017},[37,87129,87130],{"class":43},"      \u002F\u002F 创建Model 模态框盒子\n",[37,87132,87133],{"class":39,"line":17037},[37,87134,87135],{"class":43},"      \u002F\u002F 1.1 创建div标签\n",[37,87137,87138,87140,87143,87145,87147,87149,87151,87153],{"class":39,"line":17043},[37,87139,70387],{"class":61},[37,87141,87142],{"class":50},".modalBox ",[37,87144,55],{"class":54},[37,87146,54732],{"class":50},[37,87148,70487],{"class":2320},[37,87150,165],{"class":50},[37,87152,82266],{"class":185},[37,87154,280],{"class":50},[37,87156,87157],{"class":39,"line":17054},[37,87158,87159],{"class":43},"      \u002F\u002F 1.2 给div 添加类名为model\n",[37,87161,87162,87164,87167,87169],{"class":39,"line":17077},[37,87163,70387],{"class":61},[37,87165,87166],{"class":50},".modalBox.className ",[37,87168,55],{"class":54},[37,87170,87171],{"class":185}," 'modal'\n",[37,87173,87174],{"class":39,"line":17099},[37,87175,87176],{"class":43},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[37,87178,87179,87181,87184,87186],{"class":39,"line":17104},[37,87180,70387],{"class":61},[37,87182,87183],{"class":50},".modalBox.innerHTML ",[37,87185,55],{"class":54},[37,87187,70504],{"class":185},[37,87189,87190,87193,87195],{"class":39,"line":17110},[37,87191,87192],{"class":185},"        \u003Cdiv class=\"header\">${",[37,87194,51743],{"class":50},[37,87196,87197],{"class":185},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[37,87199,87200,87203,87205],{"class":39,"line":17124},[37,87201,87202],{"class":185},"        \u003Cdiv class=\"body\">${",[37,87204,87119],{"class":50},[37,87206,87207],{"class":185},"}\u003C\u002Fdiv>\n",[37,87209,87210],{"class":39,"line":17137},[37,87211,87212],{"class":185},"      `\n",[37,87214,87215],{"class":39,"line":17142},[37,87216,87217],{"class":43},"      \u002F\u002F console.log(this.modalBox)\n",[37,87219,87220],{"class":39,"line":17156},[37,87221,2544],{"class":50},[37,87223,87224],{"class":39,"line":17161},[37,87225,87226],{"class":43},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[37,87228,87229],{"class":39,"line":17167},[37,87230,87231],{"class":43},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[37,87233,87234],{"class":39,"line":17172},[37,87235,87236],{"class":43},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[37,87238,87239,87242,87244,87246,87248,87251,87253,87255],{"class":39,"line":17186},[37,87240,87241],{"class":61},"    Modal",[37,87243,1068],{"class":50},[37,87245,85914],{"class":61},[37,87247,1068],{"class":50},[37,87249,87250],{"class":2320},"open",[37,87252,13905],{"class":54},[37,87254,59254],{"class":54},[37,87256,54788],{"class":50},[37,87258,87259],{"class":39,"line":17191},[37,87260,87261],{"class":43},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[37,87263,87264,87266,87269,87271,87273,87275,87277,87280],{"class":39,"line":17196},[37,87265,58564],{"class":54},[37,87267,87268],{"class":61}," box",[37,87270,13905],{"class":54},[37,87272,54732],{"class":50},[37,87274,54735],{"class":2320},[37,87276,165],{"class":50},[37,87278,87279],{"class":185},"'.modal'",[37,87281,280],{"class":50},[37,87283,87284],{"class":39,"line":17210},[37,87285,87286],{"class":43},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[37,87288,87289,87292,87294,87297,87299],{"class":39,"line":17222},[37,87290,87291],{"class":50},"      box ",[37,87293,2080],{"class":54},[37,87295,87296],{"class":50}," box.",[37,87298,57342],{"class":2320},[37,87300,2333],{"class":50},[37,87302,87303],{"class":39,"line":17227},[37,87304,87305],{"class":43},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[37,87307,87308],{"class":39,"line":17240},[37,87309,87310],{"class":43},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[37,87312,87313],{"class":39,"line":17245},[37,87314,87315],{"class":43},"      \u002F\u002F append可以增加对象\n",[37,87317,87318,87321,87324,87326,87329],{"class":39,"line":17250},[37,87319,87320],{"class":50},"      document.body.",[37,87322,87323],{"class":2320},"append",[37,87325,165],{"class":50},[37,87327,87328],{"class":61},"this",[37,87330,87331],{"class":50},".modalBox)\n",[37,87333,87334],{"class":39,"line":17255},[37,87335,2757],{"emptyLinePlaceholder":454},[37,87337,87338],{"class":39,"line":17268},[37,87339,87340],{"class":43},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[37,87342,87343,87345,87348,87350,87352,87355,87357,87359,87361,87363,87366,87368],{"class":39,"line":17273},[37,87344,70387],{"class":61},[37,87346,87347],{"class":50},".modalBox.",[37,87349,54735],{"class":2320},[37,87351,165],{"class":50},[37,87353,87354],{"class":185},"'i'",[37,87356,31165],{"class":50},[37,87358,58149],{"class":2320},[37,87360,165],{"class":50},[37,87362,58154],{"class":185},[37,87364,87365],{"class":50},", () ",[37,87367,85057],{"class":54},[37,87369,15913],{"class":50},[37,87371,87372],{"class":39,"line":32971},[37,87373,87374],{"class":43},"        \u002F\u002F 这个地方需要用到箭头函数\n",[37,87376,87377],{"class":39,"line":32977},[37,87378,87379],{"class":43},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[37,87381,87382],{"class":39,"line":32983},[37,87383,87384],{"class":43},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[37,87386,87387,87389,87391,87394],{"class":39,"line":32989},[37,87388,65062],{"class":61},[37,87390,1068],{"class":50},[37,87392,87393],{"class":2320},"close",[37,87395,2333],{"class":50},[37,87397,87398],{"class":39,"line":32995},[37,87399,65151],{"class":50},[37,87401,87402],{"class":39,"line":33006},[37,87403,2544],{"class":50},[37,87405,87406],{"class":39,"line":33012},[37,87407,2757],{"emptyLinePlaceholder":454},[37,87409,87410],{"class":39,"line":33032},[37,87411,87412],{"class":43},"    \u002F\u002F 测试一下 点击 删除按钮\n",[37,87414,87415,87417,87419,87421,87424,87426,87428,87430,87432,87434,87436],{"class":39,"line":33038},[37,87416,52743],{"class":50},[37,87418,54735],{"class":2320},[37,87420,165],{"class":50},[37,87422,87423],{"class":185},"'#delete'",[37,87425,31165],{"class":50},[37,87427,58149],{"class":2320},[37,87429,165],{"class":50},[37,87431,58154],{"class":185},[37,87433,87365],{"class":50},[37,87435,85057],{"class":54},[37,87437,15913],{"class":50},[37,87439,87440],{"class":39,"line":33049},[37,87441,87442],{"class":43},"      \u002F\u002F 先调用Model构造函数\n",[37,87444,87445,87447,87450,87452,87454,87456,87458,87461,87463,87466],{"class":39,"line":33055},[37,87446,58564],{"class":54},[37,87448,87449],{"class":61}," del",[37,87451,13905],{"class":54},[37,87453,11919],{"class":54},[37,87455,87106],{"class":2320},[37,87457,165],{"class":50},[37,87459,87460],{"class":185},"'温馨的提示'",[37,87462,12776],{"class":50},[37,87464,87465],{"class":185},"'您没有删除权限操作'",[37,87467,280],{"class":50},[37,87469,87470],{"class":39,"line":33061},[37,87471,87472],{"class":43},"      \u002F\u002F 实例对象调用open方法\n",[37,87474,87475,87478,87480],{"class":39,"line":33067},[37,87476,87477],{"class":50},"      del.",[37,87479,87250],{"class":2320},[37,87481,2333],{"class":50},[37,87483,87484],{"class":39,"line":33073},[37,87485,33798],{"class":50},[37,87487,87488],{"class":39,"line":33079},[37,87489,87490],{"class":43},"    \u002F\u002F 测试一下 点击 登录按钮\n",[37,87492,87493,87495,87497,87499,87502,87504,87506,87508,87510,87512,87514],{"class":39,"line":33085},[37,87494,52743],{"class":50},[37,87496,54735],{"class":2320},[37,87498,165],{"class":50},[37,87500,87501],{"class":185},"'#login'",[37,87503,31165],{"class":50},[37,87505,58149],{"class":2320},[37,87507,165],{"class":50},[37,87509,58154],{"class":185},[37,87511,87365],{"class":50},[37,87513,85057],{"class":54},[37,87515,15913],{"class":50},[37,87517,87518],{"class":39,"line":33091},[37,87519,87442],{"class":43},[37,87521,87522,87524,87527,87529,87531,87533,87535,87538,87540,87543],{"class":39,"line":33111},[37,87523,58564],{"class":54},[37,87525,87526],{"class":61}," log",[37,87528,13905],{"class":54},[37,87530,11919],{"class":54},[37,87532,87106],{"class":2320},[37,87534,165],{"class":50},[37,87536,87537],{"class":185},"'友情提示'",[37,87539,12776],{"class":50},[37,87541,87542],{"class":185},"'您还没有登录呢'",[37,87544,280],{"class":50},[37,87546,87547],{"class":39,"line":33117},[37,87548,87472],{"class":43},[37,87550,87551,87554,87556],{"class":39,"line":33133},[37,87552,87553],{"class":50},"      log.",[37,87555,87250],{"class":2320},[37,87557,2333],{"class":50},[37,87559,87560],{"class":39,"line":33139},[37,87561,33798],{"class":50},[37,87563,87564],{"class":39,"line":33153},[37,87565,87566],{"class":43},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[37,87568,87569,87571,87573,87575,87577,87579,87581,87583],{"class":39,"line":33159},[37,87570,87241],{"class":61},[37,87572,1068],{"class":50},[37,87574,85914],{"class":61},[37,87576,1068],{"class":50},[37,87578,87393],{"class":2320},[37,87580,13905],{"class":54},[37,87582,59254],{"class":54},[37,87584,54788],{"class":50},[37,87586,87587,87589,87591,87593],{"class":39,"line":33174},[37,87588,70387],{"class":61},[37,87590,87347],{"class":50},[37,87592,57342],{"class":2320},[37,87594,2333],{"class":50},[37,87596,87597],{"class":39,"line":33180},[37,87598,2544],{"class":50},[37,87600,87601,87603,87605],{"class":39,"line":33189},[37,87602,52753],{"class":50},[37,87604,52149],{"class":51636},[37,87606,51643],{"class":50},[37,87608,87609,87611,87613],{"class":39,"line":33195},[37,87610,52121],{"class":50},[37,87612,52136],{"class":51636},[37,87614,51643],{"class":50},[37,87616,87617],{"class":39,"line":33204},[37,87618,2757],{"emptyLinePlaceholder":454},[37,87620,87621,87623,87625],{"class":39,"line":33210},[37,87622,52121],{"class":50},[37,87624,50971],{"class":51636},[37,87626,51643],{"class":50},[14,87628,87629],{},[1838,87630],{"alt":32,"src":87631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[469,87633,87635],{"id":87634},"_414-深浅拷贝","4.14 深浅拷贝",[498,87637,87639],{"id":87638},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87641,87642],{},[1838,87643],{"alt":32,"src":87644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87646,87647],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87649,87650],{},[1838,87651],{"alt":32,"src":87652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87654,87655],{},[1838,87656],{"alt":32,"src":87657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87659,87660],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87662,87663],{},[1838,87664],{"alt":32,"src":87665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87667,11673],{},[14,87669,87670],{},[1838,87671],{"alt":32,"src":87672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[498,87674,87676],{"id":87675},"_4142-深拷贝","4.14.2 深拷贝",[14,87678,87679],{},"深拷贝：拷贝的是对象，不是地址",[14,87681,87682],{},"常用的三种方法：",[481,87684,87685,87688,87691],{},[484,87686,87687],{},"通过递归实现深拷贝",[484,87689,87690],{},"lodash\u002FcloneDeep",[484,87692,87693],{},"通过JSON.stringify()实现",[22339,87695,87697],{"id":87696},"_41421-递归函数","4.14.2.1 递归函数",[14,87699,87700],{},[1838,87701],{"alt":32,"src":87702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[481,87704,87705],{},[484,87706,87707],{},"死递归占溢出：",[27,87709,87711],{"className":53403,"code":87710,"language":53405,"meta":32,"style":32},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[34,87712,87713,87721,87729,87733,87738,87742,87747,87755],{"__ignoreMap":32},[37,87714,87715,87717,87719],{"class":39,"line":40},[37,87716,1418],{"class":50},[37,87718,52136],{"class":51636},[37,87720,51643],{"class":50},[37,87722,87723,87725,87727],{"class":39,"line":47},[37,87724,52480],{"class":50},[37,87726,52149],{"class":51636},[37,87728,51643],{"class":50},[37,87730,87731],{"class":39,"line":104},[37,87732,77478],{"class":50},[37,87734,87735],{"class":39,"line":113},[37,87736,87737],{"class":50},"      fn()\n",[37,87739,87740],{"class":39,"line":189},[37,87741,2544],{"class":50},[37,87743,87744],{"class":39,"line":195},[37,87745,87746],{"class":50},"    fn()\n",[37,87748,87749,87751,87753],{"class":39,"line":201},[37,87750,52753],{"class":50},[37,87752,52149],{"class":51636},[37,87754,51643],{"class":50},[37,87756,87757,87759,87761],{"class":39,"line":207},[37,87758,52121],{"class":50},[37,87760,52136],{"class":51636},[37,87762,51643],{"class":50},[481,87764,87765],{"start":47},[484,87766,87767],{},"递归函数要加判断条件：",[14,87769,87770],{},[1838,87771],{"alt":32,"src":87772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[481,87774,87775],{"start":104},[484,87776,87777],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[27,87779,87781],{"className":50969,"code":87780,"language":50971,"meta":32,"style":32},"\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",[34,87782,87783,87793,87807,87811,87819,87833,87853,87865,87873,87877,87885,87897,87905,87913,87938,87950,87954,87961,87969,87977,87981],{"__ignoreMap":32},[37,87784,87785,87787,87789,87791],{"class":39,"line":40},[37,87786,51633],{"class":50},[37,87788,51637],{"class":51636},[37,87790,51640],{"class":2320},[37,87792,51643],{"class":50},[37,87794,87795,87797,87799,87801,87803,87805],{"class":39,"line":47},[37,87796,1418],{"class":50},[37,87798,50971],{"class":51636},[37,87800,51652],{"class":2320},[37,87802,55],{"class":50},[37,87804,51657],{"class":185},[37,87806,51643],{"class":50},[37,87808,87809],{"class":39,"line":104},[37,87810,2757],{"emptyLinePlaceholder":454},[37,87812,87813,87815,87817],{"class":39,"line":113},[37,87814,1418],{"class":50},[37,87816,51670],{"class":51636},[37,87818,51643],{"class":50},[37,87820,87821,87823,87825,87827,87829,87831],{"class":39,"line":189},[37,87822,52480],{"class":50},[37,87824,51680],{"class":51636},[37,87826,51683],{"class":2320},[37,87828,55],{"class":50},[37,87830,51688],{"class":185},[37,87832,51643],{"class":50},[37,87834,87835,87837,87839,87841,87843,87845,87847,87849,87851],{"class":39,"line":195},[37,87836,52480],{"class":50},[37,87838,51680],{"class":51636},[37,87840,15261],{"class":2320},[37,87842,55],{"class":50},[37,87844,51727],{"class":185},[37,87846,51707],{"class":2320},[37,87848,55],{"class":50},[37,87850,51734],{"class":185},[37,87852,51643],{"class":50},[37,87854,87855,87857,87859,87861,87863],{"class":39,"line":201},[37,87856,52480],{"class":50},[37,87858,51743],{"class":51636},[37,87860,51746],{"class":50},[37,87862,51743],{"class":51636},[37,87864,51643],{"class":50},[37,87866,87867,87869,87871],{"class":39,"line":207},[37,87868,52121],{"class":50},[37,87870,51670],{"class":51636},[37,87872,51643],{"class":50},[37,87874,87875],{"class":39,"line":213},[37,87876,2757],{"emptyLinePlaceholder":454},[37,87878,87879,87881,87883],{"class":39,"line":218},[37,87880,1418],{"class":50},[37,87882,52136],{"class":51636},[37,87884,51643],{"class":50},[37,87886,87887,87889,87891,87893,87895],{"class":39,"line":227},[37,87888,52480],{"class":50},[37,87890,51947],{"class":51636},[37,87892,55650],{"class":50},[37,87894,51947],{"class":51636},[37,87896,51643],{"class":50},[37,87898,87899,87901,87903],{"class":39,"line":232},[37,87900,52480],{"class":50},[37,87902,52149],{"class":51636},[37,87904,51643],{"class":50},[37,87906,87907,87909,87911],{"class":39,"line":238},[37,87908,70420],{"class":54},[37,87910,74109],{"class":2320},[37,87912,11194],{"class":50},[37,87914,87915,87917,87919,87921,87923,87925,87927,87929,87931,87933,87936],{"class":39,"line":244},[37,87916,56107],{"class":50},[37,87918,54735],{"class":2320},[37,87920,165],{"class":50},[37,87922,82266],{"class":185},[37,87924,74584],{"class":50},[37,87926,55],{"class":54},[37,87928,11919],{"class":54},[37,87930,74125],{"class":2320},[37,87932,17602],{"class":50},[37,87934,87935],{"class":2320},"toLocaleString",[37,87937,2333],{"class":50},[37,87939,87940,87943,87946,87948],{"class":39,"line":250},[37,87941,87942],{"class":2320},"      setTimeout",[37,87944,87945],{"class":50},"(getTime, ",[37,87947,6758],{"class":61},[37,87949,280],{"class":50},[37,87951,87952],{"class":39,"line":256},[37,87953,2544],{"class":50},[37,87955,87956,87959],{"class":39,"line":261},[37,87957,87958],{"class":2320},"    getTime",[37,87960,2333],{"class":50},[37,87962,87963,87965,87967],{"class":39,"line":267},[37,87964,52753],{"class":50},[37,87966,52149],{"class":51636},[37,87968,51643],{"class":50},[37,87970,87971,87973,87975],{"class":39,"line":283},[37,87972,52121],{"class":50},[37,87974,52136],{"class":51636},[37,87976,51643],{"class":50},[37,87978,87979],{"class":39,"line":288},[37,87980,2757],{"emptyLinePlaceholder":454},[37,87982,87983,87985,87987],{"class":39,"line":294},[37,87984,52121],{"class":50},[37,87986,50971],{"class":51636},[37,87988,51643],{"class":50},[14,87990,87991],{},[1838,87992],{"alt":32,"src":87993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[481,87995,87996],{"start":113},[484,87997,87687],{},[14,87999,88000],{},[1838,88001],{"alt":32,"src":88002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,88004,88005],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,88007,39526],{},[14,88009,88010],{},"这个是简易版的递归函数深拷贝",[14,88012,88013],{},"一定要注意先数组再对象，因为万物皆可对象",[27,88015,88017],{"className":50969,"code":88016,"language":50971,"meta":32,"style":32},"\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",[34,88018,88019,88029,88043,88047,88055,88069,88089,88101,88109,88113,88121,88129,88139,88148,88156,88172,88176,88184,88188,88192,88204,88209,88228,88244,88249,88254,88259,88274,88279,88284,88293,88301,88318,88326,88332,88340,88345,88350,88359,88363,88367,88371,88382,88391,88401,88415,88425,88433,88441,88449,88453],{"__ignoreMap":32},[37,88020,88021,88023,88025,88027],{"class":39,"line":40},[37,88022,51633],{"class":50},[37,88024,51637],{"class":51636},[37,88026,51640],{"class":2320},[37,88028,51643],{"class":50},[37,88030,88031,88033,88035,88037,88039,88041],{"class":39,"line":47},[37,88032,1418],{"class":50},[37,88034,50971],{"class":51636},[37,88036,51652],{"class":2320},[37,88038,55],{"class":50},[37,88040,51657],{"class":185},[37,88042,51643],{"class":50},[37,88044,88045],{"class":39,"line":104},[37,88046,2757],{"emptyLinePlaceholder":454},[37,88048,88049,88051,88053],{"class":39,"line":113},[37,88050,1418],{"class":50},[37,88052,51670],{"class":51636},[37,88054,51643],{"class":50},[37,88056,88057,88059,88061,88063,88065,88067],{"class":39,"line":189},[37,88058,52480],{"class":50},[37,88060,51680],{"class":51636},[37,88062,51683],{"class":2320},[37,88064,55],{"class":50},[37,88066,51688],{"class":185},[37,88068,51643],{"class":50},[37,88070,88071,88073,88075,88077,88079,88081,88083,88085,88087],{"class":39,"line":195},[37,88072,52480],{"class":50},[37,88074,51680],{"class":51636},[37,88076,15261],{"class":2320},[37,88078,55],{"class":50},[37,88080,51727],{"class":185},[37,88082,51707],{"class":2320},[37,88084,55],{"class":50},[37,88086,51734],{"class":185},[37,88088,51643],{"class":50},[37,88090,88091,88093,88095,88097,88099],{"class":39,"line":201},[37,88092,52480],{"class":50},[37,88094,51743],{"class":51636},[37,88096,51746],{"class":50},[37,88098,51743],{"class":51636},[37,88100,51643],{"class":50},[37,88102,88103,88105,88107],{"class":39,"line":207},[37,88104,52121],{"class":50},[37,88106,51670],{"class":51636},[37,88108,51643],{"class":50},[37,88110,88111],{"class":39,"line":213},[37,88112,2757],{"emptyLinePlaceholder":454},[37,88114,88115,88117,88119],{"class":39,"line":218},[37,88116,1418],{"class":50},[37,88118,52136],{"class":51636},[37,88120,51643],{"class":50},[37,88122,88123,88125,88127],{"class":39,"line":227},[37,88124,52480],{"class":50},[37,88126,52149],{"class":51636},[37,88128,51643],{"class":50},[37,88130,88131,88133,88135,88137],{"class":39,"line":232},[37,88132,11562],{"class":54},[37,88134,70307],{"class":61},[37,88136,13905],{"class":54},[37,88138,15913],{"class":50},[37,88140,88141,88143,88146],{"class":39,"line":238},[37,88142,71952],{"class":50},[37,88144,88145],{"class":185},"'pink'",[37,88147,31805],{"class":50},[37,88149,88150,88152,88154],{"class":39,"line":244},[37,88151,71962],{"class":50},[37,88153,1160],{"class":61},[37,88155,31805],{"class":50},[37,88157,88158,88161,88164,88166,88169],{"class":39,"line":250},[37,88159,88160],{"class":50},"      hobby: [",[37,88162,88163],{"class":185},"'乒乓球'",[37,88165,12776],{"class":50},[37,88167,88168],{"class":185},"'足球'",[37,88170,88171],{"class":50},"],\n",[37,88173,88174],{"class":39,"line":256},[37,88175,78207],{"class":50},[37,88177,88178,88181],{"class":39,"line":261},[37,88179,88180],{"class":50},"        baby: ",[37,88182,88183],{"class":185},"'小pink'\n",[37,88185,88186],{"class":39,"line":267},[37,88187,52734],{"class":50},[37,88189,88190],{"class":39,"line":283},[37,88191,2544],{"class":50},[37,88193,88194,88196,88199,88201],{"class":39,"line":288},[37,88195,11562],{"class":54},[37,88197,88198],{"class":61}," o",[37,88200,13905],{"class":54},[37,88202,88203],{"class":50}," {}\n",[37,88205,88206],{"class":39,"line":294},[37,88207,88208],{"class":43},"    \u002F\u002F 拷贝函数\n",[37,88210,88211,88213,88216,88218,88221,88223,88226],{"class":39,"line":300},[37,88212,70420],{"class":54},[37,88214,88215],{"class":2320}," deepCopy",[37,88217,165],{"class":50},[37,88219,88220],{"class":159},"newObj",[37,88222,12776],{"class":50},[37,88224,88225],{"class":159},"oldObj",[37,88227,12783],{"class":50},[37,88229,88230,88232,88234,88236,88239,88241],{"class":39,"line":306},[37,88231,52620],{"class":54},[37,88233,2027],{"class":50},[37,88235,52183],{"class":54},[37,88237,88238],{"class":50}," k ",[37,88240,26385],{"class":54},[37,88242,88243],{"class":50}," oldObj) {\n",[37,88245,88246],{"class":39,"line":312},[37,88247,88248],{"class":43},"        \u002F\u002F 处理数组的问题\n",[37,88250,88251],{"class":39,"line":317},[37,88252,88253],{"class":43},"        \u002F\u002F 判断是否属于数组\n",[37,88255,88256],{"class":39,"line":323},[37,88257,88258],{"class":43},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[37,88260,88261,88263,88266,88269,88272],{"class":39,"line":337},[37,88262,2854],{"class":54},[37,88264,88265],{"class":50}," (oldObj[k] ",[37,88267,88268],{"class":54},"instanceof",[37,88270,88271],{"class":2320}," Array",[37,88273,12783],{"class":50},[37,88275,88276],{"class":39,"line":342},[37,88277,88278],{"class":43},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[37,88280,88281],{"class":39,"line":347},[37,88282,88283],{"class":43},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[37,88285,88286,88289,88291],{"class":39,"line":352},[37,88287,88288],{"class":50},"          newObj[k] ",[37,88290,55],{"class":54},[37,88292,52174],{"class":50},[37,88294,88295,88298],{"class":39,"line":357},[37,88296,88297],{"class":2320},"          deepCopy",[37,88299,88300],{"class":50},"(newObj[k], oldObj[k])\n",[37,88302,88303,88305,88307,88309,88311,88313,88316],{"class":39,"line":362},[37,88304,80415],{"class":50},[37,88306,2066],{"class":54},[37,88308,2069],{"class":54},[37,88310,88265],{"class":50},[37,88312,88268],{"class":54},[37,88314,88315],{"class":2320}," Object",[37,88317,12783],{"class":50},[37,88319,88320,88322,88324],{"class":39,"line":367},[37,88321,88288],{"class":50},[37,88323,55],{"class":54},[37,88325,88203],{"class":50},[37,88327,88328,88330],{"class":39,"line":373},[37,88329,88297],{"class":2320},[37,88331,88300],{"class":50},[37,88333,88334,88336,88338],{"class":39,"line":392},[37,88335,80415],{"class":50},[37,88337,2066],{"class":54},[37,88339,15913],{"class":50},[37,88341,88342],{"class":39,"line":398},[37,88343,88344],{"class":43},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[37,88346,88347],{"class":39,"line":409},[37,88348,88349],{"class":43},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[37,88351,88352,88354,88356],{"class":39,"line":415},[37,88353,88288],{"class":50},[37,88355,55],{"class":54},[37,88357,88358],{"class":50}," oldObj[k]\n",[37,88360,88361],{"class":39,"line":420},[37,88362,2886],{"class":50},[37,88364,88365],{"class":39,"line":425},[37,88366,52734],{"class":50},[37,88368,88369],{"class":39,"line":431},[37,88370,2544],{"class":50},[37,88372,88373,88376,88379],{"class":39,"line":436},[37,88374,88375],{"class":2320},"    deepCopy",[37,88377,88378],{"class":50},"(o, obj) ",[37,88380,88381],{"class":43},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[37,88383,88384,88386,88388],{"class":39,"line":442},[37,88385,74089],{"class":50},[37,88387,58583],{"class":2320},[37,88389,88390],{"class":50},"(o)\n",[37,88392,88393,88396,88398],{"class":39,"line":8374},[37,88394,88395],{"class":50},"    o.age ",[37,88397,55],{"class":54},[37,88399,88400],{"class":61}," 20\n",[37,88402,88403,88406,88408,88410,88412],{"class":39,"line":8386},[37,88404,88405],{"class":50},"    o.hobby[",[37,88407,135],{"class":61},[37,88409,4793],{"class":50},[37,88411,55],{"class":54},[37,88413,88414],{"class":185}," '篮球'\n",[37,88416,88417,88420,88422],{"class":39,"line":8398},[37,88418,88419],{"class":50},"    o.family ",[37,88421,55],{"class":54},[37,88423,88424],{"class":185}," '老pink'\n",[37,88426,88427,88429,88431],{"class":39,"line":10057},[37,88428,74089],{"class":50},[37,88430,58583],{"class":2320},[37,88432,70372],{"class":50},[37,88434,88435,88437,88439],{"class":39,"line":10082},[37,88436,52753],{"class":50},[37,88438,52149],{"class":51636},[37,88440,51643],{"class":50},[37,88442,88443,88445,88447],{"class":39,"line":10105},[37,88444,52121],{"class":50},[37,88446,52136],{"class":51636},[37,88448,51643],{"class":50},[37,88450,88451],{"class":39,"line":10129},[37,88452,2757],{"emptyLinePlaceholder":454},[37,88454,88455,88457,88459],{"class":39,"line":10134},[37,88456,52121],{"class":50},[37,88458,50971],{"class":51636},[37,88460,51643],{"class":50},[14,88462,88463],{},[1838,88464],{"alt":32,"src":88465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22339,88467,88469,88470],{"id":88468},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[673,88471,88472],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88474,88475],{},[51,88476,88477],{"href":88477,"rel":88478},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24206],[14,88480,88481],{},"lodash里边的方法都要加上一个下划线_",[14,88483,88484],{},"_.cloneDeep()",[27,88486,88488],{"className":50969,"code":88487,"language":50971,"meta":32,"style":32},"\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",[34,88489,88490,88500,88514,88518,88526,88540,88560,88572,88580,88584,88592,88597,88616,88624,88634,88642,88650,88662,88666,88672,88676,88680,88696,88704,88713,88721,88729,88737,88741],{"__ignoreMap":32},[37,88491,88492,88494,88496,88498],{"class":39,"line":40},[37,88493,51633],{"class":50},[37,88495,51637],{"class":51636},[37,88497,51640],{"class":2320},[37,88499,51643],{"class":50},[37,88501,88502,88504,88506,88508,88510,88512],{"class":39,"line":47},[37,88503,1418],{"class":50},[37,88505,50971],{"class":51636},[37,88507,51652],{"class":2320},[37,88509,55],{"class":50},[37,88511,51657],{"class":185},[37,88513,51643],{"class":50},[37,88515,88516],{"class":39,"line":104},[37,88517,2757],{"emptyLinePlaceholder":454},[37,88519,88520,88522,88524],{"class":39,"line":113},[37,88521,1418],{"class":50},[37,88523,51670],{"class":51636},[37,88525,51643],{"class":50},[37,88527,88528,88530,88532,88534,88536,88538],{"class":39,"line":189},[37,88529,52480],{"class":50},[37,88531,51680],{"class":51636},[37,88533,51683],{"class":2320},[37,88535,55],{"class":50},[37,88537,51688],{"class":185},[37,88539,51643],{"class":50},[37,88541,88542,88544,88546,88548,88550,88552,88554,88556,88558],{"class":39,"line":195},[37,88543,52480],{"class":50},[37,88545,51680],{"class":51636},[37,88547,15261],{"class":2320},[37,88549,55],{"class":50},[37,88551,51727],{"class":185},[37,88553,51707],{"class":2320},[37,88555,55],{"class":50},[37,88557,51734],{"class":185},[37,88559,51643],{"class":50},[37,88561,88562,88564,88566,88568,88570],{"class":39,"line":201},[37,88563,52480],{"class":50},[37,88565,51743],{"class":51636},[37,88567,51746],{"class":50},[37,88569,51743],{"class":51636},[37,88571,51643],{"class":50},[37,88573,88574,88576,88578],{"class":39,"line":207},[37,88575,52121],{"class":50},[37,88577,51670],{"class":51636},[37,88579,51643],{"class":50},[37,88581,88582],{"class":39,"line":213},[37,88583,2757],{"emptyLinePlaceholder":454},[37,88585,88586,88588,88590],{"class":39,"line":218},[37,88587,1418],{"class":50},[37,88589,52136],{"class":51636},[37,88591,51643],{"class":50},[37,88593,88594],{"class":39,"line":227},[37,88595,88596],{"class":43},"  \u003C!-- 先引用这个库 -->\n",[37,88598,88599,88601,88603,88605,88607,88610,88612,88614],{"class":39,"line":232},[37,88600,52480],{"class":50},[37,88602,52149],{"class":51636},[37,88604,55575],{"class":2320},[37,88606,55],{"class":50},[37,88608,88609],{"class":185},"\"lodash.min.js\"",[37,88611,55650],{"class":50},[37,88613,52149],{"class":51636},[37,88615,51643],{"class":50},[37,88617,88618,88620,88622],{"class":39,"line":238},[37,88619,52480],{"class":50},[37,88621,52149],{"class":51636},[37,88623,51643],{"class":50},[37,88625,88626,88628,88630,88632],{"class":39,"line":244},[37,88627,11562],{"class":54},[37,88629,70307],{"class":61},[37,88631,13905],{"class":54},[37,88633,15913],{"class":50},[37,88635,88636,88638,88640],{"class":39,"line":250},[37,88637,71952],{"class":50},[37,88639,88145],{"class":185},[37,88641,31805],{"class":50},[37,88643,88644,88646,88648],{"class":39,"line":256},[37,88645,71962],{"class":50},[37,88647,1160],{"class":61},[37,88649,31805],{"class":50},[37,88651,88652,88654,88656,88658,88660],{"class":39,"line":261},[37,88653,88160],{"class":50},[37,88655,88163],{"class":185},[37,88657,12776],{"class":50},[37,88659,88168],{"class":185},[37,88661,88171],{"class":50},[37,88663,88664],{"class":39,"line":267},[37,88665,78207],{"class":50},[37,88667,88668,88670],{"class":39,"line":283},[37,88669,88180],{"class":50},[37,88671,88183],{"class":185},[37,88673,88674],{"class":39,"line":288},[37,88675,52734],{"class":50},[37,88677,88678],{"class":39,"line":294},[37,88679,2544],{"class":50},[37,88681,88682,88684,88686,88688,88691,88694],{"class":39,"line":300},[37,88683,11562],{"class":54},[37,88685,88198],{"class":61},[37,88687,13905],{"class":54},[37,88689,88690],{"class":50}," _.",[37,88692,88693],{"class":2320},"cloneDeep",[37,88695,70372],{"class":50},[37,88697,88698,88700,88702],{"class":39,"line":306},[37,88699,74089],{"class":50},[37,88701,58583],{"class":2320},[37,88703,88390],{"class":50},[37,88705,88706,88709,88711],{"class":39,"line":312},[37,88707,88708],{"class":50},"    o.family.baby ",[37,88710,55],{"class":54},[37,88712,88424],{"class":185},[37,88714,88715,88717,88719],{"class":39,"line":317},[37,88716,74089],{"class":50},[37,88718,58583],{"class":2320},[37,88720,70372],{"class":50},[37,88722,88723,88725,88727],{"class":39,"line":323},[37,88724,52753],{"class":50},[37,88726,52149],{"class":51636},[37,88728,51643],{"class":50},[37,88730,88731,88733,88735],{"class":39,"line":337},[37,88732,52121],{"class":50},[37,88734,52136],{"class":51636},[37,88736,51643],{"class":50},[37,88738,88739],{"class":39,"line":342},[37,88740,2757],{"emptyLinePlaceholder":454},[37,88742,88743,88745,88747],{"class":39,"line":347},[37,88744,52121],{"class":50},[37,88746,50971],{"class":51636},[37,88748,51643],{"class":50},[14,88750,88751],{},[1838,88752],{"alt":32,"src":88753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22339,88755,88757],{"id":88756},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[27,88759,88761],{"className":50969,"code":88760,"language":50971,"meta":32,"style":32},"\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",[34,88762,88763,88773,88787,88791,88799,88813,88833,88845,88853,88857,88865,88873,88883,88891,88899,88911,88915,88921,88925,88929,88934,88939,88944,88970,88978,88987,88995,89003,89011,89015],{"__ignoreMap":32},[37,88764,88765,88767,88769,88771],{"class":39,"line":40},[37,88766,51633],{"class":50},[37,88768,51637],{"class":51636},[37,88770,51640],{"class":2320},[37,88772,51643],{"class":50},[37,88774,88775,88777,88779,88781,88783,88785],{"class":39,"line":47},[37,88776,1418],{"class":50},[37,88778,50971],{"class":51636},[37,88780,51652],{"class":2320},[37,88782,55],{"class":50},[37,88784,51657],{"class":185},[37,88786,51643],{"class":50},[37,88788,88789],{"class":39,"line":104},[37,88790,2757],{"emptyLinePlaceholder":454},[37,88792,88793,88795,88797],{"class":39,"line":113},[37,88794,1418],{"class":50},[37,88796,51670],{"class":51636},[37,88798,51643],{"class":50},[37,88800,88801,88803,88805,88807,88809,88811],{"class":39,"line":189},[37,88802,52480],{"class":50},[37,88804,51680],{"class":51636},[37,88806,51683],{"class":2320},[37,88808,55],{"class":50},[37,88810,51688],{"class":185},[37,88812,51643],{"class":50},[37,88814,88815,88817,88819,88821,88823,88825,88827,88829,88831],{"class":39,"line":195},[37,88816,52480],{"class":50},[37,88818,51680],{"class":51636},[37,88820,15261],{"class":2320},[37,88822,55],{"class":50},[37,88824,51727],{"class":185},[37,88826,51707],{"class":2320},[37,88828,55],{"class":50},[37,88830,51734],{"class":185},[37,88832,51643],{"class":50},[37,88834,88835,88837,88839,88841,88843],{"class":39,"line":201},[37,88836,52480],{"class":50},[37,88838,51743],{"class":51636},[37,88840,51746],{"class":50},[37,88842,51743],{"class":51636},[37,88844,51643],{"class":50},[37,88846,88847,88849,88851],{"class":39,"line":207},[37,88848,52121],{"class":50},[37,88850,51670],{"class":51636},[37,88852,51643],{"class":50},[37,88854,88855],{"class":39,"line":213},[37,88856,2757],{"emptyLinePlaceholder":454},[37,88858,88859,88861,88863],{"class":39,"line":218},[37,88860,1418],{"class":50},[37,88862,52136],{"class":51636},[37,88864,51643],{"class":50},[37,88866,88867,88869,88871],{"class":39,"line":227},[37,88868,52480],{"class":50},[37,88870,52149],{"class":51636},[37,88872,51643],{"class":50},[37,88874,88875,88877,88879,88881],{"class":39,"line":232},[37,88876,11562],{"class":54},[37,88878,70307],{"class":61},[37,88880,13905],{"class":54},[37,88882,15913],{"class":50},[37,88884,88885,88887,88889],{"class":39,"line":238},[37,88886,71952],{"class":50},[37,88888,88145],{"class":185},[37,88890,31805],{"class":50},[37,88892,88893,88895,88897],{"class":39,"line":244},[37,88894,71962],{"class":50},[37,88896,1160],{"class":61},[37,88898,31805],{"class":50},[37,88900,88901,88903,88905,88907,88909],{"class":39,"line":250},[37,88902,88160],{"class":50},[37,88904,88163],{"class":185},[37,88906,12776],{"class":50},[37,88908,88168],{"class":185},[37,88910,88171],{"class":50},[37,88912,88913],{"class":39,"line":256},[37,88914,78207],{"class":50},[37,88916,88917,88919],{"class":39,"line":261},[37,88918,88180],{"class":50},[37,88920,88183],{"class":185},[37,88922,88923],{"class":39,"line":267},[37,88924,52734],{"class":50},[37,88926,88927],{"class":39,"line":283},[37,88928,2544],{"class":50},[37,88930,88931],{"class":39,"line":288},[37,88932,88933],{"class":43},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[37,88935,88936],{"class":39,"line":294},[37,88937,88938],{"class":43},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[37,88940,88941],{"class":39,"line":300},[37,88942,88943],{"class":43},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[37,88945,88946,88948,88950,88952,88955,88957,88960,88962,88964,88966,88968],{"class":39,"line":306},[37,88947,11562],{"class":54},[37,88949,88198],{"class":61},[37,88951,13905],{"class":54},[37,88953,88954],{"class":61}," JSON",[37,88956,1068],{"class":50},[37,88958,88959],{"class":2320},"parse",[37,88961,165],{"class":50},[37,88963,72000],{"class":61},[37,88965,1068],{"class":50},[37,88967,72005],{"class":2320},[37,88969,72008],{"class":50},[37,88971,88972,88974,88976],{"class":39,"line":312},[37,88973,74089],{"class":50},[37,88975,58583],{"class":2320},[37,88977,88390],{"class":50},[37,88979,88980,88982,88984],{"class":39,"line":317},[37,88981,88708],{"class":50},[37,88983,55],{"class":54},[37,88985,88986],{"class":185}," '123'\n",[37,88988,88989,88991,88993],{"class":39,"line":323},[37,88990,74089],{"class":50},[37,88992,58583],{"class":2320},[37,88994,70372],{"class":50},[37,88996,88997,88999,89001],{"class":39,"line":337},[37,88998,52753],{"class":50},[37,89000,52149],{"class":51636},[37,89002,51643],{"class":50},[37,89004,89005,89007,89009],{"class":39,"line":342},[37,89006,52121],{"class":50},[37,89008,52136],{"class":51636},[37,89010,51643],{"class":50},[37,89012,89013],{"class":39,"line":347},[37,89014,2757],{"emptyLinePlaceholder":454},[37,89016,89017,89019,89021],{"class":39,"line":352},[37,89018,52121],{"class":50},[37,89020,50971],{"class":51636},[37,89022,51643],{"class":50},[14,89024,89025],{},[1838,89026],{"alt":32,"src":89027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[469,89029,89031],{"id":89030},"_415-异常处理","4.15 异常处理",[481,89033,89034],{},[484,89035,89036],{},"throw抛异常",[14,89038,89039],{},[1838,89040],{"alt":32,"src":89041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[481,89043,89044],{"start":47},[484,89045,89046],{},"try\u002Fcatch 捕获错误信息",[14,89048,89049],{},[1838,89050],{"alt":32,"src":89051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[27,89053,89055],{"className":50969,"code":89054,"language":50971,"meta":32,"style":32},"\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",[34,89056,89057,89067,89081,89085,89093,89107,89127,89139,89147,89151,89159,89171,89179,89188,89195,89200,89219,89228,89239,89244,89254,89259,89264,89269,89286,89290,89295,89302,89314,89318,89330,89334,89338,89343,89348,89355,89363,89371,89375],{"__ignoreMap":32},[37,89058,89059,89061,89063,89065],{"class":39,"line":40},[37,89060,51633],{"class":50},[37,89062,51637],{"class":51636},[37,89064,51640],{"class":2320},[37,89066,51643],{"class":50},[37,89068,89069,89071,89073,89075,89077,89079],{"class":39,"line":47},[37,89070,1418],{"class":50},[37,89072,50971],{"class":51636},[37,89074,51652],{"class":2320},[37,89076,55],{"class":50},[37,89078,51657],{"class":185},[37,89080,51643],{"class":50},[37,89082,89083],{"class":39,"line":104},[37,89084,2757],{"emptyLinePlaceholder":454},[37,89086,89087,89089,89091],{"class":39,"line":113},[37,89088,1418],{"class":50},[37,89090,51670],{"class":51636},[37,89092,51643],{"class":50},[37,89094,89095,89097,89099,89101,89103,89105],{"class":39,"line":189},[37,89096,52480],{"class":50},[37,89098,51680],{"class":51636},[37,89100,51683],{"class":2320},[37,89102,55],{"class":50},[37,89104,51688],{"class":185},[37,89106,51643],{"class":50},[37,89108,89109,89111,89113,89115,89117,89119,89121,89123,89125],{"class":39,"line":195},[37,89110,52480],{"class":50},[37,89112,51680],{"class":51636},[37,89114,15261],{"class":2320},[37,89116,55],{"class":50},[37,89118,51727],{"class":185},[37,89120,51707],{"class":2320},[37,89122,55],{"class":50},[37,89124,51734],{"class":185},[37,89126,51643],{"class":50},[37,89128,89129,89131,89133,89135,89137],{"class":39,"line":201},[37,89130,52480],{"class":50},[37,89132,51743],{"class":51636},[37,89134,51746],{"class":50},[37,89136,51743],{"class":51636},[37,89138,51643],{"class":50},[37,89140,89141,89143,89145],{"class":39,"line":207},[37,89142,52121],{"class":50},[37,89144,51670],{"class":51636},[37,89146,51643],{"class":50},[37,89148,89149],{"class":39,"line":213},[37,89150,2757],{"emptyLinePlaceholder":454},[37,89152,89153,89155,89157],{"class":39,"line":218},[37,89154,1418],{"class":50},[37,89156,52136],{"class":51636},[37,89158,51643],{"class":50},[37,89160,89161,89163,89165,89167,89169],{"class":39,"line":227},[37,89162,52480],{"class":50},[37,89164,14],{"class":51636},[37,89166,53830],{"class":50},[37,89168,14],{"class":51636},[37,89170,51643],{"class":50},[37,89172,89173,89175,89177],{"class":39,"line":232},[37,89174,52480],{"class":50},[37,89176,52149],{"class":51636},[37,89178,51643],{"class":50},[37,89180,89181,89183,89186],{"class":39,"line":238},[37,89182,70420],{"class":54},[37,89184,89185],{"class":2320}," fn",[37,89187,11194],{"class":50},[37,89189,89190,89193],{"class":39,"line":244},[37,89191,89192],{"class":54},"      try",[37,89194,15913],{"class":50},[37,89196,89197],{"class":39,"line":250},[37,89198,89199],{"class":43},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[37,89201,89202,89204,89206,89208,89210,89212,89214,89217],{"class":39,"line":256},[37,89203,61606],{"class":54},[37,89205,7173],{"class":61},[37,89207,13905],{"class":54},[37,89209,54732],{"class":50},[37,89211,54735],{"class":2320},[37,89213,165],{"class":50},[37,89215,89216],{"class":185},"'.p'",[37,89218,280],{"class":50},[37,89220,89221,89224,89226],{"class":39,"line":261},[37,89222,89223],{"class":50},"        p.style.color ",[37,89225,55],{"class":54},[37,89227,67387],{"class":185},[37,89229,89230,89233,89236],{"class":39,"line":267},[37,89231,89232],{"class":50},"      } ",[37,89234,89235],{"class":54},"catch",[37,89237,89238],{"class":50}," (err) {\n",[37,89240,89241],{"class":39,"line":283},[37,89242,89243],{"class":43},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[37,89245,89246,89249,89251],{"class":39,"line":288},[37,89247,89248],{"class":50},"        console.",[37,89250,58583],{"class":2320},[37,89252,89253],{"class":50},"(err.message)\n",[37,89255,89256],{"class":39,"line":294},[37,89257,89258],{"class":43},"        \u002F\u002F 想要中断程序，需要加return\n",[37,89260,89261],{"class":39,"line":300},[37,89262,89263],{"class":43},"        \u002F\u002F return\n",[37,89265,89266],{"class":39,"line":306},[37,89267,89268],{"class":43},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[37,89270,89271,89274,89276,89279,89281,89284],{"class":39,"line":312},[37,89272,89273],{"class":54},"        throw",[37,89275,11919],{"class":54},[37,89277,89278],{"class":2320}," Error",[37,89280,165],{"class":50},[37,89282,89283],{"class":185},"'你看看，选择器错误了吧'",[37,89285,280],{"class":50},[37,89287,89288],{"class":39,"line":317},[37,89289,52734],{"class":50},[37,89291,89292],{"class":39,"line":323},[37,89293,89294],{"class":43},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[37,89296,89297,89300],{"class":39,"line":337},[37,89298,89299],{"class":54},"      finally",[37,89301,15913],{"class":50},[37,89303,89304,89307,89309,89312],{"class":39,"line":342},[37,89305,89306],{"class":2320},"        alert",[37,89308,165],{"class":50},[37,89310,89311],{"class":185},"'弹出对话框'",[37,89313,280],{"class":50},[37,89315,89316],{"class":39,"line":347},[37,89317,52734],{"class":50},[37,89319,89320,89322,89324,89326,89328],{"class":39,"line":352},[37,89321,58580],{"class":50},[37,89323,58583],{"class":2320},[37,89325,165],{"class":50},[37,89327,984],{"class":61},[37,89329,280],{"class":50},[37,89331,89332],{"class":39,"line":357},[37,89333,2757],{"emptyLinePlaceholder":454},[37,89335,89336],{"class":39,"line":362},[37,89337,2544],{"class":50},[37,89339,89340],{"class":39,"line":367},[37,89341,89342],{"class":43},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[37,89344,89345],{"class":39,"line":373},[37,89346,89347],{"class":43},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[37,89349,89350,89353],{"class":39,"line":392},[37,89351,89352],{"class":2320},"    fn",[37,89354,2333],{"class":50},[37,89356,89357,89359,89361],{"class":39,"line":398},[37,89358,52753],{"class":50},[37,89360,52149],{"class":51636},[37,89362,51643],{"class":50},[37,89364,89365,89367,89369],{"class":39,"line":409},[37,89366,52121],{"class":50},[37,89368,52136],{"class":51636},[37,89370,51643],{"class":50},[37,89372,89373],{"class":39,"line":415},[37,89374,2757],{"emptyLinePlaceholder":454},[37,89376,89377,89379,89381],{"class":39,"line":420},[37,89378,52121],{"class":50},[37,89380,50971],{"class":51636},[37,89382,51643],{"class":50},[14,89384,89385],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[481,89387,89388],{"start":104},[484,89389,89390],{},"debugger",[14,89392,89393],{},[1838,89394],{"alt":32,"src":89395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89397,89398],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[469,89400,89402],{"id":89401},"_416-处理this","4.16 处理this",[498,89404,89406],{"id":89405},"_4161-this的指向","4.16.1 this的指向",[481,89408,89409],{},[484,89410,89411],{},"普通函数的this",[14,89413,89414],{},[1838,89415],{"alt":32,"src":89416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[481,89418,89419],{"start":47},[484,89420,89421],{},"箭头函数的this",[14,89423,89424],{},[1838,89425],{"alt":32,"src":89426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89428,89429],{},[1838,89430],{"alt":32,"src":89431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89433,89434],{},[1838,89435],{"alt":32,"src":89436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[498,89438,89440],{"id":89439},"_4162-this的改变","4.16.2 this的改变",[14,89442,89443],{},"call() apply() bind()",[481,89445,89446],{},[484,89447,89448],{},"call()",[14,89450,89451],{},[1838,89452],{"alt":32,"src":89453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89455,89456],{},"两个作用：①调用函数；②改变this指向",[27,89458,89460],{"className":53403,"code":89459,"language":53405,"meta":32,"style":32},"\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",[34,89461,89462,89470,89478,89482,89487,89491,89496,89501,89506,89510,89515,89523],{"__ignoreMap":32},[37,89463,89464,89466,89468],{"class":39,"line":40},[37,89465,1418],{"class":50},[37,89467,52136],{"class":51636},[37,89469,51643],{"class":50},[37,89471,89472,89474,89476],{"class":39,"line":47},[37,89473,52480],{"class":50},[37,89475,52149],{"class":51636},[37,89477,51643],{"class":50},[37,89479,89480],{"class":39,"line":104},[37,89481,71859],{"class":50},[37,89483,89484],{"class":39,"line":113},[37,89485,89486],{"class":50},"      uname: 'pink'\n",[37,89488,89489],{"class":39,"line":189},[37,89490,2544],{"class":50},[37,89492,89493],{"class":39,"line":195},[37,89494,89495],{"class":50},"    function fn(x, y) {\n",[37,89497,89498],{"class":39,"line":201},[37,89499,89500],{"class":50},"      console.log(this)  \u002F\u002Fwindow\n",[37,89502,89503],{"class":39,"line":207},[37,89504,89505],{"class":50},"      console.log(x + y)\n",[37,89507,89508],{"class":39,"line":213},[37,89509,2544],{"class":50},[37,89511,89512],{"class":39,"line":218},[37,89513,89514],{"class":50},"    fn.call(obj, 1, 2)\n",[37,89516,89517,89519,89521],{"class":39,"line":227},[37,89518,52753],{"class":50},[37,89520,52149],{"class":51636},[37,89522,51643],{"class":50},[37,89524,89525,89527,89529],{"class":39,"line":232},[37,89526,52121],{"class":50},[37,89528,52136],{"class":51636},[37,89530,51643],{"class":50},[14,89532,89533],{},[1838,89534],{"alt":32,"src":89535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[481,89537,89538],{"start":47},[484,89539,89540],{},"apply()",[14,89542,89543],{},[1838,89544],{"alt":32,"src":89545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89547,89456],{},[14,89549,89550],{},"call传递的是普通参数，而apply必须传递的是数组",[27,89552,89554],{"className":50969,"code":89553,"language":50971,"meta":32,"style":32},"\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",[34,89555,89556,89566,89580,89584,89592,89606,89626,89638,89646,89650,89658,89666,89676,89683,89687,89692,89708,89720,89734,89738,89743,89762,89767,89771,89776,89781,89789,89794,89816,89821,89837,89853,89865,89869,89874,89893,89901,89909,89913],{"__ignoreMap":32},[37,89557,89558,89560,89562,89564],{"class":39,"line":40},[37,89559,51633],{"class":50},[37,89561,51637],{"class":51636},[37,89563,51640],{"class":2320},[37,89565,51643],{"class":50},[37,89567,89568,89570,89572,89574,89576,89578],{"class":39,"line":47},[37,89569,1418],{"class":50},[37,89571,50971],{"class":51636},[37,89573,51652],{"class":2320},[37,89575,55],{"class":50},[37,89577,51657],{"class":185},[37,89579,51643],{"class":50},[37,89581,89582],{"class":39,"line":104},[37,89583,2757],{"emptyLinePlaceholder":454},[37,89585,89586,89588,89590],{"class":39,"line":113},[37,89587,1418],{"class":50},[37,89589,51670],{"class":51636},[37,89591,51643],{"class":50},[37,89593,89594,89596,89598,89600,89602,89604],{"class":39,"line":189},[37,89595,52480],{"class":50},[37,89597,51680],{"class":51636},[37,89599,51683],{"class":2320},[37,89601,55],{"class":50},[37,89603,51688],{"class":185},[37,89605,51643],{"class":50},[37,89607,89608,89610,89612,89614,89616,89618,89620,89622,89624],{"class":39,"line":195},[37,89609,52480],{"class":50},[37,89611,51680],{"class":51636},[37,89613,15261],{"class":2320},[37,89615,55],{"class":50},[37,89617,51727],{"class":185},[37,89619,51707],{"class":2320},[37,89621,55],{"class":50},[37,89623,51734],{"class":185},[37,89625,51643],{"class":50},[37,89627,89628,89630,89632,89634,89636],{"class":39,"line":201},[37,89629,52480],{"class":50},[37,89631,51743],{"class":51636},[37,89633,51746],{"class":50},[37,89635,51743],{"class":51636},[37,89637,51643],{"class":50},[37,89639,89640,89642,89644],{"class":39,"line":207},[37,89641,52121],{"class":50},[37,89643,51670],{"class":51636},[37,89645,51643],{"class":50},[37,89647,89648],{"class":39,"line":213},[37,89649,2757],{"emptyLinePlaceholder":454},[37,89651,89652,89654,89656],{"class":39,"line":218},[37,89653,1418],{"class":50},[37,89655,52136],{"class":51636},[37,89657,51643],{"class":50},[37,89659,89660,89662,89664],{"class":39,"line":227},[37,89661,52480],{"class":50},[37,89663,52149],{"class":51636},[37,89665,51643],{"class":50},[37,89667,89668,89670,89672,89674],{"class":39,"line":232},[37,89669,11562],{"class":54},[37,89671,70307],{"class":61},[37,89673,13905],{"class":54},[37,89675,15913],{"class":50},[37,89677,89678,89680],{"class":39,"line":238},[37,89679,71962],{"class":50},[37,89681,89682],{"class":61},"18\n",[37,89684,89685],{"class":39,"line":244},[37,89686,2544],{"class":50},[37,89688,89689],{"class":39,"line":250},[37,89690,89691],{"class":43},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[37,89693,89694,89696,89698,89700,89702,89704,89706],{"class":39,"line":256},[37,89695,70420],{"class":54},[37,89697,89185],{"class":2320},[37,89699,165],{"class":50},[37,89701,1329],{"class":159},[37,89703,12776],{"class":50},[37,89705,1354],{"class":159},[37,89707,12783],{"class":50},[37,89709,89710,89712,89714,89716,89718],{"class":39,"line":261},[37,89711,58580],{"class":50},[37,89713,58583],{"class":2320},[37,89715,165],{"class":50},[37,89717,87328],{"class":61},[37,89719,280],{"class":50},[37,89721,89722,89724,89726,89729,89731],{"class":39,"line":267},[37,89723,58580],{"class":50},[37,89725,58583],{"class":2320},[37,89727,89728],{"class":50},"(x ",[37,89730,993],{"class":54},[37,89732,89733],{"class":50}," y)\n",[37,89735,89736],{"class":39,"line":283},[37,89737,2544],{"class":50},[37,89739,89740],{"class":39,"line":288},[37,89741,89742],{"class":43},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[37,89744,89745,89748,89751,89754,89756,89758,89760],{"class":39,"line":294},[37,89746,89747],{"class":50},"    fn.",[37,89749,89750],{"class":2320},"apply",[37,89752,89753],{"class":50},"(obj, [",[37,89755,332],{"class":61},[37,89757,12776],{"class":50},[37,89759,602],{"class":61},[37,89761,101],{"class":50},[37,89763,89764],{"class":39,"line":300},[37,89765,89766],{"class":43},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[37,89768,89769],{"class":39,"line":306},[37,89770,2757],{"emptyLinePlaceholder":454},[37,89772,89773],{"class":39,"line":312},[37,89774,89775],{"class":43},"    \u002F\u002F 使用场景：求数组最大值\n",[37,89777,89778],{"class":39,"line":317},[37,89779,89780],{"class":43},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[37,89782,89783,89786],{"class":39,"line":323},[37,89784,89785],{"class":43},"    \u002F\u002F console.log(max)",[37,89787,89788],{"class":43},"   \u002F\u002F3\n",[37,89790,89791],{"class":39,"line":337},[37,89792,89793],{"class":43},"    \u002F\u002F 指向空或者Math都是可以的\n",[37,89795,89796,89798,89800,89802,89804,89806,89808,89810,89812,89814],{"class":39,"line":342},[37,89797,11562],{"class":54},[37,89799,58031],{"class":61},[37,89801,13905],{"class":54},[37,89803,52562],{"class":50},[37,89805,154],{"class":61},[37,89807,12776],{"class":50},[37,89809,1015],{"class":61},[37,89811,12776],{"class":50},[37,89813,1045],{"class":61},[37,89815,389],{"class":50},[37,89817,89818],{"class":39,"line":347},[37,89819,89820],{"class":43},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[37,89822,89823,89825,89827,89829,89832,89834],{"class":39,"line":352},[37,89824,11562],{"class":54},[37,89826,6299],{"class":61},[37,89828,13905],{"class":54},[37,89830,89831],{"class":50}," Math.max.",[37,89833,89750],{"class":2320},[37,89835,89836],{"class":50},"(Math, arr)\n",[37,89838,89839,89841,89844,89846,89849,89851],{"class":39,"line":357},[37,89840,11562],{"class":54},[37,89842,89843],{"class":61}," min",[37,89845,13905],{"class":54},[37,89847,89848],{"class":50}," Math.min.",[37,89850,89750],{"class":2320},[37,89852,89836],{"class":50},[37,89854,89855,89857,89859,89862],{"class":39,"line":362},[37,89856,74089],{"class":50},[37,89858,58583],{"class":2320},[37,89860,89861],{"class":50},"(max, min)     ",[37,89863,89864],{"class":43},"\u002F\u002F100,4\n",[37,89866,89867],{"class":39,"line":367},[37,89868,2757],{"emptyLinePlaceholder":454},[37,89870,89871],{"class":39,"line":373},[37,89872,89873],{"class":43},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[37,89875,89876,89878,89880,89883,89885,89887,89890],{"class":39,"line":392},[37,89877,74089],{"class":50},[37,89879,58583],{"class":2320},[37,89881,89882],{"class":50},"(Max.",[37,89884,6363],{"class":2320},[37,89886,165],{"class":50},[37,89888,89889],{"class":54},"...",[37,89891,89892],{"class":50},"arr))\n",[37,89894,89895,89897,89899],{"class":39,"line":398},[37,89896,52753],{"class":50},[37,89898,52149],{"class":51636},[37,89900,51643],{"class":50},[37,89902,89903,89905,89907],{"class":39,"line":409},[37,89904,52121],{"class":50},[37,89906,52136],{"class":51636},[37,89908,51643],{"class":50},[37,89910,89911],{"class":39,"line":415},[37,89912,2757],{"emptyLinePlaceholder":454},[37,89914,89915,89917,89919],{"class":39,"line":420},[37,89916,52121],{"class":50},[37,89918,50971],{"class":51636},[37,89920,51643],{"class":50},[14,89922,89923],{},[1838,89924],{"alt":32,"src":89925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[481,89927,89928],{"start":104},[484,89929,89930],{},"bind()",[14,89932,89933],{},[1838,89934],{"alt":32,"src":89935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89937,89938],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89940,89941],{},"bind的语法跟call很相似",[27,89943,89945],{"className":53403,"code":89944,"language":53405,"meta":32,"style":32},"\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",[34,89946,89947,89955,89963,89967,89972,89976,89980,89985,89989,89994,89999,90004,90009,90014,90019,90024,90028,90036],{"__ignoreMap":32},[37,89948,89949,89951,89953],{"class":39,"line":40},[37,89950,1418],{"class":50},[37,89952,52136],{"class":51636},[37,89954,51643],{"class":50},[37,89956,89957,89959,89961],{"class":39,"line":47},[37,89958,52480],{"class":50},[37,89960,52149],{"class":51636},[37,89962,51643],{"class":50},[37,89964,89965],{"class":39,"line":104},[37,89966,71859],{"class":50},[37,89968,89969],{"class":39,"line":113},[37,89970,89971],{"class":50},"      age: 18\n",[37,89973,89974],{"class":39,"line":189},[37,89975,2544],{"class":50},[37,89977,89978],{"class":39,"line":195},[37,89979,77478],{"class":50},[37,89981,89982],{"class":39,"line":201},[37,89983,89984],{"class":50},"      console.log(this)\n",[37,89986,89987],{"class":39,"line":207},[37,89988,2544],{"class":50},[37,89990,89991],{"class":39,"line":213},[37,89992,89993],{"class":50},"    \u002F\u002F 1.bind 不会调用函数\n",[37,89995,89996],{"class":39,"line":218},[37,89997,89998],{"class":50},"    \u002F\u002F 2.bind能改变this的指向\n",[37,90000,90001],{"class":39,"line":227},[37,90002,90003],{"class":50},"    fn.bind()\n",[37,90005,90006],{"class":39,"line":232},[37,90007,90008],{"class":50},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[37,90010,90011],{"class":39,"line":238},[37,90012,90013],{"class":50},"    const fun = fn.bind(obj)\n",[37,90015,90016],{"class":39,"line":244},[37,90017,90018],{"class":50},"    \u002F\u002F console.log(fun)\n",[37,90020,90021],{"class":39,"line":250},[37,90022,90023],{"class":50},"    \u002F\u002F 调用,查看this的指向\n",[37,90025,90026],{"class":39,"line":256},[37,90027,52987],{"class":50},[37,90029,90030,90032,90034],{"class":39,"line":261},[37,90031,52753],{"class":50},[37,90033,52149],{"class":51636},[37,90035,51643],{"class":50},[37,90037,90038,90040,90042],{"class":39,"line":267},[37,90039,52121],{"class":50},[37,90041,52136],{"class":51636},[37,90043,51643],{"class":50},[14,90045,90046],{},[1838,90047],{"alt":32,"src":90048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[481,90050,90051],{"start":113},[484,90052,90053],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[27,90055,90057],{"className":53403,"code":90056,"language":53405,"meta":32,"style":32},"\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",[34,90058,90059,90067,90080,90088,90093,90097,90102,90107,90112,90117,90122,90127,90132,90137,90141,90149],{"__ignoreMap":32},[37,90060,90061,90063,90065],{"class":39,"line":40},[37,90062,1418],{"class":50},[37,90064,52136],{"class":51636},[37,90066,51643],{"class":50},[37,90068,90069,90071,90073,90076,90078],{"class":39,"line":47},[37,90070,52480],{"class":50},[37,90072,54223],{"class":51636},[37,90074,90075],{"class":50},">禁用\u003C\u002F",[37,90077,54223],{"class":51636},[37,90079,51643],{"class":50},[37,90081,90082,90084,90086],{"class":39,"line":104},[37,90083,52480],{"class":50},[37,90085,52149],{"class":51636},[37,90087,51643],{"class":50},[37,90089,90090],{"class":39,"line":113},[37,90091,90092],{"class":50},"    const btn = document.querySelector('button')\n",[37,90094,90095],{"class":39,"line":189},[37,90096,59352],{"class":50},[37,90098,90099],{"class":39,"line":195},[37,90100,90101],{"class":50},"      this.disabled = true\n",[37,90103,90104],{"class":39,"line":201},[37,90105,90106],{"class":50},"      \u002F\u002F 定时器是window进行调用的\n",[37,90108,90109],{"class":39,"line":207},[37,90110,90111],{"class":50},"      setTimeout(function () {\n",[37,90113,90114],{"class":39,"line":213},[37,90115,90116],{"class":50},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[37,90118,90119],{"class":39,"line":218},[37,90120,90121],{"class":50},"        this.disabled = false\n",[37,90123,90124],{"class":39,"line":227},[37,90125,90126],{"class":50},"      }.bind(this), 2000)\n",[37,90128,90129],{"class":39,"line":232},[37,90130,90131],{"class":50},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[37,90133,90134],{"class":39,"line":238},[37,90135,90136],{"class":50},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[37,90138,90139],{"class":39,"line":244},[37,90140,33798],{"class":50},[37,90142,90143,90145,90147],{"class":39,"line":250},[37,90144,52753],{"class":50},[37,90146,52149],{"class":51636},[37,90148,51643],{"class":50},[37,90150,90151,90153,90155],{"class":39,"line":256},[37,90152,52121],{"class":50},[37,90154,52136],{"class":51636},[37,90156,51643],{"class":50},[481,90158,90159],{"start":189},[484,90160,22294],{},[14,90162,90163],{},[1838,90164],{"alt":32,"src":90165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[469,90167,90169],{"id":90168},"_417-性能优化","4.17 性能优化",[498,90171,90173],{"id":90172},"_4171-防抖","4.17.1 防抖",[14,90175,90176],{},[1838,90177],{"alt":32,"src":90178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,90180,90181],{},[673,90182,90183],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,90185,90186],{},"防抖实现方式：",[1515,90188,90189],{},[484,90190,90191],{},"lodash 提供了防抖处理",[14,90193,90194],{},"_.debounce(func,[wait=0],[options={}])",[14,90196,90197],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[27,90199,90201],{"className":50969,"code":90200,"language":50971,"meta":32,"style":32},"\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",[34,90202,90203,90213,90227,90231,90239,90253,90273,90285,90293,90299,90309,90321,90333,90344,90356,90366,90376,90389,90393,90401,90409,90413,90421,90439,90457,90465,90484,90494,90503,90514,90519,90523,90528,90533,90538,90563,90571,90579,90583],{"__ignoreMap":32},[37,90204,90205,90207,90209,90211],{"class":39,"line":40},[37,90206,51633],{"class":50},[37,90208,51637],{"class":51636},[37,90210,51640],{"class":2320},[37,90212,51643],{"class":50},[37,90214,90215,90217,90219,90221,90223,90225],{"class":39,"line":47},[37,90216,1418],{"class":50},[37,90218,50971],{"class":51636},[37,90220,51652],{"class":2320},[37,90222,55],{"class":50},[37,90224,51657],{"class":185},[37,90226,51643],{"class":50},[37,90228,90229],{"class":39,"line":104},[37,90230,2757],{"emptyLinePlaceholder":454},[37,90232,90233,90235,90237],{"class":39,"line":113},[37,90234,1418],{"class":50},[37,90236,51670],{"class":51636},[37,90238,51643],{"class":50},[37,90240,90241,90243,90245,90247,90249,90251],{"class":39,"line":189},[37,90242,52480],{"class":50},[37,90244,51680],{"class":51636},[37,90246,51683],{"class":2320},[37,90248,55],{"class":50},[37,90250,51688],{"class":185},[37,90252,51643],{"class":50},[37,90254,90255,90257,90259,90261,90263,90265,90267,90269,90271],{"class":39,"line":195},[37,90256,52480],{"class":50},[37,90258,51680],{"class":51636},[37,90260,15261],{"class":2320},[37,90262,55],{"class":50},[37,90264,51727],{"class":185},[37,90266,51707],{"class":2320},[37,90268,55],{"class":50},[37,90270,51734],{"class":185},[37,90272,51643],{"class":50},[37,90274,90275,90277,90279,90281,90283],{"class":39,"line":201},[37,90276,52480],{"class":50},[37,90278,51743],{"class":51636},[37,90280,51746],{"class":50},[37,90282,51743],{"class":51636},[37,90284,51643],{"class":50},[37,90286,90287,90289,90291],{"class":39,"line":207},[37,90288,52480],{"class":50},[37,90290,446],{"class":51636},[37,90292,51643],{"class":50},[37,90294,90295,90297],{"class":39,"line":213},[37,90296,55088],{"class":2320},[37,90298,15913],{"class":50},[37,90300,90301,90303,90305,90307],{"class":39,"line":218},[37,90302,72932],{"class":61},[37,90304,51773],{"class":50},[37,90306,60841],{"class":61},[37,90308,1669],{"class":50},[37,90310,90311,90313,90315,90317,90319],{"class":39,"line":227},[37,90312,55107],{"class":61},[37,90314,51773],{"class":50},[37,90316,2087],{"class":61},[37,90318,51828],{"class":54},[37,90320,1669],{"class":50},[37,90322,90323,90325,90327,90329,90331],{"class":39,"line":232},[37,90324,55121],{"class":61},[37,90326,51773],{"class":50},[37,90328,2087],{"class":61},[37,90330,51828],{"class":54},[37,90332,1669],{"class":50},[37,90334,90335,90337,90339,90342],{"class":39,"line":238},[37,90336,55220],{"class":61},[37,90338,51773],{"class":50},[37,90340,90341],{"class":61},"gray",[37,90343,1669],{"class":50},[37,90345,90346,90348,90350,90352,90354],{"class":39,"line":244},[37,90347,55258],{"class":61},[37,90349,51773],{"class":50},[37,90351,1334],{"class":61},[37,90353,51828],{"class":54},[37,90355,1669],{"class":50},[37,90357,90358,90360,90362,90364],{"class":39,"line":250},[37,90359,57752],{"class":61},[37,90361,51773],{"class":50},[37,90363,61178],{"class":61},[37,90365,1669],{"class":50},[37,90367,90368,90370,90372,90374],{"class":39,"line":256},[37,90369,57622],{"class":61},[37,90371,51773],{"class":50},[37,90373,51928],{"class":61},[37,90375,1669],{"class":50},[37,90377,90378,90381,90383,90385,90387],{"class":39,"line":261},[37,90379,90380],{"class":61},"      padding-top",[37,90382,51773],{"class":50},[37,90384,836],{"class":61},[37,90386,51828],{"class":54},[37,90388,1669],{"class":50},[37,90390,90391],{"class":39,"line":267},[37,90392,2544],{"class":50},[37,90394,90395,90397,90399],{"class":39,"line":283},[37,90396,52753],{"class":50},[37,90398,446],{"class":51636},[37,90400,51643],{"class":50},[37,90402,90403,90405,90407],{"class":39,"line":288},[37,90404,52121],{"class":50},[37,90406,51670],{"class":51636},[37,90408,51643],{"class":50},[37,90410,90411],{"class":39,"line":294},[37,90412,2757],{"emptyLinePlaceholder":454},[37,90414,90415,90417,90419],{"class":39,"line":300},[37,90416,1418],{"class":50},[37,90418,52136],{"class":51636},[37,90420,51643],{"class":50},[37,90422,90423,90425,90427,90429,90431,90433,90435,90437],{"class":39,"line":306},[37,90424,52480],{"class":50},[37,90426,51947],{"class":51636},[37,90428,53822],{"class":2320},[37,90430,55],{"class":50},[37,90432,53827],{"class":185},[37,90434,55650],{"class":50},[37,90436,51947],{"class":51636},[37,90438,51643],{"class":50},[37,90440,90441,90443,90445,90447,90449,90451,90453,90455],{"class":39,"line":312},[37,90442,52480],{"class":50},[37,90444,52149],{"class":51636},[37,90446,55575],{"class":2320},[37,90448,55],{"class":50},[37,90450,88609],{"class":185},[37,90452,55650],{"class":50},[37,90454,52149],{"class":51636},[37,90456,51643],{"class":50},[37,90458,90459,90461,90463],{"class":39,"line":317},[37,90460,52480],{"class":50},[37,90462,52149],{"class":51636},[37,90464,51643],{"class":50},[37,90466,90467,90469,90471,90473,90475,90477,90479,90482],{"class":39,"line":323},[37,90468,11562],{"class":54},[37,90470,87268],{"class":61},[37,90472,13905],{"class":54},[37,90474,54732],{"class":50},[37,90476,54735],{"class":2320},[37,90478,165],{"class":50},[37,90480,90481],{"class":185},"'.box'",[37,90483,280],{"class":50},[37,90485,90486,90488,90490,90492],{"class":39,"line":337},[37,90487,52555],{"class":54},[37,90489,9779],{"class":50},[37,90491,55],{"class":54},[37,90493,47670],{"class":61},[37,90495,90496,90498,90501],{"class":39,"line":342},[37,90497,70420],{"class":54},[37,90499,90500],{"class":2320}," mouseMove",[37,90502,11194],{"class":50},[37,90504,90505,90508,90510,90512],{"class":39,"line":347},[37,90506,90507],{"class":50},"      box.innerHTML ",[37,90509,55],{"class":54},[37,90511,3382],{"class":50},[37,90513,3052],{"class":54},[37,90515,90516],{"class":39,"line":352},[37,90517,90518],{"class":43},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[37,90520,90521],{"class":39,"line":357},[37,90522,2544],{"class":50},[37,90524,90525],{"class":39,"line":362},[37,90526,90527],{"class":43},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[37,90529,90530],{"class":39,"line":367},[37,90531,90532],{"class":43},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[37,90534,90535],{"class":39,"line":373},[37,90536,90537],{"class":43},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[37,90539,90540,90543,90545,90547,90550,90553,90556,90559,90561],{"class":39,"line":392},[37,90541,90542],{"class":50},"    box.",[37,90544,58149],{"class":2320},[37,90546,165],{"class":50},[37,90548,90549],{"class":185},"'mousemove'",[37,90551,90552],{"class":50},", _.",[37,90554,90555],{"class":2320},"debounce",[37,90557,90558],{"class":50},"(mouseMove, ",[37,90560,65410],{"class":61},[37,90562,175],{"class":50},[37,90564,90565,90567,90569],{"class":39,"line":398},[37,90566,52753],{"class":50},[37,90568,52149],{"class":51636},[37,90570,51643],{"class":50},[37,90572,90573,90575,90577],{"class":39,"line":409},[37,90574,52121],{"class":50},[37,90576,52136],{"class":51636},[37,90578,51643],{"class":50},[37,90580,90581],{"class":39,"line":415},[37,90582,2757],{"emptyLinePlaceholder":454},[37,90584,90585,90587,90589],{"class":39,"line":420},[37,90586,52121],{"class":50},[37,90588,50971],{"class":51636},[37,90590,51643],{"class":50},[1515,90592,90593],{},[484,90594,90595],{},"手写一个防抖函数来处理",[14,90597,90598],{},"防抖的核心就是利用定时器来实现的：",[14,90600,90601],{},"①声明一个定时器变量",[14,90603,90604],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90606,90607],{},"③如果没有定时器则开启定时器，记得存到变量里面",[27,90609,90611],{"className":50969,"code":90610,"language":50971,"meta":32,"style":32},"\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",[34,90612,90613,90623,90637,90641,90649,90663,90683,90695,90703,90709,90719,90731,90743,90753,90765,90775,90785,90797,90801,90809,90817,90821,90829,90847,90865,90873,90891,90901,90909,90919,90923,90927,90931,90936,90941,90946,90951,90956,90961,90979,90986,90991,90999,91004,91017,91033,91043,91048,91052,91056,91076,91080,91085,91090,91095,91100,91108,91116,91120],{"__ignoreMap":32},[37,90614,90615,90617,90619,90621],{"class":39,"line":40},[37,90616,51633],{"class":50},[37,90618,51637],{"class":51636},[37,90620,51640],{"class":2320},[37,90622,51643],{"class":50},[37,90624,90625,90627,90629,90631,90633,90635],{"class":39,"line":47},[37,90626,1418],{"class":50},[37,90628,50971],{"class":51636},[37,90630,51652],{"class":2320},[37,90632,55],{"class":50},[37,90634,51657],{"class":185},[37,90636,51643],{"class":50},[37,90638,90639],{"class":39,"line":104},[37,90640,2757],{"emptyLinePlaceholder":454},[37,90642,90643,90645,90647],{"class":39,"line":113},[37,90644,1418],{"class":50},[37,90646,51670],{"class":51636},[37,90648,51643],{"class":50},[37,90650,90651,90653,90655,90657,90659,90661],{"class":39,"line":189},[37,90652,52480],{"class":50},[37,90654,51680],{"class":51636},[37,90656,51683],{"class":2320},[37,90658,55],{"class":50},[37,90660,51688],{"class":185},[37,90662,51643],{"class":50},[37,90664,90665,90667,90669,90671,90673,90675,90677,90679,90681],{"class":39,"line":195},[37,90666,52480],{"class":50},[37,90668,51680],{"class":51636},[37,90670,15261],{"class":2320},[37,90672,55],{"class":50},[37,90674,51727],{"class":185},[37,90676,51707],{"class":2320},[37,90678,55],{"class":50},[37,90680,51734],{"class":185},[37,90682,51643],{"class":50},[37,90684,90685,90687,90689,90691,90693],{"class":39,"line":201},[37,90686,52480],{"class":50},[37,90688,51743],{"class":51636},[37,90690,51746],{"class":50},[37,90692,51743],{"class":51636},[37,90694,51643],{"class":50},[37,90696,90697,90699,90701],{"class":39,"line":207},[37,90698,52480],{"class":50},[37,90700,446],{"class":51636},[37,90702,51643],{"class":50},[37,90704,90705,90707],{"class":39,"line":213},[37,90706,55088],{"class":2320},[37,90708,15913],{"class":50},[37,90710,90711,90713,90715,90717],{"class":39,"line":218},[37,90712,72932],{"class":61},[37,90714,51773],{"class":50},[37,90716,60841],{"class":61},[37,90718,1669],{"class":50},[37,90720,90721,90723,90725,90727,90729],{"class":39,"line":227},[37,90722,55107],{"class":61},[37,90724,51773],{"class":50},[37,90726,2087],{"class":61},[37,90728,51828],{"class":54},[37,90730,1669],{"class":50},[37,90732,90733,90735,90737,90739,90741],{"class":39,"line":232},[37,90734,55121],{"class":61},[37,90736,51773],{"class":50},[37,90738,2087],{"class":61},[37,90740,51828],{"class":54},[37,90742,1669],{"class":50},[37,90744,90745,90747,90749,90751],{"class":39,"line":238},[37,90746,55220],{"class":61},[37,90748,51773],{"class":50},[37,90750,90341],{"class":61},[37,90752,1669],{"class":50},[37,90754,90755,90757,90759,90761,90763],{"class":39,"line":244},[37,90756,55258],{"class":61},[37,90758,51773],{"class":50},[37,90760,1334],{"class":61},[37,90762,51828],{"class":54},[37,90764,1669],{"class":50},[37,90766,90767,90769,90771,90773],{"class":39,"line":250},[37,90768,57752],{"class":61},[37,90770,51773],{"class":50},[37,90772,61178],{"class":61},[37,90774,1669],{"class":50},[37,90776,90777,90779,90781,90783],{"class":39,"line":256},[37,90778,57622],{"class":61},[37,90780,51773],{"class":50},[37,90782,51928],{"class":61},[37,90784,1669],{"class":50},[37,90786,90787,90789,90791,90793,90795],{"class":39,"line":261},[37,90788,90380],{"class":61},[37,90790,51773],{"class":50},[37,90792,836],{"class":61},[37,90794,51828],{"class":54},[37,90796,1669],{"class":50},[37,90798,90799],{"class":39,"line":267},[37,90800,2544],{"class":50},[37,90802,90803,90805,90807],{"class":39,"line":283},[37,90804,52753],{"class":50},[37,90806,446],{"class":51636},[37,90808,51643],{"class":50},[37,90810,90811,90813,90815],{"class":39,"line":288},[37,90812,52121],{"class":50},[37,90814,51670],{"class":51636},[37,90816,51643],{"class":50},[37,90818,90819],{"class":39,"line":294},[37,90820,2757],{"emptyLinePlaceholder":454},[37,90822,90823,90825,90827],{"class":39,"line":300},[37,90824,1418],{"class":50},[37,90826,52136],{"class":51636},[37,90828,51643],{"class":50},[37,90830,90831,90833,90835,90837,90839,90841,90843,90845],{"class":39,"line":306},[37,90832,52480],{"class":50},[37,90834,51947],{"class":51636},[37,90836,53822],{"class":2320},[37,90838,55],{"class":50},[37,90840,53827],{"class":185},[37,90842,55650],{"class":50},[37,90844,51947],{"class":51636},[37,90846,51643],{"class":50},[37,90848,90849,90851,90853,90855,90857,90859,90861,90863],{"class":39,"line":312},[37,90850,52480],{"class":50},[37,90852,52149],{"class":51636},[37,90854,55575],{"class":2320},[37,90856,55],{"class":50},[37,90858,88609],{"class":185},[37,90860,55650],{"class":50},[37,90862,52149],{"class":51636},[37,90864,51643],{"class":50},[37,90866,90867,90869,90871],{"class":39,"line":317},[37,90868,52480],{"class":50},[37,90870,52149],{"class":51636},[37,90872,51643],{"class":50},[37,90874,90875,90877,90879,90881,90883,90885,90887,90889],{"class":39,"line":323},[37,90876,11562],{"class":54},[37,90878,87268],{"class":61},[37,90880,13905],{"class":54},[37,90882,54732],{"class":50},[37,90884,54735],{"class":2320},[37,90886,165],{"class":50},[37,90888,90481],{"class":185},[37,90890,280],{"class":50},[37,90892,90893,90895,90897,90899],{"class":39,"line":337},[37,90894,52555],{"class":54},[37,90896,9779],{"class":50},[37,90898,55],{"class":54},[37,90900,47670],{"class":61},[37,90902,90903,90905,90907],{"class":39,"line":342},[37,90904,70420],{"class":54},[37,90906,90500],{"class":2320},[37,90908,11194],{"class":50},[37,90910,90911,90913,90915,90917],{"class":39,"line":347},[37,90912,90507],{"class":50},[37,90914,55],{"class":54},[37,90916,3382],{"class":50},[37,90918,3052],{"class":54},[37,90920,90921],{"class":39,"line":352},[37,90922,90518],{"class":43},[37,90924,90925],{"class":39,"line":357},[37,90926,2544],{"class":50},[37,90928,90929],{"class":39,"line":362},[37,90930,90527],{"class":43},[37,90932,90933],{"class":39,"line":367},[37,90934,90935],{"class":43},"    \u002F\u002F 手写防抖函数\n",[37,90937,90938],{"class":39,"line":373},[37,90939,90940],{"class":43},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[37,90942,90943],{"class":39,"line":392},[37,90944,90945],{"class":43},"    \u002F\u002F 1.声明定时器变量\n",[37,90947,90948],{"class":39,"line":398},[37,90949,90950],{"class":43},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[37,90952,90953],{"class":39,"line":409},[37,90954,90955],{"class":43},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[37,90957,90958],{"class":39,"line":415},[37,90959,90960],{"class":43},"    \u002F\u002F 4.定时器里面写函数调用\n",[37,90962,90963,90965,90968,90970,90973,90975,90977],{"class":39,"line":420},[37,90964,70420],{"class":54},[37,90966,90967],{"class":2320}," debounce",[37,90969,165],{"class":50},[37,90971,90972],{"class":159},"fn",[37,90974,12776],{"class":50},[37,90976,1230],{"class":159},[37,90978,12783],{"class":50},[37,90980,90981,90983],{"class":39,"line":425},[37,90982,80107],{"class":54},[37,90984,90985],{"class":50}," timer\n",[37,90987,90988],{"class":39,"line":431},[37,90989,90990],{"class":43},"      \u002F\u002F return 返回一个匿名函数\n",[37,90992,90993,90995,90997],{"class":39,"line":436},[37,90994,74318],{"class":54},[37,90996,59254],{"class":54},[37,90998,54788],{"class":50},[37,91000,91001],{"class":39,"line":442},[37,91002,91003],{"class":43},"        \u002F\u002F 这里边写第二三四步\n",[37,91005,91006,91008,91011,91014],{"class":39,"line":8374},[37,91007,2854],{"class":54},[37,91009,91010],{"class":50}," (timer) ",[37,91012,91013],{"class":2320},"clearTimeout",[37,91015,91016],{"class":50},"(timer)\n",[37,91018,91019,91022,91024,91027,91029,91031],{"class":39,"line":8386},[37,91020,91021],{"class":50},"        timer ",[37,91023,55],{"class":54},[37,91025,91026],{"class":2320}," setTimeout",[37,91028,165],{"class":50},[37,91030,54785],{"class":54},[37,91032,54788],{"class":50},[37,91034,91035,91038,91040],{"class":39,"line":8398},[37,91036,91037],{"class":2320},"          fn",[37,91039,13391],{"class":50},[37,91041,91042],{"class":43},"\u002F\u002F加小括号调用fn }, t)\n",[37,91044,91045],{"class":39,"line":10057},[37,91046,91047],{"class":50},"        }, t)\n",[37,91049,91050],{"class":39,"line":10082},[37,91051,52734],{"class":50},[37,91053,91054],{"class":39,"line":10105},[37,91055,2544],{"class":50},[37,91057,91058,91060,91062,91064,91066,91068,91070,91072,91074],{"class":39,"line":10129},[37,91059,90542],{"class":50},[37,91061,58149],{"class":2320},[37,91063,165],{"class":50},[37,91065,90549],{"class":185},[37,91067,12776],{"class":50},[37,91069,90555],{"class":2320},[37,91071,90558],{"class":50},[37,91073,65410],{"class":61},[37,91075,175],{"class":50},[37,91077,91078],{"class":39,"line":10134},[37,91079,2757],{"emptyLinePlaceholder":454},[37,91081,91082],{"class":39,"line":10139},[37,91083,91084],{"class":43},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[37,91086,91087],{"class":39,"line":10144},[37,91088,91089],{"class":43},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[37,91091,91092],{"class":39,"line":10153},[37,91093,91094],{"class":43},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[37,91096,91097],{"class":39,"line":10158},[37,91098,91099],{"class":43},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[37,91101,91102,91104,91106],{"class":39,"line":10164},[37,91103,52753],{"class":50},[37,91105,52149],{"class":51636},[37,91107,51643],{"class":50},[37,91109,91110,91112,91114],{"class":39,"line":10185},[37,91111,52121],{"class":50},[37,91113,52136],{"class":51636},[37,91115,51643],{"class":50},[37,91117,91118],{"class":39,"line":10191},[37,91119,2757],{"emptyLinePlaceholder":454},[37,91121,91122,91124,91126],{"class":39,"line":10205},[37,91123,52121],{"class":50},[37,91125,50971],{"class":51636},[37,91127,51643],{"class":50},[498,91129,91131],{"id":91130},"_4172-节流","4.17.2 节流",[14,91133,91134],{},[1838,91135],{"alt":32,"src":91136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,91138,91139],{},[1838,91140],{"alt":32,"src":91141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,91143,91144],{},[673,91145,91146],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,91148,91149],{},"实现方式：",[1515,91151,91152],{},[484,91153,91154],{},"lodash 提供的节流函数来处理",[14,91156,91157],{},"_.throttle(func,[wait=0],[options=])",[14,91159,91160],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[27,91162,91164],{"className":50969,"code":91163,"language":50971,"meta":32,"style":32},"\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",[34,91165,91166,91176,91190,91194,91202,91216,91236,91248,91256,91262,91272,91284,91296,91306,91318,91328,91338,91350,91354,91362,91370,91374,91382,91400,91418,91426,91444,91454,91462,91472,91476,91480,91484,91489,91494,91515,91523,91531,91535],{"__ignoreMap":32},[37,91167,91168,91170,91172,91174],{"class":39,"line":40},[37,91169,51633],{"class":50},[37,91171,51637],{"class":51636},[37,91173,51640],{"class":2320},[37,91175,51643],{"class":50},[37,91177,91178,91180,91182,91184,91186,91188],{"class":39,"line":47},[37,91179,1418],{"class":50},[37,91181,50971],{"class":51636},[37,91183,51652],{"class":2320},[37,91185,55],{"class":50},[37,91187,51657],{"class":185},[37,91189,51643],{"class":50},[37,91191,91192],{"class":39,"line":104},[37,91193,2757],{"emptyLinePlaceholder":454},[37,91195,91196,91198,91200],{"class":39,"line":113},[37,91197,1418],{"class":50},[37,91199,51670],{"class":51636},[37,91201,51643],{"class":50},[37,91203,91204,91206,91208,91210,91212,91214],{"class":39,"line":189},[37,91205,52480],{"class":50},[37,91207,51680],{"class":51636},[37,91209,51683],{"class":2320},[37,91211,55],{"class":50},[37,91213,51688],{"class":185},[37,91215,51643],{"class":50},[37,91217,91218,91220,91222,91224,91226,91228,91230,91232,91234],{"class":39,"line":195},[37,91219,52480],{"class":50},[37,91221,51680],{"class":51636},[37,91223,15261],{"class":2320},[37,91225,55],{"class":50},[37,91227,51727],{"class":185},[37,91229,51707],{"class":2320},[37,91231,55],{"class":50},[37,91233,51734],{"class":185},[37,91235,51643],{"class":50},[37,91237,91238,91240,91242,91244,91246],{"class":39,"line":201},[37,91239,52480],{"class":50},[37,91241,51743],{"class":51636},[37,91243,51746],{"class":50},[37,91245,51743],{"class":51636},[37,91247,51643],{"class":50},[37,91249,91250,91252,91254],{"class":39,"line":207},[37,91251,52480],{"class":50},[37,91253,446],{"class":51636},[37,91255,51643],{"class":50},[37,91257,91258,91260],{"class":39,"line":213},[37,91259,55088],{"class":2320},[37,91261,15913],{"class":50},[37,91263,91264,91266,91268,91270],{"class":39,"line":218},[37,91265,72932],{"class":61},[37,91267,51773],{"class":50},[37,91269,60841],{"class":61},[37,91271,1669],{"class":50},[37,91273,91274,91276,91278,91280,91282],{"class":39,"line":227},[37,91275,55107],{"class":61},[37,91277,51773],{"class":50},[37,91279,2087],{"class":61},[37,91281,51828],{"class":54},[37,91283,1669],{"class":50},[37,91285,91286,91288,91290,91292,91294],{"class":39,"line":232},[37,91287,55121],{"class":61},[37,91289,51773],{"class":50},[37,91291,2087],{"class":61},[37,91293,51828],{"class":54},[37,91295,1669],{"class":50},[37,91297,91298,91300,91302,91304],{"class":39,"line":238},[37,91299,55220],{"class":61},[37,91301,51773],{"class":50},[37,91303,90341],{"class":61},[37,91305,1669],{"class":50},[37,91307,91308,91310,91312,91314,91316],{"class":39,"line":244},[37,91309,55258],{"class":61},[37,91311,51773],{"class":50},[37,91313,1334],{"class":61},[37,91315,51828],{"class":54},[37,91317,1669],{"class":50},[37,91319,91320,91322,91324,91326],{"class":39,"line":250},[37,91321,57752],{"class":61},[37,91323,51773],{"class":50},[37,91325,61178],{"class":61},[37,91327,1669],{"class":50},[37,91329,91330,91332,91334,91336],{"class":39,"line":256},[37,91331,57622],{"class":61},[37,91333,51773],{"class":50},[37,91335,51928],{"class":61},[37,91337,1669],{"class":50},[37,91339,91340,91342,91344,91346,91348],{"class":39,"line":261},[37,91341,90380],{"class":61},[37,91343,51773],{"class":50},[37,91345,836],{"class":61},[37,91347,51828],{"class":54},[37,91349,1669],{"class":50},[37,91351,91352],{"class":39,"line":267},[37,91353,2544],{"class":50},[37,91355,91356,91358,91360],{"class":39,"line":283},[37,91357,52753],{"class":50},[37,91359,446],{"class":51636},[37,91361,51643],{"class":50},[37,91363,91364,91366,91368],{"class":39,"line":288},[37,91365,52121],{"class":50},[37,91367,51670],{"class":51636},[37,91369,51643],{"class":50},[37,91371,91372],{"class":39,"line":294},[37,91373,2757],{"emptyLinePlaceholder":454},[37,91375,91376,91378,91380],{"class":39,"line":300},[37,91377,1418],{"class":50},[37,91379,52136],{"class":51636},[37,91381,51643],{"class":50},[37,91383,91384,91386,91388,91390,91392,91394,91396,91398],{"class":39,"line":306},[37,91385,52480],{"class":50},[37,91387,51947],{"class":51636},[37,91389,53822],{"class":2320},[37,91391,55],{"class":50},[37,91393,53827],{"class":185},[37,91395,55650],{"class":50},[37,91397,51947],{"class":51636},[37,91399,51643],{"class":50},[37,91401,91402,91404,91406,91408,91410,91412,91414,91416],{"class":39,"line":312},[37,91403,52480],{"class":50},[37,91405,52149],{"class":51636},[37,91407,55575],{"class":2320},[37,91409,55],{"class":50},[37,91411,88609],{"class":185},[37,91413,55650],{"class":50},[37,91415,52149],{"class":51636},[37,91417,51643],{"class":50},[37,91419,91420,91422,91424],{"class":39,"line":317},[37,91421,52480],{"class":50},[37,91423,52149],{"class":51636},[37,91425,51643],{"class":50},[37,91427,91428,91430,91432,91434,91436,91438,91440,91442],{"class":39,"line":323},[37,91429,11562],{"class":54},[37,91431,87268],{"class":61},[37,91433,13905],{"class":54},[37,91435,54732],{"class":50},[37,91437,54735],{"class":2320},[37,91439,165],{"class":50},[37,91441,90481],{"class":185},[37,91443,280],{"class":50},[37,91445,91446,91448,91450,91452],{"class":39,"line":337},[37,91447,52555],{"class":54},[37,91449,9779],{"class":50},[37,91451,55],{"class":54},[37,91453,47670],{"class":61},[37,91455,91456,91458,91460],{"class":39,"line":342},[37,91457,70420],{"class":54},[37,91459,90500],{"class":2320},[37,91461,11194],{"class":50},[37,91463,91464,91466,91468,91470],{"class":39,"line":347},[37,91465,90507],{"class":50},[37,91467,55],{"class":54},[37,91469,3382],{"class":50},[37,91471,3052],{"class":54},[37,91473,91474],{"class":39,"line":352},[37,91475,90518],{"class":43},[37,91477,91478],{"class":39,"line":357},[37,91479,2544],{"class":50},[37,91481,91482],{"class":39,"line":362},[37,91483,90527],{"class":43},[37,91485,91486],{"class":39,"line":367},[37,91487,91488],{"class":43},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[37,91490,91491],{"class":39,"line":373},[37,91492,91493],{"class":43},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[37,91495,91496,91498,91500,91502,91504,91506,91509,91511,91513],{"class":39,"line":392},[37,91497,90542],{"class":50},[37,91499,58149],{"class":2320},[37,91501,165],{"class":50},[37,91503,90549],{"class":185},[37,91505,90552],{"class":50},[37,91507,91508],{"class":2320},"throttle",[37,91510,90558],{"class":50},[37,91512,65410],{"class":61},[37,91514,175],{"class":50},[37,91516,91517,91519,91521],{"class":39,"line":398},[37,91518,52753],{"class":50},[37,91520,52149],{"class":51636},[37,91522,51643],{"class":50},[37,91524,91525,91527,91529],{"class":39,"line":409},[37,91526,52121],{"class":50},[37,91528,52136],{"class":51636},[37,91530,51643],{"class":50},[37,91532,91533],{"class":39,"line":415},[37,91534,2757],{"emptyLinePlaceholder":454},[37,91536,91537,91539,91541],{"class":39,"line":420},[37,91538,52121],{"class":50},[37,91540,50971],{"class":51636},[37,91542,51643],{"class":50},[1515,91544,91545],{},[484,91546,91547],{},"手写一个节流函数来处理",[14,91549,71288],{},[14,91551,90601],{},[14,91553,91554],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91556,91557],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[27,91559,91561],{"className":50969,"code":91560,"language":50971,"meta":32,"style":32},"\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",[34,91562,91563,91573,91587,91591,91599,91613,91633,91645,91653,91659,91669,91681,91693,91703,91715,91725,91735,91747,91751,91759,91767,91771,91779,91797,91815,91823,91841,91851,91859,91869,91873,91877,91881,91886,91891,91896,91901,91906,91911,91928,91934,91942,91953,91968,91975,91980,91985,91995,92000,92005,92010,92014,92018,92022,92042,92050,92058,92062],{"__ignoreMap":32},[37,91564,91565,91567,91569,91571],{"class":39,"line":40},[37,91566,51633],{"class":50},[37,91568,51637],{"class":51636},[37,91570,51640],{"class":2320},[37,91572,51643],{"class":50},[37,91574,91575,91577,91579,91581,91583,91585],{"class":39,"line":47},[37,91576,1418],{"class":50},[37,91578,50971],{"class":51636},[37,91580,51652],{"class":2320},[37,91582,55],{"class":50},[37,91584,51657],{"class":185},[37,91586,51643],{"class":50},[37,91588,91589],{"class":39,"line":104},[37,91590,2757],{"emptyLinePlaceholder":454},[37,91592,91593,91595,91597],{"class":39,"line":113},[37,91594,1418],{"class":50},[37,91596,51670],{"class":51636},[37,91598,51643],{"class":50},[37,91600,91601,91603,91605,91607,91609,91611],{"class":39,"line":189},[37,91602,52480],{"class":50},[37,91604,51680],{"class":51636},[37,91606,51683],{"class":2320},[37,91608,55],{"class":50},[37,91610,51688],{"class":185},[37,91612,51643],{"class":50},[37,91614,91615,91617,91619,91621,91623,91625,91627,91629,91631],{"class":39,"line":195},[37,91616,52480],{"class":50},[37,91618,51680],{"class":51636},[37,91620,15261],{"class":2320},[37,91622,55],{"class":50},[37,91624,51727],{"class":185},[37,91626,51707],{"class":2320},[37,91628,55],{"class":50},[37,91630,51734],{"class":185},[37,91632,51643],{"class":50},[37,91634,91635,91637,91639,91641,91643],{"class":39,"line":201},[37,91636,52480],{"class":50},[37,91638,51743],{"class":51636},[37,91640,51746],{"class":50},[37,91642,51743],{"class":51636},[37,91644,51643],{"class":50},[37,91646,91647,91649,91651],{"class":39,"line":207},[37,91648,52480],{"class":50},[37,91650,446],{"class":51636},[37,91652,51643],{"class":50},[37,91654,91655,91657],{"class":39,"line":213},[37,91656,55088],{"class":2320},[37,91658,15913],{"class":50},[37,91660,91661,91663,91665,91667],{"class":39,"line":218},[37,91662,72932],{"class":61},[37,91664,51773],{"class":50},[37,91666,60841],{"class":61},[37,91668,1669],{"class":50},[37,91670,91671,91673,91675,91677,91679],{"class":39,"line":227},[37,91672,55107],{"class":61},[37,91674,51773],{"class":50},[37,91676,2087],{"class":61},[37,91678,51828],{"class":54},[37,91680,1669],{"class":50},[37,91682,91683,91685,91687,91689,91691],{"class":39,"line":232},[37,91684,55121],{"class":61},[37,91686,51773],{"class":50},[37,91688,2087],{"class":61},[37,91690,51828],{"class":54},[37,91692,1669],{"class":50},[37,91694,91695,91697,91699,91701],{"class":39,"line":238},[37,91696,55220],{"class":61},[37,91698,51773],{"class":50},[37,91700,90341],{"class":61},[37,91702,1669],{"class":50},[37,91704,91705,91707,91709,91711,91713],{"class":39,"line":244},[37,91706,55258],{"class":61},[37,91708,51773],{"class":50},[37,91710,1334],{"class":61},[37,91712,51828],{"class":54},[37,91714,1669],{"class":50},[37,91716,91717,91719,91721,91723],{"class":39,"line":250},[37,91718,57752],{"class":61},[37,91720,51773],{"class":50},[37,91722,61178],{"class":61},[37,91724,1669],{"class":50},[37,91726,91727,91729,91731,91733],{"class":39,"line":256},[37,91728,57622],{"class":61},[37,91730,51773],{"class":50},[37,91732,51928],{"class":61},[37,91734,1669],{"class":50},[37,91736,91737,91739,91741,91743,91745],{"class":39,"line":261},[37,91738,90380],{"class":61},[37,91740,51773],{"class":50},[37,91742,836],{"class":61},[37,91744,51828],{"class":54},[37,91746,1669],{"class":50},[37,91748,91749],{"class":39,"line":267},[37,91750,2544],{"class":50},[37,91752,91753,91755,91757],{"class":39,"line":283},[37,91754,52753],{"class":50},[37,91756,446],{"class":51636},[37,91758,51643],{"class":50},[37,91760,91761,91763,91765],{"class":39,"line":288},[37,91762,52121],{"class":50},[37,91764,51670],{"class":51636},[37,91766,51643],{"class":50},[37,91768,91769],{"class":39,"line":294},[37,91770,2757],{"emptyLinePlaceholder":454},[37,91772,91773,91775,91777],{"class":39,"line":300},[37,91774,1418],{"class":50},[37,91776,52136],{"class":51636},[37,91778,51643],{"class":50},[37,91780,91781,91783,91785,91787,91789,91791,91793,91795],{"class":39,"line":306},[37,91782,52480],{"class":50},[37,91784,51947],{"class":51636},[37,91786,53822],{"class":2320},[37,91788,55],{"class":50},[37,91790,53827],{"class":185},[37,91792,55650],{"class":50},[37,91794,51947],{"class":51636},[37,91796,51643],{"class":50},[37,91798,91799,91801,91803,91805,91807,91809,91811,91813],{"class":39,"line":312},[37,91800,52480],{"class":50},[37,91802,52149],{"class":51636},[37,91804,55575],{"class":2320},[37,91806,55],{"class":50},[37,91808,88609],{"class":185},[37,91810,55650],{"class":50},[37,91812,52149],{"class":51636},[37,91814,51643],{"class":50},[37,91816,91817,91819,91821],{"class":39,"line":317},[37,91818,52480],{"class":50},[37,91820,52149],{"class":51636},[37,91822,51643],{"class":50},[37,91824,91825,91827,91829,91831,91833,91835,91837,91839],{"class":39,"line":323},[37,91826,11562],{"class":54},[37,91828,87268],{"class":61},[37,91830,13905],{"class":54},[37,91832,54732],{"class":50},[37,91834,54735],{"class":2320},[37,91836,165],{"class":50},[37,91838,90481],{"class":185},[37,91840,280],{"class":50},[37,91842,91843,91845,91847,91849],{"class":39,"line":337},[37,91844,52555],{"class":54},[37,91846,9779],{"class":50},[37,91848,55],{"class":54},[37,91850,47670],{"class":61},[37,91852,91853,91855,91857],{"class":39,"line":342},[37,91854,70420],{"class":54},[37,91856,90500],{"class":2320},[37,91858,11194],{"class":50},[37,91860,91861,91863,91865,91867],{"class":39,"line":347},[37,91862,90507],{"class":50},[37,91864,55],{"class":54},[37,91866,3382],{"class":50},[37,91868,3052],{"class":54},[37,91870,91871],{"class":39,"line":352},[37,91872,90518],{"class":43},[37,91874,91875],{"class":39,"line":357},[37,91876,2544],{"class":50},[37,91878,91879],{"class":39,"line":362},[37,91880,90527],{"class":43},[37,91882,91883],{"class":39,"line":367},[37,91884,91885],{"class":43},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[37,91887,91888],{"class":39,"line":373},[37,91889,91890],{"class":43},"    \u002F\u002F 1.声明一个定时器变量\n",[37,91892,91893],{"class":39,"line":392},[37,91894,91895],{"class":43},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[37,91897,91898],{"class":39,"line":398},[37,91899,91900],{"class":43},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[37,91902,91903],{"class":39,"line":409},[37,91904,91905],{"class":43},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[37,91907,91908],{"class":39,"line":415},[37,91909,91910],{"class":43},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[37,91912,91913,91915,91918,91920,91922,91924,91926],{"class":39,"line":420},[37,91914,70420],{"class":54},[37,91916,91917],{"class":2320}," throttle",[37,91919,165],{"class":50},[37,91921,90972],{"class":159},[37,91923,12776],{"class":50},[37,91925,1230],{"class":159},[37,91927,12783],{"class":50},[37,91929,91930,91932],{"class":39,"line":425},[37,91931,80107],{"class":54},[37,91933,90985],{"class":50},[37,91935,91936,91938,91940],{"class":39,"line":431},[37,91937,74318],{"class":54},[37,91939,59254],{"class":54},[37,91941,54788],{"class":50},[37,91943,91944,91946,91948,91950],{"class":39,"line":436},[37,91945,2854],{"class":54},[37,91947,2027],{"class":50},[37,91949,748],{"class":54},[37,91951,91952],{"class":50},"timer) {\n",[37,91954,91955,91958,91960,91962,91964,91966],{"class":39,"line":442},[37,91956,91957],{"class":50},"          timer ",[37,91959,55],{"class":54},[37,91961,91026],{"class":2320},[37,91963,165],{"class":50},[37,91965,54785],{"class":54},[37,91967,54788],{"class":50},[37,91969,91970,91973],{"class":39,"line":8374},[37,91971,91972],{"class":2320},"            fn",[37,91974,2333],{"class":50},[37,91976,91977],{"class":39,"line":8386},[37,91978,91979],{"class":43},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[37,91981,91982],{"class":39,"line":8398},[37,91983,91984],{"class":43},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[37,91986,91987,91990,91992],{"class":39,"line":10057},[37,91988,91989],{"class":50},"            timer ",[37,91991,55],{"class":54},[37,91993,91994],{"class":61}," null\n",[37,91996,91997],{"class":39,"line":10082},[37,91998,91999],{"class":43},"            \u002F\u002F 不能用clearTimeout(timer)\n",[37,92001,92002],{"class":39,"line":10105},[37,92003,92004],{"class":43},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[37,92006,92007],{"class":39,"line":10129},[37,92008,92009],{"class":50},"          }, t)\n",[37,92011,92012],{"class":39,"line":10134},[37,92013,2886],{"class":50},[37,92015,92016],{"class":39,"line":10139},[37,92017,52734],{"class":50},[37,92019,92020],{"class":39,"line":10144},[37,92021,2544],{"class":50},[37,92023,92024,92026,92028,92030,92032,92034,92036,92038,92040],{"class":39,"line":10153},[37,92025,90542],{"class":50},[37,92027,58149],{"class":2320},[37,92029,165],{"class":50},[37,92031,90549],{"class":185},[37,92033,12776],{"class":50},[37,92035,91508],{"class":2320},[37,92037,90558],{"class":50},[37,92039,65410],{"class":61},[37,92041,175],{"class":50},[37,92043,92044,92046,92048],{"class":39,"line":10158},[37,92045,52753],{"class":50},[37,92047,52149],{"class":51636},[37,92049,51643],{"class":50},[37,92051,92052,92054,92056],{"class":39,"line":10164},[37,92053,52121],{"class":50},[37,92055,52136],{"class":51636},[37,92057,51643],{"class":50},[37,92059,92060],{"class":39,"line":10185},[37,92061,2757],{"emptyLinePlaceholder":454},[37,92063,92064,92066,92068],{"class":39,"line":10191},[37,92065,52121],{"class":50},[37,92067,50971],{"class":51636},[37,92069,51643],{"class":50},[498,92071,92073],{"id":92072},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[27,92075,92077],{"className":53403,"code":92076,"language":53405,"meta":32,"style":32},"\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",[34,92078,92079,92087,92095,92100,92105,92110,92115,92119,92127],{"__ignoreMap":32},[37,92080,92081,92083,92085],{"class":39,"line":40},[37,92082,1418],{"class":50},[37,92084,52136],{"class":51636},[37,92086,51643],{"class":50},[37,92088,92089,92091,92093],{"class":39,"line":47},[37,92090,52480],{"class":50},[37,92092,52149],{"class":51636},[37,92094,51643],{"class":50},[37,92096,92097],{"class":39,"line":104},[37,92098,92099],{"class":50},"    let timer = null\n",[37,92101,92102],{"class":39,"line":113},[37,92103,92104],{"class":50},"    timer = setTimeout(() => {\n",[37,92106,92107],{"class":39,"line":189},[37,92108,92109],{"class":50},"      clearTimeout(timer)\n",[37,92111,92112],{"class":39,"line":195},[37,92113,92114],{"class":50},"      console.log(timer)\n",[37,92116,92117],{"class":39,"line":201},[37,92118,60561],{"class":50},[37,92120,92121,92123,92125],{"class":39,"line":207},[37,92122,52753],{"class":50},[37,92124,52149],{"class":51636},[37,92126,51643],{"class":50},[37,92128,92129,92131,92133],{"class":39,"line":213},[37,92130,52121],{"class":50},[37,92132,52136],{"class":51636},[37,92134,51643],{"class":50},[14,92136,92137],{},"输出为1",[14,92139,92140],{},"在开启的定时器里边写清除定时器",[14,92142,92143],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[498,92145,92147],{"id":92146},"_4174-节流综合案例","4.17.4 节流综合案例",[14,92149,92150],{},"页面打开，可以记录上一次的视频播放位置",[14,92152,92153],{},[1838,92154],{"alt":32,"src":92155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,92157,92158],{},[1838,92159],{"alt":32,"src":92160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[27,92162,92164],{"className":50969,"code":92163,"language":50971,"meta":32,"style":32},"\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",[34,92165,92166,92176,92190,92194,92202,92216,92236,92256,92278,92291,92299,92305,92315,92325,92335,92339,92343,92350,92363,92375,92379,92383,92393,92405,92419,92423,92427,92434,92444,92457,92469,92479,92489,92505,92517,92521,92525,92533,92543,92555,92565,92575,92585,92589,92593,92603,92614,92618,92626,92634,92638,92646,92661,92676,92691,92712,92720,92728,92743,92765,92773,92788,92814,92840,92866,92874,92882,92901,92909,92914,92933,92938,92956,92961,92966,92974,92979,92993,93001,93006,93023,93027,93032,93054,93058,93066,93074,93078],{"__ignoreMap":32},[37,92167,92168,92170,92172,92174],{"class":39,"line":40},[37,92169,51633],{"class":50},[37,92171,51637],{"class":51636},[37,92173,51640],{"class":2320},[37,92175,51643],{"class":50},[37,92177,92178,92180,92182,92184,92186,92188],{"class":39,"line":47},[37,92179,1418],{"class":50},[37,92181,50971],{"class":51636},[37,92183,51652],{"class":2320},[37,92185,55],{"class":50},[37,92187,51657],{"class":185},[37,92189,51643],{"class":50},[37,92191,92192],{"class":39,"line":104},[37,92193,2757],{"emptyLinePlaceholder":454},[37,92195,92196,92198,92200],{"class":39,"line":113},[37,92197,1418],{"class":50},[37,92199,51670],{"class":51636},[37,92201,51643],{"class":50},[37,92203,92204,92206,92208,92210,92212,92214],{"class":39,"line":189},[37,92205,52480],{"class":50},[37,92207,51680],{"class":51636},[37,92209,51683],{"class":2320},[37,92211,55],{"class":50},[37,92213,51688],{"class":185},[37,92215,59463],{"class":50},[37,92217,92218,92220,92222,92224,92226,92228,92230,92232,92234],{"class":39,"line":195},[37,92219,52480],{"class":50},[37,92221,51680],{"class":51636},[37,92223,51699],{"class":2320},[37,92225,55],{"class":50},[37,92227,51704],{"class":185},[37,92229,51707],{"class":2320},[37,92231,55],{"class":50},[37,92233,51712],{"class":185},[37,92235,59463],{"class":50},[37,92237,92238,92240,92242,92244,92246,92248,92250,92252,92254],{"class":39,"line":201},[37,92239,52480],{"class":50},[37,92241,51680],{"class":51636},[37,92243,15261],{"class":2320},[37,92245,55],{"class":50},[37,92247,51727],{"class":185},[37,92249,51707],{"class":2320},[37,92251,55],{"class":50},[37,92253,51734],{"class":185},[37,92255,59463],{"class":50},[37,92257,92258,92260,92262,92264,92266,92269,92271,92273,92276],{"class":39,"line":207},[37,92259,52480],{"class":50},[37,92261,51680],{"class":51636},[37,92263,15261],{"class":2320},[37,92265,55],{"class":50},[37,92267,92268],{"class":185},"\"referrer\"",[37,92270,51707],{"class":2320},[37,92272,55],{"class":50},[37,92274,92275],{"class":185},"\"never\"",[37,92277,59463],{"class":50},[37,92279,92280,92282,92284,92287,92289],{"class":39,"line":213},[37,92281,52480],{"class":50},[37,92283,51743],{"class":51636},[37,92285,92286],{"class":50},">综合案例\u003C\u002F",[37,92288,51743],{"class":51636},[37,92290,51643],{"class":50},[37,92292,92293,92295,92297],{"class":39,"line":218},[37,92294,52480],{"class":50},[37,92296,446],{"class":51636},[37,92298,51643],{"class":50},[37,92300,92301,92303],{"class":39,"line":227},[37,92302,6751],{"class":51636},[37,92304,15913],{"class":50},[37,92306,92307,92309,92311,92313],{"class":39,"line":232},[37,92308,55031],{"class":61},[37,92310,51773],{"class":50},[37,92312,135],{"class":61},[37,92314,1669],{"class":50},[37,92316,92317,92319,92321,92323],{"class":39,"line":238},[37,92318,55042],{"class":61},[37,92320,51773],{"class":50},[37,92322,135],{"class":61},[37,92324,1669],{"class":50},[37,92326,92327,92329,92331,92333],{"class":39,"line":244},[37,92328,72932],{"class":61},[37,92330,51773],{"class":50},[37,92332,60841],{"class":61},[37,92334,1669],{"class":50},[37,92336,92337],{"class":39,"line":250},[37,92338,2544],{"class":50},[37,92340,92341],{"class":39,"line":256},[37,92342,2757],{"emptyLinePlaceholder":454},[37,92344,92345,92348],{"class":39,"line":261},[37,92346,92347],{"class":2320},"    .container",[37,92349,15913],{"class":50},[37,92351,92352,92354,92356,92359,92361],{"class":39,"line":267},[37,92353,55107],{"class":61},[37,92355,51773],{"class":50},[37,92357,92358],{"class":61},"1200",[37,92360,51828],{"class":54},[37,92362,1669],{"class":50},[37,92364,92365,92367,92369,92371,92373],{"class":39,"line":283},[37,92366,55042],{"class":61},[37,92368,51773],{"class":50},[37,92370,135],{"class":61},[37,92372,51892],{"class":61},[37,92374,1669],{"class":50},[37,92376,92377],{"class":39,"line":288},[37,92378,2544],{"class":50},[37,92380,92381],{"class":39,"line":294},[37,92382,2757],{"emptyLinePlaceholder":454},[37,92384,92385,92388,92391],{"class":39,"line":300},[37,92386,92387],{"class":2320},"    .video",[37,92389,92390],{"class":51636}," video",[37,92392,15913],{"class":50},[37,92394,92395,92397,92399,92401,92403],{"class":39,"line":306},[37,92396,55107],{"class":61},[37,92398,51773],{"class":50},[37,92400,154],{"class":61},[37,92402,845],{"class":54},[37,92404,1669],{"class":50},[37,92406,92407,92409,92411,92413,92415,92417],{"class":39,"line":312},[37,92408,55031],{"class":61},[37,92410,51773],{"class":50},[37,92412,1210],{"class":61},[37,92414,51828],{"class":54},[37,92416,4443],{"class":61},[37,92418,1669],{"class":50},[37,92420,92421],{"class":39,"line":317},[37,92422,2544],{"class":50},[37,92424,92425],{"class":39,"line":323},[37,92426,2757],{"emptyLinePlaceholder":454},[37,92428,92429,92432],{"class":39,"line":337},[37,92430,92431],{"class":2320},"    .elevator",[37,92433,15913],{"class":50},[37,92435,92436,92438,92440,92442],{"class":39,"line":342},[37,92437,55095],{"class":61},[37,92439,51773],{"class":50},[37,92441,86568],{"class":61},[37,92443,1669],{"class":50},[37,92445,92446,92448,92450,92453,92455],{"class":39,"line":347},[37,92447,55283],{"class":61},[37,92449,51773],{"class":50},[37,92451,92452],{"class":61},"280",[37,92454,51828],{"class":54},[37,92456,1669],{"class":50},[37,92458,92459,92461,92463,92465,92467],{"class":39,"line":352},[37,92460,86762],{"class":61},[37,92462,51773],{"class":50},[37,92464,1210],{"class":61},[37,92466,51828],{"class":54},[37,92468,1669],{"class":50},[37,92470,92471,92473,92475,92477],{"class":39,"line":357},[37,92472,86575],{"class":61},[37,92474,51773],{"class":50},[37,92476,86580],{"class":61},[37,92478,1669],{"class":50},[37,92480,92481,92483,92485,92487],{"class":39,"line":362},[37,92482,62057],{"class":61},[37,92484,51773],{"class":50},[37,92486,61178],{"class":61},[37,92488,1669],{"class":50},[37,92490,92491,92493,92495,92497,92499,92501,92503],{"class":39,"line":367},[37,92492,62313],{"class":61},[37,92494,51773],{"class":50},[37,92496,332],{"class":61},[37,92498,51828],{"class":54},[37,92500,51857],{"class":61},[37,92502,62580],{"class":61},[37,92504,1669],{"class":50},[37,92506,92507,92509,92511,92513,92515],{"class":39,"line":373},[37,92508,55107],{"class":61},[37,92510,51773],{"class":50},[37,92512,1415],{"class":61},[37,92514,51828],{"class":54},[37,92516,1669],{"class":50},[37,92518,92519],{"class":39,"line":392},[37,92520,2544],{"class":50},[37,92522,92523],{"class":39,"line":398},[37,92524,2757],{"emptyLinePlaceholder":454},[37,92526,92527,92529,92531],{"class":39,"line":409},[37,92528,92431],{"class":2320},[37,92530,1774],{"class":51636},[37,92532,15913],{"class":50},[37,92534,92535,92537,92539,92541],{"class":39,"line":415},[37,92536,55345],{"class":61},[37,92538,51773],{"class":50},[37,92540,61205],{"class":61},[37,92542,1669],{"class":50},[37,92544,92545,92547,92549,92551,92553],{"class":39,"line":420},[37,92546,55031],{"class":61},[37,92548,51773],{"class":50},[37,92550,98],{"class":61},[37,92552,51828],{"class":54},[37,92554,1669],{"class":50},[37,92556,92557,92559,92561,92563],{"class":39,"line":425},[37,92558,64306],{"class":61},[37,92560,51773],{"class":50},[37,92562,55073],{"class":61},[37,92564,1669],{"class":50},[37,92566,92567,92569,92571,92573],{"class":39,"line":431},[37,92568,57622],{"class":61},[37,92570,51773],{"class":50},[37,92572,51928],{"class":61},[37,92574,1669],{"class":50},[37,92576,92577,92579,92581,92583],{"class":39,"line":436},[37,92578,57752],{"class":61},[37,92580,51773],{"class":50},[37,92582,62406],{"class":61},[37,92584,1669],{"class":50},[37,92586,92587],{"class":39,"line":442},[37,92588,2544],{"class":50},[37,92590,92591],{"class":39,"line":8374},[37,92592,2757],{"emptyLinePlaceholder":454},[37,92594,92595,92597,92599,92601],{"class":39,"line":8386},[37,92596,92431],{"class":2320},[37,92598,1774],{"class":51636},[37,92600,64360],{"class":2320},[37,92602,15913],{"class":50},[37,92604,92605,92607,92609,92612],{"class":39,"line":8398},[37,92606,57752],{"class":61},[37,92608,51773],{"class":50},[37,92610,92611],{"class":61},"#1286ff",[37,92613,1669],{"class":50},[37,92615,92616],{"class":39,"line":10057},[37,92617,2544],{"class":50},[37,92619,92620,92622,92624],{"class":39,"line":10082},[37,92621,52753],{"class":50},[37,92623,446],{"class":51636},[37,92625,51643],{"class":50},[37,92627,92628,92630,92632],{"class":39,"line":10105},[37,92629,52121],{"class":50},[37,92631,51670],{"class":51636},[37,92633,51643],{"class":50},[37,92635,92636],{"class":39,"line":10129},[37,92637,2757],{"emptyLinePlaceholder":454},[37,92639,92640,92642,92644],{"class":39,"line":10134},[37,92641,1418],{"class":50},[37,92643,52136],{"class":51636},[37,92645,51643],{"class":50},[37,92647,92648,92650,92652,92654,92656,92659],{"class":39,"line":10139},[37,92649,52480],{"class":50},[37,92651,51947],{"class":51636},[37,92653,53822],{"class":2320},[37,92655,55],{"class":50},[37,92657,92658],{"class":185},"\"container\"",[37,92660,51643],{"class":50},[37,92662,92663,92665,92667,92669,92671,92674],{"class":39,"line":10144},[37,92664,51677],{"class":50},[37,92666,51947],{"class":51636},[37,92668,53822],{"class":2320},[37,92670,55],{"class":50},[37,92672,92673],{"class":185},"\"header\"",[37,92675,51643],{"class":50},[37,92677,92678,92680,92682,92684,92686,92689],{"class":39,"line":10153},[37,92679,55570],{"class":50},[37,92681,51],{"class":51636},[37,92683,61393],{"class":2320},[37,92685,55],{"class":50},[37,92687,92688],{"class":185},"\"http:\u002F\u002Fpip.itcast.cn\"",[37,92690,51643],{"class":50},[37,92692,92693,92695,92697,92699,92701,92704,92706,92708,92710],{"class":39,"line":10158},[37,92694,55638],{"class":50},[37,92696,1838],{"class":51636},[37,92698,55575],{"class":2320},[37,92700,55],{"class":50},[37,92702,92703],{"class":185},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[37,92705,55583],{"class":2320},[37,92707,55],{"class":50},[37,92709,8000],{"class":185},[37,92711,59463],{"class":50},[37,92713,92714,92716,92718],{"class":39,"line":10164},[37,92715,55743],{"class":50},[37,92717,51],{"class":51636},[37,92719,51643],{"class":50},[37,92721,92722,92724,92726],{"class":39,"line":10185},[37,92723,52112],{"class":50},[37,92725,51947],{"class":51636},[37,92727,51643],{"class":50},[37,92729,92730,92732,92734,92736,92738,92741],{"class":39,"line":10191},[37,92731,51677],{"class":50},[37,92733,51947],{"class":51636},[37,92735,53822],{"class":2320},[37,92737,55],{"class":50},[37,92739,92740],{"class":185},"\"video\"",[37,92742,51643],{"class":50},[37,92744,92745,92747,92749,92751,92753,92756,92759,92761,92763],{"class":39,"line":10205},[37,92746,55570],{"class":50},[37,92748,28525],{"class":51636},[37,92750,55575],{"class":2320},[37,92752,55],{"class":50},[37,92754,92755],{"class":185},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[37,92757,92758],{"class":2320}," controls",[37,92760,55650],{"class":50},[37,92762,28525],{"class":51636},[37,92764,51643],{"class":50},[37,92766,92767,92769,92771],{"class":39,"line":10211},[37,92768,52112],{"class":50},[37,92770,51947],{"class":51636},[37,92772,51643],{"class":50},[37,92774,92775,92777,92779,92781,92783,92786],{"class":39,"line":10238},[37,92776,51677],{"class":50},[37,92778,51947],{"class":51636},[37,92780,53822],{"class":2320},[37,92782,55],{"class":50},[37,92784,92785],{"class":185},"\"elevator\"",[37,92787,51643],{"class":50},[37,92789,92790,92792,92794,92796,92798,92800,92803,92805,92807,92810,92812],{"class":39,"line":10247},[37,92791,55570],{"class":50},[37,92793,51],{"class":51636},[37,92795,61393],{"class":2320},[37,92797,55],{"class":50},[37,92799,64572],{"class":185},[37,92801,92802],{"class":2320}," data-ref",[37,92804,55],{"class":50},[37,92806,92740],{"class":185},[37,92808,92809],{"class":50},">视频介绍\u003C\u002F",[37,92811,51],{"class":51636},[37,92813,51643],{"class":50},[37,92815,92816,92818,92820,92822,92824,92826,92828,92830,92833,92836,92838],{"class":39,"line":10253},[37,92817,55570],{"class":50},[37,92819,51],{"class":51636},[37,92821,61393],{"class":2320},[37,92823,55],{"class":50},[37,92825,64572],{"class":185},[37,92827,92802],{"class":2320},[37,92829,55],{"class":50},[37,92831,92832],{"class":185},"\"intro\"",[37,92834,92835],{"class":50},">课程简介\u003C\u002F",[37,92837,51],{"class":51636},[37,92839,51643],{"class":50},[37,92841,92842,92844,92846,92848,92850,92852,92854,92856,92859,92862,92864],{"class":39,"line":10261},[37,92843,55570],{"class":50},[37,92845,51],{"class":51636},[37,92847,61393],{"class":2320},[37,92849,55],{"class":50},[37,92851,64572],{"class":185},[37,92853,92802],{"class":2320},[37,92855,55],{"class":50},[37,92857,92858],{"class":185},"\"outline\"",[37,92860,92861],{"class":50},">评论列表\u003C\u002F",[37,92863,51],{"class":51636},[37,92865,51643],{"class":50},[37,92867,92868,92870,92872],{"class":39,"line":10266},[37,92869,52112],{"class":50},[37,92871,51947],{"class":51636},[37,92873,51643],{"class":50},[37,92875,92876,92878,92880],{"class":39,"line":16945},[37,92877,52753],{"class":50},[37,92879,51947],{"class":51636},[37,92881,51643],{"class":50},[37,92883,92884,92886,92888,92890,92892,92895,92897,92899],{"class":39,"line":16951},[37,92885,52480],{"class":50},[37,92887,52149],{"class":51636},[37,92889,55575],{"class":2320},[37,92891,55],{"class":50},[37,92893,92894],{"class":185},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[37,92896,55650],{"class":50},[37,92898,52149],{"class":51636},[37,92900,51643],{"class":50},[37,92902,92903,92905,92907],{"class":39,"line":16974},[37,92904,52480],{"class":50},[37,92906,52149],{"class":51636},[37,92908,51643],{"class":50},[37,92910,92911],{"class":39,"line":16980},[37,92912,92913],{"class":43},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[37,92915,92916,92918,92920,92922,92924,92926,92928,92931],{"class":39,"line":17003},[37,92917,11562],{"class":54},[37,92919,92390],{"class":61},[37,92921,13905],{"class":54},[37,92923,54732],{"class":50},[37,92925,54735],{"class":2320},[37,92927,165],{"class":50},[37,92929,92930],{"class":185},"'video'",[37,92932,280],{"class":50},[37,92934,92935],{"class":39,"line":17017},[37,92936,92937],{"class":43},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[37,92939,92940,92943,92945,92947,92949,92952,92954],{"class":39,"line":17037},[37,92941,92942],{"class":50},"    video.ontimeupdate ",[37,92944,55],{"class":54},[37,92946,88690],{"class":50},[37,92948,91508],{"class":2320},[37,92950,92951],{"class":50},"(() ",[37,92953,85057],{"class":54},[37,92955,15913],{"class":50},[37,92957,92958],{"class":39,"line":17043},[37,92959,92960],{"class":43},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[37,92962,92963],{"class":39,"line":17054},[37,92964,92965],{"class":43},"      \u002F\u002F 控制台输出当前的时间\n",[37,92967,92968,92971],{"class":39,"line":17077},[37,92969,92970],{"class":43},"      \u002F\u002F console.log(video.currentTime)",[37,92972,92973],{"class":43},"  \u002F\u002F获得当前的视频时间\n",[37,92975,92976],{"class":39,"line":17099},[37,92977,92978],{"class":43},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[37,92980,92981,92983,92985,92987,92990],{"class":39,"line":17104},[37,92982,75018],{"class":50},[37,92984,71990],{"class":2320},[37,92986,165],{"class":50},[37,92988,92989],{"class":185},"'currentTime'",[37,92991,92992],{"class":50},", video.currentTime)\n",[37,92994,92995,92997,92999],{"class":39,"line":17110},[37,92996,54871],{"class":50},[37,92998,6758],{"class":61},[37,93000,280],{"class":50},[37,93002,93003],{"class":39,"line":17124},[37,93004,93005],{"class":43},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[37,93007,93008,93011,93014,93016,93019,93021],{"class":39,"line":17137},[37,93009,93010],{"class":50},"    video.",[37,93012,93013],{"class":2320},"onloadeddata",[37,93015,13905],{"class":54},[37,93017,93018],{"class":50}," () ",[37,93020,85057],{"class":54},[37,93022,15913],{"class":50},[37,93024,93025],{"class":39,"line":17142},[37,93026,60348],{"class":43},[37,93028,93029],{"class":39,"line":17156},[37,93030,93031],{"class":43},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[37,93033,93034,93037,93039,93042,93044,93046,93048,93050,93052],{"class":39,"line":17161},[37,93035,93036],{"class":50},"      video.currentTime ",[37,93038,55],{"class":54},[37,93040,93041],{"class":50}," localStorage.",[37,93043,72021],{"class":2320},[37,93045,165],{"class":50},[37,93047,92989],{"class":185},[37,93049,14055],{"class":50},[37,93051,71693],{"class":54},[37,93053,47670],{"class":61},[37,93055,93056],{"class":39,"line":17167},[37,93057,2544],{"class":50},[37,93059,93060,93062,93064],{"class":39,"line":17172},[37,93061,52753],{"class":50},[37,93063,52149],{"class":51636},[37,93065,51643],{"class":50},[37,93067,93068,93070,93072],{"class":39,"line":17186},[37,93069,52121],{"class":50},[37,93071,52136],{"class":51636},[37,93073,51643],{"class":50},[37,93075,93076],{"class":39,"line":17191},[37,93077,2757],{"emptyLinePlaceholder":454},[37,93079,93080,93082,93084],{"class":39,"line":17196},[37,93081,52121],{"class":50},[37,93083,50971],{"class":51636},[37,93085,51643],{"class":50},[446,93087,93088],{},"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":32,"searchDepth":47,"depth":47,"links":93090},[93091,93096,93100,93101,93102,93107,93112,93113,93114,93115,93122,93127,93128,93138,93142,93143,93147],{"id":77026,"depth":47,"text":77027,"children":93092},[93093,93094,93095],{"id":77030,"depth":104,"text":77031},{"id":77055,"depth":104,"text":77056},{"id":77067,"depth":104,"text":77068},{"id":77079,"depth":47,"text":77080,"children":93097},[93098,93099],{"id":77083,"depth":104,"text":77084},{"id":77098,"depth":104,"text":77099},{"id":77150,"depth":47,"text":77151},{"id":77194,"depth":47,"text":77195},{"id":77211,"depth":47,"text":77212,"children":93103},[93104,93105,93106],{"id":77215,"depth":104,"text":77216},{"id":77228,"depth":104,"text":77229},{"id":77333,"depth":104,"text":77334},{"id":77622,"depth":47,"text":77623,"children":93108},[93109,93110,93111],{"id":77626,"depth":104,"text":77627},{"id":78069,"depth":104,"text":78070},{"id":78480,"depth":104,"text":78481},{"id":78543,"depth":47,"text":78544},{"id":78622,"depth":47,"text":78623},{"id":78715,"depth":47,"text":78716},{"id":80560,"depth":47,"text":80561,"children":93116},[93117,93118,93119,93120,93121],{"id":80564,"depth":104,"text":80565},{"id":80576,"depth":104,"text":80577},{"id":80795,"depth":104,"text":80796},{"id":80813,"depth":104,"text":80814},{"id":80873,"depth":104,"text":80874},{"id":85141,"depth":47,"text":85142,"children":93123},[93124,93125,93126],{"id":85145,"depth":104,"text":85146},{"id":85163,"depth":104,"text":85164},{"id":85189,"depth":104,"text":85190},{"id":85198,"depth":47,"text":85199},{"id":85220,"depth":47,"text":85221,"children":93129},[93130,93131,93132,93133,93134,93135,93136,93137],{"id":85224,"depth":104,"text":85225},{"id":85485,"depth":104,"text":85486},{"id":85671,"depth":104,"text":85672},{"id":86038,"depth":104,"text":86039},{"id":86154,"depth":104,"text":86155},{"id":86190,"depth":104,"text":86191},{"id":86237,"depth":104,"text":86238},{"id":86271,"depth":104,"text":86272},{"id":87634,"depth":47,"text":87635,"children":93139},[93140,93141],{"id":87638,"depth":104,"text":87639},{"id":87675,"depth":104,"text":87676},{"id":89030,"depth":47,"text":89031},{"id":89401,"depth":47,"text":89402,"children":93144},[93145,93146],{"id":89405,"depth":104,"text":89406},{"id":89439,"depth":104,"text":89440},{"id":90168,"depth":47,"text":90169,"children":93148},[93149,93150,93151,93152],{"id":90172,"depth":104,"text":90173},{"id":91130,"depth":104,"text":91131},{"id":92072,"depth":104,"text":92073},{"id":92146,"depth":104,"text":92147},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77015,"description":451},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93159,"title":93160,"body":93161,"description":93172,"extension":452,"meta":93173,"navigation":454,"path":93175,"seo":93176,"stem":93177,"__hash__":93178},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93162,"toc":93170},[93163],[14,93164,93165,93166],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[51,93167,93168],{"href":93168,"rel":93169},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24206],{"title":32,"searchDepth":47,"depth":47,"links":93171},[],"三件套第三套学习",{"category":93174},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93160,"description":93172},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93180,"title":93181,"body":93182,"description":451,"extension":452,"meta":93287,"navigation":454,"path":93288,"seo":93289,"stem":93290,"__hash__":93291},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93183,"toc":93282},[93184,93191,93194,93197,93200,93204,93213,93216,93219,93223,93232,93235,93239,93242,93262,93265,93279],[14,93185,93186],{},[51,93187,93190],{"href":93188,"rel":93189},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24206],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93192,93181],{"id":93193},"_1安装",[14,93195,93196],{},"numpy是科学计算基础库,底层是C语言",[14,93198,93199],{},"三种方式：",[469,93201,93203],{"id":93202},"_11-通过pip安装","1.1 通过pip安装",[27,93205,93207],{"className":29,"code":93206,"language":31,"meta":32,"style":32},"pip install numpy\n",[34,93208,93209],{"__ignoreMap":32},[37,93210,93211],{"class":39,"line":40},[37,93212,93206],{"class":50},[14,93214,93215],{},"首选方式，自动处理依赖项",[14,93217,93218],{},"在提示系统命令符中使用cmd",[469,93220,93222],{"id":93221},"_12-通过anaconda安装","1.2 通过Anaconda安装",[27,93224,93226],{"className":29,"code":93225,"language":31,"meta":32,"style":32},"conda install numpy\n",[34,93227,93228],{"__ignoreMap":32},[37,93229,93230],{"class":39,"line":40},[37,93231,93225],{"class":50},[14,93233,93234],{},"自动解决环境依赖",[469,93236,93238],{"id":93237},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,93240,93241],{},"对于Debian\u002FUbuntu",[27,93243,93245],{"className":29,"code":93244,"language":31,"meta":32,"style":32},"sudo apt-get install python3-numpy\n",[34,93246,93247],{"__ignoreMap":32},[37,93248,93249,93252,93254,93257,93259],{"class":39,"line":40},[37,93250,93251],{"class":50},"sudo apt",[37,93253,384],{"class":54},[37,93255,93256],{"class":50},"get install python3",[37,93258,384],{"class":54},[37,93260,93261],{"class":50},"numpy\n",[14,93263,93264],{},"对于Fedora:",[27,93266,93268],{"className":29,"code":93267,"language":31,"meta":32,"style":32},"sudo dnf install python3-numpy\n",[34,93269,93270],{"__ignoreMap":32},[37,93271,93272,93275,93277],{"class":39,"line":40},[37,93273,93274],{"class":50},"sudo dnf install python3",[37,93276,384],{"class":54},[37,93278,93261],{"class":50},[446,93280,93281],{},"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":32,"searchDepth":47,"depth":47,"links":93283},[93284,93285,93286],{"id":93202,"depth":47,"text":93203},{"id":93221,"depth":47,"text":93222},{"id":93237,"depth":47,"text":93238},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93181,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93293,"title":93294,"body":93295,"description":451,"extension":452,"meta":93407,"navigation":454,"path":93408,"seo":93409,"stem":93410,"__hash__":93411},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93296,"toc":93405},[93297,93300,93303,93306,93309,93312,93315,93318,93321,93324,93399,93402],[10,93298,93294],{"id":93299},"_10算数函数",[14,93301,93302],{},"加减乘除运算跟python基础语法没区别",[14,93304,93305],{},"除了python那种方法外还可以使用函数",[14,93307,93308],{},"加：np.add(a,b)",[14,93310,93311],{},"减：np.subtract(a,b)",[14,93313,93314],{},"乘：np.multiply(a,b)",[14,93316,93317],{},"除：np.divide(a,b) == a\u002Fb",[14,93319,93320],{},"取余：np.mod(a,b) == a%b",[14,93322,93323],{},"必须会的用法：",[27,93325,93327],{"className":29,"code":93326,"language":31,"meta":32,"style":32},"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",[34,93328,93329,93351,93371,93381,93394],{"__ignoreMap":32},[37,93330,93331,93333,93335,93338,93340,93343,93345,93347,93349],{"class":39,"line":40},[37,93332,51],{"class":50},[37,93334,55],{"class":54},[37,93336,93337],{"class":50},"np.arange(",[37,93339,934],{"class":61},[37,93341,93342],{"class":50},").reshape(",[37,93344,62],{"class":61},[37,93346,65],{"class":50},[37,93348,62],{"class":61},[37,93350,280],{"class":50},[37,93352,93353,93355,93357,93359,93361,93363,93365,93367,93369],{"class":39,"line":47},[37,93354,376],{"class":50},[37,93356,55],{"class":54},[37,93358,58],{"class":50},[37,93360,98],{"class":61},[37,93362,65],{"class":50},[37,93364,98],{"class":61},[37,93366,65],{"class":50},[37,93368,98],{"class":61},[37,93370,101],{"class":50},[37,93372,93373,93376,93378],{"class":39,"line":104},[37,93374,93375],{"class":50},"result",[37,93377,55],{"class":54},[37,93379,93380],{"class":50},"np.empty_like(a)\n",[37,93382,93383,93386,93389,93391],{"class":39,"line":113},[37,93384,93385],{"class":50},"np.add(a,b,",[37,93387,93388],{"class":159},"out",[37,93390,55],{"class":54},[37,93392,93393],{"class":50},"result)\n",[37,93395,93396],{"class":39,"line":189},[37,93397,93398],{"class":50},"result\n",[14,93400,93401],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[446,93403,93404],{},"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":32,"searchDepth":47,"depth":47,"links":93406},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93294,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93413,"title":93414,"body":93415,"description":451,"extension":452,"meta":94173,"navigation":454,"path":94174,"seo":94175,"stem":94176,"__hash__":94177},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93416,"toc":94160},[93417,93420,93423,93426,93430,93467,93471,93515,93575,93579,93582,93621,93623,93667,93671,93707,93711,93780,93784,93848,93852,93855,93858,93861,93864,93900,93904,93944,93948,94020,94023,94027,94090,94094,94157],[10,93418,93414],{"id":93419},"_11统计函数",[14,93421,93422],{},"sum max min mean",[14,93424,93425],{},"这些有axis参数，可以指定方向",[469,93427,93429],{"id":93428},"_111-sum求和函数","11.1 sum()求和函数",[27,93431,93433],{"className":29,"code":93432,"language":31,"meta":32,"style":32},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[34,93434,93435,93439,93459],{"__ignoreMap":32},[37,93436,93437],{"class":39,"line":40},[37,93438,44],{"class":43},[37,93440,93441,93443,93445,93447,93449,93451,93453,93455,93457],{"class":39,"line":47},[37,93442,51],{"class":50},[37,93444,55],{"class":54},[37,93446,151],{"class":50},[37,93448,332],{"class":61},[37,93450,65],{"class":50},[37,93452,154],{"class":61},[37,93454,65],{"class":50},[37,93456,1210],{"class":61},[37,93458,280],{"class":50},[37,93460,93461,93464],{"class":39,"line":104},[37,93462,93463],{"class":50},"np.sum(a)",[37,93465,93466],{"class":43},"#求和\n",[469,93468,93470],{"id":93469},"_112-max求最大值函数","11.2 max()求最大值函数",[27,93472,93474],{"className":29,"code":93473,"language":31,"meta":32,"style":32},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[34,93475,93476,93480,93500,93505,93510],{"__ignoreMap":32},[37,93477,93478],{"class":39,"line":40},[37,93479,44],{"class":43},[37,93481,93482,93484,93486,93488,93490,93492,93494,93496,93498],{"class":39,"line":47},[37,93483,51],{"class":50},[37,93485,55],{"class":54},[37,93487,151],{"class":50},[37,93489,332],{"class":61},[37,93491,65],{"class":50},[37,93493,154],{"class":61},[37,93495,65],{"class":50},[37,93497,1210],{"class":61},[37,93499,280],{"class":50},[37,93501,93502],{"class":39,"line":104},[37,93503,93504],{"class":50},"np.max(a)\n",[37,93506,93507],{"class":39,"line":113},[37,93508,93509],{"class":43},"#最大索引(求最大元素的索引)arg\n",[37,93511,93512],{"class":39,"line":189},[37,93513,93514],{"class":50},"np.argmax(a)\n",[27,93516,93518],{"className":29,"code":93517,"language":31,"meta":32,"style":32},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[34,93519,93520,93541,93561,93565],{"__ignoreMap":32},[37,93521,93522,93524,93526,93529,93531,93533,93535,93537,93539],{"class":39,"line":40},[37,93523,11260],{"class":50},[37,93525,55],{"class":54},[37,93527,93528],{"class":50}," np.array([",[37,93530,332],{"class":61},[37,93532,12776],{"class":50},[37,93534,836],{"class":61},[37,93536,12776],{"class":50},[37,93538,62],{"class":61},[37,93540,101],{"class":50},[37,93542,93543,93545,93547,93549,93551,93553,93555,93557,93559],{"class":39,"line":47},[37,93544,11286],{"class":50},[37,93546,55],{"class":54},[37,93548,93528],{"class":50},[37,93550,62],{"class":61},[37,93552,12776],{"class":50},[37,93554,602],{"class":61},[37,93556,12776],{"class":50},[37,93558,168],{"class":61},[37,93560,101],{"class":50},[37,93562,93563],{"class":39,"line":104},[37,93564,2757],{"emptyLinePlaceholder":454},[37,93566,93567,93569,93572],{"class":39,"line":113},[37,93568,30755],{"class":61},[37,93570,93571],{"class":50},"(np.maximum(a, b))   ",[37,93573,93574],{"class":43},"# [3 5 4]，每个位置上取较大值\n",[469,93576,93578],{"id":93577},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93580,93581],{},"①一维数组：",[27,93583,93585],{"className":29,"code":93584,"language":31,"meta":32,"style":32},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[34,93586,93587,93591,93611,93616],{"__ignoreMap":32},[37,93588,93589],{"class":39,"line":40},[37,93590,44],{"class":43},[37,93592,93593,93595,93597,93599,93601,93603,93605,93607,93609],{"class":39,"line":47},[37,93594,51],{"class":50},[37,93596,55],{"class":54},[37,93598,151],{"class":50},[37,93600,332],{"class":61},[37,93602,65],{"class":50},[37,93604,154],{"class":61},[37,93606,65],{"class":50},[37,93608,1210],{"class":61},[37,93610,280],{"class":50},[37,93612,93613],{"class":39,"line":104},[37,93614,93615],{"class":43},"#求平均值\n",[37,93617,93618],{"class":39,"line":113},[37,93619,93620],{"class":50},"np.mean(a)\n",[14,93622,122],{},[27,93624,93626],{"className":29,"code":93625,"language":31,"meta":32,"style":32},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[34,93627,93628,93633,93657,93662],{"__ignoreMap":32},[37,93629,93630],{"class":39,"line":40},[37,93631,93632],{"class":43},"#二维数组\n",[37,93634,93635,93637,93639,93641,93643,93645,93647,93649,93651,93653,93655],{"class":39,"line":47},[37,93636,146],{"class":50},[37,93638,55],{"class":54},[37,93640,93337],{"class":50},[37,93642,332],{"class":61},[37,93644,65],{"class":50},[37,93646,1034],{"class":61},[37,93648,93342],{"class":50},[37,93650,62],{"class":61},[37,93652,65],{"class":50},[37,93654,168],{"class":61},[37,93656,280],{"class":50},[37,93658,93659],{"class":39,"line":104},[37,93660,93661],{"class":43},"#对数组中的所有数求平均\n",[37,93663,93664],{"class":39,"line":113},[37,93665,93666],{"class":50},"np.mean(aa)\n",[469,93668,93670],{"id":93669},"_114-median求中位数函数","11.4 median()求中位数函数",[27,93672,93674],{"className":29,"code":93673,"language":31,"meta":32,"style":32},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[34,93675,93676,93681,93697,93702],{"__ignoreMap":32},[37,93677,93678],{"class":39,"line":40},[37,93679,93680],{"class":43},"#求中位数\n",[37,93682,93683,93685,93687,93689,93691,93693,93695],{"class":39,"line":47},[37,93684,376],{"class":50},[37,93686,55],{"class":54},[37,93688,93337],{"class":50},[37,93690,332],{"class":61},[37,93692,65],{"class":50},[37,93694,98],{"class":61},[37,93696,280],{"class":50},[37,93698,93699],{"class":39,"line":104},[37,93700,93701],{"class":50},"np.median(b)\n",[37,93703,93704],{"class":39,"line":113},[37,93705,93706],{"class":43},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[469,93708,93710],{"id":93709},"_115-power求幂运算函数","11.5 power()求幂运算函数",[27,93712,93714],{"className":29,"code":93713,"language":31,"meta":32,"style":32},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[34,93715,93716,93732,93737,93742,93751,93756,93765],{"__ignoreMap":32},[37,93717,93718,93720,93722,93724,93726,93728,93730],{"class":39,"line":40},[37,93719,376],{"class":50},[37,93721,55],{"class":54},[37,93723,93337],{"class":50},[37,93725,332],{"class":61},[37,93727,65],{"class":50},[37,93729,98],{"class":61},[37,93731,280],{"class":50},[37,93733,93734],{"class":39,"line":47},[37,93735,93736],{"class":43},"#幂运算\n",[37,93738,93739],{"class":39,"line":104},[37,93740,93741],{"class":43},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[37,93743,93744,93747,93749],{"class":39,"line":113},[37,93745,93746],{"class":50},"np.power(b,",[37,93748,602],{"class":61},[37,93750,280],{"class":50},[37,93752,93753],{"class":39,"line":189},[37,93754,93755],{"class":43},"#或者以下代码，将数据存储起来\n",[37,93757,93758,93760,93762],{"class":39,"line":195},[37,93759,1354],{"class":50},[37,93761,55],{"class":54},[37,93763,93764],{"class":50},"np.empty_like(b)\n",[37,93766,93767,93769,93771,93773,93775,93777],{"class":39,"line":201},[37,93768,93746],{"class":50},[37,93770,602],{"class":61},[37,93772,65],{"class":50},[37,93774,93388],{"class":159},[37,93776,55],{"class":54},[37,93778,93779],{"class":50},"y)\n",[469,93781,93783],{"id":93782},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[27,93785,93787],{"className":29,"code":93786,"language":31,"meta":32,"style":32},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[34,93788,93789,93805,93810,93815,93819,93837],{"__ignoreMap":32},[37,93790,93791,93793,93795,93797,93799,93801,93803],{"class":39,"line":40},[37,93792,376],{"class":50},[37,93794,55],{"class":54},[37,93796,93337],{"class":50},[37,93798,332],{"class":61},[37,93800,65],{"class":50},[37,93802,98],{"class":61},[37,93804,280],{"class":50},[37,93806,93807],{"class":39,"line":47},[37,93808,93809],{"class":43},"#开方\n",[37,93811,93812],{"class":39,"line":104},[37,93813,93814],{"class":50},"np.sqrt(b)\n",[37,93816,93817],{"class":39,"line":113},[37,93818,93755],{"class":43},[37,93820,93821,93823,93825,93828,93831,93833,93835],{"class":39,"line":189},[37,93822,1354],{"class":50},[37,93824,55],{"class":54},[37,93826,93827],{"class":50},"np.empty_like(b,",[37,93829,93830],{"class":159},"dtype",[37,93832,55],{"class":54},[37,93834,568],{"class":61},[37,93836,280],{"class":50},[37,93838,93839,93842,93844,93846],{"class":39,"line":195},[37,93840,93841],{"class":50},"np.sqrt(b,",[37,93843,93388],{"class":159},[37,93845,55],{"class":54},[37,93847,93779],{"class":50},[469,93849,93851],{"id":93850},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93853,93854],{},"对数组中的元素累计求和，可指定轴",[14,93856,93857],{},"#累计求和的意思是：",[14,93859,93860],{},"a = np.array([1, 2, 3, 4])",[14,93862,93863],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[27,93865,93867],{"className":29,"code":93866,"language":31,"meta":32,"style":32},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[34,93868,93869,93885,93890,93895],{"__ignoreMap":32},[37,93870,93871,93873,93875,93877,93879,93881,93883],{"class":39,"line":40},[37,93872,376],{"class":50},[37,93874,55],{"class":54},[37,93876,93337],{"class":50},[37,93878,332],{"class":61},[37,93880,65],{"class":50},[37,93882,98],{"class":61},[37,93884,280],{"class":50},[37,93886,93887],{"class":39,"line":47},[37,93888,93889],{"class":50},"np.cumsum(b)\n",[37,93891,93892],{"class":39,"line":104},[37,93893,93894],{"class":43},"#结果：\n",[37,93896,93897],{"class":39,"line":113},[37,93898,93899],{"class":43},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[469,93901,93903],{"id":93902},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[27,93905,93907],{"className":29,"code":93906,"language":31,"meta":32,"style":32},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[34,93908,93909,93925,93930,93935,93939],{"__ignoreMap":32},[37,93910,93911,93913,93915,93917,93919,93921,93923],{"class":39,"line":40},[37,93912,376],{"class":50},[37,93914,55],{"class":54},[37,93916,93337],{"class":50},[37,93918,332],{"class":61},[37,93920,65],{"class":50},[37,93922,98],{"class":61},[37,93924,280],{"class":50},[37,93926,93927],{"class":39,"line":47},[37,93928,93929],{"class":43},"#对数组中的元素累计求积，可指定轴\n",[37,93931,93932],{"class":39,"line":104},[37,93933,93934],{"class":50},"np.cumprod(b)\n",[37,93936,93937],{"class":39,"line":113},[37,93938,93894],{"class":43},[37,93940,93941],{"class":39,"line":189},[37,93942,93943],{"class":43},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[469,93945,93947],{"id":93946},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[27,93949,93951],{"className":29,"code":93950,"language":31,"meta":32,"style":32},"#删除数组中的重复数据，并对数据进行排序\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",[34,93952,93953,93958,94006,94011,94015],{"__ignoreMap":32},[37,93954,93955],{"class":39,"line":40},[37,93956,93957],{"class":43},"#删除数组中的重复数据，并对数据进行排序\n",[37,93959,93960,93962,93964,93966,93968,93970,93972,93974,93976,93978,93980,93982,93984,93986,93988,93990,93992,93994,93996,93998,94000,94002,94004],{"class":39,"line":47},[37,93961,51],{"class":50},[37,93963,55],{"class":54},[37,93965,58],{"class":50},[37,93967,332],{"class":61},[37,93969,65],{"class":50},[37,93971,602],{"class":61},[37,93973,65],{"class":50},[37,93975,62],{"class":61},[37,93977,65],{"class":50},[37,93979,68],{"class":61},[37,93981,65],{"class":50},[37,93983,62],{"class":61},[37,93985,65],{"class":50},[37,93987,98],{"class":61},[37,93989,65],{"class":50},[37,93991,720],{"class":61},[37,93993,65],{"class":50},[37,93995,135],{"class":61},[37,93997,65],{"class":50},[37,93999,78],{"class":61},[37,94001,65],{"class":50},[37,94003,168],{"class":61},[37,94005,101],{"class":50},[37,94007,94008],{"class":39,"line":104},[37,94009,94010],{"class":50},"np.unique(a)\n",[37,94012,94013],{"class":39,"line":113},[37,94014,93894],{"class":43},[37,94016,94017],{"class":39,"line":189},[37,94018,94019],{"class":43},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,94021,94022],{},"升序形式排序",[469,94024,94026],{"id":94025},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[27,94028,94030],{"className":29,"code":94029,"language":31,"meta":32,"style":32},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[34,94031,94032,94080,94085],{"__ignoreMap":32},[37,94033,94034,94036,94038,94040,94042,94044,94046,94048,94050,94052,94054,94056,94058,94060,94062,94064,94066,94068,94070,94072,94074,94076,94078],{"class":39,"line":40},[37,94035,51],{"class":50},[37,94037,55],{"class":54},[37,94039,58],{"class":50},[37,94041,332],{"class":61},[37,94043,65],{"class":50},[37,94045,602],{"class":61},[37,94047,65],{"class":50},[37,94049,62],{"class":61},[37,94051,65],{"class":50},[37,94053,68],{"class":61},[37,94055,65],{"class":50},[37,94057,62],{"class":61},[37,94059,65],{"class":50},[37,94061,98],{"class":61},[37,94063,65],{"class":50},[37,94065,720],{"class":61},[37,94067,65],{"class":50},[37,94069,135],{"class":61},[37,94071,65],{"class":50},[37,94073,78],{"class":61},[37,94075,65],{"class":50},[37,94077,168],{"class":61},[37,94079,101],{"class":50},[37,94081,94082],{"class":39,"line":47},[37,94083,94084],{"class":43},"#返回数组中非零元素的索引\n",[37,94086,94087],{"class":39,"line":104},[37,94088,94089],{"class":50},"np.nonzero(a)\n",[469,94091,94093],{"id":94092},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[27,94095,94097],{"className":29,"code":94096,"language":31,"meta":32,"style":32},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[34,94098,94099,94147,94152],{"__ignoreMap":32},[37,94100,94101,94103,94105,94107,94109,94111,94113,94115,94117,94119,94121,94123,94125,94127,94129,94131,94133,94135,94137,94139,94141,94143,94145],{"class":39,"line":40},[37,94102,51],{"class":50},[37,94104,55],{"class":54},[37,94106,58],{"class":50},[37,94108,332],{"class":61},[37,94110,65],{"class":50},[37,94112,602],{"class":61},[37,94114,65],{"class":50},[37,94116,62],{"class":61},[37,94118,65],{"class":50},[37,94120,68],{"class":61},[37,94122,65],{"class":50},[37,94124,62],{"class":61},[37,94126,65],{"class":50},[37,94128,98],{"class":61},[37,94130,65],{"class":50},[37,94132,720],{"class":61},[37,94134,65],{"class":50},[37,94136,135],{"class":61},[37,94138,65],{"class":50},[37,94140,78],{"class":61},[37,94142,65],{"class":50},[37,94144,168],{"class":61},[37,94146,101],{"class":50},[37,94148,94149],{"class":39,"line":47},[37,94150,94151],{"class":43},"#计算一组数中最大值与最小值的差，可指定轴\n",[37,94153,94154],{"class":39,"line":104},[37,94155,94156],{"class":50},"np.ptp(a)\n",[446,94158,94159],{},"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":32,"searchDepth":47,"depth":47,"links":94161},[94162,94163,94164,94165,94166,94167,94168,94169,94170,94171,94172],{"id":93428,"depth":47,"text":93429},{"id":93469,"depth":47,"text":93470},{"id":93577,"depth":47,"text":93578},{"id":93669,"depth":47,"text":93670},{"id":93709,"depth":47,"text":93710},{"id":93782,"depth":47,"text":93783},{"id":93850,"depth":47,"text":93851},{"id":93902,"depth":47,"text":93903},{"id":93946,"depth":47,"text":93947},{"id":94025,"depth":47,"text":94026},{"id":94092,"depth":47,"text":94093},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93414,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94179,"title":94180,"body":94181,"description":451,"extension":452,"meta":94835,"navigation":454,"path":94836,"seo":94837,"stem":94838,"__hash__":94839},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94182,"toc":94823},[94183,94186,94190,94193,94408,94412,94415,94624,94628,94694,94699,94703,94706,94709,94747,94751,94754,94759,94763,94766,94769,94774,94778,94781,94785,94788,94791,94796,94800,94803,94806,94811,94815,94820],[10,94184,94180],{"id":94185},"_12其他常用函数",[469,94187,94189],{"id":94188},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,94191,94192],{},"将数组的数据按照行列复制扩展",[27,94194,94196],{"className":29,"code":94195,"language":31,"meta":32,"style":32},"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",[34,94197,94198,94214,94223,94227,94232,94237,94250,94254,94258,94263,94268,94272,94277,94301,94313,94317,94321,94326,94331,94336,94341,94345,94358,94362,94366,94371,94376,94381,94386,94391,94395,94399,94404],{"__ignoreMap":32},[37,94199,94200,94202,94204,94206,94208,94210,94212],{"class":39,"line":40},[37,94201,51],{"class":50},[37,94203,55],{"class":54},[37,94205,93337],{"class":50},[37,94207,332],{"class":61},[37,94209,65],{"class":50},[37,94211,836],{"class":61},[37,94213,280],{"class":50},[37,94215,94216,94219,94221],{"class":39,"line":47},[37,94217,94218],{"class":50},"np.tile(a,",[37,94220,602],{"class":61},[37,94222,280],{"class":50},[37,94224,94225],{"class":39,"line":104},[37,94226,93894],{"class":43},[37,94228,94229],{"class":39,"line":113},[37,94230,94231],{"class":43},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[37,94233,94234],{"class":39,"line":189},[37,94235,94236],{"class":43},"#行复制两次，列复制三次\n",[37,94238,94239,94242,94244,94246,94248],{"class":39,"line":195},[37,94240,94241],{"class":50},"np.tile(a,(",[37,94243,602],{"class":61},[37,94245,65],{"class":50},[37,94247,62],{"class":61},[37,94249,175],{"class":50},[37,94251,94252],{"class":39,"line":201},[37,94253,93894],{"class":43},[37,94255,94256],{"class":39,"line":207},[37,94257,186],{"class":185},[37,94259,94260],{"class":39,"line":213},[37,94261,94262],{"class":185},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[37,94264,94265],{"class":39,"line":218},[37,94266,94267],{"class":185},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[37,94269,94270],{"class":39,"line":227},[37,94271,186],{"class":185},[37,94273,94274],{"class":39,"line":232},[37,94275,94276],{"class":43},"#创建二维数组\n",[37,94278,94279,94281,94283,94285,94287,94289,94291,94293,94295,94297,94299],{"class":39,"line":238},[37,94280,146],{"class":50},[37,94282,55],{"class":54},[37,94284,93337],{"class":50},[37,94286,332],{"class":61},[37,94288,65],{"class":50},[37,94290,1034],{"class":61},[37,94292,93342],{"class":50},[37,94294,168],{"class":61},[37,94296,65],{"class":50},[37,94298,62],{"class":61},[37,94300,280],{"class":50},[37,94302,94303,94306,94308,94310],{"class":39,"line":244},[37,94304,94305],{"class":50},"np.tile(aa,",[37,94307,602],{"class":61},[37,94309,138],{"class":50},[37,94311,94312],{"class":43},"#一个数的时候就是行\n",[37,94314,94315],{"class":39,"line":250},[37,94316,93894],{"class":43},[37,94318,94319],{"class":39,"line":256},[37,94320,186],{"class":185},[37,94322,94323],{"class":39,"line":261},[37,94324,94325],{"class":185},"array([[ 1,  2,  3,  1,  2,  3],\n",[37,94327,94328],{"class":39,"line":267},[37,94329,94330],{"class":185},"       [ 4,  5,  6,  4,  5,  6],\n",[37,94332,94333],{"class":39,"line":283},[37,94334,94335],{"class":185},"       [ 7,  8,  9,  7,  8,  9],\n",[37,94337,94338],{"class":39,"line":288},[37,94339,94340],{"class":185},"       [10, 11, 12, 10, 11, 12]])\n",[37,94342,94343],{"class":39,"line":294},[37,94344,186],{"class":185},[37,94346,94347,94350,94352,94354,94356],{"class":39,"line":300},[37,94348,94349],{"class":50},"np.tile(aa,(",[37,94351,602],{"class":61},[37,94353,65],{"class":50},[37,94355,62],{"class":61},[37,94357,175],{"class":50},[37,94359,94360],{"class":39,"line":306},[37,94361,93894],{"class":43},[37,94363,94364],{"class":39,"line":312},[37,94365,186],{"class":185},[37,94367,94368],{"class":39,"line":317},[37,94369,94370],{"class":185},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[37,94372,94373],{"class":39,"line":323},[37,94374,94375],{"class":185},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[37,94377,94378],{"class":39,"line":337},[37,94379,94380],{"class":185},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[37,94382,94383],{"class":39,"line":342},[37,94384,94385],{"class":185},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[37,94387,94388],{"class":39,"line":347},[37,94389,94390],{"class":185},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[37,94392,94393],{"class":39,"line":352},[37,94394,94375],{"class":185},[37,94396,94397],{"class":39,"line":357},[37,94398,94380],{"class":185},[37,94400,94401],{"class":39,"line":362},[37,94402,94403],{"class":185},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[37,94405,94406],{"class":39,"line":367},[37,94407,186],{"class":185},[469,94409,94411],{"id":94410},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94413,94414],{},"repeat()将数组中的每个元素重复若干次",[27,94416,94418],{"className":29,"code":94417,"language":31,"meta":32,"style":32},"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",[34,94419,94420,94436,94445,94449,94454,94478,94483,94492,94496,94501,94505,94510,94526,94530,94534,94539,94544,94549,94553,94558,94562,94567,94572,94576,94592,94596,94600,94605,94610,94615,94620],{"__ignoreMap":32},[37,94421,94422,94424,94426,94428,94430,94432,94434],{"class":39,"line":40},[37,94423,51],{"class":50},[37,94425,55],{"class":54},[37,94427,93337],{"class":50},[37,94429,332],{"class":61},[37,94431,65],{"class":50},[37,94433,836],{"class":61},[37,94435,280],{"class":50},[37,94437,94438,94441,94443],{"class":39,"line":47},[37,94439,94440],{"class":50},"np.repeat(a,",[37,94442,62],{"class":61},[37,94444,280],{"class":50},[37,94446,94447],{"class":39,"line":104},[37,94448,93894],{"class":43},[37,94450,94451],{"class":39,"line":113},[37,94452,94453],{"class":43},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[37,94455,94456,94458,94460,94462,94464,94466,94468,94470,94472,94474,94476],{"class":39,"line":189},[37,94457,146],{"class":50},[37,94459,55],{"class":54},[37,94461,93337],{"class":50},[37,94463,332],{"class":61},[37,94465,65],{"class":50},[37,94467,1034],{"class":61},[37,94469,93342],{"class":50},[37,94471,168],{"class":61},[37,94473,65],{"class":50},[37,94475,62],{"class":61},[37,94477,280],{"class":50},[37,94479,94480],{"class":39,"line":195},[37,94481,94482],{"class":43},"#这个重复之后二维变成一维\n",[37,94484,94485,94488,94490],{"class":39,"line":201},[37,94486,94487],{"class":50},"np.repeat(aa,",[37,94489,602],{"class":61},[37,94491,280],{"class":50},[37,94493,94494],{"class":39,"line":207},[37,94495,186],{"class":185},[37,94497,94498],{"class":39,"line":213},[37,94499,94500],{"class":185},"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",[37,94502,94503],{"class":39,"line":218},[37,94504,186],{"class":185},[37,94506,94507],{"class":39,"line":227},[37,94508,94509],{"class":43},"#指定axis\n",[37,94511,94512,94514,94516,94518,94520,94522,94524],{"class":39,"line":232},[37,94513,94487],{"class":50},[37,94515,602],{"class":61},[37,94517,65],{"class":50},[37,94519,273],{"class":159},[37,94521,55],{"class":54},[37,94523,135],{"class":61},[37,94525,280],{"class":50},[37,94527,94528],{"class":39,"line":238},[37,94529,93894],{"class":43},[37,94531,94532],{"class":39,"line":244},[37,94533,186],{"class":185},[37,94535,94536],{"class":39,"line":250},[37,94537,94538],{"class":185},"array([[ 1,  2,  3],\n",[37,94540,94541],{"class":39,"line":256},[37,94542,94543],{"class":185},"       [ 1,  2,  3],\n",[37,94545,94546],{"class":39,"line":261},[37,94547,94548],{"class":185},"       [ 4,  5,  6],\n",[37,94550,94551],{"class":39,"line":267},[37,94552,94548],{"class":185},[37,94554,94555],{"class":39,"line":283},[37,94556,94557],{"class":185},"       [ 7,  8,  9],\n",[37,94559,94560],{"class":39,"line":288},[37,94561,94557],{"class":185},[37,94563,94564],{"class":39,"line":294},[37,94565,94566],{"class":185},"       [10, 11, 12],\n",[37,94568,94569],{"class":39,"line":300},[37,94570,94571],{"class":185},"       [10, 11, 12]])\n",[37,94573,94574],{"class":39,"line":306},[37,94575,186],{"class":185},[37,94577,94578,94580,94582,94584,94586,94588,94590],{"class":39,"line":312},[37,94579,94487],{"class":50},[37,94581,602],{"class":61},[37,94583,65],{"class":50},[37,94585,273],{"class":159},[37,94587,55],{"class":54},[37,94589,332],{"class":61},[37,94591,280],{"class":50},[37,94593,94594],{"class":39,"line":317},[37,94595,93894],{"class":43},[37,94597,94598],{"class":39,"line":323},[37,94599,186],{"class":185},[37,94601,94602],{"class":39,"line":337},[37,94603,94604],{"class":185},"array([[ 1,  1,  2,  2,  3,  3],\n",[37,94606,94607],{"class":39,"line":342},[37,94608,94609],{"class":185},"       [ 4,  4,  5,  5,  6,  6],\n",[37,94611,94612],{"class":39,"line":347},[37,94613,94614],{"class":185},"       [ 7,  7,  8,  8,  9,  9],\n",[37,94616,94617],{"class":39,"line":352},[37,94618,94619],{"class":185},"       [10, 10, 11, 11, 12, 12]])\n",[37,94621,94622],{"class":39,"line":357},[37,94623,186],{"class":185},[469,94625,94627],{"id":94626},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[27,94629,94631],{"className":29,"code":94630,"language":31,"meta":32,"style":32},"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",[34,94632,94633,94649,94654,94666,94670,94675,94685,94689],{"__ignoreMap":32},[37,94634,94635,94637,94639,94641,94643,94645,94647],{"class":39,"line":40},[37,94636,51],{"class":50},[37,94638,55],{"class":54},[37,94640,93337],{"class":50},[37,94642,332],{"class":61},[37,94644,65],{"class":50},[37,94646,836],{"class":61},[37,94648,280],{"class":50},[37,94650,94651],{"class":39,"line":47},[37,94652,94653],{"class":43},"#array([，2，3，4])\n",[37,94655,94656,94659,94661,94663],{"class":39,"line":104},[37,94657,94658],{"class":50},"np.roll(a,",[37,94660,602],{"class":61},[37,94662,138],{"class":50},[37,94664,94665],{"class":43},"#传正数向后调多少位，传负数向前调多少位\n",[37,94667,94668],{"class":39,"line":113},[37,94669,93894],{"class":43},[37,94671,94672],{"class":39,"line":189},[37,94673,94674],{"class":43},"#array([3, 4, 1, 2])\n",[37,94676,94677,94679,94681,94683],{"class":39,"line":195},[37,94678,94658],{"class":50},[37,94680,384],{"class":54},[37,94682,332],{"class":61},[37,94684,280],{"class":50},[37,94686,94687],{"class":39,"line":201},[37,94688,93894],{"class":43},[37,94690,94691],{"class":39,"line":207},[37,94692,94693],{"class":43},"#array([2, 3, 4, 1])\n",[14,94695,94696],{},[1838,94697],{"alt":32,"src":94698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[469,94700,94702],{"id":94701},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94704,94705],{},"resize()重新调整数组的大小",[14,94707,94708],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[27,94710,94712],{"className":29,"code":94711,"language":31,"meta":32,"style":32},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[34,94713,94714,94719,94732],{"__ignoreMap":32},[37,94715,94716],{"class":39,"line":40},[37,94717,94718],{"class":43},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[37,94720,94721,94724,94726,94728,94730],{"class":39,"line":47},[37,94722,94723],{"class":50},"np.resize(aa,(",[37,94725,602],{"class":61},[37,94727,65],{"class":50},[37,94729,93],{"class":61},[37,94731,175],{"class":50},[37,94733,94734,94736,94738,94740,94742,94744],{"class":39,"line":104},[37,94735,94723],{"class":50},[37,94737,602],{"class":61},[37,94739,65],{"class":50},[37,94741,934],{"class":61},[37,94743,83106],{"class":50},[37,94745,94746],{"class":43},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[469,94748,94750],{"id":94749},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94752,94753],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94755,94756],{},[1838,94757],{"alt":32,"src":94758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[469,94760,94762],{"id":94761},"_126-保存加载文件","12.6 保存加载文件",[14,94764,94765],{},"savetxt():将数据保存到txt文件中",[14,94767,94768],{},"loadtxt():从文件加载数据",[14,94770,94771],{},[1838,94772],{"alt":32,"src":94773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[469,94775,94777],{"id":94776},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94779,94780],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[469,94782,94784],{"id":94783},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94786,94787],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94789,94790],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94792,94793],{},[1838,94794],{"alt":32,"src":94795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[469,94797,94799],{"id":94798},"_129-where语句","12.9 where语句",[14,94801,94802],{},"np.where(条件,x,y)",[14,94804,94805],{},"如果条件为True,对应值为x,否则对应值为y",[14,94807,94808],{},[1838,94809],{"alt":32,"src":94810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[469,94812,94814],{"id":94813},"_1210-dot矩阵","12.10 dot()矩阵",[14,94816,94817],{},[1838,94818],{"alt":32,"src":94819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[446,94821,94822],{},"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":32,"searchDepth":47,"depth":47,"links":94824},[94825,94826,94827,94828,94829,94830,94831,94832,94833,94834],{"id":94188,"depth":47,"text":94189},{"id":94410,"depth":47,"text":94411},{"id":94626,"depth":47,"text":94627},{"id":94701,"depth":47,"text":94702},{"id":94749,"depth":47,"text":94750},{"id":94761,"depth":47,"text":94762},{"id":94776,"depth":47,"text":94777},{"id":94783,"depth":47,"text":94784},{"id":94798,"depth":47,"text":94799},{"id":94813,"depth":47,"text":94814},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94180,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":4,"title":5,"body":94841,"description":451,"extension":452,"meta":95155,"navigation":454,"path":455,"seo":95156,"stem":457,"__hash__":458},{"type":7,"value":94842,"toc":95153},[94843,94845,94847,94849,94851,94853,94913,94915,95151],[10,94844,5],{"id":12},[14,94846,16],{},[14,94848,19],{},[14,94850,22],{},[14,94852,25],{},[27,94854,94855],{"className":29,"code":30,"language":31,"meta":32,"style":32},[34,94856,94857,94861,94901,94907],{"__ignoreMap":32},[37,94858,94859],{"class":39,"line":40},[37,94860,44],{"class":43},[37,94862,94863,94865,94867,94869,94871,94873,94875,94877,94879,94881,94883,94885,94887,94889,94891,94893,94895,94897,94899],{"class":39,"line":47},[37,94864,51],{"class":50},[37,94866,55],{"class":54},[37,94868,58],{"class":50},[37,94870,62],{"class":61},[37,94872,65],{"class":50},[37,94874,68],{"class":61},[37,94876,65],{"class":50},[37,94878,73],{"class":61},[37,94880,65],{"class":50},[37,94882,78],{"class":61},[37,94884,65],{"class":50},[37,94886,83],{"class":61},[37,94888,65],{"class":50},[37,94890,88],{"class":61},[37,94892,65],{"class":50},[37,94894,93],{"class":61},[37,94896,65],{"class":50},[37,94898,98],{"class":61},[37,94900,101],{"class":50},[37,94902,94903,94905],{"class":39,"line":104},[37,94904,107],{"class":50},[37,94906,110],{"class":43},[37,94908,94909,94911],{"class":39,"line":113},[37,94910,116],{"class":50},[37,94912,119],{"class":43},[14,94914,122],{},[27,94916,94917],{"className":29,"code":125,"language":31,"meta":32,"style":32},[34,94918,94919,94929,94955,94959,94963,94967,94971,94975,94979,94983,94989,94993,94997,95001,95005,95009,95013,95017,95029,95033,95037,95041,95045,95049,95053,95057,95069,95073,95077,95081,95085,95089,95093,95097,95111,95115,95123,95127,95131,95135,95139,95143,95147],{"__ignoreMap":32},[37,94920,94921,94923,94925,94927],{"class":39,"line":40},[37,94922,132],{"class":50},[37,94924,135],{"class":61},[37,94926,138],{"class":50},[37,94928,141],{"class":43},[37,94930,94931,94933,94935,94937,94939,94941,94943,94945,94947,94949,94951,94953],{"class":39,"line":47},[37,94932,146],{"class":50},[37,94934,55],{"class":54},[37,94936,151],{"class":50},[37,94938,154],{"class":61},[37,94940,65],{"class":50},[37,94942,160],{"class":159},[37,94944,55],{"class":54},[37,94946,165],{"class":50},[37,94948,168],{"class":61},[37,94950,65],{"class":50},[37,94952,93],{"class":61},[37,94954,175],{"class":50},[37,94956,94957],{"class":39,"line":104},[37,94958,180],{"class":43},[37,94960,94961],{"class":39,"line":113},[37,94962,186],{"class":185},[37,94964,94965],{"class":39,"line":189},[37,94966,192],{"class":185},[37,94968,94969],{"class":39,"line":195},[37,94970,198],{"class":185},[37,94972,94973],{"class":39,"line":201},[37,94974,204],{"class":185},[37,94976,94977],{"class":39,"line":207},[37,94978,210],{"class":185},[37,94980,94981],{"class":39,"line":213},[37,94982,186],{"class":185},[37,94984,94985,94987],{"class":39,"line":218},[37,94986,221],{"class":50},[37,94988,224],{"class":43},[37,94990,94991],{"class":39,"line":227},[37,94992,186],{"class":185},[37,94994,94995],{"class":39,"line":232},[37,94996,235],{"class":185},[37,94998,94999],{"class":39,"line":238},[37,95000,241],{"class":185},[37,95002,95003],{"class":39,"line":244},[37,95004,247],{"class":185},[37,95006,95007],{"class":39,"line":250},[37,95008,253],{"class":185},[37,95010,95011],{"class":39,"line":256},[37,95012,186],{"class":185},[37,95014,95015],{"class":39,"line":261},[37,95016,264],{"class":43},[37,95018,95019,95021,95023,95025,95027],{"class":39,"line":267},[37,95020,270],{"class":50},[37,95022,273],{"class":159},[37,95024,55],{"class":54},[37,95026,135],{"class":61},[37,95028,280],{"class":50},[37,95030,95031],{"class":39,"line":283},[37,95032,186],{"class":185},[37,95034,95035],{"class":39,"line":288},[37,95036,291],{"class":185},[37,95038,95039],{"class":39,"line":294},[37,95040,297],{"class":185},[37,95042,95043],{"class":39,"line":300},[37,95044,303],{"class":185},[37,95046,95047],{"class":39,"line":306},[37,95048,309],{"class":185},[37,95050,95051],{"class":39,"line":312},[37,95052,186],{"class":185},[37,95054,95055],{"class":39,"line":317},[37,95056,320],{"class":43},[37,95058,95059,95061,95063,95065,95067],{"class":39,"line":323},[37,95060,270],{"class":50},[37,95062,273],{"class":159},[37,95064,55],{"class":54},[37,95066,332],{"class":61},[37,95068,280],{"class":50},[37,95070,95071],{"class":39,"line":337},[37,95072,186],{"class":185},[37,95074,95075],{"class":39,"line":342},[37,95076,235],{"class":185},[37,95078,95079],{"class":39,"line":347},[37,95080,241],{"class":185},[37,95082,95083],{"class":39,"line":352},[37,95084,247],{"class":185},[37,95086,95087],{"class":39,"line":357},[37,95088,253],{"class":185},[37,95090,95091],{"class":39,"line":362},[37,95092,186],{"class":185},[37,95094,95095],{"class":39,"line":367},[37,95096,370],{"class":43},[37,95098,95099,95101,95103,95105,95107,95109],{"class":39,"line":373},[37,95100,376],{"class":50},[37,95102,55],{"class":54},[37,95104,381],{"class":50},[37,95106,384],{"class":54},[37,95108,332],{"class":61},[37,95110,389],{"class":50},[37,95112,95113],{"class":39,"line":392},[37,95114,395],{"class":43},[37,95116,95117,95119,95121],{"class":39,"line":398},[37,95118,401],{"class":50},[37,95120,55],{"class":54},[37,95122,406],{"class":50},[37,95124,95125],{"class":39,"line":409},[37,95126,412],{"class":50},[37,95128,95129],{"class":39,"line":415},[37,95130,186],{"class":185},[37,95132,95133],{"class":39,"line":420},[37,95134,192],{"class":185},[37,95136,95137],{"class":39,"line":425},[37,95138,428],{"class":185},[37,95140,95141],{"class":39,"line":431},[37,95142,204],{"class":185},[37,95144,95145],{"class":39,"line":436},[37,95146,439],{"class":185},[37,95148,95149],{"class":39,"line":442},[37,95150,186],{"class":185},[446,95152,448],{},{"title":32,"searchDepth":47,"depth":47,"links":95154},[],{},{"title":5,"description":451},{"id":95158,"title":95159,"body":95160,"description":451,"extension":452,"meta":95190,"navigation":454,"path":95191,"seo":95192,"stem":95193,"__hash__":95194},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95161,"toc":95188},[95162,95165,95168,95171,95174,95177,95180,95183],[10,95163,95159],{"id":95164},"_14广播机制",[14,95166,95167],{},"广播的规则：",[14,95169,95170],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,95172,95173],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,95175,95176],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,95178,95179],{},"3.如果没有维度形状为1，则会引发异常",[14,95181,95182],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,95184,95185],{},[1838,95186],{"alt":32,"src":95187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":32,"searchDepth":47,"depth":47,"links":95189},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95159,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95196,"title":95197,"body":95198,"description":451,"extension":452,"meta":95296,"navigation":454,"path":95297,"seo":95298,"stem":95299,"__hash__":95300},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95199,"toc":95294},[95200,95203,95206,95291],[10,95201,95197],{"id":95202},"_15比较掩码",[14,95204,95205],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[27,95207,95209],{"className":29,"code":95208,"language":31,"meta":32,"style":32},"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",[34,95210,95211,95257,95268,95282,95286],{"__ignoreMap":32},[37,95212,95213,95215,95217,95220,95222,95224,95226,95228,95230,95232,95234,95236,95238,95240,95242,95244,95246,95248,95250,95252,95254],{"class":39,"line":40},[37,95214,51],{"class":50},[37,95216,55],{"class":54},[37,95218,95219],{"class":50},"np.array([[",[37,95221,332],{"class":61},[37,95223,65],{"class":50},[37,95225,602],{"class":61},[37,95227,65],{"class":50},[37,95229,62],{"class":61},[37,95231,48366],{"class":50},[37,95233,984],{"class":61},[37,95235,65],{"class":50},[37,95237,68],{"class":61},[37,95239,65],{"class":50},[37,95241,1034],{"class":61},[37,95243,48366],{"class":50},[37,95245,1235],{"class":61},[37,95247,65],{"class":50},[37,95249,1260],{"class":61},[37,95251,65],{"class":50},[37,95253,78],{"class":61},[37,95255,95256],{"class":50},"]])\n",[37,95258,95259,95261,95263,95265],{"class":39,"line":47},[37,95260,51],{"class":50},[37,95262,1418],{"class":54},[37,95264,1210],{"class":61},[37,95266,95267],{"class":43},"#结果是一个由True,False组成的数组\n",[37,95269,95270,95273,95275,95277,95279],{"class":39,"line":104},[37,95271,95272],{"class":50},"a[a",[37,95274,1418],{"class":54},[37,95276,1210],{"class":61},[37,95278,1448],{"class":50},[37,95280,95281],{"class":43},"#小于20的元素会存到这个数组中\n",[37,95283,95284],{"class":39,"line":113},[37,95285,93894],{"class":43},[37,95287,95288],{"class":39,"line":189},[37,95289,95290],{"class":43},"#array([ 1,  2,  3, 11, 12, 13])\n",[446,95292,95293],{},"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":32,"searchDepth":47,"depth":47,"links":95295},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95197,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95302,"title":95303,"body":95304,"description":451,"extension":452,"meta":95396,"navigation":454,"path":95397,"seo":95398,"stem":95399,"__hash__":95400},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95305,"toc":95394},[95306,95309,95312,95315,95318,95321,95386,95391],[10,95307,95303],{"id":95308},"_16魔法命令time",[14,95310,95311],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95313,95314],{},"%:行模式",[14,95316,95317],{},"%%:单元格模式",[14,95319,95320],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[27,95322,95324],{"className":29,"code":95323,"language":31,"meta":32,"style":32},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[34,95325,95326,95331,95338,95343,95352,95365,95369,95377],{"__ignoreMap":32},[37,95327,95328],{"class":39,"line":40},[37,95329,95330],{"class":43},"#程序执行时间\n",[37,95332,95333,95335],{"class":39,"line":47},[37,95334,30732],{"class":54},[37,95336,95337],{"class":50}," time \n",[37,95339,95340],{"class":39,"line":104},[37,95341,95342],{"class":43},"#获取时间\n",[37,95344,95345,95348,95350],{"class":39,"line":113},[37,95346,95347],{"class":50},"start",[37,95349,55],{"class":54},[37,95351,32756],{"class":50},[37,95353,95354,95357,95360,95362],{"class":39,"line":189},[37,95355,95356],{"class":50},"time.sleep(",[37,95358,95359],{"class":61},"0.4",[37,95361,138],{"class":50},[37,95363,95364],{"class":43},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[37,95366,95367],{"class":39,"line":195},[37,95368,95342],{"class":43},[37,95370,95371,95373,95375],{"class":39,"line":201},[37,95372,46138],{"class":50},[37,95374,55],{"class":54},[37,95376,32756],{"class":50},[37,95378,95379,95381,95383],{"class":39,"line":207},[37,95380,46138],{"class":50},[37,95382,384],{"class":54},[37,95384,95385],{"class":50},"start\n",[14,95387,95388],{},[1838,95389],{"alt":32,"src":95390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[446,95392,95393],{},"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":32,"searchDepth":47,"depth":47,"links":95395},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95303,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95402,"title":95403,"body":95404,"description":451,"extension":452,"meta":95439,"navigation":454,"path":95440,"seo":95441,"stem":95442,"__hash__":95443},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95405,"toc":95437},[95406,95409,95412,95415,95418,95421,95424,95427,95432],[10,95407,95403],{"id":95408},"_17魔法命令timeit",[14,95410,95411],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95413,95414],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95416,95417],{},"单元格模式：",[14,95419,95420],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95422,95423],{},"初始化语句执行次数由轮数来决定",[14,95425,95426],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95428,95429],{},[1838,95430],{"alt":32,"src":95431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95433,95434],{},[1838,95435],{"alt":32,"src":95436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":32,"searchDepth":47,"depth":47,"links":95438},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95403,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95445,"title":95446,"body":95447,"description":451,"extension":452,"meta":95465,"navigation":454,"path":95466,"seo":95467,"stem":95468,"__hash__":95469},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95448,"toc":95463},[95449,95452,95455,95458],[10,95450,95446],{"id":95451},"_18魔法命令writefile和run",[14,95453,95454],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95456,95457],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95459,95460],{},[1838,95461],{"alt":32,"src":95462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":32,"searchDepth":47,"depth":47,"links":95464},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95446,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95471,"title":95472,"body":95473,"description":451,"extension":452,"meta":95526,"navigation":454,"path":95527,"seo":95528,"stem":95529,"__hash__":95530},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95474,"toc":95524},[95475,95478,95481,95483,95486,95489,95494,95497,95500,95503,95506,95509,95512,95515,95518,95521],[10,95476,95472],{"id":95477},"_19魔法命令memit",[14,95479,95480],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95482,24941],{},[14,95484,95485],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95487,95488],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95490,95491],{},[1838,95492],{"alt":32,"src":95493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95495,95496],{},"补充：",[14,95498,95499],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95501,95502],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95504,95505],{},"解决方法：",[14,95507,95508],{},"1.cmd",[14,95510,95511],{},"2.依次输入以下代码：",[14,95513,95514],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95516,95517],{},"pip install --upgrade ipython",[14,95519,95520],{},"#升级 memory_profiler 和 setuptools",[14,95522,95523],{},"pip install --upgrade memory_profiler setuptools",{"title":32,"searchDepth":47,"depth":47,"links":95525},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95472,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95532,"title":95533,"body":95534,"description":451,"extension":452,"meta":97180,"navigation":454,"path":97181,"seo":97182,"stem":97183,"__hash__":97184},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95535,"toc":97150},[95536,95539,95543,95547,95608,95611,95616,95620,95625,95630,95635,95640,95643,95648,95652,95656,95689,95692,95695,95698,95750,95753,95789,95792,95834,95838,95859,95861,95898,95900,95905,95907,95912,95916,95919,95947,95951,95955,96008,96012,96104,96108,96112,96115,96120,96124,96149,96154,96158,96161,96164,96167,96170,96173,96176,96179,96191,96195,96199,96202,96234,96237,96260,96263,96289,96292,96318,96321,96355,96358,96420,96424,96427,96431,96434,96460,96463,96466,96471,96474,96543,96545,96550,96611,96614,96625,96631,96636,96640,96643,96656,96660,96675,96677,96700,96702,96728,96731,96734,96737,96785,96787,96792,96796,96800,96827,96831,96858,96861,96866,96871,96961,96965,97023,97028,97031,97034,97076,97080,97136,97141,97144,97147],[10,95537,95533],{"id":95538},"_2创建数组",[469,95540,95542],{"id":95541},"_21-array函数创建数组","2.1 array()函数创建数组",[498,95544,95546],{"id":95545},"_221-函数语句","2.2.1 函数语句",[27,95548,95550],{"className":29,"code":95549,"language":31,"meta":32,"style":32},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[34,95551,95552],{"__ignoreMap":32},[37,95553,95554,95557,95560,95562,95564,95566,95568,95570,95573,95575,95578,95580,95583,95585,95587,95589,95592,95594,95597,95599,95602,95604,95606],{"class":39,"line":40},[37,95555,95556],{"class":50},"numpy.array(",[37,95558,95559],{"class":61},"object",[37,95561,12776],{"class":50},[37,95563,93830],{"class":159},[37,95565,13905],{"class":54},[37,95567,39270],{"class":61},[37,95569,12776],{"class":50},[37,95571,95572],{"class":159},"copy",[37,95574,13905],{"class":54},[37,95576,95577],{"class":61}," True",[37,95579,12776],{"class":50},[37,95581,95582],{"class":159},"order",[37,95584,13905],{"class":54},[37,95586,39270],{"class":61},[37,95588,12776],{"class":50},[37,95590,95591],{"class":159},"subok",[37,95593,13905],{"class":54},[37,95595,95596],{"class":61}," False",[37,95598,12776],{"class":50},[37,95600,95601],{"class":159},"ndmin",[37,95603,13905],{"class":54},[37,95605,4443],{"class":61},[37,95607,280],{"class":50},[14,95609,95610],{},"参数：",[14,95612,95613],{},[1838,95614],{"alt":32,"src":95615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[498,95617,95619],{"id":95618},"_222-实例","2.2.2 实例",[14,95621,95622],{},[1838,95623],{"alt":32,"src":95624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95626,95627],{},[1838,95628],{"alt":32,"src":95629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95631,95632],{},[1838,95633],{"alt":32,"src":95634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95636,95637],{},[1838,95638],{"alt":32,"src":95639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95641,95642],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95644,95645],{},[1838,95646],{"alt":32,"src":95647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[469,95649,95651],{"id":95650},"_22-随机数创建数组","2.2 随机数创建数组",[498,95653,95655],{"id":95654},"_221-random语句","2.2.1 random语句",[27,95657,95659],{"className":29,"code":95658,"language":31,"meta":32,"style":32},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[34,95660,95661,95666,95671,95679,95684],{"__ignoreMap":32},[37,95662,95663],{"class":39,"line":40},[37,95664,95665],{"class":43},"#random.random()\n",[37,95667,95668],{"class":39,"line":47},[37,95669,95670],{"class":43},"#确定随机种子,就是每次运行结果是相同的\n",[37,95672,95673,95675,95677],{"class":39,"line":104},[37,95674,132],{"class":50},[37,95676,135],{"class":61},[37,95678,280],{"class":50},[37,95680,95681],{"class":39,"line":113},[37,95682,95683],{"class":50},"np.random.random()\n",[37,95685,95686],{"class":39,"line":189},[37,95687,95688],{"class":43},"#生成一个随机的数目\n",[14,95690,95691],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95693,95694],{},"可以指定数组形状 size",[14,95696,95697],{},"①生成一维数组",[27,95699,95701],{"className":29,"code":95700,"language":31,"meta":32,"style":32},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[34,95702,95703,95708,95721,95726,95742],{"__ignoreMap":32},[37,95704,95705],{"class":39,"line":40},[37,95706,95707],{"class":43},"#random.random(size())\n",[37,95709,95710,95713,95715,95717,95719],{"class":39,"line":47},[37,95711,95712],{"class":50},"np.random.random(",[37,95714,160],{"class":159},[37,95716,55],{"class":54},[37,95718,836],{"class":61},[37,95720,280],{"class":50},[37,95722,95723],{"class":39,"line":104},[37,95724,95725],{"class":43},"#生成一位的五个元素\n",[37,95727,95728,95730,95732,95734,95736,95738,95740],{"class":39,"line":113},[37,95729,51],{"class":50},[37,95731,55],{"class":54},[37,95733,95712],{"class":50},[37,95735,160],{"class":159},[37,95737,55],{"class":54},[37,95739,168],{"class":61},[37,95741,280],{"class":50},[37,95743,95744,95747],{"class":39,"line":189},[37,95745,95746],{"class":50},"a.shape ",[37,95748,95749],{"class":43},"#输出数组形状\n",[14,95751,95752],{},"②生成二维数组",[27,95754,95756],{"className":29,"code":95755,"language":31,"meta":32,"style":32},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[34,95757,95758,95762,95784],{"__ignoreMap":32},[37,95759,95760],{"class":39,"line":40},[37,95761,93632],{"class":43},[37,95763,95764,95766,95768,95770,95772,95774,95776,95778,95780,95782],{"class":39,"line":47},[37,95765,146],{"class":50},[37,95767,55],{"class":54},[37,95769,95712],{"class":50},[37,95771,160],{"class":159},[37,95773,55],{"class":54},[37,95775,165],{"class":50},[37,95777,168],{"class":61},[37,95779,65],{"class":50},[37,95781,836],{"class":61},[37,95783,175],{"class":50},[37,95785,95786],{"class":39,"line":104},[37,95787,95788],{"class":43},"#生成四行五列的数组\n",[14,95790,95791],{},"③生成三维数组",[27,95793,95795],{"className":29,"code":95794,"language":31,"meta":32,"style":32},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[34,95796,95797,95802,95829],{"__ignoreMap":32},[37,95798,95799],{"class":39,"line":40},[37,95800,95801],{"class":43},"#三维数组\n",[37,95803,95804,95807,95809,95811,95813,95815,95817,95819,95821,95823,95825,95827],{"class":39,"line":47},[37,95805,95806],{"class":50},"aaa",[37,95808,55],{"class":54},[37,95810,95712],{"class":50},[37,95812,160],{"class":159},[37,95814,55],{"class":54},[37,95816,165],{"class":50},[37,95818,602],{"class":61},[37,95820,65],{"class":50},[37,95822,62],{"class":61},[37,95824,65],{"class":50},[37,95826,168],{"class":61},[37,95828,175],{"class":50},[37,95830,95831],{"class":39,"line":104},[37,95832,95833],{"class":50},"aaa.shape\n",[498,95835,95837],{"id":95836},"_222-randint语句","2.2.2 randint语句",[27,95839,95841],{"className":29,"code":95840,"language":31,"meta":32,"style":32},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[34,95842,95843,95848],{"__ignoreMap":32},[37,95844,95845],{"class":39,"line":40},[37,95846,95847],{"class":43},"#生成随机的整数 random.randint(low,high,size)\n",[37,95849,95850,95852,95854,95856],{"class":39,"line":47},[37,95851,151],{"class":50},[37,95853,836],{"class":61},[37,95855,14055],{"class":50},[37,95857,95858],{"class":43},"#0~5中的随机一个数\n",[14,95860,95697],{},[27,95862,95864],{"className":29,"code":95863,"language":31,"meta":32,"style":32},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[34,95865,95866,95871,95893],{"__ignoreMap":32},[37,95867,95868],{"class":39,"line":40},[37,95869,95870],{"class":43},"#一维\n",[37,95872,95873,95875,95877,95879,95881,95883,95885,95887,95889,95891],{"class":39,"line":47},[37,95874,151],{"class":50},[37,95876,332],{"class":61},[37,95878,65],{"class":50},[37,95880,984],{"class":61},[37,95882,65],{"class":50},[37,95884,160],{"class":159},[37,95886,55],{"class":54},[37,95888,165],{"class":50},[37,95890,98],{"class":61},[37,95892,175],{"class":50},[37,95894,95895],{"class":39,"line":104},[37,95896,95897],{"class":43},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95899,95752],{},[14,95901,95902],{},[1838,95903],{"alt":32,"src":95904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95906,95791],{},[14,95908,95909],{},[1838,95910],{"alt":32,"src":95911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[498,95913,95915],{"id":95914},"_222-rand语句","2.2.2 rand语句",[14,95917,95918],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[27,95920,95922],{"className":29,"code":95921,"language":31,"meta":32,"style":32},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[34,95923,95924,95937,95942],{"__ignoreMap":32},[37,95925,95926,95929,95931,95933,95935],{"class":39,"line":40},[37,95927,95928],{"class":50},"np.random.rand(",[37,95930,154],{"class":61},[37,95932,65],{"class":50},[37,95934,98],{"class":61},[37,95936,280],{"class":50},[37,95938,95939],{"class":39,"line":47},[37,95940,95941],{"class":43},"#第一个参数100：行数，表示有100个样本\n",[37,95943,95944],{"class":39,"line":104},[37,95945,95946],{"class":43},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[469,95948,95950],{"id":95949},"_23-arange创建数组","2.3 arange()创建数组",[498,95952,95954],{"id":95953},"_231-函数语句","2.3.1 函数语句",[27,95956,95958],{"className":29,"code":95957,"language":31,"meta":32,"style":32},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[34,95959,95960,95974,95979,95984,95989,95994,95999,96004],{"__ignoreMap":32},[37,95961,95962,95965,95967,95969,95972],{"class":39,"line":40},[37,95963,95964],{"class":50},"numpy.arange([start,] stop[, step], ",[37,95966,93830],{"class":159},[37,95968,55],{"class":54},[37,95970,95971],{"class":61},"None",[37,95973,280],{"class":50},[37,95975,95976],{"class":39,"line":47},[37,95977,95978],{"class":43},"#参数\n",[37,95980,95981],{"class":39,"line":104},[37,95982,95983],{"class":185},"\"\"\"\n",[37,95985,95986],{"class":39,"line":113},[37,95987,95988],{"class":185},"start:起始值，可选，默认从 0 开始。\n",[37,95990,95991],{"class":39,"line":189},[37,95992,95993],{"class":185},"stop:结束值（不包含该值）。\n",[37,95995,95996],{"class":39,"line":195},[37,95997,95998],{"class":185},"step:步长，可选，默认是 1。可以为浮点数。\n",[37,96000,96001],{"class":39,"line":201},[37,96002,96003],{"class":185},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[37,96005,96006],{"class":39,"line":207},[37,96007,95983],{"class":185},[498,96009,96011],{"id":96010},"_232-实例","2.3.2 实例",[27,96013,96015],{"className":29,"code":96014,"language":31,"meta":32,"style":32},"#创建一维数组\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",[34,96016,96017,96021,96045,96050,96055,96059,96082,96086,96090,96095,96100],{"__ignoreMap":32},[37,96018,96019],{"class":39,"line":40},[37,96020,44],{"class":43},[37,96022,96023,96025,96027,96029,96031,96033,96035,96037,96039,96041,96043],{"class":39,"line":47},[37,96024,93337],{"class":50},[37,96026,332],{"class":61},[37,96028,65],{"class":50},[37,96030,1235],{"class":61},[37,96032,65],{"class":50},[37,96034,332],{"class":61},[37,96036,65],{"class":50},[37,96038,93830],{"class":159},[37,96040,55],{"class":54},[37,96042,533],{"class":61},[37,96044,280],{"class":50},[37,96046,96047],{"class":39,"line":104},[37,96048,96049],{"class":43},"#输出结果：\n",[37,96051,96052],{"class":39,"line":113},[37,96053,96054],{"class":43},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[37,96056,96057],{"class":39,"line":189},[37,96058,94276],{"class":43},[37,96060,96061,96064,96066,96068,96070,96073,96075,96077,96079],{"class":39,"line":195},[37,96062,96063],{"class":50},"np.array([np.arange(",[37,96065,332],{"class":61},[37,96067,65],{"class":50},[37,96069,168],{"class":61},[37,96071,96072],{"class":50},"),np.arange(",[37,96074,168],{"class":61},[37,96076,65],{"class":50},[37,96078,885],{"class":61},[37,96080,96081],{"class":50},")])\n",[37,96083,96084],{"class":39,"line":201},[37,96085,93894],{"class":43},[37,96087,96088],{"class":39,"line":207},[37,96089,95983],{"class":185},[37,96091,96092],{"class":39,"line":213},[37,96093,96094],{"class":185},"array([[1, 2, 3],\n",[37,96096,96097],{"class":39,"line":218},[37,96098,96099],{"class":185},"       [4, 5, 6]])\n",[37,96101,96102],{"class":39,"line":227},[37,96103,95983],{"class":185},[469,96105,96107],{"id":96106},"_24-生态分布","2.4 生态分布",[498,96109,96111],{"id":96110},"_241-标准正态分布","2.4.1 标准正态分布",[14,96113,96114],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,96116,96117],{},[1838,96118],{"alt":32,"src":96119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[498,96121,96123],{"id":96122},"_242-常规正态分布","2.4.2 常规正态分布",[27,96125,96127],{"className":29,"code":96126,"language":31,"meta":32,"style":32},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[34,96128,96129,96134,96139,96144],{"__ignoreMap":32},[37,96130,96131],{"class":39,"line":40},[37,96132,96133],{"class":50},"random.normal(loc,scale,size)也可以生成正态分布\n",[37,96135,96136],{"class":39,"line":47},[37,96137,96138],{"class":43},"#loc:期望\n",[37,96140,96141],{"class":39,"line":104},[37,96142,96143],{"class":43},"#scale:方差\n",[37,96145,96146],{"class":39,"line":113},[37,96147,96148],{"class":43},"#size:用于确定是几维的数列\n",[14,96150,96151],{},[1838,96152],{"alt":32,"src":96153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[469,96155,96157],{"id":96156},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,96159,96160],{},"ndim:秩，维度个数",[14,96162,96163],{},"size:数组元素的个数",[14,96165,96166],{},"shape:数组的形状",[14,96168,96169],{},"dtype:数组元素的类型",[14,96171,96172],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,96174,96175],{},"他们都是属性，通过数组.属性的形式来确定",[14,96177,96178],{},"如果需要输出多个可以通过以下方式：",[27,96180,96182],{"className":29,"code":96181,"language":31,"meta":32,"style":32},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[34,96183,96184],{"__ignoreMap":32},[37,96185,96186,96188],{"class":39,"line":40},[37,96187,30755],{"class":61},[37,96189,96190],{"class":50},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[469,96192,96194],{"id":96193},"_26-其他方式创建数组","2.6 其他方式创建数组",[498,96196,96198],{"id":96197},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,96200,96201],{},"①创建一维数组",[27,96203,96205],{"className":29,"code":96204,"language":31,"meta":32,"style":32},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[34,96206,96207,96216,96220,96225,96230],{"__ignoreMap":32},[37,96208,96209,96212,96214],{"class":39,"line":40},[37,96210,96211],{"class":50},"np.zeros(",[37,96213,98],{"class":61},[37,96215,280],{"class":50},[37,96217,96218],{"class":39,"line":47},[37,96219,95983],{"class":185},[37,96221,96222],{"class":39,"line":104},[37,96223,96224],{"class":185},"输出结果：\n",[37,96226,96227],{"class":39,"line":113},[37,96228,96229],{"class":185},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[37,96231,96232],{"class":39,"line":189},[37,96233,95983],{"class":185},[14,96235,96236],{},"上方代码等价于：",[27,96238,96240],{"className":29,"code":96239,"language":31,"meta":32,"style":32},"np.zeros(shape=(10))#创建10个元素的0数组\n",[34,96241,96242],{"__ignoreMap":32},[37,96243,96244,96246,96249,96251,96253,96255,96257],{"class":39,"line":40},[37,96245,96211],{"class":50},[37,96247,96248],{"class":159},"shape",[37,96250,55],{"class":54},[37,96252,165],{"class":50},[37,96254,98],{"class":61},[37,96256,83106],{"class":50},[37,96258,96259],{"class":43},"#创建10个元素的0数组\n",[14,96261,96262],{},"也可以指定类型",[27,96264,96266],{"className":29,"code":96265,"language":31,"meta":32,"style":32},"#指定类型\nnp.zeros(5,dtype=int)\n",[34,96267,96268,96273],{"__ignoreMap":32},[37,96269,96270],{"class":39,"line":40},[37,96271,96272],{"class":43},"#指定类型\n",[37,96274,96275,96277,96279,96281,96283,96285,96287],{"class":39,"line":47},[37,96276,96211],{"class":50},[37,96278,836],{"class":61},[37,96280,65],{"class":50},[37,96282,93830],{"class":159},[37,96284,55],{"class":54},[37,96286,533],{"class":61},[37,96288,280],{"class":50},[14,96290,96291],{},"②创建二维数组",[27,96293,96295],{"className":29,"code":96294,"language":31,"meta":32,"style":32},"np.zeros((3,4),dtype=int)\n",[34,96296,96297],{"__ignoreMap":32},[37,96298,96299,96302,96304,96306,96308,96310,96312,96314,96316],{"class":39,"line":40},[37,96300,96301],{"class":50},"np.zeros((",[37,96303,62],{"class":61},[37,96305,65],{"class":50},[37,96307,168],{"class":61},[37,96309,42593],{"class":50},[37,96311,93830],{"class":159},[37,96313,55],{"class":54},[37,96315,533],{"class":61},[37,96317,280],{"class":50},[14,96319,96320],{},"③创建三维数组",[27,96322,96324],{"className":29,"code":96323,"language":31,"meta":32,"style":32},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[34,96325,96326,96331],{"__ignoreMap":32},[37,96327,96328],{"class":39,"line":40},[37,96329,96330],{"class":43},"#创建三维数组\n",[37,96332,96333,96335,96337,96339,96341,96343,96345,96347,96349,96351,96353],{"class":39,"line":47},[37,96334,96301],{"class":50},[37,96336,62],{"class":61},[37,96338,65],{"class":50},[37,96340,168],{"class":61},[37,96342,65],{"class":50},[37,96344,836],{"class":61},[37,96346,42593],{"class":50},[37,96348,93830],{"class":159},[37,96350,55],{"class":54},[37,96352,533],{"class":61},[37,96354,280],{"class":50},[14,96356,96357],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[27,96359,96361],{"className":29,"code":96360,"language":31,"meta":32,"style":32},"#使用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",[34,96362,96363,96368,96383,96388,96393,96415],{"__ignoreMap":32},[37,96364,96365],{"class":39,"line":40},[37,96366,96367],{"class":43},"#使用zeros_like将创建的一维数组变成全0的数组\n",[37,96369,96370,96372,96374,96376,96378,96380],{"class":39,"line":47},[37,96371,51],{"class":50},[37,96373,55],{"class":54},[37,96375,93337],{"class":50},[37,96377,168],{"class":61},[37,96379,138],{"class":50},[37,96381,96382],{"class":43},"#这个得到的结果：一维数组0，1，2，3\n",[37,96384,96385],{"class":39,"line":104},[37,96386,96387],{"class":50},"np.zeros_like(a)\n",[37,96389,96390],{"class":39,"line":113},[37,96391,96392],{"class":43},"#使用zeros_like将创建的二维数组变成全0的数组\n",[37,96394,96395,96397,96399,96401,96403,96405,96407,96409,96411,96413],{"class":39,"line":189},[37,96396,146],{"class":50},[37,96398,55],{"class":54},[37,96400,95712],{"class":50},[37,96402,160],{"class":159},[37,96404,55],{"class":54},[37,96406,165],{"class":50},[37,96408,168],{"class":61},[37,96410,65],{"class":50},[37,96412,836],{"class":61},[37,96414,175],{"class":50},[37,96416,96417],{"class":39,"line":195},[37,96418,96419],{"class":50},"np.zeros_like(aa)\n",[498,96421,96423],{"id":96422},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96425,96426],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[498,96428,96430],{"id":96429},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96432,96433],{},"①empty()用法",[27,96435,96437],{"className":29,"code":96436,"language":31,"meta":32,"style":32},"numpy.empty(shape,dtype=float,order='c')\n",[34,96438,96439],{"__ignoreMap":32},[37,96440,96441,96444,96446,96448,96450,96452,96454,96456,96458],{"class":39,"line":40},[37,96442,96443],{"class":50},"numpy.empty(shape,",[37,96445,93830],{"class":159},[37,96447,55],{"class":54},[37,96449,568],{"class":61},[37,96451,65],{"class":50},[37,96453,95582],{"class":159},[37,96455,55],{"class":54},[37,96457,76363],{"class":185},[37,96459,280],{"class":50},[14,96461,96462],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96464,96465],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96467,96468],{},[1838,96469],{"alt":32,"src":96470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96472,96473],{},"②empty()用法",[27,96475,96477],{"className":29,"code":96476,"language":31,"meta":32,"style":32},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[34,96478,96479,96500,96512,96533,96538],{"__ignoreMap":32},[37,96480,96481,96483,96485,96488,96490,96492,96494,96496,96498],{"class":39,"line":40},[37,96482,1354],{"class":50},[37,96484,55],{"class":54},[37,96486,96487],{"class":50},"np.empty(",[37,96489,98],{"class":61},[37,96491,65],{"class":50},[37,96493,93830],{"class":159},[37,96495,55],{"class":54},[37,96497,533],{"class":61},[37,96499,280],{"class":50},[37,96501,96502,96504,96506,96508,96510],{"class":39,"line":47},[37,96503,1329],{"class":50},[37,96505,55],{"class":54},[37,96507,93337],{"class":50},[37,96509,836],{"class":61},[37,96511,280],{"class":50},[37,96513,96514,96517,96519,96522,96524,96526,96529,96531],{"class":39,"line":104},[37,96515,96516],{"class":50},"np.add(",[37,96518,602],{"class":61},[37,96520,96521],{"class":50},",x,",[37,96523,93388],{"class":159},[37,96525,55],{"class":54},[37,96527,96528],{"class":50},"y[:",[37,96530,836],{"class":61},[37,96532,101],{"class":50},[37,96534,96535],{"class":39,"line":113},[37,96536,96537],{"class":43},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[37,96539,96540],{"class":39,"line":189},[37,96541,96542],{"class":50},"y\n",[14,96544,11855],{},[14,96546,96547],{},[1838,96548],{"alt":32,"src":96549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[27,96551,96553],{"className":29,"code":96552,"language":31,"meta":32,"style":32},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[34,96554,96555,96571,96591,96606],{"__ignoreMap":32},[37,96556,96557,96559,96561,96563,96565,96567,96569],{"class":39,"line":40},[37,96558,1329],{"class":50},[37,96560,55],{"class":54},[37,96562,93337],{"class":50},[37,96564,332],{"class":61},[37,96566,65],{"class":50},[37,96568,93],{"class":61},[37,96570,280],{"class":50},[37,96572,96573,96575,96577,96579,96581,96583,96585,96587,96589],{"class":39,"line":47},[37,96574,1354],{"class":50},[37,96576,55],{"class":54},[37,96578,96487],{"class":50},[37,96580,836],{"class":61},[37,96582,65],{"class":50},[37,96584,93830],{"class":159},[37,96586,55],{"class":54},[37,96588,533],{"class":61},[37,96590,280],{"class":50},[37,96592,96593,96596,96598,96600,96602,96604],{"class":39,"line":104},[37,96594,96595],{"class":50},"np.add(x,",[37,96597,602],{"class":61},[37,96599,65],{"class":50},[37,96601,93388],{"class":159},[37,96603,55],{"class":54},[37,96605,93779],{"class":50},[37,96607,96608],{"class":39,"line":113},[37,96609,96610],{"class":43},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96612,96613],{},"③empty_like()",[14,96615,96616],{},[673,96617,96618,96619,96624],{},"创建一个",[673,96620,96621],{},[673,96622,96623],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96626,96627,96630],{},[34,96628,96629],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96632,96633],{},[1838,96634],{"alt":32,"src":96635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[498,96637,96639],{"id":96638},"_264-用法","2.6.4 ？？用法",[14,96641,96642],{},"当想查看一个函数的参数时，可以通过？？来实现",[27,96644,96646],{"className":29,"code":96645,"language":31,"meta":32,"style":32},"np.full??\n",[34,96647,96648],{"__ignoreMap":32},[37,96649,96650,96653],{"class":39,"line":40},[37,96651,96652],{"class":50},"np.full",[37,96654,96655],{"class":77738},"??\n",[498,96657,96659],{"id":96658},"_265-full创建数组","2.6.5 full()创建数组",[27,96661,96663],{"className":29,"code":96662,"language":31,"meta":32,"style":32},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[34,96664,96665,96670],{"__ignoreMap":32},[37,96666,96667],{"class":39,"line":40},[37,96668,96669],{"class":50},"full(shape,fill_value)\n",[37,96671,96672],{"class":39,"line":47},[37,96673,96674],{"class":50},"创建全为某个指定值的数组\n",[14,96676,25],{},[27,96678,96680],{"className":29,"code":96679,"language":31,"meta":32,"style":32},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[34,96681,96682,96687],{"__ignoreMap":32},[37,96683,96684],{"class":39,"line":40},[37,96685,96686],{"class":43},"#创建一个一维数组,以20进行填充\n",[37,96688,96689,96692,96694,96696,96698],{"class":39,"line":47},[37,96690,96691],{"class":50},"np.full(",[37,96693,98],{"class":61},[37,96695,65],{"class":50},[37,96697,1210],{"class":61},[37,96699,280],{"class":50},[14,96701,122],{},[27,96703,96705],{"className":29,"code":96704,"language":31,"meta":32,"style":32},"#创建二维数组\nnp.full((3,5),11)\n",[34,96706,96707,96711],{"__ignoreMap":32},[37,96708,96709],{"class":39,"line":40},[37,96710,94276],{"class":43},[37,96712,96713,96716,96718,96720,96722,96724,96726],{"class":39,"line":47},[37,96714,96715],{"class":50},"np.full((",[37,96717,62],{"class":61},[37,96719,65],{"class":50},[37,96721,836],{"class":61},[37,96723,42593],{"class":50},[37,96725,984],{"class":61},[37,96727,280],{"class":50},[14,96729,96730],{},"③full_like用法",[14,96732,96733],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96735,96736],{},"这里是指定填充而已",[27,96738,96740],{"className":29,"code":96739,"language":31,"meta":32,"style":32},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[34,96741,96742,96747,96771,96776],{"__ignoreMap":32},[37,96743,96744],{"class":39,"line":40},[37,96745,96746],{"class":43},"#创建一个指定形状数组\n",[37,96748,96749,96751,96753,96755,96757,96759,96761,96763,96765,96767,96769],{"class":39,"line":47},[37,96750,51],{"class":50},[37,96752,55],{"class":54},[37,96754,93337],{"class":50},[37,96756,332],{"class":61},[37,96758,65],{"class":50},[37,96760,842],{"class":61},[37,96762,93342],{"class":50},[37,96764,168],{"class":61},[37,96766,65],{"class":50},[37,96768,934],{"class":61},[37,96770,280],{"class":50},[37,96772,96773],{"class":39,"line":104},[37,96774,96775],{"class":43},"#进行指定填充\n",[37,96777,96778,96781,96783],{"class":39,"line":113},[37,96779,96780],{"class":50},"np.full_like(a,",[37,96782,98],{"class":61},[37,96784,280],{"class":50},[14,96786,11855],{},[14,96788,96789],{},[1838,96790],{"alt":32,"src":96791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[498,96793,96795],{"id":96794},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22339,96797,96799],{"id":96798},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[27,96801,96803],{"className":29,"code":96802,"language":31,"meta":32,"style":32},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[34,96804,96805,96822],{"__ignoreMap":32},[37,96806,96807,96810,96812,96814,96816,96818,96820],{"class":39,"line":40},[37,96808,96809],{"class":50},"np.eye(",[37,96811,168],{"class":61},[37,96813,65],{"class":50},[37,96815,93830],{"class":159},[37,96817,55],{"class":54},[37,96819,533],{"class":61},[37,96821,280],{"class":50},[37,96823,96824],{"class":39,"line":47},[37,96825,96826],{"class":43},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22339,96828,96830],{"id":96829},"_2662-法2identity","2.6.6.2 法2：identity()",[27,96832,96834],{"className":29,"code":96833,"language":31,"meta":32,"style":32},"#identity()\nnp.identity(5,dtype=int)\n",[34,96835,96836,96841],{"__ignoreMap":32},[37,96837,96838],{"class":39,"line":40},[37,96839,96840],{"class":43},"#identity()\n",[37,96842,96843,96846,96848,96850,96852,96854,96856],{"class":39,"line":47},[37,96844,96845],{"class":50},"np.identity(",[37,96847,836],{"class":61},[37,96849,65],{"class":50},[37,96851,93830],{"class":159},[37,96853,55],{"class":54},[37,96855,533],{"class":61},[37,96857,280],{"class":50},[14,96859,96860],{},"两个函数是有区别的",[14,96862,96863],{},[1838,96864],{"alt":32,"src":96865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96867,96868],{},[1838,96869],{"alt":32,"src":96870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[27,96872,96874],{"className":29,"code":96873,"language":31,"meta":32,"style":32},"# 创建一个 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",[34,96875,96876,96881,96893,96898,96903,96908,96913,96917,96922,96942,96946,96951,96956],{"__ignoreMap":32},[37,96877,96878],{"class":39,"line":40},[37,96879,96880],{"class":43},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[37,96882,96883,96885,96887,96889,96891],{"class":39,"line":47},[37,96884,96809],{"class":50},[37,96886,62],{"class":61},[37,96888,12776],{"class":50},[37,96890,168],{"class":61},[37,96892,280],{"class":50},[37,96894,96895],{"class":39,"line":104},[37,96896,96897],{"class":43},"# 输出:\n",[37,96899,96900],{"class":39,"line":113},[37,96901,96902],{"class":43},"# [[1. 0. 0. 0.]\n",[37,96904,96905],{"class":39,"line":189},[37,96906,96907],{"class":43},"#  [0. 1. 0. 0.]\n",[37,96909,96910],{"class":39,"line":195},[37,96911,96912],{"class":43},"#  [0. 0. 1. 0.]]\n",[37,96914,96915],{"class":39,"line":201},[37,96916,2757],{"emptyLinePlaceholder":454},[37,96918,96919],{"class":39,"line":207},[37,96920,96921],{"class":43},"# 对角线向上偏移1\n",[37,96923,96924,96926,96928,96930,96932,96934,96936,96938,96940],{"class":39,"line":213},[37,96925,96809],{"class":50},[37,96927,62],{"class":61},[37,96929,12776],{"class":50},[37,96931,168],{"class":61},[37,96933,12776],{"class":50},[37,96935,1005],{"class":159},[37,96937,55],{"class":54},[37,96939,332],{"class":61},[37,96941,280],{"class":50},[37,96943,96944],{"class":39,"line":218},[37,96945,96897],{"class":43},[37,96947,96948],{"class":39,"line":227},[37,96949,96950],{"class":43},"# [[0. 1. 0. 0.]\n",[37,96952,96953],{"class":39,"line":232},[37,96954,96955],{"class":43},"#  [0. 0. 1. 0.]\n",[37,96957,96958],{"class":39,"line":238},[37,96959,96960],{"class":43},"#  [0. 0. 0. 1.]]\n",[498,96962,96964],{"id":96963},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[27,96966,96968],{"className":29,"code":96967,"language":31,"meta":32,"style":32},"#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",[34,96969,96970,96975,96979,96984,96989,96994,96999,97004,97009,97014,97019],{"__ignoreMap":32},[37,96971,96972],{"class":39,"line":40},[37,96973,96974],{"class":43},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[37,96976,96977],{"class":39,"line":47},[37,96978,95983],{"class":185},[37,96980,96981],{"class":39,"line":104},[37,96982,96983],{"class":185},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[37,96985,96986],{"class":39,"line":113},[37,96987,96988],{"class":185},"参数介绍：\n",[37,96990,96991],{"class":39,"line":189},[37,96992,96993],{"class":185},"start：序列的起始值\n",[37,96995,96996],{"class":39,"line":195},[37,96997,96998],{"class":185},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[37,97000,97001],{"class":39,"line":201},[37,97002,97003],{"class":185},"num：要生长的等步长的样本数量，默认为50\n",[37,97005,97006],{"class":39,"line":207},[37,97007,97008],{"class":185},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[37,97010,97011],{"class":39,"line":213},[37,97012,97013],{"class":185},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[37,97015,97016],{"class":39,"line":218},[37,97017,97018],{"class":185},"dtype：ndarry的数据类型\n",[37,97020,97021],{"class":39,"line":227},[37,97022,95983],{"class":185},[14,97024,97025],{},[1838,97026],{"alt":32,"src":97027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,97029,97030],{},"这里num=是可以省略的",[14,97032,97033],{},"也就是下方两行代码结果是一模一样的",[27,97035,97037],{"className":29,"code":97036,"language":31,"meta":32,"style":32},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[34,97038,97039,97056],{"__ignoreMap":32},[37,97040,97041,97044,97046,97048,97050,97052,97054],{"class":39,"line":40},[37,97042,97043],{"class":50},"np.linspace(",[37,97045,332],{"class":61},[37,97047,65],{"class":50},[37,97049,836],{"class":61},[37,97051,65],{"class":50},[37,97053,836],{"class":61},[37,97055,280],{"class":50},[37,97057,97058,97060,97062,97064,97066,97068,97070,97072,97074],{"class":39,"line":47},[37,97059,97043],{"class":50},[37,97061,332],{"class":61},[37,97063,65],{"class":50},[37,97065,836],{"class":61},[37,97067,65],{"class":50},[37,97069,2034],{"class":159},[37,97071,55],{"class":54},[37,97073,836],{"class":61},[37,97075,280],{"class":50},[498,97077,97079],{"id":97078},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[27,97081,97083],{"className":29,"code":97082,"language":31,"meta":32,"style":32},"#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",[34,97084,97085,97090,97094,97099,97104,97109,97114,97118,97123,97128,97132],{"__ignoreMap":32},[37,97086,97087],{"class":39,"line":40},[37,97088,97089],{"class":43},"#logspace函数用于创建一个等比数列，格式如下：\n",[37,97091,97092],{"class":39,"line":47},[37,97093,95983],{"class":185},[37,97095,97096],{"class":39,"line":104},[37,97097,97098],{"class":185},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[37,97100,97101],{"class":39,"line":113},[37,97102,97103],{"class":185},"参数为：\n",[37,97105,97106],{"class":39,"line":189},[37,97107,97108],{"class":185},"start:序列的起始位置为：base**start\n",[37,97110,97111],{"class":39,"line":195},[37,97112,97113],{"class":185},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[37,97115,97116],{"class":39,"line":201},[37,97117,97003],{"class":185},[37,97119,97120],{"class":39,"line":207},[37,97121,97122],{"class":185},"endpoint：是否包含 stop 这个值，默认是 True\n",[37,97124,97125],{"class":39,"line":213},[37,97126,97127],{"class":185},"base：对数的底数，默认是 10（常见对数）\n",[37,97129,97130],{"class":39,"line":218},[37,97131,97018],{"class":185},[37,97133,97134],{"class":39,"line":227},[37,97135,95983],{"class":185},[14,97137,97138],{},[1838,97139],{"alt":32,"src":97140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,97142,97143],{},"logspace()函数中的num参数也是可以不写num=的",[14,97145,97146],{},"endpoint是不可以省略的",[446,97148,97149],{},"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":32,"searchDepth":47,"depth":47,"links":97151},[97152,97156,97161,97165,97169,97170],{"id":95541,"depth":47,"text":95542,"children":97153},[97154,97155],{"id":95545,"depth":104,"text":95546},{"id":95618,"depth":104,"text":95619},{"id":95650,"depth":47,"text":95651,"children":97157},[97158,97159,97160],{"id":95654,"depth":104,"text":95655},{"id":95836,"depth":104,"text":95837},{"id":95914,"depth":104,"text":95915},{"id":95949,"depth":47,"text":95950,"children":97162},[97163,97164],{"id":95953,"depth":104,"text":95954},{"id":96010,"depth":104,"text":96011},{"id":96106,"depth":47,"text":96107,"children":97166},[97167,97168],{"id":96110,"depth":104,"text":96111},{"id":96122,"depth":104,"text":96123},{"id":96156,"depth":47,"text":96157},{"id":96193,"depth":47,"text":96194,"children":97171},[97172,97173,97174,97175,97176,97177,97178,97179],{"id":96197,"depth":104,"text":96198},{"id":96422,"depth":104,"text":96423},{"id":96429,"depth":104,"text":96430},{"id":96638,"depth":104,"text":96639},{"id":96658,"depth":104,"text":96659},{"id":96794,"depth":104,"text":96795},{"id":96963,"depth":104,"text":96964},{"id":97078,"depth":104,"text":97079},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95533,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97186,"title":97187,"body":97188,"description":451,"extension":452,"meta":97281,"navigation":454,"path":97282,"seo":97283,"stem":97284,"__hash__":97285},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97189,"toc":97279},[97190,97193,97196,97199,97202,97205,97208,97211,97214,97217,97220,97223,97225,97228,97231,97236,97239,97242,97276],[10,97191,97187],{"id":97192},"_20魔法命令mprun",[14,97194,97195],{},"逐行分析数据内存的使用情况",[14,97197,97198],{},"语法格式：",[14,97200,97201],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,97203,97204],{},"分析结果列如下：",[14,97206,97207],{},"Line行号",[14,97209,97210],{},"Mem usage内存使用大小",[14,97212,97213],{},"increment内存增量",[14,97215,97216],{},"Line content代码内容",[14,97218,97219],{},"补充说明：",[14,97221,97222],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,97224,95488],{},[14,97226,97227],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,97229,97230],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,97232,97233],{},[1838,97234],{"alt":32,"src":97235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97237,97238],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97240,97241],{},"这时候需要重新加载模块",[27,97243,97245],{"className":29,"code":97244,"language":31,"meta":32,"style":32},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[34,97246,97247,97252,97259,97264],{"__ignoreMap":32},[37,97248,97249],{"class":39,"line":40},[37,97250,97251],{"class":43},"#重新加载模块\n",[37,97253,97254,97256],{"class":39,"line":47},[37,97255,30732],{"class":54},[37,97257,97258],{"class":50}," importlib\n",[37,97260,97261],{"class":39,"line":104},[37,97262,97263],{"class":50},"importlib.reload(mprun_test)\n",[37,97265,97266,97268,97271,97273],{"class":39,"line":113},[37,97267,845],{"class":54},[37,97269,97270],{"class":50},"mprun ",[37,97272,384],{"class":54},[37,97274,97275],{"class":50},"f mprun_test.fun_test mprun_test.fun_test()\n",[446,97277,97278],{},"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":32,"searchDepth":47,"depth":47,"links":97280},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97187,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97287,"title":97288,"body":97289,"description":451,"extension":452,"meta":97306,"navigation":454,"path":97307,"seo":97308,"stem":97309,"__hash__":97310},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97290,"toc":97304},[97291,97294,97299],[10,97292,97288],{"id":97293},"_3一维数组的索引和切片",[14,97295,97296],{},[1838,97297],{"alt":32,"src":97298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97300,97301],{},[1838,97302],{"alt":32,"src":97303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":32,"searchDepth":47,"depth":47,"links":97305},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97288,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97312,"title":97313,"body":97314,"description":451,"extension":452,"meta":97797,"navigation":454,"path":97798,"seo":97799,"stem":97800,"__hash__":97801},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97315,"toc":97795},[97316,97319,97322,97327,97360,97363,97401,97404,97438,97441,97546,97549,97586,97589,97690,97693,97744,97747,97789,97792],[10,97317,97313],{"id":97318},"_4二维数组的索引与切片",[14,97320,97321],{},"①获取指定单个元素",[14,97323,97324],{},[1838,97325],{"alt":32,"src":97326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[27,97328,97330],{"className":29,"code":97329,"language":31,"meta":32,"style":32},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[34,97331,97332,97337,97342,97347],{"__ignoreMap":32},[37,97333,97334],{"class":39,"line":40},[37,97335,97336],{"class":43},"#获取元素9\n",[37,97338,97339],{"class":39,"line":47},[37,97340,97341],{"class":43},"#先获取所在行，再获取所在列\n",[37,97343,97344],{"class":39,"line":104},[37,97345,97346],{"class":43},"#数组[行索引号，列索引号]\n",[37,97348,97349,97352,97354,97356,97358],{"class":39,"line":113},[37,97350,97351],{"class":50},"a[",[37,97353,332],{"class":61},[37,97355,65],{"class":50},[37,97357,602],{"class":61},[37,97359,389],{"class":50},[14,97361,97362],{},"②获取整行元素",[27,97364,97366],{"className":29,"code":97365,"language":31,"meta":32,"style":32},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[34,97367,97368,97373,97378,97386,97391],{"__ignoreMap":32},[37,97369,97370],{"class":39,"line":40},[37,97371,97372],{"class":43},"#获取整行 数组[行索引号]\n",[37,97374,97375],{"class":39,"line":47},[37,97376,97377],{"class":43},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[37,97379,97380,97382,97384],{"class":39,"line":104},[37,97381,97351],{"class":50},[37,97383,602],{"class":61},[37,97385,389],{"class":50},[37,97387,97388],{"class":39,"line":113},[37,97389,97390],{"class":43},"#也可以负索引获取一行\n",[37,97392,97393,97395,97397,97399],{"class":39,"line":189},[37,97394,97351],{"class":50},[37,97396,384],{"class":54},[37,97398,332],{"class":61},[37,97400,389],{"class":50},[14,97402,97403],{},"③获取整列元素",[27,97405,97407],{"className":29,"code":97406,"language":31,"meta":32,"style":32},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[34,97408,97409,97414,97423,97428],{"__ignoreMap":32},[37,97410,97411],{"class":39,"line":40},[37,97412,97413],{"class":43},"#获取整列 数组名[:,列索引]\n",[37,97415,97416,97419,97421],{"class":39,"line":47},[37,97417,97418],{"class":50},"a[:,",[37,97420,602],{"class":61},[37,97422,389],{"class":50},[37,97424,97425],{"class":39,"line":104},[37,97426,97427],{"class":43},"#也可以负索引获取一列\n",[37,97429,97430,97432,97434,97436],{"class":39,"line":113},[37,97431,97418],{"class":50},[37,97433,384],{"class":54},[37,97435,332],{"class":61},[37,97437,389],{"class":50},[14,97439,97440],{},"④部分行部分列的元素",[27,97442,97444],{"className":29,"code":97443,"language":31,"meta":32,"style":32},"#部分行部分列 数组名[行切片，列切片]\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",[34,97445,97446,97451,97461,97465,97469,97474,97479,97483,97495,97499,97503,97508,97513,97518,97523,97527,97532],{"__ignoreMap":32},[37,97447,97448],{"class":39,"line":40},[37,97449,97450],{"class":43},"#部分行部分列 数组名[行切片，列切片]\n",[37,97452,97453,97456,97458],{"class":39,"line":47},[37,97454,97455],{"class":50},"a[:",[37,97457,602],{"class":61},[37,97459,97460],{"class":50},",:]\n",[37,97462,97463],{"class":39,"line":104},[37,97464,93894],{"class":43},[37,97466,97467],{"class":39,"line":113},[37,97468,186],{"class":185},[37,97470,97471],{"class":39,"line":189},[37,97472,97473],{"class":185},"array([[ 1,  2,  3,  4,  5,  6],\n",[37,97475,97476],{"class":39,"line":195},[37,97477,97478],{"class":185},"       [ 7,  8,  9, 10, 11, 12]])\n",[37,97480,97481],{"class":39,"line":201},[37,97482,186],{"class":185},[37,97484,97485,97487,97489,97491,97493],{"class":39,"line":207},[37,97486,97418],{"class":50},[37,97488,332],{"class":61},[37,97490,1368],{"class":50},[37,97492,168],{"class":61},[37,97494,389],{"class":50},[37,97496,97497],{"class":39,"line":213},[37,97498,93894],{"class":43},[37,97500,97501],{"class":39,"line":218},[37,97502,186],{"class":185},[37,97504,97505],{"class":39,"line":227},[37,97506,97507],{"class":185},"array([[ 2,  3,  4],\n",[37,97509,97510],{"class":39,"line":232},[37,97511,97512],{"class":185},"       [ 8,  9, 10],\n",[37,97514,97515],{"class":39,"line":238},[37,97516,97517],{"class":185},"       [14, 15, 16],\n",[37,97519,97520],{"class":39,"line":244},[37,97521,97522],{"class":185},"       [20, 21, 22]])\n",[37,97524,97525],{"class":39,"line":250},[37,97526,186],{"class":185},[37,97528,97529],{"class":39,"line":256},[37,97530,97531],{"class":43},"#对列行同时进行切片，使用了step参数\n",[37,97533,97534,97537,97539,97542,97544],{"class":39,"line":261},[37,97535,97536],{"class":50},"a[::",[37,97538,602],{"class":61},[37,97540,97541],{"class":50},",::",[37,97543,602],{"class":61},[37,97545,389],{"class":50},[14,97547,97548],{},"⑤同时获取两个元素",[27,97550,97552],{"className":29,"code":97551,"language":31,"meta":32,"style":32},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[34,97553,97554,97559,97564],{"__ignoreMap":32},[37,97555,97556],{"class":39,"line":40},[37,97557,97558],{"class":43},"#同时获取第三行第二列，第四行第一列\n",[37,97560,97561],{"class":39,"line":47},[37,97562,97563],{"class":43},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[37,97565,97566,97569,97571,97573,97575,97577,97579,97581,97583],{"class":39,"line":104},[37,97567,97568],{"class":50},"a[(",[37,97570,602],{"class":61},[37,97572,65],{"class":50},[37,97574,62],{"class":61},[37,97576,42584],{"class":50},[37,97578,332],{"class":61},[37,97580,65],{"class":50},[37,97582,135],{"class":61},[37,97584,97585],{"class":50},")]\n",[14,97587,97588],{},"⑥切片，对行进行反向获取",[27,97590,97592],{"className":29,"code":97591,"language":31,"meta":32,"style":32},"#切片 对所有行进行反向获取\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",[34,97593,97594,97599,97609,97613,97617,97622,97627,97632,97637,97641,97646,97662,97666,97671,97676,97681,97686],{"__ignoreMap":32},[37,97595,97596],{"class":39,"line":40},[37,97597,97598],{"class":43},"#切片 对所有行进行反向获取\n",[37,97600,97601,97603,97605,97607],{"class":39,"line":47},[37,97602,97536],{"class":50},[37,97604,384],{"class":54},[37,97606,332],{"class":61},[37,97608,389],{"class":50},[37,97610,97611],{"class":39,"line":104},[37,97612,93894],{"class":43},[37,97614,97615],{"class":39,"line":113},[37,97616,186],{"class":185},[37,97618,97619],{"class":39,"line":189},[37,97620,97621],{"class":185},"array([[19, 20, 21, 22, 23, 24],\n",[37,97623,97624],{"class":39,"line":195},[37,97625,97626],{"class":185},"       [13, 14, 15, 16, 17, 18],\n",[37,97628,97629],{"class":39,"line":201},[37,97630,97631],{"class":185},"       [ 7,  8,  9, 10, 11, 12],\n",[37,97633,97634],{"class":39,"line":207},[37,97635,97636],{"class":185},"       [ 1,  2,  3,  4,  5,  6]])\n",[37,97638,97639],{"class":39,"line":213},[37,97640,186],{"class":185},[37,97642,97643],{"class":39,"line":218},[37,97644,97645],{"class":43},"#对行列都进行反向切片获取\n",[37,97647,97648,97650,97652,97654,97656,97658,97660],{"class":39,"line":227},[37,97649,97536],{"class":50},[37,97651,384],{"class":54},[37,97653,332],{"class":61},[37,97655,97541],{"class":50},[37,97657,384],{"class":54},[37,97659,332],{"class":61},[37,97661,389],{"class":50},[37,97663,97664],{"class":39,"line":232},[37,97665,186],{"class":185},[37,97667,97668],{"class":39,"line":238},[37,97669,97670],{"class":185},"array([[24, 23, 22, 21, 20, 19],\n",[37,97672,97673],{"class":39,"line":244},[37,97674,97675],{"class":185},"       [18, 17, 16, 15, 14, 13],\n",[37,97677,97678],{"class":39,"line":250},[37,97679,97680],{"class":185},"       [12, 11, 10,  9,  8,  7],\n",[37,97682,97683],{"class":39,"line":256},[37,97684,97685],{"class":185},"       [ 6,  5,  4,  3,  2,  1]])\n",[37,97687,97688],{"class":39,"line":261},[37,97689,186],{"class":185},[14,97691,97692],{},"⑦修改元素",[27,97694,97696],{"className":29,"code":97695,"language":31,"meta":32,"style":32},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[34,97697,97698,97703,97721,97726],{"__ignoreMap":32},[37,97699,97700],{"class":39,"line":40},[37,97701,97702],{"class":43},"#获取前两行和前两列\n",[37,97704,97705,97708,97710,97712,97714,97717,97719],{"class":39,"line":47},[37,97706,97707],{"class":50},"sub_a",[37,97709,55],{"class":54},[37,97711,97455],{"class":50},[37,97713,602],{"class":61},[37,97715,97716],{"class":50},",:",[37,97718,602],{"class":61},[37,97720,389],{"class":50},[37,97722,97723],{"class":39,"line":104},[37,97724,97725],{"class":43},"#修改sub_a第一个元素的值\n",[37,97727,97728,97731,97733,97735,97737,97739,97741],{"class":39,"line":113},[37,97729,97730],{"class":50},"sub_a[",[37,97732,135],{"class":61},[37,97734,65],{"class":50},[37,97736,135],{"class":61},[37,97738,1448],{"class":50},[37,97740,55],{"class":54},[37,97742,97743],{"class":61},"100\n",[14,97745,97746],{},"⑧数组复制copy()",[27,97748,97750],{"className":29,"code":97749,"language":31,"meta":32,"style":32},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[34,97751,97752,97757,97767,97772],{"__ignoreMap":32},[37,97753,97754],{"class":39,"line":40},[37,97755,97756],{"class":43},"#数组复制\n",[37,97758,97759,97762,97764],{"class":39,"line":47},[37,97760,97761],{"class":50},"copy_a",[37,97763,55],{"class":54},[37,97765,97766],{"class":50},"np.copy(sub_a)\n",[37,97768,97769],{"class":39,"line":104},[37,97770,97771],{"class":43},"#修改copy_a后不影响原数组\n",[37,97773,97774,97777,97779,97781,97783,97785,97787],{"class":39,"line":113},[37,97775,97776],{"class":50},"copy_a[",[37,97778,135],{"class":61},[37,97780,65],{"class":50},[37,97782,135],{"class":61},[37,97784,1448],{"class":50},[37,97786,55],{"class":54},[37,97788,97743],{"class":61},[14,97790,97791],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[446,97793,97794],{},"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":32,"searchDepth":47,"depth":47,"links":97796},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97313,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97803,"title":97804,"body":97805,"description":451,"extension":452,"meta":98297,"navigation":454,"path":98298,"seo":98299,"stem":98300,"__hash__":98301},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97806,"toc":98289},[97807,97810,97814,97817,97820,97873,97876,97901,97904,97923,97943,97946,97962,97966,98012,98016,98058,98062,98065,98068,98071,98074,98077,98139,98199,98203,98206,98263,98267,98272,98281,98286],[10,97808,97804],{"id":97809},"_5改变数组的维度",[469,97811,97813],{"id":97812},"_51-使用reshape","5.1 使用reshape()",[14,97815,97816],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97818,97819],{},"①一维数组转换为二维数组",[27,97821,97823],{"className":29,"code":97822,"language":31,"meta":32,"style":32},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[34,97824,97825,97841,97846,97851,97856],{"__ignoreMap":32},[37,97826,97827,97829,97831,97833,97835,97837,97839],{"class":39,"line":40},[37,97828,51],{"class":50},[37,97830,55],{"class":54},[37,97832,93337],{"class":50},[37,97834,332],{"class":61},[37,97836,65],{"class":50},[37,97838,1034],{"class":61},[37,97840,280],{"class":50},[37,97842,97843],{"class":39,"line":47},[37,97844,97845],{"class":43},"#将一维数组进行转换\n",[37,97847,97848],{"class":39,"line":104},[37,97849,97850],{"class":43},"#注意点：元素个数不可以变\n",[37,97852,97853],{"class":39,"line":113},[37,97854,97855],{"class":43},"#转换维度要保持一致，不一致就异常！！！\n",[37,97857,97858,97860,97862,97865,97867,97869,97871],{"class":39,"line":189},[37,97859,146],{"class":50},[37,97861,55],{"class":54},[37,97863,97864],{"class":50},"a.reshape(",[37,97866,602],{"class":61},[37,97868,65],{"class":50},[37,97870,93],{"class":61},[37,97872,280],{"class":50},[14,97874,97875],{},"②一维数组转换为三维数组",[27,97877,97879],{"className":29,"code":97878,"language":31,"meta":32,"style":32},"aaa=a.reshape(2,3,2)\n",[34,97880,97881],{"__ignoreMap":32},[37,97882,97883,97885,97887,97889,97891,97893,97895,97897,97899],{"class":39,"line":40},[37,97884,95806],{"class":50},[37,97886,55],{"class":54},[37,97888,97864],{"class":50},[37,97890,602],{"class":61},[37,97892,65],{"class":50},[37,97894,62],{"class":61},[37,97896,65],{"class":50},[37,97898,602],{"class":61},[37,97900,280],{"class":50},[14,97902,97903],{},"③二维数组转化为一维数组",[27,97905,97907],{"className":29,"code":97906,"language":31,"meta":32,"style":32},"#知道元素个数：\naa.reshape(12)\n",[34,97908,97909,97914],{"__ignoreMap":32},[37,97910,97911],{"class":39,"line":40},[37,97912,97913],{"class":43},"#知道元素个数：\n",[37,97915,97916,97919,97921],{"class":39,"line":47},[37,97917,97918],{"class":50},"aa.reshape(",[37,97920,68],{"class":61},[37,97922,280],{"class":50},[27,97924,97926],{"className":29,"code":97925,"language":31,"meta":32,"style":32},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[34,97927,97928,97933],{"__ignoreMap":32},[37,97929,97930],{"class":39,"line":40},[37,97931,97932],{"class":43},"#不知道元素个数，参数传递-1\n",[37,97934,97935,97937,97939,97941],{"class":39,"line":47},[37,97936,97918],{"class":50},[37,97938,384],{"class":54},[37,97940,332],{"class":61},[37,97942,280],{"class":50},[14,97944,97945],{},"④三维数组转换为一维数组",[27,97947,97949],{"className":29,"code":97948,"language":31,"meta":32,"style":32},"aaa.reshape(-1)\n",[34,97950,97951],{"__ignoreMap":32},[37,97952,97953,97956,97958,97960],{"class":39,"line":40},[37,97954,97955],{"class":50},"aaa.reshape(",[37,97957,384],{"class":54},[37,97959,332],{"class":61},[37,97961,280],{"class":50},[469,97963,97965],{"id":97964},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[27,97967,97969],{"className":29,"code":97968,"language":31,"meta":32,"style":32},"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",[34,97970,97971,97998,98003,98007],{"__ignoreMap":32},[37,97972,97973,97975,97977,97979,97981,97983,97985,97987,97989,97991,97993,97995],{"class":39,"line":40},[37,97974,146],{"class":50},[37,97976,55],{"class":54},[37,97978,93337],{"class":50},[37,97980,332],{"class":61},[37,97982,65],{"class":50},[37,97984,1034],{"class":61},[37,97986,93342],{"class":50},[37,97988,602],{"class":61},[37,97990,65],{"class":50},[37,97992,93],{"class":61},[37,97994,138],{"class":50},[37,97996,97997],{"class":43},"#转换为2行6列的数组\n",[37,97999,98000],{"class":39,"line":47},[37,98001,98002],{"class":50},"aa.revel()\n",[37,98004,98005],{"class":39,"line":104},[37,98006,93894],{"class":43},[37,98008,98009],{"class":39,"line":113},[37,98010,98011],{"class":43},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[469,98013,98015],{"id":98014},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[27,98017,98019],{"className":29,"code":98018,"language":31,"meta":32,"style":32},"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",[34,98020,98021,98045,98050,98054],{"__ignoreMap":32},[37,98022,98023,98025,98027,98029,98031,98033,98035,98037,98039,98041,98043],{"class":39,"line":40},[37,98024,146],{"class":50},[37,98026,55],{"class":54},[37,98028,93337],{"class":50},[37,98030,332],{"class":61},[37,98032,65],{"class":50},[37,98034,1034],{"class":61},[37,98036,93342],{"class":50},[37,98038,602],{"class":61},[37,98040,65],{"class":50},[37,98042,93],{"class":61},[37,98044,280],{"class":50},[37,98046,98047],{"class":39,"line":47},[37,98048,98049],{"class":50},"aa.flatten()\n",[37,98051,98052],{"class":39,"line":104},[37,98053,93894],{"class":43},[37,98055,98056],{"class":39,"line":113},[37,98057,98011],{"class":43},[469,98059,98061],{"id":98060},"_54-使用resize","5.4 使用resize()",[14,98063,98064],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,98066,98067],{},"通过resize方法可以改变数组的维度",[14,98069,98070],{},"#resize修改数组维度",[14,98072,98073],{},"#以元组的形式指定形状",[14,98075,98076],{},"#改变的是原数组",[27,98078,98080],{"className":29,"code":98079,"language":31,"meta":32,"style":32},"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",[34,98081,98082,98098,98118,98131,98135],{"__ignoreMap":32},[37,98083,98084,98086,98088,98090,98092,98094,98096],{"class":39,"line":40},[37,98085,51],{"class":50},[37,98087,55],{"class":54},[37,98089,93337],{"class":50},[37,98091,332],{"class":61},[37,98093,65],{"class":50},[37,98095,1034],{"class":61},[37,98097,280],{"class":50},[37,98099,98100,98103,98105,98107,98109,98111,98113,98115],{"class":39,"line":47},[37,98101,98102],{"class":50},"a.shape",[37,98104,55],{"class":54},[37,98106,165],{"class":50},[37,98108,602],{"class":61},[37,98110,65],{"class":50},[37,98112,93],{"class":61},[37,98114,138],{"class":50},[37,98116,98117],{"class":43},"#改变了原数组\n",[37,98119,98120,98122,98124,98127,98129],{"class":39,"line":104},[37,98121,51],{"class":50},[37,98123,55],{"class":54},[37,98125,98126],{"class":50},"resize((",[37,98128,68],{"class":61},[37,98130,175],{"class":50},[37,98132,98133],{"class":39,"line":113},[37,98134,93894],{"class":43},[37,98136,98137],{"class":39,"line":189},[37,98138,98011],{"class":43},[27,98140,98142],{"className":29,"code":98141,"language":31,"meta":32,"style":32},"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",[34,98143,98144,98157,98161,98165,98170,98175,98180,98185,98190,98195],{"__ignoreMap":32},[37,98145,98146,98149,98151,98153,98155],{"class":39,"line":40},[37,98147,98148],{"class":50},"a.resize((",[37,98150,93],{"class":61},[37,98152,65],{"class":50},[37,98154,602],{"class":61},[37,98156,175],{"class":50},[37,98158,98159],{"class":39,"line":47},[37,98160,93894],{"class":43},[37,98162,98163],{"class":39,"line":104},[37,98164,186],{"class":185},[37,98166,98167],{"class":39,"line":113},[37,98168,98169],{"class":185},"array([[ 1,  2],\n",[37,98171,98172],{"class":39,"line":189},[37,98173,98174],{"class":185},"       [ 3,  4],\n",[37,98176,98177],{"class":39,"line":195},[37,98178,98179],{"class":185},"       [ 5,  6],\n",[37,98181,98182],{"class":39,"line":201},[37,98183,98184],{"class":185},"       [ 7,  8],\n",[37,98186,98187],{"class":39,"line":207},[37,98188,98189],{"class":185},"       [ 9, 10],\n",[37,98191,98192],{"class":39,"line":213},[37,98193,98194],{"class":185},"       [11, 12]])\n",[37,98196,98197],{"class":39,"line":218},[37,98198,186],{"class":185},[469,98200,98202],{"id":98201},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,98204,98205],{},"改变了原数组",[27,98207,98209],{"className":29,"code":98208,"language":31,"meta":32,"style":32},"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",[34,98210,98211,98227,98243,98247,98251,98255,98259],{"__ignoreMap":32},[37,98212,98213,98215,98217,98219,98221,98223,98225],{"class":39,"line":40},[37,98214,51],{"class":50},[37,98216,55],{"class":54},[37,98218,93337],{"class":50},[37,98220,332],{"class":61},[37,98222,65],{"class":50},[37,98224,1034],{"class":61},[37,98226,280],{"class":50},[37,98228,98229,98231,98233,98235,98237,98239,98241],{"class":39,"line":47},[37,98230,98102],{"class":50},[37,98232,55],{"class":54},[37,98234,165],{"class":50},[37,98236,602],{"class":61},[37,98238,65],{"class":50},[37,98240,93],{"class":61},[37,98242,280],{"class":50},[37,98244,98245],{"class":39,"line":104},[37,98246,93894],{"class":43},[37,98248,98249],{"class":39,"line":113},[37,98250,186],{"class":185},[37,98252,98253],{"class":39,"line":189},[37,98254,97473],{"class":185},[37,98256,98257],{"class":39,"line":195},[37,98258,97478],{"class":185},[37,98260,98261],{"class":39,"line":201},[37,98262,186],{"class":185},[469,98264,98266],{"id":98265},"_56-重要比较","5.6 重要比较：",[14,98268,98269],{},[1838,98270],{"alt":32,"src":98271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98273,98274,98275,98277,98278,98280],{},"口诀：NumPy 函数要么用 ",[34,98276,96248],{},"，要么用 ",[34,98279,160],{},"，创建结构用 shape，造数据用 size",[14,98282,98283],{},[1838,98284],{"alt":32,"src":98285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[446,98287,98288],{},"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":32,"searchDepth":47,"depth":47,"links":98290},[98291,98292,98293,98294,98295,98296],{"id":97812,"depth":47,"text":97813},{"id":97964,"depth":47,"text":97965},{"id":98014,"depth":47,"text":98015},{"id":98060,"depth":47,"text":98061},{"id":98201,"depth":47,"text":98202},{"id":98265,"depth":47,"text":98266},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97804,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98303,"title":98304,"body":98305,"description":451,"extension":452,"meta":99377,"navigation":454,"path":99378,"seo":99379,"stem":99380,"__hash__":99381},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98306,"toc":99371},[98307,98310,98314,98317,98320,98323,98388,98391,98431,98434,98516,98519,98524,98546,98548,98553,98558,98561,98564,98719,98722,98924,98928,98931,98934,99002,99004,99009,99012,99015,99095,99099,99102,99104,99177,99179,99184,99186,99266,99270,99273,99276,99279,99282,99285,99288,99368],[10,98308,98304],{"id":98309},"_6数组的拼接",[469,98311,98313],{"id":98312},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98315,98316],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98318,98319],{},"函数内部传两个数列构成的数列或者元组",[14,98321,98322],{},"①一维数组的拼接",[27,98324,98326],{"className":29,"code":98325,"language":31,"meta":32,"style":32},"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",[34,98327,98328,98348,98368,98373,98378,98383],{"__ignoreMap":32},[37,98329,98330,98332,98334,98336,98338,98340,98342,98344,98346],{"class":39,"line":40},[37,98331,51],{"class":50},[37,98333,55],{"class":54},[37,98335,58],{"class":50},[37,98337,332],{"class":61},[37,98339,65],{"class":50},[37,98341,602],{"class":61},[37,98343,65],{"class":50},[37,98345,62],{"class":61},[37,98347,101],{"class":50},[37,98349,98350,98352,98354,98356,98358,98360,98362,98364,98366],{"class":39,"line":47},[37,98351,376],{"class":50},[37,98353,55],{"class":54},[37,98355,58],{"class":50},[37,98357,168],{"class":61},[37,98359,65],{"class":50},[37,98361,836],{"class":61},[37,98363,65],{"class":50},[37,98365,93],{"class":61},[37,98367,101],{"class":50},[37,98369,98370],{"class":39,"line":104},[37,98371,98372],{"class":43},"#调用concatenate进行数组拼接\n",[37,98374,98375],{"class":39,"line":113},[37,98376,98377],{"class":50},"np.concatenate((a,b))\n",[37,98379,98380],{"class":39,"line":189},[37,98381,98382],{"class":43},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[37,98384,98385],{"class":39,"line":195},[37,98386,98387],{"class":43},"#np.concatenate([a,b])\n",[14,98389,98390],{},"②一维多个数组拼接",[27,98392,98394],{"className":29,"code":98393,"language":31,"meta":32,"style":32},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[34,98395,98396,98401,98421,98426],{"__ignoreMap":32},[37,98397,98398],{"class":39,"line":40},[37,98399,98400],{"class":43},"#也可以多个数组进行拼接\n",[37,98402,98403,98405,98407,98409,98411,98413,98415,98417,98419],{"class":39,"line":47},[37,98404,807],{"class":50},[37,98406,55],{"class":54},[37,98408,58],{"class":50},[37,98410,98],{"class":61},[37,98412,65],{"class":50},[37,98414,984],{"class":61},[37,98416,65],{"class":50},[37,98418,1034],{"class":61},[37,98420,101],{"class":50},[37,98422,98423],{"class":39,"line":104},[37,98424,98425],{"class":50},"c\n",[37,98427,98428],{"class":39,"line":113},[37,98429,98430],{"class":50},"np.concatenate((a,b,c))\n",[14,98432,98433],{},"③二维数组拼接",[27,98435,98437],{"className":29,"code":98436,"language":31,"meta":32,"style":32},"#二维数组使用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",[34,98438,98439,98444,98468,98493,98498,98503],{"__ignoreMap":32},[37,98440,98441],{"class":39,"line":40},[37,98442,98443],{"class":43},"#二维数组使用concatenate进行拼接\n",[37,98445,98446,98448,98450,98452,98454,98456,98458,98460,98462,98464,98466],{"class":39,"line":47},[37,98447,146],{"class":50},[37,98449,55],{"class":54},[37,98451,93337],{"class":50},[37,98453,332],{"class":61},[37,98455,65],{"class":50},[37,98457,1034],{"class":61},[37,98459,93342],{"class":50},[37,98461,62],{"class":61},[37,98463,65],{"class":50},[37,98465,168],{"class":61},[37,98467,280],{"class":50},[37,98469,98470,98473,98475,98477,98479,98481,98483,98485,98487,98489,98491],{"class":39,"line":104},[37,98471,98472],{"class":50},"bb",[37,98474,55],{"class":54},[37,98476,93337],{"class":50},[37,98478,854],{"class":61},[37,98480,65],{"class":50},[37,98482,1152],{"class":61},[37,98484,93342],{"class":50},[37,98486,62],{"class":61},[37,98488,65],{"class":50},[37,98490,168],{"class":61},[37,98492,280],{"class":50},[37,98494,98495],{"class":39,"line":113},[37,98496,98497],{"class":43},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[37,98499,98500],{"class":39,"line":189},[37,98501,98502],{"class":43},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[37,98504,98505,98508,98510,98512,98514],{"class":39,"line":195},[37,98506,98507],{"class":50},"np.concatenate((aa,bb),",[37,98509,273],{"class":159},[37,98511,55],{"class":54},[37,98513,135],{"class":61},[37,98515,280],{"class":50},[14,98517,98518],{},"结果：",[14,98520,98521],{},[1838,98522],{"alt":32,"src":98523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[27,98525,98527],{"className":29,"code":98526,"language":31,"meta":32,"style":32},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[34,98528,98529,98534],{"__ignoreMap":32},[37,98530,98531],{"class":39,"line":40},[37,98532,98533],{"class":43},"#指定axis为1进行拼接\n",[37,98535,98536,98538,98540,98542,98544],{"class":39,"line":47},[37,98537,98507],{"class":50},[37,98539,273],{"class":159},[37,98541,55],{"class":54},[37,98543,332],{"class":61},[37,98545,280],{"class":50},[14,98547,98518],{},[14,98549,98550],{},[1838,98551],{"alt":32,"src":98552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98554,98555],{},[673,98556,98557],{},"二维数组总结：0竖着方向，1横着方向",[14,98559,98560],{},"④三维数组拼接",[14,98562,98563],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[27,98565,98567],{"className":29,"code":98566,"language":31,"meta":32,"style":32},"#两个三行六列\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",[34,98568,98569,98574,98602,98632,98637,98654,98659,98664,98669,98686,98691,98696,98701,98714],{"__ignoreMap":32},[37,98570,98571],{"class":39,"line":40},[37,98572,98573],{"class":43},"#两个三行六列\n",[37,98575,98576,98578,98580,98582,98584,98586,98588,98590,98592,98594,98596,98598,98600],{"class":39,"line":47},[37,98577,95806],{"class":50},[37,98579,55],{"class":54},[37,98581,93337],{"class":50},[37,98583,332],{"class":61},[37,98585,65],{"class":50},[37,98587,842],{"class":61},[37,98589,93342],{"class":50},[37,98591,602],{"class":61},[37,98593,65],{"class":50},[37,98595,62],{"class":61},[37,98597,65],{"class":50},[37,98599,93],{"class":61},[37,98601,280],{"class":50},[37,98603,98604,98607,98609,98611,98613,98615,98618,98620,98622,98624,98626,98628,98630],{"class":39,"line":104},[37,98605,98606],{"class":50},"bbb",[37,98608,55],{"class":54},[37,98610,93337],{"class":50},[37,98612,854],{"class":61},[37,98614,65],{"class":50},[37,98616,98617],{"class":61},"137",[37,98619,93342],{"class":50},[37,98621,602],{"class":61},[37,98623,65],{"class":50},[37,98625,62],{"class":61},[37,98627,65],{"class":50},[37,98629,93],{"class":61},[37,98631,280],{"class":50},[37,98633,98634],{"class":39,"line":113},[37,98635,98636],{"class":43},"#axis=0\n",[37,98638,98639,98641,98643,98646,98648,98650,98652],{"class":39,"line":189},[37,98640,1205],{"class":50},[37,98642,55],{"class":54},[37,98644,98645],{"class":50},"np.concatenate((aaa,bbb),",[37,98647,273],{"class":159},[37,98649,55],{"class":54},[37,98651,135],{"class":61},[37,98653,280],{"class":50},[37,98655,98656],{"class":39,"line":195},[37,98657,98658],{"class":50},"s.shape\n",[37,98660,98661],{"class":39,"line":201},[37,98662,98663],{"class":43},"#输出：(4,3,6)\n",[37,98665,98666],{"class":39,"line":207},[37,98667,98668],{"class":43},"#axis=1\n",[37,98670,98671,98674,98676,98678,98680,98682,98684],{"class":39,"line":213},[37,98672,98673],{"class":50},"ss",[37,98675,55],{"class":54},[37,98677,98645],{"class":50},[37,98679,273],{"class":159},[37,98681,55],{"class":54},[37,98683,332],{"class":61},[37,98685,280],{"class":50},[37,98687,98688],{"class":39,"line":218},[37,98689,98690],{"class":50},"ss.shape\n",[37,98692,98693],{"class":39,"line":227},[37,98694,98695],{"class":43},"#输出：(2,6,6)\n",[37,98697,98698],{"class":39,"line":232},[37,98699,98700],{"class":43},"#axis=2\n",[37,98702,98703,98705,98707,98709,98711],{"class":39,"line":238},[37,98704,98645],{"class":50},[37,98706,273],{"class":159},[37,98708,55],{"class":54},[37,98710,602],{"class":61},[37,98712,98713],{"class":50},").shape\n",[37,98715,98716],{"class":39,"line":244},[37,98717,98718],{"class":43},"#输出：（2，3，12）\n",[14,98720,98721],{},"⑤四维数组拼接",[27,98723,98725],{"className":29,"code":98724,"language":31,"meta":32,"style":32},"#两个三行六列\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",[34,98726,98727,98731,98759,98787,98812,98838,98842,98855,98860,98864,98876,98881,98885,98897,98902,98907,98919],{"__ignoreMap":32},[37,98728,98729],{"class":39,"line":40},[37,98730,98573],{"class":43},[37,98732,98733,98735,98737,98739,98741,98743,98745,98747,98749,98751,98753,98755,98757],{"class":39,"line":47},[37,98734,95806],{"class":50},[37,98736,55],{"class":54},[37,98738,93337],{"class":50},[37,98740,332],{"class":61},[37,98742,65],{"class":50},[37,98744,842],{"class":61},[37,98746,93342],{"class":50},[37,98748,602],{"class":61},[37,98750,65],{"class":50},[37,98752,62],{"class":61},[37,98754,65],{"class":50},[37,98756,93],{"class":61},[37,98758,280],{"class":50},[37,98760,98761,98763,98765,98767,98769,98771,98773,98775,98777,98779,98781,98783,98785],{"class":39,"line":104},[37,98762,98606],{"class":50},[37,98764,55],{"class":54},[37,98766,93337],{"class":50},[37,98768,854],{"class":61},[37,98770,65],{"class":50},[37,98772,98617],{"class":61},[37,98774,93342],{"class":50},[37,98776,602],{"class":61},[37,98778,65],{"class":50},[37,98780,62],{"class":61},[37,98782,65],{"class":50},[37,98784,93],{"class":61},[37,98786,280],{"class":50},[37,98788,98789,98792,98794,98796,98798,98800,98802,98804,98806,98808,98810],{"class":39,"line":113},[37,98790,98791],{"class":50},"aaaa",[37,98793,55],{"class":54},[37,98795,97955],{"class":50},[37,98797,602],{"class":61},[37,98799,65],{"class":50},[37,98801,62],{"class":61},[37,98803,65],{"class":50},[37,98805,62],{"class":61},[37,98807,65],{"class":50},[37,98809,602],{"class":61},[37,98811,280],{"class":50},[37,98813,98814,98817,98819,98822,98824,98826,98828,98830,98832,98834,98836],{"class":39,"line":189},[37,98815,98816],{"class":50},"bbbb",[37,98818,55],{"class":54},[37,98820,98821],{"class":50},"bbb.reshape(",[37,98823,602],{"class":61},[37,98825,65],{"class":50},[37,98827,62],{"class":61},[37,98829,65],{"class":50},[37,98831,62],{"class":61},[37,98833,65],{"class":50},[37,98835,602],{"class":61},[37,98837,280],{"class":50},[37,98839,98840],{"class":39,"line":195},[37,98841,98636],{"class":43},[37,98843,98844,98847,98849,98851,98853],{"class":39,"line":201},[37,98845,98846],{"class":50},"np.concatenate((aaaa,bbbb),",[37,98848,273],{"class":159},[37,98850,55],{"class":54},[37,98852,135],{"class":61},[37,98854,98713],{"class":50},[37,98856,98857],{"class":39,"line":207},[37,98858,98859],{"class":43},"#结果：（4，3，3，2）\n",[37,98861,98862],{"class":39,"line":213},[37,98863,98668],{"class":43},[37,98865,98866,98868,98870,98872,98874],{"class":39,"line":218},[37,98867,98846],{"class":50},[37,98869,273],{"class":159},[37,98871,55],{"class":54},[37,98873,332],{"class":61},[37,98875,98713],{"class":50},[37,98877,98878],{"class":39,"line":227},[37,98879,98880],{"class":43},"#结果：（2，6，3，2）\n",[37,98882,98883],{"class":39,"line":232},[37,98884,98700],{"class":43},[37,98886,98887,98889,98891,98893,98895],{"class":39,"line":238},[37,98888,98846],{"class":50},[37,98890,273],{"class":159},[37,98892,55],{"class":54},[37,98894,602],{"class":61},[37,98896,98713],{"class":50},[37,98898,98899],{"class":39,"line":244},[37,98900,98901],{"class":43},"#结果：（2，3，6，2）\n",[37,98903,98904],{"class":39,"line":250},[37,98905,98906],{"class":43},"#axis=3\n",[37,98908,98909,98911,98913,98915,98917],{"class":39,"line":256},[37,98910,98846],{"class":50},[37,98912,273],{"class":159},[37,98914,55],{"class":54},[37,98916,62],{"class":61},[37,98918,98713],{"class":50},[37,98920,98921],{"class":39,"line":261},[37,98922,98923],{"class":43},"#结果：（2，3，3，4）\n",[469,98925,98927],{"id":98926},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98929,98930],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98932,98933],{},"①二维数组",[27,98935,98937],{"className":29,"code":98936,"language":31,"meta":32,"style":32},"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",[34,98938,98939,98963,98987,98992,98997],{"__ignoreMap":32},[37,98940,98941,98943,98945,98947,98949,98951,98953,98955,98957,98959,98961],{"class":39,"line":40},[37,98942,146],{"class":50},[37,98944,55],{"class":54},[37,98946,93337],{"class":50},[37,98948,332],{"class":61},[37,98950,65],{"class":50},[37,98952,1034],{"class":61},[37,98954,93342],{"class":50},[37,98956,62],{"class":61},[37,98958,65],{"class":50},[37,98960,168],{"class":61},[37,98962,280],{"class":50},[37,98964,98965,98967,98969,98971,98973,98975,98977,98979,98981,98983,98985],{"class":39,"line":47},[37,98966,98472],{"class":50},[37,98968,55],{"class":54},[37,98970,93337],{"class":50},[37,98972,854],{"class":61},[37,98974,65],{"class":50},[37,98976,1152],{"class":61},[37,98978,93342],{"class":50},[37,98980,62],{"class":61},[37,98982,65],{"class":50},[37,98984,168],{"class":61},[37,98986,280],{"class":50},[37,98988,98989],{"class":39,"line":104},[37,98990,98991],{"class":50},"np.hstack((aa,bb))\n",[37,98993,98994],{"class":39,"line":113},[37,98995,98996],{"class":43},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[37,98998,98999],{"class":39,"line":189},[37,99000,99001],{"class":43},"#np.hstack([aa,bb])\n",[14,99003,98518],{},[14,99005,99006],{},[1838,99007],{"alt":32,"src":99008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,99010,99011],{},"等效于concatenate()函数中axis=1时的情况",[14,99013,99014],{},"②三维数组",[27,99016,99018],{"className":29,"code":99017,"language":31,"meta":32,"style":32},"#两个三行六列\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",[34,99019,99020,99024,99052,99080,99085,99090],{"__ignoreMap":32},[37,99021,99022],{"class":39,"line":40},[37,99023,98573],{"class":43},[37,99025,99026,99028,99030,99032,99034,99036,99038,99040,99042,99044,99046,99048,99050],{"class":39,"line":47},[37,99027,95806],{"class":50},[37,99029,55],{"class":54},[37,99031,93337],{"class":50},[37,99033,332],{"class":61},[37,99035,65],{"class":50},[37,99037,842],{"class":61},[37,99039,93342],{"class":50},[37,99041,602],{"class":61},[37,99043,65],{"class":50},[37,99045,62],{"class":61},[37,99047,65],{"class":50},[37,99049,93],{"class":61},[37,99051,280],{"class":50},[37,99053,99054,99056,99058,99060,99062,99064,99066,99068,99070,99072,99074,99076,99078],{"class":39,"line":104},[37,99055,98606],{"class":50},[37,99057,55],{"class":54},[37,99059,93337],{"class":50},[37,99061,854],{"class":61},[37,99063,65],{"class":50},[37,99065,98617],{"class":61},[37,99067,93342],{"class":50},[37,99069,602],{"class":61},[37,99071,65],{"class":50},[37,99073,62],{"class":61},[37,99075,65],{"class":50},[37,99077,93],{"class":61},[37,99079,280],{"class":50},[37,99081,99082],{"class":39,"line":113},[37,99083,99084],{"class":43},"#使用hstack\n",[37,99086,99087],{"class":39,"line":189},[37,99088,99089],{"class":50},"np.hstack((aaa,bbb)).shape\n",[37,99091,99092],{"class":39,"line":195},[37,99093,99094],{"class":43},"#输出：（2，6，6）\n",[469,99096,99098],{"id":99097},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,99100,99101],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,99103,98933],{},[27,99105,99107],{"className":29,"code":99106,"language":31,"meta":32,"style":32},"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",[34,99108,99109,99133,99157,99162,99167,99172],{"__ignoreMap":32},[37,99110,99111,99113,99115,99117,99119,99121,99123,99125,99127,99129,99131],{"class":39,"line":40},[37,99112,146],{"class":50},[37,99114,55],{"class":54},[37,99116,93337],{"class":50},[37,99118,332],{"class":61},[37,99120,65],{"class":50},[37,99122,1034],{"class":61},[37,99124,93342],{"class":50},[37,99126,62],{"class":61},[37,99128,65],{"class":50},[37,99130,168],{"class":61},[37,99132,280],{"class":50},[37,99134,99135,99137,99139,99141,99143,99145,99147,99149,99151,99153,99155],{"class":39,"line":47},[37,99136,98472],{"class":50},[37,99138,55],{"class":54},[37,99140,93337],{"class":50},[37,99142,854],{"class":61},[37,99144,65],{"class":50},[37,99146,1152],{"class":61},[37,99148,93342],{"class":50},[37,99150,62],{"class":61},[37,99152,65],{"class":50},[37,99154,168],{"class":61},[37,99156,280],{"class":50},[37,99158,99159],{"class":39,"line":104},[37,99160,99161],{"class":43},"#vstack 垂直方向进行堆叠\n",[37,99163,99164],{"class":39,"line":113},[37,99165,99166],{"class":50},"np.vstack((aa,bb))\n",[37,99168,99169],{"class":39,"line":189},[37,99170,99171],{"class":43},"#与hstack传的参数类似，等价于：\n",[37,99173,99174],{"class":39,"line":195},[37,99175,99176],{"class":50},"np.vstack([aa,bb])\n",[14,99178,98518],{},[14,99180,99181],{},[1838,99182],{"alt":32,"src":99183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,99185,99014],{},[27,99187,99189],{"className":29,"code":99188,"language":31,"meta":32,"style":32},"#两个三行六列\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",[34,99190,99191,99195,99223,99251,99256,99261],{"__ignoreMap":32},[37,99192,99193],{"class":39,"line":40},[37,99194,98573],{"class":43},[37,99196,99197,99199,99201,99203,99205,99207,99209,99211,99213,99215,99217,99219,99221],{"class":39,"line":47},[37,99198,95806],{"class":50},[37,99200,55],{"class":54},[37,99202,93337],{"class":50},[37,99204,332],{"class":61},[37,99206,65],{"class":50},[37,99208,842],{"class":61},[37,99210,93342],{"class":50},[37,99212,602],{"class":61},[37,99214,65],{"class":50},[37,99216,62],{"class":61},[37,99218,65],{"class":50},[37,99220,93],{"class":61},[37,99222,280],{"class":50},[37,99224,99225,99227,99229,99231,99233,99235,99237,99239,99241,99243,99245,99247,99249],{"class":39,"line":104},[37,99226,98606],{"class":50},[37,99228,55],{"class":54},[37,99230,93337],{"class":50},[37,99232,854],{"class":61},[37,99234,65],{"class":50},[37,99236,98617],{"class":61},[37,99238,93342],{"class":50},[37,99240,602],{"class":61},[37,99242,65],{"class":50},[37,99244,62],{"class":61},[37,99246,65],{"class":50},[37,99248,93],{"class":61},[37,99250,280],{"class":50},[37,99252,99253],{"class":39,"line":113},[37,99254,99255],{"class":43},"#使用vstack\n",[37,99257,99258],{"class":39,"line":189},[37,99259,99260],{"class":50},"np.vstack((aaa,bbb)).shape\n",[37,99262,99263],{"class":39,"line":195},[37,99264,99265],{"class":43},"#输出：（4，3，6）\n",[469,99267,99269],{"id":99268},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99271,99272],{},"该方法是三维数组特有的方法",[14,99274,99275],{},"也就是说",[14,99277,99278],{},"一维数组拼接方法用：concatenate()",[14,99280,99281],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99283,99284],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99286,99287],{},"四维数组及多维数组只能用concatenate进行拼接",[27,99289,99291],{"className":29,"code":99290,"language":31,"meta":32,"style":32},"#两个三行六列\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",[34,99292,99293,99297,99325,99353,99358,99363],{"__ignoreMap":32},[37,99294,99295],{"class":39,"line":40},[37,99296,98573],{"class":43},[37,99298,99299,99301,99303,99305,99307,99309,99311,99313,99315,99317,99319,99321,99323],{"class":39,"line":47},[37,99300,95806],{"class":50},[37,99302,55],{"class":54},[37,99304,93337],{"class":50},[37,99306,332],{"class":61},[37,99308,65],{"class":50},[37,99310,842],{"class":61},[37,99312,93342],{"class":50},[37,99314,602],{"class":61},[37,99316,65],{"class":50},[37,99318,62],{"class":61},[37,99320,65],{"class":50},[37,99322,93],{"class":61},[37,99324,280],{"class":50},[37,99326,99327,99329,99331,99333,99335,99337,99339,99341,99343,99345,99347,99349,99351],{"class":39,"line":104},[37,99328,98606],{"class":50},[37,99330,55],{"class":54},[37,99332,93337],{"class":50},[37,99334,854],{"class":61},[37,99336,65],{"class":50},[37,99338,98617],{"class":61},[37,99340,93342],{"class":50},[37,99342,602],{"class":61},[37,99344,65],{"class":50},[37,99346,62],{"class":61},[37,99348,65],{"class":50},[37,99350,93],{"class":61},[37,99352,280],{"class":50},[37,99354,99355],{"class":39,"line":113},[37,99356,99357],{"class":43},"#使用dstack\n",[37,99359,99360],{"class":39,"line":189},[37,99361,99362],{"class":50},"np.dstack((aaa,bbb)).shape\n",[37,99364,99365],{"class":39,"line":195},[37,99366,99367],{"class":43},"#结果：（2，3，12）\n",[446,99369,99370],{},"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":32,"searchDepth":47,"depth":47,"links":99372},[99373,99374,99375,99376],{"id":98312,"depth":47,"text":98313},{"id":98926,"depth":47,"text":98927},{"id":99097,"depth":47,"text":99098},{"id":99268,"depth":47,"text":99269},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98304,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99383,"title":99384,"body":99385,"description":451,"extension":452,"meta":99660,"navigation":454,"path":99661,"seo":99662,"stem":99663,"__hash__":99664},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99386,"toc":99658},[99387,99390,99393,99487,99490,99493,99496,99499,99502,99505,99508,99511,99655],[10,99388,99384],{"id":99389},"_7数组转置",[14,99391,99392],{},"使用transpose()函数",[27,99394,99396],{"className":29,"code":99395,"language":31,"meta":32,"style":32},"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",[34,99397,99398,99408,99432,99437,99442,99447,99452,99460,99464,99468,99473,99478,99483],{"__ignoreMap":32},[37,99399,99400,99402,99404,99406],{"class":39,"line":40},[37,99401,30732],{"class":54},[37,99403,31719],{"class":50},[37,99405,31722],{"class":54},[37,99407,31725],{"class":50},[37,99409,99410,99412,99414,99416,99418,99420,99422,99424,99426,99428,99430],{"class":39,"line":47},[37,99411,51],{"class":50},[37,99413,55],{"class":54},[37,99415,32055],{"class":50},[37,99417,332],{"class":61},[37,99419,65],{"class":50},[37,99421,1034],{"class":61},[37,99423,93342],{"class":50},[37,99425,168],{"class":61},[37,99427,65],{"class":50},[37,99429,62],{"class":61},[37,99431,280],{"class":50},[37,99433,99434],{"class":39,"line":104},[37,99435,99436],{"class":43},"#二维数组转置\n",[37,99438,99439],{"class":39,"line":113},[37,99440,99441],{"class":43},"#调用transpose()函数\n",[37,99443,99444],{"class":39,"line":189},[37,99445,99446],{"class":50},"a.transpose()\n",[37,99448,99449],{"class":39,"line":195},[37,99450,99451],{"class":43},"#对于二维数组也可以采用.T来实现\n",[37,99453,99454,99457],{"class":39,"line":201},[37,99455,99456],{"class":50},"a.T",[37,99458,99459],{"class":43},"#与上述代码一样\n",[37,99461,99462],{"class":39,"line":207},[37,99463,93894],{"class":43},[37,99465,99466],{"class":39,"line":213},[37,99467,186],{"class":185},[37,99469,99470],{"class":39,"line":218},[37,99471,99472],{"class":185},"array([[ 1,  4,  7, 10],\n",[37,99474,99475],{"class":39,"line":227},[37,99476,99477],{"class":185},"       [ 2,  5,  8, 11],\n",[37,99479,99480],{"class":39,"line":232},[37,99481,99482],{"class":185},"       [ 3,  6,  9, 12]])\n",[37,99484,99485],{"class":39,"line":238},[37,99486,186],{"class":185},[14,99488,99489],{},"也可以使用np.transpose()的形式",[14,99491,99492],{},"#多维数组进行转置 np.transpose()",[14,99494,99495],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99497,99498],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99500,99501],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99503,99504],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99506,99507],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99509,99510],{},"四维及以上的数组也是一样的道理",[27,99512,99514],{"className":29,"code":99513,"language":31,"meta":32,"style":32},"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",[34,99515,99516,99544,99549,99554,99559,99577,99582,99614,99619,99624,99629,99650],{"__ignoreMap":32},[37,99517,99518,99520,99522,99524,99526,99528,99530,99532,99534,99536,99538,99540,99542],{"class":39,"line":40},[37,99519,1329],{"class":50},[37,99521,55],{"class":54},[37,99523,93337],{"class":50},[37,99525,332],{"class":61},[37,99527,65],{"class":50},[37,99529,842],{"class":61},[37,99531,93342],{"class":50},[37,99533,62],{"class":61},[37,99535,65],{"class":50},[37,99537,93],{"class":61},[37,99539,65],{"class":50},[37,99541,602],{"class":61},[37,99543,280],{"class":50},[37,99545,99546],{"class":39,"line":47},[37,99547,99548],{"class":50},"x.shape\n",[37,99550,99551],{"class":39,"line":104},[37,99552,99553],{"class":43},"#结果：（3,6,2）\n",[37,99555,99556],{"class":39,"line":113},[37,99557,99558],{"class":43},"#使用np.transpose()进行转置 变为(2,6,3)\n",[37,99560,99561,99564,99566,99568,99570,99572,99574],{"class":39,"line":189},[37,99562,99563],{"class":50},"np.transpose(x,(",[37,99565,602],{"class":61},[37,99567,65],{"class":50},[37,99569,332],{"class":61},[37,99571,65],{"class":50},[37,99573,135],{"class":61},[37,99575,99576],{"class":50},")).shape\n",[37,99578,99579],{"class":39,"line":195},[37,99580,99581],{"class":43},"#结果：(2,6,3)\n",[37,99583,99584,99586,99588,99590,99592,99594,99596,99598,99600,99602,99604,99606,99608,99610,99612],{"class":39,"line":201},[37,99585,98791],{"class":50},[37,99587,55],{"class":54},[37,99589,93337],{"class":50},[37,99591,332],{"class":61},[37,99593,65],{"class":50},[37,99595,842],{"class":61},[37,99597,93342],{"class":50},[37,99599,62],{"class":61},[37,99601,65],{"class":50},[37,99603,602],{"class":61},[37,99605,65],{"class":50},[37,99607,332],{"class":61},[37,99609,65],{"class":50},[37,99611,93],{"class":61},[37,99613,280],{"class":50},[37,99615,99616],{"class":39,"line":207},[37,99617,99618],{"class":50},"aaaa.shape\n",[37,99620,99621],{"class":39,"line":213},[37,99622,99623],{"class":43},"#结果：（3，2，1，6）\n",[37,99625,99626],{"class":39,"line":218},[37,99627,99628],{"class":43},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[37,99630,99631,99634,99636,99638,99640,99642,99644,99646,99648],{"class":39,"line":227},[37,99632,99633],{"class":50},"np.transpose(aaaa,(",[37,99635,332],{"class":61},[37,99637,65],{"class":50},[37,99639,602],{"class":61},[37,99641,65],{"class":50},[37,99643,135],{"class":61},[37,99645,65],{"class":50},[37,99647,62],{"class":61},[37,99649,99576],{"class":50},[37,99651,99652],{"class":39,"line":232},[37,99653,99654],{"class":43},"#结果：(2,1,3,6)\n",[446,99656,99657],{},"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":32,"searchDepth":47,"depth":47,"links":99659},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99384,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99666,"title":99667,"body":99668,"description":451,"extension":452,"meta":100402,"navigation":454,"path":100403,"seo":100404,"stem":100405,"__hash__":100406},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99669,"toc":100400},[99670,99673,99676,99679,99682,99685,99688,99691,99694,99803,99806,99809,100397],[10,99671,99667],{"id":99672},"_8数组分割",[14,99674,99675],{},"split分割",[14,99677,99678],{},"numpy.split(ary,indics_or_sections,axis)",[14,99680,99681],{},"解释：",[14,99683,99684],{},"ary:被分割的数组",[14,99686,99687],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99689,99690],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99692,99693],{},"①一维数组的分割",[27,99695,99697],{"className":29,"code":99696,"language":31,"meta":32,"style":32},"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",[34,99698,99699,99715,99720,99729,99733,99738,99746,99750,99755,99760,99773,99777,99782,99794,99798],{"__ignoreMap":32},[37,99700,99701,99703,99705,99707,99709,99711,99713],{"class":39,"line":40},[37,99702,51],{"class":50},[37,99704,55],{"class":54},[37,99706,93337],{"class":50},[37,99708,332],{"class":61},[37,99710,65],{"class":50},[37,99712,934],{"class":61},[37,99714,280],{"class":50},[37,99716,99717],{"class":39,"line":47},[37,99718,99719],{"class":43},"#如果传入整数，必须能够平分，否则会报错\n",[37,99721,99722,99725,99727],{"class":39,"line":104},[37,99723,99724],{"class":50},"np.split(a,",[37,99726,602],{"class":61},[37,99728,280],{"class":50},[37,99730,99731],{"class":39,"line":113},[37,99732,93894],{"class":43},[37,99734,99735],{"class":39,"line":189},[37,99736,99737],{"class":43},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[37,99739,99740,99742,99744],{"class":39,"line":195},[37,99741,99724],{"class":50},[37,99743,168],{"class":61},[37,99745,280],{"class":50},[37,99747,99748],{"class":39,"line":201},[37,99749,93894],{"class":43},[37,99751,99752],{"class":39,"line":207},[37,99753,99754],{"class":43},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[37,99756,99757],{"class":39,"line":213},[37,99758,99759],{"class":43},"#传入数组\n",[37,99761,99762,99765,99767,99769,99771],{"class":39,"line":218},[37,99763,99764],{"class":50},"np.split(a,[",[37,99766,62],{"class":61},[37,99768,65],{"class":50},[37,99770,836],{"class":61},[37,99772,101],{"class":50},[37,99774,99775],{"class":39,"line":227},[37,99776,93894],{"class":43},[37,99778,99779],{"class":39,"line":232},[37,99780,99781],{"class":43},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[37,99783,99784,99786,99788,99790,99792],{"class":39,"line":238},[37,99785,99764],{"class":50},[37,99787,836],{"class":61},[37,99789,65],{"class":50},[37,99791,885],{"class":61},[37,99793,101],{"class":50},[37,99795,99796],{"class":39,"line":244},[37,99797,93894],{"class":43},[37,99799,99800],{"class":39,"line":250},[37,99801,99802],{"class":43},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99804,99805],{},"②二维数组的分割",[14,99807,99808],{},"使用split()",[27,99810,99812],{"className":29,"code":99811,"language":31,"meta":32,"style":32},"#二维数组分割\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",[34,99813,99814,99819,99843,99848,99857,99861,99865,99870,99875,99880,99885,99890,99895,99900,99904,99917,99921,99925,99929,99933,99937,99942,99947,99952,99956,99961,99977,99981,99985,99990,99995,100000,100005,100010,100015,100020,100025,100030,100035,100040,100045,100050,100055,100060,100065,100070,100075,100079,100083,100103,100107,100111,100116,100121,100126,100131,100136,100141,100146,100151,100156,100161,100166,100171,100176,100181,100186,100191,100196,100201,100205,100210,100219,100223,100227,100231,100235,100239,100243,100247,100251,100255,100264,100268,100272,100276,100280,100284,100288,100292,100296,100300,100304,100308,100312,100316,100320,100324,100328,100332,100336,100340,100344,100348,100361,100365,100369,100373,100377,100381,100385,100389,100393],{"__ignoreMap":32},[37,99815,99816],{"class":39,"line":40},[37,99817,99818],{"class":43},"#二维数组分割\n",[37,99820,99821,99823,99825,99827,99829,99831,99833,99835,99837,99839,99841],{"class":39,"line":47},[37,99822,146],{"class":50},[37,99824,55],{"class":54},[37,99826,93337],{"class":50},[37,99828,332],{"class":61},[37,99830,65],{"class":50},[37,99832,842],{"class":61},[37,99834,93342],{"class":50},[37,99836,93],{"class":61},[37,99838,65],{"class":50},[37,99840,93],{"class":61},[37,99842,280],{"class":50},[37,99844,99845],{"class":39,"line":104},[37,99846,99847],{"class":43},"#默认axis=0  传入整数平均分,按行来的\n",[37,99849,99850,99853,99855],{"class":39,"line":113},[37,99851,99852],{"class":50},"np.split(aa,",[37,99854,62],{"class":61},[37,99856,280],{"class":50},[37,99858,99859],{"class":39,"line":189},[37,99860,96049],{"class":43},[37,99862,99863],{"class":39,"line":195},[37,99864,186],{"class":185},[37,99866,99867],{"class":39,"line":201},[37,99868,99869],{"class":185},"[array([[ 1,  2,  3,  4,  5,  6],\n",[37,99871,99872],{"class":39,"line":207},[37,99873,99874],{"class":185},"        [ 7,  8,  9, 10, 11, 12]]),\n",[37,99876,99877],{"class":39,"line":213},[37,99878,99879],{"class":185}," array([[13, 14, 15, 16, 17, 18],\n",[37,99881,99882],{"class":39,"line":218},[37,99883,99884],{"class":185},"        [19, 20, 21, 22, 23, 24]]),\n",[37,99886,99887],{"class":39,"line":227},[37,99888,99889],{"class":185}," array([[25, 26, 27, 28, 29, 30],\n",[37,99891,99892],{"class":39,"line":232},[37,99893,99894],{"class":185},"        [31, 32, 33, 34, 35, 36]])]\n",[37,99896,99897],{"class":39,"line":238},[37,99898,99899],{"class":185}," '''\n",[37,99901,99902],{"class":39,"line":244},[37,99903,99759],{"class":43},[37,99905,99906,99909,99911,99913,99915],{"class":39,"line":250},[37,99907,99908],{"class":50},"np.split(aa,[",[37,99910,602],{"class":61},[37,99912,65],{"class":50},[37,99914,836],{"class":61},[37,99916,101],{"class":50},[37,99918,99919],{"class":39,"line":256},[37,99920,96049],{"class":43},[37,99922,99923],{"class":39,"line":261},[37,99924,186],{"class":185},[37,99926,99927],{"class":39,"line":267},[37,99928,99869],{"class":185},[37,99930,99931],{"class":39,"line":283},[37,99932,99874],{"class":185},[37,99934,99935],{"class":39,"line":288},[37,99936,99879],{"class":185},[37,99938,99939],{"class":39,"line":294},[37,99940,99941],{"class":185},"        [19, 20, 21, 22, 23, 24],\n",[37,99943,99944],{"class":39,"line":300},[37,99945,99946],{"class":185},"        [25, 26, 27, 28, 29, 30]]),\n",[37,99948,99949],{"class":39,"line":306},[37,99950,99951],{"class":185}," array([[31, 32, 33, 34, 35, 36]])]\n",[37,99953,99954],{"class":39,"line":312},[37,99955,186],{"class":185},[37,99957,99958],{"class":39,"line":317},[37,99959,99960],{"class":43},"#axis=1 按照列来分\n",[37,99962,99963,99965,99967,99969,99971,99973,99975],{"class":39,"line":323},[37,99964,99852],{"class":50},[37,99966,62],{"class":61},[37,99968,65],{"class":50},[37,99970,273],{"class":159},[37,99972,55],{"class":54},[37,99974,332],{"class":61},[37,99976,280],{"class":50},[37,99978,99979],{"class":39,"line":337},[37,99980,96049],{"class":43},[37,99982,99983],{"class":39,"line":342},[37,99984,186],{"class":185},[37,99986,99987],{"class":39,"line":347},[37,99988,99989],{"class":185},"[array([[ 1,  2],\n",[37,99991,99992],{"class":39,"line":352},[37,99993,99994],{"class":185},"        [ 7,  8],\n",[37,99996,99997],{"class":39,"line":357},[37,99998,99999],{"class":185},"        [13, 14],\n",[37,100001,100002],{"class":39,"line":362},[37,100003,100004],{"class":185},"        [19, 20],\n",[37,100006,100007],{"class":39,"line":367},[37,100008,100009],{"class":185},"        [25, 26],\n",[37,100011,100012],{"class":39,"line":373},[37,100013,100014],{"class":185},"        [31, 32]]),\n",[37,100016,100017],{"class":39,"line":392},[37,100018,100019],{"class":185}," array([[ 3,  4],\n",[37,100021,100022],{"class":39,"line":398},[37,100023,100024],{"class":185},"        [ 9, 10],\n",[37,100026,100027],{"class":39,"line":409},[37,100028,100029],{"class":185},"        [15, 16],\n",[37,100031,100032],{"class":39,"line":415},[37,100033,100034],{"class":185},"        [21, 22],\n",[37,100036,100037],{"class":39,"line":420},[37,100038,100039],{"class":185},"        [27, 28],\n",[37,100041,100042],{"class":39,"line":425},[37,100043,100044],{"class":185},"        [33, 34]]),\n",[37,100046,100047],{"class":39,"line":431},[37,100048,100049],{"class":185}," array([[ 5,  6],\n",[37,100051,100052],{"class":39,"line":436},[37,100053,100054],{"class":185},"        [11, 12],\n",[37,100056,100057],{"class":39,"line":442},[37,100058,100059],{"class":185},"        [17, 18],\n",[37,100061,100062],{"class":39,"line":8374},[37,100063,100064],{"class":185},"        [23, 24],\n",[37,100066,100067],{"class":39,"line":8386},[37,100068,100069],{"class":185},"        [29, 30],\n",[37,100071,100072],{"class":39,"line":8398},[37,100073,100074],{"class":185},"        [35, 36]])]\n",[37,100076,100077],{"class":39,"line":10057},[37,100078,99899],{"class":185},[37,100080,100081],{"class":39,"line":10082},[37,100082,99759],{"class":43},[37,100084,100085,100087,100089,100091,100093,100095,100097,100099,100101],{"class":39,"line":10105},[37,100086,99908],{"class":50},[37,100088,332],{"class":61},[37,100090,65],{"class":50},[37,100092,602],{"class":61},[37,100094,41946],{"class":50},[37,100096,273],{"class":159},[37,100098,55],{"class":54},[37,100100,332],{"class":61},[37,100102,280],{"class":50},[37,100104,100105],{"class":39,"line":10129},[37,100106,93894],{"class":43},[37,100108,100109],{"class":39,"line":10134},[37,100110,186],{"class":185},[37,100112,100113],{"class":39,"line":10139},[37,100114,100115],{"class":185},"[array([[ 1],\n",[37,100117,100118],{"class":39,"line":10144},[37,100119,100120],{"class":185},"        [ 7],\n",[37,100122,100123],{"class":39,"line":10153},[37,100124,100125],{"class":185},"        [13],\n",[37,100127,100128],{"class":39,"line":10158},[37,100129,100130],{"class":185},"        [19],\n",[37,100132,100133],{"class":39,"line":10164},[37,100134,100135],{"class":185},"        [25],\n",[37,100137,100138],{"class":39,"line":10185},[37,100139,100140],{"class":185},"        [31]]),\n",[37,100142,100143],{"class":39,"line":10191},[37,100144,100145],{"class":185}," array([[ 2],\n",[37,100147,100148],{"class":39,"line":10205},[37,100149,100150],{"class":185},"        [ 8],\n",[37,100152,100153],{"class":39,"line":10211},[37,100154,100155],{"class":185},"        [14],\n",[37,100157,100158],{"class":39,"line":10238},[37,100159,100160],{"class":185},"        [20],\n",[37,100162,100163],{"class":39,"line":10247},[37,100164,100165],{"class":185},"        [26],\n",[37,100167,100168],{"class":39,"line":10253},[37,100169,100170],{"class":185},"        [32]]),\n",[37,100172,100173],{"class":39,"line":10261},[37,100174,100175],{"class":185}," array([[ 3,  4,  5,  6],\n",[37,100177,100178],{"class":39,"line":10266},[37,100179,100180],{"class":185},"        [ 9, 10, 11, 12],\n",[37,100182,100183],{"class":39,"line":16945},[37,100184,100185],{"class":185},"        [15, 16, 17, 18],\n",[37,100187,100188],{"class":39,"line":16951},[37,100189,100190],{"class":185},"        [21, 22, 23, 24],\n",[37,100192,100193],{"class":39,"line":16974},[37,100194,100195],{"class":185},"        [27, 28, 29, 30],\n",[37,100197,100198],{"class":39,"line":16980},[37,100199,100200],{"class":185},"        [33, 34, 35, 36]])]\n",[37,100202,100203],{"class":39,"line":17003},[37,100204,186],{"class":185},[37,100206,100207],{"class":39,"line":17017},[37,100208,100209],{"class":43},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[37,100211,100212,100215,100217],{"class":39,"line":17037},[37,100213,100214],{"class":50},"np.vsplit(aa,",[37,100216,62],{"class":61},[37,100218,280],{"class":50},[37,100220,100221],{"class":39,"line":17043},[37,100222,93894],{"class":43},[37,100224,100225],{"class":39,"line":17054},[37,100226,186],{"class":185},[37,100228,100229],{"class":39,"line":17077},[37,100230,99869],{"class":185},[37,100232,100233],{"class":39,"line":17099},[37,100234,99874],{"class":185},[37,100236,100237],{"class":39,"line":17104},[37,100238,99879],{"class":185},[37,100240,100241],{"class":39,"line":17110},[37,100242,99884],{"class":185},[37,100244,100245],{"class":39,"line":17124},[37,100246,99889],{"class":185},[37,100248,100249],{"class":39,"line":17137},[37,100250,99894],{"class":185},[37,100252,100253],{"class":39,"line":17142},[37,100254,186],{"class":185},[37,100256,100257,100260,100262],{"class":39,"line":17156},[37,100258,100259],{"class":50},"np.hsplit(aa,",[37,100261,62],{"class":61},[37,100263,280],{"class":50},[37,100265,100266],{"class":39,"line":17161},[37,100267,93894],{"class":43},[37,100269,100270],{"class":39,"line":17167},[37,100271,186],{"class":185},[37,100273,100274],{"class":39,"line":17172},[37,100275,99989],{"class":185},[37,100277,100278],{"class":39,"line":17186},[37,100279,99994],{"class":185},[37,100281,100282],{"class":39,"line":17191},[37,100283,99999],{"class":185},[37,100285,100286],{"class":39,"line":17196},[37,100287,100004],{"class":185},[37,100289,100290],{"class":39,"line":17210},[37,100291,100009],{"class":185},[37,100293,100294],{"class":39,"line":17222},[37,100295,100014],{"class":185},[37,100297,100298],{"class":39,"line":17227},[37,100299,100019],{"class":185},[37,100301,100302],{"class":39,"line":17240},[37,100303,100024],{"class":185},[37,100305,100306],{"class":39,"line":17245},[37,100307,100029],{"class":185},[37,100309,100310],{"class":39,"line":17250},[37,100311,100034],{"class":185},[37,100313,100314],{"class":39,"line":17255},[37,100315,100039],{"class":185},[37,100317,100318],{"class":39,"line":17268},[37,100319,100044],{"class":185},[37,100321,100322],{"class":39,"line":17273},[37,100323,100049],{"class":185},[37,100325,100326],{"class":39,"line":32971},[37,100327,100054],{"class":185},[37,100329,100330],{"class":39,"line":32977},[37,100331,100059],{"class":185},[37,100333,100334],{"class":39,"line":32983},[37,100335,100064],{"class":185},[37,100337,100338],{"class":39,"line":32989},[37,100339,100069],{"class":185},[37,100341,100342],{"class":39,"line":32995},[37,100343,100074],{"class":185},[37,100345,100346],{"class":39,"line":33006},[37,100347,186],{"class":185},[37,100349,100350,100353,100355,100357,100359],{"class":39,"line":33012},[37,100351,100352],{"class":50},"np.vsplit(aa,[",[37,100354,602],{"class":61},[37,100356,65],{"class":50},[37,100358,836],{"class":61},[37,100360,101],{"class":50},[37,100362,100363],{"class":39,"line":33032},[37,100364,93894],{"class":43},[37,100366,100367],{"class":39,"line":33038},[37,100368,186],{"class":185},[37,100370,100371],{"class":39,"line":33049},[37,100372,99869],{"class":185},[37,100374,100375],{"class":39,"line":33055},[37,100376,99874],{"class":185},[37,100378,100379],{"class":39,"line":33061},[37,100380,99879],{"class":185},[37,100382,100383],{"class":39,"line":33067},[37,100384,99941],{"class":185},[37,100386,100387],{"class":39,"line":33073},[37,100388,99946],{"class":185},[37,100390,100391],{"class":39,"line":33079},[37,100392,99951],{"class":185},[37,100394,100395],{"class":39,"line":33085},[37,100396,99899],{"class":185},[446,100398,100399],{},"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":32,"searchDepth":47,"depth":47,"links":100401},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99667,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100408,"title":100409,"body":100410,"description":451,"extension":452,"meta":100904,"navigation":454,"path":100905,"seo":100906,"stem":100907,"__hash__":100908},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100411,"toc":100895},[100412,100415,100418,100443,100447,100506,100558,100562,100564,100600,100654,100656,100694,100765,100769,100774,100778,100781,100814,100817,100821,100824,100827,100830,100833,100838,100842,100845,100848,100851,100854,100859,100863,100868,100871,100892],[10,100413,100409],{"id":100414},"_9数学函数",[14,100416,100417],{},"补充回顾：python的列表推导式",[27,100419,100421],{"className":29,"code":100420,"language":31,"meta":32,"style":32},"[1\u002Fi for i in a]\n",[34,100422,100423],{"__ignoreMap":32},[37,100424,100425,100427,100429,100431,100434,100436,100438,100440],{"class":39,"line":40},[37,100426,1399],{"class":50},[37,100428,332],{"class":61},[37,100430,1094],{"class":54},[37,100432,100433],{"class":50},"i ",[37,100435,3375],{"class":54},[37,100437,9779],{"class":50},[37,100439,26385],{"class":54},[37,100441,100442],{"class":50}," a]\n",[469,100444,100446],{"id":100445},"_91-求倒数","9.1 求倒数",[27,100448,100450],{"className":29,"code":100449,"language":31,"meta":32,"style":32},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[34,100451,100452,100457,100485,100497],{"__ignoreMap":32},[37,100453,100454],{"class":39,"line":40},[37,100455,100456],{"class":43},"#数组求倒数\n",[37,100458,100459,100461,100463,100465,100467,100469,100471,100473,100475,100477,100479,100481,100483],{"class":39,"line":47},[37,100460,51],{"class":50},[37,100462,55],{"class":54},[37,100464,1399],{"class":50},[37,100466,332],{"class":61},[37,100468,65],{"class":50},[37,100470,602],{"class":61},[37,100472,65],{"class":50},[37,100474,62],{"class":61},[37,100476,65],{"class":50},[37,100478,168],{"class":61},[37,100480,65],{"class":50},[37,100482,836],{"class":61},[37,100484,389],{"class":50},[37,100486,100487,100489,100491,100494],{"class":39,"line":104},[37,100488,376],{"class":50},[37,100490,55],{"class":54},[37,100492,100493],{"class":50},"np.array(a)",[37,100495,100496],{"class":43},"#将列表转换为数组\n",[37,100498,100499,100501,100503],{"class":39,"line":113},[37,100500,332],{"class":61},[37,100502,1094],{"class":54},[37,100504,100505],{"class":50},"b\n",[27,100507,100509],{"className":29,"code":100508,"language":31,"meta":32,"style":32},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[34,100510,100511,100539,100548,100553],{"__ignoreMap":32},[37,100512,100513,100515,100517,100519,100521,100523,100525,100527,100529,100531,100533,100535,100537],{"class":39,"line":40},[37,100514,51],{"class":50},[37,100516,55],{"class":54},[37,100518,1399],{"class":50},[37,100520,332],{"class":61},[37,100522,65],{"class":50},[37,100524,602],{"class":61},[37,100526,65],{"class":50},[37,100528,62],{"class":61},[37,100530,65],{"class":50},[37,100532,168],{"class":61},[37,100534,65],{"class":50},[37,100536,836],{"class":61},[37,100538,389],{"class":50},[37,100540,100541,100543,100545],{"class":39,"line":47},[37,100542,376],{"class":50},[37,100544,55],{"class":54},[37,100546,100547],{"class":50},"np.array(a)\n",[37,100549,100550],{"class":39,"line":104},[37,100551,100552],{"class":43},"#调用numpy中的函数reciprocal()\n",[37,100554,100555],{"class":39,"line":113},[37,100556,100557],{"class":50},"np.reciprocal(b)\n",[469,100559,100561],{"id":100560},"_92-求平方","9.2 求平方",[14,100563,25],{},[27,100565,100567],{"className":29,"code":100566,"language":31,"meta":32,"style":32},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[34,100568,100569,100574,100579,100595],{"__ignoreMap":32},[37,100570,100571],{"class":39,"line":40},[37,100572,100573],{"class":43},"#square()，求平方\n",[37,100575,100576],{"class":39,"line":47},[37,100577,100578],{"class":43},"#一维数组\n",[37,100580,100581,100583,100585,100587,100589,100591,100593],{"class":39,"line":104},[37,100582,51],{"class":50},[37,100584,55],{"class":54},[37,100586,93337],{"class":50},[37,100588,332],{"class":61},[37,100590,65],{"class":50},[37,100592,98],{"class":61},[37,100594,280],{"class":50},[37,100596,100597],{"class":39,"line":113},[37,100598,100599],{"class":50},"np.square(a)\n",[27,100601,100603],{"className":29,"code":100602,"language":31,"meta":32,"style":32},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[34,100604,100605,100610,100615,100636],{"__ignoreMap":32},[37,100606,100607],{"class":39,"line":40},[37,100608,100609],{"class":43},"#或者通过循环遍历的形式来计算\n",[37,100611,100612],{"class":39,"line":47},[37,100613,100614],{"class":43},"#这是一个列表\n",[37,100616,100617,100620,100622,100624,100626,100628,100630,100633],{"class":39,"line":104},[37,100618,100619],{"class":50},"[i",[37,100621,967],{"class":54},[37,100623,100433],{"class":50},[37,100625,3375],{"class":54},[37,100627,9779],{"class":50},[37,100629,26385],{"class":54},[37,100631,100632],{"class":50}," a]",[37,100634,100635],{"class":43},"#这个求完之后在数列当中\n",[37,100637,100638,100641,100643,100645,100647,100649,100651],{"class":39,"line":113},[37,100639,100640],{"class":50},"np.array([i",[37,100642,967],{"class":54},[37,100644,100433],{"class":50},[37,100646,3375],{"class":54},[37,100648,9779],{"class":50},[37,100650,26385],{"class":54},[37,100652,100653],{"class":50}," a])\n",[14,100655,122],{},[27,100657,100659],{"className":29,"code":100658,"language":31,"meta":32,"style":32},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[34,100660,100661,100665,100689],{"__ignoreMap":32},[37,100662,100663],{"class":39,"line":40},[37,100664,93632],{"class":43},[37,100666,100667,100669,100671,100673,100675,100677,100679,100681,100683,100685,100687],{"class":39,"line":47},[37,100668,146],{"class":50},[37,100670,55],{"class":54},[37,100672,93337],{"class":50},[37,100674,332],{"class":61},[37,100676,65],{"class":50},[37,100678,1034],{"class":61},[37,100680,93342],{"class":50},[37,100682,168],{"class":61},[37,100684,65],{"class":50},[37,100686,62],{"class":61},[37,100688,280],{"class":50},[37,100690,100691],{"class":39,"line":104},[37,100692,100693],{"class":50},"np.square(aa)\n",[27,100695,100697],{"className":29,"code":100696,"language":31,"meta":32,"style":32},"#传统的方式\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",[34,100698,100699,100704,100713,100729,100745,100760],{"__ignoreMap":32},[37,100700,100701],{"class":39,"line":40},[37,100702,100703],{"class":43},"#传统的方式\n",[37,100705,100706,100708,100710],{"class":39,"line":47},[37,100707,98472],{"class":50},[37,100709,55],{"class":54},[37,100711,100712],{"class":50},"np.empty_like(aa)\n",[37,100714,100715,100717,100719,100721,100723,100725,100727],{"class":39,"line":104},[37,100716,3375],{"class":54},[37,100718,9779],{"class":50},[37,100720,26385],{"class":54},[37,100722,32781],{"class":61},[37,100724,165],{"class":50},[37,100726,168],{"class":61},[37,100728,31125],{"class":50},[37,100730,100731,100733,100735,100737,100739,100741,100743],{"class":39,"line":113},[37,100732,3551],{"class":54},[37,100734,9841],{"class":50},[37,100736,26385],{"class":54},[37,100738,32781],{"class":61},[37,100740,165],{"class":50},[37,100742,62],{"class":61},[37,100744,31125],{"class":50},[37,100746,100747,100750,100752,100755,100757],{"class":39,"line":189},[37,100748,100749],{"class":50},"        bb[i,j]",[37,100751,55],{"class":54},[37,100753,100754],{"class":50},"aa[i,j]",[37,100756,967],{"class":54},[37,100758,100759],{"class":50},"aa[i,j]\n",[37,100761,100762],{"class":39,"line":195},[37,100763,100764],{"class":50},"bb\n",[469,100766,100768],{"id":100767},"_93-求各元素的符号","9.3 求各元素的符号",[14,100770,100771],{},[1838,100772],{"alt":32,"src":100773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[469,100775,100777],{"id":100776},"_94-modf函数","9.4 modf函数",[14,100779,100780],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[27,100782,100784],{"className":29,"code":100783,"language":31,"meta":32,"style":32},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[34,100785,100786,100809],{"__ignoreMap":32},[37,100787,100788,100790,100792,100794,100796,100798,100800,100802,100804,100807],{"class":39,"line":40},[37,100789,51],{"class":50},[37,100791,55],{"class":54},[37,100793,93337],{"class":50},[37,100795,384],{"class":54},[37,100797,98],{"class":61},[37,100799,65],{"class":50},[37,100801,98],{"class":61},[37,100803,65],{"class":50},[37,100805,100806],{"class":61},"0.3",[37,100808,280],{"class":50},[37,100810,100811],{"class":39,"line":47},[37,100812,100813],{"class":50},"np.modf(a)\n",[14,100815,100816],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[469,100818,100820],{"id":100819},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100822,100823],{},"np.cell()",[14,100825,100826],{},"np.floor()",[14,100828,100829],{},"np.rint()",[14,100831,100832],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100834,100835],{},[1838,100836],{"alt":32,"src":100837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[469,100839,100841],{"id":100840},"_96-around函数","9.6 around()函数",[14,100843,100844],{},"around()函数也可以实现对数的小数位数进行操作",[14,100846,100847],{},"其中的参数：",[14,100849,100850],{},"1.要传的数组",[14,100852,100853],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100855,100856],{},[1838,100857],{"alt":32,"src":100858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[469,100860,100862],{"id":100861},"_97-三角函数","9.7 三角函数",[14,100864,100865],{},[1838,100866],{"alt":32,"src":100867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100869,100870],{},"引入图像模块非常重要",[27,100872,100874],{"className":29,"code":100873,"language":31,"meta":32,"style":32},"from matplotlib import pyplot as plt\n",[34,100875,100876],{"__ignoreMap":32},[37,100877,100878,100880,100883,100885,100888,100890],{"class":39,"line":40},[37,100879,31076],{"class":54},[37,100881,100882],{"class":50}," matplotlib ",[37,100884,30732],{"class":54},[37,100886,100887],{"class":50}," pyplot ",[37,100889,31722],{"class":54},[37,100891,31776],{"class":50},[446,100893,100894],{},"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":32,"searchDepth":47,"depth":47,"links":100896},[100897,100898,100899,100900,100901,100902,100903],{"id":100445,"depth":47,"text":100446},{"id":100560,"depth":47,"text":100561},{"id":100767,"depth":47,"text":100768},{"id":100776,"depth":47,"text":100777},{"id":100819,"depth":47,"text":100820},{"id":100840,"depth":47,"text":100841},{"id":100861,"depth":47,"text":100862},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100409,"description":451},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100910,"title":100911,"body":100912,"description":451,"extension":452,"meta":100916,"navigation":454,"path":100917,"seo":100918,"stem":100919,"__hash__":100920},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100913,"toc":100914},[],{"title":32,"searchDepth":47,"depth":47,"links":100915},[],{"category":50756},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100911,"description":451},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100922,"title":100923,"body":100924,"description":32,"extension":452,"meta":102932,"navigation":454,"path":102933,"seo":102934,"stem":102935,"__hash__":102936},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100925,"toc":102908},[100926,100929,100933,100936,100939,100945,100948,100971,100974,101008,101011,101052,101056,101059,101152,101155,101199,101202,101219,101222,101236,101239,101242,101287,101290,101327,101331,101334,101340,101345,101365,101369,101372,101438,101441,101459,101463,101466,101495,101505,101511,101515,101518,101524,101535,101539,101542,101572,101575,101855,101858,101861,101872,101875,101878,101900,101907,101910,101928,101931,101934,101948,101956,101959,101985,101991,101994,101997,102007,102019,102039,102048,102068,102078,102102,102115,102129,102134,102175,102192,102217,102229,102249,102255,102300,102319,102336,102349,102365,102372,102384,102393,102428,102449,102474,102487,102511,102526,102551,102554,102575,102584,102587,102598,102602,102605,102611,102623,102630,102634,102637,102649,102652,102666,102669,102679,102689,102692,102732,102735,102739,102745,102748,102762,102766,102769,102802,102806,102809,102832,102840,102843,102849,102855,102858,102861,102889,102893,102896,102902,102905],[10,100927,100923],{"id":100928},"_1环境安装与第一个-mujoco-程序",[469,100930,100932],{"id":100931},"_1目标说明","1.目标说明",[14,100934,100935],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100937,100938],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[27,100940,100943],{"className":100941,"code":100942,"language":5536,"meta":32},[5534],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[34,100944,100942],{"__ignoreMap":32},[14,100946,100947],{},"需要掌握:",[481,100949,100950,100953,100956,100961,100966],{},[484,100951,100952],{},"Fedora 44 下 MuJoCo 的系统依赖",[484,100954,100955],{},"Python 虚拟环境创建",[484,100957,100958],{},[34,100959,100960],{},"mujoco.MjModel",[484,100962,100963],{},[34,100964,100965],{},"mujoco.MjData",[484,100967,100968],{},[34,100969,100970],{},"mujoco.mj_step(model, data)",[14,100972,100973],{},"MuJoCo 中最重要的两个对象:",[661,100975,100976,100986],{},[664,100977,100978],{},[667,100979,100980,100983],{},[670,100981,100982],{"align":24077},"对象",[670,100984,100985],{"align":24077},"含义",[708,100987,100988,100998],{},[667,100989,100990,100995],{},[713,100991,100992],{"align":24077},[34,100993,100994],{},"MjModel",[713,100996,100997],{"align":24077},"模型结构，来自 XML，基本不随时间变化",[667,100999,101000,101005],{},[713,101001,101002],{"align":24077},[34,101003,101004],{},"MjData",[713,101006,101007],{"align":24077},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,101009,101010],{},"可以先用一个类比理解：",[661,101012,101013,101023],{},[664,101014,101015],{},[667,101016,101017,101020],{},[670,101018,101019],{"align":24077},"类比",[670,101021,101022],{"align":24077},"MuJoCo 对象",[708,101024,101025,101034,101043],{},[667,101026,101027,101030],{},[713,101028,101029],{"align":24077},"游戏地图和角色配置",[713,101031,101032],{"align":24077},[34,101033,100994],{},[667,101035,101036,101039],{},[713,101037,101038],{"align":24077},"游戏运行到当前帧的状态",[713,101040,101041],{"align":24077},[34,101042,101004],{},[667,101044,101045,101048],{},[713,101046,101047],{"align":24077},"前进一帧",[713,101049,101050],{"align":24077},[34,101051,100970],{},[469,101053,101055],{"id":101054},"_2环境与依赖安装","2.环境与依赖安装",[14,101057,101058],{},"Fedora 44 系统依赖:",[27,101060,101062],{"className":24163,"code":101061,"language":24165,"meta":32,"style":32},"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",[34,101063,101064,101076,101089,101102,101112,101122,101141],{"__ignoreMap":32},[37,101065,101066,101068,101070,101072,101074],{"class":39,"line":40},[37,101067,24918],{"class":2320},[37,101069,26657],{"class":185},[37,101071,24175],{"class":185},[37,101073,26742],{"class":61},[37,101075,25020],{"class":61},[37,101077,101078,101081,101084,101087],{"class":39,"line":47},[37,101079,101080],{"class":185},"  python3",[37,101082,101083],{"class":185}," python3-pip",[37,101085,101086],{"class":185}," python3-virtualenv",[37,101088,25020],{"class":61},[37,101090,101091,101094,101097,101100],{"class":39,"line":104},[37,101092,101093],{"class":185},"  mesa-libGL",[37,101095,101096],{"class":185}," mesa-libGLU",[37,101098,101099],{"class":185}," mesa-dri-drivers",[37,101101,25020],{"class":61},[37,101103,101104,101107,101110],{"class":39,"line":113},[37,101105,101106],{"class":185},"  libglvnd-glx",[37,101108,101109],{"class":185}," libglvnd-opengl",[37,101111,25020],{"class":61},[37,101113,101114,101117,101120],{"class":39,"line":189},[37,101115,101116],{"class":185},"  glfw",[37,101118,101119],{"class":185}," glfw-devel",[37,101121,25020],{"class":61},[37,101123,101124,101127,101130,101133,101136,101139],{"class":39,"line":195},[37,101125,101126],{"class":185},"  libX11",[37,101128,101129],{"class":185}," libXcursor",[37,101131,101132],{"class":185}," libXi",[37,101134,101135],{"class":185}," libXinerama",[37,101137,101138],{"class":185}," libXrandr",[37,101140,25020],{"class":61},[37,101142,101143,101146,101149],{"class":39,"line":201},[37,101144,101145],{"class":185},"  gcc",[37,101147,101148],{"class":185}," gcc-c++",[37,101150,101151],{"class":185}," make\n",[14,101153,101154],{},"创建 Python 环境:",[27,101156,101158],{"className":24163,"code":101157,"language":24165,"meta":32,"style":32},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[34,101159,101160,101174,101182],{"__ignoreMap":32},[37,101161,101162,101165,101168,101171],{"class":39,"line":40},[37,101163,101164],{"class":2320},"python3",[37,101166,101167],{"class":61}," -m",[37,101169,101170],{"class":185}," venv",[37,101172,101173],{"class":185}," .venv\n",[37,101175,101176,101179],{"class":39,"line":47},[37,101177,101178],{"class":61},"source",[37,101180,101181],{"class":185}," .venv\u002Fbin\u002Factivate\n",[37,101183,101184,101186,101188,101191,101193,101196],{"class":39,"line":104},[37,101185,31],{"class":2320},[37,101187,101167],{"class":61},[37,101189,101190],{"class":185}," pip",[37,101192,24175],{"class":185},[37,101194,101195],{"class":61}," --upgrade",[37,101197,101198],{"class":185}," pip\n",[14,101200,101201],{},"pip 安装:",[27,101203,101205],{"className":24163,"code":101204,"language":24165,"meta":32,"style":32},"pip install \"mujoco>=2.3\" numpy\n",[34,101206,101207],{"__ignoreMap":32},[37,101208,101209,101211,101213,101216],{"class":39,"line":40},[37,101210,24172],{"class":2320},[37,101212,24175],{"class":185},[37,101214,101215],{"class":185}," \"mujoco>=2.3\"",[37,101217,101218],{"class":185}," numpy\n",[14,101220,101221],{},"安装完成后，先做最小检查：",[27,101223,101225],{"className":24163,"code":101224,"language":24165,"meta":32,"style":32},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[34,101226,101227],{"__ignoreMap":32},[37,101228,101229,101231,101233],{"class":39,"line":40},[37,101230,31],{"class":2320},[37,101232,30700],{"class":61},[37,101234,101235],{"class":185}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101237,101238],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101240,101241],{},"conda 安装:",[27,101243,101245],{"className":24163,"code":101244,"language":24165,"meta":32,"style":32},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[34,101246,101247,101267,101277],{"__ignoreMap":32},[37,101248,101249,101251,101253,101255,101258,101261,101264],{"class":39,"line":40},[37,101250,30672],{"class":2320},[37,101252,29518],{"class":185},[37,101254,25457],{"class":61},[37,101256,101257],{"class":185}," mujoco-study",[37,101259,101260],{"class":185}," python=",[37,101262,101263],{"class":61},"3.10",[37,101265,101266],{"class":61}," -y\n",[37,101268,101269,101271,101274],{"class":39,"line":47},[37,101270,30672],{"class":2320},[37,101272,101273],{"class":185}," activate",[37,101275,101276],{"class":185}," mujoco-study\n",[37,101278,101279,101281,101283,101285],{"class":39,"line":104},[37,101280,24172],{"class":2320},[37,101282,24175],{"class":185},[37,101284,101215],{"class":185},[37,101286,101218],{"class":185},[14,101288,101289],{},"版本冲突说明:",[481,101291,101292,101298,101308,101317],{},[484,101293,101294,101295,28727],{},"不要安装 ",[34,101296,101297],{},"mujoco-py",[484,101299,101300,101301,101303,101304,101307],{},"如果旧项目里同时安装了 ",[34,101302,101297],{}," 和 ",[34,101305,101306],{},"mujoco","，建议新建干净虚拟环境。",[484,101309,101310,101313,101314,28727],{},[34,101311,101312],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[34,101315,101316],{},"~\u002F.mujoco\u002Fmujoco210",[484,101318,101319,101320,82874,101323,101326],{},"离屏渲染可能涉及 OpenGL 后端，",[34,101321,101322],{},"MUJOCO_GL=egl",[34,101324,101325],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[469,101328,101330],{"id":101329},"_3核心概念解释","3.核心概念解释",[14,101332,101333],{},"MuJoCo 的基本执行流程:",[27,101335,101338],{"className":101336,"code":101337,"language":5536,"meta":32},[5534],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[34,101339,101337],{"__ignoreMap":32},[14,101341,101342,101344],{},[34,101343,100994],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101346,101347,101349,101350,735,101353,735,101356,735,101359,735,101362,28727],{},[34,101348,101004],{}," 存放仿真运行时状态，例如 ",[34,101351,101352],{},"data.time",[34,101354,101355],{},"data.qpos",[34,101357,101358],{},"data.qvel",[34,101360,101361],{},"data.ctrl",[34,101363,101364],{},"data.xpos",[498,101366,101368],{"id":101367},"xml-是什么","XML 是什么",[14,101370,101371],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[27,101373,101375],{"className":53403,"code":101374,"language":53405,"meta":32,"style":32},"\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",[34,101376,101377,101399,101430],{"__ignoreMap":32},[37,101378,101379,101381,101383,101385,101387,101389,101392,101394,101397],{"class":39,"line":40},[37,101380,1418],{"class":50},[37,101382,52136],{"class":51636},[37,101384,15261],{"class":2320},[37,101386,55],{"class":50},[37,101388,53827],{"class":185},[37,101390,101391],{"class":2320}," pos",[37,101393,55],{"class":50},[37,101395,101396],{"class":185},"\"0 0 1\"",[37,101398,51643],{"class":50},[37,101400,101401,101403,101406,101408,101410,101413,101415,101417,101419,101422,101424,101427],{"class":39,"line":47},[37,101402,52480],{"class":50},[37,101404,101405],{"class":51636},"geom",[37,101407,15261],{"class":2320},[37,101409,55],{"class":50},[37,101411,101412],{"class":185},"\"box_geom\"",[37,101414,54160],{"class":2320},[37,101416,55],{"class":50},[37,101418,53827],{"class":185},[37,101420,101421],{"class":2320}," size",[37,101423,55],{"class":50},[37,101425,101426],{"class":185},"\"0.1 0.1 0.1\"",[37,101428,101429],{"class":50},"\u002F>\n",[37,101431,101432,101434,101436],{"class":39,"line":104},[37,101433,52121],{"class":50},[37,101435,52136],{"class":51636},[37,101437,51643],{"class":50},[14,101439,101440],{},"这段意思是：",[481,101442,101443,101449,101456],{},[484,101444,101445,101446,101448],{},"创建一个叫 ",[34,101447,54050],{}," 的刚体。",[484,101450,101451,101452,101455],{},"它初始放在 ",[34,101453,101454],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[484,101457,101458],{},"它里面有一个盒子形状的几何体。",[498,101460,101462],{"id":101461},"timestep-是什么","timestep 是什么",[14,101464,101465],{},"XML 里的：",[27,101467,101469],{"className":53403,"code":101468,"language":53405,"meta":32,"style":32},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[34,101470,101471],{"__ignoreMap":32},[37,101472,101473,101475,101477,101480,101482,101485,101488,101490,101493],{"class":39,"line":40},[37,101474,1418],{"class":50},[37,101476,69502],{"class":51636},[37,101478,101479],{"class":2320}," timestep",[37,101481,55],{"class":50},[37,101483,101484],{"class":185},"\"0.01\"",[37,101486,101487],{"class":2320}," gravity",[37,101489,55],{"class":50},[37,101491,101492],{"class":185},"\"0 0 -9.81\"",[37,101494,101429],{"class":50},[14,101496,101497,101498,101501,101502,101504],{},"表示每调用一次 ",[34,101499,101500],{},"mj_step","，仿真时间前进 ",[34,101503,39323],{}," 秒。循环 100 次，大约就是 1 秒：",[27,101506,101509],{"className":101507,"code":101508,"language":5536,"meta":32},[5534],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[34,101510,101508],{"__ignoreMap":32},[498,101512,101514],{"id":101513},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101516,101517],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[27,101519,101522],{"className":101520,"code":101521,"language":5536,"meta":32},[5534],"x y z qw qx qy qz\n",[34,101523,101521],{"__ignoreMap":32},[14,101525,101526,101527,101530,101531,101534],{},"表示一个自由刚体的位置和姿态。其中 ",[34,101528,101529],{},"x y z"," 是位置，",[34,101532,101533],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[469,101536,101538],{"id":101537},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101540,101541],{},"新建文件:",[27,101543,101545],{"className":24163,"code":101544,"language":24165,"meta":32,"style":32},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[34,101546,101547,101557,101564],{"__ignoreMap":32},[37,101548,101549,101552,101554],{"class":39,"line":40},[37,101550,101551],{"class":2320},"mkdir",[37,101553,29558],{"class":61},[37,101555,101556],{"class":185}," mujoco_tutorial\n",[37,101558,101559,101562],{"class":39,"line":47},[37,101560,101561],{"class":61},"cd",[37,101563,101556],{"class":185},[37,101565,101566,101569],{"class":39,"line":104},[37,101567,101568],{"class":2320},"touch",[37,101570,101571],{"class":185}," ch1_first_sim.py\n",[14,101573,101574],{},"写入:",[27,101576,101578],{"className":29,"code":101577,"language":31,"meta":32,"style":32},"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",[34,101579,101580,101587,101591,101595,101605,101610,101615,101619,101624,101629,101633,101638,101643,101648,101653,101658,101663,101667,101671,101675,101688,101702,101712,101716,101728,101740,101752,101764,101776,101780,101797,101802,101806,101817,101828,101832,101836,101850],{"__ignoreMap":32},[37,101581,101582,101584],{"class":39,"line":40},[37,101583,30732],{"class":54},[37,101585,101586],{"class":50}," mujoco\n",[37,101588,101589],{"class":39,"line":47},[37,101590,2757],{"emptyLinePlaceholder":454},[37,101592,101593],{"class":39,"line":104},[37,101594,2757],{"emptyLinePlaceholder":454},[37,101596,101597,101600,101602],{"class":39,"line":113},[37,101598,101599],{"class":61},"XML",[37,101601,13905],{"class":54},[37,101603,101604],{"class":185}," \"\"\"\n",[37,101606,101607],{"class":39,"line":189},[37,101608,101609],{"class":185},"\u003Cmujoco model=\"first_sim\">\n",[37,101611,101612],{"class":39,"line":195},[37,101613,101614],{"class":185},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[37,101616,101617],{"class":39,"line":201},[37,101618,2757],{"emptyLinePlaceholder":454},[37,101620,101621],{"class":39,"line":207},[37,101622,101623],{"class":185},"  \u003Cworldbody>\n",[37,101625,101626],{"class":39,"line":213},[37,101627,101628],{"class":185},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[37,101630,101631],{"class":39,"line":218},[37,101632,2757],{"emptyLinePlaceholder":454},[37,101634,101635],{"class":39,"line":227},[37,101636,101637],{"class":185},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[37,101639,101640],{"class":39,"line":232},[37,101641,101642],{"class":185},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[37,101644,101645],{"class":39,"line":238},[37,101646,101647],{"class":185},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[37,101649,101650],{"class":39,"line":244},[37,101651,101652],{"class":185},"    \u003C\u002Fbody>\n",[37,101654,101655],{"class":39,"line":250},[37,101656,101657],{"class":185},"  \u003C\u002Fworldbody>\n",[37,101659,101660],{"class":39,"line":256},[37,101661,101662],{"class":185},"\u003C\u002Fmujoco>\n",[37,101664,101665],{"class":39,"line":261},[37,101666,95983],{"class":185},[37,101668,101669],{"class":39,"line":267},[37,101670,2757],{"emptyLinePlaceholder":454},[37,101672,101673],{"class":39,"line":283},[37,101674,2757],{"emptyLinePlaceholder":454},[37,101676,101677,101679,101681,101684,101686],{"class":39,"line":288},[37,101678,32285],{"class":54},[37,101680,2330],{"class":2320},[37,101682,101683],{"class":50},"() -> ",[37,101685,95971],{"class":61},[37,101687,4089],{"class":50},[37,101689,101690,101693,101695,101698,101700],{"class":39,"line":294},[37,101691,101692],{"class":50},"    model ",[37,101694,55],{"class":54},[37,101696,101697],{"class":50}," mujoco.MjModel.from_xml_string(",[37,101699,101599],{"class":61},[37,101701,280],{"class":50},[37,101703,101704,101707,101709],{"class":39,"line":300},[37,101705,101706],{"class":50},"    data ",[37,101708,55],{"class":54},[37,101710,101711],{"class":50}," mujoco.MjData(model)\n",[37,101713,101714],{"class":39,"line":306},[37,101715,2757],{"emptyLinePlaceholder":454},[37,101717,101718,101720,101722,101725],{"class":39,"line":312},[37,101719,31638],{"class":61},[37,101721,165],{"class":50},[37,101723,101724],{"class":185},"\"nq:\"",[37,101726,101727],{"class":50},", model.nq)\n",[37,101729,101730,101732,101734,101737],{"class":39,"line":317},[37,101731,31638],{"class":61},[37,101733,165],{"class":50},[37,101735,101736],{"class":185},"\"nv:\"",[37,101738,101739],{"class":50},", model.nv)\n",[37,101741,101742,101744,101746,101749],{"class":39,"line":323},[37,101743,31638],{"class":61},[37,101745,165],{"class":50},[37,101747,101748],{"class":185},"\"nu:\"",[37,101750,101751],{"class":50},", model.nu)\n",[37,101753,101754,101756,101758,101761],{"class":39,"line":337},[37,101755,31638],{"class":61},[37,101757,165],{"class":50},[37,101759,101760],{"class":185},"\"initial time:\"",[37,101762,101763],{"class":50},", data.time)\n",[37,101765,101766,101768,101770,101773],{"class":39,"line":342},[37,101767,31638],{"class":61},[37,101769,165],{"class":50},[37,101771,101772],{"class":185},"\"initial qpos:\"",[37,101774,101775],{"class":50},", data.qpos.copy())\n",[37,101777,101778],{"class":39,"line":347},[37,101779,2757],{"emptyLinePlaceholder":454},[37,101781,101782,101784,101787,101789,101791,101793,101795],{"class":39,"line":352},[37,101783,3551],{"class":54},[37,101785,101786],{"class":50}," _ ",[37,101788,26385],{"class":54},[37,101790,32781],{"class":61},[37,101792,165],{"class":50},[37,101794,154],{"class":61},[37,101796,31125],{"class":50},[37,101798,101799],{"class":39,"line":357},[37,101800,101801],{"class":50},"        mujoco.mj_step(model, data)\n",[37,101803,101804],{"class":39,"line":362},[37,101805,2757],{"emptyLinePlaceholder":454},[37,101807,101808,101810,101812,101815],{"class":39,"line":367},[37,101809,31638],{"class":61},[37,101811,165],{"class":50},[37,101813,101814],{"class":185},"\"final time:\"",[37,101816,101763],{"class":50},[37,101818,101819,101821,101823,101826],{"class":39,"line":373},[37,101820,31638],{"class":61},[37,101822,165],{"class":50},[37,101824,101825],{"class":185},"\"final qpos:\"",[37,101827,101775],{"class":50},[37,101829,101830],{"class":39,"line":392},[37,101831,2757],{"emptyLinePlaceholder":454},[37,101833,101834],{"class":39,"line":398},[37,101835,2757],{"emptyLinePlaceholder":454},[37,101837,101838,101840,101842,101845,101848],{"class":39,"line":409},[37,101839,1907],{"class":54},[37,101841,31559],{"class":61},[37,101843,101844],{"class":54}," ==",[37,101846,101847],{"class":185}," \"__main__\"",[37,101849,4089],{"class":50},[37,101851,101852],{"class":39,"line":415},[37,101853,101854],{"class":50},"    main()\n",[498,101856,101857],{"id":101857},"代码逐段解释",[14,101859,101860],{},"导入库：",[27,101862,101864],{"className":29,"code":101863,"language":31,"meta":32,"style":32},"import mujoco\n",[34,101865,101866],{"__ignoreMap":32},[37,101867,101868,101870],{"class":39,"line":40},[37,101869,30732],{"class":54},[37,101871,101586],{"class":50},[14,101873,101874],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101876,101877],{},"定义 XML：",[27,101879,101881],{"className":29,"code":101880,"language":31,"meta":32,"style":32},"XML = \"\"\"\n...\n\"\"\"\n",[34,101882,101883,101891,101896],{"__ignoreMap":32},[37,101884,101885,101887,101889],{"class":39,"line":40},[37,101886,101599],{"class":61},[37,101888,13905],{"class":54},[37,101890,101604],{"class":185},[37,101892,101893],{"class":39,"line":47},[37,101894,101895],{"class":185},"...\n",[37,101897,101898],{"class":39,"line":104},[37,101899,95983],{"class":185},[14,101901,101902,101903,101906],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[34,101904,101905],{},"freejoint"," 的方块。",[14,101908,101909],{},"编译模型：",[27,101911,101913],{"className":29,"code":101912,"language":31,"meta":32,"style":32},"model = mujoco.MjModel.from_xml_string(XML)\n",[34,101914,101915],{"__ignoreMap":32},[37,101916,101917,101920,101922,101924,101926],{"class":39,"line":40},[37,101918,101919],{"class":50},"model ",[37,101921,55],{"class":54},[37,101923,101697],{"class":50},[37,101925,101599],{"class":61},[37,101927,280],{"class":50},[14,101929,101930],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101932,101933],{},"创建数据：",[27,101935,101937],{"className":29,"code":101936,"language":31,"meta":32,"style":32},"data = mujoco.MjData(model)\n",[34,101938,101939],{"__ignoreMap":32},[37,101940,101941,101944,101946],{"class":39,"line":40},[37,101942,101943],{"class":50},"data ",[37,101945,55],{"class":54},[37,101947,101711],{"class":50},[14,101949,101950,101952,101953,101955],{},[34,101951,33738],{}," 会保存仿真当前状态。刚创建时，时间是 ",[34,101954,135],{},"，方块还在初始位置。",[14,101957,101958],{},"推进仿真：",[27,101960,101962],{"className":29,"code":101961,"language":31,"meta":32,"style":32},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[34,101963,101964,101980],{"__ignoreMap":32},[37,101965,101966,101968,101970,101972,101974,101976,101978],{"class":39,"line":40},[37,101967,3375],{"class":54},[37,101969,101786],{"class":50},[37,101971,26385],{"class":54},[37,101973,32781],{"class":61},[37,101975,165],{"class":50},[37,101977,154],{"class":61},[37,101979,31125],{"class":50},[37,101981,101982],{"class":39,"line":47},[37,101983,101984],{"class":50},"    mujoco.mj_step(model, data)\n",[14,101986,101987,101988,101990],{},"每次 ",[34,101989,101500],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[498,101992,101993],{"id":101993},"代码逐行细讲",[14,101995,101996],{},"下面把完整代码按新手视角拆开讲。",[27,101998,101999],{"className":29,"code":101863,"language":31,"meta":32,"style":32},[34,102000,102001],{"__ignoreMap":32},[37,102002,102003,102005],{"class":39,"line":40},[37,102004,30732],{"class":54},[37,102006,101586],{"class":50},[14,102008,102009,102011,102012,735,102014,735,102016,28727],{},[34,102010,30732],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[34,102013,100960],{},[34,102015,100965],{},[34,102017,102018],{},"mujoco.mj_step",[27,102020,102021],{"className":29,"code":101880,"language":31,"meta":32,"style":32},[34,102022,102023,102031,102035],{"__ignoreMap":32},[37,102024,102025,102027,102029],{"class":39,"line":40},[37,102026,101599],{"class":61},[37,102028,13905],{"class":54},[37,102030,101604],{"class":185},[37,102032,102033],{"class":39,"line":47},[37,102034,101895],{"class":185},[37,102036,102037],{"class":39,"line":104},[37,102038,95983],{"class":185},[14,102040,102041,102043,102044,102047],{},[34,102042,101599],{}," 是一个变量名。右边的三引号 ",[34,102045,102046],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[27,102049,102050],{"className":53403,"code":101609,"language":53405,"meta":32,"style":32},[34,102051,102052],{"__ignoreMap":32},[37,102053,102054,102056,102058,102061,102063,102066],{"class":39,"line":40},[37,102055,1418],{"class":50},[37,102057,101306],{"class":51636},[37,102059,102060],{"class":2320}," model",[37,102062,55],{"class":50},[37,102064,102065],{"class":185},"\"first_sim\"",[37,102067,51643],{"class":50},[14,102069,102070,102071,102074,102075,28727],{},"这是 XML 的根标签。",[34,102072,102073],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[34,102076,102077],{},"first_sim",[27,102079,102080],{"className":53403,"code":101468,"language":53405,"meta":32,"style":32},[34,102081,102082],{"__ignoreMap":32},[37,102083,102084,102086,102088,102090,102092,102094,102096,102098,102100],{"class":39,"line":40},[37,102085,1418],{"class":50},[37,102087,69502],{"class":51636},[37,102089,101479],{"class":2320},[37,102091,55],{"class":50},[37,102093,101484],{"class":185},[37,102095,101487],{"class":2320},[37,102097,55],{"class":50},[37,102099,101492],{"class":185},[37,102101,101429],{"class":50},[14,102103,102104,102106,102107,102110,102111,102114],{},[34,102105,69502],{}," 用来设置仿真参数。",[34,102108,102109],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[34,102112,102113],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[27,102116,102118],{"className":53403,"code":102117,"language":53405,"meta":32,"style":32},"\u003Cworldbody>\n",[34,102119,102120],{"__ignoreMap":32},[37,102121,102122,102124,102127],{"class":39,"line":40},[37,102123,1418],{"class":50},[37,102125,102126],{"class":51636},"worldbody",[37,102128,51643],{"class":50},[14,102130,102131,102133],{},[34,102132,102126],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[27,102135,102137],{"className":53403,"code":102136,"language":53405,"meta":32,"style":32},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[34,102138,102139],{"__ignoreMap":32},[37,102140,102141,102143,102145,102147,102149,102152,102154,102156,102159,102161,102163,102166,102168,102170,102173],{"class":39,"line":40},[37,102142,1418],{"class":50},[37,102144,101405],{"class":51636},[37,102146,15261],{"class":2320},[37,102148,55],{"class":50},[37,102150,102151],{"class":185},"\"floor\"",[37,102153,54160],{"class":2320},[37,102155,55],{"class":50},[37,102157,102158],{"class":185},"\"plane\"",[37,102160,101421],{"class":2320},[37,102162,55],{"class":50},[37,102164,102165],{"class":185},"\"2 2 0.1\"",[37,102167,79102],{"class":2320},[37,102169,55],{"class":50},[37,102171,102172],{"class":185},"\"0.8 0.8 0.8 1\"",[37,102174,101429],{"class":50},[14,102176,102177,102178,102180,102181,102184,102185,102188,102189,102191],{},"这行创建地面。",[34,102179,101405],{}," 是几何体。",[34,102182,102183],{},"name=\"floor\""," 是名字。",[34,102186,102187],{},"type=\"plane\""," 表示平面。",[34,102190,55446],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[27,102193,102195],{"className":53403,"code":102194,"language":53405,"meta":32,"style":32},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[34,102196,102197],{"__ignoreMap":32},[37,102198,102199,102201,102203,102205,102207,102209,102211,102213,102215],{"class":39,"line":40},[37,102200,1418],{"class":50},[37,102202,52136],{"class":51636},[37,102204,15261],{"class":2320},[37,102206,55],{"class":50},[37,102208,53827],{"class":185},[37,102210,101391],{"class":2320},[37,102212,55],{"class":50},[37,102214,101396],{"class":185},[37,102216,51643],{"class":50},[14,102218,102219,102220,28727,102222,102225,102226,102228],{},"这行创建一个刚体，名字叫 ",[34,102221,54050],{},[34,102223,102224],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[34,102227,101454],{},"，也就是离地面 1 米高。",[27,102230,102232],{"className":53403,"code":102231,"language":53405,"meta":32,"style":32},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[34,102233,102234],{"__ignoreMap":32},[37,102235,102236,102238,102240,102242,102244,102247],{"class":39,"line":40},[37,102237,1418],{"class":50},[37,102239,101905],{"class":51636},[37,102241,15261],{"class":2320},[37,102243,55],{"class":50},[37,102245,102246],{"class":185},"\"box_free\"",[37,102248,101429],{"class":50},[14,102250,102251,102252,102254],{},"这行很重要。",[34,102253,101905],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[27,102256,102258],{"className":53403,"code":102257,"language":53405,"meta":32,"style":32},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[34,102259,102260],{"__ignoreMap":32},[37,102261,102262,102264,102266,102268,102270,102272,102274,102276,102278,102280,102282,102284,102287,102289,102291,102293,102295,102298],{"class":39,"line":40},[37,102263,1418],{"class":50},[37,102265,101405],{"class":51636},[37,102267,15261],{"class":2320},[37,102269,55],{"class":50},[37,102271,101412],{"class":185},[37,102273,54160],{"class":2320},[37,102275,55],{"class":50},[37,102277,53827],{"class":185},[37,102279,101421],{"class":2320},[37,102281,55],{"class":50},[37,102283,101426],{"class":185},[37,102285,102286],{"class":2320}," mass",[37,102288,55],{"class":50},[37,102290,4028],{"class":185},[37,102292,79102],{"class":2320},[37,102294,55],{"class":50},[37,102296,102297],{"class":185},"\"1 0 0 1\"",[37,102299,101429],{"class":50},[14,102301,102302,102303,102306,102307,102310,102311,102314,102315,102318],{},"这行给 box body 添加一个盒子形状。",[34,102304,102305],{},"type=\"box\""," 表示形状是盒子。",[34,102308,102309],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[34,102312,102313],{},"mass=\"1\""," 表示质量是 1。",[34,102316,102317],{},"rgba=\"1 0 0 1\""," 表示红色。",[27,102320,102322],{"className":29,"code":102321,"language":31,"meta":32,"style":32},"def main() -> None:\n",[34,102323,102324],{"__ignoreMap":32},[37,102325,102326,102328,102330,102332,102334],{"class":39,"line":40},[37,102327,32285],{"class":54},[37,102329,2330],{"class":2320},[37,102331,101683],{"class":50},[37,102333,95971],{"class":61},[37,102335,4089],{"class":50},[14,102337,102338,102340,102341,102344,102345,102348],{},[34,102339,32285],{}," 用来定义函数。这里定义了一个叫 ",[34,102342,102343],{},"main"," 的函数。",[34,102346,102347],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[27,102350,102351],{"className":29,"code":101912,"language":31,"meta":32,"style":32},[34,102352,102353],{"__ignoreMap":32},[37,102354,102355,102357,102359,102361,102363],{"class":39,"line":40},[37,102356,101919],{"class":50},[37,102358,55],{"class":54},[37,102360,101697],{"class":50},[37,102362,101599],{"class":61},[37,102364,280],{"class":50},[14,102366,102367,102368,102371],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[34,102369,102370],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[27,102373,102374],{"className":29,"code":101936,"language":31,"meta":32,"style":32},[34,102375,102376],{"__ignoreMap":32},[37,102377,102378,102380,102382],{"class":39,"line":40},[37,102379,101943],{"class":50},[37,102381,55],{"class":54},[37,102383,101711],{"class":50},[14,102385,102386,102387,102389,102390,102392],{},"这行创建仿真数据。",[34,102388,33738],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[34,102391,33738],{}," 都会变化。",[27,102394,102396],{"className":29,"code":102395,"language":31,"meta":32,"style":32},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[34,102397,102398,102408,102418],{"__ignoreMap":32},[37,102399,102400,102402,102404,102406],{"class":39,"line":40},[37,102401,30755],{"class":61},[37,102403,165],{"class":50},[37,102405,101724],{"class":185},[37,102407,101727],{"class":50},[37,102409,102410,102412,102414,102416],{"class":39,"line":47},[37,102411,30755],{"class":61},[37,102413,165],{"class":50},[37,102415,101736],{"class":185},[37,102417,101739],{"class":50},[37,102419,102420,102422,102424,102426],{"class":39,"line":104},[37,102421,30755],{"class":61},[37,102423,165],{"class":50},[37,102425,101748],{"class":185},[37,102427,101751],{"class":50},[14,102429,102430,102432,102433,102436,102437,102440,102441,102444,102445,102448],{},[34,102431,30755],{}," 用来输出信息。",[34,102434,102435],{},"model.nq"," 是位置变量数量，",[34,102438,102439],{},"model.nv"," 是速度变量数量，",[34,102442,102443],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[34,102446,102447],{},"nu"," 是 0。",[27,102450,102452],{"className":29,"code":102451,"language":31,"meta":32,"style":32},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[34,102453,102454,102464],{"__ignoreMap":32},[37,102455,102456,102458,102460,102462],{"class":39,"line":40},[37,102457,30755],{"class":61},[37,102459,165],{"class":50},[37,102461,101760],{"class":185},[37,102463,101763],{"class":50},[37,102465,102466,102468,102470,102472],{"class":39,"line":47},[37,102467,30755],{"class":61},[37,102469,165],{"class":50},[37,102471,101772],{"class":185},[37,102473,101775],{"class":50},[14,102475,102476,102477,102479,102480,102482,102483,102486],{},"这里打印初始时间和初始位置。",[34,102478,101352],{}," 一开始是 0。",[34,102481,101355],{}," 是位置数组。",[34,102484,102485],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[27,102488,102489],{"className":29,"code":101961,"language":31,"meta":32,"style":32},[34,102490,102491,102507],{"__ignoreMap":32},[37,102492,102493,102495,102497,102499,102501,102503,102505],{"class":39,"line":40},[37,102494,3375],{"class":54},[37,102496,101786],{"class":50},[37,102498,26385],{"class":54},[37,102500,32781],{"class":61},[37,102502,165],{"class":50},[37,102504,154],{"class":61},[37,102506,31125],{"class":50},[37,102508,102509],{"class":39,"line":47},[37,102510,101984],{"class":50},[14,102512,102513,102515,102516,102519,102520,102522,102523,102525],{},[34,102514,3375],{}," 是循环。",[34,102517,102518],{},"range(100)"," 表示循环 100 次。",[34,102521,1500],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[34,102524,101500],{},"，仿真就前进一步。",[27,102527,102529],{"className":29,"code":102528,"language":31,"meta":32,"style":32},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[34,102530,102531,102541],{"__ignoreMap":32},[37,102532,102533,102535,102537,102539],{"class":39,"line":40},[37,102534,30755],{"class":61},[37,102536,165],{"class":50},[37,102538,101814],{"class":185},[37,102540,101763],{"class":50},[37,102542,102543,102545,102547,102549],{"class":39,"line":47},[37,102544,30755],{"class":61},[37,102546,165],{"class":50},[37,102548,101825],{"class":185},[37,102550,101775],{"class":50},[14,102552,102553],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[27,102555,102557],{"className":29,"code":102556,"language":31,"meta":32,"style":32},"if __name__ == \"__main__\":\n    main()\n",[34,102558,102559,102571],{"__ignoreMap":32},[37,102560,102561,102563,102565,102567,102569],{"class":39,"line":40},[37,102562,1907],{"class":54},[37,102564,31559],{"class":61},[37,102566,101844],{"class":54},[37,102568,101847],{"class":185},[37,102570,4089],{"class":50},[37,102572,102573],{"class":39,"line":47},[37,102574,101854],{"class":50},[14,102576,102577,102578,102581,102582,28727],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[34,102579,102580],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[34,102583,102580],{},[14,102585,102586],{},"运行:",[27,102588,102590],{"className":24163,"code":102589,"language":24165,"meta":32,"style":32},"python ch1_first_sim.py\n",[34,102591,102592],{"__ignoreMap":32},[37,102593,102594,102596],{"class":39,"line":40},[37,102595,31],{"class":2320},[37,102597,101571],{"class":185},[469,102599,102601],{"id":102600},"_5运行结果说明","5.运行结果说明",[14,102603,102604],{},"你应该看到类似输出:",[27,102606,102609],{"className":102607,"code":102608,"language":5536,"meta":32},[5534],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[34,102610,102608],{"__ignoreMap":32},[14,102612,102613,102615,102616,102619,102620,28727],{},[34,102614,101905],{}," 有 7 个位置变量: ",[34,102617,102618],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[34,102621,102622],{},"vx vy vz wx wy wz",[14,102624,102625,102626,102629],{},"你还会看到 ",[34,102627,102628],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[469,102631,102633],{"id":102632},"_6验证步骤","6.验证步骤",[14,102635,102636],{},"确认版本:",[27,102638,102639],{"className":24163,"code":101224,"language":24165,"meta":32,"style":32},[34,102640,102641],{"__ignoreMap":32},[37,102642,102643,102645,102647],{"class":39,"line":40},[37,102644,31],{"class":2320},[37,102646,30700],{"class":61},[37,102648,101235],{"class":185},[14,102650,102651],{},"确认导入的是官方 bindings:",[27,102653,102655],{"className":24163,"code":102654,"language":24165,"meta":32,"style":32},"python -c \"import mujoco; print(mujoco)\"\n",[34,102656,102657],{"__ignoreMap":32},[37,102658,102659,102661,102663],{"class":39,"line":40},[37,102660,31],{"class":2320},[37,102662,30700],{"class":61},[37,102664,102665],{"class":185}," \"import mujoco; print(mujoco)\"\n",[14,102667,102668],{},"运行程序:",[27,102670,102671],{"className":24163,"code":102589,"language":24165,"meta":32,"style":32},[34,102672,102673],{"__ignoreMap":32},[37,102674,102675,102677],{"class":39,"line":40},[37,102676,31],{"class":2320},[37,102678,101571],{"class":185},[14,102680,102681,102682,102685,102686,28727],{},"检查 ",[34,102683,102684],{},"final time"," 是否约等于 ",[34,102687,102688],{},"1.0",[14,102690,102691],{},"再做几个小实验：",[481,102693,102694,102704,102712,102725],{},[484,102695,102696,102697,102699,102700,102703],{},"把 ",[34,102698,102224],{}," 改成 ",[34,102701,102702],{},"pos=\"0 0 2\"","，观察初始高度变化。",[484,102705,102696,102706,102699,102708,102711],{},[34,102707,102113],{},[34,102709,102710],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[484,102713,102696,102714,102699,102716,102719,102720,102722,102723,28727],{},[34,102715,102109],{},[34,102717,102718],{},"timestep=\"0.005\"","，观察 100 步后的 ",[34,102721,102684],{}," 是否变成约 ",[34,102724,35666],{},[484,102726,102727,102728,102731],{},"删除 ",[34,102729,102730],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102733,102734],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[469,102736,102738],{"id":102737},"_7常见错误与解决方案","7.常见错误与解决方案",[498,102740,102742],{"id":102741},"modulenotfounderror-no-module-named-mujoco",[34,102743,102744],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102746,102747],{},"解决:",[27,102749,102751],{"className":24163,"code":102750,"language":24165,"meta":32,"style":32},"pip install \"mujoco>=2.3\"\n",[34,102752,102753],{"__ignoreMap":32},[37,102754,102755,102757,102759],{"class":39,"line":40},[37,102756,24172],{"class":2320},[37,102758,24175],{"class":185},[37,102760,102761],{"class":185}," \"mujoco>=2.3\"\n",[498,102763,102765],{"id":102764},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102767,102768],{},"先安装系统依赖:",[27,102770,102772],{"className":24163,"code":102771,"language":24165,"meta":32,"style":32},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[34,102773,102774],{"__ignoreMap":32},[37,102775,102776,102778,102780,102782,102784,102787,102789,102792,102794,102797,102799],{"class":39,"line":40},[37,102777,24918],{"class":2320},[37,102779,26657],{"class":185},[37,102781,24175],{"class":185},[37,102783,26742],{"class":61},[37,102785,102786],{"class":185}," mesa-libGL",[37,102788,101099],{"class":185},[37,102790,102791],{"class":185}," glfw",[37,102793,101119],{"class":185},[37,102795,102796],{"class":185}," libX11",[37,102798,101132],{"class":185},[37,102800,102801],{"class":185}," libXrandr\n",[498,102803,102805],{"id":102804},"xml-解析失败","XML 解析失败",[14,102807,102808],{},"检查:",[481,102810,102811,102814,102817,102823],{},[484,102812,102813],{},"标签是否闭合",[484,102815,102816],{},"属性是否带引号",[484,102818,102819,102820],{},"根节点是否是 ",[34,102821,102822],{},"\u003Cmujoco>",[484,102824,102825,102827,102828,102831],{},[34,102826,52136],{}," 是否放在 ",[34,102829,102830],{},"\u003Cworldbody>"," 内部",[498,102833,102835,102837,102838],{"id":102834},"final-time-不是严格等于-10",[34,102836,102684],{}," 不是严格等于 ",[34,102839,102688],{},[14,102841,102842],{},"这通常不是错误。浮点数计算可能得到：",[27,102844,102847],{"className":102845,"code":102846,"language":5536,"meta":32},[5534],"1.0000000000000007\n",[34,102848,102846],{"__ignoreMap":32},[14,102850,102851,102852,102854],{},"只要接近 ",[34,102853,102688],{}," 就正常。",[498,102856,102857],{"id":102857},"方块没有掉下来",[14,102859,102860],{},"检查：",[481,102862,102863,102869,102875,102880],{},[484,102864,102865,102866],{},"方块 body 里是否有 ",[34,102867,102868],{},"\u003Cfreejoint\u002F>",[484,102870,102871,102872],{},"重力是否是 ",[34,102873,102874],{},"0 0 -9.81",[484,102876,102877,102878],{},"是否真的调用了 ",[34,102879,100970],{},[484,102881,102882,102883,102885,102886],{},"你看的是否是 ",[34,102884,102628],{},"，不是 ",[34,102887,102888],{},"initial qpos",[469,102890,102892],{"id":102891},"_8本章小结","8.本章小结",[14,102894,102895],{},"本章你已经完成了 MuJoCo 的最小闭环：",[27,102897,102900],{"className":102898,"code":102899,"language":5536,"meta":32},[5534],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[34,102901,102899],{"__ignoreMap":32},[14,102903,102904],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[446,102906,102907],{},"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":32,"searchDepth":47,"depth":47,"links":102909},[102910,102911,102912,102917,102921,102922,102923,102931],{"id":100931,"depth":47,"text":100932},{"id":101054,"depth":47,"text":101055},{"id":101329,"depth":47,"text":101330,"children":102913},[102914,102915,102916],{"id":101367,"depth":104,"text":101368},{"id":101461,"depth":104,"text":101462},{"id":101513,"depth":104,"text":101514},{"id":101537,"depth":47,"text":101538,"children":102918},[102919,102920],{"id":101857,"depth":104,"text":101857},{"id":101993,"depth":104,"text":101993},{"id":102600,"depth":47,"text":102601},{"id":102632,"depth":47,"text":102633},{"id":102737,"depth":47,"text":102738,"children":102924},[102925,102926,102927,102928,102930],{"id":102741,"depth":104,"text":102744},{"id":102764,"depth":104,"text":102765},{"id":102804,"depth":104,"text":102805},{"id":102834,"depth":104,"text":102929},"final time 不是严格等于 1.0",{"id":102857,"depth":104,"text":102857},{"id":102891,"depth":47,"text":102892},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100923,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102938,"title":102939,"body":102940,"description":32,"extension":452,"meta":104596,"navigation":454,"path":104597,"seo":104598,"stem":104599,"__hash__":104600},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102941,"toc":104572},[102942,102945,102947,102950,102953,102970,103065,103068,103074,103076,103078,103102,103105,103119,103122,103163,103165,103178,103180,103183,103231,103243,103246,103249,103255,103268,103335,103338,103357,103360,103363,103369,103371,103380,103383,103387,103396,103478,103487,103491,103497,103511,103521,103523,103853,103856,103868,103870,103881,103883,103886,103904,103907,103910,103928,103939,103942,103957,103967,103969,103990,104007,104027,104033,104073,104089,104105,104111,104114,104138,104154,104159,104189,104206,104231,104234,104249,104258,104273,104282,104297,104304,104306,104316,104329,104336,104339,104378,104385,104387,104439,104441,104447,104450,104457,104464,104467,104469,104487,104490,104493,104527,104539,104541,104544,104566,104569],[10,102943,102939],{"id":102944},"_2xml-与-mjcf-物理建模基础",[469,102946,100932],{"id":100931},[14,102948,102949],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102951,102952],{},"本章结束后，你应该能看懂一个简单模型里：",[481,102954,102955,102958,102961,102964,102967],{},[484,102956,102957],{},"地面在哪里。",[484,102959,102960],{},"物体初始位置在哪里。",[484,102962,102963],{},"几何体是什么形状。",[484,102965,102966],{},"哪些 body 可以自由运动。",[484,102968,102969],{},"如何用名字在 Python 里找到 XML 中的对象。",[661,102971,102972,102982],{},[664,102973,102974],{},[667,102975,102976,102979],{},[670,102977,102978],{"align":24077},"标签",[670,102980,102981],{"align":24077},"作用",[708,102983,102984,102993,103003,103012,103022,103032,103045,103055],{},[667,102985,102986,102990],{},[713,102987,102988],{"align":24077},[34,102989,102822],{},[713,102991,102992],{"align":24077},"根节点",[667,102994,102995,103000],{},[713,102996,102997],{"align":24077},[34,102998,102999],{},"\u003Coption>",[713,103001,103002],{"align":24077},"仿真参数",[667,103004,103005,103009],{},[713,103006,103007],{"align":24077},[34,103008,102830],{},[713,103010,103011],{"align":24077},"世界中的物体",[667,103013,103014,103019],{},[713,103015,103016],{"align":24077},[34,103017,103018],{},"\u003Cbody>",[713,103020,103021],{"align":24077},"刚体",[667,103023,103024,103029],{},[713,103025,103026],{"align":24077},[34,103027,103028],{},"\u003Cgeom>",[713,103030,103031],{"align":24077},"几何体、碰撞体、可视体",[667,103033,103034,103042],{},[713,103035,103036,25320,103039],{"align":24077},[34,103037,103038],{},"\u003Cjoint>",[34,103040,103041],{},"\u003Cfreejoint>",[713,103043,103044],{"align":24077},"关节",[667,103046,103047,103052],{},[713,103048,103049],{"align":24077},[34,103050,103051],{},"\u003Csite>",[713,103053,103054],{"align":24077},"标记点",[667,103056,103057,103062],{},[713,103058,103059],{"align":24077},[34,103060,103061],{},"\u003Cactuator>",[713,103063,103064],{"align":24077},"控制器",[14,103066,103067],{},"初学时可以先记住：",[27,103069,103072],{"className":103070,"code":103071,"language":5536,"meta":32},[5534],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[34,103073,103071],{"__ignoreMap":32},[469,103075,101055],{"id":101054},[14,103077,101058],{},[27,103079,103081],{"className":24163,"code":103080,"language":24165,"meta":32,"style":32},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[34,103082,103083],{"__ignoreMap":32},[37,103084,103085,103087,103089,103091,103093,103095,103097,103099],{"class":39,"line":40},[37,103086,24918],{"class":2320},[37,103088,26657],{"class":185},[37,103090,24175],{"class":185},[37,103092,26742],{"class":61},[37,103094,102786],{"class":185},[37,103096,101099],{"class":185},[37,103098,102791],{"class":185},[37,103100,103101],{"class":185}," glfw-devel\n",[14,103103,103104],{},"pip:",[27,103106,103107],{"className":24163,"code":101204,"language":24165,"meta":32,"style":32},[34,103108,103109],{"__ignoreMap":32},[37,103110,103111,103113,103115,103117],{"class":39,"line":40},[37,103112,24172],{"class":2320},[37,103114,24175],{"class":185},[37,103116,101215],{"class":185},[37,103118,101218],{"class":185},[14,103120,103121],{},"conda:",[27,103123,103125],{"className":24163,"code":103124,"language":24165,"meta":32,"style":32},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[34,103126,103127,103144,103153],{"__ignoreMap":32},[37,103128,103129,103131,103133,103135,103138,103140,103142],{"class":39,"line":40},[37,103130,30672],{"class":2320},[37,103132,29518],{"class":185},[37,103134,25457],{"class":61},[37,103136,103137],{"class":185}," mujoco-xml",[37,103139,101260],{"class":185},[37,103141,101263],{"class":61},[37,103143,101266],{"class":61},[37,103145,103146,103148,103150],{"class":39,"line":47},[37,103147,30672],{"class":2320},[37,103149,101273],{"class":185},[37,103151,103152],{"class":185}," mujoco-xml\n",[37,103154,103155,103157,103159,103161],{"class":39,"line":104},[37,103156,24172],{"class":2320},[37,103158,24175],{"class":185},[37,103160,101215],{"class":185},[37,103162,101218],{"class":185},[14,103164,101289],{},[481,103166,103167,103170,103175],{},[484,103168,103169],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[484,103171,103172,103173,28727],{},"本章使用基础标签，适用于 ",[34,103174,101312],{},[484,103176,103177],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[469,103179,101330],{"id":101329},[14,103181,103182],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[27,103184,103186],{"className":53403,"code":103185,"language":53405,"meta":32,"style":32},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[34,103187,103188,103202,103210,103215,103223],{"__ignoreMap":32},[37,103189,103190,103192,103194,103196,103198,103200],{"class":39,"line":40},[37,103191,1418],{"class":50},[37,103193,101306],{"class":51636},[37,103195,102060],{"class":2320},[37,103197,55],{"class":50},[37,103199,63015],{"class":185},[37,103201,51643],{"class":50},[37,103203,103204,103206,103208],{"class":39,"line":47},[37,103205,52480],{"class":50},[37,103207,102126],{"class":51636},[37,103209,51643],{"class":50},[37,103211,103212],{"class":39,"line":104},[37,103213,103214],{"class":50},"    ...\n",[37,103216,103217,103219,103221],{"class":39,"line":113},[37,103218,52753],{"class":50},[37,103220,102126],{"class":51636},[37,103222,51643],{"class":50},[37,103224,103225,103227,103229],{"class":39,"line":189},[37,103226,52121],{"class":50},[37,103228,101306],{"class":51636},[37,103230,51643],{"class":50},[14,103232,103233,103235,103236,103238,103239,103242],{},[34,103234,52136],{}," 表示刚体。",[34,103237,101405],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[34,103240,103241],{},"joint"," 表示刚体相对父刚体如何运动。",[498,103244,103245],{"id":103245},"层级结构非常重要",[14,103247,103248],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[27,103250,103253],{"className":103251,"code":103252,"language":5536,"meta":32},[5534],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[34,103254,103252],{"__ignoreMap":32},[14,103256,103257,101303,103260,103263,103264,103267],{},[34,103258,103259],{},"red_box_geom",[34,103261,103262],{},"box_center"," 都属于 ",[34,103265,103266],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[27,103269,103271],{"className":53403,"code":103270,"language":53405,"meta":32,"style":32},"\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",[34,103272,103273,103293,103307,103327],{"__ignoreMap":32},[37,103274,103275,103277,103279,103281,103283,103285,103287,103289,103291],{"class":39,"line":40},[37,103276,1418],{"class":50},[37,103278,52136],{"class":51636},[37,103280,15261],{"class":2320},[37,103282,55],{"class":50},[37,103284,53827],{"class":185},[37,103286,101391],{"class":2320},[37,103288,55],{"class":50},[37,103290,101396],{"class":185},[37,103292,51643],{"class":50},[37,103294,103295,103297,103299,103301,103303,103305],{"class":39,"line":47},[37,103296,52480],{"class":50},[37,103298,101905],{"class":51636},[37,103300,15261],{"class":2320},[37,103302,55],{"class":50},[37,103304,102246],{"class":185},[37,103306,101429],{"class":50},[37,103308,103309,103311,103313,103315,103317,103319,103321,103323,103325],{"class":39,"line":104},[37,103310,52480],{"class":50},[37,103312,101405],{"class":51636},[37,103314,54160],{"class":2320},[37,103316,55],{"class":50},[37,103318,53827],{"class":185},[37,103320,101421],{"class":2320},[37,103322,55],{"class":50},[37,103324,101426],{"class":185},[37,103326,101429],{"class":50},[37,103328,103329,103331,103333],{"class":39,"line":113},[37,103330,52121],{"class":50},[37,103332,52136],{"class":51636},[37,103334,51643],{"class":50},[14,103336,103337],{},"含义:",[481,103339,103340,103346,103351,103354],{},[484,103341,103342,103343,103345],{},"创建名为 ",[34,103344,54050],{}," 的刚体",[484,103347,103348,103349],{},"初始位置在世界坐标 ",[34,103350,101454],{},[484,103352,103353],{},"它有一个自由关节",[484,103355,103356],{},"它有一个盒子几何体",[498,103358,103359],{"id":103359},"坐标怎么理解",[14,103361,103362],{},"MuJoCo 默认使用三维坐标：",[27,103364,103367],{"className":103365,"code":103366,"language":5536,"meta":32},[5534],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[34,103368,103366],{"__ignoreMap":32},[14,103370,14974],{},[27,103372,103374],{"className":53403,"code":103373,"language":53405,"meta":32,"style":32},"pos=\"0 0 1\"\n",[34,103375,103376],{"__ignoreMap":32},[37,103377,103378],{"class":39,"line":40},[37,103379,103373],{"class":50},[14,103381,103382],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[498,103384,103386],{"id":103385},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103388,103389,103390,82865,103393,103395],{},"不同 ",[34,103391,103392],{},"type",[34,103394,160],{}," 含义不同：",[661,103397,103398,103413],{},[664,103399,103400],{},[667,103401,103402,103406,103411],{},[670,103403,103404],{"align":24077},[34,103405,103392],{},[670,103407,103408,103410],{"align":24077},[34,103409,160],{}," 示例",[670,103412,100985],{"align":24077},[708,103414,103415,103429,103444,103463],{},[667,103416,103417,103421,103426],{},[713,103418,103419],{"align":24077},[34,103420,54050],{},[713,103422,103423],{"align":24077},[34,103424,103425],{},"size=\"0.1 0.2 0.3\"",[713,103427,103428],{"align":24077},"x\u002Fy\u002Fz 半边长，不是完整长度",[667,103430,103431,103436,103441],{},[713,103432,103433],{"align":24077},[34,103434,103435],{},"sphere",[713,103437,103438],{"align":24077},[34,103439,103440],{},"size=\"0.1\"",[713,103442,103443],{"align":24077},"球半径",[667,103445,103446,103451,103456],{},[713,103447,103448],{"align":24077},[34,103449,103450],{},"capsule",[713,103452,103453],{"align":24077},[34,103454,103455],{},"size=\"0.03\"",[713,103457,103458,103459,103462],{"align":24077},"胶囊半径，长度常用 ",[34,103460,103461],{},"fromto"," 指定",[667,103464,103465,103470,103475],{},[713,103466,103467],{"align":24077},[34,103468,103469],{},"plane",[713,103471,103472],{"align":24077},[34,103473,103474],{},"size=\"3 3 0.1\"",[713,103476,103477],{"align":24077},"可视平面大小，通常当地面",[14,103479,103480,103481,103483,103484,103486],{},"最容易踩坑的是 box：",[34,103482,102309],{}," 表示边长大约是 ",[34,103485,32375],{},"，因为 MuJoCo 用的是半边长。",[498,103488,103490],{"id":103489},"site-是什么","site 是什么",[14,103492,103493,103496],{},[34,103494,103495],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[481,103498,103499,103502,103505,103508],{},[484,103500,103501],{},"标记机械臂末端。",[484,103503,103504],{},"标记目标位置。",[484,103506,103507],{},"放传感器或相机参考点。",[484,103509,103510],{},"在 Python 中读取某个关键点的世界坐标。",[14,103512,103513,103514,101303,103517,103520],{},"在后面的 Reacher 任务中，",[34,103515,103516],{},"tip",[34,103518,103519],{},"target"," 就会用 site 表示。",[469,103522,101538],{"id":101537},[27,103524,103526],{"className":29,"code":103525,"language":31,"meta":32,"style":32},"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",[34,103527,103528,103534,103544,103548,103552,103560,103565,103569,103573,103577,103582,103586,103591,103596,103601,103606,103610,103614,103618,103622,103626,103630,103642,103654,103662,103666,103681,103696,103700,103713,103728,103741,103754,103758,103774,103778,103782,103793,103805,103817,103829,103833,103837,103849],{"__ignoreMap":32},[37,103529,103530,103532],{"class":39,"line":40},[37,103531,30732],{"class":54},[37,103533,101586],{"class":50},[37,103535,103536,103538,103540,103542],{"class":39,"line":47},[37,103537,30732],{"class":54},[37,103539,31719],{"class":50},[37,103541,31722],{"class":54},[37,103543,31725],{"class":50},[37,103545,103546],{"class":39,"line":104},[37,103547,2757],{"emptyLinePlaceholder":454},[37,103549,103550],{"class":39,"line":113},[37,103551,2757],{"emptyLinePlaceholder":454},[37,103553,103554,103556,103558],{"class":39,"line":189},[37,103555,101599],{"class":61},[37,103557,13905],{"class":54},[37,103559,101604],{"class":185},[37,103561,103562],{"class":39,"line":195},[37,103563,103564],{"class":185},"\u003Cmujoco model=\"xml_basic\">\n",[37,103566,103567],{"class":39,"line":201},[37,103568,101614],{"class":185},[37,103570,103571],{"class":39,"line":207},[37,103572,2757],{"emptyLinePlaceholder":454},[37,103574,103575],{"class":39,"line":213},[37,103576,101623],{"class":185},[37,103578,103579],{"class":39,"line":218},[37,103580,103581],{"class":185},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[37,103583,103584],{"class":39,"line":227},[37,103585,2757],{"emptyLinePlaceholder":454},[37,103587,103588],{"class":39,"line":232},[37,103589,103590],{"class":185},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[37,103592,103593],{"class":39,"line":238},[37,103594,103595],{"class":185},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[37,103597,103598],{"class":39,"line":244},[37,103599,103600],{"class":185},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[37,103602,103603],{"class":39,"line":250},[37,103604,103605],{"class":185},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[37,103607,103608],{"class":39,"line":256},[37,103609,101652],{"class":185},[37,103611,103612],{"class":39,"line":261},[37,103613,101657],{"class":185},[37,103615,103616],{"class":39,"line":267},[37,103617,101662],{"class":185},[37,103619,103620],{"class":39,"line":283},[37,103621,95983],{"class":185},[37,103623,103624],{"class":39,"line":288},[37,103625,2757],{"emptyLinePlaceholder":454},[37,103627,103628],{"class":39,"line":294},[37,103629,2757],{"emptyLinePlaceholder":454},[37,103631,103632,103634,103636,103638,103640],{"class":39,"line":300},[37,103633,32285],{"class":54},[37,103635,2330],{"class":2320},[37,103637,101683],{"class":50},[37,103639,95971],{"class":61},[37,103641,4089],{"class":50},[37,103643,103644,103646,103648,103650,103652],{"class":39,"line":306},[37,103645,101692],{"class":50},[37,103647,55],{"class":54},[37,103649,101697],{"class":50},[37,103651,101599],{"class":61},[37,103653,280],{"class":50},[37,103655,103656,103658,103660],{"class":39,"line":312},[37,103657,101706],{"class":50},[37,103659,55],{"class":54},[37,103661,101711],{"class":50},[37,103663,103664],{"class":39,"line":317},[37,103665,2757],{"emptyLinePlaceholder":454},[37,103667,103668,103671,103673,103676,103679],{"class":39,"line":323},[37,103669,103670],{"class":50},"    box_body_id ",[37,103672,55],{"class":54},[37,103674,103675],{"class":50}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[37,103677,103678],{"class":185},"\"red_box\"",[37,103680,280],{"class":50},[37,103682,103683,103686,103688,103691,103694],{"class":39,"line":337},[37,103684,103685],{"class":50},"    site_id ",[37,103687,55],{"class":54},[37,103689,103690],{"class":50}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[37,103692,103693],{"class":185},"\"box_center\"",[37,103695,280],{"class":50},[37,103697,103698],{"class":39,"line":342},[37,103699,2757],{"emptyLinePlaceholder":454},[37,103701,103702,103704,103707,103709,103711],{"class":39,"line":347},[37,103703,3451],{"class":54},[37,103705,103706],{"class":50}," box_body_id ",[37,103708,1418],{"class":54},[37,103710,4443],{"class":61},[37,103712,4089],{"class":50},[37,103714,103715,103718,103721,103723,103726],{"class":39,"line":352},[37,103716,103717],{"class":54},"        raise",[37,103719,103720],{"class":61}," RuntimeError",[37,103722,165],{"class":50},[37,103724,103725],{"class":185},"\"body red_box not found\"",[37,103727,280],{"class":50},[37,103729,103730,103732,103735,103737,103739],{"class":39,"line":357},[37,103731,3451],{"class":54},[37,103733,103734],{"class":50}," site_id ",[37,103736,1418],{"class":54},[37,103738,4443],{"class":61},[37,103740,4089],{"class":50},[37,103742,103743,103745,103747,103749,103752],{"class":39,"line":362},[37,103744,103717],{"class":54},[37,103746,103720],{"class":61},[37,103748,165],{"class":50},[37,103750,103751],{"class":185},"\"site box_center not found\"",[37,103753,280],{"class":50},[37,103755,103756],{"class":39,"line":367},[37,103757,2757],{"emptyLinePlaceholder":454},[37,103759,103760,103762,103764,103766,103768,103770,103772],{"class":39,"line":373},[37,103761,3551],{"class":54},[37,103763,101786],{"class":50},[37,103765,26385],{"class":54},[37,103767,32781],{"class":61},[37,103769,165],{"class":50},[37,103771,2087],{"class":61},[37,103773,31125],{"class":50},[37,103775,103776],{"class":39,"line":392},[37,103777,101801],{"class":50},[37,103779,103780],{"class":39,"line":398},[37,103781,2757],{"emptyLinePlaceholder":454},[37,103783,103784,103786,103788,103791],{"class":39,"line":409},[37,103785,31638],{"class":61},[37,103787,165],{"class":50},[37,103789,103790],{"class":185},"\"simulation time:\"",[37,103792,101763],{"class":50},[37,103794,103795,103797,103799,103802],{"class":39,"line":415},[37,103796,31638],{"class":61},[37,103798,165],{"class":50},[37,103800,103801],{"class":185},"\"box body position:\"",[37,103803,103804],{"class":50},", data.xpos[box_body_id].copy())\n",[37,103806,103807,103809,103811,103814],{"class":39,"line":420},[37,103808,31638],{"class":61},[37,103810,165],{"class":50},[37,103812,103813],{"class":185},"\"site position:\"",[37,103815,103816],{"class":50},", data.site_xpos[site_id].copy())\n",[37,103818,103819,103821,103823,103826],{"class":39,"line":425},[37,103820,31638],{"class":61},[37,103822,165],{"class":50},[37,103824,103825],{"class":185},"\"box qpos:\"",[37,103827,103828],{"class":50},", np.array(data.qpos))\n",[37,103830,103831],{"class":39,"line":431},[37,103832,2757],{"emptyLinePlaceholder":454},[37,103834,103835],{"class":39,"line":436},[37,103836,2757],{"emptyLinePlaceholder":454},[37,103838,103839,103841,103843,103845,103847],{"class":39,"line":442},[37,103840,1907],{"class":54},[37,103842,31559],{"class":61},[37,103844,101844],{"class":54},[37,103846,101847],{"class":185},[37,103848,4089],{"class":50},[37,103850,103851],{"class":39,"line":8374},[37,103852,101854],{"class":50},[14,103854,103855],{},"保存为：",[27,103857,103859],{"className":24163,"code":103858,"language":24165,"meta":32,"style":32},"touch ch2_xml_basic.py\n",[34,103860,103861],{"__ignoreMap":32},[37,103862,103863,103865],{"class":39,"line":40},[37,103864,101568],{"class":2320},[37,103866,103867],{"class":185}," ch2_xml_basic.py\n",[14,103869,102586],{},[27,103871,103873],{"className":24163,"code":103872,"language":24165,"meta":32,"style":32},"python ch2_xml_basic.py\n",[34,103874,103875],{"__ignoreMap":32},[37,103876,103877,103879],{"class":39,"line":40},[37,103878,31],{"class":2320},[37,103880,103867],{"class":185},[498,103882,101857],{"id":101857},[14,103884,103885],{},"用名字查找 body：",[27,103887,103889],{"className":29,"code":103888,"language":31,"meta":32,"style":32},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[34,103890,103891],{"__ignoreMap":32},[37,103892,103893,103896,103898,103900,103902],{"class":39,"line":40},[37,103894,103895],{"class":50},"box_body_id ",[37,103897,55],{"class":54},[37,103899,103675],{"class":50},[37,103901,103678],{"class":185},[37,103903,280],{"class":50},[14,103905,103906],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103908,103909],{},"用名字查找 site：",[27,103911,103913],{"className":29,"code":103912,"language":31,"meta":32,"style":32},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[34,103914,103915],{"__ignoreMap":32},[37,103916,103917,103920,103922,103924,103926],{"class":39,"line":40},[37,103918,103919],{"class":50},"site_id ",[37,103921,55],{"class":54},[37,103923,103690],{"class":50},[37,103925,103693],{"class":185},[37,103927,280],{"class":50},[14,103929,103930,103931,103934,103935,103938],{},"注意第二个参数是对象类型。查 body 就用 ",[34,103932,103933],{},"mjOBJ_BODY","，查 site 就用 ",[34,103936,103937],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103940,103941],{},"读取世界坐标：",[27,103943,103945],{"className":29,"code":103944,"language":31,"meta":32,"style":32},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[34,103946,103947,103952],{"__ignoreMap":32},[37,103948,103949],{"class":39,"line":40},[37,103950,103951],{"class":50},"data.xpos[box_body_id]\n",[37,103953,103954],{"class":39,"line":47},[37,103955,103956],{"class":50},"data.site_xpos[site_id]\n",[14,103958,103959,103962,103963,103966],{},[34,103960,103961],{},"xpos"," 是 body 的世界坐标，",[34,103964,103965],{},"site_xpos"," 是 site 的世界坐标。",[498,103968,101993],{"id":101993},[27,103970,103972],{"className":29,"code":103971,"language":31,"meta":32,"style":32},"import mujoco\nimport numpy as np\n",[34,103973,103974,103980],{"__ignoreMap":32},[37,103975,103976,103978],{"class":39,"line":40},[37,103977,30732],{"class":54},[37,103979,101586],{"class":50},[37,103981,103982,103984,103986,103988],{"class":39,"line":47},[37,103983,30732],{"class":54},[37,103985,31719],{"class":50},[37,103987,31722],{"class":54},[37,103989,31725],{"class":50},[14,103991,103992,103993,103996,103997,104000,104001,735,104004,28727],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[34,103994,103995],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[34,103998,103999],{},"as np"," 是习惯写法，后面就可以写 ",[34,104002,104003],{},"np.array(...)",[34,104005,104006],{},"np.round(...)",[27,104008,104009],{"className":29,"code":101880,"language":31,"meta":32,"style":32},[34,104010,104011,104019,104023],{"__ignoreMap":32},[37,104012,104013,104015,104017],{"class":39,"line":40},[37,104014,101599],{"class":61},[37,104016,13905],{"class":54},[37,104018,101604],{"class":185},[37,104020,104021],{"class":39,"line":47},[37,104022,101895],{"class":185},[37,104024,104025],{"class":39,"line":104},[37,104026,95983],{"class":185},[14,104028,104029,104030,28727],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[34,104031,104032],{},"mujoco.MjModel.from_xml_string(XML)",[27,104034,104036],{"className":53403,"code":104035,"language":53405,"meta":32,"style":32},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[34,104037,104038],{"__ignoreMap":32},[37,104039,104040,104042,104044,104046,104048,104050,104052,104054,104057,104059,104061,104064,104066,104068,104071],{"class":39,"line":40},[37,104041,1418],{"class":50},[37,104043,103495],{"class":51636},[37,104045,15261],{"class":2320},[37,104047,55],{"class":50},[37,104049,103693],{"class":185},[37,104051,101391],{"class":2320},[37,104053,55],{"class":50},[37,104055,104056],{"class":185},"\"0 0 0\"",[37,104058,101421],{"class":2320},[37,104060,55],{"class":50},[37,104062,104063],{"class":185},"\"0.03\"",[37,104065,79102],{"class":2320},[37,104067,55],{"class":50},[37,104069,104070],{"class":185},"\"0 1 0 1\"",[37,104072,101429],{"class":50},[14,104074,104075,104077,104078,104081,104082,104084,104085,104088],{},[34,104076,103495],{}," 是标记点。",[34,104079,104080],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[34,104083,103455],{}," 表示显示出来的小球大小。",[34,104086,104087],{},"rgba=\"0 1 0 1\""," 表示绿色。",[27,104090,104091],{"className":29,"code":103888,"language":31,"meta":32,"style":32},[34,104092,104093],{"__ignoreMap":32},[37,104094,104095,104097,104099,104101,104103],{"class":39,"line":40},[37,104096,103895],{"class":50},[37,104098,55],{"class":54},[37,104100,103675],{"class":50},[37,104102,103678],{"class":185},[37,104104,280],{"class":50},[14,104106,104107,104108,104110],{},"这行的作用是：根据名字 ",[34,104109,103678],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,104112,104113],{},"拆开看：",[481,104115,104116,104122,104127,104133],{},[484,104117,104118,104121],{},[34,104119,104120],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[484,104123,104124,104126],{},[34,104125,102370],{}," 是被查询的模型。",[484,104128,104129,104132],{},[34,104130,104131],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[484,104134,104135,104137],{},[34,104136,103678],{}," 是 XML 里写的名字。",[27,104139,104140],{"className":29,"code":103912,"language":31,"meta":32,"style":32},[34,104141,104142],{"__ignoreMap":32},[37,104143,104144,104146,104148,104150,104152],{"class":39,"line":40},[37,104145,103919],{"class":50},[37,104147,55],{"class":54},[37,104149,103690],{"class":50},[37,104151,103693],{"class":185},[37,104153,280],{"class":50},[14,104155,104156,104157,28727],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[34,104158,103693],{},[27,104160,104162],{"className":29,"code":104161,"language":31,"meta":32,"style":32},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[34,104163,104164,104176],{"__ignoreMap":32},[37,104165,104166,104168,104170,104172,104174],{"class":39,"line":40},[37,104167,1907],{"class":54},[37,104169,103706],{"class":50},[37,104171,1418],{"class":54},[37,104173,4443],{"class":61},[37,104175,4089],{"class":50},[37,104177,104178,104181,104183,104185,104187],{"class":39,"line":47},[37,104179,104180],{"class":54},"    raise",[37,104182,103720],{"class":61},[37,104184,165],{"class":50},[37,104186,103725],{"class":185},[37,104188,280],{"class":50},[14,104190,104191,104193,104194,104197,104198,104201,104202,104205],{},[34,104192,1907],{}," 是条件判断。",[34,104195,104196],{},"mj_name2id"," 找不到对象时会返回 ",[34,104199,104200],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[34,104203,104204],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[27,104207,104209],{"className":29,"code":104208,"language":31,"meta":32,"style":32},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[34,104210,104211,104227],{"__ignoreMap":32},[37,104212,104213,104215,104217,104219,104221,104223,104225],{"class":39,"line":40},[37,104214,3375],{"class":54},[37,104216,101786],{"class":50},[37,104218,26385],{"class":54},[37,104220,32781],{"class":61},[37,104222,165],{"class":50},[37,104224,2087],{"class":61},[37,104226,31125],{"class":50},[37,104228,104229],{"class":39,"line":47},[37,104230,101984],{"class":50},[14,104232,104233],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[27,104235,104237],{"className":29,"code":104236,"language":31,"meta":32,"style":32},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[34,104238,104239],{"__ignoreMap":32},[37,104240,104241,104243,104245,104247],{"class":39,"line":40},[37,104242,30755],{"class":61},[37,104244,165],{"class":50},[37,104246,103801],{"class":185},[37,104248,103804],{"class":50},[14,104250,104251,104253,104254,104257],{},[34,104252,101364],{}," 保存所有 body 的世界坐标。",[34,104255,104256],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[27,104259,104261],{"className":29,"code":104260,"language":31,"meta":32,"style":32},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[34,104262,104263],{"__ignoreMap":32},[37,104264,104265,104267,104269,104271],{"class":39,"line":40},[37,104266,30755],{"class":61},[37,104268,165],{"class":50},[37,104270,103813],{"class":185},[37,104272,103816],{"class":50},[14,104274,104275,104278,104279,104281],{},[34,104276,104277],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[34,104280,103262],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[27,104283,104285],{"className":29,"code":104284,"language":31,"meta":32,"style":32},"print(\"box qpos:\", np.array(data.qpos))\n",[34,104286,104287],{"__ignoreMap":32},[37,104288,104289,104291,104293,104295],{"class":39,"line":40},[37,104290,30755],{"class":61},[37,104292,165],{"class":50},[37,104294,103825],{"class":185},[37,104296,103828],{"class":50},[14,104298,104299,104300,104303],{},"这里打印广义位置数组。",[34,104301,104302],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[469,104305,102601],{"id":102600},[14,104307,104308,104309,104312,104313,28727],{},"程序会输出 ",[34,104310,104311],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[34,104314,104315],{},"qpos",[14,104317,104318,104320,104321,104324,104325,104328],{},[34,104319,104256],{}," 是 body 的世界坐标位置。",[34,104322,104323],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[34,104326,104327],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104330,82557,104331,82865,104333,104335],{},[34,104332,103262],{},[34,104334,104080],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104337,104338],{},"如果你把 site 改成：",[27,104340,104342],{"className":53403,"code":104341,"language":53405,"meta":32,"style":32},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[34,104343,104344],{"__ignoreMap":32},[37,104345,104346,104348,104350,104352,104354,104357,104359,104361,104364,104366,104368,104370,104372,104374,104376],{"class":39,"line":40},[37,104347,1418],{"class":50},[37,104349,103495],{"class":51636},[37,104351,15261],{"class":2320},[37,104353,55],{"class":50},[37,104355,104356],{"class":185},"\"box_top\"",[37,104358,101391],{"class":2320},[37,104360,55],{"class":50},[37,104362,104363],{"class":185},"\"0 0 0.15\"",[37,104365,101421],{"class":2320},[37,104367,55],{"class":50},[37,104369,104063],{"class":185},[37,104371,79102],{"class":2320},[37,104373,55],{"class":50},[37,104375,104070],{"class":185},[37,104377,101429],{"class":50},[14,104379,104380,104381,104384],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[34,104382,104383],{},"site position"," 就会比 body position 的 z 坐标更高。",[469,104386,102633],{"id":102632},[481,104388,104389,104398,104401,104408,104414,104425],{},[484,104390,102696,104391,104393,104394,102699,104396,28727],{},[34,104392,103266],{}," 的初始高度从 ",[34,104395,332],{},[34,104397,602],{},[484,104399,104400],{},"重新运行程序。",[484,104402,104403,104404,104407],{},"观察 ",[34,104405,104406],{},"box qpos"," 和最终位置是否变化。",[484,104409,104410,104411,104413],{},"故意把 ",[34,104412,103495],{}," 名称改错，确认程序能报错。",[484,104415,102696,104416,104418,104419,102699,104421,104424],{},[34,104417,101405],{}," 的颜色 ",[34,104420,102317],{},[34,104422,104423],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[484,104426,102696,104427,82865,104429,102699,104432,104435,104436,104438],{},[34,104428,103262],{},[34,104430,104431],{},"pos",[34,104433,104434],{},"0 0 0.2","，观察 ",[34,104437,104383],{}," 如何变化。",[469,104440,102738],{"id":102737},[498,104442,104444],{"id":104443},"xml-error-schema-violation",[34,104445,104446],{},"XML Error: Schema violation",[14,104448,104449],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[498,104451,104453,81625,104455],{"id":104452},"mj_name2id-返回-1",[34,104454,104196],{},[34,104456,104200],{},[14,104458,104459,104460,104463],{},"说明名字没有找到。检查 XML 中 ",[34,104461,104462],{},"name=\"...\"","，并确认对象类型正确。",[498,104465,104466],{"id":104466},"物体不下落",[14,104468,102808],{},[481,104470,104471,104476,104481],{},[484,104472,104473,104474],{},"body 是否有 ",[34,104475,101905],{},[484,104477,104478,104479],{},"gravity 是否为 ",[34,104480,102874],{},[484,104482,104483,104484,104486],{},"body 是否被固定在 ",[34,104485,102126],{}," 中",[498,104488,104489],{"id":104489},"坐标看起来不符合预期",[14,104491,104492],{},"先区分两种坐标：",[661,104494,104495,104504],{},[664,104496,104497],{},[667,104498,104499,104502],{},[670,104500,104501],{"align":24077},"坐标",[670,104503,100985],{"align":24077},[708,104505,104506,104516],{},[667,104507,104508,104513],{},[713,104509,104510,104511],{"align":24077},"XML 里的 ",[34,104512,104431],{},[713,104514,104515],{"align":24077},"相对父 body 的局部坐标",[667,104517,104518,104524],{},[713,104519,104520,25320,104522],{"align":24077},[34,104521,101364],{},[34,104523,104277],{},[713,104525,104526],{"align":24077},"仿真更新后的世界坐标",[14,104528,104529,104530,104532,104533,82874,104536,104538],{},"如果你修改了 ",[34,104531,101355],{},"，但还没调用 ",[34,104534,104535],{},"mj_forward",[34,104537,101500],{},"，世界坐标可能还没有更新。",[469,104540,102892],{"id":102891},[14,104542,104543],{},"MJCF 建模先掌握四件事：",[481,104545,104546,104551,104556,104561],{},[484,104547,104548,104550],{},[34,104549,52136],{}," 表示刚体层级。",[484,104552,104553,104555],{},[34,104554,101405],{}," 表示形状、碰撞和质量。",[484,104557,104558,104560],{},[34,104559,103241],{}," 决定 body 能不能动、怎么动。",[484,104562,104563,104565],{},[34,104564,103495],{}," 用来标记关键点，方便 Python 读取位置。",[14,104567,104568],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[446,104570,104571],{},"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":32,"searchDepth":47,"depth":47,"links":104573},[104574,104575,104576,104582,104586,104587,104588,104595],{"id":100931,"depth":47,"text":100932},{"id":101054,"depth":47,"text":101055},{"id":101329,"depth":47,"text":101330,"children":104577},[104578,104579,104580,104581],{"id":103245,"depth":104,"text":103245},{"id":103359,"depth":104,"text":103359},{"id":103385,"depth":104,"text":103386},{"id":103489,"depth":104,"text":103490},{"id":101537,"depth":47,"text":101538,"children":104583},[104584,104585],{"id":101857,"depth":104,"text":101857},{"id":101993,"depth":104,"text":101993},{"id":102600,"depth":47,"text":102601},{"id":102632,"depth":47,"text":102633},{"id":102737,"depth":47,"text":102738,"children":104589},[104590,104591,104593,104594],{"id":104443,"depth":104,"text":104446},{"id":104452,"depth":104,"text":104592},"mj_name2id 返回 -1",{"id":104466,"depth":104,"text":104466},{"id":104489,"depth":104,"text":104489},{"id":102891,"depth":47,"text":102892},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102939,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104602,"title":104603,"body":104604,"description":32,"extension":452,"meta":106099,"navigation":454,"path":106100,"seo":106101,"stem":106102,"__hash__":106103},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104605,"toc":106071},[104606,104609,104611,104614,104617,104655,104658,104664,104667,104669,104671,104698,104700,104714,104716,104757,104759,104783,104785,104788,104797,104806,104809,104818,104826,104835,104838,104848,104851,104903,104910,104916,104924,104972,104975,104994,104997,105005,105009,105018,105051,105053,105401,105403,105415,105417,105428,105430,105433,105454,105460,105463,105488,105498,105501,105509,105512,105515,105536,105547,105549,105569,105572,105593,105602,105621,105627,105652,105655,105669,105676,105700,105703,105711,105720,105736,105748,105756,105765,105767,105770,105794,105799,105802,105824,105826,105865,105867,105874,105876,105884,105887,105890,105902,105943,105950,105961,105968,105971,106020,106023,106026,106032,106034,106039,106065,106068],[10,104607,104603],{"id":104608},"_3python-控制接口读取状态与推进仿真",[469,104610,100932],{"id":100931},[14,104612,104613],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104615,104616],{},"你将学习:",[481,104618,104619,104624,104629,104633,104638,104649],{},[484,104620,104621],{},[34,104622,104623],{},"MjModel.from_xml_string",[484,104625,104626],{},[34,104627,104628],{},"MjData(model)",[484,104630,104631],{},[34,104632,101500],{},[484,104634,104635],{},[34,104636,104637],{},"mj_resetData",[484,104639,104640,104641,735,104643,735,104646],{},"读取 ",[34,104642,104315],{},[34,104644,104645],{},"qvel",[34,104647,104648],{},"ctrl",[484,104650,104651,104652],{},"使用 ",[34,104653,104654],{},"model.opt.timestep",[14,104656,104657],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[27,104659,104662],{"className":104660,"code":104661,"language":5536,"meta":32},[5534],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[34,104663,104661],{"__ignoreMap":32},[14,104665,104666],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[469,104668,101055],{"id":101054},[14,104670,101058],{},[27,104672,104674],{"className":24163,"code":104673,"language":24165,"meta":32,"style":32},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[34,104675,104676],{"__ignoreMap":32},[37,104677,104678,104680,104682,104684,104686,104689,104691,104693,104695],{"class":39,"line":40},[37,104679,24918],{"class":2320},[37,104681,26657],{"class":185},[37,104683,24175],{"class":185},[37,104685,26742],{"class":61},[37,104687,104688],{"class":185}," python3",[37,104690,101083],{"class":185},[37,104692,102786],{"class":185},[37,104694,101099],{"class":185},[37,104696,104697],{"class":185}," glfw\n",[14,104699,103104],{},[27,104701,104702],{"className":24163,"code":101204,"language":24165,"meta":32,"style":32},[34,104703,104704],{"__ignoreMap":32},[37,104705,104706,104708,104710,104712],{"class":39,"line":40},[37,104707,24172],{"class":2320},[37,104709,24175],{"class":185},[37,104711,101215],{"class":185},[37,104713,101218],{"class":185},[14,104715,103121],{},[27,104717,104719],{"className":24163,"code":104718,"language":24165,"meta":32,"style":32},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[34,104720,104721,104738,104747],{"__ignoreMap":32},[37,104722,104723,104725,104727,104729,104732,104734,104736],{"class":39,"line":40},[37,104724,30672],{"class":2320},[37,104726,29518],{"class":185},[37,104728,25457],{"class":61},[37,104730,104731],{"class":185}," mujoco-python-api",[37,104733,101260],{"class":185},[37,104735,101263],{"class":61},[37,104737,101266],{"class":61},[37,104739,104740,104742,104744],{"class":39,"line":47},[37,104741,30672],{"class":2320},[37,104743,101273],{"class":185},[37,104745,104746],{"class":185}," mujoco-python-api\n",[37,104748,104749,104751,104753,104755],{"class":39,"line":104},[37,104750,24172],{"class":2320},[37,104752,24175],{"class":185},[37,104754,101215],{"class":185},[37,104756,101218],{"class":185},[14,104758,101289],{},[481,104760,104761,104768,104777],{},[484,104762,104763,101303,104765,104767],{},[34,104764,100960],{},[34,104766,100965],{}," 是官方 Python bindings 的类名。",[484,104769,104770,104771,104774,104775,28727],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[34,104772,104773],{},"mjModel"," 在 Python 中是 ",[34,104776,100994],{},[484,104778,104779,104780,28727],{},"不要使用 ",[34,104781,104782],{},"sim = mujoco_py.MjSim(...)",[469,104784,101330],{"id":101329},[14,104786,104787],{},"仿真推进核心代码:",[27,104789,104791],{"className":29,"code":104790,"language":31,"meta":32,"style":32},"mujoco.mj_step(model, data)\n",[34,104792,104793],{"__ignoreMap":32},[37,104794,104795],{"class":39,"line":40},[37,104796,104790],{"class":50},[14,104798,104799,104800,735,104802,735,104804,28727],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[34,104801,101355],{},[34,104803,101358],{},[34,104805,101352],{},[14,104807,104808],{},"重置仿真:",[27,104810,104812],{"className":29,"code":104811,"language":31,"meta":32,"style":32},"mujoco.mj_resetData(model, data)\n",[34,104813,104814],{"__ignoreMap":32},[37,104815,104816],{"class":39,"line":40},[37,104817,104811],{"class":50},[14,104819,104820,104821,82874,104823,104825],{},"如果手动修改了 ",[34,104822,101355],{},[34,104824,101358],{},"，通常应调用:",[27,104827,104829],{"className":29,"code":104828,"language":31,"meta":32,"style":32},"mujoco.mj_forward(model, data)\n",[34,104830,104831],{"__ignoreMap":32},[37,104832,104833],{"class":39,"line":40},[37,104834,104828],{"class":50},[14,104836,104837],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[498,104839,104841,735,104843,735,104845,104847],{"id":104840},"qposqvelctrl-是什么",[34,104842,104315],{},[34,104844,104645],{},[34,104846,104648],{}," 是什么",[14,104849,104850],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[661,104852,104853,104865],{},[664,104854,104855],{},[667,104856,104857,104860,104862],{},[670,104858,104859],{"align":24077},"字段",[670,104861,100985],{"align":24077},[670,104863,104864],{"align":24077},"谁来修改",[708,104866,104867,104879,104891],{},[667,104868,104869,104873,104876],{},[713,104870,104871],{"align":24077},[34,104872,101355],{},[713,104874,104875],{"align":24077},"广义位置，例如小车位置、关节角、自由物体位置姿态",[713,104877,104878],{"align":24077},"MuJoCo 更新，也可以手动设置初始状态",[667,104880,104881,104885,104888],{},[713,104882,104883],{"align":24077},[34,104884,101358],{},[713,104886,104887],{"align":24077},"广义速度，例如小车速度、关节角速度",[713,104889,104890],{"align":24077},"MuJoCo 更新，也可以手动清零",[667,104892,104893,104897,104900],{},[713,104894,104895],{"align":24077},[34,104896,101361],{},[713,104898,104899],{"align":24077},"actuator 的控制输入",[713,104901,104902],{"align":24077},"主要由你的控制代码写入",[14,104904,9366,104905,101303,104907,104909],{},[34,104906,104315],{},[34,104908,104645],{}," 不一定同维。自由刚体就是典型例子：",[27,104911,104914],{"className":104912,"code":104913,"language":5536,"meta":32},[5534],"freejoint: qpos 7 维，qvel 6 维\n",[34,104915,104913],{"__ignoreMap":32},[498,104917,104919,101303,104921,104923],{"id":104918},"mj_step-和-mj_forward-的区别",[34,104920,101500],{},[34,104922,104535],{}," 的区别",[661,104925,104926,104939],{},[664,104927,104928],{},[667,104929,104930,104933,104936],{},[670,104931,104932],{"align":24077},"函数",[670,104934,104935],{"align":24077},"是否推进时间",[670,104937,104938],{"align":24077},"什么时候用",[708,104940,104941,104954],{},[667,104942,104943,104948,104951],{},[713,104944,104945],{"align":24077},[34,104946,104947],{},"mj_step(model, data)",[713,104949,104950],{"align":24077},"是",[713,104952,104953],{"align":24077},"正常仿真循环，每调用一次前进一步",[667,104955,104956,104961,104964],{},[713,104957,104958],{"align":24077},[34,104959,104960],{},"mj_forward(model, data)",[713,104962,104963],{"align":24077},"否",[713,104965,104966,104967,735,104969,104971],{"align":24077},"手动改了 ",[34,104968,104315],{},[34,104970,104645],{}," 后，刷新派生量",[14,104973,104974],{},"例如你写：",[27,104976,104978],{"className":29,"code":104977,"language":31,"meta":32,"style":32},"data.qpos[2] = 2.0\n",[34,104979,104980],{"__ignoreMap":32},[37,104981,104982,104985,104987,104989,104991],{"class":39,"line":40},[37,104983,104984],{"class":50},"data.qpos[",[37,104986,602],{"class":61},[37,104988,4793],{"class":50},[37,104990,55],{"class":54},[37,104992,104993],{"class":61}," 2.0\n",[14,104995,104996],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[27,104998,104999],{"className":29,"code":104828,"language":31,"meta":32,"style":32},[34,105000,105001],{"__ignoreMap":32},[37,105002,105003],{"class":39,"line":40},[37,105004,104828],{"class":50},[498,105006,105008],{"id":105007},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,105010,105011,105014,105015,105017],{},[34,105012,105013],{},"mujoco.mj_resetData(model, data)"," 会把 ",[34,105016,33738],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[27,105019,105021],{"className":29,"code":105020,"language":31,"meta":32,"style":32},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[34,105022,105023,105027,105037,105047],{"__ignoreMap":32},[37,105024,105025],{"class":39,"line":40},[37,105026,104811],{"class":50},[37,105028,105029,105032,105034],{"class":39,"line":47},[37,105030,105031],{"class":50},"data.qpos[:] ",[37,105033,55],{"class":54},[37,105035,105036],{"class":50}," random_qpos\n",[37,105038,105039,105042,105044],{"class":39,"line":104},[37,105040,105041],{"class":50},"data.qvel[:] ",[37,105043,55],{"class":54},[37,105045,105046],{"class":61}," 0.0\n",[37,105048,105049],{"class":39,"line":113},[37,105050,104828],{"class":50},[469,105052,101538],{"id":101537},[27,105054,105056],{"className":29,"code":105055,"language":31,"meta":32,"style":32},"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",[34,105057,105058,105064,105074,105078,105082,105090,105095,105099,105103,105107,105112,105116,105121,105126,105131,105135,105139,105143,105147,105151,105155,105174,105181,105193,105204,105220,105236,105240,105244,105256,105268,105276,105280,105291,105295,105311,105315,105319,105328,105332,105337,105346,105350,105363,105368,105377,105381,105385,105397],{"__ignoreMap":32},[37,105059,105060,105062],{"class":39,"line":40},[37,105061,30732],{"class":54},[37,105063,101586],{"class":50},[37,105065,105066,105068,105070,105072],{"class":39,"line":47},[37,105067,30732],{"class":54},[37,105069,31719],{"class":50},[37,105071,31722],{"class":54},[37,105073,31725],{"class":50},[37,105075,105076],{"class":39,"line":104},[37,105077,2757],{"emptyLinePlaceholder":454},[37,105079,105080],{"class":39,"line":113},[37,105081,2757],{"emptyLinePlaceholder":454},[37,105083,105084,105086,105088],{"class":39,"line":189},[37,105085,101599],{"class":61},[37,105087,13905],{"class":54},[37,105089,101604],{"class":185},[37,105091,105092],{"class":39,"line":195},[37,105093,105094],{"class":185},"\u003Cmujoco model=\"state_api\">\n",[37,105096,105097],{"class":39,"line":201},[37,105098,101614],{"class":185},[37,105100,105101],{"class":39,"line":207},[37,105102,2757],{"emptyLinePlaceholder":454},[37,105104,105105],{"class":39,"line":213},[37,105106,101623],{"class":185},[37,105108,105109],{"class":39,"line":218},[37,105110,105111],{"class":185},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[37,105113,105114],{"class":39,"line":227},[37,105115,2757],{"emptyLinePlaceholder":454},[37,105117,105118],{"class":39,"line":232},[37,105119,105120],{"class":185},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[37,105122,105123],{"class":39,"line":238},[37,105124,105125],{"class":185},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[37,105127,105128],{"class":39,"line":244},[37,105129,105130],{"class":185},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[37,105132,105133],{"class":39,"line":250},[37,105134,101652],{"class":185},[37,105136,105137],{"class":39,"line":256},[37,105138,101657],{"class":185},[37,105140,105141],{"class":39,"line":261},[37,105142,101662],{"class":185},[37,105144,105145],{"class":39,"line":267},[37,105146,95983],{"class":185},[37,105148,105149],{"class":39,"line":283},[37,105150,2757],{"emptyLinePlaceholder":454},[37,105152,105153],{"class":39,"line":288},[37,105154,2757],{"emptyLinePlaceholder":454},[37,105156,105157,105159,105162,105165,105167,105170,105172],{"class":39,"line":294},[37,105158,32285],{"class":54},[37,105160,105161],{"class":2320}," print_state",[37,105163,105164],{"class":50},"(prefix: ",[37,105166,1678],{"class":61},[37,105168,105169],{"class":50},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[37,105171,95971],{"class":61},[37,105173,4089],{"class":50},[37,105175,105176,105178],{"class":39,"line":300},[37,105177,31638],{"class":61},[37,105179,105180],{"class":50},"(prefix)\n",[37,105182,105183,105185,105187,105190],{"class":39,"line":306},[37,105184,31638],{"class":61},[37,105186,165],{"class":50},[37,105188,105189],{"class":185},"\"  timestep:\"",[37,105191,105192],{"class":50},", model.opt.timestep)\n",[37,105194,105195,105197,105199,105202],{"class":39,"line":312},[37,105196,31638],{"class":61},[37,105198,165],{"class":50},[37,105200,105201],{"class":185},"\"  time:\"",[37,105203,101763],{"class":50},[37,105205,105206,105208,105210,105213,105216,105218],{"class":39,"line":317},[37,105207,31638],{"class":61},[37,105209,165],{"class":50},[37,105211,105212],{"class":185},"\"  qpos:\"",[37,105214,105215],{"class":50},", np.round(data.qpos.copy(), ",[37,105217,168],{"class":61},[37,105219,175],{"class":50},[37,105221,105222,105224,105226,105229,105232,105234],{"class":39,"line":323},[37,105223,31638],{"class":61},[37,105225,165],{"class":50},[37,105227,105228],{"class":185},"\"  qvel:\"",[37,105230,105231],{"class":50},", np.round(data.qvel.copy(), ",[37,105233,168],{"class":61},[37,105235,175],{"class":50},[37,105237,105238],{"class":39,"line":337},[37,105239,2757],{"emptyLinePlaceholder":454},[37,105241,105242],{"class":39,"line":342},[37,105243,2757],{"emptyLinePlaceholder":454},[37,105245,105246,105248,105250,105252,105254],{"class":39,"line":347},[37,105247,32285],{"class":54},[37,105249,2330],{"class":2320},[37,105251,101683],{"class":50},[37,105253,95971],{"class":61},[37,105255,4089],{"class":50},[37,105257,105258,105260,105262,105264,105266],{"class":39,"line":352},[37,105259,101692],{"class":50},[37,105261,55],{"class":54},[37,105263,101697],{"class":50},[37,105265,101599],{"class":61},[37,105267,280],{"class":50},[37,105269,105270,105272,105274],{"class":39,"line":357},[37,105271,101706],{"class":50},[37,105273,55],{"class":54},[37,105275,101711],{"class":50},[37,105277,105278],{"class":39,"line":362},[37,105279,2757],{"emptyLinePlaceholder":454},[37,105281,105282,105285,105288],{"class":39,"line":367},[37,105283,105284],{"class":50},"    print_state(",[37,105286,105287],{"class":185},"\"initial\"",[37,105289,105290],{"class":50},", model, data)\n",[37,105292,105293],{"class":39,"line":373},[37,105294,2757],{"emptyLinePlaceholder":454},[37,105296,105297,105299,105301,105303,105305,105307,105309],{"class":39,"line":392},[37,105298,3551],{"class":54},[37,105300,101786],{"class":50},[37,105302,26385],{"class":54},[37,105304,32781],{"class":61},[37,105306,165],{"class":50},[37,105308,1166],{"class":61},[37,105310,31125],{"class":50},[37,105312,105313],{"class":39,"line":398},[37,105314,101801],{"class":50},[37,105316,105317],{"class":39,"line":409},[37,105318,2757],{"emptyLinePlaceholder":454},[37,105320,105321,105323,105326],{"class":39,"line":415},[37,105322,105284],{"class":50},[37,105324,105325],{"class":185},"\"after 50 steps\"",[37,105327,105290],{"class":50},[37,105329,105330],{"class":39,"line":420},[37,105331,2757],{"emptyLinePlaceholder":454},[37,105333,105334],{"class":39,"line":425},[37,105335,105336],{"class":50},"    mujoco.mj_resetData(model, data)\n",[37,105338,105339,105341,105344],{"class":39,"line":431},[37,105340,105284],{"class":50},[37,105342,105343],{"class":185},"\"after reset\"",[37,105345,105290],{"class":50},[37,105347,105348],{"class":39,"line":436},[37,105349,2757],{"emptyLinePlaceholder":454},[37,105351,105352,105355,105357,105359,105361],{"class":39,"line":442},[37,105353,105354],{"class":50},"    data.qpos[",[37,105356,602],{"class":61},[37,105358,4793],{"class":50},[37,105360,55],{"class":54},[37,105362,104993],{"class":61},[37,105364,105365],{"class":39,"line":8374},[37,105366,105367],{"class":50},"    mujoco.mj_forward(model, data)\n",[37,105369,105370,105372,105375],{"class":39,"line":8386},[37,105371,105284],{"class":50},[37,105373,105374],{"class":185},"\"after manual qpos edit\"",[37,105376,105290],{"class":50},[37,105378,105379],{"class":39,"line":8398},[37,105380,2757],{"emptyLinePlaceholder":454},[37,105382,105383],{"class":39,"line":10057},[37,105384,2757],{"emptyLinePlaceholder":454},[37,105386,105387,105389,105391,105393,105395],{"class":39,"line":10082},[37,105388,1907],{"class":54},[37,105390,31559],{"class":61},[37,105392,101844],{"class":54},[37,105394,101847],{"class":185},[37,105396,4089],{"class":50},[37,105398,105399],{"class":39,"line":10105},[37,105400,101854],{"class":50},[14,105402,103855],{},[27,105404,105406],{"className":24163,"code":105405,"language":24165,"meta":32,"style":32},"touch ch3_python_state.py\n",[34,105407,105408],{"__ignoreMap":32},[37,105409,105410,105412],{"class":39,"line":40},[37,105411,101568],{"class":2320},[37,105413,105414],{"class":185}," ch3_python_state.py\n",[14,105416,102586],{},[27,105418,105420],{"className":24163,"code":105419,"language":24165,"meta":32,"style":32},"python ch3_python_state.py\n",[34,105421,105422],{"__ignoreMap":32},[37,105423,105424,105426],{"class":39,"line":40},[37,105425,31],{"class":2320},[37,105427,105414],{"class":185},[498,105429,101857],{"id":101857},[14,105431,105432],{},"打印状态的函数：",[27,105434,105436],{"className":29,"code":105435,"language":31,"meta":32,"style":32},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[34,105437,105438],{"__ignoreMap":32},[37,105439,105440,105442,105444,105446,105448,105450,105452],{"class":39,"line":40},[37,105441,32285],{"class":54},[37,105443,105161],{"class":2320},[37,105445,105164],{"class":50},[37,105447,1678],{"class":61},[37,105449,105169],{"class":50},[37,105451,95971],{"class":61},[37,105453,4089],{"class":50},[14,105455,105456,105457,105459],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[34,105458,33738],{}," 里发生了什么。",[14,105461,105462],{},"推进 50 步：",[27,105464,105466],{"className":29,"code":105465,"language":31,"meta":32,"style":32},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[34,105467,105468,105484],{"__ignoreMap":32},[37,105469,105470,105472,105474,105476,105478,105480,105482],{"class":39,"line":40},[37,105471,3375],{"class":54},[37,105473,101786],{"class":50},[37,105475,26385],{"class":54},[37,105477,32781],{"class":61},[37,105479,165],{"class":50},[37,105481,1166],{"class":61},[37,105483,31125],{"class":50},[37,105485,105486],{"class":39,"line":47},[37,105487,101984],{"class":50},[14,105489,105490,105491,105494,105495,105497],{},"由于 ",[34,105492,105493],{},"timestep=0.01","，所以 50 步后时间约为 ",[34,105496,35666],{}," 秒。",[14,105499,105500],{},"重置：",[27,105502,105503],{"className":29,"code":104811,"language":31,"meta":32,"style":32},[34,105504,105505],{"__ignoreMap":32},[37,105506,105507],{"class":39,"line":40},[37,105508,104811],{"class":50},[14,105510,105511],{},"这会把时间、位置、速度恢复到初始状态。",[14,105513,105514],{},"手动改高度：",[27,105516,105518],{"className":29,"code":105517,"language":31,"meta":32,"style":32},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[34,105519,105520,105532],{"__ignoreMap":32},[37,105521,105522,105524,105526,105528,105530],{"class":39,"line":40},[37,105523,104984],{"class":50},[37,105525,602],{"class":61},[37,105527,4793],{"class":50},[37,105529,55],{"class":54},[37,105531,104993],{"class":61},[37,105533,105534],{"class":39,"line":47},[37,105535,104828],{"class":50},[14,105537,105538,105539,105542,105543,105546],{},"这个例子里 ",[34,105540,105541],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[34,105544,105545],{},"2.0"," 表示把小球放到更高的位置。",[498,105548,101993],{"id":101993},[27,105550,105551],{"className":29,"code":105435,"language":31,"meta":32,"style":32},[34,105552,105553],{"__ignoreMap":32},[37,105554,105555,105557,105559,105561,105563,105565,105567],{"class":39,"line":40},[37,105556,32285],{"class":54},[37,105558,105161],{"class":2320},[37,105560,105164],{"class":50},[37,105562,1678],{"class":61},[37,105564,105169],{"class":50},[37,105566,95971],{"class":61},[37,105568,4089],{"class":50},[14,105570,105571],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[481,105573,105574,105583,105588],{},[484,105575,105576,105579,105580,105582],{},[34,105577,105578],{},"prefix","：一段文字，比如 ",[34,105581,105287],{},"，用来说明现在打印的是哪个阶段。",[484,105584,105585,105587],{},[34,105586,102370],{},"：MuJoCo 模型。",[484,105589,105590,105592],{},[34,105591,33738],{},"：MuJoCo 当前状态。",[14,105594,105595,735,105598,105601],{},[34,105596,105597],{},"prefix: str",[34,105599,105600],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[27,105603,105605],{"className":29,"code":105604,"language":31,"meta":32,"style":32},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[34,105606,105607],{"__ignoreMap":32},[37,105608,105609,105611,105613,105615,105617,105619],{"class":39,"line":40},[37,105610,30755],{"class":61},[37,105612,165],{"class":50},[37,105614,105212],{"class":185},[37,105616,105215],{"class":50},[37,105618,168],{"class":61},[37,105620,175],{"class":50},[14,105622,105623,105626],{},[34,105624,105625],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[27,105628,105630],{"className":29,"code":105629,"language":31,"meta":32,"style":32},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[34,105631,105632,105644],{"__ignoreMap":32},[37,105633,105634,105636,105638,105640,105642],{"class":39,"line":40},[37,105635,101919],{"class":50},[37,105637,55],{"class":54},[37,105639,101697],{"class":50},[37,105641,101599],{"class":61},[37,105643,280],{"class":50},[37,105645,105646,105648,105650],{"class":39,"line":47},[37,105647,101943],{"class":50},[37,105649,55],{"class":54},[37,105651,101711],{"class":50},[14,105653,105654],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[27,105656,105658],{"className":29,"code":105657,"language":31,"meta":32,"style":32},"print_state(\"initial\", model, data)\n",[34,105659,105660],{"__ignoreMap":32},[37,105661,105662,105665,105667],{"class":39,"line":40},[37,105663,105664],{"class":50},"print_state(",[37,105666,105287],{"class":185},[37,105668,105290],{"class":50},[14,105670,105671,105672,105675],{},"调用刚才定义的 ",[34,105673,105674],{},"print_state"," 函数，打印初始状态。",[27,105677,105678],{"className":29,"code":105465,"language":31,"meta":32,"style":32},[34,105679,105680,105696],{"__ignoreMap":32},[37,105681,105682,105684,105686,105688,105690,105692,105694],{"class":39,"line":40},[37,105683,3375],{"class":54},[37,105685,101786],{"class":50},[37,105687,26385],{"class":54},[37,105689,32781],{"class":61},[37,105691,165],{"class":50},[37,105693,1166],{"class":61},[37,105695,31125],{"class":50},[37,105697,105698],{"class":39,"line":47},[37,105699,101984],{"class":50},[14,105701,105702],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[27,105704,105705],{"className":29,"code":104811,"language":31,"meta":32,"style":32},[34,105706,105707],{"__ignoreMap":32},[37,105708,105709],{"class":39,"line":40},[37,105710,104811],{"class":50},[14,105712,105713,105714,105716,105717,105719],{},"重置 ",[34,105715,33738],{},"。注意它不会重新创建 ",[34,105718,102370],{},"，因为模型结构没有变，只是状态回到初始值。",[27,105721,105722],{"className":29,"code":104977,"language":31,"meta":32,"style":32},[34,105723,105724],{"__ignoreMap":32},[37,105725,105726,105728,105730,105732,105734],{"class":39,"line":40},[37,105727,104984],{"class":50},[37,105729,602],{"class":61},[37,105731,4793],{"class":50},[37,105733,55],{"class":54},[37,105735,104993],{"class":61},[14,105737,105738,105739,735,105742,735,105745,105747],{},"这行是“手动改状态”。在 freejoint 中，",[34,105740,105741],{},"qpos[0]",[34,105743,105744],{},"qpos[1]",[34,105746,105541],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[27,105749,105750],{"className":29,"code":104828,"language":31,"meta":32,"style":32},[34,105751,105752],{"__ignoreMap":32},[37,105753,105754],{"class":39,"line":40},[37,105755,104828],{"class":50},[14,105757,105758,105759,105761,105762,105764],{},"手动改完 ",[34,105760,104315],{}," 后，调用 ",[34,105763,104535],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[469,105766,102601],{"id":102600},[14,105768,105769],{},"你会看到:",[481,105771,105772,105777,105782,105785],{},[484,105773,105774,105775],{},"初始时间为 ",[34,105776,135],{},[484,105778,105779,105780],{},"50 步后时间约为 ",[34,105781,35666],{},[484,105783,105784],{},"reset 后状态恢复",[484,105786,105787,105788,105791,105792],{},"手动修改 ",[34,105789,105790],{},"data.qpos[2]"," 后，小球高度变为 ",[34,105793,105545],{},[14,105795,105796,105798],{},[34,105797,105541],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105800,105801],{},"输出里可以重点看三件事：",[481,105803,105804,105812,105817],{},[484,105805,105806,105808,105809,105811],{},[34,105807,2744],{}," 是否随着 ",[34,105810,101500],{}," 增加。",[484,105813,105814,105816],{},[34,105815,104315],{}," 的 z 坐标是否因为下落而变化。",[484,105818,105819,105821,105822,28727],{},[34,105820,104637],{}," 后时间是否回到 ",[34,105823,135],{},[469,105825,102633],{"id":102632},[481,105827,105828,105834,105840,105846,105849,105858],{},[484,105829,105830,105831,28727],{},"修改 timestep 为 ",[34,105832,105833],{},"0.005",[484,105835,105836,105837,28727],{},"重新运行，检查 50 步后时间是否约为 ",[34,105838,105839],{},"0.25",[484,105841,105842,105843,28727],{},"修改重力为 ",[34,105844,105845],{},"0 0 -1.0",[484,105847,105848],{},"观察小球下降速度是否变慢。",[484,105850,102696,105851,102699,105854,105857],{},[34,105852,105853],{},"data.qpos[2] = 2.0",[34,105855,105856],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[484,105859,105860,105861,105864],{},"注释掉 ",[34,105862,105863],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[469,105866,102738],{"id":102737},[498,105868,105870,105871,105873],{"id":105869},"修改-dataqpos-后位置没有更新","修改 ",[34,105872,101355],{}," 后位置没有更新",[14,105875,102747],{},[27,105877,105878],{"className":29,"code":104828,"language":31,"meta":32,"style":32},[34,105879,105880],{"__ignoreMap":32},[37,105881,105882],{"class":39,"line":40},[37,105883,104828],{"class":50},[498,105885,105886],{"id":105886},"数组维度看不懂",[14,105888,105889],{},"打印模型维度:",[27,105891,105893],{"className":29,"code":105892,"language":31,"meta":32,"style":32},"print(model.nq, model.nv, model.nu)\n",[34,105894,105895],{"__ignoreMap":32},[37,105896,105897,105899],{"class":39,"line":40},[37,105898,30755],{"class":61},[37,105900,105901],{"class":50},"(model.nq, model.nv, model.nu)\n",[661,105903,105904,105912],{},[664,105905,105906],{},[667,105907,105908,105910],{},[670,105909,104859],{"align":24077},[670,105911,100985],{"align":24077},[708,105913,105914,105924,105934],{},[667,105915,105916,105921],{},[713,105917,105918],{"align":24077},[34,105919,105920],{},"nq",[713,105922,105923],{"align":24077},"位置变量数量",[667,105925,105926,105931],{},[713,105927,105928],{"align":24077},[34,105929,105930],{},"nv",[713,105932,105933],{"align":24077},"速度变量数量",[667,105935,105936,105940],{},[713,105937,105938],{"align":24077},[34,105939,102447],{},[713,105941,105942],{"align":24077},"控制输入数量",[498,105944,105946,105947,105949],{"id":105945},"误以为-qpos-一定等于关节数","误以为 ",[34,105948,104315],{}," 一定等于关节数",[14,105951,105952,105953,82865,105955,105957,105958,105960],{},"不是。例如 ",[34,105954,101905],{},[34,105956,104315],{}," 是 7 维，但 ",[34,105959,104645],{}," 是 6 维。",[498,105962,105964,105965,105967],{"id":105963},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[34,105966,104315],{}," 的第几位",[14,105969,105970],{},"初学时可以先打印：",[27,105972,105974],{"className":29,"code":105973,"language":31,"meta":32,"style":32},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[34,105975,105976,105986,105996,106008],{"__ignoreMap":32},[37,105977,105978,105980,105982,105984],{"class":39,"line":40},[37,105979,30755],{"class":61},[37,105981,165],{"class":50},[37,105983,101724],{"class":185},[37,105985,101727],{"class":50},[37,105987,105988,105990,105992,105994],{"class":39,"line":47},[37,105989,30755],{"class":61},[37,105991,165],{"class":50},[37,105993,101736],{"class":185},[37,105995,101739],{"class":50},[37,105997,105998,106000,106002,106005],{"class":39,"line":104},[37,105999,30755],{"class":61},[37,106001,165],{"class":50},[37,106003,106004],{"class":185},"\"qpos:\"",[37,106006,106007],{"class":50},", data.qpos)\n",[37,106009,106010,106012,106014,106017],{"class":39,"line":113},[37,106011,30755],{"class":61},[37,106013,165],{"class":50},[37,106015,106016],{"class":185},"\"qvel:\"",[37,106018,106019],{"class":50},", data.qvel)\n",[14,106021,106022],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[498,106024,106025],{"id":106025},"仿真结果每次都一样",[14,106027,106028,106029,106031],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[34,106030,104315],{},"、目标点或控制输入。",[469,106033,102892],{"id":102891},[14,106035,106036,106037,24960],{},"Python 控制 MuJoCo 的核心就是读写 ",[34,106038,33738],{},[481,106040,106041,106049,106054,106059],{},[484,106042,106043,106044,101303,106046,106048],{},"用 ",[34,106045,101355],{},[34,106047,101358],{}," 读取状态。",[484,106050,106043,106051,106053],{},[34,106052,101361],{}," 写入控制。",[484,106055,106043,106056,106058],{},[34,106057,101500],{}," 推进时间。",[484,106060,106061,106062,106064],{},"手动改状态后用 ",[34,106063,104535],{}," 刷新派生量。",[14,106066,106067],{},"理解这一章后，就可以进入关节和 actuator 控制。",[446,106069,106070],{},"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":32,"searchDepth":47,"depth":47,"links":106072},[106073,106074,106075,106082,106086,106087,106088,106098],{"id":100931,"depth":47,"text":100932},{"id":101054,"depth":47,"text":101055},{"id":101329,"depth":47,"text":101330,"children":106076},[106077,106079,106081],{"id":104840,"depth":104,"text":106078},"qpos、qvel、ctrl 是什么",{"id":104918,"depth":104,"text":106080},"mj_step 和 mj_forward 的区别",{"id":105007,"depth":104,"text":105008},{"id":101537,"depth":47,"text":101538,"children":106083},[106084,106085],{"id":101857,"depth":104,"text":101857},{"id":101993,"depth":104,"text":101993},{"id":102600,"depth":47,"text":102601},{"id":102632,"depth":47,"text":102633},{"id":102737,"depth":47,"text":102738,"children":106089},[106090,106092,106093,106095,106097],{"id":105869,"depth":104,"text":106091},"修改 data.qpos 后位置没有更新",{"id":105886,"depth":104,"text":105886},{"id":105945,"depth":104,"text":106094},"误以为 qpos 一定等于关节数",{"id":105963,"depth":104,"text":106096},"不知道某个元素在 qpos 的第几位",{"id":106025,"depth":104,"text":106025},{"id":102891,"depth":47,"text":102892},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104603,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106105,"title":106106,"body":106107,"description":32,"extension":452,"meta":107797,"navigation":454,"path":107798,"seo":107799,"stem":107800,"__hash__":107801},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106108,"toc":107773},[106109,106112,106114,106117,106119,106144,106147,106166,106169,106171,106173,106197,106199,106213,106215,106256,106258,106282,106284,106287,106321,106323,106336,106339,106407,106416,106420,106423,106457,106463,106466,106470,106509,106512,106532,106536,106579,106581,106610,106613,106619,106622,106624,107018,107020,107032,107034,107045,107047,107050,107079,107087,107090,107125,107128,107130,107138,107141,107143,107154,107164,107184,107187,107223,107235,107283,107302,107344,107357,107385,107390,107411,107421,107439,107442,107476,107479,107499,107502,107521,107527,107529,107532,107538,107544,107554,107557,107563,107572,107574,107620,107622,107628,107634,107637,107640,107660,107663,107669,107675,107677,107700,107703,107706,107715,107718,107756,107758,107761,107767,107770],[10,106110,106106],{"id":106111},"_4关节actuator-与力控制",[469,106113,100932],{"id":100931},[14,106115,106116],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,106118,104616],{},[481,106120,106121,106127,106132,106136,106141],{},[484,106122,106123,106126],{},[34,106124,106125],{},"hinge"," 关节",[484,106128,106129],{},[34,106130,106131],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[484,106133,106134],{},[34,106135,101361],{},[484,106137,106138],{},[34,106139,106140],{},"ctrlrange",[484,106142,106143],{},"读取关节角和角速度",[14,106145,106146],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[27,106148,106150],{"className":29,"code":106149,"language":31,"meta":32,"style":32},"data.ctrl[0] = ...\n",[34,106151,106152],{"__ignoreMap":32},[37,106153,106154,106157,106159,106161,106163],{"class":39,"line":40},[37,106155,106156],{"class":50},"data.ctrl[",[37,106158,135],{"class":61},[37,106160,4793],{"class":50},[37,106162,55],{"class":54},[37,106164,106165],{"class":61}," ...\n",[14,106167,106168],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[469,106170,101055],{"id":101054},[14,106172,101058],{},[27,106174,106175],{"className":24163,"code":104673,"language":24165,"meta":32,"style":32},[34,106176,106177],{"__ignoreMap":32},[37,106178,106179,106181,106183,106185,106187,106189,106191,106193,106195],{"class":39,"line":40},[37,106180,24918],{"class":2320},[37,106182,26657],{"class":185},[37,106184,24175],{"class":185},[37,106186,26742],{"class":61},[37,106188,104688],{"class":185},[37,106190,101083],{"class":185},[37,106192,102786],{"class":185},[37,106194,101099],{"class":185},[37,106196,104697],{"class":185},[14,106198,103104],{},[27,106200,106201],{"className":24163,"code":101204,"language":24165,"meta":32,"style":32},[34,106202,106203],{"__ignoreMap":32},[37,106204,106205,106207,106209,106211],{"class":39,"line":40},[37,106206,24172],{"class":2320},[37,106208,24175],{"class":185},[37,106210,101215],{"class":185},[37,106212,101218],{"class":185},[14,106214,103121],{},[27,106216,106218],{"className":24163,"code":106217,"language":24165,"meta":32,"style":32},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[34,106219,106220,106237,106246],{"__ignoreMap":32},[37,106221,106222,106224,106226,106228,106231,106233,106235],{"class":39,"line":40},[37,106223,30672],{"class":2320},[37,106225,29518],{"class":185},[37,106227,25457],{"class":61},[37,106229,106230],{"class":185}," mujoco-control",[37,106232,101260],{"class":185},[37,106234,101263],{"class":61},[37,106236,101266],{"class":61},[37,106238,106239,106241,106243],{"class":39,"line":47},[37,106240,30672],{"class":2320},[37,106242,101273],{"class":185},[37,106244,106245],{"class":185}," mujoco-control\n",[37,106247,106248,106250,106252,106254],{"class":39,"line":104},[37,106249,24172],{"class":2320},[37,106251,24175],{"class":185},[37,106253,101215],{"class":185},[37,106255,101218],{"class":185},[14,106257,101289],{},[481,106259,106260,106266,106273,106279],{},[484,106261,106262,106265],{},[34,106263,106264],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[484,106267,106268,106270,106271,28727],{},[34,106269,101361],{}," 长度等于 ",[34,106272,102443],{},[484,106274,82557,106275,106278],{},[34,106276,106277],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[484,106280,106281],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[469,106283,101330],{"id":101329},[14,106285,106286],{},"关节决定 body 如何运动:",[27,106288,106290],{"className":53403,"code":106289,"language":53405,"meta":32,"style":32},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[34,106291,106292],{"__ignoreMap":32},[37,106293,106294,106296,106298,106300,106302,106305,106307,106309,106311,106314,106316,106319],{"class":39,"line":40},[37,106295,1418],{"class":50},[37,106297,103241],{"class":51636},[37,106299,15261],{"class":2320},[37,106301,55],{"class":50},[37,106303,106304],{"class":185},"\"hinge\"",[37,106306,54160],{"class":2320},[37,106308,55],{"class":50},[37,106310,106304],{"class":185},[37,106312,106313],{"class":2320}," axis",[37,106315,55],{"class":50},[37,106317,106318],{"class":185},"\"0 1 0\"",[37,106320,101429],{"class":50},[14,106322,103337],{},[481,106324,106325,106330,106333],{},[484,106326,106327,106328],{},"名字是 ",[34,106329,106125],{},[484,106331,106332],{},"类型是旋转关节",[484,106334,106335],{},"绕 y 轴旋转",[14,106337,106338],{},"actuator 决定如何施加控制:",[27,106340,106342],{"className":53403,"code":106341,"language":53405,"meta":32,"style":32},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[34,106343,106344,106353,106399],{"__ignoreMap":32},[37,106345,106346,106348,106351],{"class":39,"line":40},[37,106347,1418],{"class":50},[37,106349,106350],{"class":51636},"actuator",[37,106352,51643],{"class":50},[37,106354,106355,106357,106360,106362,106364,106367,106370,106372,106374,106377,106379,106381,106384,106386,106389,106392,106394,106397],{"class":39,"line":47},[37,106356,52480],{"class":50},[37,106358,106359],{"class":51636},"motor",[37,106361,15261],{"class":2320},[37,106363,55],{"class":50},[37,106365,106366],{"class":185},"\"hinge_motor\"",[37,106368,106369],{"class":2320}," joint",[37,106371,55],{"class":50},[37,106373,106304],{"class":185},[37,106375,106376],{"class":2320}," gear",[37,106378,55],{"class":50},[37,106380,4028],{"class":185},[37,106382,106383],{"class":2320}," ctrlrange",[37,106385,55],{"class":50},[37,106387,106388],{"class":185},"\"-2 2\"",[37,106390,106391],{"class":2320}," ctrllimited",[37,106393,55],{"class":50},[37,106395,106396],{"class":185},"\"true\"",[37,106398,101429],{"class":50},[37,106400,106401,106403,106405],{"class":39,"line":104},[37,106402,52121],{"class":50},[37,106404,106350],{"class":51636},[37,106406,51643],{"class":50},[14,106408,106409,106412,106413,28727],{},[34,106410,106411],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[34,106414,106415],{},"[-2, 2]",[498,106417,106419],{"id":106418},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106421,106422],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[661,106424,106425,106435],{},[664,106426,106427],{},[667,106428,106429,106431,106433],{},[670,106430,26095],{"align":24077},[670,106432,102981],{"align":24077},[670,106434,101019],{"align":24077},[708,106436,106437,106447],{},[667,106438,106439,106441,106444],{},[713,106440,103241],{"align":24077},[713,106442,106443],{"align":24077},"定义能怎么动",[713,106445,106446],{"align":24077},"门轴允许门旋转",[667,106448,106449,106451,106454],{},[713,106450,106350],{"align":24077},[713,106452,106453],{"align":24077},"定义怎么施力或控制",[713,106455,106456],{"align":24077},"人推门、马达带动门",[14,106458,106459,106460,106462],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[34,106461,101361],{}," 主动控制它。",[14,106464,106465],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[498,106467,106469],{"id":106468},"hinge-joint","hinge joint",[27,106471,106473],{"className":53403,"code":106472,"language":53405,"meta":32,"style":32},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[34,106474,106475],{"__ignoreMap":32},[37,106476,106477,106479,106481,106483,106485,106487,106489,106491,106493,106495,106497,106499,106502,106504,106507],{"class":39,"line":40},[37,106478,1418],{"class":50},[37,106480,103241],{"class":51636},[37,106482,15261],{"class":2320},[37,106484,55],{"class":50},[37,106486,106304],{"class":185},[37,106488,54160],{"class":2320},[37,106490,55],{"class":50},[37,106492,106304],{"class":185},[37,106494,106313],{"class":2320},[37,106496,55],{"class":50},[37,106498,106318],{"class":185},[37,106500,106501],{"class":2320}," damping",[37,106503,55],{"class":50},[37,106505,106506],{"class":185},"\"0.1\"",[37,106508,101429],{"class":50},[14,106510,106511],{},"含义：",[481,106513,106514,106520,106526],{},[484,106515,106516,106519],{},[34,106517,106518],{},"type=\"hinge\"","：只能绕一个轴旋转。",[484,106521,106522,106525],{},[34,106523,106524],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[484,106527,106528,106531],{},[34,106529,106530],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[498,106533,106535],{"id":106534},"motor-actuator","motor actuator",[27,106537,106539],{"className":53403,"code":106538,"language":53405,"meta":32,"style":32},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[34,106540,106541],{"__ignoreMap":32},[37,106542,106543,106545,106547,106549,106551,106553,106555,106557,106559,106561,106563,106565,106567,106569,106571,106573,106575,106577],{"class":39,"line":40},[37,106544,1418],{"class":50},[37,106546,106359],{"class":51636},[37,106548,15261],{"class":2320},[37,106550,55],{"class":50},[37,106552,106366],{"class":185},[37,106554,106369],{"class":2320},[37,106556,55],{"class":50},[37,106558,106304],{"class":185},[37,106560,106376],{"class":2320},[37,106562,55],{"class":50},[37,106564,4028],{"class":185},[37,106566,106383],{"class":2320},[37,106568,55],{"class":50},[37,106570,106388],{"class":185},[37,106572,106391],{"class":2320},[37,106574,55],{"class":50},[37,106576,106396],{"class":185},[37,106578,101429],{"class":50},[14,106580,106511],{},[481,106582,106583,106592,106598,106604],{},[484,106584,106585,106588,106589,106591],{},[34,106586,106587],{},"joint=\"hinge\"","：这个电机作用在名为 ",[34,106590,106125],{}," 的关节上。",[484,106593,106594,106597],{},[34,106595,106596],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[484,106599,106600,106603],{},[34,106601,106602],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[484,106605,106606,106609],{},[34,106607,106608],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106611,106612],{},"简单理解：",[27,106614,106617],{"className":106615,"code":106616,"language":5536,"meta":32},[5534],"实际施加效果 ≈ data.ctrl[0] * gear\n",[34,106618,106616],{"__ignoreMap":32},[14,106620,106621],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[469,106623,101538],{"id":101537},[27,106625,106627],{"className":29,"code":106626,"language":31,"meta":32,"style":32},"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",[34,106628,106629,106636,106640,106646,106656,106660,106664,106672,106677,106682,106686,106690,106695,106700,106704,106709,106714,106719,106724,106728,106732,106736,106741,106746,106751,106755,106759,106763,106767,106779,106791,106799,106803,106813,106823,106833,106837,106850,106863,106867,106884,106898,106933,106937,106941,106952,106967,106982,106994,106998,107002,107014],{"__ignoreMap":32},[37,106630,106631,106633],{"class":39,"line":40},[37,106632,30732],{"class":54},[37,106634,106635],{"class":50}," math\n",[37,106637,106638],{"class":39,"line":47},[37,106639,2757],{"emptyLinePlaceholder":454},[37,106641,106642,106644],{"class":39,"line":104},[37,106643,30732],{"class":54},[37,106645,101586],{"class":50},[37,106647,106648,106650,106652,106654],{"class":39,"line":113},[37,106649,30732],{"class":54},[37,106651,31719],{"class":50},[37,106653,31722],{"class":54},[37,106655,31725],{"class":50},[37,106657,106658],{"class":39,"line":189},[37,106659,2757],{"emptyLinePlaceholder":454},[37,106661,106662],{"class":39,"line":195},[37,106663,2757],{"emptyLinePlaceholder":454},[37,106665,106666,106668,106670],{"class":39,"line":201},[37,106667,101599],{"class":61},[37,106669,13905],{"class":54},[37,106671,101604],{"class":185},[37,106673,106674],{"class":39,"line":207},[37,106675,106676],{"class":185},"\u003Cmujoco model=\"one_link_motor\">\n",[37,106678,106679],{"class":39,"line":213},[37,106680,106681],{"class":185},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[37,106683,106684],{"class":39,"line":218},[37,106685,2757],{"emptyLinePlaceholder":454},[37,106687,106688],{"class":39,"line":227},[37,106689,101623],{"class":185},[37,106691,106692],{"class":39,"line":232},[37,106693,106694],{"class":185},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[37,106696,106697],{"class":39,"line":238},[37,106698,106699],{"class":185},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[37,106701,106702],{"class":39,"line":244},[37,106703,2757],{"emptyLinePlaceholder":454},[37,106705,106706],{"class":39,"line":250},[37,106707,106708],{"class":185},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[37,106710,106711],{"class":39,"line":256},[37,106712,106713],{"class":185},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[37,106715,106716],{"class":39,"line":261},[37,106717,106718],{"class":185},"        \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",[37,106720,106721],{"class":39,"line":267},[37,106722,106723],{"class":185},"      \u003C\u002Fbody>\n",[37,106725,106726],{"class":39,"line":283},[37,106727,101652],{"class":185},[37,106729,106730],{"class":39,"line":288},[37,106731,101657],{"class":185},[37,106733,106734],{"class":39,"line":294},[37,106735,2757],{"emptyLinePlaceholder":454},[37,106737,106738],{"class":39,"line":300},[37,106739,106740],{"class":185},"  \u003Cactuator>\n",[37,106742,106743],{"class":39,"line":306},[37,106744,106745],{"class":185},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[37,106747,106748],{"class":39,"line":312},[37,106749,106750],{"class":185},"  \u003C\u002Factuator>\n",[37,106752,106753],{"class":39,"line":317},[37,106754,101662],{"class":185},[37,106756,106757],{"class":39,"line":323},[37,106758,95983],{"class":185},[37,106760,106761],{"class":39,"line":337},[37,106762,2757],{"emptyLinePlaceholder":454},[37,106764,106765],{"class":39,"line":342},[37,106766,2757],{"emptyLinePlaceholder":454},[37,106768,106769,106771,106773,106775,106777],{"class":39,"line":347},[37,106770,32285],{"class":54},[37,106772,2330],{"class":2320},[37,106774,101683],{"class":50},[37,106776,95971],{"class":61},[37,106778,4089],{"class":50},[37,106780,106781,106783,106785,106787,106789],{"class":39,"line":352},[37,106782,101692],{"class":50},[37,106784,55],{"class":54},[37,106786,101697],{"class":50},[37,106788,101599],{"class":61},[37,106790,280],{"class":50},[37,106792,106793,106795,106797],{"class":39,"line":357},[37,106794,101706],{"class":50},[37,106796,55],{"class":54},[37,106798,101711],{"class":50},[37,106800,106801],{"class":39,"line":362},[37,106802,2757],{"emptyLinePlaceholder":454},[37,106804,106805,106807,106809,106811],{"class":39,"line":367},[37,106806,31638],{"class":61},[37,106808,165],{"class":50},[37,106810,101724],{"class":185},[37,106812,101727],{"class":50},[37,106814,106815,106817,106819,106821],{"class":39,"line":373},[37,106816,31638],{"class":61},[37,106818,165],{"class":50},[37,106820,101736],{"class":185},[37,106822,101739],{"class":50},[37,106824,106825,106827,106829,106831],{"class":39,"line":392},[37,106826,31638],{"class":61},[37,106828,165],{"class":50},[37,106830,101748],{"class":185},[37,106832,101751],{"class":50},[37,106834,106835],{"class":39,"line":398},[37,106836,2757],{"emptyLinePlaceholder":454},[37,106838,106839,106841,106844,106846,106848],{"class":39,"line":409},[37,106840,3451],{"class":54},[37,106842,106843],{"class":50}," model.nu ",[37,106845,21289],{"class":54},[37,106847,25460],{"class":61},[37,106849,4089],{"class":50},[37,106851,106852,106854,106856,106858,106861],{"class":39,"line":415},[37,106853,103717],{"class":54},[37,106855,103720],{"class":61},[37,106857,165],{"class":50},[37,106859,106860],{"class":185},"\"expected exactly one actuator\"",[37,106862,280],{"class":50},[37,106864,106865],{"class":39,"line":420},[37,106866,2757],{"emptyLinePlaceholder":454},[37,106868,106869,106871,106873,106875,106877,106879,106882],{"class":39,"line":425},[37,106870,3551],{"class":54},[37,106872,31954],{"class":50},[37,106874,26385],{"class":54},[37,106876,32781],{"class":61},[37,106878,165],{"class":50},[37,106880,106881],{"class":61},"2000",[37,106883,31125],{"class":50},[37,106885,106886,106889,106891,106893,106895],{"class":39,"line":431},[37,106887,106888],{"class":50},"        t ",[37,106890,55],{"class":54},[37,106892,31954],{"class":50},[37,106894,967],{"class":54},[37,106896,106897],{"class":50}," model.opt.timestep\n",[37,106899,106900,106903,106905,106907,106909,106912,106914,106917,106919,106921,106924,106926,106928,106930],{"class":39,"line":436},[37,106901,106902],{"class":50},"        data.ctrl[",[37,106904,135],{"class":61},[37,106906,4793],{"class":50},[37,106908,55],{"class":54},[37,106910,106911],{"class":61}," 1.5",[37,106913,6866],{"class":54},[37,106915,106916],{"class":50}," math.sin(",[37,106918,105545],{"class":61},[37,106920,6866],{"class":54},[37,106922,106923],{"class":50}," math.pi ",[37,106925,967],{"class":54},[37,106927,62203],{"class":61},[37,106929,6866],{"class":54},[37,106931,106932],{"class":50}," t)\n",[37,106934,106935],{"class":39,"line":442},[37,106936,101801],{"class":50},[37,106938,106939],{"class":39,"line":8374},[37,106940,2757],{"emptyLinePlaceholder":454},[37,106942,106943,106945,106947,106950],{"class":39,"line":8386},[37,106944,31638],{"class":61},[37,106946,165],{"class":50},[37,106948,106949],{"class":185},"\"time:\"",[37,106951,101763],{"class":50},[37,106953,106954,106956,106958,106961,106963,106965],{"class":39,"line":8398},[37,106955,31638],{"class":61},[37,106957,165],{"class":50},[37,106959,106960],{"class":185},"\"joint qpos:\"",[37,106962,105215],{"class":50},[37,106964,168],{"class":61},[37,106966,175],{"class":50},[37,106968,106969,106971,106973,106976,106978,106980],{"class":39,"line":10057},[37,106970,31638],{"class":61},[37,106972,165],{"class":50},[37,106974,106975],{"class":185},"\"joint qvel:\"",[37,106977,105231],{"class":50},[37,106979,168],{"class":61},[37,106981,175],{"class":50},[37,106983,106984,106986,106988,106991],{"class":39,"line":10082},[37,106985,31638],{"class":61},[37,106987,165],{"class":50},[37,106989,106990],{"class":185},"\"last ctrl:\"",[37,106992,106993],{"class":50},", data.ctrl.copy())\n",[37,106995,106996],{"class":39,"line":10105},[37,106997,2757],{"emptyLinePlaceholder":454},[37,106999,107000],{"class":39,"line":10129},[37,107001,2757],{"emptyLinePlaceholder":454},[37,107003,107004,107006,107008,107010,107012],{"class":39,"line":10134},[37,107005,1907],{"class":54},[37,107007,31559],{"class":61},[37,107009,101844],{"class":54},[37,107011,101847],{"class":185},[37,107013,4089],{"class":50},[37,107015,107016],{"class":39,"line":10139},[37,107017,101854],{"class":50},[14,107019,103855],{},[27,107021,107023],{"className":24163,"code":107022,"language":24165,"meta":32,"style":32},"touch ch4_joint_motor.py\n",[34,107024,107025],{"__ignoreMap":32},[37,107026,107027,107029],{"class":39,"line":40},[37,107028,101568],{"class":2320},[37,107030,107031],{"class":185}," ch4_joint_motor.py\n",[14,107033,102586],{},[27,107035,107037],{"className":24163,"code":107036,"language":24165,"meta":32,"style":32},"python ch4_joint_motor.py\n",[34,107038,107039],{"__ignoreMap":32},[37,107040,107041,107043],{"class":39,"line":40},[37,107042,31],{"class":2320},[37,107044,107031],{"class":185},[498,107046,101857],{"id":101857},[14,107048,107049],{},"检查 actuator 数量：",[27,107051,107053],{"className":29,"code":107052,"language":31,"meta":32,"style":32},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[34,107054,107055,107067],{"__ignoreMap":32},[37,107056,107057,107059,107061,107063,107065],{"class":39,"line":40},[37,107058,1907],{"class":54},[37,107060,106843],{"class":50},[37,107062,21289],{"class":54},[37,107064,25460],{"class":61},[37,107066,4089],{"class":50},[37,107068,107069,107071,107073,107075,107077],{"class":39,"line":47},[37,107070,104180],{"class":54},[37,107072,103720],{"class":61},[37,107074,165],{"class":50},[37,107076,106860],{"class":185},[37,107078,280],{"class":50},[14,107080,107081,107083,107084,107086],{},[34,107082,102443],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[34,107085,101361],{}," 长度应该是 1。",[14,107088,107089],{},"产生正弦控制信号：",[27,107091,107093],{"className":29,"code":107092,"language":31,"meta":32,"style":32},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[34,107094,107095],{"__ignoreMap":32},[37,107096,107097,107099,107101,107103,107105,107107,107109,107111,107113,107115,107117,107119,107121,107123],{"class":39,"line":40},[37,107098,106156],{"class":50},[37,107100,135],{"class":61},[37,107102,4793],{"class":50},[37,107104,55],{"class":54},[37,107106,106911],{"class":61},[37,107108,6866],{"class":54},[37,107110,106916],{"class":50},[37,107112,105545],{"class":61},[37,107114,6866],{"class":54},[37,107116,106923],{"class":50},[37,107118,967],{"class":54},[37,107120,62203],{"class":61},[37,107122,6866],{"class":54},[37,107124,106932],{"class":50},[14,107126,107127],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,107129,101958],{},[27,107131,107132],{"className":29,"code":104790,"language":31,"meta":32,"style":32},[34,107133,107134],{"__ignoreMap":32},[37,107135,107136],{"class":39,"line":40},[37,107137,104790],{"class":50},[14,107139,107140],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[498,107142,101993],{"id":101993},[27,107144,107146],{"className":29,"code":107145,"language":31,"meta":32,"style":32},"import math\n",[34,107147,107148],{"__ignoreMap":32},[37,107149,107150,107152],{"class":39,"line":40},[37,107151,30732],{"class":54},[37,107153,106635],{"class":50},[14,107155,107156,107157,101303,107160,107163],{},"导入 Python 标准库里的数学模块。后面要用 ",[34,107158,107159],{},"math.sin",[34,107161,107162],{},"math.pi"," 生成周期变化的控制信号。",[27,107165,107166],{"className":29,"code":103971,"language":31,"meta":32,"style":32},[34,107167,107168,107174],{"__ignoreMap":32},[37,107169,107170,107172],{"class":39,"line":40},[37,107171,30732],{"class":54},[37,107173,101586],{"class":50},[37,107175,107176,107178,107180,107182],{"class":39,"line":47},[37,107177,30732],{"class":54},[37,107179,31719],{"class":50},[37,107181,31722],{"class":54},[37,107183,31725],{"class":50},[14,107185,107186],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[27,107188,107189],{"className":53403,"code":106472,"language":53405,"meta":32,"style":32},[34,107190,107191],{"__ignoreMap":32},[37,107192,107193,107195,107197,107199,107201,107203,107205,107207,107209,107211,107213,107215,107217,107219,107221],{"class":39,"line":40},[37,107194,1418],{"class":50},[37,107196,103241],{"class":51636},[37,107198,15261],{"class":2320},[37,107200,55],{"class":50},[37,107202,106304],{"class":185},[37,107204,54160],{"class":2320},[37,107206,55],{"class":50},[37,107208,106304],{"class":185},[37,107210,106313],{"class":2320},[37,107212,55],{"class":50},[37,107214,106318],{"class":185},[37,107216,106501],{"class":2320},[37,107218,55],{"class":50},[37,107220,106506],{"class":185},[37,107222,101429],{"class":50},[14,107224,107225,107226,107228,107229,107231,107232,107234],{},"这行定义关节。",[34,107227,106125],{}," 表示旋转关节。",[34,107230,106524],{}," 表示绕 y 轴旋转。",[34,107233,106530],{}," 表示有一点阻尼，运动不会完全无损耗。",[27,107236,107238],{"className":53403,"code":107237,"language":53405,"meta":32,"style":32},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[34,107239,107240],{"__ignoreMap":32},[37,107241,107242,107244,107246,107248,107250,107253,107255,107257,107260,107263,107265,107268,107270,107272,107274,107276,107278,107281],{"class":39,"line":40},[37,107243,1418],{"class":50},[37,107245,101405],{"class":51636},[37,107247,15261],{"class":2320},[37,107249,55],{"class":50},[37,107251,107252],{"class":185},"\"link_geom\"",[37,107254,54160],{"class":2320},[37,107256,55],{"class":50},[37,107258,107259],{"class":185},"\"capsule\"",[37,107261,107262],{"class":2320}," fromto",[37,107264,55],{"class":50},[37,107266,107267],{"class":185},"\"0 0 0 0 0 0.5\"",[37,107269,101421],{"class":2320},[37,107271,55],{"class":50},[37,107273,104063],{"class":185},[37,107275,102286],{"class":2320},[37,107277,55],{"class":50},[37,107279,107280],{"class":185},"\"0.5\"",[37,107282,101429],{"class":50},[14,107284,107285,107286,107288,107289,107291,107292,107295,107296,28727,107299,107301],{},"这行定义摆杆的形状。",[34,107287,103450],{}," 是胶囊体，适合表示杆子。",[34,107290,103461],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[34,107293,107294],{},"(0,0,0)"," 延伸到 ",[34,107297,107298],{},"(0,0,0.5)",[34,107300,103455],{}," 是半径。",[27,107303,107304],{"className":53403,"code":106538,"language":53405,"meta":32,"style":32},[34,107305,107306],{"__ignoreMap":32},[37,107307,107308,107310,107312,107314,107316,107318,107320,107322,107324,107326,107328,107330,107332,107334,107336,107338,107340,107342],{"class":39,"line":40},[37,107309,1418],{"class":50},[37,107311,106359],{"class":51636},[37,107313,15261],{"class":2320},[37,107315,55],{"class":50},[37,107317,106366],{"class":185},[37,107319,106369],{"class":2320},[37,107321,55],{"class":50},[37,107323,106304],{"class":185},[37,107325,106376],{"class":2320},[37,107327,55],{"class":50},[37,107329,4028],{"class":185},[37,107331,106383],{"class":2320},[37,107333,55],{"class":50},[37,107335,106388],{"class":185},[37,107337,106391],{"class":2320},[37,107339,55],{"class":50},[37,107341,106396],{"class":185},[37,107343,101429],{"class":50},[14,107345,107346,107347,107349,107350,107353,107354,107356],{},"这行定义电机。它作用在 ",[34,107348,106125],{}," 关节上。",[34,107351,107352],{},"gear"," 可以理解成放大倍数。",[34,107355,106140],{}," 限制控制输入范围。",[27,107358,107359],{"className":29,"code":107052,"language":31,"meta":32,"style":32},[34,107360,107361,107373],{"__ignoreMap":32},[37,107362,107363,107365,107367,107369,107371],{"class":39,"line":40},[37,107364,1907],{"class":54},[37,107366,106843],{"class":50},[37,107368,21289],{"class":54},[37,107370,25460],{"class":61},[37,107372,4089],{"class":50},[37,107374,107375,107377,107379,107381,107383],{"class":39,"line":47},[37,107376,104180],{"class":54},[37,107378,103720],{"class":61},[37,107380,165],{"class":50},[37,107382,106860],{"class":185},[37,107384,280],{"class":50},[14,107386,107387,107389],{},[34,107388,102443],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[27,107391,107393],{"className":29,"code":107392,"language":31,"meta":32,"style":32},"for step in range(2000):\n",[34,107394,107395],{"__ignoreMap":32},[37,107396,107397,107399,107401,107403,107405,107407,107409],{"class":39,"line":40},[37,107398,3375],{"class":54},[37,107400,31954],{"class":50},[37,107402,26385],{"class":54},[37,107404,32781],{"class":61},[37,107406,165],{"class":50},[37,107408,106881],{"class":61},[37,107410,31125],{"class":50},[14,107412,107413,107414,107416,107417,107420],{},"循环 2000 步。这里没有用 ",[34,107415,1500],{},"，而是用 ",[34,107418,107419],{},"step","，因为后面要用当前步数计算时间。",[27,107422,107424],{"className":29,"code":107423,"language":31,"meta":32,"style":32},"t = step * model.opt.timestep\n",[34,107425,107426],{"__ignoreMap":32},[37,107427,107428,107431,107433,107435,107437],{"class":39,"line":40},[37,107429,107430],{"class":50},"t ",[37,107432,55],{"class":54},[37,107434,31954],{"class":50},[37,107436,967],{"class":54},[37,107438,106897],{"class":50},[14,107440,107441],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[27,107443,107444],{"className":29,"code":107092,"language":31,"meta":32,"style":32},[34,107445,107446],{"__ignoreMap":32},[37,107447,107448,107450,107452,107454,107456,107458,107460,107462,107464,107466,107468,107470,107472,107474],{"class":39,"line":40},[37,107449,106156],{"class":50},[37,107451,135],{"class":61},[37,107453,4793],{"class":50},[37,107455,55],{"class":54},[37,107457,106911],{"class":61},[37,107459,6866],{"class":54},[37,107461,106916],{"class":50},[37,107463,105545],{"class":61},[37,107465,6866],{"class":54},[37,107467,106923],{"class":50},[37,107469,967],{"class":54},[37,107471,62203],{"class":61},[37,107473,6866],{"class":54},[37,107475,106932],{"class":50},[14,107477,107478],{},"这行给电机输入一个正弦波。拆开看：",[481,107480,107481,107487,107493],{},[484,107482,107483,107486],{},[34,107484,107485],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[484,107488,107489,107492],{},[34,107490,107491],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[484,107494,107495,107498],{},[34,107496,107497],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107500,107501],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[27,107503,107505],{"className":29,"code":107504,"language":31,"meta":32,"style":32},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[34,107506,107507],{"__ignoreMap":32},[37,107508,107509,107511,107513,107515,107517,107519],{"class":39,"line":40},[37,107510,30755],{"class":61},[37,107512,165],{"class":50},[37,107514,106960],{"class":185},[37,107516,105215],{"class":50},[37,107518,168],{"class":61},[37,107520,175],{"class":50},[14,107522,107523,107524,107526],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[34,107525,101355],{}," 只有一个数。",[469,107528,102601],{"id":102600},[14,107530,107531],{},"输出类似:",[27,107533,107536],{"className":107534,"code":107535,"language":5536,"meta":32},[5534],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[34,107537,107535],{"__ignoreMap":32},[14,107539,107540,107541,107543],{},"这里 ",[34,107542,106411],{}," 是电机输入。",[14,107545,107546,107549,107550,107553],{},[34,107547,107548],{},"joint qpos"," 是关节角度，单位通常是弧度。",[34,107551,107552],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107555,107556],{},"角度单位提示：",[27,107558,107561],{"className":107559,"code":107560,"language":5536,"meta":32},[5534],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[34,107562,107560],{"__ignoreMap":32},[14,107564,107565,107566,107568,107569,107571],{},"如果你看到 ",[34,107567,104315],{}," 是 ",[34,107570,35666],{},"，大约就是 28.6 度。",[469,107573,102633],{"id":102632},[481,107575,107576,107583,107586,107593,107596,107604,107612],{},[484,107577,102696,107578,102699,107580,28727],{},[34,107579,106596],{},[34,107581,107582],{},"gear=\"5\"",[484,107584,107585],{},"重新运行，观察关节运动是否更剧烈。",[484,107587,102696,107588,102699,107590,28727],{},[34,107589,106140],{},[34,107591,107592],{},"-0.2 0.2",[484,107594,107595],{},"重新运行，观察控制能力是否变弱。",[484,107597,107598,107599,107601,107602,28727],{},"去掉 actuator，确认 ",[34,107600,102443],{}," 变成 ",[34,107603,135],{},[484,107605,102696,107606,102699,107608,107611],{},[34,107607,106530],{},[34,107609,107610],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[484,107613,102696,107614,102699,107616,107619],{},[34,107615,106524],{},[34,107617,107618],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[469,107621,102738],{"id":102737},[498,107623,107625],{"id":107624},"indexerror-index-0-is-out-of-bounds",[34,107626,107627],{},"IndexError: index 0 is out of bounds",[14,107629,107630,107631,107633],{},"原因是 ",[34,107632,106277],{},"，没有 actuator。",[498,107635,107636],{"id":107636},"关节几乎不动",[14,107638,107639],{},"可能原因:",[481,107641,107642,107647,107651,107657],{},[484,107643,107644,107646],{},[34,107645,107352],{}," 太小",[484,107648,107649,107646],{},[34,107650,106140],{},[484,107652,107653,107656],{},[34,107654,107655],{},"damping"," 太大",[484,107658,107659],{},"重力方向导致运动不明显",[498,107661,107662],{"id":107662},"模型编译失败",[14,107664,107665,107666,107668],{},"检查 actuator 引用的 ",[34,107667,106587],{}," 是否存在，joint 名称是否拼写一致。",[498,107670,107672,107674],{"id":107671},"datactrl0-写了但没有效果",[34,107673,106411],{}," 写了但没有效果",[14,107676,102860],{},[481,107678,107679,107684,107687,107692,107697],{},[484,107680,107681,107683],{},[34,107682,102443],{}," 是否大于 0。",[484,107685,107686],{},"motor 是否引用了正确 joint。",[484,107688,107689,107691],{},[34,107690,107352],{}," 是否太小。",[484,107693,107694,107696],{},[34,107695,106140],{}," 是否把输入限制得太小。",[484,107698,107699],{},"body 是否真的有可动 joint。",[498,107701,107702],{"id":107702},"控制输入超过范围会怎样",[14,107704,107705],{},"如果设置了：",[27,107707,107709],{"className":53403,"code":107708,"language":53405,"meta":32,"style":32},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[34,107710,107711],{"__ignoreMap":32},[37,107712,107713],{"class":39,"line":40},[37,107714,107708],{"class":50},[14,107716,107717],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[27,107719,107721],{"className":29,"code":107720,"language":31,"meta":32,"style":32},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[34,107722,107723,107743],{"__ignoreMap":32},[37,107724,107725,107728,107730,107733,107735,107737,107739,107741],{"class":39,"line":40},[37,107726,107727],{"class":50},"action ",[37,107729,55],{"class":54},[37,107731,107732],{"class":50}," np.clip(action, ",[37,107734,384],{"class":54},[37,107736,105545],{"class":61},[37,107738,12776],{"class":50},[37,107740,105545],{"class":61},[37,107742,280],{"class":50},[37,107744,107745,107747,107749,107751,107753],{"class":39,"line":47},[37,107746,106156],{"class":50},[37,107748,135],{"class":61},[37,107750,4793],{"class":50},[37,107752,55],{"class":54},[37,107754,107755],{"class":50}," action\n",[469,107757,102892],{"id":102891},[14,107759,107760],{},"这一章建立了控制任务的基本形式：",[27,107762,107765],{"className":107763,"code":107764,"language":5536,"meta":32},[5534],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[34,107766,107764],{"__ignoreMap":32},[14,107768,107769],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[446,107771,107772],{},"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":32,"searchDepth":47,"depth":47,"links":107774},[107775,107776,107777,107782,107786,107787,107788,107796],{"id":100931,"depth":47,"text":100932},{"id":101054,"depth":47,"text":101055},{"id":101329,"depth":47,"text":101330,"children":107778},[107779,107780,107781],{"id":106418,"depth":104,"text":106419},{"id":106468,"depth":104,"text":106469},{"id":106534,"depth":104,"text":106535},{"id":101537,"depth":47,"text":101538,"children":107783},[107784,107785],{"id":101857,"depth":104,"text":101857},{"id":101993,"depth":104,"text":101993},{"id":102600,"depth":47,"text":102601},{"id":102632,"depth":47,"text":102633},{"id":102737,"depth":47,"text":102738,"children":107789},[107790,107791,107792,107793,107795],{"id":107624,"depth":104,"text":107627},{"id":107636,"depth":104,"text":107636},{"id":107662,"depth":104,"text":107662},{"id":107671,"depth":104,"text":107794},"data.ctrl[0] 写了但没有效果",{"id":107702,"depth":104,"text":107702},{"id":102891,"depth":47,"text":102892},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106106,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107803,"title":107804,"body":107805,"description":32,"extension":452,"meta":109714,"navigation":454,"path":109715,"seo":109716,"stem":109717,"__hash__":109718},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107806,"toc":109690},[107807,107810,107812,107815,107823,107826,107843,107846,107871,107874,107920,107922,107924,107979,107981,108000,108002,108045,108048,108065,108068,108084,108094,108101,108103,108106,108109,108143,108146,108194,108198,108201,108215,108224,108228,108231,108256,108259,108263,108276,108279,108285,108288,108303,108305,108308,108568,108570,108582,108585,108897,108899,108911,108913,108916,108931,108936,108939,108961,108964,108967,109001,109004,109008,109019,109022,109039,109042,109056,109063,109083,109090,109104,109107,109119,109134,109154,109157,109179,109182,109186,109201,109212,109227,109230,109260,109276,109305,109313,109337,109340,109358,109368,109380,109387,109396,109402,109411,109414,109416,109425,109428,109443,109445,109448,109459,109462,109473,109476,109494,109496,109513,109516,109544,109546,109550,109553,109583,109589,109592,109596,109604,109607,109609,109630,109633,109636,109652,109655,109671,109673,109676,109687],[10,107808,107804],{"id":107809},"_5viewer-可视化与-renderer-离屏渲染",[469,107811,100932],{"id":100931},[14,107813,107814],{},"本章掌握两类可视化方式:",[481,107816,107817,107820],{},[484,107818,107819],{},"交互式 viewer: 适合人工观察仿真",[484,107821,107822],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107824,107825],{},"使用官方接口:",[27,107827,107829],{"className":29,"code":107828,"language":31,"meta":32,"style":32},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[34,107830,107831,107838],{"__ignoreMap":32},[37,107832,107833,107835],{"class":39,"line":40},[37,107834,30732],{"class":54},[37,107836,107837],{"class":50}," mujoco.viewer\n",[37,107839,107840],{"class":39,"line":47},[37,107841,107842],{"class":50},"mujoco.viewer.launch_passive(model, data)\n",[14,107844,107845],{},"以及:",[27,107847,107849],{"className":29,"code":107848,"language":31,"meta":32,"style":32},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[34,107850,107851,107861],{"__ignoreMap":32},[37,107852,107853,107856,107858],{"class":39,"line":40},[37,107854,107855],{"class":50},"renderer ",[37,107857,55],{"class":54},[37,107859,107860],{"class":50}," mujoco.Renderer(model)\n",[37,107862,107863,107866,107868],{"class":39,"line":47},[37,107864,107865],{"class":50},"image ",[37,107867,55],{"class":54},[37,107869,107870],{"class":50}," renderer.render()\n",[14,107872,107873],{},"新手建议先理解二者区别：",[661,107875,107876,107892],{},[664,107877,107878],{},[667,107879,107880,107883,107886,107889],{},[670,107881,107882],{"align":24077},"工具",[670,107884,107885],{"align":24077},"用途",[670,107887,107888],{"align":24077},"是否打开窗口",[670,107890,107891],{"align":24077},"常见场景",[708,107893,107894,107907],{},[667,107895,107896,107899,107902,107904],{},[713,107897,107898],{"align":24077},"Viewer",[713,107900,107901],{"align":24077},"人眼实时观察仿真",[713,107903,104950],{"align":24077},[713,107905,107906],{"align":24077},"调试模型、看控制效果",[667,107908,107909,107912,107915,107917],{},[713,107910,107911],{"align":24077},"Renderer",[713,107913,107914],{"align":24077},"生成图像数组",[713,107916,104963],{"align":24077},[713,107918,107919],{"align":24077},"保存图片、训练视觉策略、服务器批量采集",[469,107921,101055],{"id":101054},[14,107923,101058],{},[27,107925,107927],{"className":24163,"code":107926,"language":24165,"meta":32,"style":32},"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",[34,107928,107929,107941,107951,107959,107967],{"__ignoreMap":32},[37,107930,107931,107933,107935,107937,107939],{"class":39,"line":40},[37,107932,24918],{"class":2320},[37,107934,26657],{"class":185},[37,107936,24175],{"class":185},[37,107938,26742],{"class":61},[37,107940,25020],{"class":61},[37,107942,107943,107945,107947,107949],{"class":39,"line":47},[37,107944,101093],{"class":185},[37,107946,101096],{"class":185},[37,107948,101099],{"class":185},[37,107950,25020],{"class":61},[37,107952,107953,107955,107957],{"class":39,"line":104},[37,107954,101106],{"class":185},[37,107956,101109],{"class":185},[37,107958,25020],{"class":61},[37,107960,107961,107963,107965],{"class":39,"line":113},[37,107962,101116],{"class":185},[37,107964,101119],{"class":185},[37,107966,25020],{"class":61},[37,107968,107969,107971,107973,107975,107977],{"class":39,"line":189},[37,107970,101126],{"class":185},[37,107972,101129],{"class":185},[37,107974,101132],{"class":185},[37,107976,101135],{"class":185},[37,107978,102801],{"class":185},[14,107980,103104],{},[27,107982,107984],{"className":24163,"code":107983,"language":24165,"meta":32,"style":32},"pip install \"mujoco>=2.3\" numpy pillow\n",[34,107985,107986],{"__ignoreMap":32},[37,107987,107988,107990,107992,107994,107997],{"class":39,"line":40},[37,107989,24172],{"class":2320},[37,107991,24175],{"class":185},[37,107993,101215],{"class":185},[37,107995,107996],{"class":185}," numpy",[37,107998,107999],{"class":185}," pillow\n",[14,108001,103121],{},[27,108003,108005],{"className":24163,"code":108004,"language":24165,"meta":32,"style":32},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[34,108006,108007,108024,108033],{"__ignoreMap":32},[37,108008,108009,108011,108013,108015,108018,108020,108022],{"class":39,"line":40},[37,108010,30672],{"class":2320},[37,108012,29518],{"class":185},[37,108014,25457],{"class":61},[37,108016,108017],{"class":185}," mujoco-render",[37,108019,101260],{"class":185},[37,108021,101263],{"class":61},[37,108023,101266],{"class":61},[37,108025,108026,108028,108030],{"class":39,"line":47},[37,108027,30672],{"class":2320},[37,108029,101273],{"class":185},[37,108031,108032],{"class":185}," mujoco-render\n",[37,108034,108035,108037,108039,108041,108043],{"class":39,"line":104},[37,108036,24172],{"class":2320},[37,108038,24175],{"class":185},[37,108040,101215],{"class":185},[37,108042,107996],{"class":185},[37,108044,107999],{"class":185},[14,108046,108047],{},"离屏渲染后端:",[27,108049,108051],{"className":24163,"code":108050,"language":24165,"meta":32,"style":32},"export MUJOCO_GL=egl\n",[34,108052,108053],{"__ignoreMap":32},[37,108054,108055,108057,108060,108062],{"class":39,"line":40},[37,108056,25384],{"class":54},[37,108058,108059],{"class":50}," MUJOCO_GL",[37,108061,55],{"class":54},[37,108063,108064],{"class":50},"egl\n",[14,108066,108067],{},"或:",[27,108069,108071],{"className":24163,"code":108070,"language":24165,"meta":32,"style":32},"export MUJOCO_GL=osmesa\n",[34,108072,108073],{"__ignoreMap":32},[37,108074,108075,108077,108079,108081],{"class":39,"line":40},[37,108076,25384],{"class":54},[37,108078,108059],{"class":50},[37,108080,55],{"class":54},[37,108082,108083],{"class":50},"osmesa\n",[14,108085,108086,108087,108090,108091,28727],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[34,108088,108089],{},"egl"," 失败，再尝试 ",[34,108092,108093],{},"osmesa",[14,108095,108096,108097,108100],{},"如果你在本机桌面环境运行，通常先不要设置 ",[34,108098,108099],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[469,108102,101330],{"id":101329},[14,108104,108105],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,108107,108108],{},"典型 viewer 流程:",[27,108110,108112],{"className":29,"code":108111,"language":31,"meta":32,"style":32},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[34,108113,108114,108127,108134,108138],{"__ignoreMap":32},[37,108115,108116,108119,108122,108124],{"class":39,"line":40},[37,108117,108118],{"class":54},"with",[37,108120,108121],{"class":50}," mujoco.viewer.launch_passive(model, data) ",[37,108123,31722],{"class":54},[37,108125,108126],{"class":50}," viewer:\n",[37,108128,108129,108131],{"class":39,"line":47},[37,108130,2608],{"class":54},[37,108132,108133],{"class":50}," viewer.is_running():\n",[37,108135,108136],{"class":39,"line":104},[37,108137,101801],{"class":50},[37,108139,108140],{"class":39,"line":113},[37,108141,108142],{"class":50},"        viewer.sync()\n",[14,108144,108145],{},"典型 renderer 流程:",[27,108147,108149],{"className":29,"code":108148,"language":31,"meta":32,"style":32},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[34,108150,108151,108177,108181,108186],{"__ignoreMap":32},[37,108152,108153,108155,108157,108160,108162,108164,108166,108168,108170,108172,108175],{"class":39,"line":40},[37,108154,107855],{"class":50},[37,108156,55],{"class":54},[37,108158,108159],{"class":50}," mujoco.Renderer(model, ",[37,108161,25323],{"class":159},[37,108163,55],{"class":54},[37,108165,42679],{"class":61},[37,108167,12776],{"class":50},[37,108169,25319],{"class":159},[37,108171,55],{"class":54},[37,108173,108174],{"class":61},"640",[37,108176,280],{"class":50},[37,108178,108179],{"class":39,"line":47},[37,108180,104790],{"class":50},[37,108182,108183],{"class":39,"line":104},[37,108184,108185],{"class":50},"renderer.update_scene(data)\n",[37,108187,108188,108190,108192],{"class":39,"line":113},[37,108189,107865],{"class":50},[37,108191,55],{"class":54},[37,108193,107870],{"class":50},[498,108195,108197],{"id":108196},"viewer-的同步逻辑","viewer 的同步逻辑",[14,108199,108200],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[27,108202,108204],{"className":29,"code":108203,"language":31,"meta":32,"style":32},"mujoco.mj_step(model, data)\nviewer.sync()\n",[34,108205,108206,108210],{"__ignoreMap":32},[37,108207,108208],{"class":39,"line":40},[37,108209,104790],{"class":50},[37,108211,108212],{"class":39,"line":47},[37,108213,108214],{"class":50},"viewer.sync()\n",[14,108216,108217,108219,108220,108223],{},[34,108218,101500],{}," 负责算物理，",[34,108221,108222],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[498,108225,108227],{"id":108226},"为什么要-sleep","为什么要 sleep",[14,108229,108230],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[27,108232,108234],{"className":29,"code":108233,"language":31,"meta":32,"style":32},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[34,108235,108236],{"__ignoreMap":32},[37,108237,108238,108241,108243,108246,108248,108251,108253],{"class":39,"line":40},[37,108239,108240],{"class":50},"sleep_time ",[37,108242,55],{"class":54},[37,108244,108245],{"class":50}," model.opt.timestep ",[37,108247,384],{"class":54},[37,108249,108250],{"class":50}," (time.time() ",[37,108252,384],{"class":54},[37,108254,108255],{"class":50}," step_start)\n",[14,108257,108258],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[498,108260,108262],{"id":108261},"renderer-输出是什么","renderer 输出是什么",[27,108264,108266],{"className":29,"code":108265,"language":31,"meta":32,"style":32},"image = renderer.render()\n",[34,108267,108268],{"__ignoreMap":32},[37,108269,108270,108272,108274],{"class":39,"line":40},[37,108271,107865],{"class":50},[37,108273,55],{"class":54},[37,108275,107870],{"class":50},[14,108277,108278],{},"得到的是 NumPy 数组，形状通常是：",[27,108280,108283],{"className":108281,"code":108282,"language":5536,"meta":32},[5534],"(height, width, 3)\n",[34,108284,108282],{"__ignoreMap":32},[14,108286,108287],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[27,108289,108291],{"className":29,"code":108290,"language":31,"meta":32,"style":32},"Image.fromarray(image).save(\"render_output.png\")\n",[34,108292,108293],{"__ignoreMap":32},[37,108294,108295,108298,108301],{"class":39,"line":40},[37,108296,108297],{"class":50},"Image.fromarray(image).save(",[37,108299,108300],{"class":185},"\"render_output.png\"",[37,108302,280],{"class":50},[469,108304,101538],{"id":101537},[14,108306,108307],{},"交互式 Viewer:",[27,108309,108311],{"className":29,"code":108310,"language":31,"meta":32,"style":32},"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",[34,108312,108313,108319,108323,108329,108335,108339,108343,108351,108356,108360,108364,108368,108373,108378,108382,108386,108390,108395,108399,108403,108407,108411,108415,108419,108431,108443,108451,108455,108465,108485,108495,108500,108505,108509,108526,108539,108544,108548,108552,108564],{"__ignoreMap":32},[37,108314,108315,108317],{"class":39,"line":40},[37,108316,30732],{"class":54},[37,108318,32167],{"class":50},[37,108320,108321],{"class":39,"line":47},[37,108322,2757],{"emptyLinePlaceholder":454},[37,108324,108325,108327],{"class":39,"line":104},[37,108326,30732],{"class":54},[37,108328,101586],{"class":50},[37,108330,108331,108333],{"class":39,"line":113},[37,108332,30732],{"class":54},[37,108334,107837],{"class":50},[37,108336,108337],{"class":39,"line":189},[37,108338,2757],{"emptyLinePlaceholder":454},[37,108340,108341],{"class":39,"line":195},[37,108342,2757],{"emptyLinePlaceholder":454},[37,108344,108345,108347,108349],{"class":39,"line":201},[37,108346,101599],{"class":61},[37,108348,13905],{"class":54},[37,108350,101604],{"class":185},[37,108352,108353],{"class":39,"line":207},[37,108354,108355],{"class":185},"\u003Cmujoco model=\"viewer_demo\">\n",[37,108357,108358],{"class":39,"line":213},[37,108359,101614],{"class":185},[37,108361,108362],{"class":39,"line":218},[37,108363,2757],{"emptyLinePlaceholder":454},[37,108365,108366],{"class":39,"line":227},[37,108367,101623],{"class":185},[37,108369,108370],{"class":39,"line":232},[37,108371,108372],{"class":185},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[37,108374,108375],{"class":39,"line":238},[37,108376,108377],{"class":185},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[37,108379,108380],{"class":39,"line":244},[37,108381,2757],{"emptyLinePlaceholder":454},[37,108383,108384],{"class":39,"line":250},[37,108385,101637],{"class":185},[37,108387,108388],{"class":39,"line":256},[37,108389,101642],{"class":185},[37,108391,108392],{"class":39,"line":261},[37,108393,108394],{"class":185},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[37,108396,108397],{"class":39,"line":267},[37,108398,101652],{"class":185},[37,108400,108401],{"class":39,"line":283},[37,108402,101657],{"class":185},[37,108404,108405],{"class":39,"line":288},[37,108406,101662],{"class":185},[37,108408,108409],{"class":39,"line":294},[37,108410,95983],{"class":185},[37,108412,108413],{"class":39,"line":300},[37,108414,2757],{"emptyLinePlaceholder":454},[37,108416,108417],{"class":39,"line":306},[37,108418,2757],{"emptyLinePlaceholder":454},[37,108420,108421,108423,108425,108427,108429],{"class":39,"line":312},[37,108422,32285],{"class":54},[37,108424,2330],{"class":2320},[37,108426,101683],{"class":50},[37,108428,95971],{"class":61},[37,108430,4089],{"class":50},[37,108432,108433,108435,108437,108439,108441],{"class":39,"line":317},[37,108434,101692],{"class":50},[37,108436,55],{"class":54},[37,108438,101697],{"class":50},[37,108440,101599],{"class":61},[37,108442,280],{"class":50},[37,108444,108445,108447,108449],{"class":39,"line":323},[37,108446,101706],{"class":50},[37,108448,55],{"class":54},[37,108450,101711],{"class":50},[37,108452,108453],{"class":39,"line":337},[37,108454,2757],{"emptyLinePlaceholder":454},[37,108456,108457,108459,108461,108463],{"class":39,"line":342},[37,108458,34515],{"class":54},[37,108460,108121],{"class":50},[37,108462,31722],{"class":54},[37,108464,108126],{"class":50},[37,108466,108467,108470,108473,108475,108478,108480,108483],{"class":39,"line":347},[37,108468,108469],{"class":54},"        while",[37,108471,108472],{"class":50}," viewer.is_running() ",[37,108474,30802],{"class":54},[37,108476,108477],{"class":50}," data.time ",[37,108479,1418],{"class":54},[37,108481,108482],{"class":61}," 5.0",[37,108484,4089],{"class":50},[37,108486,108487,108490,108492],{"class":39,"line":352},[37,108488,108489],{"class":50},"            step_start ",[37,108491,55],{"class":54},[37,108493,108494],{"class":50}," time.time()\n",[37,108496,108497],{"class":39,"line":357},[37,108498,108499],{"class":50},"            mujoco.mj_step(model, data)\n",[37,108501,108502],{"class":39,"line":362},[37,108503,108504],{"class":50},"            viewer.sync()\n",[37,108506,108507],{"class":39,"line":367},[37,108508,2757],{"emptyLinePlaceholder":454},[37,108510,108511,108514,108516,108518,108520,108522,108524],{"class":39,"line":373},[37,108512,108513],{"class":50},"            sleep_time ",[37,108515,55],{"class":54},[37,108517,108245],{"class":50},[37,108519,384],{"class":54},[37,108521,108250],{"class":50},[37,108523,384],{"class":54},[37,108525,108255],{"class":50},[37,108527,108528,108530,108533,108535,108537],{"class":39,"line":392},[37,108529,4992],{"class":54},[37,108531,108532],{"class":50}," sleep_time ",[37,108534,1468],{"class":54},[37,108536,4443],{"class":61},[37,108538,4089],{"class":50},[37,108540,108541],{"class":39,"line":398},[37,108542,108543],{"class":50},"                time.sleep(sleep_time)\n",[37,108545,108546],{"class":39,"line":409},[37,108547,2757],{"emptyLinePlaceholder":454},[37,108549,108550],{"class":39,"line":415},[37,108551,2757],{"emptyLinePlaceholder":454},[37,108553,108554,108556,108558,108560,108562],{"class":39,"line":420},[37,108555,1907],{"class":54},[37,108557,31559],{"class":61},[37,108559,101844],{"class":54},[37,108561,101847],{"class":185},[37,108563,4089],{"class":50},[37,108565,108566],{"class":39,"line":425},[37,108567,101854],{"class":50},[14,108569,103855],{},[27,108571,108573],{"className":24163,"code":108572,"language":24165,"meta":32,"style":32},"touch ch5_viewer.py\n",[34,108574,108575],{"__ignoreMap":32},[37,108576,108577,108579],{"class":39,"line":40},[37,108578,101568],{"class":2320},[37,108580,108581],{"class":185}," ch5_viewer.py\n",[14,108583,108584],{},"离屏 Renderer 保存图片:",[27,108586,108588],{"className":29,"code":108587,"language":31,"meta":32,"style":32},"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",[34,108589,108590,108602,108606,108612,108622,108626,108630,108638,108643,108647,108651,108655,108659,108664,108668,108672,108676,108680,108684,108688,108692,108696,108700,108704,108708,108720,108732,108740,108765,108769,108785,108789,108793,108808,108817,108821,108835,108840,108845,108849,108861,108873,108877,108881,108893],{"__ignoreMap":32},[37,108591,108592,108594,108597,108599],{"class":39,"line":40},[37,108593,31076],{"class":54},[37,108595,108596],{"class":50}," pathlib ",[37,108598,30732],{"class":54},[37,108600,108601],{"class":50}," Path\n",[37,108603,108604],{"class":39,"line":47},[37,108605,2757],{"emptyLinePlaceholder":454},[37,108607,108608,108610],{"class":39,"line":104},[37,108609,30732],{"class":54},[37,108611,101586],{"class":50},[37,108613,108614,108616,108618,108620],{"class":39,"line":113},[37,108615,31076],{"class":54},[37,108617,47600],{"class":61},[37,108619,47603],{"class":54},[37,108621,47606],{"class":50},[37,108623,108624],{"class":39,"line":189},[37,108625,2757],{"emptyLinePlaceholder":454},[37,108627,108628],{"class":39,"line":195},[37,108629,2757],{"emptyLinePlaceholder":454},[37,108631,108632,108634,108636],{"class":39,"line":201},[37,108633,101599],{"class":61},[37,108635,13905],{"class":54},[37,108637,101604],{"class":185},[37,108639,108640],{"class":39,"line":207},[37,108641,108642],{"class":185},"\u003Cmujoco model=\"renderer_demo\">\n",[37,108644,108645],{"class":39,"line":213},[37,108646,101614],{"class":185},[37,108648,108649],{"class":39,"line":218},[37,108650,2757],{"emptyLinePlaceholder":454},[37,108652,108653],{"class":39,"line":227},[37,108654,101623],{"class":185},[37,108656,108657],{"class":39,"line":232},[37,108658,108372],{"class":185},[37,108660,108661],{"class":39,"line":238},[37,108662,108663],{"class":185},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[37,108665,108666],{"class":39,"line":244},[37,108667,108377],{"class":185},[37,108669,108670],{"class":39,"line":250},[37,108671,2757],{"emptyLinePlaceholder":454},[37,108673,108674],{"class":39,"line":256},[37,108675,101637],{"class":185},[37,108677,108678],{"class":39,"line":261},[37,108679,101642],{"class":185},[37,108681,108682],{"class":39,"line":267},[37,108683,108394],{"class":185},[37,108685,108686],{"class":39,"line":283},[37,108687,101652],{"class":185},[37,108689,108690],{"class":39,"line":288},[37,108691,101657],{"class":185},[37,108693,108694],{"class":39,"line":294},[37,108695,101662],{"class":185},[37,108697,108698],{"class":39,"line":300},[37,108699,95983],{"class":185},[37,108701,108702],{"class":39,"line":306},[37,108703,2757],{"emptyLinePlaceholder":454},[37,108705,108706],{"class":39,"line":312},[37,108707,2757],{"emptyLinePlaceholder":454},[37,108709,108710,108712,108714,108716,108718],{"class":39,"line":317},[37,108711,32285],{"class":54},[37,108713,2330],{"class":2320},[37,108715,101683],{"class":50},[37,108717,95971],{"class":61},[37,108719,4089],{"class":50},[37,108721,108722,108724,108726,108728,108730],{"class":39,"line":323},[37,108723,101692],{"class":50},[37,108725,55],{"class":54},[37,108727,101697],{"class":50},[37,108729,101599],{"class":61},[37,108731,280],{"class":50},[37,108733,108734,108736,108738],{"class":39,"line":337},[37,108735,101706],{"class":50},[37,108737,55],{"class":54},[37,108739,101711],{"class":50},[37,108741,108742,108745,108747,108749,108751,108753,108755,108757,108759,108761,108763],{"class":39,"line":342},[37,108743,108744],{"class":50},"    renderer ",[37,108746,55],{"class":54},[37,108748,108159],{"class":50},[37,108750,25323],{"class":159},[37,108752,55],{"class":54},[37,108754,42679],{"class":61},[37,108756,12776],{"class":50},[37,108758,25319],{"class":159},[37,108760,55],{"class":54},[37,108762,108174],{"class":61},[37,108764,280],{"class":50},[37,108766,108767],{"class":39,"line":347},[37,108768,2757],{"emptyLinePlaceholder":454},[37,108770,108771,108773,108775,108777,108779,108781,108783],{"class":39,"line":352},[37,108772,3551],{"class":54},[37,108774,101786],{"class":50},[37,108776,26385],{"class":54},[37,108778,32781],{"class":61},[37,108780,165],{"class":50},[37,108782,154],{"class":61},[37,108784,31125],{"class":50},[37,108786,108787],{"class":39,"line":357},[37,108788,101801],{"class":50},[37,108790,108791],{"class":39,"line":362},[37,108792,2757],{"emptyLinePlaceholder":454},[37,108794,108795,108798,108801,108803,108806],{"class":39,"line":367},[37,108796,108797],{"class":50},"    renderer.update_scene(data, ",[37,108799,108800],{"class":159},"camera",[37,108802,55],{"class":54},[37,108804,108805],{"class":185},"\"fixed_camera\"",[37,108807,280],{"class":50},[37,108809,108810,108813,108815],{"class":39,"line":373},[37,108811,108812],{"class":50},"    image ",[37,108814,55],{"class":54},[37,108816,107870],{"class":50},[37,108818,108819],{"class":39,"line":392},[37,108820,2757],{"emptyLinePlaceholder":454},[37,108822,108823,108826,108828,108831,108833],{"class":39,"line":398},[37,108824,108825],{"class":50},"    output_path ",[37,108827,55],{"class":54},[37,108829,108830],{"class":50}," Path(",[37,108832,108300],{"class":185},[37,108834,280],{"class":50},[37,108836,108837],{"class":39,"line":409},[37,108838,108839],{"class":50},"    Image.fromarray(image).save(output_path)\n",[37,108841,108842],{"class":39,"line":415},[37,108843,108844],{"class":50},"    renderer.close()\n",[37,108846,108847],{"class":39,"line":420},[37,108848,2757],{"emptyLinePlaceholder":454},[37,108850,108851,108853,108855,108858],{"class":39,"line":425},[37,108852,31638],{"class":61},[37,108854,165],{"class":50},[37,108856,108857],{"class":185},"\"saved:\"",[37,108859,108860],{"class":50},", output_path.resolve())\n",[37,108862,108863,108865,108867,108870],{"class":39,"line":431},[37,108864,31638],{"class":61},[37,108866,165],{"class":50},[37,108868,108869],{"class":185},"\"image shape:\"",[37,108871,108872],{"class":50},", image.shape)\n",[37,108874,108875],{"class":39,"line":436},[37,108876,2757],{"emptyLinePlaceholder":454},[37,108878,108879],{"class":39,"line":442},[37,108880,2757],{"emptyLinePlaceholder":454},[37,108882,108883,108885,108887,108889,108891],{"class":39,"line":8374},[37,108884,1907],{"class":54},[37,108886,31559],{"class":61},[37,108888,101844],{"class":54},[37,108890,101847],{"class":185},[37,108892,4089],{"class":50},[37,108894,108895],{"class":39,"line":8386},[37,108896,101854],{"class":50},[14,108898,103855],{},[27,108900,108902],{"className":24163,"code":108901,"language":24165,"meta":32,"style":32},"touch ch5_renderer.py\n",[34,108903,108904],{"__ignoreMap":32},[37,108905,108906,108908],{"class":39,"line":40},[37,108907,101568],{"class":2320},[37,108909,108910],{"class":185}," ch5_renderer.py\n",[498,108912,101857],{"id":101857},[14,108914,108915],{},"viewer 上下文：",[27,108917,108919],{"className":29,"code":108918,"language":31,"meta":32,"style":32},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[34,108920,108921],{"__ignoreMap":32},[37,108922,108923,108925,108927,108929],{"class":39,"line":40},[37,108924,108118],{"class":54},[37,108926,108121],{"class":50},[37,108928,31722],{"class":54},[37,108930,108126],{"class":50},[14,108932,108933,108935],{},[34,108934,108118],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108937,108938],{},"窗口循环：",[27,108940,108942],{"className":29,"code":108941,"language":31,"meta":32,"style":32},"while viewer.is_running() and data.time \u003C 5.0:\n",[34,108943,108944],{"__ignoreMap":32},[37,108945,108946,108949,108951,108953,108955,108957,108959],{"class":39,"line":40},[37,108947,108948],{"class":54},"while",[37,108950,108472],{"class":50},[37,108952,30802],{"class":54},[37,108954,108477],{"class":50},[37,108956,1418],{"class":54},[37,108958,108482],{"class":61},[37,108960,4089],{"class":50},[14,108962,108963],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108965,108966],{},"固定相机：",[27,108968,108970],{"className":53403,"code":108969,"language":53405,"meta":32,"style":32},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[34,108971,108972],{"__ignoreMap":32},[37,108973,108974,108976,108978,108980,108982,108984,108986,108988,108991,108994,108996,108999],{"class":39,"line":40},[37,108975,1418],{"class":50},[37,108977,108800],{"class":51636},[37,108979,15261],{"class":2320},[37,108981,55],{"class":50},[37,108983,108805],{"class":185},[37,108985,101391],{"class":2320},[37,108987,55],{"class":50},[37,108989,108990],{"class":185},"\"1.5 -2.0 1.2\"",[37,108992,108993],{"class":2320}," xyaxes",[37,108995,55],{"class":50},[37,108997,108998],{"class":185},"\"1 0.75 0 0 0 1\"",[37,109000,101429],{"class":50},[14,109002,109003],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[498,109005,109007],{"id":109006},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[27,109009,109011],{"className":29,"code":109010,"language":31,"meta":32,"style":32},"import time\n",[34,109012,109013],{"__ignoreMap":32},[37,109014,109015,109017],{"class":39,"line":40},[37,109016,30732],{"class":54},[37,109018,32167],{"class":50},[14,109020,109021],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[27,109023,109025],{"className":29,"code":109024,"language":31,"meta":32,"style":32},"import mujoco\nimport mujoco.viewer\n",[34,109026,109027,109033],{"__ignoreMap":32},[37,109028,109029,109031],{"class":39,"line":40},[37,109030,30732],{"class":54},[37,109032,101586],{"class":50},[37,109034,109035,109037],{"class":39,"line":47},[37,109036,30732],{"class":54},[37,109038,107837],{"class":50},[14,109040,109041],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[27,109043,109044],{"className":29,"code":108918,"language":31,"meta":32,"style":32},[34,109045,109046],{"__ignoreMap":32},[37,109047,109048,109050,109052,109054],{"class":39,"line":40},[37,109049,108118],{"class":54},[37,109051,108121],{"class":50},[37,109053,31722],{"class":54},[37,109055,108126],{"class":50},[14,109057,109058,109059,109062],{},"打开一个 viewer 窗口。",[34,109060,109061],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[27,109064,109065],{"className":29,"code":108941,"language":31,"meta":32,"style":32},[34,109066,109067],{"__ignoreMap":32},[37,109068,109069,109071,109073,109075,109077,109079,109081],{"class":39,"line":40},[37,109070,108948],{"class":54},[37,109072,108472],{"class":50},[37,109074,30802],{"class":54},[37,109076,108477],{"class":50},[37,109078,1418],{"class":54},[37,109080,108482],{"class":61},[37,109082,4089],{"class":50},[14,109084,109085,109086,109089],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[34,109087,109088],{},"viewer.is_running()"," 会变成 false，循环结束。",[27,109091,109093],{"className":29,"code":109092,"language":31,"meta":32,"style":32},"step_start = time.time()\n",[34,109094,109095],{"__ignoreMap":32},[37,109096,109097,109100,109102],{"class":39,"line":40},[37,109098,109099],{"class":50},"step_start ",[37,109101,55],{"class":54},[37,109103,108494],{"class":50},[14,109105,109106],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[27,109108,109109],{"className":29,"code":108203,"language":31,"meta":32,"style":32},[34,109110,109111,109115],{"__ignoreMap":32},[37,109112,109113],{"class":39,"line":40},[37,109114,104790],{"class":50},[37,109116,109117],{"class":39,"line":47},[37,109118,108214],{"class":50},[14,109120,109121,109123,109124,109126,109127,109129,109130,109133],{},[34,109122,101500],{}," 推进物理仿真。",[34,109125,108222],{}," 把最新的 ",[34,109128,33738],{}," 同步到窗口里显示。没有 ",[34,109131,109132],{},"sync()","，窗口可能看不到最新状态。",[27,109135,109136],{"className":29,"code":108233,"language":31,"meta":32,"style":32},[34,109137,109138],{"__ignoreMap":32},[37,109139,109140,109142,109144,109146,109148,109150,109152],{"class":39,"line":40},[37,109141,108240],{"class":50},[37,109143,55],{"class":54},[37,109145,108245],{"class":50},[37,109147,384],{"class":54},[37,109149,108250],{"class":50},[37,109151,384],{"class":54},[37,109153,108255],{"class":50},[14,109155,109156],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[27,109158,109160],{"className":29,"code":109159,"language":31,"meta":32,"style":32},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[34,109161,109162,109174],{"__ignoreMap":32},[37,109163,109164,109166,109168,109170,109172],{"class":39,"line":40},[37,109165,1907],{"class":54},[37,109167,108532],{"class":50},[37,109169,1468],{"class":54},[37,109171,4443],{"class":61},[37,109173,4089],{"class":50},[37,109175,109176],{"class":39,"line":47},[37,109177,109178],{"class":50},"    time.sleep(sleep_time)\n",[14,109180,109181],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[498,109183,109185],{"id":109184},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[27,109187,109189],{"className":29,"code":109188,"language":31,"meta":32,"style":32},"from pathlib import Path\n",[34,109190,109191],{"__ignoreMap":32},[37,109192,109193,109195,109197,109199],{"class":39,"line":40},[37,109194,31076],{"class":54},[37,109196,108596],{"class":50},[37,109198,30732],{"class":54},[37,109200,108601],{"class":50},[14,109202,109203,109204,109207,109208,109211],{},"导入 ",[34,109205,109206],{},"Path","，用来处理文件路径。相比直接写字符串，",[34,109209,109210],{},"Path(\"render_output.png\")"," 更清晰。",[27,109213,109215],{"className":29,"code":109214,"language":31,"meta":32,"style":32},"from PIL import Image\n",[34,109216,109217],{"__ignoreMap":32},[37,109218,109219,109221,109223,109225],{"class":39,"line":40},[37,109220,31076],{"class":54},[37,109222,47600],{"class":61},[37,109224,47603],{"class":54},[37,109226,47606],{"class":50},[14,109228,109229],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[27,109231,109232],{"className":53403,"code":108969,"language":53405,"meta":32,"style":32},[34,109233,109234],{"__ignoreMap":32},[37,109235,109236,109238,109240,109242,109244,109246,109248,109250,109252,109254,109256,109258],{"class":39,"line":40},[37,109237,1418],{"class":50},[37,109239,108800],{"class":51636},[37,109241,15261],{"class":2320},[37,109243,55],{"class":50},[37,109245,108805],{"class":185},[37,109247,101391],{"class":2320},[37,109249,55],{"class":50},[37,109251,108990],{"class":185},[37,109253,108993],{"class":2320},[37,109255,55],{"class":50},[37,109257,108998],{"class":185},[37,109259,101429],{"class":50},[14,109261,109262,109263,109265,109266,109268,109269,109272,109273,109275],{},"定义一个相机。",[34,109264,80145],{}," 是相机名字。",[34,109267,104431],{}," 是相机在世界里的位置。",[34,109270,109271],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[34,109274,104431],{}," 来调视角。",[27,109277,109279],{"className":29,"code":109278,"language":31,"meta":32,"style":32},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[34,109280,109281],{"__ignoreMap":32},[37,109282,109283,109285,109287,109289,109291,109293,109295,109297,109299,109301,109303],{"class":39,"line":40},[37,109284,107855],{"class":50},[37,109286,55],{"class":54},[37,109288,108159],{"class":50},[37,109290,25323],{"class":159},[37,109292,55],{"class":54},[37,109294,42679],{"class":61},[37,109296,12776],{"class":50},[37,109298,25319],{"class":159},[37,109300,55],{"class":54},[37,109302,108174],{"class":61},[37,109304,280],{"class":50},[14,109306,109307,109308,101303,109310,109312],{},"创建离屏渲染器。",[34,109309,25323],{},[34,109311,25319],{}," 决定输出图片大小。",[27,109314,109315],{"className":29,"code":101961,"language":31,"meta":32,"style":32},[34,109316,109317,109333],{"__ignoreMap":32},[37,109318,109319,109321,109323,109325,109327,109329,109331],{"class":39,"line":40},[37,109320,3375],{"class":54},[37,109322,101786],{"class":50},[37,109324,26385],{"class":54},[37,109326,32781],{"class":61},[37,109328,165],{"class":50},[37,109330,154],{"class":61},[37,109332,31125],{"class":50},[37,109334,109335],{"class":39,"line":47},[37,109336,101984],{"class":50},[14,109338,109339],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[27,109341,109343],{"className":29,"code":109342,"language":31,"meta":32,"style":32},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[34,109344,109345],{"__ignoreMap":32},[37,109346,109347,109350,109352,109354,109356],{"class":39,"line":40},[37,109348,109349],{"class":50},"renderer.update_scene(data, ",[37,109351,108800],{"class":159},[37,109353,55],{"class":54},[37,109355,108805],{"class":185},[37,109357,280],{"class":50},[14,109359,109360,109361,109363,109364,109367],{},"告诉 renderer：用当前 ",[34,109362,33738],{}," 的状态更新画面，并使用名为 ",[34,109365,109366],{},"fixed_camera"," 的相机视角。",[27,109369,109370],{"className":29,"code":108265,"language":31,"meta":32,"style":32},[34,109371,109372],{"__ignoreMap":32},[37,109373,109374,109376,109378],{"class":39,"line":40},[37,109375,107865],{"class":50},[37,109377,55],{"class":54},[37,109379,107870],{"class":50},[14,109381,109382,109383,109386],{},"真正渲染出图像。",[34,109384,109385],{},"image"," 是一个 NumPy 数组，不是文件。",[27,109388,109390],{"className":29,"code":109389,"language":31,"meta":32,"style":32},"Image.fromarray(image).save(output_path)\n",[34,109391,109392],{"__ignoreMap":32},[37,109393,109394],{"class":39,"line":40},[37,109395,109389],{"class":50},[14,109397,109398,109399,28727],{},"把数组转换成图片，并保存到 ",[34,109400,109401],{},"render_output.png",[27,109403,109405],{"className":29,"code":109404,"language":31,"meta":32,"style":32},"renderer.close()\n",[34,109406,109407],{"__ignoreMap":32},[37,109408,109409],{"class":39,"line":40},[37,109410,109404],{"class":50},[14,109412,109413],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[469,109415,102601],{"id":102600},[14,109417,109418,109419,109421,109422,28727],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[34,109420,109401],{},"，并输出图像数组形状，例如 ",[34,109423,109424],{},"(480, 640, 3)",[14,109426,109427],{},"如果图片里看不到方块，先检查：",[481,109429,109430,109433,109436],{},[484,109431,109432],{},"方块是否掉到相机视野外。",[484,109434,109435],{},"camera 位置是否合理。",[484,109437,109438,109439,109442],{},"是否在 ",[34,109440,109441],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[469,109444,102633],{"id":102632},[14,109446,109447],{},"运行 viewer:",[27,109449,109451],{"className":24163,"code":109450,"language":24165,"meta":32,"style":32},"python ch5_viewer.py\n",[34,109452,109453],{"__ignoreMap":32},[37,109454,109455,109457],{"class":39,"line":40},[37,109456,31],{"class":2320},[37,109458,108581],{"class":185},[14,109460,109461],{},"运行 renderer:",[27,109463,109465],{"className":24163,"code":109464,"language":24165,"meta":32,"style":32},"python ch5_renderer.py\n",[34,109466,109467],{"__ignoreMap":32},[37,109468,109469,109471],{"class":39,"line":40},[37,109470,31],{"class":2320},[37,109472,108910],{"class":185},[14,109474,109475],{},"如果在服务器上运行:",[27,109477,109479],{"className":24163,"code":109478,"language":24165,"meta":32,"style":32},"MUJOCO_GL=egl python ch5_renderer.py\n",[34,109480,109481],{"__ignoreMap":32},[37,109482,109483,109485,109487,109489,109492],{"class":39,"line":40},[37,109484,108099],{"class":50},[37,109486,55],{"class":54},[37,109488,108089],{"class":185},[37,109490,109491],{"class":2320}," python",[37,109493,108910],{"class":185},[14,109495,108067],{},[27,109497,109499],{"className":24163,"code":109498,"language":24165,"meta":32,"style":32},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[34,109500,109501],{"__ignoreMap":32},[37,109502,109503,109505,109507,109509,109511],{"class":39,"line":40},[37,109504,108099],{"class":50},[37,109506,55],{"class":54},[37,109508,108093],{"class":185},[37,109510,109491],{"class":2320},[37,109512,108910],{"class":185},[14,109514,109515],{},"再做几个练习：",[481,109517,109518,109525,109528,109534],{},[484,109519,109520,109521,109524],{},"把 renderer 分辨率改成 ",[34,109522,109523],{},"height=240, width=320","，观察输出 shape。",[484,109526,109527],{},"把方块颜色改成蓝色，重新保存图片。",[484,109529,109530,109531,109533],{},"把相机 ",[34,109532,104431],{}," 改远一点，观察画面中物体是否变小。",[484,109535,109536,109537,102699,109540,109543],{},"把 viewer 示例中的 ",[34,109538,109539],{},"data.time \u003C 5.0",[34,109541,109542],{},"data.time \u003C 20.0","，观察更长时间。",[469,109545,102738],{"id":102737},[498,109547,109549],{"id":109548},"viewer-窗口打不开","viewer 窗口打不开",[14,109551,109552],{},"安装:",[27,109554,109556],{"className":24163,"code":109555,"language":24165,"meta":32,"style":32},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[34,109557,109558],{"__ignoreMap":32},[37,109559,109560,109562,109564,109566,109568,109570,109572,109574,109576,109578,109580],{"class":39,"line":40},[37,109561,24918],{"class":2320},[37,109563,26657],{"class":185},[37,109565,24175],{"class":185},[37,109567,26742],{"class":61},[37,109569,102791],{"class":185},[37,109571,101119],{"class":185},[37,109573,102796],{"class":185},[37,109575,101132],{"class":185},[37,109577,101138],{"class":185},[37,109579,101129],{"class":185},[37,109581,109582],{"class":185}," libXinerama\n",[498,109584,109586],{"id":109585},"glfwerror",[34,109587,109588],{},"GLFWError",[14,109590,109591],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[498,109593,109595],{"id":109594},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109597,109598,109599,82874,109601,109603],{},"尝试 ",[34,109600,101322],{},[34,109602,101325],{},"。可能存在版本差异。",[498,109605,109606],{"id":109606},"保存图片是黑的",[14,109608,102860],{},[481,109610,109611,109614,109617,109627],{},[484,109612,109613],{},"XML 里是否有 light。",[484,109615,109616],{},"相机是否对着模型。",[484,109618,109619,109620,109623,109624,28727],{},"是否先 ",[34,109621,109622],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[34,109625,109626],{},"renderer.render()",[484,109628,109629],{},"物体是否已经掉出视野。",[498,109631,109632],{"id":109632},"远程服务器没有显示器",[14,109634,109635],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[27,109637,109638],{"className":24163,"code":109478,"language":24165,"meta":32,"style":32},[34,109639,109640],{"__ignoreMap":32},[37,109641,109642,109644,109646,109648,109650],{"class":39,"line":40},[37,109643,108099],{"class":50},[37,109645,55],{"class":54},[37,109647,108089],{"class":185},[37,109649,109491],{"class":2320},[37,109651,108910],{"class":185},[14,109653,109654],{},"如果 EGL 不可用，再尝试：",[27,109656,109657],{"className":24163,"code":109498,"language":24165,"meta":32,"style":32},[34,109658,109659],{"__ignoreMap":32},[37,109660,109661,109663,109665,109667,109669],{"class":39,"line":40},[37,109662,108099],{"class":50},[37,109664,55],{"class":54},[37,109666,108093],{"class":185},[37,109668,109491],{"class":2320},[37,109670,108910],{"class":185},[469,109672,102892],{"id":102891},[14,109674,109675],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[481,109677,109678,109681,109684],{},[484,109679,109680],{},"先用 viewer 看模型和控制是否正常。",[484,109682,109683],{},"再用 renderer 保存图片或构造视觉观测。",[484,109685,109686],{},"最后把状态、动作、图像、奖励组织成训练数据。",[446,109688,109689],{},"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":32,"searchDepth":47,"depth":47,"links":109691},[109692,109693,109694,109699,109704,109705,109706,109713],{"id":100931,"depth":47,"text":100932},{"id":101054,"depth":47,"text":101055},{"id":101329,"depth":47,"text":101330,"children":109695},[109696,109697,109698],{"id":108196,"depth":104,"text":108197},{"id":108226,"depth":104,"text":108227},{"id":108261,"depth":104,"text":108262},{"id":101537,"depth":47,"text":101538,"children":109700},[109701,109702,109703],{"id":101857,"depth":104,"text":101857},{"id":109006,"depth":104,"text":109007},{"id":109184,"depth":104,"text":109185},{"id":102600,"depth":47,"text":102601},{"id":102632,"depth":47,"text":102633},{"id":102737,"depth":47,"text":102738,"children":109707},[109708,109709,109710,109711,109712],{"id":109548,"depth":104,"text":109549},{"id":109585,"depth":104,"text":109588},{"id":109594,"depth":104,"text":109595},{"id":109606,"depth":104,"text":109606},{"id":109632,"depth":104,"text":109632},{"id":102891,"depth":47,"text":102892},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107804,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109720,"title":109721,"body":109722,"description":32,"extension":452,"meta":111633,"navigation":454,"path":111634,"seo":111635,"stem":111636,"__hash__":111637},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109723,"toc":111609},[109724,109727,109729,109732,109734,109753,109756,109762,109765,109767,109769,109793,109795,109809,109811,109852,109854,109865,109867,109870,109876,109879,109913,109916,109948,109951,109983,109987,109990,110030,110033,110039,110042,110048,110052,110055,110061,110064,110068,110071,110111,110113,110126,110129,110131,110713,110715,110727,110730,110741,110743,110746,110765,110777,110780,110801,110804,110807,110850,110853,110856,110876,110883,110885,110903,110918,110921,110927,110930,110936,110953,110960,110991,111002,111036,111047,111064,111073,111081,111086,111100,111103,111124,111130,111144,111149,111179,111189,111214,111222,111245,111248,111264,111267,111275,111281,111303,111316,111337,111346,111385,111396,111398,111401,111407,111410,111413,111419,111422,111442,111445,111447,111486,111488,111491,111499,111502,111505,111532,111535,111545,111551,111554,111560,111562,111568,111572,111575,111577,111580,111604,111607],[10,109725,109721],{"id":109726},"_6控制任务cartpole",[469,109728,100932],{"id":100931},[14,109730,109731],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109733,104616],{},[481,109735,109736,109739,109741,109744,109747,109750],{},[484,109737,109738],{},"slide joint",[484,109740,106469],{},[484,109742,109743],{},"cart force actuator",[484,109745,109746],{},"状态观测",[484,109748,109749],{},"简单控制循环",[484,109751,109752],{},"reward 设计雏形",[14,109754,109755],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[27,109757,109760],{"className":109758,"code":109759,"language":5536,"meta":32},[5534],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[34,109761,109759],{"__ignoreMap":32},[14,109763,109764],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[469,109766,101055],{"id":101054},[14,109768,101058],{},[27,109770,109771],{"className":24163,"code":104673,"language":24165,"meta":32,"style":32},[34,109772,109773],{"__ignoreMap":32},[37,109774,109775,109777,109779,109781,109783,109785,109787,109789,109791],{"class":39,"line":40},[37,109776,24918],{"class":2320},[37,109778,26657],{"class":185},[37,109780,24175],{"class":185},[37,109782,26742],{"class":61},[37,109784,104688],{"class":185},[37,109786,101083],{"class":185},[37,109788,102786],{"class":185},[37,109790,101099],{"class":185},[37,109792,104697],{"class":185},[14,109794,103104],{},[27,109796,109797],{"className":24163,"code":101204,"language":24165,"meta":32,"style":32},[34,109798,109799],{"__ignoreMap":32},[37,109800,109801,109803,109805,109807],{"class":39,"line":40},[37,109802,24172],{"class":2320},[37,109804,24175],{"class":185},[37,109806,101215],{"class":185},[37,109808,101218],{"class":185},[14,109810,103121],{},[27,109812,109814],{"className":24163,"code":109813,"language":24165,"meta":32,"style":32},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[34,109815,109816,109833,109842],{"__ignoreMap":32},[37,109817,109818,109820,109822,109824,109827,109829,109831],{"class":39,"line":40},[37,109819,30672],{"class":2320},[37,109821,29518],{"class":185},[37,109823,25457],{"class":61},[37,109825,109826],{"class":185}," mujoco-cartpole",[37,109828,101260],{"class":185},[37,109830,101263],{"class":61},[37,109832,101266],{"class":61},[37,109834,109835,109837,109839],{"class":39,"line":47},[37,109836,30672],{"class":2320},[37,109838,101273],{"class":185},[37,109840,109841],{"class":185}," mujoco-cartpole\n",[37,109843,109844,109846,109848,109850],{"class":39,"line":104},[37,109845,24172],{"class":2320},[37,109847,24175],{"class":185},[37,109849,101215],{"class":185},[37,109851,101218],{"class":185},[14,109853,101289],{},[481,109855,109856,109859,109862],{},[484,109857,109858],{},"本章不依赖 Gymnasium。",[484,109860,109861],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[484,109863,109864],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[469,109866,101330],{"id":101329},[14,109868,109869],{},"Cartpole 的模型结构:",[27,109871,109874],{"className":109872,"code":109873,"language":5536,"meta":32},[5534],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[34,109875,109873],{"__ignoreMap":32},[14,109877,109878],{},"小车通过 slide joint 左右移动:",[27,109880,109882],{"className":53403,"code":109881,"language":53405,"meta":32,"style":32},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[34,109883,109884],{"__ignoreMap":32},[37,109885,109886,109888,109890,109892,109894,109897,109899,109901,109904,109906,109908,109911],{"class":39,"line":40},[37,109887,1418],{"class":50},[37,109889,103241],{"class":51636},[37,109891,15261],{"class":2320},[37,109893,55],{"class":50},[37,109895,109896],{"class":185},"\"cart_x\"",[37,109898,54160],{"class":2320},[37,109900,55],{"class":50},[37,109902,109903],{"class":185},"\"slide\"",[37,109905,106313],{"class":2320},[37,109907,55],{"class":50},[37,109909,109910],{"class":185},"\"1 0 0\"",[37,109912,101429],{"class":50},[14,109914,109915],{},"杆子通过 hinge joint 旋转:",[27,109917,109919],{"className":53403,"code":109918,"language":53405,"meta":32,"style":32},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[34,109920,109921],{"__ignoreMap":32},[37,109922,109923,109925,109927,109929,109931,109934,109936,109938,109940,109942,109944,109946],{"class":39,"line":40},[37,109924,1418],{"class":50},[37,109926,103241],{"class":51636},[37,109928,15261],{"class":2320},[37,109930,55],{"class":50},[37,109932,109933],{"class":185},"\"pole_hinge\"",[37,109935,54160],{"class":2320},[37,109937,55],{"class":50},[37,109939,106304],{"class":185},[37,109941,106313],{"class":2320},[37,109943,55],{"class":50},[37,109945,106318],{"class":185},[37,109947,101429],{"class":50},[14,109949,109950],{},"控制力作用在小车 slide joint 上:",[27,109952,109954],{"className":53403,"code":109953,"language":53405,"meta":32,"style":32},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[34,109955,109956],{"__ignoreMap":32},[37,109957,109958,109960,109962,109964,109966,109969,109971,109973,109975,109977,109979,109981],{"class":39,"line":40},[37,109959,1418],{"class":50},[37,109961,106359],{"class":51636},[37,109963,15261],{"class":2320},[37,109965,55],{"class":50},[37,109967,109968],{"class":185},"\"cart_motor\"",[37,109970,106369],{"class":2320},[37,109972,55],{"class":50},[37,109974,109896],{"class":185},[37,109976,106376],{"class":2320},[37,109978,55],{"class":50},[37,109980,54652],{"class":185},[37,109982,101429],{"class":50},[498,109984,109986],{"id":109985},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109988,109989],{},"这个简化模型有两个关节：",[661,109991,109992,110003],{},[664,109993,109994],{},[667,109995,109996,109998,110000],{},[670,109997,103044],{"align":24077},[670,109999,24078],{"align":24077},[670,110001,110002],{"align":24077},"对应状态",[708,110004,110005,110018],{},[667,110006,110007,110012,110015],{},[713,110008,110009],{"align":24077},[34,110010,110011],{},"cart_x",[713,110013,110014],{"align":24077},"slide",[713,110016,110017],{"align":24077},"小车 x 位置",[667,110019,110020,110025,110027],{},[713,110021,110022],{"align":24077},[34,110023,110024],{},"pole_hinge",[713,110026,106125],{"align":24077},[713,110028,110029],{"align":24077},"杆子角度",[14,110031,110032],{},"所以：",[27,110034,110037],{"className":110035,"code":110036,"language":5536,"meta":32},[5534],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[34,110038,110036],{"__ignoreMap":32},[14,110040,110041],{},"把它们拼起来就是观测：",[27,110043,110046],{"className":110044,"code":110045,"language":5536,"meta":32},[5534],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[34,110047,110045],{"__ignoreMap":32},[498,110049,110051],{"id":110050},"action-是什么","action 是什么",[14,110053,110054],{},"本章只有一个 actuator：",[27,110056,110059],{"className":110057,"code":110058,"language":5536,"meta":32},[5534],"data.ctrl[0] = action\n",[34,110060,110058],{"__ignoreMap":32},[14,110062,110063],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[498,110065,110067],{"id":110066},"reward-是什么","reward 是什么",[14,110069,110070],{},"奖励函数：",[27,110072,110074],{"className":29,"code":110073,"language":31,"meta":32,"style":32},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[34,110075,110076],{"__ignoreMap":32},[37,110077,110078,110080,110083,110085,110087,110089,110092,110094,110097,110099,110101,110103,110106,110108],{"class":39,"line":40},[37,110079,17387],{"class":54},[37,110081,110082],{"class":61}," float",[37,110084,165],{"class":50},[37,110086,102688],{"class":61},[37,110088,52607],{"class":54},[37,110090,110091],{"class":61}," 0.1",[37,110093,6866],{"class":54},[37,110095,110096],{"class":50}," cart_x ",[37,110098,967],{"class":54},[37,110100,110096],{"class":50},[37,110102,384],{"class":54},[37,110104,110105],{"class":50}," pole_angle ",[37,110107,967],{"class":54},[37,110109,110110],{"class":50}," pole_angle)\n",[14,110112,106511],{},[481,110114,110115,110120,110123],{},[484,110116,110117,110118,28727],{},"基础奖励是 ",[34,110119,102688],{},[484,110121,110122],{},"小车离中心越远，扣分越多。",[484,110124,110125],{},"杆子角度越大，扣分越多。",[14,110127,110128],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[469,110130,101538],{"id":101537},[27,110132,110134],{"className":29,"code":110133,"language":31,"meta":32,"style":32},"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",[34,110135,110136,110142,110152,110156,110160,110168,110173,110177,110181,110185,110190,110194,110199,110204,110209,110213,110218,110223,110228,110232,110236,110240,110244,110248,110253,110257,110261,110265,110269,110273,110283,110290,110294,110298,110312,110326,110339,110369,110373,110377,110389,110401,110409,110413,110426,110430,110434,110443,110447,110463,110473,110486,110499,110503,110526,110544,110548,110560,110564,110568,110578,110588,110592,110608,110649,110653,110673,110689,110693,110697,110709],{"__ignoreMap":32},[37,110137,110138,110140],{"class":39,"line":40},[37,110139,30732],{"class":54},[37,110141,101586],{"class":50},[37,110143,110144,110146,110148,110150],{"class":39,"line":47},[37,110145,30732],{"class":54},[37,110147,31719],{"class":50},[37,110149,31722],{"class":54},[37,110151,31725],{"class":50},[37,110153,110154],{"class":39,"line":104},[37,110155,2757],{"emptyLinePlaceholder":454},[37,110157,110158],{"class":39,"line":113},[37,110159,2757],{"emptyLinePlaceholder":454},[37,110161,110162,110164,110166],{"class":39,"line":189},[37,110163,101599],{"class":61},[37,110165,13905],{"class":54},[37,110167,101604],{"class":185},[37,110169,110170],{"class":39,"line":195},[37,110171,110172],{"class":185},"\u003Cmujoco model=\"cartpole\">\n",[37,110174,110175],{"class":39,"line":201},[37,110176,101614],{"class":185},[37,110178,110179],{"class":39,"line":207},[37,110180,2757],{"emptyLinePlaceholder":454},[37,110182,110183],{"class":39,"line":213},[37,110184,101623],{"class":185},[37,110186,110187],{"class":39,"line":218},[37,110188,110189],{"class":185},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[37,110191,110192],{"class":39,"line":227},[37,110193,2757],{"emptyLinePlaceholder":454},[37,110195,110196],{"class":39,"line":232},[37,110197,110198],{"class":185},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[37,110200,110201],{"class":39,"line":238},[37,110202,110203],{"class":185},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[37,110205,110206],{"class":39,"line":244},[37,110207,110208],{"class":185},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[37,110210,110211],{"class":39,"line":250},[37,110212,2757],{"emptyLinePlaceholder":454},[37,110214,110215],{"class":39,"line":256},[37,110216,110217],{"class":185},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[37,110219,110220],{"class":39,"line":261},[37,110221,110222],{"class":185},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[37,110224,110225],{"class":39,"line":267},[37,110226,110227],{"class":185},"        \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",[37,110229,110230],{"class":39,"line":283},[37,110231,106723],{"class":185},[37,110233,110234],{"class":39,"line":288},[37,110235,101652],{"class":185},[37,110237,110238],{"class":39,"line":294},[37,110239,101657],{"class":185},[37,110241,110242],{"class":39,"line":300},[37,110243,2757],{"emptyLinePlaceholder":454},[37,110245,110246],{"class":39,"line":306},[37,110247,106740],{"class":185},[37,110249,110250],{"class":39,"line":312},[37,110251,110252],{"class":185},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[37,110254,110255],{"class":39,"line":317},[37,110256,106750],{"class":185},[37,110258,110259],{"class":39,"line":323},[37,110260,101662],{"class":185},[37,110262,110263],{"class":39,"line":337},[37,110264,95983],{"class":185},[37,110266,110267],{"class":39,"line":342},[37,110268,2757],{"emptyLinePlaceholder":454},[37,110270,110271],{"class":39,"line":347},[37,110272,2757],{"emptyLinePlaceholder":454},[37,110274,110275,110277,110280],{"class":39,"line":352},[37,110276,32285],{"class":54},[37,110278,110279],{"class":2320}," get_observation",[37,110281,110282],{"class":50},"(data: mujoco.MjData) -> np.ndarray:\n",[37,110284,110285,110287],{"class":39,"line":357},[37,110286,4440],{"class":54},[37,110288,110289],{"class":50}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[37,110291,110292],{"class":39,"line":362},[37,110293,2757],{"emptyLinePlaceholder":454},[37,110295,110296],{"class":39,"line":367},[37,110297,2757],{"emptyLinePlaceholder":454},[37,110299,110300,110302,110305,110308,110310],{"class":39,"line":373},[37,110301,32285],{"class":54},[37,110303,110304],{"class":2320}," compute_reward",[37,110306,110307],{"class":50},"(obs: np.ndarray) -> ",[37,110309,568],{"class":61},[37,110311,4089],{"class":50},[37,110313,110314,110317,110319,110322,110324],{"class":39,"line":392},[37,110315,110316],{"class":50},"    cart_x ",[37,110318,55],{"class":54},[37,110320,110321],{"class":50}," obs[",[37,110323,135],{"class":61},[37,110325,389],{"class":50},[37,110327,110328,110331,110333,110335,110337],{"class":39,"line":398},[37,110329,110330],{"class":50},"    pole_angle ",[37,110332,55],{"class":54},[37,110334,110321],{"class":50},[37,110336,332],{"class":61},[37,110338,389],{"class":50},[37,110340,110341,110343,110345,110347,110349,110351,110353,110355,110357,110359,110361,110363,110365,110367],{"class":39,"line":409},[37,110342,4440],{"class":54},[37,110344,110082],{"class":61},[37,110346,165],{"class":50},[37,110348,102688],{"class":61},[37,110350,52607],{"class":54},[37,110352,110091],{"class":61},[37,110354,6866],{"class":54},[37,110356,110096],{"class":50},[37,110358,967],{"class":54},[37,110360,110096],{"class":50},[37,110362,384],{"class":54},[37,110364,110105],{"class":50},[37,110366,967],{"class":54},[37,110368,110110],{"class":50},[37,110370,110371],{"class":39,"line":415},[37,110372,2757],{"emptyLinePlaceholder":454},[37,110374,110375],{"class":39,"line":420},[37,110376,2757],{"emptyLinePlaceholder":454},[37,110378,110379,110381,110383,110385,110387],{"class":39,"line":425},[37,110380,32285],{"class":54},[37,110382,2330],{"class":2320},[37,110384,101683],{"class":50},[37,110386,95971],{"class":61},[37,110388,4089],{"class":50},[37,110390,110391,110393,110395,110397,110399],{"class":39,"line":431},[37,110392,101692],{"class":50},[37,110394,55],{"class":54},[37,110396,101697],{"class":50},[37,110398,101599],{"class":61},[37,110400,280],{"class":50},[37,110402,110403,110405,110407],{"class":39,"line":436},[37,110404,101706],{"class":50},[37,110406,55],{"class":54},[37,110408,101711],{"class":50},[37,110410,110411],{"class":39,"line":442},[37,110412,2757],{"emptyLinePlaceholder":454},[37,110414,110415,110417,110419,110421,110423],{"class":39,"line":8374},[37,110416,105354],{"class":50},[37,110418,332],{"class":61},[37,110420,4793],{"class":50},[37,110422,55],{"class":54},[37,110424,110425],{"class":61}," 0.1\n",[37,110427,110428],{"class":39,"line":8386},[37,110429,105367],{"class":50},[37,110431,110432],{"class":39,"line":8398},[37,110433,2757],{"emptyLinePlaceholder":454},[37,110435,110436,110439,110441],{"class":39,"line":10057},[37,110437,110438],{"class":50},"    total_reward ",[37,110440,55],{"class":54},[37,110442,105046],{"class":61},[37,110444,110445],{"class":39,"line":10082},[37,110446,2757],{"emptyLinePlaceholder":454},[37,110448,110449,110451,110453,110455,110457,110459,110461],{"class":39,"line":10105},[37,110450,3551],{"class":54},[37,110452,31954],{"class":50},[37,110454,26385],{"class":54},[37,110456,32781],{"class":61},[37,110458,165],{"class":50},[37,110460,6758],{"class":61},[37,110462,31125],{"class":50},[37,110464,110465,110468,110470],{"class":39,"line":10129},[37,110466,110467],{"class":50},"        obs ",[37,110469,55],{"class":54},[37,110471,110472],{"class":50}," get_observation(data)\n",[37,110474,110475,110478,110480,110482,110484],{"class":39,"line":10134},[37,110476,110477],{"class":50},"        pole_angle ",[37,110479,55],{"class":54},[37,110481,110321],{"class":50},[37,110483,332],{"class":61},[37,110485,389],{"class":50},[37,110487,110488,110491,110493,110495,110497],{"class":39,"line":10139},[37,110489,110490],{"class":50},"        pole_angular_velocity ",[37,110492,55],{"class":54},[37,110494,110321],{"class":50},[37,110496,62],{"class":61},[37,110498,389],{"class":50},[37,110500,110501],{"class":39,"line":10144},[37,110502,2757],{"emptyLinePlaceholder":454},[37,110504,110505,110508,110510,110513,110515,110517,110519,110521,110523],{"class":39,"line":10153},[37,110506,110507],{"class":50},"        action ",[37,110509,55],{"class":54},[37,110511,110512],{"class":61}," 2.0",[37,110514,6866],{"class":54},[37,110516,110105],{"class":50},[37,110518,993],{"class":54},[37,110520,62203],{"class":61},[37,110522,6866],{"class":54},[37,110524,110525],{"class":50}," pole_angular_velocity\n",[37,110527,110528,110530,110532,110534,110536,110538,110540,110542],{"class":39,"line":10158},[37,110529,110507],{"class":50},[37,110531,55],{"class":54},[37,110533,107732],{"class":50},[37,110535,384],{"class":54},[37,110537,102688],{"class":61},[37,110539,12776],{"class":50},[37,110541,102688],{"class":61},[37,110543,280],{"class":50},[37,110545,110546],{"class":39,"line":10164},[37,110547,2757],{"emptyLinePlaceholder":454},[37,110549,110550,110552,110554,110556,110558],{"class":39,"line":10185},[37,110551,106902],{"class":50},[37,110553,135],{"class":61},[37,110555,4793],{"class":50},[37,110557,55],{"class":54},[37,110559,107755],{"class":50},[37,110561,110562],{"class":39,"line":10191},[37,110563,101801],{"class":50},[37,110565,110566],{"class":39,"line":10205},[37,110567,2757],{"emptyLinePlaceholder":454},[37,110569,110570,110573,110575],{"class":39,"line":10211},[37,110571,110572],{"class":50},"        reward ",[37,110574,55],{"class":54},[37,110576,110577],{"class":50}," compute_reward(get_observation(data))\n",[37,110579,110580,110583,110585],{"class":39,"line":10238},[37,110581,110582],{"class":50},"        total_reward ",[37,110584,9818],{"class":54},[37,110586,110587],{"class":50}," reward\n",[37,110589,110590],{"class":39,"line":10247},[37,110591,2757],{"emptyLinePlaceholder":454},[37,110593,110594,110596,110598,110600,110602,110604,110606],{"class":39,"line":10253},[37,110595,2854],{"class":54},[37,110597,31954],{"class":50},[37,110599,845],{"class":54},[37,110601,6102],{"class":61},[37,110603,101844],{"class":54},[37,110605,4443],{"class":61},[37,110607,4089],{"class":50},[37,110609,110610,110612,110614,110617,110620,110623,110626,110628,110631,110634,110636,110638,110640,110642,110645,110647],{"class":39,"line":10261},[37,110611,34987],{"class":61},[37,110613,165],{"class":50},[37,110615,110616],{"class":185},"\"step:\"",[37,110618,110619],{"class":50},", step, ",[37,110621,110622],{"class":185},"\"obs:\"",[37,110624,110625],{"class":50},", np.round(obs, ",[37,110627,62],{"class":61},[37,110629,110630],{"class":50},"), ",[37,110632,110633],{"class":185},"\"action:\"",[37,110635,12776],{"class":50},[37,110637,32356],{"class":61},[37,110639,165],{"class":50},[37,110641,568],{"class":61},[37,110643,110644],{"class":50},"(action), ",[37,110646,62],{"class":61},[37,110648,175],{"class":50},[37,110650,110651],{"class":39,"line":10266},[37,110652,2757],{"emptyLinePlaceholder":454},[37,110654,110655,110657,110659,110662,110664,110666,110669,110671],{"class":39,"line":16945},[37,110656,31638],{"class":61},[37,110658,165],{"class":50},[37,110660,110661],{"class":185},"\"total_reward:\"",[37,110663,12776],{"class":50},[37,110665,32356],{"class":61},[37,110667,110668],{"class":50},"(total_reward, ",[37,110670,62],{"class":61},[37,110672,175],{"class":50},[37,110674,110675,110677,110679,110682,110685,110687],{"class":39,"line":16951},[37,110676,31638],{"class":61},[37,110678,165],{"class":50},[37,110680,110681],{"class":185},"\"final obs:\"",[37,110683,110684],{"class":50},", np.round(get_observation(data), ",[37,110686,62],{"class":61},[37,110688,175],{"class":50},[37,110690,110691],{"class":39,"line":16974},[37,110692,2757],{"emptyLinePlaceholder":454},[37,110694,110695],{"class":39,"line":16980},[37,110696,2757],{"emptyLinePlaceholder":454},[37,110698,110699,110701,110703,110705,110707],{"class":39,"line":17003},[37,110700,1907],{"class":54},[37,110702,31559],{"class":61},[37,110704,101844],{"class":54},[37,110706,101847],{"class":185},[37,110708,4089],{"class":50},[37,110710,110711],{"class":39,"line":17017},[37,110712,101854],{"class":50},[14,110714,103855],{},[27,110716,110718],{"className":24163,"code":110717,"language":24165,"meta":32,"style":32},"touch ch6_cartpole.py\n",[34,110719,110720],{"__ignoreMap":32},[37,110721,110722,110724],{"class":39,"line":40},[37,110723,101568],{"class":2320},[37,110725,110726],{"class":185}," ch6_cartpole.py\n",[14,110728,110729],{},"运行：",[27,110731,110733],{"className":24163,"code":110732,"language":24165,"meta":32,"style":32},"python ch6_cartpole.py\n",[34,110734,110735],{"__ignoreMap":32},[37,110736,110737,110739],{"class":39,"line":40},[37,110738,31],{"class":2320},[37,110740,110726],{"class":185},[498,110742,101857],{"id":101857},[14,110744,110745],{},"构造观测：",[27,110747,110749],{"className":29,"code":110748,"language":31,"meta":32,"style":32},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[34,110750,110751,110759],{"__ignoreMap":32},[37,110752,110753,110755,110757],{"class":39,"line":40},[37,110754,32285],{"class":54},[37,110756,110279],{"class":2320},[37,110758,110282],{"class":50},[37,110760,110761,110763],{"class":39,"line":47},[37,110762,4440],{"class":54},[37,110764,110289],{"class":50},[14,110766,110767,110770,110771,110773,110774,110776],{},[34,110768,110769],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[34,110772,104315],{}," 2 维，",[34,110775,104645],{}," 2 维，所以 obs 是 4 维。",[14,110778,110779],{},"设置初始角度：",[27,110781,110783],{"className":29,"code":110782,"language":31,"meta":32,"style":32},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[34,110784,110785,110797],{"__ignoreMap":32},[37,110786,110787,110789,110791,110793,110795],{"class":39,"line":40},[37,110788,104984],{"class":50},[37,110790,332],{"class":61},[37,110792,4793],{"class":50},[37,110794,55],{"class":54},[37,110796,110425],{"class":61},[37,110798,110799],{"class":39,"line":47},[37,110800,104828],{"class":50},[14,110802,110803],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110805,110806],{},"简单反馈控制：",[27,110808,110810],{"className":29,"code":110809,"language":31,"meta":32,"style":32},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[34,110811,110812,110832],{"__ignoreMap":32},[37,110813,110814,110816,110818,110820,110822,110824,110826,110828,110830],{"class":39,"line":40},[37,110815,107727],{"class":50},[37,110817,55],{"class":54},[37,110819,110512],{"class":61},[37,110821,6866],{"class":54},[37,110823,110105],{"class":50},[37,110825,993],{"class":54},[37,110827,62203],{"class":61},[37,110829,6866],{"class":54},[37,110831,110525],{"class":50},[37,110833,110834,110836,110838,110840,110842,110844,110846,110848],{"class":39,"line":47},[37,110835,107727],{"class":50},[37,110837,55],{"class":54},[37,110839,107732],{"class":50},[37,110841,384],{"class":54},[37,110843,102688],{"class":61},[37,110845,12776],{"class":50},[37,110847,102688],{"class":61},[37,110849,280],{"class":50},[14,110851,110852],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110854,110855],{},"限制动作：",[27,110857,110859],{"className":29,"code":110858,"language":31,"meta":32,"style":32},"np.clip(action, -1.0, 1.0)\n",[34,110860,110861],{"__ignoreMap":32},[37,110862,110863,110866,110868,110870,110872,110874],{"class":39,"line":40},[37,110864,110865],{"class":50},"np.clip(action, ",[37,110867,384],{"class":54},[37,110869,102688],{"class":61},[37,110871,12776],{"class":50},[37,110873,102688],{"class":61},[37,110875,280],{"class":50},[14,110877,110878,110879,110882],{},"因为 XML 里 ",[34,110880,110881],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[498,110884,101993],{"id":101993},[27,110886,110887],{"className":29,"code":110748,"language":31,"meta":32,"style":32},[34,110888,110889,110897],{"__ignoreMap":32},[37,110890,110891,110893,110895],{"class":39,"line":40},[37,110892,32285],{"class":54},[37,110894,110279],{"class":2320},[37,110896,110282],{"class":50},[37,110898,110899,110901],{"class":39,"line":47},[37,110900,4440],{"class":54},[37,110902,110289],{"class":50},[14,110904,110905,110906,110909,110910,110913,110914,110917],{},"这段定义了一个函数，用来获取当前观测。",[34,110907,110908],{},"data.qpos.copy()"," 是位置数组副本，",[34,110911,110912],{},"data.qvel.copy()"," 是速度数组副本。",[34,110915,110916],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110919,110920],{},"在本章模型里：",[27,110922,110925],{"className":110923,"code":110924,"language":5536,"meta":32},[5534],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[34,110926,110924],{"__ignoreMap":32},[14,110928,110929],{},"所以返回的 obs 是：",[27,110931,110934],{"className":110932,"code":110933,"language":5536,"meta":32},[5534],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[34,110935,110933],{"__ignoreMap":32},[27,110937,110939],{"className":29,"code":110938,"language":31,"meta":32,"style":32},"def compute_reward(obs: np.ndarray) -> float:\n",[34,110940,110941],{"__ignoreMap":32},[37,110942,110943,110945,110947,110949,110951],{"class":39,"line":40},[37,110944,32285],{"class":54},[37,110946,110304],{"class":2320},[37,110948,110307],{"class":50},[37,110950,568],{"class":61},[37,110952,4089],{"class":50},[14,110954,110955,110956,110959],{},"这行定义奖励函数。输入是观测 ",[34,110957,110958],{},"obs","，输出是一个浮点数奖励。",[27,110961,110963],{"className":29,"code":110962,"language":31,"meta":32,"style":32},"cart_x = obs[0]\npole_angle = obs[1]\n",[34,110964,110965,110978],{"__ignoreMap":32},[37,110966,110967,110970,110972,110974,110976],{"class":39,"line":40},[37,110968,110969],{"class":50},"cart_x ",[37,110971,55],{"class":54},[37,110973,110321],{"class":50},[37,110975,135],{"class":61},[37,110977,389],{"class":50},[37,110979,110980,110983,110985,110987,110989],{"class":39,"line":47},[37,110981,110982],{"class":50},"pole_angle ",[37,110984,55],{"class":54},[37,110986,110321],{"class":50},[37,110988,332],{"class":61},[37,110990,389],{"class":50},[14,110992,110993,110994,110997,110998,111001],{},"数组索引从 0 开始。",[34,110995,110996],{},"obs[0]"," 是第一个元素，也就是小车位置。",[34,110999,111000],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[27,111003,111004],{"className":29,"code":110073,"language":31,"meta":32,"style":32},[34,111005,111006],{"__ignoreMap":32},[37,111007,111008,111010,111012,111014,111016,111018,111020,111022,111024,111026,111028,111030,111032,111034],{"class":39,"line":40},[37,111009,17387],{"class":54},[37,111011,110082],{"class":61},[37,111013,165],{"class":50},[37,111015,102688],{"class":61},[37,111017,52607],{"class":54},[37,111019,110091],{"class":61},[37,111021,6866],{"class":54},[37,111023,110096],{"class":50},[37,111025,967],{"class":54},[37,111027,110096],{"class":50},[37,111029,384],{"class":54},[37,111031,110105],{"class":50},[37,111033,967],{"class":54},[37,111035,110110],{"class":50},[14,111037,111038,111039,111042,111043,111046],{},"这行计算奖励。",[34,111040,111041],{},"cart_x * cart_x"," 是小车位置的平方，",[34,111044,111045],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[27,111048,111050],{"className":29,"code":111049,"language":31,"meta":32,"style":32},"data.qpos[1] = 0.1\n",[34,111051,111052],{"__ignoreMap":32},[37,111053,111054,111056,111058,111060,111062],{"class":39,"line":40},[37,111055,104984],{"class":50},[37,111057,332],{"class":61},[37,111059,4793],{"class":50},[37,111061,55],{"class":54},[37,111063,110425],{"class":61},[14,111065,111066,111067,111069,111070,111072],{},"手动设置杆子的初始角度。因为 ",[34,111068,105741],{}," 是小车位置，",[34,111071,105744],{}," 是杆子角度，所以这里改的是杆子。",[27,111074,111075],{"className":29,"code":104828,"language":31,"meta":32,"style":32},[34,111076,111077],{"__ignoreMap":32},[37,111078,111079],{"class":39,"line":40},[37,111080,104828],{"class":50},[14,111082,105787,111083,111085],{},[34,111084,104315],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[27,111087,111089],{"className":29,"code":111088,"language":31,"meta":32,"style":32},"total_reward = 0.0\n",[34,111090,111091],{"__ignoreMap":32},[37,111092,111093,111096,111098],{"class":39,"line":40},[37,111094,111095],{"class":50},"total_reward ",[37,111097,55],{"class":54},[37,111099,105046],{"class":61},[14,111101,111102],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[27,111104,111106],{"className":29,"code":111105,"language":31,"meta":32,"style":32},"for step in range(1000):\n",[34,111107,111108],{"__ignoreMap":32},[37,111109,111110,111112,111114,111116,111118,111120,111122],{"class":39,"line":40},[37,111111,3375],{"class":54},[37,111113,31954],{"class":50},[37,111115,26385],{"class":54},[37,111117,32781],{"class":61},[37,111119,165],{"class":50},[37,111121,6758],{"class":61},[37,111123,31125],{"class":50},[14,111125,111126,111127,111129],{},"循环 1000 步。",[34,111128,107419],{}," 是当前步数，从 0 到 999。",[27,111131,111133],{"className":29,"code":111132,"language":31,"meta":32,"style":32},"obs = get_observation(data)\n",[34,111134,111135],{"__ignoreMap":32},[37,111136,111137,111140,111142],{"class":39,"line":40},[37,111138,111139],{"class":50},"obs ",[37,111141,55],{"class":54},[37,111143,110472],{"class":50},[14,111145,111146,111147,28727],{},"读取当前状态，保存到 ",[34,111148,110958],{},[27,111150,111152],{"className":29,"code":111151,"language":31,"meta":32,"style":32},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[34,111153,111154,111166],{"__ignoreMap":32},[37,111155,111156,111158,111160,111162,111164],{"class":39,"line":40},[37,111157,110982],{"class":50},[37,111159,55],{"class":54},[37,111161,110321],{"class":50},[37,111163,332],{"class":61},[37,111165,389],{"class":50},[37,111167,111168,111171,111173,111175,111177],{"class":39,"line":47},[37,111169,111170],{"class":50},"pole_angular_velocity ",[37,111172,55],{"class":54},[37,111174,110321],{"class":50},[37,111176,62],{"class":61},[37,111178,389],{"class":50},[14,111180,111181,111182,111185,111186,28727],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[34,111183,111184],{},"obs[3]","？因为 obs 的顺序是 ",[34,111187,111188],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[27,111190,111192],{"className":29,"code":111191,"language":31,"meta":32,"style":32},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[34,111193,111194],{"__ignoreMap":32},[37,111195,111196,111198,111200,111202,111204,111206,111208,111210,111212],{"class":39,"line":40},[37,111197,107727],{"class":50},[37,111199,55],{"class":54},[37,111201,110512],{"class":61},[37,111203,6866],{"class":54},[37,111205,110105],{"class":50},[37,111207,993],{"class":54},[37,111209,62203],{"class":61},[37,111211,6866],{"class":54},[37,111213,110525],{"class":50},[14,111215,111216,111217,101303,111219,111221],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[34,111218,105545],{},[34,111220,35666],{}," 是人为设置的系数，不是固定公式。",[27,111223,111225],{"className":29,"code":111224,"language":31,"meta":32,"style":32},"action = np.clip(action, -1.0, 1.0)\n",[34,111226,111227],{"__ignoreMap":32},[37,111228,111229,111231,111233,111235,111237,111239,111241,111243],{"class":39,"line":40},[37,111230,107727],{"class":50},[37,111232,55],{"class":54},[37,111234,107732],{"class":50},[37,111236,384],{"class":54},[37,111238,102688],{"class":61},[37,111240,12776],{"class":50},[37,111242,102688],{"class":61},[37,111244,280],{"class":50},[14,111246,111247],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[27,111249,111250],{"className":29,"code":110058,"language":31,"meta":32,"style":32},[34,111251,111252],{"__ignoreMap":32},[37,111253,111254,111256,111258,111260,111262],{"class":39,"line":40},[37,111255,106156],{"class":50},[37,111257,135],{"class":61},[37,111259,4793],{"class":50},[37,111261,55],{"class":54},[37,111263,107755],{"class":50},[14,111265,111266],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[27,111268,111269],{"className":29,"code":104790,"language":31,"meta":32,"style":32},[34,111270,111271],{"__ignoreMap":32},[37,111272,111273],{"class":39,"line":40},[37,111274,104790],{"class":50},[14,111276,111277,111278,111280],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[34,111279,106411],{}," 计算小车和杆子的下一刻状态。",[27,111282,111284],{"className":29,"code":111283,"language":31,"meta":32,"style":32},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[34,111285,111286,111295],{"__ignoreMap":32},[37,111287,111288,111291,111293],{"class":39,"line":40},[37,111289,111290],{"class":50},"reward ",[37,111292,55],{"class":54},[37,111294,110577],{"class":50},[37,111296,111297,111299,111301],{"class":39,"line":47},[37,111298,111095],{"class":50},[37,111300,9818],{"class":54},[37,111302,110587],{"class":50},[14,111304,111305,111306,111308,111309,111312,111313,28727],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[34,111307,9818],{}," 是简写，",[34,111310,111311],{},"total_reward += reward"," 等价于 ",[34,111314,111315],{},"total_reward = total_reward + reward",[27,111317,111319],{"className":29,"code":111318,"language":31,"meta":32,"style":32},"if step % 100 == 0:\n",[34,111320,111321],{"__ignoreMap":32},[37,111322,111323,111325,111327,111329,111331,111333,111335],{"class":39,"line":40},[37,111324,1907],{"class":54},[37,111326,31954],{"class":50},[37,111328,845],{"class":54},[37,111330,6102],{"class":61},[37,111332,101844],{"class":54},[37,111334,4443],{"class":61},[37,111336,4089],{"class":50},[14,111338,111339,111341,111342,111345],{},[34,111340,845],{}," 是取余数。",[34,111343,111344],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[27,111347,111349],{"className":29,"code":111348,"language":31,"meta":32,"style":32},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[34,111350,111351],{"__ignoreMap":32},[37,111352,111353,111355,111357,111359,111361,111363,111365,111367,111369,111371,111373,111375,111377,111379,111381,111383],{"class":39,"line":40},[37,111354,30755],{"class":61},[37,111356,165],{"class":50},[37,111358,110616],{"class":185},[37,111360,110619],{"class":50},[37,111362,110622],{"class":185},[37,111364,110625],{"class":50},[37,111366,62],{"class":61},[37,111368,110630],{"class":50},[37,111370,110633],{"class":185},[37,111372,12776],{"class":50},[37,111374,32356],{"class":61},[37,111376,165],{"class":50},[37,111378,568],{"class":61},[37,111380,110644],{"class":50},[37,111382,62],{"class":61},[37,111384,175],{"class":50},[14,111386,111387,111388,111391,111392,111395],{},"打印当前步数、观测和动作。",[34,111389,111390],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[34,111393,111394],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[469,111397,102601],{"id":102600},[14,111399,111400],{},"观测向量:",[27,111402,111405],{"className":111403,"code":111404,"language":5536,"meta":32},[5534],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[34,111406,111404],{"__ignoreMap":32},[14,111408,111409],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111411,111412],{},"每隔 100 步会打印一次：",[27,111414,111417],{"className":111415,"code":111416,"language":5536,"meta":32},[5534],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[34,111418,111416],{"__ignoreMap":32},[14,111420,111421],{},"重点观察：",[481,111423,111424,111430,111435],{},[484,111425,111426,111429],{},[34,111427,111428],{},"pole_angle"," 是否越来越大。",[484,111431,111432,111434],{},[34,111433,110011],{}," 是否跑得太远。",[484,111436,111437,111438,82874,111440,28727],{},"action 是否经常被 clip 到 ",[34,111439,104200],{},[34,111441,332],{},[14,111443,111444],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[469,111446,102633],{"id":102632},[481,111448,111449,111455,111458,111464,111474,111480,111483],{},[484,111450,111451,111452,28727],{},"把初始角度改为 ",[34,111453,111454],{},"data.qpos[1] = 0.3",[484,111456,111457],{},"重新运行，观察控制是否变差。",[484,111459,111460,111461,111463],{},"把 actuator ",[34,111462,107352],{}," 改小。",[484,111465,111466,111467,111470,111471,28727],{},"打印 ",[34,111468,111469],{},"model.nq, model.nv, model.nu","，应为 ",[34,111472,111473],{},"2 2 1",[484,111475,111476,111477,111479],{},"把 reward 里的 ",[34,111478,111045],{}," 系数改大，观察总奖励变化。",[484,111481,111482],{},"把控制器改成反号，观察杆子是否更容易倒。",[484,111484,111485],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[469,111487,102738],{"id":102737},[498,111489,111490],{"id":111490},"杆子方向和预期不一致",[14,111492,102681,111493,111495,111496,111498],{},[34,111494,106524],{}," 和 capsule 的 ",[34,111497,103461],{},"，必要时用 viewer 可视化确认。",[498,111500,111501],{"id":111501},"控制器越控越倒",[14,111503,111504],{},"说明反馈符号可能反了，尝试:",[27,111506,111508],{"className":29,"code":111507,"language":31,"meta":32,"style":32},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[34,111509,111510],{"__ignoreMap":32},[37,111511,111512,111514,111516,111518,111520,111522,111524,111526,111528,111530],{"class":39,"line":40},[37,111513,107727],{"class":50},[37,111515,55],{"class":54},[37,111517,52607],{"class":54},[37,111519,105545],{"class":61},[37,111521,6866],{"class":54},[37,111523,110105],{"class":50},[37,111525,384],{"class":54},[37,111527,62203],{"class":61},[37,111529,6866],{"class":54},[37,111531,110525],{"class":50},[498,111533,111534],{"id":111534},"小车飞走",[14,111536,111537,111538,111540,111541,111544],{},"降低 ",[34,111539,107352],{}," 或缩小 ",[34,111542,111543],{},"action"," 的 clip 范围。",[498,111546,111548,111550],{"id":111547},"obs3-为什么是杆子角速度",[34,111549,111184],{}," 为什么是杆子角速度",[14,111552,111553],{},"因为这个模型里：",[27,111555,111558],{"className":111556,"code":111557,"language":5536,"meta":32},[5534],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[34,111559,111557],{"__ignoreMap":32},[14,111561,110032],{},[27,111563,111566],{"className":111564,"code":111565,"language":5536,"meta":32},[5534],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[34,111567,111565],{"__ignoreMap":32},[498,111569,111571],{"id":111570},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111573,111574],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[469,111576,102892],{"id":102891},[14,111578,111579],{},"一个控制任务通常包含：",[481,111581,111582,111585,111593,111598,111601],{},[484,111583,111584],{},"模型：Cartpole 的 body、joint、actuator。",[484,111586,111587,111588,735,111590,111592],{},"观测：从 ",[34,111589,104315],{},[34,111591,104645],{}," 里取状态。",[484,111594,111595,111596,28727],{},"动作：写入 ",[34,111597,101361],{},[484,111599,111600],{},"奖励：根据任务目标打分。",[484,111602,111603],{},"循环：obs -> action -> step -> reward。",[14,111605,111606],{},"这就是后面 Gymnasium 环境的基本骨架。",[446,111608,104571],{},{"title":32,"searchDepth":47,"depth":47,"links":111610},[111611,111612,111613,111618,111622,111623,111624,111632],{"id":100931,"depth":47,"text":100932},{"id":101054,"depth":47,"text":101055},{"id":101329,"depth":47,"text":101330,"children":111614},[111615,111616,111617],{"id":109985,"depth":104,"text":109986},{"id":110050,"depth":104,"text":110051},{"id":110066,"depth":104,"text":110067},{"id":101537,"depth":47,"text":101538,"children":111619},[111620,111621],{"id":101857,"depth":104,"text":101857},{"id":101993,"depth":104,"text":101993},{"id":102600,"depth":47,"text":102601},{"id":102632,"depth":47,"text":102633},{"id":102737,"depth":47,"text":102738,"children":111625},[111626,111627,111628,111629,111631],{"id":111490,"depth":104,"text":111490},{"id":111501,"depth":104,"text":111501},{"id":111534,"depth":104,"text":111534},{"id":111547,"depth":104,"text":111630},"obs[3] 为什么是杆子角速度",{"id":111570,"depth":104,"text":111571},{"id":102891,"depth":47,"text":102892},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109721,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111639,"title":111640,"body":111641,"description":32,"extension":452,"meta":113655,"navigation":454,"path":113656,"seo":113657,"stem":113658,"__hash__":113659},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111642,"toc":113631},[111643,111646,111648,111651,111653,111670,111673,111676,111682,111685,111687,111689,111713,111715,111729,111731,111772,111774,111792,111794,111797,111803,111806,111834,111838,111844,111869,111872,111903,111910,111913,111916,111922,111925,111931,111934,111940,111944,111947,111972,111975,111977,112737,112739,112751,112753,112764,112766,112769,112786,112789,112791,112802,112805,112807,112853,112856,112869,112872,112954,112957,112959,112975,112985,112998,113001,113040,113050,113061,113071,113084,113087,113116,113119,113129,113132,113138,113155,113166,113168,113174,113191,113202,113223,113226,113238,113241,113262,113265,113273,113281,113298,113301,113370,113377,113385,113388,113401,113408,113410,113413,113419,113422,113425,113431,113437,113439,113479,113481,113487,113496,113499,113501,113521,113524,113527,113533,113537,113539,113566,113569,113572,113599,113605,113608,113611,113613,113616,113619,113625,113628],[10,111644,111640],{"id":111645},"_7控制任务reacher-机械臂到达目标",[469,111647,100932],{"id":100931},[14,111649,111650],{},"本章搭建一个二维两关节 reacher 任务。",[14,111652,104616],{},[481,111654,111655,111658,111661,111664,111667],{},[484,111656,111657],{},"两个 hinge joint",[484,111659,111660],{},"两个 motor actuator",[484,111662,111663],{},"site 作为末端点和目标点",[484,111665,111666],{},"根据末端和目标距离设计 reward",[484,111668,111669],{},"构造机械臂任务的基本形式",[14,111671,111672],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111674,111675],{},"Reacher 任务可以理解为：",[27,111677,111680],{"className":111678,"code":111679,"language":5536,"meta":32},[5534],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[34,111681,111679],{"__ignoreMap":32},[14,111683,111684],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[469,111686,101055],{"id":101054},[14,111688,101058],{},[27,111690,111691],{"className":24163,"code":104673,"language":24165,"meta":32,"style":32},[34,111692,111693],{"__ignoreMap":32},[37,111694,111695,111697,111699,111701,111703,111705,111707,111709,111711],{"class":39,"line":40},[37,111696,24918],{"class":2320},[37,111698,26657],{"class":185},[37,111700,24175],{"class":185},[37,111702,26742],{"class":61},[37,111704,104688],{"class":185},[37,111706,101083],{"class":185},[37,111708,102786],{"class":185},[37,111710,101099],{"class":185},[37,111712,104697],{"class":185},[14,111714,103104],{},[27,111716,111717],{"className":24163,"code":101204,"language":24165,"meta":32,"style":32},[34,111718,111719],{"__ignoreMap":32},[37,111720,111721,111723,111725,111727],{"class":39,"line":40},[37,111722,24172],{"class":2320},[37,111724,24175],{"class":185},[37,111726,101215],{"class":185},[37,111728,101218],{"class":185},[14,111730,103121],{},[27,111732,111734],{"className":24163,"code":111733,"language":24165,"meta":32,"style":32},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[34,111735,111736,111753,111762],{"__ignoreMap":32},[37,111737,111738,111740,111742,111744,111747,111749,111751],{"class":39,"line":40},[37,111739,30672],{"class":2320},[37,111741,29518],{"class":185},[37,111743,25457],{"class":61},[37,111745,111746],{"class":185}," mujoco-reacher",[37,111748,101260],{"class":185},[37,111750,101263],{"class":61},[37,111752,101266],{"class":61},[37,111754,111755,111757,111759],{"class":39,"line":47},[37,111756,30672],{"class":2320},[37,111758,101273],{"class":185},[37,111760,111761],{"class":185}," mujoco-reacher\n",[37,111763,111764,111766,111768,111770],{"class":39,"line":104},[37,111765,24172],{"class":2320},[37,111767,24175],{"class":185},[37,111769,101215],{"class":185},[37,111771,101218],{"class":185},[14,111773,101289],{},[481,111775,111776,111779,111782],{},[484,111777,111778],{},"本章使用低维状态，不使用图像输入。",[484,111780,111781],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[484,111783,111784,111785,735,111787,735,111789,111791],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[34,111786,104315],{},[34,111788,104645],{},[34,111790,103965],{}," 的方法一致。",[469,111793,101330],{"id":101329},[14,111795,111796],{},"Reacher 任务核心:",[27,111798,111801],{"className":111799,"code":111800,"language":5536,"meta":32},[5534],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[34,111802,111800],{"__ignoreMap":32},[14,111804,111805],{},"读取 site 世界坐标:",[27,111807,111809],{"className":29,"code":111808,"language":31,"meta":32,"style":32},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[34,111810,111811,111824],{"__ignoreMap":32},[37,111812,111813,111815,111817,111819,111822],{"class":39,"line":40},[37,111814,103919],{"class":50},[37,111816,55],{"class":54},[37,111818,103690],{"class":50},[37,111820,111821],{"class":185},"\"tip\"",[37,111823,280],{"class":50},[37,111825,111826,111829,111831],{"class":39,"line":47},[37,111827,111828],{"class":50},"tip_pos ",[37,111830,55],{"class":54},[37,111832,111833],{"class":50}," data.site_xpos[site_id]\n",[498,111835,111837],{"id":111836},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111839,111840,111841,111843],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[34,111842,104315],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[27,111845,111847],{"className":29,"code":111846,"language":31,"meta":32,"style":32},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[34,111848,111849,111859],{"__ignoreMap":32},[37,111850,111851,111854,111856],{"class":39,"line":40},[37,111852,111853],{"class":50},"tip ",[37,111855,55],{"class":54},[37,111857,111858],{"class":50}," data.site_xpos[tip_site_id]\n",[37,111860,111861,111864,111866],{"class":39,"line":47},[37,111862,111863],{"class":50},"target ",[37,111865,55],{"class":54},[37,111867,111868],{"class":50}," data.site_xpos[target_site_id]\n",[14,111870,111871],{},"这样 reward 就很容易写：",[27,111873,111875],{"className":29,"code":111874,"language":31,"meta":32,"style":32},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[34,111876,111877,111892],{"__ignoreMap":32},[37,111878,111879,111882,111884,111887,111889],{"class":39,"line":40},[37,111880,111881],{"class":50},"dist ",[37,111883,55],{"class":54},[37,111885,111886],{"class":50}," np.linalg.norm(tip ",[37,111888,384],{"class":54},[37,111890,111891],{"class":50}," target)\n",[37,111893,111894,111896,111898,111900],{"class":39,"line":47},[37,111895,111290],{"class":50},[37,111897,55],{"class":54},[37,111899,52607],{"class":54},[37,111901,111902],{"class":50},"dist\n",[14,111904,111905,111906,111909],{},"距离越小，",[34,111907,111908],{},"-dist"," 越接近 0，奖励越高。",[498,111911,111912],{"id":111912},"两关节机械臂的状态",[14,111914,111915],{},"这个模型有两个 hinge joint：",[27,111917,111920],{"className":111918,"code":111919,"language":5536,"meta":32},[5534],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[34,111921,111919],{"__ignoreMap":32},[14,111923,111924],{},"再加上末端和目标位置：",[27,111926,111929],{"className":111927,"code":111928,"language":5536,"meta":32},[5534],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[34,111930,111928],{"__ignoreMap":32},[14,111932,111933],{},"总维度：",[27,111935,111938],{"className":111936,"code":111937,"language":5536,"meta":32},[5534],"2 + 2 + 3 + 3 = 10\n",[34,111939,111937],{"__ignoreMap":32},[498,111941,111943],{"id":111942},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111945,111946],{},"本章把重力设为：",[27,111948,111950],{"className":53403,"code":111949,"language":53405,"meta":32,"style":32},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[34,111951,111952],{"__ignoreMap":32},[37,111953,111954,111956,111958,111960,111962,111964,111966,111968,111970],{"class":39,"line":40},[37,111955,1418],{"class":50},[37,111957,69502],{"class":51636},[37,111959,101479],{"class":2320},[37,111961,55],{"class":50},[37,111963,101484],{"class":185},[37,111965,101487],{"class":2320},[37,111967,55],{"class":50},[37,111969,104056],{"class":185},[37,111971,101429],{"class":50},[14,111973,111974],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[469,111976,101538],{"id":101537},[27,111978,111980],{"className":29,"code":111979,"language":31,"meta":32,"style":32},"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",[34,111981,111982,111988,111998,112002,112006,112014,112019,112024,112028,112032,112037,112042,112046,112051,112056,112061,112065,112070,112075,112080,112085,112089,112093,112097,112101,112105,112110,112115,112119,112123,112127,112131,112135,112150,112159,112171,112194,112201,112205,112209,112219,112233,112247,112254,112258,112262,112276,112288,112300,112313,112328,112345,112349,112353,112365,112377,112385,112393,112397,112413,112418,112431,112444,112459,112463,112498,112530,112534,112538,112547,112551,112567,112577,112588,112604,112620,112636,112652,112656,112674,112694,112713,112717,112721,112733],{"__ignoreMap":32},[37,111983,111984,111986],{"class":39,"line":40},[37,111985,30732],{"class":54},[37,111987,101586],{"class":50},[37,111989,111990,111992,111994,111996],{"class":39,"line":47},[37,111991,30732],{"class":54},[37,111993,31719],{"class":50},[37,111995,31722],{"class":54},[37,111997,31725],{"class":50},[37,111999,112000],{"class":39,"line":104},[37,112001,2757],{"emptyLinePlaceholder":454},[37,112003,112004],{"class":39,"line":113},[37,112005,2757],{"emptyLinePlaceholder":454},[37,112007,112008,112010,112012],{"class":39,"line":189},[37,112009,101599],{"class":61},[37,112011,13905],{"class":54},[37,112013,101604],{"class":185},[37,112015,112016],{"class":39,"line":195},[37,112017,112018],{"class":185},"\u003Cmujoco model=\"two_link_reacher\">\n",[37,112020,112021],{"class":39,"line":201},[37,112022,112023],{"class":185},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[37,112025,112026],{"class":39,"line":207},[37,112027,2757],{"emptyLinePlaceholder":454},[37,112029,112030],{"class":39,"line":213},[37,112031,101623],{"class":185},[37,112033,112034],{"class":39,"line":218},[37,112035,112036],{"class":185},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[37,112038,112039],{"class":39,"line":227},[37,112040,112041],{"class":185},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[37,112043,112044],{"class":39,"line":232},[37,112045,2757],{"emptyLinePlaceholder":454},[37,112047,112048],{"class":39,"line":238},[37,112049,112050],{"class":185},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[37,112052,112053],{"class":39,"line":244},[37,112054,112055],{"class":185},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[37,112057,112058],{"class":39,"line":250},[37,112059,112060],{"class":185},"      \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",[37,112062,112063],{"class":39,"line":256},[37,112064,2757],{"emptyLinePlaceholder":454},[37,112066,112067],{"class":39,"line":261},[37,112068,112069],{"class":185},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[37,112071,112072],{"class":39,"line":267},[37,112073,112074],{"class":185},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[37,112076,112077],{"class":39,"line":283},[37,112078,112079],{"class":185},"        \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",[37,112081,112082],{"class":39,"line":288},[37,112083,112084],{"class":185},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[37,112086,112087],{"class":39,"line":294},[37,112088,106723],{"class":185},[37,112090,112091],{"class":39,"line":300},[37,112092,101652],{"class":185},[37,112094,112095],{"class":39,"line":306},[37,112096,101657],{"class":185},[37,112098,112099],{"class":39,"line":312},[37,112100,2757],{"emptyLinePlaceholder":454},[37,112102,112103],{"class":39,"line":317},[37,112104,106740],{"class":185},[37,112106,112107],{"class":39,"line":323},[37,112108,112109],{"class":185},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[37,112111,112112],{"class":39,"line":337},[37,112113,112114],{"class":185},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[37,112116,112117],{"class":39,"line":342},[37,112118,106750],{"class":185},[37,112120,112121],{"class":39,"line":347},[37,112122,101662],{"class":185},[37,112124,112125],{"class":39,"line":352},[37,112126,95983],{"class":185},[37,112128,112129],{"class":39,"line":357},[37,112130,2757],{"emptyLinePlaceholder":454},[37,112132,112133],{"class":39,"line":362},[37,112134,2757],{"emptyLinePlaceholder":454},[37,112136,112137,112139,112142,112145,112147],{"class":39,"line":367},[37,112138,32285],{"class":54},[37,112140,112141],{"class":2320}," site_position",[37,112143,112144],{"class":50},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[37,112146,1678],{"class":61},[37,112148,112149],{"class":50},") -> np.ndarray:\n",[37,112151,112152,112154,112156],{"class":39,"line":373},[37,112153,103685],{"class":50},[37,112155,55],{"class":54},[37,112157,112158],{"class":50}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[37,112160,112161,112163,112165,112167,112169],{"class":39,"line":392},[37,112162,3451],{"class":54},[37,112164,103734],{"class":50},[37,112166,1418],{"class":54},[37,112168,4443],{"class":61},[37,112170,4089],{"class":50},[37,112172,112173,112175,112177,112179,112181,112184,112186,112188,112190,112192],{"class":39,"line":398},[37,112174,103717],{"class":54},[37,112176,103720],{"class":61},[37,112178,165],{"class":50},[37,112180,579],{"class":54},[37,112182,112183],{"class":185},"\"site not found: ",[37,112185,1404],{"class":61},[37,112187,80145],{"class":50},[37,112189,1454],{"class":61},[37,112191,772],{"class":185},[37,112193,280],{"class":50},[37,112195,112196,112198],{"class":39,"line":409},[37,112197,4440],{"class":54},[37,112199,112200],{"class":50}," data.site_xpos[site_id].copy()\n",[37,112202,112203],{"class":39,"line":415},[37,112204,2757],{"emptyLinePlaceholder":454},[37,112206,112207],{"class":39,"line":420},[37,112208,2757],{"emptyLinePlaceholder":454},[37,112210,112211,112213,112216],{"class":39,"line":425},[37,112212,32285],{"class":54},[37,112214,112215],{"class":2320}," get_obs",[37,112217,112218],{"class":50},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[37,112220,112221,112224,112226,112229,112231],{"class":39,"line":431},[37,112222,112223],{"class":50},"    tip ",[37,112225,55],{"class":54},[37,112227,112228],{"class":50}," site_position(model, data, ",[37,112230,111821],{"class":185},[37,112232,280],{"class":50},[37,112234,112235,112238,112240,112242,112245],{"class":39,"line":436},[37,112236,112237],{"class":50},"    target ",[37,112239,55],{"class":54},[37,112241,112228],{"class":50},[37,112243,112244],{"class":185},"\"target\"",[37,112246,280],{"class":50},[37,112248,112249,112251],{"class":39,"line":442},[37,112250,4440],{"class":54},[37,112252,112253],{"class":50}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[37,112255,112256],{"class":39,"line":8374},[37,112257,2757],{"emptyLinePlaceholder":454},[37,112259,112260],{"class":39,"line":8386},[37,112261,2757],{"emptyLinePlaceholder":454},[37,112263,112264,112266,112269,112272,112274],{"class":39,"line":8398},[37,112265,32285],{"class":54},[37,112267,112268],{"class":2320}," reward",[37,112270,112271],{"class":50},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[37,112273,568],{"class":61},[37,112275,4089],{"class":50},[37,112277,112278,112280,112282,112284,112286],{"class":39,"line":10057},[37,112279,112223],{"class":50},[37,112281,55],{"class":54},[37,112283,112228],{"class":50},[37,112285,111821],{"class":185},[37,112287,280],{"class":50},[37,112289,112290,112292,112294,112296,112298],{"class":39,"line":10082},[37,112291,112237],{"class":50},[37,112293,55],{"class":54},[37,112295,112228],{"class":50},[37,112297,112244],{"class":185},[37,112299,280],{"class":50},[37,112301,112302,112305,112307,112309,112311],{"class":39,"line":10105},[37,112303,112304],{"class":50},"    dist ",[37,112306,55],{"class":54},[37,112308,111886],{"class":50},[37,112310,384],{"class":54},[37,112312,111891],{"class":50},[37,112314,112315,112318,112320,112323,112325],{"class":39,"line":10129},[37,112316,112317],{"class":50},"    control_cost ",[37,112319,55],{"class":54},[37,112321,112322],{"class":61}," 0.01",[37,112324,6866],{"class":54},[37,112326,112327],{"class":50}," np.sum(np.square(data.ctrl))\n",[37,112329,112330,112332,112334,112336,112338,112340,112342],{"class":39,"line":10134},[37,112331,4440],{"class":54},[37,112333,110082],{"class":61},[37,112335,165],{"class":50},[37,112337,384],{"class":54},[37,112339,111881],{"class":50},[37,112341,384],{"class":54},[37,112343,112344],{"class":50}," control_cost)\n",[37,112346,112347],{"class":39,"line":10139},[37,112348,2757],{"emptyLinePlaceholder":454},[37,112350,112351],{"class":39,"line":10144},[37,112352,2757],{"emptyLinePlaceholder":454},[37,112354,112355,112357,112359,112361,112363],{"class":39,"line":10153},[37,112356,32285],{"class":54},[37,112358,2330],{"class":2320},[37,112360,101683],{"class":50},[37,112362,95971],{"class":61},[37,112364,4089],{"class":50},[37,112366,112367,112369,112371,112373,112375],{"class":39,"line":10158},[37,112368,101692],{"class":50},[37,112370,55],{"class":54},[37,112372,101697],{"class":50},[37,112374,101599],{"class":61},[37,112376,280],{"class":50},[37,112378,112379,112381,112383],{"class":39,"line":10164},[37,112380,101706],{"class":50},[37,112382,55],{"class":54},[37,112384,101711],{"class":50},[37,112386,112387,112389,112391],{"class":39,"line":10185},[37,112388,110438],{"class":50},[37,112390,55],{"class":54},[37,112392,105046],{"class":61},[37,112394,112395],{"class":39,"line":10191},[37,112396,2757],{"emptyLinePlaceholder":454},[37,112398,112399,112401,112403,112405,112407,112409,112411],{"class":39,"line":10205},[37,112400,3551],{"class":54},[37,112402,31954],{"class":50},[37,112404,26385],{"class":54},[37,112406,32781],{"class":61},[37,112408,165],{"class":50},[37,112410,65410],{"class":61},[37,112412,31125],{"class":50},[37,112414,112415],{"class":39,"line":10211},[37,112416,112417],{"class":50},"        mujoco.mj_forward(model, data)\n",[37,112419,112420,112423,112425,112427,112429],{"class":39,"line":10238},[37,112421,112422],{"class":50},"        tip ",[37,112424,55],{"class":54},[37,112426,112228],{"class":50},[37,112428,111821],{"class":185},[37,112430,280],{"class":50},[37,112432,112433,112436,112438,112440,112442],{"class":39,"line":10247},[37,112434,112435],{"class":50},"        target ",[37,112437,55],{"class":54},[37,112439,112228],{"class":50},[37,112441,112244],{"class":185},[37,112443,280],{"class":50},[37,112445,112446,112449,112451,112454,112456],{"class":39,"line":10253},[37,112447,112448],{"class":50},"        error ",[37,112450,55],{"class":54},[37,112452,112453],{"class":50}," target ",[37,112455,384],{"class":54},[37,112457,112458],{"class":50}," tip\n",[37,112460,112461],{"class":39,"line":10261},[37,112462,2757],{"emptyLinePlaceholder":454},[37,112464,112465,112467,112469,112471,112473,112476,112478,112480,112483,112485,112488,112490,112492,112494,112496],{"class":39,"line":10266},[37,112466,106902],{"class":50},[37,112468,135],{"class":61},[37,112470,4793],{"class":50},[37,112472,55],{"class":54},[37,112474,112475],{"class":50}," np.clip(",[37,112477,105545],{"class":61},[37,112479,6866],{"class":54},[37,112481,112482],{"class":50}," error[",[37,112484,602],{"class":61},[37,112486,112487],{"class":50},"], ",[37,112489,384],{"class":54},[37,112491,102688],{"class":61},[37,112493,12776],{"class":50},[37,112495,102688],{"class":61},[37,112497,280],{"class":50},[37,112499,112500,112502,112504,112506,112508,112510,112512,112514,112516,112518,112520,112522,112524,112526,112528],{"class":39,"line":16945},[37,112501,106902],{"class":50},[37,112503,332],{"class":61},[37,112505,4793],{"class":50},[37,112507,55],{"class":54},[37,112509,112475],{"class":50},[37,112511,105545],{"class":61},[37,112513,6866],{"class":54},[37,112515,112482],{"class":50},[37,112517,135],{"class":61},[37,112519,112487],{"class":50},[37,112521,384],{"class":54},[37,112523,102688],{"class":61},[37,112525,12776],{"class":50},[37,112527,102688],{"class":61},[37,112529,280],{"class":50},[37,112531,112532],{"class":39,"line":16951},[37,112533,2757],{"emptyLinePlaceholder":454},[37,112535,112536],{"class":39,"line":16974},[37,112537,101801],{"class":50},[37,112539,112540,112542,112544],{"class":39,"line":16980},[37,112541,110582],{"class":50},[37,112543,9818],{"class":54},[37,112545,112546],{"class":50}," reward(model, data)\n",[37,112548,112549],{"class":39,"line":17003},[37,112550,2757],{"emptyLinePlaceholder":454},[37,112552,112553,112555,112557,112559,112561,112563,112565],{"class":39,"line":17017},[37,112554,2854],{"class":54},[37,112556,31954],{"class":50},[37,112558,845],{"class":54},[37,112560,6102],{"class":61},[37,112562,101844],{"class":54},[37,112564,4443],{"class":61},[37,112566,4089],{"class":50},[37,112568,112569,112572,112574],{"class":39,"line":17037},[37,112570,112571],{"class":50},"            obs ",[37,112573,55],{"class":54},[37,112575,112576],{"class":50}," get_obs(model, data)\n",[37,112578,112579,112581,112583,112585],{"class":39,"line":17043},[37,112580,34987],{"class":61},[37,112582,165],{"class":50},[37,112584,110616],{"class":185},[37,112586,112587],{"class":50},", step)\n",[37,112589,112590,112592,112594,112597,112600,112602],{"class":39,"line":17054},[37,112591,34987],{"class":61},[37,112593,165],{"class":50},[37,112595,112596],{"class":185},"\"  tip:\"",[37,112598,112599],{"class":50},", np.round(tip, ",[37,112601,62],{"class":61},[37,112603,175],{"class":50},[37,112605,112606,112608,112610,112613,112616,112618],{"class":39,"line":17077},[37,112607,34987],{"class":61},[37,112609,165],{"class":50},[37,112611,112612],{"class":185},"\"  target:\"",[37,112614,112615],{"class":50},", np.round(target, ",[37,112617,62],{"class":61},[37,112619,175],{"class":50},[37,112621,112622,112624,112626,112629,112632,112634],{"class":39,"line":17099},[37,112623,34987],{"class":61},[37,112625,165],{"class":50},[37,112627,112628],{"class":185},"\"  ctrl:\"",[37,112630,112631],{"class":50},", np.round(data.ctrl.copy(), ",[37,112633,62],{"class":61},[37,112635,175],{"class":50},[37,112637,112638,112640,112642,112645,112648,112650],{"class":39,"line":17104},[37,112639,34987],{"class":61},[37,112641,165],{"class":50},[37,112643,112644],{"class":185},"\"  obs_dim:\"",[37,112646,112647],{"class":50},", obs.shape[",[37,112649,135],{"class":61},[37,112651,101],{"class":50},[37,112653,112654],{"class":39,"line":17110},[37,112655,2757],{"emptyLinePlaceholder":454},[37,112657,112658,112660,112662,112664,112666,112668,112670,112672],{"class":39,"line":17124},[37,112659,31638],{"class":61},[37,112661,165],{"class":50},[37,112663,110661],{"class":185},[37,112665,12776],{"class":50},[37,112667,32356],{"class":61},[37,112669,110668],{"class":50},[37,112671,62],{"class":61},[37,112673,175],{"class":50},[37,112675,112676,112678,112680,112683,112686,112688,112690,112692],{"class":39,"line":17137},[37,112677,31638],{"class":61},[37,112679,165],{"class":50},[37,112681,112682],{"class":185},"\"final tip:\"",[37,112684,112685],{"class":50},", np.round(site_position(model, data, ",[37,112687,111821],{"class":185},[37,112689,110630],{"class":50},[37,112691,62],{"class":61},[37,112693,175],{"class":50},[37,112695,112696,112698,112700,112703,112705,112707,112709,112711],{"class":39,"line":17142},[37,112697,31638],{"class":61},[37,112699,165],{"class":50},[37,112701,112702],{"class":185},"\"target:\"",[37,112704,112685],{"class":50},[37,112706,112244],{"class":185},[37,112708,110630],{"class":50},[37,112710,62],{"class":61},[37,112712,175],{"class":50},[37,112714,112715],{"class":39,"line":17156},[37,112716,2757],{"emptyLinePlaceholder":454},[37,112718,112719],{"class":39,"line":17161},[37,112720,2757],{"emptyLinePlaceholder":454},[37,112722,112723,112725,112727,112729,112731],{"class":39,"line":17167},[37,112724,1907],{"class":54},[37,112726,31559],{"class":61},[37,112728,101844],{"class":54},[37,112730,101847],{"class":185},[37,112732,4089],{"class":50},[37,112734,112735],{"class":39,"line":17172},[37,112736,101854],{"class":50},[14,112738,103855],{},[27,112740,112742],{"className":24163,"code":112741,"language":24165,"meta":32,"style":32},"touch ch7_reacher.py\n",[34,112743,112744],{"__ignoreMap":32},[37,112745,112746,112748],{"class":39,"line":40},[37,112747,101568],{"class":2320},[37,112749,112750],{"class":185}," ch7_reacher.py\n",[14,112752,110729],{},[27,112754,112756],{"className":24163,"code":112755,"language":24165,"meta":32,"style":32},"python ch7_reacher.py\n",[34,112757,112758],{"__ignoreMap":32},[37,112759,112760,112762],{"class":39,"line":40},[37,112761,31],{"class":2320},[37,112763,112750],{"class":185},[498,112765,101857],{"id":101857},[14,112767,112768],{},"读取 site 坐标：",[27,112770,112772],{"className":29,"code":112771,"language":31,"meta":32,"style":32},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[34,112773,112774],{"__ignoreMap":32},[37,112775,112776,112778,112780,112782,112784],{"class":39,"line":40},[37,112777,32285],{"class":54},[37,112779,112141],{"class":2320},[37,112781,112144],{"class":50},[37,112783,1678],{"class":61},[37,112785,112149],{"class":50},[14,112787,112788],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112790,110745],{},[27,112792,112794],{"className":29,"code":112793,"language":31,"meta":32,"style":32},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[34,112795,112796],{"__ignoreMap":32},[37,112797,112798,112800],{"class":39,"line":40},[37,112799,17387],{"class":54},[37,112801,112253],{"class":50},[14,112803,112804],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112806,110070],{},[27,112808,112810],{"className":29,"code":112809,"language":31,"meta":32,"style":32},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[34,112811,112812,112824,112837],{"__ignoreMap":32},[37,112813,112814,112816,112818,112820,112822],{"class":39,"line":40},[37,112815,111881],{"class":50},[37,112817,55],{"class":54},[37,112819,111886],{"class":50},[37,112821,384],{"class":54},[37,112823,111891],{"class":50},[37,112825,112826,112829,112831,112833,112835],{"class":39,"line":47},[37,112827,112828],{"class":50},"control_cost ",[37,112830,55],{"class":54},[37,112832,112322],{"class":61},[37,112834,6866],{"class":54},[37,112836,112327],{"class":50},[37,112838,112839,112841,112843,112845,112847,112849,112851],{"class":39,"line":104},[37,112840,17387],{"class":54},[37,112842,110082],{"class":61},[37,112844,165],{"class":50},[37,112846,384],{"class":54},[37,112848,111881],{"class":50},[37,112850,384],{"class":54},[37,112852,112344],{"class":50},[14,112854,112855],{},"奖励由两部分组成：",[481,112857,112858,112863],{},[484,112859,112860,112862],{},[34,112861,111908],{},"：末端离目标越远，奖励越低。",[484,112864,112865,112868],{},[34,112866,112867],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112870,112871],{},"简单控制器：",[27,112873,112875],{"className":29,"code":112874,"language":31,"meta":32,"style":32},"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",[34,112876,112877,112890,112922],{"__ignoreMap":32},[37,112878,112879,112882,112884,112886,112888],{"class":39,"line":40},[37,112880,112881],{"class":50},"error ",[37,112883,55],{"class":54},[37,112885,112453],{"class":50},[37,112887,384],{"class":54},[37,112889,112458],{"class":50},[37,112891,112892,112894,112896,112898,112900,112902,112904,112906,112908,112910,112912,112914,112916,112918,112920],{"class":39,"line":47},[37,112893,106156],{"class":50},[37,112895,135],{"class":61},[37,112897,4793],{"class":50},[37,112899,55],{"class":54},[37,112901,112475],{"class":50},[37,112903,105545],{"class":61},[37,112905,6866],{"class":54},[37,112907,112482],{"class":50},[37,112909,602],{"class":61},[37,112911,112487],{"class":50},[37,112913,384],{"class":54},[37,112915,102688],{"class":61},[37,112917,12776],{"class":50},[37,112919,102688],{"class":61},[37,112921,280],{"class":50},[37,112923,112924,112926,112928,112930,112932,112934,112936,112938,112940,112942,112944,112946,112948,112950,112952],{"class":39,"line":104},[37,112925,106156],{"class":50},[37,112927,332],{"class":61},[37,112929,4793],{"class":50},[37,112931,55],{"class":54},[37,112933,112475],{"class":50},[37,112935,105545],{"class":61},[37,112937,6866],{"class":54},[37,112939,112482],{"class":50},[37,112941,135],{"class":61},[37,112943,112487],{"class":50},[37,112945,384],{"class":54},[37,112947,102688],{"class":61},[37,112949,12776],{"class":50},[37,112951,102688],{"class":61},[37,112953,280],{"class":50},[14,112955,112956],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[498,112958,101993],{"id":101993},[27,112960,112961],{"className":29,"code":112771,"language":31,"meta":32,"style":32},[34,112962,112963],{"__ignoreMap":32},[37,112964,112965,112967,112969,112971,112973],{"class":39,"line":40},[37,112966,32285],{"class":54},[37,112968,112141],{"class":2320},[37,112970,112144],{"class":50},[37,112972,1678],{"class":61},[37,112974,112149],{"class":50},[14,112976,112977,112978,112980,112981,82874,112983,28727],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[34,112979,80145],{}," 是 site 的名字，比如 ",[34,112982,111821],{},[34,112984,112244],{},[27,112986,112988],{"className":29,"code":112987,"language":31,"meta":32,"style":32},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[34,112989,112990],{"__ignoreMap":32},[37,112991,112992,112994,112996],{"class":39,"line":40},[37,112993,103919],{"class":50},[37,112995,55],{"class":54},[37,112997,112158],{"class":50},[14,112999,113000],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[27,113002,113004],{"className":29,"code":113003,"language":31,"meta":32,"style":32},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[34,113005,113006,113018],{"__ignoreMap":32},[37,113007,113008,113010,113012,113014,113016],{"class":39,"line":40},[37,113009,1907],{"class":54},[37,113011,103734],{"class":50},[37,113013,1418],{"class":54},[37,113015,4443],{"class":61},[37,113017,4089],{"class":50},[37,113019,113020,113022,113024,113026,113028,113030,113032,113034,113036,113038],{"class":39,"line":47},[37,113021,104180],{"class":54},[37,113023,103720],{"class":61},[37,113025,165],{"class":50},[37,113027,579],{"class":54},[37,113029,112183],{"class":185},[37,113031,1404],{"class":61},[37,113033,80145],{"class":50},[37,113035,1454],{"class":61},[37,113037,772],{"class":185},[37,113039,280],{"class":50},[14,113041,113042,113043,113046,113047,113049],{},"如果 site 没找到，就主动报错。",[34,113044,113045],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[34,113048,80145],{}," 的值放进字符串里。",[27,113051,113053],{"className":29,"code":113052,"language":31,"meta":32,"style":32},"return data.site_xpos[site_id].copy()\n",[34,113054,113055],{"__ignoreMap":32},[37,113056,113057,113059],{"class":39,"line":40},[37,113058,17387],{"class":54},[37,113060,112200],{"class":50},[14,113062,113063,113064,113066,113067,113070],{},"返回这个 site 的世界坐标。",[34,113065,103965],{}," 里的每一行都是一个 site 的 ",[34,113068,113069],{},"(x, y, z)"," 坐标。",[27,113072,113074],{"className":29,"code":113073,"language":31,"meta":32,"style":32},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[34,113075,113076],{"__ignoreMap":32},[37,113077,113078,113080,113082],{"class":39,"line":40},[37,113079,32285],{"class":54},[37,113081,112215],{"class":2320},[37,113083,112218],{"class":50},[14,113085,113086],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[27,113088,113090],{"className":29,"code":113089,"language":31,"meta":32,"style":32},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[34,113091,113092,113104],{"__ignoreMap":32},[37,113093,113094,113096,113098,113100,113102],{"class":39,"line":40},[37,113095,111853],{"class":50},[37,113097,55],{"class":54},[37,113099,112228],{"class":50},[37,113101,111821],{"class":185},[37,113103,280],{"class":50},[37,113105,113106,113108,113110,113112,113114],{"class":39,"line":47},[37,113107,111863],{"class":50},[37,113109,55],{"class":54},[37,113111,112228],{"class":50},[37,113113,112244],{"class":185},[37,113115,280],{"class":50},[14,113117,113118],{},"分别读取末端点和目标点的世界坐标。",[27,113120,113121],{"className":29,"code":112793,"language":31,"meta":32,"style":32},[34,113122,113123],{"__ignoreMap":32},[37,113124,113125,113127],{"class":39,"line":40},[37,113126,17387],{"class":54},[37,113128,112253],{"class":50},[14,113130,113131],{},"把四部分拼成一个观测数组：",[27,113133,113136],{"className":113134,"code":113135,"language":5536,"meta":32},[5534],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[34,113137,113135],{"__ignoreMap":32},[27,113139,113141],{"className":29,"code":113140,"language":31,"meta":32,"style":32},"dist = np.linalg.norm(tip - target)\n",[34,113142,113143],{"__ignoreMap":32},[37,113144,113145,113147,113149,113151,113153],{"class":39,"line":40},[37,113146,111881],{"class":50},[37,113148,55],{"class":54},[37,113150,111886],{"class":50},[37,113152,384],{"class":54},[37,113154,111891],{"class":50},[14,113156,113157,113158,113161,113162,113165],{},"计算 tip 到 target 的距离。",[34,113159,113160],{},"tip - target"," 得到一个三维向量，",[34,113163,113164],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,113167,14974],{},[27,113169,113172],{"className":113170,"code":113171,"language":5536,"meta":32},[5534],"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",[34,113173,113171],{"__ignoreMap":32},[27,113175,113177],{"className":29,"code":113176,"language":31,"meta":32,"style":32},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[34,113178,113179],{"__ignoreMap":32},[37,113180,113181,113183,113185,113187,113189],{"class":39,"line":40},[37,113182,112828],{"class":50},[37,113184,55],{"class":54},[37,113186,112322],{"class":61},[37,113188,6866],{"class":54},[37,113190,112327],{"class":50},[14,113192,113193,113194,113197,113198,113201],{},"计算动作惩罚。",[34,113195,113196],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[34,113199,113200],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[27,113203,113205],{"className":29,"code":113204,"language":31,"meta":32,"style":32},"return float(-dist - control_cost)\n",[34,113206,113207],{"__ignoreMap":32},[37,113208,113209,113211,113213,113215,113217,113219,113221],{"class":39,"line":40},[37,113210,17387],{"class":54},[37,113212,110082],{"class":61},[37,113214,165],{"class":50},[37,113216,384],{"class":54},[37,113218,111881],{"class":50},[37,113220,384],{"class":54},[37,113222,112344],{"class":50},[14,113224,113225],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[27,113227,113228],{"className":29,"code":111088,"language":31,"meta":32,"style":32},[34,113229,113230],{"__ignoreMap":32},[37,113231,113232,113234,113236],{"class":39,"line":40},[37,113233,111095],{"class":50},[37,113235,55],{"class":54},[37,113237,105046],{"class":61},[14,113239,113240],{},"累计奖励变量，记录整个运行过程的总分。",[27,113242,113244],{"className":29,"code":113243,"language":31,"meta":32,"style":32},"for step in range(500):\n",[34,113245,113246],{"__ignoreMap":32},[37,113247,113248,113250,113252,113254,113256,113258,113260],{"class":39,"line":40},[37,113249,3375],{"class":54},[37,113251,31954],{"class":50},[37,113253,26385],{"class":54},[37,113255,32781],{"class":61},[37,113257,165],{"class":50},[37,113259,65410],{"class":61},[37,113261,31125],{"class":50},[14,113263,113264],{},"运行 500 个控制步。",[27,113266,113267],{"className":29,"code":104828,"language":31,"meta":32,"style":32},[34,113268,113269],{"__ignoreMap":32},[37,113270,113271],{"class":39,"line":40},[37,113272,104828],{"class":50},[14,113274,113275,113276,101303,113278,113280],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[34,113277,103516],{},[34,113279,103519],{}," 是当前状态下的坐标。",[27,113282,113284],{"className":29,"code":113283,"language":31,"meta":32,"style":32},"error = target - tip\n",[34,113285,113286],{"__ignoreMap":32},[37,113287,113288,113290,113292,113294,113296],{"class":39,"line":40},[37,113289,112881],{"class":50},[37,113291,55],{"class":54},[37,113293,112453],{"class":50},[37,113295,384],{"class":54},[37,113297,112458],{"class":50},[14,113299,113300],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[27,113302,113304],{"className":29,"code":113303,"language":31,"meta":32,"style":32},"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",[34,113305,113306,113338],{"__ignoreMap":32},[37,113307,113308,113310,113312,113314,113316,113318,113320,113322,113324,113326,113328,113330,113332,113334,113336],{"class":39,"line":40},[37,113309,106156],{"class":50},[37,113311,135],{"class":61},[37,113313,4793],{"class":50},[37,113315,55],{"class":54},[37,113317,112475],{"class":50},[37,113319,105545],{"class":61},[37,113321,6866],{"class":54},[37,113323,112482],{"class":50},[37,113325,602],{"class":61},[37,113327,112487],{"class":50},[37,113329,384],{"class":54},[37,113331,102688],{"class":61},[37,113333,12776],{"class":50},[37,113335,102688],{"class":61},[37,113337,280],{"class":50},[37,113339,113340,113342,113344,113346,113348,113350,113352,113354,113356,113358,113360,113362,113364,113366,113368],{"class":39,"line":47},[37,113341,106156],{"class":50},[37,113343,332],{"class":61},[37,113345,4793],{"class":50},[37,113347,55],{"class":54},[37,113349,112475],{"class":50},[37,113351,105545],{"class":61},[37,113353,6866],{"class":54},[37,113355,112482],{"class":50},[37,113357,135],{"class":61},[37,113359,112487],{"class":50},[37,113361,384],{"class":54},[37,113363,102688],{"class":61},[37,113365,12776],{"class":50},[37,113367,102688],{"class":61},[37,113369,280],{"class":50},[14,113371,113372,113373,113376],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[34,113374,113375],{},"error -> ctrl -> step"," 的流程。",[27,113378,113379],{"className":29,"code":104790,"language":31,"meta":32,"style":32},[34,113380,113381],{"__ignoreMap":32},[37,113382,113383],{"class":39,"line":40},[37,113384,104790],{"class":50},[14,113386,113387],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[27,113389,113391],{"className":29,"code":113390,"language":31,"meta":32,"style":32},"obs = get_obs(model, data)\n",[34,113392,113393],{"__ignoreMap":32},[37,113394,113395,113397,113399],{"class":39,"line":40},[37,113396,111139],{"class":50},[37,113398,55],{"class":54},[37,113400,112576],{"class":50},[14,113402,113403,113404,113407],{},"读取最新观测。后面打印 ",[34,113405,113406],{},"obs.shape[0]","，用来确认观测维度是 10。",[469,113409,102601],{"id":102600},[14,113411,113412],{},"观测维度为:",[27,113414,113417],{"className":113415,"code":113416,"language":5536,"meta":32},[5534],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[34,113418,113416],{"__ignoreMap":32},[14,113420,113421],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113423,113424],{},"程序每 100 步打印：",[27,113426,113429],{"className":113427,"code":113428,"language":5536,"meta":32},[5534],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[34,113430,113428],{"__ignoreMap":32},[14,113432,113433,113434,113436],{},"如果控制有效，你应该看到最终 ",[34,113435,103516],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[469,113438,102633],{"id":102632},[481,113440,113441,113444,113447,113453,113459,113466,113476],{},[484,113442,113443],{},"修改目标点位置。",[484,113445,113446],{},"重新运行，观察最终 tip 是否变化。",[484,113448,113449,113450,113452],{},"把 gravity 改成 ",[34,113451,102874],{},"，观察控制是否变差。",[484,113454,111466,113455,111470,113457,28727],{},[34,113456,102443],{},[34,113458,602],{},[484,113460,102696,113461,102699,113463,113465],{},[34,113462,110881],{},[34,113464,107592],{},"，观察机械臂是否更难移动。",[484,113467,102696,113468,82865,113470,102699,113472,113475],{},[34,113469,103519],{},[34,113471,104431],{},[34,113473,113474],{},"0.2 0 0.6","，观察 reward 和 final tip。",[484,113477,113478],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[469,113480,102738],{"id":102737},[498,113482,113484],{"id":113483},"site-not-found",[34,113485,113486],{},"site not found",[14,113488,113489,113490,101303,113493,28727],{},"检查 XML 中是否有 ",[34,113491,113492],{},"site name=\"tip\"",[34,113494,113495],{},"site name=\"target\"",[498,113497,113498],{"id":113498},"机械臂完全不动",[14,113500,102808],{},[481,113502,113503,113508,113511,113516],{},[484,113504,113505,113507],{},[34,113506,102443],{}," 是否为 2",[484,113509,113510],{},"actuator 是否引用正确 joint",[484,113512,113513,113515],{},[34,113514,101361],{}," 是否被赋值",[484,113517,113518,113519],{},"是否执行了 ",[34,113520,100970],{},[498,113522,113523],{"id":113523},"控制效果不好",[14,113525,113526],{},"正常。本章重点不是控制器最优，而是任务结构:",[27,113528,113531],{"className":113529,"code":113530,"language":5536,"meta":32},[5534],"obs → action → mj_step → reward → next_obs\n",[34,113532,113530],{"__ignoreMap":32},[498,113534,113536],{"id":113535},"tip-坐标不变化","tip 坐标不变化",[14,113538,102860],{},[481,113540,113541,113546,113554,113563],{},[484,113542,113543,113544,28727],{},"是否每步调用了 ",[34,113545,100970],{},[484,113547,113548,113549,101303,113551,28727],{},"是否写入了 ",[34,113550,106411],{},[34,113552,113553],{},"data.ctrl[1]",[484,113555,113556,113557,735,113560,28727],{},"actuator 是否正确引用 ",[34,113558,113559],{},"joint1",[34,113561,113562],{},"joint2",[484,113564,113565],{},"控制输入是否太小。",[498,113567,113568],{"id":113568},"目标点不会动",[14,113570,113571],{},"本章的 target 是固定 site：",[27,113573,113575],{"className":53403,"code":113574,"language":53405,"meta":32,"style":32},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[34,113576,113577],{"__ignoreMap":32},[37,113578,113579,113581,113583,113585,113587,113589,113591,113593,113596],{"class":39,"line":40},[37,113580,1418],{"class":50},[37,113582,103495],{"class":51636},[37,113584,15261],{"class":2320},[37,113586,55],{"class":50},[37,113588,112244],{"class":185},[37,113590,101391],{"class":2320},[37,113592,55],{"class":50},[37,113594,113595],{"class":185},"\"0.5 0 0.4\"",[37,113597,113598],{"class":50}," ...\u002F>\n",[14,113600,113601,113602,113604],{},"它直接挂在 ",[34,113603,102126],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[498,113606,113607],{"id":113607},"机械臂不像真实机械臂",[14,113609,113610],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[469,113612,102892],{"id":102891},[14,113614,113615],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113617,113618],{},"核心公式：",[27,113620,113623],{"className":113621,"code":113622,"language":5536,"meta":32},[5534],"distance = ||tip - target||\nreward = -distance - action_cost\n",[34,113624,113622],{"__ignoreMap":32},[14,113626,113627],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[446,113629,113630],{},"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":32,"searchDepth":47,"depth":47,"links":113632},[113633,113634,113635,113640,113644,113645,113646,113654],{"id":100931,"depth":47,"text":100932},{"id":101054,"depth":47,"text":101055},{"id":101329,"depth":47,"text":101330,"children":113636},[113637,113638,113639],{"id":111836,"depth":104,"text":111837},{"id":111912,"depth":104,"text":111912},{"id":111942,"depth":104,"text":111943},{"id":101537,"depth":47,"text":101538,"children":113641},[113642,113643],{"id":101857,"depth":104,"text":101857},{"id":101993,"depth":104,"text":101993},{"id":102600,"depth":47,"text":102601},{"id":102632,"depth":47,"text":102633},{"id":102737,"depth":47,"text":102738,"children":113647},[113648,113649,113650,113651,113652,113653],{"id":113483,"depth":104,"text":113486},{"id":113498,"depth":104,"text":113498},{"id":113523,"depth":104,"text":113523},{"id":113535,"depth":104,"text":113536},{"id":113568,"depth":104,"text":113568},{"id":113607,"depth":104,"text":113607},{"id":102891,"depth":47,"text":102892},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111640,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113661,"title":113662,"body":113663,"description":32,"extension":452,"meta":117125,"navigation":454,"path":117126,"seo":117127,"stem":117128,"__hash__":117129},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113664,"toc":117096},[113665,113668,113670,113673,113676,113701,113704,113710,113713,113719,113721,113723,113747,113749,113767,113769,113812,113814,113841,113843,113846,113898,113901,113907,113916,113919,113957,113960,113999,114002,114010,114017,114020,114026,114028,114082,114089,114134,114137,114141,114157,114167,114169,115430,115432,115444,115446,115457,115459,115462,115483,115486,115489,115522,115528,115531,115564,115567,115570,115611,115616,115630,115633,115646,115651,115674,115676,115691,115701,115716,115723,115743,115758,115776,115779,115796,115804,115820,115826,115858,115871,115903,115913,115948,115962,116008,116022,116064,116075,116088,116094,116127,116130,116157,116167,116207,116217,116234,116241,116259,116262,116303,116316,116331,116334,116357,116360,116372,116375,116394,116399,116420,116423,116438,116441,116475,116487,116502,116505,116530,116533,116552,116555,116587,116590,116614,116620,116650,116657,116670,116673,116675,116677,116683,116686,116689,116701,116704,116706,116760,116762,116766,116772,116781,116784,116791,116793,116816,116819,116823,116825,116843,116849,116851,116884,116887,116893,116897,116900,116920,116925,116929,116936,116956,116961,116965,116968,116988,116991,117077,117081,117084,117090,117093],[10,113666,113662],{"id":113667},"_8gymnasium-风格强化学习接口基础",[469,113669,100932],{"id":100931},[14,113671,113672],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113674,113675],{},"你将实现:",[27,113677,113679],{"className":29,"code":113678,"language":31,"meta":32,"style":32},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[34,113680,113681,113691],{"__ignoreMap":32},[37,113682,113683,113686,113688],{"class":39,"line":40},[37,113684,113685],{"class":50},"obs, info ",[37,113687,55],{"class":54},[37,113689,113690],{"class":50}," env.reset()\n",[37,113692,113693,113696,113698],{"class":39,"line":47},[37,113694,113695],{"class":50},"obs, reward, terminated, truncated, info ",[37,113697,55],{"class":54},[37,113699,113700],{"class":50}," env.step(action)\n",[14,113702,113703],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113705,113706,113707,113709],{},"前面章节的代码都是“脚本式”的：在 ",[34,113708,102580],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113711,113712],{},"可以先记住 Gymnasium 环境的核心交互：",[27,113714,113717],{"className":113715,"code":113716,"language":5536,"meta":32},[5534],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[34,113718,113716],{"__ignoreMap":32},[469,113720,101055],{"id":101054},[14,113722,101058],{},[27,113724,113725],{"className":24163,"code":104673,"language":24165,"meta":32,"style":32},[34,113726,113727],{"__ignoreMap":32},[37,113728,113729,113731,113733,113735,113737,113739,113741,113743,113745],{"class":39,"line":40},[37,113730,24918],{"class":2320},[37,113732,26657],{"class":185},[37,113734,24175],{"class":185},[37,113736,26742],{"class":61},[37,113738,104688],{"class":185},[37,113740,101083],{"class":185},[37,113742,102786],{"class":185},[37,113744,101099],{"class":185},[37,113746,104697],{"class":185},[14,113748,103104],{},[27,113750,113752],{"className":24163,"code":113751,"language":24165,"meta":32,"style":32},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[34,113753,113754],{"__ignoreMap":32},[37,113755,113756,113758,113760,113762,113764],{"class":39,"line":40},[37,113757,24172],{"class":2320},[37,113759,24175],{"class":185},[37,113761,101215],{"class":185},[37,113763,107996],{"class":185},[37,113765,113766],{"class":185}," gymnasium\n",[14,113768,103121],{},[27,113770,113772],{"className":24163,"code":113771,"language":24165,"meta":32,"style":32},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[34,113773,113774,113791,113800],{"__ignoreMap":32},[37,113775,113776,113778,113780,113782,113785,113787,113789],{"class":39,"line":40},[37,113777,30672],{"class":2320},[37,113779,29518],{"class":185},[37,113781,25457],{"class":61},[37,113783,113784],{"class":185}," mujoco-gym-api",[37,113786,101260],{"class":185},[37,113788,101263],{"class":61},[37,113790,101266],{"class":61},[37,113792,113793,113795,113797],{"class":39,"line":47},[37,113794,30672],{"class":2320},[37,113796,101273],{"class":185},[37,113798,113799],{"class":185}," mujoco-gym-api\n",[37,113801,113802,113804,113806,113808,113810],{"class":39,"line":104},[37,113803,24172],{"class":2320},[37,113805,24175],{"class":185},[37,113807,101215],{"class":185},[37,113809,107996],{"class":185},[37,113811,113766],{"class":185},[14,113813,101289],{},[481,113815,113816,113826,113829,113835],{},[484,113817,113818,113819,113822,113823,28727],{},"本章使用 ",[34,113820,113821],{},"gymnasium","，不是旧版 ",[34,113824,113825],{},"gym",[484,113827,113828],{},"Gymnasium API 与旧 Gym API 有差异。",[484,113830,113831,113832,28727],{},"旧 Gym 常见返回值是 4 个: ",[34,113833,113834],{},"obs, reward, done, info",[484,113836,113837,113838,28727],{},"Gymnasium 返回值是 5 个: ",[34,113839,113840],{},"obs, reward, terminated, truncated, info",[469,113842,101330],{"id":101329},[14,113844,113845],{},"强化学习环境接口包含:",[661,113847,113848,113857],{},[664,113849,113850],{},[667,113851,113852,113855],{},[670,113853,113854],{"align":24077},"方法",[670,113856,102981],{"align":24077},[708,113858,113859,113869,113879,113889],{},[667,113860,113861,113866],{},[713,113862,113863],{"align":24077},[34,113864,113865],{},"reset()",[713,113867,113868],{"align":24077},"重置环境",[667,113870,113871,113876],{},[713,113872,113873],{"align":24077},[34,113874,113875],{},"step(action)",[713,113877,113878],{"align":24077},"执行动作",[667,113880,113881,113886],{},[713,113882,113883],{"align":24077},[34,113884,113885],{},"observation_space",[713,113887,113888],{"align":24077},"观测空间",[667,113890,113891,113896],{},[713,113892,113893],{"align":24077},[34,113894,113895],{},"action_space",[713,113897,23995],{"align":24077},[14,113899,113900],{},"一个最小环境需要完成:",[27,113902,113905],{"className":113903,"code":113904,"language":5536,"meta":32},[5534],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[34,113906,113904],{"__ignoreMap":32},[498,113908,113910,101303,113913,104923],{"id":113909},"terminated-和-truncated-的区别",[34,113911,113912],{},"terminated",[34,113914,113915],{},"truncated",[14,113917,113918],{},"Gymnasium 把“结束”拆成两个概念：",[661,113920,113921,113931],{},[664,113922,113923],{},[667,113924,113925,113927,113929],{},[670,113926,104859],{"align":24077},[670,113928,100985],{"align":24077},[670,113930,21528],{"align":24077},[708,113932,113933,113945],{},[667,113934,113935,113939,113942],{},[713,113936,113937],{"align":24077},[34,113938,113912],{},[713,113940,113941],{"align":24077},"任务自然结束",[713,113943,113944],{"align":24077},"机械臂到达目标、机器人摔倒",[667,113946,113947,113951,113954],{},[713,113948,113949],{"align":24077},[34,113950,113915],{},[713,113952,113953],{"align":24077},"因外部限制截断",[713,113955,113956],{"align":24077},"达到最大步数、时间限制",[14,113958,113959],{},"本章中：",[27,113961,113963],{"className":29,"code":113962,"language":31,"meta":32,"style":32},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[34,113964,113965,113980],{"__ignoreMap":32},[37,113966,113967,113970,113972,113975,113977],{"class":39,"line":40},[37,113968,113969],{"class":50},"terminated ",[37,113971,55],{"class":54},[37,113973,113974],{"class":50}," dist ",[37,113976,1418],{"class":54},[37,113978,113979],{"class":61}," 0.05\n",[37,113981,113982,113985,113987,113989,113992,113994,113996],{"class":39,"line":47},[37,113983,113984],{"class":50},"truncated ",[37,113986,55],{"class":54},[37,113988,39210],{"class":61},[37,113990,113991],{"class":50},".steps ",[37,113993,2075],{"class":54},[37,113995,39210],{"class":61},[37,113997,113998],{"class":50},".max_steps\n",[14,114000,114001],{},"也就是：",[481,114003,114004,114007],{},[484,114005,114006],{},"末端距离目标小于 0.05，任务成功结束。",[484,114008,114009],{},"步数超过上限，episode 被截断。",[498,114011,114013,101303,114015],{"id":114012},"observation_space-和-action_space",[34,114014,113885],{},[34,114016,113895],{},[14,114018,114019],{},"这两个对象告诉算法：",[27,114021,114024],{"className":114022,"code":114023,"language":5536,"meta":32},[5534],"观测长什么样\n动作允许多大\n",[34,114025,114023],{"__ignoreMap":32},[14,114027,14974],{},[27,114029,114031],{"className":29,"code":114030,"language":31,"meta":32,"style":32},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[34,114032,114033],{"__ignoreMap":32},[37,114034,114035,114037,114040,114042,114045,114048,114051,114053,114055,114058,114060,114062,114064,114066,114068,114070,114072,114075,114077,114079],{"class":39,"line":40},[37,114036,31162],{"class":61},[37,114038,114039],{"class":50},".action_space ",[37,114041,55],{"class":54},[37,114043,114044],{"class":50}," spaces.Box(",[37,114046,114047],{"class":159},"low",[37,114049,114050],{"class":54},"=-",[37,114052,102688],{"class":61},[37,114054,12776],{"class":50},[37,114056,114057],{"class":159},"high",[37,114059,55],{"class":54},[37,114061,102688],{"class":61},[37,114063,12776],{"class":50},[37,114065,96248],{"class":159},[37,114067,55],{"class":54},[37,114069,165],{"class":50},[37,114071,602],{"class":61},[37,114073,114074],{"class":50},",), ",[37,114076,93830],{"class":159},[37,114078,55],{"class":54},[37,114080,114081],{"class":50},"np.float32)\n",[14,114083,114084,114085,114088],{},"表示动作是 2 维数组，每个值都在 ",[34,114086,114087],{},"[-1, 1]"," 范围内。",[27,114090,114092],{"className":29,"code":114091,"language":31,"meta":32,"style":32},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[34,114093,114094],{"__ignoreMap":32},[37,114095,114096,114098,114101,114103,114105,114107,114109,114112,114114,114116,114118,114120,114122,114124,114126,114128,114130,114132],{"class":39,"line":40},[37,114097,31162],{"class":61},[37,114099,114100],{"class":50},".observation_space ",[37,114102,55],{"class":54},[37,114104,114044],{"class":50},[37,114106,114047],{"class":159},[37,114108,114050],{"class":54},[37,114110,114111],{"class":50},"np.inf, ",[37,114113,114057],{"class":159},[37,114115,55],{"class":54},[37,114117,114111],{"class":50},[37,114119,96248],{"class":159},[37,114121,55],{"class":54},[37,114123,165],{"class":50},[37,114125,98],{"class":61},[37,114127,114074],{"class":50},[37,114129,93830],{"class":159},[37,114131,55],{"class":54},[37,114133,114081],{"class":50},[14,114135,114136],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[498,114138,114140],{"id":114139},"frame_skip-是什么","frame_skip 是什么",[27,114142,114144],{"className":29,"code":114143,"language":31,"meta":32,"style":32},"self.frame_skip = 5\n",[34,114145,114146],{"__ignoreMap":32},[37,114147,114148,114150,114153,114155],{"class":39,"line":40},[37,114149,31162],{"class":61},[37,114151,114152],{"class":50},".frame_skip ",[37,114154,55],{"class":54},[37,114156,54763],{"class":61},[14,114158,114159,114160,114163,114164,114166],{},"表示外部调用一次 ",[34,114161,114162],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[34,114165,101500],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[469,114168,101538],{"id":101537},[27,114170,114172],{"className":29,"code":114171,"language":31,"meta":32,"style":32},"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",[34,114173,114174,114186,114192,114202,114213,114217,114221,114229,114234,114238,114242,114246,114250,114254,114258,114262,114267,114271,114275,114279,114284,114288,114292,114296,114300,114304,114308,114312,114316,114320,114324,114328,114332,114336,114354,114369,114373,114386,114396,114411,114428,114432,114453,114472,114497,114511,114515,114525,114537,114547,114551,114593,114631,114635,114645,114661,114676,114695,114702,114706,114719,114734,114749,114762,114781,114797,114801,114842,114857,114872,114876,114915,114926,114939,114943,114953,114962,114966,114976,114991,115009,115013,115024,115041,115054,115058,115068,115072,115083,115094,115098,115112,115126,115142,115146,115159,115176,115191,115198,115202,115206,115218,115228,115246,115258,115270,115274,115282,115298,115307,115316,115324,115366,115379,115384,115388,115406,115410,115414,115426],{"__ignoreMap":32},[37,114175,114176,114178,114181,114183],{"class":39,"line":40},[37,114177,30732],{"class":54},[37,114179,114180],{"class":50}," gymnasium ",[37,114182,31722],{"class":54},[37,114184,114185],{"class":50}," gym\n",[37,114187,114188,114190],{"class":39,"line":47},[37,114189,30732],{"class":54},[37,114191,101586],{"class":50},[37,114193,114194,114196,114198,114200],{"class":39,"line":104},[37,114195,30732],{"class":54},[37,114197,31719],{"class":50},[37,114199,31722],{"class":54},[37,114201,31725],{"class":50},[37,114203,114204,114206,114208,114210],{"class":39,"line":113},[37,114205,31076],{"class":54},[37,114207,114180],{"class":50},[37,114209,30732],{"class":54},[37,114211,114212],{"class":50}," spaces\n",[37,114214,114215],{"class":39,"line":189},[37,114216,2757],{"emptyLinePlaceholder":454},[37,114218,114219],{"class":39,"line":195},[37,114220,2757],{"emptyLinePlaceholder":454},[37,114222,114223,114225,114227],{"class":39,"line":201},[37,114224,101599],{"class":61},[37,114226,13905],{"class":54},[37,114228,101604],{"class":185},[37,114230,114231],{"class":39,"line":207},[37,114232,114233],{"class":185},"\u003Cmujoco model=\"gym_reacher\">\n",[37,114235,114236],{"class":39,"line":213},[37,114237,112023],{"class":185},[37,114239,114240],{"class":39,"line":218},[37,114241,2757],{"emptyLinePlaceholder":454},[37,114243,114244],{"class":39,"line":227},[37,114245,101623],{"class":185},[37,114247,114248],{"class":39,"line":232},[37,114249,112041],{"class":185},[37,114251,114252],{"class":39,"line":238},[37,114253,2757],{"emptyLinePlaceholder":454},[37,114255,114256],{"class":39,"line":244},[37,114257,112050],{"class":185},[37,114259,114260],{"class":39,"line":250},[37,114261,112055],{"class":185},[37,114263,114264],{"class":39,"line":256},[37,114265,114266],{"class":185},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[37,114268,114269],{"class":39,"line":261},[37,114270,2757],{"emptyLinePlaceholder":454},[37,114272,114273],{"class":39,"line":267},[37,114274,112069],{"class":185},[37,114276,114277],{"class":39,"line":283},[37,114278,112074],{"class":185},[37,114280,114281],{"class":39,"line":288},[37,114282,114283],{"class":185},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[37,114285,114286],{"class":39,"line":294},[37,114287,112084],{"class":185},[37,114289,114290],{"class":39,"line":300},[37,114291,106723],{"class":185},[37,114293,114294],{"class":39,"line":306},[37,114295,101652],{"class":185},[37,114297,114298],{"class":39,"line":312},[37,114299,101657],{"class":185},[37,114301,114302],{"class":39,"line":317},[37,114303,2757],{"emptyLinePlaceholder":454},[37,114305,114306],{"class":39,"line":323},[37,114307,106740],{"class":185},[37,114309,114310],{"class":39,"line":337},[37,114311,112109],{"class":185},[37,114313,114314],{"class":39,"line":342},[37,114315,112114],{"class":185},[37,114317,114318],{"class":39,"line":347},[37,114319,106750],{"class":185},[37,114321,114322],{"class":39,"line":352},[37,114323,101662],{"class":185},[37,114325,114326],{"class":39,"line":357},[37,114327,95983],{"class":185},[37,114329,114330],{"class":39,"line":362},[37,114331,2757],{"emptyLinePlaceholder":454},[37,114333,114334],{"class":39,"line":367},[37,114335,2757],{"emptyLinePlaceholder":454},[37,114337,114338,114340,114343,114345,114347,114349,114352],{"class":39,"line":373},[37,114339,15035],{"class":54},[37,114341,114342],{"class":2320}," ReacherEnv",[37,114344,165],{"class":50},[37,114346,113825],{"class":2320},[37,114348,1068],{"class":50},[37,114350,114351],{"class":2320},"Env",[37,114353,31125],{"class":50},[37,114355,114356,114359,114361,114363,114366],{"class":39,"line":392},[37,114357,114358],{"class":50},"    metadata ",[37,114360,55],{"class":54},[37,114362,4798],{"class":50},[37,114364,114365],{"class":185},"\"render_modes\"",[37,114367,114368],{"class":50},": []}\n",[37,114370,114371],{"class":39,"line":398},[37,114372,2757],{"emptyLinePlaceholder":454},[37,114374,114375,114377,114379,114382,114384],{"class":39,"line":409},[37,114376,31140],{"class":54},[37,114378,31143],{"class":61},[37,114380,114381],{"class":50},"(self) -> ",[37,114383,95971],{"class":61},[37,114385,4089],{"class":50},[37,114387,114388,114390,114392,114394],{"class":39,"line":415},[37,114389,31156],{"class":61},[37,114391,17602],{"class":50},[37,114393,31168],{"class":61},[37,114395,2333],{"class":50},[37,114397,114398,114400,114403,114405,114407,114409],{"class":39,"line":420},[37,114399,31184],{"class":61},[37,114401,114402],{"class":50},".model ",[37,114404,55],{"class":54},[37,114406,101697],{"class":50},[37,114408,101599],{"class":61},[37,114410,280],{"class":50},[37,114412,114413,114415,114418,114420,114423,114425],{"class":39,"line":425},[37,114414,31184],{"class":61},[37,114416,114417],{"class":50},".data ",[37,114419,55],{"class":54},[37,114421,114422],{"class":50}," mujoco.MjData(",[37,114424,31162],{"class":61},[37,114426,114427],{"class":50},".model)\n",[37,114429,114430],{"class":39,"line":431},[37,114431,2757],{"emptyLinePlaceholder":454},[37,114433,114434,114436,114439,114441,114444,114446,114449,114451],{"class":39,"line":436},[37,114435,31184],{"class":61},[37,114437,114438],{"class":50},".tip_site_id ",[37,114440,55],{"class":54},[37,114442,114443],{"class":50}," mujoco.mj_name2id(",[37,114445,31162],{"class":61},[37,114447,114448],{"class":50},".model, mujoco.mjtObj.mjOBJ_SITE, ",[37,114450,111821],{"class":185},[37,114452,280],{"class":50},[37,114454,114455,114457,114460,114462,114464,114466,114468,114470],{"class":39,"line":442},[37,114456,31184],{"class":61},[37,114458,114459],{"class":50},".target_site_id ",[37,114461,55],{"class":54},[37,114463,114443],{"class":50},[37,114465,31162],{"class":61},[37,114467,114448],{"class":50},[37,114469,112244],{"class":185},[37,114471,280],{"class":50},[37,114473,114474,114476,114478,114480,114482,114484,114487,114489,114491,114493,114495],{"class":39,"line":8374},[37,114475,2854],{"class":54},[37,114477,39210],{"class":61},[37,114479,114438],{"class":50},[37,114481,1418],{"class":54},[37,114483,4443],{"class":61},[37,114485,114486],{"class":54}," or",[37,114488,39210],{"class":61},[37,114490,114459],{"class":50},[37,114492,1418],{"class":54},[37,114494,4443],{"class":61},[37,114496,4089],{"class":50},[37,114498,114499,114502,114504,114506,114509],{"class":39,"line":8386},[37,114500,114501],{"class":54},"            raise",[37,114503,103720],{"class":61},[37,114505,165],{"class":50},[37,114507,114508],{"class":185},"\"required sites not found\"",[37,114510,280],{"class":50},[37,114512,114513],{"class":39,"line":8398},[37,114514,2757],{"emptyLinePlaceholder":454},[37,114516,114517,114519,114521,114523],{"class":39,"line":10057},[37,114518,31184],{"class":61},[37,114520,114152],{"class":50},[37,114522,55],{"class":54},[37,114524,54763],{"class":61},[37,114526,114527,114529,114532,114534],{"class":39,"line":10082},[37,114528,31184],{"class":61},[37,114530,114531],{"class":50},".max_steps ",[37,114533,55],{"class":54},[37,114535,114536],{"class":61}," 200\n",[37,114538,114539,114541,114543,114545],{"class":39,"line":10105},[37,114540,31184],{"class":61},[37,114542,113991],{"class":50},[37,114544,55],{"class":54},[37,114546,47670],{"class":61},[37,114548,114549],{"class":39,"line":10129},[37,114550,2757],{"emptyLinePlaceholder":454},[37,114552,114553,114555,114557,114559,114561,114563,114565,114567,114569,114571,114573,114575,114577,114579,114581,114583,114585,114587,114589,114591],{"class":39,"line":10134},[37,114554,31184],{"class":61},[37,114556,114039],{"class":50},[37,114558,55],{"class":54},[37,114560,114044],{"class":50},[37,114562,114047],{"class":159},[37,114564,114050],{"class":54},[37,114566,102688],{"class":61},[37,114568,12776],{"class":50},[37,114570,114057],{"class":159},[37,114572,55],{"class":54},[37,114574,102688],{"class":61},[37,114576,12776],{"class":50},[37,114578,96248],{"class":159},[37,114580,55],{"class":54},[37,114582,165],{"class":50},[37,114584,602],{"class":61},[37,114586,114074],{"class":50},[37,114588,93830],{"class":159},[37,114590,55],{"class":54},[37,114592,114081],{"class":50},[37,114594,114595,114597,114599,114601,114603,114605,114607,114609,114611,114613,114615,114617,114619,114621,114623,114625,114627,114629],{"class":39,"line":10139},[37,114596,31184],{"class":61},[37,114598,114100],{"class":50},[37,114600,55],{"class":54},[37,114602,114044],{"class":50},[37,114604,114047],{"class":159},[37,114606,114050],{"class":54},[37,114608,114111],{"class":50},[37,114610,114057],{"class":159},[37,114612,55],{"class":54},[37,114614,114111],{"class":50},[37,114616,96248],{"class":159},[37,114618,55],{"class":54},[37,114620,165],{"class":50},[37,114622,98],{"class":61},[37,114624,114074],{"class":50},[37,114626,93830],{"class":159},[37,114628,55],{"class":54},[37,114630,114081],{"class":50},[37,114632,114633],{"class":39,"line":10144},[37,114634,2757],{"emptyLinePlaceholder":454},[37,114636,114637,114639,114642],{"class":39,"line":10153},[37,114638,31140],{"class":54},[37,114640,114641],{"class":2320}," _get_obs",[37,114643,114644],{"class":50},"(self) -> np.ndarray:\n",[37,114646,114647,114649,114651,114653,114656,114658],{"class":39,"line":10158},[37,114648,112422],{"class":50},[37,114650,55],{"class":54},[37,114652,39210],{"class":61},[37,114654,114655],{"class":50},".data.site_xpos[",[37,114657,31162],{"class":61},[37,114659,114660],{"class":50},".tip_site_id].copy()\n",[37,114662,114663,114665,114667,114669,114671,114673],{"class":39,"line":10164},[37,114664,112435],{"class":50},[37,114666,55],{"class":54},[37,114668,39210],{"class":61},[37,114670,114655],{"class":50},[37,114672,31162],{"class":61},[37,114674,114675],{"class":50},".target_site_id].copy()\n",[37,114677,114678,114680,114682,114685,114687,114690,114692],{"class":39,"line":10185},[37,114679,110467],{"class":50},[37,114681,55],{"class":54},[37,114683,114684],{"class":50}," np.concatenate([",[37,114686,31162],{"class":61},[37,114688,114689],{"class":50},".data.qpos.copy(), ",[37,114691,31162],{"class":61},[37,114693,114694],{"class":50},".data.qvel.copy(), tip, target])\n",[37,114696,114697,114699],{"class":39,"line":10191},[37,114698,15093],{"class":54},[37,114700,114701],{"class":50}," obs.astype(np.float32)\n",[37,114703,114704],{"class":39,"line":10205},[37,114705,2757],{"emptyLinePlaceholder":454},[37,114707,114708,114710,114713,114715,114717],{"class":39,"line":10211},[37,114709,31140],{"class":54},[37,114711,114712],{"class":2320}," _get_reward",[37,114714,114381],{"class":50},[37,114716,568],{"class":61},[37,114718,4089],{"class":50},[37,114720,114721,114723,114725,114727,114729,114731],{"class":39,"line":10238},[37,114722,112422],{"class":50},[37,114724,55],{"class":54},[37,114726,39210],{"class":61},[37,114728,114655],{"class":50},[37,114730,31162],{"class":61},[37,114732,114733],{"class":50},".tip_site_id]\n",[37,114735,114736,114738,114740,114742,114744,114746],{"class":39,"line":10247},[37,114737,112435],{"class":50},[37,114739,55],{"class":54},[37,114741,39210],{"class":61},[37,114743,114655],{"class":50},[37,114745,31162],{"class":61},[37,114747,114748],{"class":50},".target_site_id]\n",[37,114750,114751,114754,114756,114758,114760],{"class":39,"line":10253},[37,114752,114753],{"class":50},"        dist ",[37,114755,55],{"class":54},[37,114757,111886],{"class":50},[37,114759,384],{"class":54},[37,114761,111891],{"class":50},[37,114763,114764,114767,114769,114771,114773,114776,114778],{"class":39,"line":10261},[37,114765,114766],{"class":50},"        control_cost ",[37,114768,55],{"class":54},[37,114770,112322],{"class":61},[37,114772,6866],{"class":54},[37,114774,114775],{"class":50}," np.sum(np.square(",[37,114777,31162],{"class":61},[37,114779,114780],{"class":50},".data.ctrl))\n",[37,114782,114783,114785,114787,114789,114791,114793,114795],{"class":39,"line":10266},[37,114784,15093],{"class":54},[37,114786,110082],{"class":61},[37,114788,165],{"class":50},[37,114790,384],{"class":54},[37,114792,111881],{"class":50},[37,114794,384],{"class":54},[37,114796,112344],{"class":50},[37,114798,114799],{"class":39,"line":16945},[37,114800,2757],{"emptyLinePlaceholder":454},[37,114802,114803,114805,114808,114811,114813,114816,114818,114820,114822,114824,114826,114829,114832,114834,114836,114838,114840],{"class":39,"line":16951},[37,114804,31140],{"class":54},[37,114806,114807],{"class":2320}," reset",[37,114809,114810],{"class":50},"(self, ",[37,114812,967],{"class":54},[37,114814,114815],{"class":50},", seed: ",[37,114817,533],{"class":61},[37,114819,25451],{"class":54},[37,114821,39270],{"class":61},[37,114823,13905],{"class":54},[37,114825,39270],{"class":61},[37,114827,114828],{"class":50},", options: ",[37,114830,114831],{"class":61},"dict",[37,114833,25451],{"class":54},[37,114835,39270],{"class":61},[37,114837,13905],{"class":54},[37,114839,39270],{"class":61},[37,114841,31125],{"class":50},[37,114843,114844,114846,114849,114852,114854],{"class":39,"line":16974},[37,114845,31156],{"class":61},[37,114847,114848],{"class":50},"().reset(",[37,114850,114851],{"class":159},"seed",[37,114853,55],{"class":54},[37,114855,114856],{"class":50},"seed)\n",[37,114858,114859,114862,114864,114867,114869],{"class":39,"line":16980},[37,114860,114861],{"class":50},"        mujoco.mj_resetData(",[37,114863,31162],{"class":61},[37,114865,114866],{"class":50},".model, ",[37,114868,31162],{"class":61},[37,114870,114871],{"class":50},".data)\n",[37,114873,114874],{"class":39,"line":17003},[37,114875,2757],{"emptyLinePlaceholder":454},[37,114877,114878,114880,114883,114885,114887,114890,114892,114894,114896,114898,114900,114902,114904,114906,114908,114910,114912],{"class":39,"line":17017},[37,114879,31184],{"class":61},[37,114881,114882],{"class":50},".data.qpos[:] ",[37,114884,55],{"class":54},[37,114886,39210],{"class":61},[37,114888,114889],{"class":50},".np_random.uniform(",[37,114891,114047],{"class":159},[37,114893,114050],{"class":54},[37,114895,86545],{"class":61},[37,114897,12776],{"class":50},[37,114899,114057],{"class":159},[37,114901,55],{"class":54},[37,114903,86545],{"class":61},[37,114905,12776],{"class":50},[37,114907,160],{"class":159},[37,114909,55],{"class":54},[37,114911,31162],{"class":61},[37,114913,114914],{"class":50},".model.nq)\n",[37,114916,114917,114919,114922,114924],{"class":39,"line":17037},[37,114918,31184],{"class":61},[37,114920,114921],{"class":50},".data.qvel[:] ",[37,114923,55],{"class":54},[37,114925,105046],{"class":61},[37,114927,114928,114931,114933,114935,114937],{"class":39,"line":17043},[37,114929,114930],{"class":50},"        mujoco.mj_forward(",[37,114932,31162],{"class":61},[37,114934,114866],{"class":50},[37,114936,31162],{"class":61},[37,114938,114871],{"class":50},[37,114940,114941],{"class":39,"line":17054},[37,114942,2757],{"emptyLinePlaceholder":454},[37,114944,114945,114947,114949,114951],{"class":39,"line":17077},[37,114946,31184],{"class":61},[37,114948,113991],{"class":50},[37,114950,55],{"class":54},[37,114952,47670],{"class":61},[37,114954,114955,114957,114959],{"class":39,"line":17099},[37,114956,15093],{"class":54},[37,114958,39210],{"class":61},[37,114960,114961],{"class":50},"._get_obs(), {}\n",[37,114963,114964],{"class":39,"line":17104},[37,114965,2757],{"emptyLinePlaceholder":454},[37,114967,114968,114970,114973],{"class":39,"line":17110},[37,114969,31140],{"class":54},[37,114971,114972],{"class":2320}," step",[37,114974,114975],{"class":50},"(self, action):\n",[37,114977,114978,114980,114982,114985,114987,114989],{"class":39,"line":17124},[37,114979,110507],{"class":50},[37,114981,55],{"class":54},[37,114983,114984],{"class":50}," np.asarray(action, ",[37,114986,93830],{"class":159},[37,114988,55],{"class":54},[37,114990,114081],{"class":50},[37,114992,114993,114995,114997,114999,115001,115004,115006],{"class":39,"line":17137},[37,114994,110507],{"class":50},[37,114996,55],{"class":54},[37,114998,107732],{"class":50},[37,115000,31162],{"class":61},[37,115002,115003],{"class":50},".action_space.low, ",[37,115005,31162],{"class":61},[37,115007,115008],{"class":50},".action_space.high)\n",[37,115010,115011],{"class":39,"line":17142},[37,115012,2757],{"emptyLinePlaceholder":454},[37,115014,115015,115017,115020,115022],{"class":39,"line":17156},[37,115016,31184],{"class":61},[37,115018,115019],{"class":50},".data.ctrl[:] ",[37,115021,55],{"class":54},[37,115023,107755],{"class":50},[37,115025,115026,115028,115030,115032,115034,115036,115038],{"class":39,"line":17161},[37,115027,3753],{"class":54},[37,115029,101786],{"class":50},[37,115031,26385],{"class":54},[37,115033,32781],{"class":61},[37,115035,165],{"class":50},[37,115037,31162],{"class":61},[37,115039,115040],{"class":50},".frame_skip):\n",[37,115042,115043,115046,115048,115050,115052],{"class":39,"line":17167},[37,115044,115045],{"class":50},"            mujoco.mj_step(",[37,115047,31162],{"class":61},[37,115049,114866],{"class":50},[37,115051,31162],{"class":61},[37,115053,114871],{"class":50},[37,115055,115056],{"class":39,"line":17172},[37,115057,2757],{"emptyLinePlaceholder":454},[37,115059,115060,115062,115064,115066],{"class":39,"line":17186},[37,115061,31184],{"class":61},[37,115063,113991],{"class":50},[37,115065,9818],{"class":54},[37,115067,56035],{"class":61},[37,115069,115070],{"class":39,"line":17191},[37,115071,2757],{"emptyLinePlaceholder":454},[37,115073,115074,115076,115078,115080],{"class":39,"line":17196},[37,115075,110467],{"class":50},[37,115077,55],{"class":54},[37,115079,39210],{"class":61},[37,115081,115082],{"class":50},"._get_obs()\n",[37,115084,115085,115087,115089,115091],{"class":39,"line":17210},[37,115086,110572],{"class":50},[37,115088,55],{"class":54},[37,115090,39210],{"class":61},[37,115092,115093],{"class":50},"._get_reward()\n",[37,115095,115096],{"class":39,"line":17222},[37,115097,2757],{"emptyLinePlaceholder":454},[37,115099,115100,115102,115104,115106,115108,115110],{"class":39,"line":17227},[37,115101,112422],{"class":50},[37,115103,55],{"class":54},[37,115105,39210],{"class":61},[37,115107,114655],{"class":50},[37,115109,31162],{"class":61},[37,115111,114733],{"class":50},[37,115113,115114,115116,115118,115120,115122,115124],{"class":39,"line":17240},[37,115115,112435],{"class":50},[37,115117,55],{"class":54},[37,115119,39210],{"class":61},[37,115121,114655],{"class":50},[37,115123,31162],{"class":61},[37,115125,114748],{"class":50},[37,115127,115128,115130,115132,115134,115137,115139],{"class":39,"line":17245},[37,115129,114753],{"class":50},[37,115131,55],{"class":54},[37,115133,110082],{"class":61},[37,115135,115136],{"class":50},"(np.linalg.norm(tip ",[37,115138,384],{"class":54},[37,115140,115141],{"class":50}," target))\n",[37,115143,115144],{"class":39,"line":17250},[37,115145,2757],{"emptyLinePlaceholder":454},[37,115147,115148,115151,115153,115155,115157],{"class":39,"line":17255},[37,115149,115150],{"class":50},"        terminated ",[37,115152,55],{"class":54},[37,115154,113974],{"class":50},[37,115156,1418],{"class":54},[37,115158,113979],{"class":61},[37,115160,115161,115164,115166,115168,115170,115172,115174],{"class":39,"line":17268},[37,115162,115163],{"class":50},"        truncated ",[37,115165,55],{"class":54},[37,115167,39210],{"class":61},[37,115169,113991],{"class":50},[37,115171,2075],{"class":54},[37,115173,39210],{"class":61},[37,115175,113998],{"class":50},[37,115177,115178,115181,115183,115185,115188],{"class":39,"line":17273},[37,115179,115180],{"class":50},"        info ",[37,115182,55],{"class":54},[37,115184,4798],{"class":50},[37,115186,115187],{"class":185},"\"distance\"",[37,115189,115190],{"class":50},": dist}\n",[37,115192,115193,115195],{"class":39,"line":32971},[37,115194,15093],{"class":54},[37,115196,115197],{"class":50}," obs, reward, terminated, truncated, info\n",[37,115199,115200],{"class":39,"line":32977},[37,115201,2757],{"emptyLinePlaceholder":454},[37,115203,115204],{"class":39,"line":32983},[37,115205,2757],{"emptyLinePlaceholder":454},[37,115207,115208,115210,115212,115214,115216],{"class":39,"line":32989},[37,115209,32285],{"class":54},[37,115211,2330],{"class":2320},[37,115213,101683],{"class":50},[37,115215,95971],{"class":61},[37,115217,4089],{"class":50},[37,115219,115220,115223,115225],{"class":39,"line":32995},[37,115221,115222],{"class":50},"    env ",[37,115224,55],{"class":54},[37,115226,115227],{"class":50}," ReacherEnv()\n",[37,115229,115230,115233,115235,115238,115240,115242,115244],{"class":39,"line":33006},[37,115231,115232],{"class":50},"    obs, info ",[37,115234,55],{"class":54},[37,115236,115237],{"class":50}," env.reset(",[37,115239,114851],{"class":159},[37,115241,55],{"class":54},[37,115243,135],{"class":61},[37,115245,280],{"class":50},[37,115247,115248,115250,115252,115255],{"class":39,"line":33012},[37,115249,31638],{"class":61},[37,115251,165],{"class":50},[37,115253,115254],{"class":185},"\"initial obs shape:\"",[37,115256,115257],{"class":50},", obs.shape)\n",[37,115259,115260,115262,115264,115267],{"class":39,"line":33032},[37,115261,31638],{"class":61},[37,115263,165],{"class":50},[37,115265,115266],{"class":185},"\"initial info:\"",[37,115268,115269],{"class":50},", info)\n",[37,115271,115272],{"class":39,"line":33038},[37,115273,2757],{"emptyLinePlaceholder":454},[37,115275,115276,115278,115280],{"class":39,"line":33049},[37,115277,110438],{"class":50},[37,115279,55],{"class":54},[37,115281,105046],{"class":61},[37,115283,115284,115286,115288,115290,115292,115294,115296],{"class":39,"line":33055},[37,115285,3551],{"class":54},[37,115287,31954],{"class":50},[37,115289,26385],{"class":54},[37,115291,32781],{"class":61},[37,115293,165],{"class":50},[37,115295,1210],{"class":61},[37,115297,31125],{"class":50},[37,115299,115300,115302,115304],{"class":39,"line":33061},[37,115301,110507],{"class":50},[37,115303,55],{"class":54},[37,115305,115306],{"class":50}," env.action_space.sample()\n",[37,115308,115309,115312,115314],{"class":39,"line":33067},[37,115310,115311],{"class":50},"        obs, reward, terminated, truncated, info ",[37,115313,55],{"class":54},[37,115315,113700],{"class":50},[37,115317,115318,115320,115322],{"class":39,"line":33073},[37,115319,110582],{"class":50},[37,115321,9818],{"class":54},[37,115323,110587],{"class":50},[37,115325,115326,115328,115330,115332,115334,115337,115339,115341,115344,115346,115348,115351,115353,115355,115358,115360,115362,115364],{"class":39,"line":33079},[37,115327,32789],{"class":61},[37,115329,165],{"class":50},[37,115331,110616],{"class":185},[37,115333,110619],{"class":50},[37,115335,115336],{"class":185},"\"reward:\"",[37,115338,12776],{"class":50},[37,115340,32356],{"class":61},[37,115342,115343],{"class":50},"(reward, ",[37,115345,62],{"class":61},[37,115347,110630],{"class":50},[37,115349,115350],{"class":185},"\"distance:\"",[37,115352,12776],{"class":50},[37,115354,32356],{"class":61},[37,115356,115357],{"class":50},"(info[",[37,115359,115187],{"class":185},[37,115361,112487],{"class":50},[37,115363,62],{"class":61},[37,115365,175],{"class":50},[37,115367,115368,115370,115373,115376],{"class":39,"line":33085},[37,115369,2854],{"class":54},[37,115371,115372],{"class":50}," terminated ",[37,115374,115375],{"class":54},"or",[37,115377,115378],{"class":50}," truncated:\n",[37,115380,115381],{"class":39,"line":33091},[37,115382,115383],{"class":54},"            break\n",[37,115385,115386],{"class":39,"line":33111},[37,115387,2757],{"emptyLinePlaceholder":454},[37,115389,115390,115392,115394,115396,115398,115400,115402,115404],{"class":39,"line":33117},[37,115391,31638],{"class":61},[37,115393,165],{"class":50},[37,115395,110661],{"class":185},[37,115397,12776],{"class":50},[37,115399,32356],{"class":61},[37,115401,110668],{"class":50},[37,115403,62],{"class":61},[37,115405,175],{"class":50},[37,115407,115408],{"class":39,"line":33133},[37,115409,2757],{"emptyLinePlaceholder":454},[37,115411,115412],{"class":39,"line":33139},[37,115413,2757],{"emptyLinePlaceholder":454},[37,115415,115416,115418,115420,115422,115424],{"class":39,"line":33153},[37,115417,1907],{"class":54},[37,115419,31559],{"class":61},[37,115421,101844],{"class":54},[37,115423,101847],{"class":185},[37,115425,4089],{"class":50},[37,115427,115428],{"class":39,"line":33159},[37,115429,101854],{"class":50},[14,115431,103855],{},[27,115433,115435],{"className":24163,"code":115434,"language":24165,"meta":32,"style":32},"touch ch8_gym_env.py\n",[34,115436,115437],{"__ignoreMap":32},[37,115438,115439,115441],{"class":39,"line":40},[37,115440,101568],{"class":2320},[37,115442,115443],{"class":185}," ch8_gym_env.py\n",[14,115445,110729],{},[27,115447,115449],{"className":24163,"code":115448,"language":24165,"meta":32,"style":32},"python ch8_gym_env.py\n",[34,115450,115451],{"__ignoreMap":32},[37,115452,115453,115455],{"class":39,"line":40},[37,115454,31],{"class":2320},[37,115456,115443],{"class":185},[498,115458,101857],{"id":101857},[14,115460,115461],{},"继承 Gymnasium 环境：",[27,115463,115465],{"className":29,"code":115464,"language":31,"meta":32,"style":32},"class ReacherEnv(gym.Env):\n",[34,115466,115467],{"__ignoreMap":32},[37,115468,115469,115471,115473,115475,115477,115479,115481],{"class":39,"line":40},[37,115470,15035],{"class":54},[37,115472,114342],{"class":2320},[37,115474,165],{"class":50},[37,115476,113825],{"class":2320},[37,115478,1068],{"class":50},[37,115480,114351],{"class":2320},[37,115482,31125],{"class":50},[14,115484,115485],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115487,115488],{},"初始化模型：",[27,115490,115492],{"className":29,"code":115491,"language":31,"meta":32,"style":32},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[34,115493,115494,115508],{"__ignoreMap":32},[37,115495,115496,115498,115500,115502,115504,115506],{"class":39,"line":40},[37,115497,31162],{"class":61},[37,115499,114402],{"class":50},[37,115501,55],{"class":54},[37,115503,101697],{"class":50},[37,115505,101599],{"class":61},[37,115507,280],{"class":50},[37,115509,115510,115512,115514,115516,115518,115520],{"class":39,"line":47},[37,115511,31162],{"class":61},[37,115513,114417],{"class":50},[37,115515,55],{"class":54},[37,115517,114422],{"class":50},[37,115519,31162],{"class":61},[37,115521,114427],{"class":50},[14,115523,115524,115525,115527],{},"这和前面章节一样，只是现在放到了类的 ",[34,115526,31168],{}," 里。",[14,115529,115530],{},"缓存 site ID：",[27,115532,115534],{"className":29,"code":115533,"language":31,"meta":32,"style":32},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[34,115535,115536,115550],{"__ignoreMap":32},[37,115537,115538,115540,115542,115544,115546,115548],{"class":39,"line":40},[37,115539,31162],{"class":61},[37,115541,114438],{"class":50},[37,115543,55],{"class":54},[37,115545,114443],{"class":50},[37,115547,89889],{"class":61},[37,115549,280],{"class":50},[37,115551,115552,115554,115556,115558,115560,115562],{"class":39,"line":47},[37,115553,31162],{"class":61},[37,115555,114459],{"class":50},[37,115557,55],{"class":54},[37,115559,114443],{"class":50},[37,115561,89889],{"class":61},[37,115563,280],{"class":50},[14,115565,115566],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115568,115569],{},"reset：",[27,115571,115573],{"className":29,"code":115572,"language":31,"meta":32,"style":32},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[34,115574,115575],{"__ignoreMap":32},[37,115576,115577,115579,115581,115583,115585,115587,115589,115591,115593,115595,115597,115599,115601,115603,115605,115607,115609],{"class":39,"line":40},[37,115578,32285],{"class":54},[37,115580,114807],{"class":2320},[37,115582,114810],{"class":50},[37,115584,967],{"class":54},[37,115586,114815],{"class":50},[37,115588,533],{"class":61},[37,115590,25451],{"class":54},[37,115592,39270],{"class":61},[37,115594,13905],{"class":54},[37,115596,39270],{"class":61},[37,115598,114828],{"class":50},[37,115600,114831],{"class":61},[37,115602,25451],{"class":54},[37,115604,39270],{"class":61},[37,115606,13905],{"class":54},[37,115608,39270],{"class":61},[37,115610,31125],{"class":50},[14,115612,115613,115615],{},[34,115614,70392],{}," 做四件事：",[481,115617,115618,115621,115624,115627],{},[484,115619,115620],{},"设置随机种子。",[484,115622,115623],{},"重置 MuJoCo data。",[484,115625,115626],{},"随机初始化关节角。",[484,115628,115629],{},"返回初始观测和 info。",[14,115631,115632],{},"step：",[27,115634,115636],{"className":29,"code":115635,"language":31,"meta":32,"style":32},"def step(self, action):\n",[34,115637,115638],{"__ignoreMap":32},[37,115639,115640,115642,115644],{"class":39,"line":40},[37,115641,32285],{"class":54},[37,115643,114972],{"class":2320},[37,115645,114975],{"class":50},[14,115647,115648,115650],{},[34,115649,107419],{}," 做六件事：",[481,115652,115653,115656,115662,115665,115668,115671],{},[484,115654,115655],{},"检查并裁剪 action。",[484,115657,115658,115659,28727],{},"写入 ",[34,115660,115661],{},"self.data.ctrl",[484,115663,115664],{},"连续推进若干个 MuJoCo 物理步。",[484,115666,115667],{},"计算新观测。",[484,115669,115670],{},"计算奖励和结束条件。",[484,115672,115673],{},"返回 Gymnasium 标准五元组。",[498,115675,101993],{"id":101993},[27,115677,115679],{"className":29,"code":115678,"language":31,"meta":32,"style":32},"import gymnasium as gym\n",[34,115680,115681],{"__ignoreMap":32},[37,115682,115683,115685,115687,115689],{"class":39,"line":40},[37,115684,30732],{"class":54},[37,115686,114180],{"class":50},[37,115688,31722],{"class":54},[37,115690,114185],{"class":50},[14,115692,115693,115694,115696,115697,115700],{},"导入 Gymnasium，并起别名 ",[34,115695,113825],{},"。后面写 ",[34,115698,115699],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[27,115702,115704],{"className":29,"code":115703,"language":31,"meta":32,"style":32},"from gymnasium import spaces\n",[34,115705,115706],{"__ignoreMap":32},[37,115707,115708,115710,115712,115714],{"class":39,"line":40},[37,115709,31076],{"class":54},[37,115711,114180],{"class":50},[37,115713,30732],{"class":54},[37,115715,114212],{"class":50},[14,115717,115718,115719,115722],{},"导入空间定义工具。",[34,115720,115721],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[27,115724,115725],{"className":29,"code":115464,"language":31,"meta":32,"style":32},[34,115726,115727],{"__ignoreMap":32},[37,115728,115729,115731,115733,115735,115737,115739,115741],{"class":39,"line":40},[37,115730,15035],{"class":54},[37,115732,114342],{"class":2320},[37,115734,165],{"class":50},[37,115736,113825],{"class":2320},[37,115738,1068],{"class":50},[37,115740,114351],{"class":2320},[37,115742,31125],{"class":50},[14,115744,115745,115746,115749,115750,115752,115753,101303,115755,115757],{},"定义一个类，名字叫 ",[34,115747,115748],{},"ReacherEnv","。括号里的 ",[34,115751,115699],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[34,115754,70392],{},[34,115756,107419],{}," 这两个核心方法。",[27,115759,115761],{"className":29,"code":115760,"language":31,"meta":32,"style":32},"metadata = {\"render_modes\": []}\n",[34,115762,115763],{"__ignoreMap":32},[37,115764,115765,115768,115770,115772,115774],{"class":39,"line":40},[37,115766,115767],{"class":50},"metadata ",[37,115769,55],{"class":54},[37,115771,4798],{"class":50},[37,115773,114365],{"class":185},[37,115775,114368],{"class":50},[14,115777,115778],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[27,115780,115782],{"className":29,"code":115781,"language":31,"meta":32,"style":32},"def __init__(self) -> None:\n",[34,115783,115784],{"__ignoreMap":32},[37,115785,115786,115788,115790,115792,115794],{"class":39,"line":40},[37,115787,32285],{"class":54},[37,115789,31143],{"class":61},[37,115791,114381],{"class":50},[37,115793,95971],{"class":61},[37,115795,4089],{"class":50},[14,115797,115798,115800,115801,28727],{},[34,115799,31168],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[34,115802,115803],{},"env = ReacherEnv()",[27,115805,115807],{"className":29,"code":115806,"language":31,"meta":32,"style":32},"super().__init__()\n",[34,115808,115809],{"__ignoreMap":32},[37,115810,115811,115814,115816,115818],{"class":39,"line":40},[37,115812,115813],{"class":61},"super",[37,115815,17602],{"class":50},[37,115817,31168],{"class":61},[37,115819,2333],{"class":50},[14,115821,115822,115823,115825],{},"调用父类 ",[34,115824,115699],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[27,115827,115828],{"className":29,"code":115491,"language":31,"meta":32,"style":32},[34,115829,115830,115844],{"__ignoreMap":32},[37,115831,115832,115834,115836,115838,115840,115842],{"class":39,"line":40},[37,115833,31162],{"class":61},[37,115835,114402],{"class":50},[37,115837,55],{"class":54},[37,115839,101697],{"class":50},[37,115841,101599],{"class":61},[37,115843,280],{"class":50},[37,115845,115846,115848,115850,115852,115854,115856],{"class":39,"line":47},[37,115847,31162],{"class":61},[37,115849,114417],{"class":50},[37,115851,55],{"class":54},[37,115853,114422],{"class":50},[37,115855,31162],{"class":61},[37,115857,114427],{"class":50},[14,115859,115860,115861,115863,115864,101303,115867,115870],{},"把 MuJoCo 模型和状态保存到 ",[34,115862,31162],{}," 上。",[34,115865,115866],{},"self.model",[34,115868,115869],{},"self.data"," 表示这个环境对象自己的模型和状态。",[27,115872,115873],{"className":29,"code":115533,"language":31,"meta":32,"style":32},[34,115874,115875,115889],{"__ignoreMap":32},[37,115876,115877,115879,115881,115883,115885,115887],{"class":39,"line":40},[37,115878,31162],{"class":61},[37,115880,114438],{"class":50},[37,115882,55],{"class":54},[37,115884,114443],{"class":50},[37,115886,89889],{"class":61},[37,115888,280],{"class":50},[37,115890,115891,115893,115895,115897,115899,115901],{"class":39,"line":47},[37,115892,31162],{"class":61},[37,115894,114459],{"class":50},[37,115896,55],{"class":54},[37,115898,114443],{"class":50},[37,115900,89889],{"class":61},[37,115902,280],{"class":50},[14,115904,115905,115906,101303,115909,115912],{},"提前查好 tip 和 target 的 site ID。这样 ",[34,115907,115908],{},"_get_obs",[34,115910,115911],{},"_get_reward"," 里就不用每次按名字查找。",[27,115914,115916],{"className":29,"code":115915,"language":31,"meta":32,"style":32},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[34,115917,115918,115928,115938],{"__ignoreMap":32},[37,115919,115920,115922,115924,115926],{"class":39,"line":40},[37,115921,31162],{"class":61},[37,115923,114152],{"class":50},[37,115925,55],{"class":54},[37,115927,54763],{"class":61},[37,115929,115930,115932,115934,115936],{"class":39,"line":47},[37,115931,31162],{"class":61},[37,115933,114531],{"class":50},[37,115935,55],{"class":54},[37,115937,114536],{"class":61},[37,115939,115940,115942,115944,115946],{"class":39,"line":104},[37,115941,31162],{"class":61},[37,115943,113991],{"class":50},[37,115945,55],{"class":54},[37,115947,47670],{"class":61},[14,115949,115950,115953,115954,115957,115958,115961],{},[34,115951,115952],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[34,115955,115956],{},"max_steps"," 是一个 episode 最多运行多少步。",[34,115959,115960],{},"steps"," 记录当前 episode 已经走了多少步。",[27,115963,115964],{"className":29,"code":114030,"language":31,"meta":32,"style":32},[34,115965,115966],{"__ignoreMap":32},[37,115967,115968,115970,115972,115974,115976,115978,115980,115982,115984,115986,115988,115990,115992,115994,115996,115998,116000,116002,116004,116006],{"class":39,"line":40},[37,115969,31162],{"class":61},[37,115971,114039],{"class":50},[37,115973,55],{"class":54},[37,115975,114044],{"class":50},[37,115977,114047],{"class":159},[37,115979,114050],{"class":54},[37,115981,102688],{"class":61},[37,115983,12776],{"class":50},[37,115985,114057],{"class":159},[37,115987,55],{"class":54},[37,115989,102688],{"class":61},[37,115991,12776],{"class":50},[37,115993,96248],{"class":159},[37,115995,55],{"class":54},[37,115997,165],{"class":50},[37,115999,602],{"class":61},[37,116001,114074],{"class":50},[37,116003,93830],{"class":159},[37,116005,55],{"class":54},[37,116007,114081],{"class":50},[14,116009,116010,116011,116014,116015,101303,116018,116021],{},"定义动作空间。",[34,116012,116013],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[34,116016,116017],{},"low=-1.0",[34,116019,116020],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[27,116023,116024],{"className":29,"code":114091,"language":31,"meta":32,"style":32},[34,116025,116026],{"__ignoreMap":32},[37,116027,116028,116030,116032,116034,116036,116038,116040,116042,116044,116046,116048,116050,116052,116054,116056,116058,116060,116062],{"class":39,"line":40},[37,116029,31162],{"class":61},[37,116031,114100],{"class":50},[37,116033,55],{"class":54},[37,116035,114044],{"class":50},[37,116037,114047],{"class":159},[37,116039,114050],{"class":54},[37,116041,114111],{"class":50},[37,116043,114057],{"class":159},[37,116045,55],{"class":54},[37,116047,114111],{"class":50},[37,116049,96248],{"class":159},[37,116051,55],{"class":54},[37,116053,165],{"class":50},[37,116055,98],{"class":61},[37,116057,114074],{"class":50},[37,116059,93830],{"class":159},[37,116061,55],{"class":54},[37,116063,114081],{"class":50},[14,116065,116066,116067,116070,116071,116074],{},"定义观测空间。",[34,116068,116069],{},"shape=(10,)"," 表示观测是 10 个数。",[34,116072,116073],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[27,116076,116078],{"className":29,"code":116077,"language":31,"meta":32,"style":32},"def _get_obs(self) -> np.ndarray:\n",[34,116079,116080],{"__ignoreMap":32},[37,116081,116082,116084,116086],{"class":39,"line":40},[37,116083,32285],{"class":54},[37,116085,114641],{"class":2320},[37,116087,114644],{"class":50},[14,116089,116090,116091,116093],{},"定义内部函数，用来生成观测。函数名前面的 ",[34,116092,1500],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[27,116095,116097],{"className":29,"code":116096,"language":31,"meta":32,"style":32},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[34,116098,116099,116113],{"__ignoreMap":32},[37,116100,116101,116103,116105,116107,116109,116111],{"class":39,"line":40},[37,116102,111853],{"class":50},[37,116104,55],{"class":54},[37,116106,39210],{"class":61},[37,116108,114655],{"class":50},[37,116110,31162],{"class":61},[37,116112,114660],{"class":50},[37,116114,116115,116117,116119,116121,116123,116125],{"class":39,"line":47},[37,116116,111863],{"class":50},[37,116118,55],{"class":54},[37,116120,39210],{"class":61},[37,116122,114655],{"class":50},[37,116124,31162],{"class":61},[37,116126,114675],{"class":50},[14,116128,116129],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[27,116131,116133],{"className":29,"code":116132,"language":31,"meta":32,"style":32},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[34,116134,116135,116151],{"__ignoreMap":32},[37,116136,116137,116139,116141,116143,116145,116147,116149],{"class":39,"line":40},[37,116138,111139],{"class":50},[37,116140,55],{"class":54},[37,116142,114684],{"class":50},[37,116144,31162],{"class":61},[37,116146,114689],{"class":50},[37,116148,31162],{"class":61},[37,116150,114694],{"class":50},[37,116152,116153,116155],{"class":39,"line":47},[37,116154,17387],{"class":54},[37,116156,114701],{"class":50},[14,116158,116159,116160,116163,116164,116166],{},"拼接观测，并转换成 ",[34,116161,116162],{},"float32","。很多强化学习库默认使用 ",[34,116165,116162],{},"，所以这里主动转换。",[27,116168,116169],{"className":29,"code":115572,"language":31,"meta":32,"style":32},[34,116170,116171],{"__ignoreMap":32},[37,116172,116173,116175,116177,116179,116181,116183,116185,116187,116189,116191,116193,116195,116197,116199,116201,116203,116205],{"class":39,"line":40},[37,116174,32285],{"class":54},[37,116176,114807],{"class":2320},[37,116178,114810],{"class":50},[37,116180,967],{"class":54},[37,116182,114815],{"class":50},[37,116184,533],{"class":61},[37,116186,25451],{"class":54},[37,116188,39270],{"class":61},[37,116190,13905],{"class":54},[37,116192,39270],{"class":61},[37,116194,114828],{"class":50},[37,116196,114831],{"class":61},[37,116198,25451],{"class":54},[37,116200,39270],{"class":61},[37,116202,13905],{"class":54},[37,116204,39270],{"class":61},[37,116206,31125],{"class":50},[14,116208,116209,116210,116212,116213,116216],{},"定义 reset。",[34,116211,114851],{}," 用来控制随机数，保证实验可以复现。",[34,116214,116215],{},"options"," 用来接收额外配置，本章暂时不用。",[27,116218,116220],{"className":29,"code":116219,"language":31,"meta":32,"style":32},"super().reset(seed=seed)\n",[34,116221,116222],{"__ignoreMap":32},[37,116223,116224,116226,116228,116230,116232],{"class":39,"line":40},[37,116225,115813],{"class":61},[37,116227,114848],{"class":50},[37,116229,114851],{"class":159},[37,116231,55],{"class":54},[37,116233,114856],{"class":50},[14,116235,116236,116237,116240],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[34,116238,116239],{},"self.np_random"," 生成可复现的随机数。",[27,116242,116244],{"className":29,"code":116243,"language":31,"meta":32,"style":32},"mujoco.mj_resetData(self.model, self.data)\n",[34,116245,116246],{"__ignoreMap":32},[37,116247,116248,116251,116253,116255,116257],{"class":39,"line":40},[37,116249,116250],{"class":50},"mujoco.mj_resetData(",[37,116252,31162],{"class":61},[37,116254,114866],{"class":50},[37,116256,31162],{"class":61},[37,116258,114871],{"class":50},[14,116260,116261],{},"把 MuJoCo 状态重置到默认状态。",[27,116263,116265],{"className":29,"code":116264,"language":31,"meta":32,"style":32},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[34,116266,116267],{"__ignoreMap":32},[37,116268,116269,116271,116273,116275,116277,116279,116281,116283,116285,116287,116289,116291,116293,116295,116297,116299,116301],{"class":39,"line":40},[37,116270,31162],{"class":61},[37,116272,114882],{"class":50},[37,116274,55],{"class":54},[37,116276,39210],{"class":61},[37,116278,114889],{"class":50},[37,116280,114047],{"class":159},[37,116282,114050],{"class":54},[37,116284,86545],{"class":61},[37,116286,12776],{"class":50},[37,116288,114057],{"class":159},[37,116290,55],{"class":54},[37,116292,86545],{"class":61},[37,116294,12776],{"class":50},[37,116296,160],{"class":159},[37,116298,55],{"class":54},[37,116300,31162],{"class":61},[37,116302,114914],{"class":50},[14,116304,115626,116305,116308,116309,116312,116313,116315],{},[34,116306,116307],{},"[:]"," 表示修改整个数组。",[34,116310,116311],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[34,116314,102435],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[27,116317,116319],{"className":29,"code":116318,"language":31,"meta":32,"style":32},"self.data.qvel[:] = 0.0\n",[34,116320,116321],{"__ignoreMap":32},[37,116322,116323,116325,116327,116329],{"class":39,"line":40},[37,116324,31162],{"class":61},[37,116326,114921],{"class":50},[37,116328,55],{"class":54},[37,116330,105046],{"class":61},[14,116332,116333],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[27,116335,116337],{"className":29,"code":116336,"language":31,"meta":32,"style":32},"self.steps = 0\nreturn self._get_obs(), {}\n",[34,116338,116339,116349],{"__ignoreMap":32},[37,116340,116341,116343,116345,116347],{"class":39,"line":40},[37,116342,31162],{"class":61},[37,116344,113991],{"class":50},[37,116346,55],{"class":54},[37,116348,47670],{"class":61},[37,116350,116351,116353,116355],{"class":39,"line":47},[37,116352,17387],{"class":54},[37,116354,39210],{"class":61},[37,116356,114961],{"class":50},[14,116358,116359],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[27,116361,116362],{"className":29,"code":115635,"language":31,"meta":32,"style":32},[34,116363,116364],{"__ignoreMap":32},[37,116365,116366,116368,116370],{"class":39,"line":40},[37,116367,32285],{"class":54},[37,116369,114972],{"class":2320},[37,116371,114975],{"class":50},[14,116373,116374],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[27,116376,116378],{"className":29,"code":116377,"language":31,"meta":32,"style":32},"action = np.asarray(action, dtype=np.float32)\n",[34,116379,116380],{"__ignoreMap":32},[37,116381,116382,116384,116386,116388,116390,116392],{"class":39,"line":40},[37,116383,107727],{"class":50},[37,116385,55],{"class":54},[37,116387,114984],{"class":50},[37,116389,93830],{"class":159},[37,116391,55],{"class":54},[37,116393,114081],{"class":50},[14,116395,116396,116397,28727],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[34,116398,116162],{},[27,116400,116402],{"className":29,"code":116401,"language":31,"meta":32,"style":32},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[34,116403,116404],{"__ignoreMap":32},[37,116405,116406,116408,116410,116412,116414,116416,116418],{"class":39,"line":40},[37,116407,107727],{"class":50},[37,116409,55],{"class":54},[37,116411,107732],{"class":50},[37,116413,31162],{"class":61},[37,116415,115003],{"class":50},[37,116417,31162],{"class":61},[37,116419,115008],{"class":50},[14,116421,116422],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[27,116424,116426],{"className":29,"code":116425,"language":31,"meta":32,"style":32},"self.data.ctrl[:] = action\n",[34,116427,116428],{"__ignoreMap":32},[37,116429,116430,116432,116434,116436],{"class":39,"line":40},[37,116431,31162],{"class":61},[37,116433,115019],{"class":50},[37,116435,55],{"class":54},[37,116437,107755],{"class":50},[14,116439,116440],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[27,116442,116444],{"className":29,"code":116443,"language":31,"meta":32,"style":32},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[34,116445,116446,116462],{"__ignoreMap":32},[37,116447,116448,116450,116452,116454,116456,116458,116460],{"class":39,"line":40},[37,116449,3375],{"class":54},[37,116451,101786],{"class":50},[37,116453,26385],{"class":54},[37,116455,32781],{"class":61},[37,116457,165],{"class":50},[37,116459,31162],{"class":61},[37,116461,115040],{"class":50},[37,116463,116464,116467,116469,116471,116473],{"class":39,"line":47},[37,116465,116466],{"class":50},"    mujoco.mj_step(",[37,116468,31162],{"class":61},[37,116470,114866],{"class":50},[37,116472,31162],{"class":61},[37,116474,114871],{"class":50},[14,116476,116477,116478,116481,116482,116484,116485,28727],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[34,116479,116480],{},"frame_skip=5","，所以外部调用一次 ",[34,116483,114162],{},"，内部实际执行 5 次 ",[34,116486,101500],{},[27,116488,116490],{"className":29,"code":116489,"language":31,"meta":32,"style":32},"self.steps += 1\n",[34,116491,116492],{"__ignoreMap":32},[37,116493,116494,116496,116498,116500],{"class":39,"line":40},[37,116495,31162],{"class":61},[37,116497,113991],{"class":50},[37,116499,9818],{"class":54},[37,116501,56035],{"class":61},[14,116503,116504],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[27,116506,116508],{"className":29,"code":116507,"language":31,"meta":32,"style":32},"obs = self._get_obs()\nreward = self._get_reward()\n",[34,116509,116510,116520],{"__ignoreMap":32},[37,116511,116512,116514,116516,116518],{"class":39,"line":40},[37,116513,111139],{"class":50},[37,116515,55],{"class":54},[37,116517,39210],{"class":61},[37,116519,115082],{"class":50},[37,116521,116522,116524,116526,116528],{"class":39,"line":47},[37,116523,111290],{"class":50},[37,116525,55],{"class":54},[37,116527,39210],{"class":61},[37,116529,115093],{"class":50},[14,116531,116532],{},"计算新的观测和奖励。",[27,116534,116536],{"className":29,"code":116535,"language":31,"meta":32,"style":32},"dist = float(np.linalg.norm(tip - target))\n",[34,116537,116538],{"__ignoreMap":32},[37,116539,116540,116542,116544,116546,116548,116550],{"class":39,"line":40},[37,116541,111881],{"class":50},[37,116543,55],{"class":54},[37,116545,110082],{"class":61},[37,116547,115136],{"class":50},[37,116549,384],{"class":54},[37,116551,115141],{"class":50},[14,116553,116554],{},"计算末端到目标的距离，并转换成 Python float。",[27,116556,116557],{"className":29,"code":113962,"language":31,"meta":32,"style":32},[34,116558,116559,116571],{"__ignoreMap":32},[37,116560,116561,116563,116565,116567,116569],{"class":39,"line":40},[37,116562,113969],{"class":50},[37,116564,55],{"class":54},[37,116566,113974],{"class":50},[37,116568,1418],{"class":54},[37,116570,113979],{"class":61},[37,116572,116573,116575,116577,116579,116581,116583,116585],{"class":39,"line":47},[37,116574,113984],{"class":50},[37,116576,55],{"class":54},[37,116578,39210],{"class":61},[37,116580,113991],{"class":50},[37,116582,2075],{"class":54},[37,116584,39210],{"class":61},[37,116586,113998],{"class":50},[14,116588,116589],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[27,116591,116593],{"className":29,"code":116592,"language":31,"meta":32,"style":32},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[34,116594,116595,116608],{"__ignoreMap":32},[37,116596,116597,116600,116602,116604,116606],{"class":39,"line":40},[37,116598,116599],{"class":50},"info ",[37,116601,55],{"class":54},[37,116603,4798],{"class":50},[37,116605,115187],{"class":185},[37,116607,115190],{"class":50},[37,116609,116610,116612],{"class":39,"line":47},[37,116611,17387],{"class":54},[37,116613,115197],{"class":50},[14,116615,116616,116619],{},[34,116617,116618],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[27,116621,116623],{"className":29,"code":116622,"language":31,"meta":32,"style":32},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[34,116624,116625,116634],{"__ignoreMap":32},[37,116626,116627,116630,116632],{"class":39,"line":40},[37,116628,116629],{"class":50},"env ",[37,116631,55],{"class":54},[37,116633,115227],{"class":50},[37,116635,116636,116638,116640,116642,116644,116646,116648],{"class":39,"line":47},[37,116637,113685],{"class":50},[37,116639,55],{"class":54},[37,116641,115237],{"class":50},[37,116643,114851],{"class":159},[37,116645,55],{"class":54},[37,116647,135],{"class":61},[37,116649,280],{"class":50},[14,116651,116652,116653,116656],{},"创建环境并重置。",[34,116654,116655],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[27,116658,116660],{"className":29,"code":116659,"language":31,"meta":32,"style":32},"action = env.action_space.sample()\n",[34,116661,116662],{"__ignoreMap":32},[37,116663,116664,116666,116668],{"class":39,"line":40},[37,116665,107727],{"class":50},[37,116667,55],{"class":54},[37,116669,115306],{"class":50},[14,116671,116672],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[469,116674,102601],{"id":102600},[14,116676,105769],{},[27,116678,116681],{"className":116679,"code":116680,"language":5536,"meta":32},[5534],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[34,116682,116680],{"__ignoreMap":32},[14,116684,116685],{},"这个环境已经具备强化学习环境的基本结构。",[14,116687,116688],{},"主函数里使用随机动作：",[27,116690,116691],{"className":29,"code":116659,"language":31,"meta":32,"style":32},[34,116692,116693],{"__ignoreMap":32},[37,116694,116695,116697,116699],{"class":39,"line":40},[37,116696,107727],{"class":50},[37,116698,55],{"class":54},[37,116700,115306],{"class":50},[14,116702,116703],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[469,116705,102633],{"id":102632},[481,116707,116708,116711,116717,116726,116735,116744,116750],{},[484,116709,116710],{},"运行程序。",[484,116712,116713,116714,28727],{},"确认 ",[34,116715,116716],{},"obs.shape == (10,)",[484,116718,111466,116719,116722,116723,28727],{},[34,116720,116721],{},"env.action_space","，应类似 ",[34,116724,116725],{},"Box(-1.0, 1.0, (2,), float32)",[484,116727,105870,116728,116731,116732,28727],{},[34,116729,116730],{},"self.max_steps = 10","，确认环境会更快 ",[34,116733,116734],{},"truncated=True",[484,116736,102696,116737,102699,116740,116743],{},[34,116738,116739],{},"terminated = dist \u003C 0.05",[34,116741,116742],{},"dist \u003C 0.2","，观察是否更容易结束。",[484,116745,102696,116746,116749],{},[34,116747,116748],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[484,116751,116752,116753,116755,116756,116759],{},"在 ",[34,116754,116618],{}," 里加入 ",[34,116757,116758],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[469,116761,102738],{"id":102737},[498,116763,116765],{"id":116764},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116767,116768,116769,116771],{},"Gymnasium 的 ",[34,116770,107419],{}," 返回 5 个值:",[27,116773,116775],{"className":29,"code":116774,"language":31,"meta":32,"style":32},"obs, reward, terminated, truncated, info\n",[34,116776,116777],{"__ignoreMap":32},[37,116778,116779],{"class":39,"line":40},[37,116780,116774],{"class":50},[14,116782,116783],{},"不是旧 Gym 的 4 个值。",[498,116785,116787,116790],{"id":116786},"datactrl-action-维度错误",[34,116788,116789],{},"data.ctrl[:] = action"," 维度错误",[14,116792,102808],{},[27,116794,116796],{"className":29,"code":116795,"language":31,"meta":32,"style":32},"print(self.model.nu)\nprint(action.shape)\n",[34,116797,116798,116809],{"__ignoreMap":32},[37,116799,116800,116802,116804,116806],{"class":39,"line":40},[37,116801,30755],{"class":61},[37,116803,165],{"class":50},[37,116805,31162],{"class":61},[37,116807,116808],{"class":50},".model.nu)\n",[37,116810,116811,116813],{"class":39,"line":47},[37,116812,30755],{"class":61},[37,116814,116815],{"class":50},"(action.shape)\n",[14,116817,116818],{},"两者必须匹配。",[498,116820,116822],{"id":116821},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116824,102747],{},[27,116826,116828],{"className":29,"code":116827,"language":31,"meta":32,"style":32},"mujoco.mj_forward(self.model, self.data)\n",[34,116829,116830],{"__ignoreMap":32},[37,116831,116832,116835,116837,116839,116841],{"class":39,"line":40},[37,116833,116834],{"class":50},"mujoco.mj_forward(",[37,116836,31162],{"class":61},[37,116838,114866],{"class":50},[37,116840,31162],{"class":61},[37,116842,114871],{"class":50},[498,116844,116846,116848],{"id":116845},"observation_space-维度和-obs-不一致",[34,116847,113885],{}," 维度和 obs 不一致",[14,116850,102860],{},[27,116852,116854],{"className":29,"code":116853,"language":31,"meta":32,"style":32},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[34,116855,116856,116866,116873],{"__ignoreMap":32},[37,116857,116858,116860,116862,116864],{"class":39,"line":40},[37,116859,111139],{"class":50},[37,116861,55],{"class":54},[37,116863,39210],{"class":61},[37,116865,115082],{"class":50},[37,116867,116868,116870],{"class":39,"line":47},[37,116869,30755],{"class":61},[37,116871,116872],{"class":50},"(obs.shape)\n",[37,116874,116875,116877,116879,116881],{"class":39,"line":104},[37,116876,30755],{"class":61},[37,116878,165],{"class":50},[37,116880,31162],{"class":61},[37,116882,116883],{"class":50},".observation_space.shape)\n",[14,116885,116886],{},"两者必须一致。本章观测是：",[27,116888,116891],{"className":116889,"code":116890,"language":5536,"meta":32},[5534],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[34,116892,116890],{"__ignoreMap":32},[498,116894,116896],{"id":116895},"action-超过范围","action 超过范围",[14,116898,116899],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[27,116901,116902],{"className":29,"code":116401,"language":31,"meta":32,"style":32},[34,116903,116904],{"__ignoreMap":32},[37,116905,116906,116908,116910,116912,116914,116916,116918],{"class":39,"line":40},[37,116907,107727],{"class":50},[37,116909,55],{"class":54},[37,116911,107732],{"class":50},[37,116913,31162],{"class":61},[37,116915,115003],{"class":50},[37,116917,31162],{"class":61},[37,116919,115008],{"class":50},[14,116921,116922,116923,28727],{},"这能避免无效动作直接写入 ",[34,116924,101361],{},[498,116926,116928],{"id":116927},"忘记返回-info","忘记返回 info",[14,116930,116768,116931,101303,116933,116935],{},[34,116932,70392],{},[34,116934,107419],{}," 都会返回 info：",[27,116937,116938],{"className":29,"code":113678,"language":31,"meta":32,"style":32},[34,116939,116940,116948],{"__ignoreMap":32},[37,116941,116942,116944,116946],{"class":39,"line":40},[37,116943,113685],{"class":50},[37,116945,55],{"class":54},[37,116947,113690],{"class":50},[37,116949,116950,116952,116954],{"class":39,"line":47},[37,116951,113695],{"class":50},[37,116953,55],{"class":54},[37,116955,113700],{"class":50},[14,116957,116958,116959,28727],{},"即使暂时没有额外信息，也返回 ",[34,116960,32797],{},[469,116962,116964],{"id":116963},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116966,116967],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[481,116969,116970,116973,116976,116979,116982,116985],{},[484,116971,116972],{},"更稳定的 reward。",[484,116974,116975],{},"合理的 episode 长度。",[484,116977,116978],{},"可重复的随机目标采样。",[484,116980,116981],{},"render 接口。",[484,116983,116984],{},"环境注册代码。",[484,116986,116987],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116989,116990],{},"如果只是自己写训练循环，最小形式是：",[27,116992,116994],{"className":29,"code":116993,"language":31,"meta":32,"style":32},"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",[34,116995,116996,117004,117020,117024,117040,117049,117058,117068],{"__ignoreMap":32},[37,116997,116998,117000,117002],{"class":39,"line":40},[37,116999,116629],{"class":50},[37,117001,55],{"class":54},[37,117003,115227],{"class":50},[37,117005,117006,117008,117010,117012,117014,117016,117018],{"class":39,"line":47},[37,117007,113685],{"class":50},[37,117009,55],{"class":54},[37,117011,115237],{"class":50},[37,117013,114851],{"class":159},[37,117015,55],{"class":54},[37,117017,135],{"class":61},[37,117019,280],{"class":50},[37,117021,117022],{"class":39,"line":104},[37,117023,2757],{"emptyLinePlaceholder":454},[37,117025,117026,117028,117030,117032,117034,117036,117038],{"class":39,"line":113},[37,117027,3375],{"class":54},[37,117029,101786],{"class":50},[37,117031,26385],{"class":54},[37,117033,32781],{"class":61},[37,117035,165],{"class":50},[37,117037,6758],{"class":61},[37,117039,31125],{"class":50},[37,117041,117042,117045,117047],{"class":39,"line":189},[37,117043,117044],{"class":50},"    action ",[37,117046,55],{"class":54},[37,117048,115306],{"class":50},[37,117050,117051,117054,117056],{"class":39,"line":195},[37,117052,117053],{"class":50},"    obs, reward, terminated, truncated, info ",[37,117055,55],{"class":54},[37,117057,113700],{"class":50},[37,117059,117060,117062,117064,117066],{"class":39,"line":201},[37,117061,3451],{"class":54},[37,117063,115372],{"class":50},[37,117065,115375],{"class":54},[37,117067,115378],{"class":50},[37,117069,117070,117073,117075],{"class":39,"line":207},[37,117071,117072],{"class":50},"        obs, info ",[37,117074,55],{"class":54},[37,117076,113690],{"class":50},[469,117078,117080],{"id":117079},"_9本章小结","9.本章小结",[14,117082,117083],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[27,117085,117088],{"className":117086,"code":117087,"language":5536,"meta":32},[5534],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[34,117089,117087],{"__ignoreMap":32},[14,117091,117092],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[446,117094,117095],{},"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":32,"searchDepth":47,"depth":47,"links":117097},[117098,117099,117100,117107,117111,117112,117113,117123,117124],{"id":100931,"depth":47,"text":100932},{"id":101054,"depth":47,"text":101055},{"id":101329,"depth":47,"text":101330,"children":117101},[117102,117104,117106],{"id":113909,"depth":104,"text":117103},"terminated 和 truncated 的区别",{"id":114012,"depth":104,"text":117105},"observation_space 和 action_space",{"id":114139,"depth":104,"text":114140},{"id":101537,"depth":47,"text":101538,"children":117108},[117109,117110],{"id":101857,"depth":104,"text":101857},{"id":101993,"depth":104,"text":101993},{"id":102600,"depth":47,"text":102601},{"id":102632,"depth":47,"text":102633},{"id":102737,"depth":47,"text":102738,"children":117114},[117115,117116,117118,117119,117121,117122],{"id":116764,"depth":104,"text":116765},{"id":116786,"depth":104,"text":117117},"data.ctrl[:] = action 维度错误",{"id":116821,"depth":104,"text":116822},{"id":116845,"depth":104,"text":117120},"observation_space 维度和 obs 不一致",{"id":116895,"depth":104,"text":116896},{"id":116927,"depth":104,"text":116928},{"id":116963,"depth":47,"text":116964},{"id":117079,"depth":47,"text":117080},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113662,"description":32},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117131,"title":117132,"body":117133,"description":117556,"extension":452,"meta":117557,"navigation":454,"path":117558,"seo":117559,"stem":117560,"__hash__":117561},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117134,"toc":117546},[117135,117139,117142,117145,117165,117171,117177,117187,117190,117193,117213,117216,117220,117223,117229,117232,117246,117249,117252,117326,117329,117335,117338,117361,117364,117414,117417,117423,117426,117429,117432,117451,117454,117460,117463,117466,117469,117489,117492,117495,117498,117543],[10,117136,117138],{"id":117137},"mujoco-学习","MuJoCo 学习",[14,117140,117141],{},"初版",[14,117143,117144],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[481,117146,117147,117150,117153,117162],{},[484,117148,117149],{},"MuJoCo 模型文件在描述什么。",[484,117151,117152],{},"Python 代码怎样读取和推进仿真。",[484,117154,117155,735,117157,735,117159,117161],{},[34,117156,104315],{},[34,117158,104645],{},[34,117160,104648],{}," 这些数组为什么重要。",[484,117163,117164],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,117166,117167,117168,117170],{},"默认环境为 Fedora 44、Python >= 3.10、",[34,117169,101312],{}," 官方 Python bindings。",[14,117172,117173,117174,117176],{},"注意：本文禁止使用 ",[34,117175,101297],{},"。所有示例均使用：",[27,117178,117179],{"className":29,"code":101863,"language":31,"meta":32,"style":32},[34,117180,117181],{"__ignoreMap":32},[37,117182,117183,117185],{"class":39,"line":40},[37,117184,30732],{"class":54},[37,117186,101586],{"class":50},[469,117188,117189],{"id":117189},"适合谁阅读",[14,117191,117192],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[481,117194,117195,117198,117201,117204],{},[484,117196,117197],{},"没学过 MuJoCo，只会一点 Python。",[484,117199,117200],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[484,117202,117203],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[484,117205,117206,117207,117209,117210,117212],{},"以前接触过 ",[34,117208,101297],{},"，现在想迁移到官方 ",[34,117211,101306],{}," Python bindings。",[14,117214,117215],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[469,117217,117219],{"id":117218},"mujoco-到底是什么","MuJoCo 到底是什么",[14,117221,117222],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[27,117224,117227],{"className":117225,"code":117226,"language":5536,"meta":32},[5534],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[34,117228,117226],{"__ignoreMap":32},[14,117230,117231],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[481,117233,117234,117237,117240,117243],{},[484,117235,117236],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[484,117238,117239],{},"快速测试控制算法，不必一开始就上真实机器人。",[484,117241,117242],{},"生成强化学习环境。",[484,117244,117245],{},"采集状态、动作、图像、奖励等训练数据。",[469,117247,117248],{"id":117248},"学习前的心智模型",[14,117250,117251],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[661,117253,117254,117266],{},[664,117255,117256],{},[667,117257,117258,117261,117264],{},[670,117259,117260],{"align":24077},"部分",[670,117262,117263],{"align":24077},"负责什么",[670,117265,21528],{"align":24077},[708,117267,117268,117279,117291,117303,117315],{},[667,117269,117270,117273,117276],{},[713,117271,117272],{"align":24077},"MJCF XML",[713,117274,117275],{"align":24077},"定义世界和机器人结构",[713,117277,117278],{"align":24077},"地面、盒子、关节、电机、摄像头",[667,117280,117281,117285,117288],{},[713,117282,117283],{"align":24077},[34,117284,100994],{},[713,117286,117287],{"align":24077},"编译后的静态模型",[713,117289,117290],{"align":24077},"有几个关节、有几个电机、时间步长是多少",[667,117292,117293,117297,117300],{},[713,117294,117295],{"align":24077},[34,117296,101004],{},[713,117298,117299],{"align":24077},"运行中的动态状态",[713,117301,117302],{"align":24077},"当前时间、位置、速度、电机输入",[667,117304,117305,117309,117312],{},[713,117306,117307],{"align":24077},[34,117308,101500],{},[713,117310,117311],{"align":24077},"推进一步物理仿真",[713,117313,117314],{"align":24077},"根据重力、力、碰撞更新状态",[667,117316,117317,117320,117323],{},[713,117318,117319],{"align":24077},"Viewer \u002F Renderer",[713,117321,117322],{"align":24077},"把仿真显示出来",[713,117324,117325],{"align":24077},"打开窗口或保存图片",[14,117327,117328],{},"一句话总结：",[27,117330,117333],{"className":117331,"code":117332,"language":5536,"meta":32},[5534],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[34,117334,117332],{"__ignoreMap":32},[14,117336,117337],{},"参考来源：",[1515,117339,117340,117347,117354],{},[484,117341,117342,117343],{},"MuJoCo Python 官方文档：",[51,117344,117345],{"href":117345,"rel":117346},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24206],[484,117348,117349,117350],{},"MuJoCo XML Reference：",[51,117351,117352],{"href":117352,"rel":117353},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24206],[484,117355,117356,117357],{},"MuJoCo Overview：",[51,117358,117359],{"href":117359,"rel":117360},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24206],[469,117362,117363],{"id":117363},"章节目录",[481,117365,117366,117372,117378,117384,117390,117396,117402,117408],{},[484,117367,117368],{},[51,117369,117371],{"href":117370},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[484,117373,117374],{},[51,117375,117377],{"href":117376},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[484,117379,117380],{},[51,117381,117383],{"href":117382},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[484,117385,117386],{},[51,117387,117389],{"href":117388},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[484,117391,117392],{},[51,117393,117395],{"href":117394},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[484,117397,117398],{},[51,117399,117401],{"href":117400},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[484,117403,117404],{},[51,117405,117407],{"href":117406},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[484,117409,117410],{},[51,117411,117413],{"href":117412},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[469,117415,117416],{"id":117416},"推荐学习路线",[27,117418,117421],{"className":117419,"code":117420,"language":5536,"meta":32},[5534],"环境安装\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",[34,117422,117420],{"__ignoreMap":32},[14,117424,117425],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[469,117427,117428],{"id":117428},"建议的目录结构",[14,117430,117431],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[27,117433,117435],{"className":24163,"code":117434,"language":24165,"meta":32,"style":32},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[34,117436,117437,117445],{"__ignoreMap":32},[37,117438,117439,117441,117443],{"class":39,"line":40},[37,117440,101551],{"class":2320},[37,117442,29558],{"class":61},[37,117444,101556],{"class":185},[37,117446,117447,117449],{"class":39,"line":47},[37,117448,101561],{"class":61},[37,117450,101556],{"class":185},[14,117452,117453],{},"每一章的代码都单独保存：",[27,117455,117458],{"className":117456,"code":117457,"language":5536,"meta":32},[5534],"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",[34,117459,117457],{"__ignoreMap":32},[14,117461,117462],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[469,117464,117465],{"id":117465},"学习方法",[14,117467,117468],{},"每章建议按这个顺序操作：",[481,117470,117471,117474,117477,117480,117483,117486],{},[484,117472,117473],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[484,117475,117476],{},"复制最小可运行代码，保存成指定文件。",[484,117478,117479],{},"运行代码，确认没有报错。",[484,117481,117482],{},"对照“运行结果说明”理解输出。",[484,117484,117485],{},"做“验证步骤”，主动改一两个参数。",[484,117487,117488],{},"遇到报错先看“常见错误与解决方案”。",[14,117490,117491],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[469,117493,117494],{"id":117494},"全局排错顺序",[14,117496,117497],{},"遇到问题时，按下面顺序查：",[481,117499,117500,117506,117512,117517,117520,117523,117530,117540],{},[484,117501,117502,117503],{},"Python 环境是否激活：",[34,117504,117505],{},"which python",[484,117507,117508,117509],{},"MuJoCo 是否能导入：",[34,117510,117511],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[484,117513,117514,117515],{},"是否误装了 ",[34,117516,101297],{},[484,117518,117519],{},"XML 标签是否闭合、属性是否拼写正确",[484,117521,117522],{},"actuator 引用的 joint 名字是否存在",[484,117524,117525,117527,117528],{},[34,117526,101361],{}," 的长度是否等于 ",[34,117529,102443],{},[484,117531,105870,117532,82874,117534,117536,117537],{},[34,117533,104315],{},[34,117535,104645],{}," 后是否调用了 ",[34,117538,117539],{},"mujoco.mj_forward",[484,117541,117542],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[446,117544,117545],{},"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":32,"searchDepth":47,"depth":47,"links":117547},[117548,117549,117550,117551,117552,117553,117554,117555],{"id":117189,"depth":47,"text":117189},{"id":117218,"depth":47,"text":117219},{"id":117248,"depth":47,"text":117248},{"id":117363,"depth":47,"text":117363},{"id":117416,"depth":47,"text":117416},{"id":117428,"depth":47,"text":117428},{"id":117465,"depth":47,"text":117465},{"id":117494,"depth":47,"text":117494},"仿真搭建。",{"category":23719},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117132,"description":117556},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117563,"title":117564,"body":117565,"description":451,"extension":452,"meta":118020,"navigation":454,"path":118021,"seo":118022,"stem":118023,"__hash__":118024},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117566,"toc":118018},[117567,117570,117573,117579,118015],[10,117568,117564],{"id":117569},"_1-最常用的基本操作更新",[14,117571,117572],{},"装linux系统教程：",[14,117574,117575],{},[51,117576,117577],{"href":117577,"rel":117578},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24206],[27,117580,117584],{"className":117581,"code":117582,"language":117583,"meta":32,"style":32},"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",[34,117585,117586,117591,117596,117605,117610,117619,117624,117644,117649,117660,117665,117674,117679,117707,117712,117731,117736,117755,117759,117764,117780,117784,117789,117819,117823,117828,117844,117848,117853,117868,117872,117877,117893,117897,117902,117914,117926,117930,117935,117952,117956,117961,117979,117983,117988,117997,118001,118006],{"__ignoreMap":32},[37,117587,117588],{"class":39,"line":40},[37,117589,117590],{"class":43},"#更新相关的知识\n",[37,117592,117593],{"class":39,"line":47},[37,117594,117595],{"class":43},"# 更新软件包列表（从服务器获取最新软件信息）\n",[37,117597,117598,117600,117603],{"class":39,"line":104},[37,117599,24918],{"class":2320},[37,117601,117602],{"class":185}," apt",[37,117604,26584],{"class":185},[37,117606,117607],{"class":39,"line":113},[37,117608,117609],{"class":43},"# 升级所有可更新的软件包（不删除旧包）\n",[37,117611,117612,117614,117616],{"class":39,"line":189},[37,117613,24918],{"class":2320},[37,117615,117602],{"class":185},[37,117617,117618],{"class":185}," upgrade\n",[37,117620,117621],{"class":39,"line":195},[37,117622,117623],{"class":43},"#更新和升级软件包\n",[37,117625,117626,117628,117630,117633,117635,117637,117639,117642],{"class":39,"line":201},[37,117627,24918],{"class":2320},[37,117629,117602],{"class":185},[37,117631,117632],{"class":185}," update",[37,117634,26532],{"class":50},[37,117636,24918],{"class":2320},[37,117638,117602],{"class":185},[37,117640,117641],{"class":185}," upgrade",[37,117643,101266],{"class":61},[37,117645,117646],{"class":39,"line":207},[37,117647,117648],{"class":43},"#列出可更新的软件包及版本信息\n",[37,117650,117651,117654,117657],{"class":39,"line":213},[37,117652,117653],{"class":2320},"apt",[37,117655,117656],{"class":185}," list",[37,117658,117659],{"class":61}," --upgradable\n",[37,117661,117662],{"class":39,"line":218},[37,117663,117664],{"class":43},"#彻底升级（处理依赖关系，可能删除旧包）\n",[37,117666,117667,117669,117671],{"class":39,"line":227},[37,117668,24918],{"class":2320},[37,117670,117602],{"class":185},[37,117672,117673],{"class":185}," full-upgrade\n",[37,117675,117676],{"class":39,"line":232},[37,117677,117678],{"class":43},"#设置指定版本\n",[37,117680,117681,117683,117685,117687,117689,117692,117694,117696,117698,117700,117703,117705],{"class":39,"line":238},[37,117682,24918],{"class":2320},[37,117684,117602],{"class":185},[37,117686,24175],{"class":185},[37,117688,29244],{"class":54},[37,117690,117691],{"class":185},"package_nam",[37,117693,599],{"class":50},[37,117695,1468],{"class":54},[37,117697,55],{"class":185},[37,117699,1418],{"class":54},[37,117701,117702],{"class":185},"version_numbe",[37,117704,1180],{"class":50},[37,117706,51643],{"class":54},[37,117708,117709],{"class":39,"line":244},[37,117710,117711],{"class":43},"#只安装软件包不升级\n",[37,117713,117714,117716,117718,117720,117722,117724,117726,117728],{"class":39,"line":250},[37,117715,24918],{"class":2320},[37,117717,117602],{"class":185},[37,117719,24175],{"class":185},[37,117721,29244],{"class":54},[37,117723,117691],{"class":185},[37,117725,599],{"class":50},[37,117727,1468],{"class":54},[37,117729,117730],{"class":61}," --no-upgrade\n",[37,117732,117733],{"class":39,"line":256},[37,117734,117735],{"class":43},"#只升级，不存在就不安装\n",[37,117737,117738,117740,117742,117744,117746,117748,117750,117752],{"class":39,"line":261},[37,117739,24918],{"class":2320},[37,117741,117602],{"class":185},[37,117743,24175],{"class":185},[37,117745,29244],{"class":54},[37,117747,117691],{"class":185},[37,117749,599],{"class":50},[37,117751,1468],{"class":54},[37,117753,117754],{"class":61}," --only-upgrade\n",[37,117756,117757],{"class":39,"line":267},[37,117758,2757],{"emptyLinePlaceholder":454},[37,117760,117761],{"class":39,"line":283},[37,117762,117763],{"class":43},"#安装指定的软件命令\n",[37,117765,117766,117768,117770,117772,117774,117776,117778],{"class":39,"line":288},[37,117767,24918],{"class":2320},[37,117769,117602],{"class":185},[37,117771,24175],{"class":185},[37,117773,29244],{"class":54},[37,117775,117691],{"class":185},[37,117777,599],{"class":50},[37,117779,51643],{"class":54},[37,117781,117782],{"class":39,"line":294},[37,117783,2757],{"emptyLinePlaceholder":454},[37,117785,117786],{"class":39,"line":300},[37,117787,117788],{"class":43},"#安装多个软件包\n",[37,117790,117791,117793,117795,117797,117799,117802,117805,117807,117809,117812,117814,117816],{"class":39,"line":306},[37,117792,24918],{"class":2320},[37,117794,117602],{"class":185},[37,117796,24175],{"class":185},[37,117798,29244],{"class":54},[37,117800,117801],{"class":185},"package_",[37,117803,117804],{"class":54},"1>",[37,117806,29244],{"class":54},[37,117808,117801],{"class":185},[37,117810,117811],{"class":54},"2>",[37,117813,29244],{"class":54},[37,117815,117801],{"class":185},[37,117817,117818],{"class":54},"3>\n",[37,117820,117821],{"class":39,"line":312},[37,117822,2757],{"emptyLinePlaceholder":454},[37,117824,117825],{"class":39,"line":317},[37,117826,117827],{"class":43},"#更新指定的软件命令\n",[37,117829,117830,117832,117834,117836,117838,117840,117842],{"class":39,"line":323},[37,117831,24918],{"class":2320},[37,117833,117602],{"class":185},[37,117835,117632],{"class":185},[37,117837,29244],{"class":54},[37,117839,117691],{"class":185},[37,117841,599],{"class":50},[37,117843,51643],{"class":54},[37,117845,117846],{"class":39,"line":337},[37,117847,2757],{"emptyLinePlaceholder":454},[37,117849,117850],{"class":39,"line":342},[37,117851,117852],{"class":43},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[37,117854,117855,117857,117860,117862,117864,117866],{"class":39,"line":347},[37,117856,117653],{"class":2320},[37,117858,117859],{"class":185}," show",[37,117861,29244],{"class":54},[37,117863,117691],{"class":185},[37,117865,599],{"class":50},[37,117867,51643],{"class":54},[37,117869,117870],{"class":39,"line":352},[37,117871,2757],{"emptyLinePlaceholder":454},[37,117873,117874],{"class":39,"line":357},[37,117875,117876],{"class":43},"#删除软件包命令\n",[37,117878,117879,117881,117883,117885,117887,117889,117891],{"class":39,"line":362},[37,117880,24918],{"class":2320},[37,117882,117602],{"class":185},[37,117884,26421],{"class":185},[37,117886,29244],{"class":54},[37,117888,117691],{"class":185},[37,117890,599],{"class":50},[37,117892,51643],{"class":54},[37,117894,117895],{"class":39,"line":367},[37,117896,2757],{"emptyLinePlaceholder":454},[37,117898,117899],{"class":39,"line":373},[37,117900,117901],{"class":43},"# 清理旧版本和缓存（释放磁盘空间）\n",[37,117903,117904,117906,117908,117911],{"class":39,"line":392},[37,117905,24918],{"class":2320},[37,117907,117602],{"class":185},[37,117909,117910],{"class":185}," autoremove",[37,117912,117913],{"class":43},"  # 删除不再需要的依赖和库文件\n",[37,117915,117916,117918,117920,117923],{"class":39,"line":398},[37,117917,24918],{"class":2320},[37,117919,117602],{"class":185},[37,117921,117922],{"class":185}," clean",[37,117924,117925],{"class":43},"       # 清理下载的缓存包\n",[37,117927,117928],{"class":39,"line":409},[37,117929,2757],{"emptyLinePlaceholder":454},[37,117931,117932],{"class":39,"line":415},[37,117933,117934],{"class":43},"#移除软件包及配置文件\n",[37,117936,117937,117939,117941,117944,117946,117948,117950],{"class":39,"line":420},[37,117938,24918],{"class":2320},[37,117940,117602],{"class":185},[37,117942,117943],{"class":185}," purge",[37,117945,29244],{"class":54},[37,117947,117691],{"class":185},[37,117949,599],{"class":50},[37,117951,51643],{"class":54},[37,117953,117954],{"class":39,"line":425},[37,117955,2757],{"emptyLinePlaceholder":454},[37,117957,117958],{"class":39,"line":431},[37,117959,117960],{"class":43},"#查找软件包命令\n",[37,117962,117963,117965,117967,117970,117972,117975,117977],{"class":39,"line":436},[37,117964,24918],{"class":2320},[37,117966,117602],{"class":185},[37,117968,117969],{"class":185}," search",[37,117971,29244],{"class":54},[37,117973,117974],{"class":185},"keywor",[37,117976,831],{"class":50},[37,117978,51643],{"class":54},[37,117980,117981],{"class":39,"line":442},[37,117982,2757],{"emptyLinePlaceholder":454},[37,117984,117985],{"class":39,"line":8374},[37,117986,117987],{"class":43},"#列出所有已安装的包\n",[37,117989,117990,117992,117994],{"class":39,"line":8386},[37,117991,117653],{"class":2320},[37,117993,117656],{"class":185},[37,117995,117996],{"class":61}," --installed\n",[37,117998,117999],{"class":39,"line":8398},[37,118000,2757],{"emptyLinePlaceholder":454},[37,118002,118003],{"class":39,"line":10057},[37,118004,118005],{"class":43},"#列出所有已安装的包的版本信息\n",[37,118007,118008,118010,118012],{"class":39,"line":10082},[37,118009,117653],{"class":2320},[37,118011,117656],{"class":185},[37,118013,118014],{"class":61}," --all-versions\n",[446,118016,118017],{},"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":32,"searchDepth":47,"depth":47,"links":118019},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117564,"description":451},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118026,"title":118027,"body":118028,"description":451,"extension":452,"meta":118769,"navigation":454,"path":118770,"seo":118771,"stem":118772,"__hash__":118773},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118029,"toc":118756},[118030,118033,118037,118040,118046,118050,118054,118060,118065,118070,118075,118080,118085,118088,118091,118094,118097,118101,118104,118109,118112,118117,118120,118125,118132,118135,118138,118141,118144,118147,118158,118162,118166,118171,118176,118180,118185,118189,118194,118198,118202,118207,118210,118255,118260,118264,118268,118273,118279,118284,118294,118299,118309,118314,118319,118346,118350,118353,118358,118361,118386,118390,118395,118398,118403,118408,118428,118433,118436,118451,118455,118508,118511,118516,118520,118523,118538,118541,118544,118549,118553,118557,118560,118564,118568,118571,118576,118581,118585,118592,118600,118603,118610,118615,118620,118623,118628,118635,118640,118647,118651,118653,118658,118662,118665,118668,118673,118676,118681,118684,118689,118694,118699,118703,118708,118712,118753],[10,118031,118027],{"id":118032},"_2-linux装机教程",[469,118034,118036],{"id":118035},"_21-实体机","2.1 实体机",[14,118038,118039],{},"使用清华源：（Ubuntu24.04）",[14,118041,118042],{},[51,118043,118044],{"href":118044,"rel":118045},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24206],[469,118047,118049],{"id":118048},"_22-普通虚拟机","2.2 普通虚拟机",[498,118051,118053],{"id":118052},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,118055,118056],{},[51,118057,118058],{"href":118058,"rel":118059},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24206],[14,118061,118062],{},[1838,118063],{"alt":32,"src":118064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,118066,118067],{},[1838,118068],{"alt":32,"src":118069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,118071,118072],{},[1838,118073],{"alt":32,"src":118074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,118076,118077],{},[1838,118078],{"alt":32,"src":118079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,118081,118082],{},[1838,118083],{"alt":32,"src":118084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,118086,118087],{},"内存4G（4096MB）；",[14,118089,118090],{},"CPU给4个核；",[14,118092,118093],{},"硬盘动态分配60G；",[14,118095,118096],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[498,118098,118100],{"id":118099},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,118102,118103],{},"按照1.1的步骤下载Ubuntu",[14,118105,118106],{},[1838,118107],{"alt":32,"src":118108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,118110,118111],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,118113,118114],{},[1838,118115],{"alt":32,"src":118116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,118118,118119],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,118121,118122],{},[1838,118123],{"alt":32,"src":118124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,118126,118127,118128,118131],{},"选择“正常安装”(找不到都用Alt+F7)， ",[673,118129,118130],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,118133,118134],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,118136,118137],{},"将改动写入磁盘吗 继续",[14,118139,118140],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,118142,118143],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,118145,118146],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,118148,118149,118150,118153,118154,118157],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[673,118151,118152],{},"除了"," 选不发送系统信息与不升级之外， ",[673,118155,118156],{},"其它"," 都跳过或前进）",[498,118159,118161],{"id":118160},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22339,118163,118165],{"id":118164},"_2231-全屏","2.2.3.1 全屏",[14,118167,118168],{},[1838,118169],{"alt":32,"src":118170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,118172,118173],{},[1838,118174],{"alt":32,"src":118175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22339,118177,118179],{"id":118178},"_2232-文件交换","2.2.3.2 文件交换",[14,118181,118182],{},[1838,118183],{"alt":32,"src":118184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22339,118186,118188],{"id":118187},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,118190,118191],{},[1838,118192],{"alt":32,"src":118193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[469,118195,118197],{"id":118196},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[498,118199,118201],{"id":118200},"_231-简介与优缺点","2.3.1 简介与优缺点",[481,118203,118204],{},[484,118205,118206],{},"什么情况下推荐？",[14,118208,118209],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[481,118211,118212],{"start":47},[484,118213,118214,118215],{},"优缺点：",[481,118216,118217,118247],{},[484,118218,118219,118220],{},"优点：",[481,118221,118222,118225,118232,118235,118238,118241,118244],{},[484,118223,118224],{},"WSL2是最好的Linux发行版;(bushi)",[484,118226,118227,118228,118231],{},"性能损耗极低。且比在Windows上跑深度性能 ",[673,118229,118230],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[484,118233,118234],{},"非常方便调用USB设备，可以USB直通;",[484,118236,118237],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[484,118239,118240],{},"非常方便Win与WSL2互相传文件等协同操作;",[484,118242,118243],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[484,118245,118246],{},"非常方便使用Windows的VScode远程开发;",[484,118248,118249,118250],{},"缺点：",[481,118251,118252],{},[484,118253,118254],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118256,118257],{},[1838,118258],{"alt":32,"src":118259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[498,118261,118263],{"id":118262},"_232-安装教程","2.3.2 安装教程",[22339,118265,118267],{"id":118266},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[481,118269,118270],{},[484,118271,118272],{},"方法一(图形界面)",[14,118274,118275,118276,24960],{},"用Win+R输入",[34,118277,118278],{},"appwiz.cpl",[14,118280,118281],{},[1838,118282],{"alt":32,"src":118283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118285,118286,118287,118290,118291,26815],{},"点击OK进入 ",[673,118288,118289],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[673,118292,118293],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118295,118296],{},[1838,118297],{"alt":32,"src":118298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118300,118301,118302,101303,118305,118308],{},"选择 ",[673,118303,118304],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[673,118306,118307],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118310,118311],{},[1838,118312],{"alt":32,"src":118313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[481,118315,118316],{"start":47},[484,118317,118318],{},"方法二(命令行)",[27,118320,118324],{"className":118321,"code":118322,"language":118323,"meta":32,"style":32},"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",[34,118325,118326,118331,118336,118341],{"__ignoreMap":32},[37,118327,118328],{"class":39,"line":40},[37,118329,118330],{},"# 开启 Linux 子系统\n",[37,118332,118333],{"class":39,"line":47},[37,118334,118335],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[37,118337,118338],{"class":39,"line":104},[37,118339,118340],{},"# 开启虚拟机平台\n",[37,118342,118343],{"class":39,"line":113},[37,118344,118345],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22339,118347,118349],{"id":118348},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118351,118352],{},"用管理员权限打开powershell",[14,118354,118355],{},[1838,118356],{"alt":32,"src":118357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118359,118360],{},"升级WSL并设置默认版本为WSL2",[27,118362,118364],{"className":118321,"code":118363,"language":118323,"meta":32,"style":32},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[34,118365,118366,118371,118376,118381],{"__ignoreMap":32},[37,118367,118368],{"class":39,"line":40},[37,118369,118370],{},"# 更新 wsl\n",[37,118372,118373],{"class":39,"line":47},[37,118374,118375],{},"wsl --update\n",[37,118377,118378],{"class":39,"line":104},[37,118379,118380],{},"# 将 wsl 版本设置为 wsl2\n",[37,118382,118383],{"class":39,"line":113},[37,118384,118385],{},"wsl --set-default-version 2\n",[22339,118387,118389],{"id":118388},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[481,118391,118392],{},[484,118393,118394],{},"方式一(商店下载)",[14,118396,118397],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118399,118400],{},[1838,118401],{"alt":32,"src":118402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[481,118404,118405],{"start":47},[484,118406,118407],{},"方式二(命令行安装)",[27,118409,118411],{"className":118321,"code":118410,"language":118323,"meta":32,"style":32},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[34,118412,118413,118418,118423],{"__ignoreMap":32},[37,118414,118415],{"class":39,"line":40},[37,118416,118417],{},"# 列出可安装的 Linux 版本\n",[37,118419,118420],{"class":39,"line":47},[37,118421,118422],{},"#（需要科学手段）\n",[37,118424,118425],{"class":39,"line":104},[37,118426,118427],{},"wsl --list --online\n",[14,118429,118430],{},[1838,118431],{"alt":32,"src":118432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118434,118435],{},"选择对应发行版并安装",[27,118437,118439],{"className":118321,"code":118438,"language":118323,"meta":32,"style":32},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[34,118440,118441,118446],{"__ignoreMap":32},[37,118442,118443],{"class":39,"line":40},[37,118444,118445],{},"# Ubuntu安装完毕后需要重启系统\n",[37,118447,118448],{"class":39,"line":47},[37,118449,118450],{},"wsl --install -d Ubuntu-24.04\n",[22339,118452,118454],{"id":118453},"_2324-查看系统状态","2.3.2.4 查看系统状态",[27,118456,118458],{"className":118321,"code":118457,"language":118323,"meta":32,"style":32},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[34,118459,118460,118465,118470,118475,118480,118484,118488,118493,118498,118503],{"__ignoreMap":32},[37,118461,118462],{"class":39,"line":40},[37,118463,118464],{},"# 查看 wsl\n",[37,118466,118467],{"class":39,"line":47},[37,118468,118469],{},"wsl -l\n",[37,118471,118472],{"class":39,"line":104},[37,118473,118474],{},"# 查看 wsl 运行版本或模式\n",[37,118476,118477],{"class":39,"line":113},[37,118478,118479],{},"wsl -l -v\n",[37,118481,118482],{"class":39,"line":189},[37,118483,2757],{"emptyLinePlaceholder":454},[37,118485,118486],{"class":39,"line":195},[37,118487,2757],{"emptyLinePlaceholder":454},[37,118489,118490],{"class":39,"line":201},[37,118491,118492],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[37,118494,118495],{"class":39,"line":207},[37,118496,118497],{},"wsl --set-version \u003Cdistro> 2\n",[37,118499,118500],{"class":39,"line":213},[37,118501,118502],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[37,118504,118505],{"class":39,"line":218},[37,118506,118507],{},"wsl --unregister \u003Cdistro>\n",[14,118509,118510],{},"输出Version为2即正常",[14,118512,118513],{},[1838,118514],{"alt":32,"src":118515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22339,118517,118519],{"id":118518},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118521,118522],{},"直接在Powershell里输入wsl命令进入子系统",[27,118524,118526],{"className":118321,"code":118525,"language":118323,"meta":32,"style":32},"# 进入子系统\nwsl\n",[34,118527,118528,118533],{"__ignoreMap":32},[37,118529,118530],{"class":39,"line":40},[37,118531,118532],{},"# 进入子系统\n",[37,118534,118535],{"class":39,"line":47},[37,118536,118537],{},"wsl\n",[14,118539,118540],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118542,118543],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118545,118546],{},[1838,118547],{"alt":32,"src":118548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[498,118550,118552],{"id":118551},"_233-配置各种环境","2.3.3 配置各种环境",[22339,118554,118556],{"id":118555},"_2331-换源","2.3.3.1 换源",[14,118558,118559],{},"(同实体机LINUX，往下找教程)",[22339,118561,118563],{"id":118562},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23251,118565,118567],{"id":118566},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118569,118570],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118572,118573],{},[1838,118574],{"alt":32,"src":118575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118577,118578],{},[1838,118579],{"alt":32,"src":118580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23251,118582,118584],{"id":118583},"_23322-cuda","2.3.3.2.2 CUDA",[14,118586,118587,118588],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[51,118589,118590],{"href":118590,"rel":118591},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24206],[14,118593,118594,118597],{},[1838,118595],{"alt":32,"src":118596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1838,118598],{"alt":32,"src":118599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118601,118602],{},"在下方的网站，选择合适的版本。",[14,118604,118605,118606],{},"WSL2 专属 CUDA 指南：",[51,118607,118608],{"href":118608,"rel":118609},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24206],[14,118611,118612],{},[673,118613,118614],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118616,118617],{},[1838,118618],{"alt":32,"src":118619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118621,118622],{},"挨行敲一遍",[14,118624,118625],{},[1838,118626],{"alt":32,"src":118627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118629,118630,118631,118634],{},"敲完后，输入",[34,118632,118633],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118636,118637],{},[1838,118638],{"alt":32,"src":118639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118641,118642,118643,118646],{},"（请详看下方教程的",[673,118644,118645],{},"安装CUDA的配置环境来看","如何配置环境）",[23251,118648,118650],{"id":118649},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118652,118559],{},[14,118654,118655],{},[1838,118656],{"alt":32,"src":118657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22339,118659,118661],{"id":118660},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118663,118664],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118666,118667],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118669,118670],{},[1838,118671],{"alt":32,"src":118672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118674,118675],{},"连接WSL2",[14,118677,118678],{},[1838,118679],{"alt":32,"src":118680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118682,118683],{},"远程开发成功。",[14,118685,118686],{},[1838,118687],{"alt":32,"src":118688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118690,118691],{},[1838,118692],{"alt":32,"src":118693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118695,118696],{},[1838,118697],{"alt":32,"src":118698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22339,118700,118702],{"id":118701},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118704,118705],{},[1838,118706],{"alt":32,"src":118707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22339,118709,118711],{"id":118710},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[27,118713,118715],{"className":117581,"code":118714,"language":117583,"meta":32,"style":32},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[34,118716,118717,118725,118733,118744,118748],{"__ignoreMap":32},[37,118718,118719,118721,118723],{"class":39,"line":40},[37,118720,24918],{"class":2320},[37,118722,117602],{"class":185},[37,118724,26584],{"class":185},[37,118726,118727,118729,118731],{"class":39,"line":47},[37,118728,24918],{"class":2320},[37,118730,117602],{"class":185},[37,118732,117618],{"class":185},[37,118734,118735,118737,118739,118741],{"class":39,"line":104},[37,118736,24918],{"class":2320},[37,118738,117602],{"class":185},[37,118740,24175],{"class":185},[37,118742,118743],{"class":185}," mesa-utils\n",[37,118745,118746],{"class":39,"line":113},[37,118747,2757],{"emptyLinePlaceholder":454},[37,118749,118750],{"class":39,"line":189},[37,118751,118752],{"class":43},"#然后重启wsl2即可\n",[446,118754,118755],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":32,"searchDepth":47,"depth":47,"links":118757},[118758,118759,118764],{"id":118035,"depth":47,"text":118036},{"id":118048,"depth":47,"text":118049,"children":118760},[118761,118762,118763],{"id":118052,"depth":104,"text":118053},{"id":118099,"depth":104,"text":118100},{"id":118160,"depth":104,"text":118161},{"id":118196,"depth":47,"text":118197,"children":118765},[118766,118767,118768],{"id":118200,"depth":104,"text":118201},{"id":118262,"depth":104,"text":118263},{"id":118551,"depth":104,"text":118552},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118027,"description":451},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118775,"title":118776,"body":118777,"description":451,"extension":452,"meta":121713,"navigation":454,"path":121714,"seo":121715,"stem":121716,"__hash__":121717},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118778,"toc":121685},[118779,118782,118786,118792,118796,118802,118806,118994,118997,119002,119006,119010,119013,119016,119022,119027,119030,119033,119038,119071,119076,119080,119157,119160,119165,119169,119172,119211,119214,119223,119241,119246,119253,119370,119375,119378,119405,119410,119414,119423,119473,119480,119484,119487,119501,119508,119542,119547,119551,119574,119577,119582,119586,119589,119592,119595,119637,119641,119644,119647,119688,119692,119696,119699,119704,119709,119712,119735,119738,119746,119751,119754,119759,119764,119767,119772,119776,119781,119804,119809,119871,119879,119884,119889,119892,119897,119900,119905,119910,119928,119933,119939,119944,119958,119962,119965,119968,119971,120014,120017,120022,120123,120126,120131,120135,120139,120176,120180,120184,120188,120234,120238,120283,120287,120294,120302,120357,120360,120437,120440,120463,120467,120470,120475,120480,120488,120491,120496,120501,120506,120509,120514,120523,120526,120531,120534,120605,120610,120613,120618,120621,120626,120629,120634,120637,120642,120647,120650,120725,120728,120741,120746,120749,120763,120766,120795,120800,120829,120832,120837,120841,120846,120855,120858,120863,120866,120871,120874,120877,120882,120885,120890,120895,120898,120903,120906,121031,121036,121066,121069,121074,121079,121096,121099,121142,121145,121172,121177,121190,121333,121337,121342,121356,121359,121410,121413,121443,121446,121462,121467,121481,121484,121551,121556,121565,121570,121573,121585,121590,121597,121621,121624,121629,121632,121651,121656,121663,121675,121682],[10,118780,118776],{"id":118781},"_3-安装必备配置",[469,118783,118785],{"id":118784},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[27,118787,118790],{"className":118788,"code":118789,"language":5536},[5534],"  打开下方网站（注意，该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",[34,118791,118789],{"__ignoreMap":32},[498,118793,118795],{"id":118794},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[27,118797,118800],{"className":118798,"code":118799,"language":5536},[5534],"  输入以下命令\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",[34,118801,118799],{"__ignoreMap":32},[498,118803,118805],{"id":118804},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[27,118807,118811],{"className":118808,"code":118809,"language":118810,"meta":32,"style":32},"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",[34,118812,118813,118821,118832,118844,118858,118862,118872,118877,118881,118885,118890,118894,118906,118910,118915,118919,118930,118934,118950,118954,118965,118969,118974,118978,118986],{"__ignoreMap":32},[37,118814,118815,118817,118819],{"class":39,"line":40},[37,118816,24918],{"class":2320},[37,118818,117602],{"class":185},[37,118820,26584],{"class":185},[37,118822,118823,118825,118827,118829],{"class":39,"line":47},[37,118824,24918],{"class":2320},[37,118826,117602],{"class":185},[37,118828,24175],{"class":185},[37,118830,118831],{"class":185}," vim\n",[37,118833,118834,118836,118839,118841],{"class":39,"line":104},[37,118835,24918],{"class":2320},[37,118837,118838],{"class":185}," rm",[37,118840,25667],{"class":61},[37,118842,118843],{"class":185}," \u002Fetc\u002Fapt\u002Fsources.list\n",[37,118845,118846,118848,118850,118852,118855],{"class":39,"line":113},[37,118847,24918],{"class":2320},[37,118849,118838],{"class":185},[37,118851,25667],{"class":61},[37,118853,118854],{"class":185}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[37,118856,118857],{"class":61},"**\n",[37,118859,118860],{"class":39,"line":189},[37,118861,2757],{"emptyLinePlaceholder":454},[37,118863,118864,118866,118869],{"class":39,"line":195},[37,118865,24918],{"class":2320},[37,118867,118868],{"class":185}," vim",[37,118870,118871],{"class":185}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[37,118873,118874],{"class":39,"line":201},[37,118875,118876],{"class":185},"```\n",[37,118878,118879],{"class":39,"line":207},[37,118880,2757],{"emptyLinePlaceholder":454},[37,118882,118883],{"class":39,"line":213},[37,118884,2757],{"emptyLinePlaceholder":454},[37,118886,118887],{"class":39,"line":218},[37,118888,118889],{"class":2320},"选择好Ubuntu版本后，复制下方的内容。\n",[37,118891,118892],{"class":39,"line":227},[37,118893,2757],{"emptyLinePlaceholder":454},[37,118895,118896,118898,118901,118904],{"class":39,"line":232},[37,118897,748],{"class":54},[37,118899,118900],{"class":185},"[](",[37,118902,118903],{"class":2320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[37,118905,280],{"class":185},[37,118907,118908],{"class":39,"line":238},[37,118909,2757],{"emptyLinePlaceholder":454},[37,118911,118912],{"class":39,"line":244},[37,118913,118914],{"class":2320},"粘贴进去\n",[37,118916,118917],{"class":39,"line":250},[37,118918,2757],{"emptyLinePlaceholder":454},[37,118920,118921,118923,118925,118928],{"class":39,"line":256},[37,118922,748],{"class":54},[37,118924,118900],{"class":185},[37,118926,118927],{"class":2320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[37,118929,280],{"class":185},[37,118931,118932],{"class":39,"line":261},[37,118933,2757],{"emptyLinePlaceholder":454},[37,118935,118936,118939,118942,118945,118947],{"class":39,"line":267},[37,118937,118938],{"class":2320},"按一下ESC，然后英文冒号，输入",[37,118940,118941],{"class":185}," `",[37,118943,118944],{"class":2320},":wq!",[37,118946,1480],{"class":185},[37,118948,118949],{"class":2320},"然后回车\n",[37,118951,118952],{"class":39,"line":283},[37,118953,2757],{"emptyLinePlaceholder":454},[37,118955,118956,118958,118960,118963],{"class":39,"line":288},[37,118957,748],{"class":54},[37,118959,118900],{"class":185},[37,118961,118962],{"class":2320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[37,118964,280],{"class":185},[37,118966,118967],{"class":39,"line":294},[37,118968,2757],{"emptyLinePlaceholder":454},[37,118970,118971],{"class":39,"line":300},[37,118972,118973],{"class":2320},"输入以下命令\n",[37,118975,118976],{"class":39,"line":306},[37,118977,2757],{"emptyLinePlaceholder":454},[37,118979,118980,118983],{"class":39,"line":312},[37,118981,118982],{"class":185},"```",[37,118984,118985],{"class":2320},"Bash\n",[37,118987,118988,118990,118992],{"class":39,"line":317},[37,118989,24918],{"class":2320},[37,118991,117602],{"class":185},[37,118993,26584],{"class":185},[14,118995,118996],{},"这里被替换成对应学校则成功",[14,118998,118999],{},[1838,119000],{"alt":32,"src":119001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[469,119003,119005],{"id":119004},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[498,119007,119009],{"id":119008},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,119011,119012],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,119014,119015],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,119017,119018],{},[51,119019,119020],{"href":119020,"rel":119021},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24206],[14,119023,119024],{},[1838,119025],{"alt":32,"src":119026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,119028,119029],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,119031,119032],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,119034,119035],{},[1838,119036],{"alt":32,"src":119037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[27,119039,119041],{"className":117581,"code":119040,"language":117583,"meta":32,"style":32},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[34,119042,119043,119048,119055,119060],{"__ignoreMap":32},[37,119044,119045],{"class":39,"line":40},[37,119046,119047],{"class":43},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[37,119049,119050,119052],{"class":39,"line":47},[37,119051,101561],{"class":61},[37,119053,119054],{"class":185}," ~\u002FDownloads\n",[37,119056,119057],{"class":39,"line":104},[37,119058,119059],{"class":43},"#下方chrome安装包名不一定是这个，根据名字来看\n",[37,119061,119062,119064,119066,119068],{"class":39,"line":113},[37,119063,24918],{"class":2320},[37,119065,117602],{"class":185},[37,119067,24175],{"class":185},[37,119069,119070],{"class":185}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,119072,119073],{},[1838,119074],{"alt":32,"src":119075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[498,119077,119079],{"id":119078},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[27,119081,119083],{"className":117581,"code":119082,"language":117583,"meta":32,"style":32},"# 老版\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",[34,119084,119085,119090,119098,119109,119114,119118,119123,119133,119141,119152],{"__ignoreMap":32},[37,119086,119087],{"class":39,"line":40},[37,119088,119089],{"class":43},"# 老版\n",[37,119091,119092,119094,119096],{"class":39,"line":47},[37,119093,24918],{"class":2320},[37,119095,117602],{"class":185},[37,119097,26584],{"class":185},[37,119099,119100,119102,119104,119106],{"class":39,"line":104},[37,119101,24918],{"class":2320},[37,119103,117602],{"class":185},[37,119105,24175],{"class":185},[37,119107,119108],{"class":185}," neofetch\n",[37,119110,119111],{"class":39,"line":113},[37,119112,119113],{"class":2320},"neofetch\n",[37,119115,119116],{"class":39,"line":189},[37,119117,2757],{"emptyLinePlaceholder":454},[37,119119,119120],{"class":39,"line":195},[37,119121,119122],{"class":43},"# 新版\n",[37,119124,119125,119127,119130],{"class":39,"line":201},[37,119126,24918],{"class":2320},[37,119128,119129],{"class":185}," add-apt-repository",[37,119131,119132],{"class":185}," ppa:zhangsongcui3371\u002Ffastfetch\n",[37,119134,119135,119137,119139],{"class":39,"line":207},[37,119136,24918],{"class":2320},[37,119138,117602],{"class":185},[37,119140,26584],{"class":185},[37,119142,119143,119145,119147,119149],{"class":39,"line":213},[37,119144,24918],{"class":2320},[37,119146,117602],{"class":185},[37,119148,24175],{"class":185},[37,119150,119151],{"class":185}," fastfetch\n",[37,119153,119154],{"class":39,"line":218},[37,119155,119156],{"class":2320},"fastfetch\n",[14,119158,119159],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,119161,119162],{},[1838,119163],{"alt":32,"src":119164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[498,119166,119168],{"id":119167},"_323-移除snap应用","3.2.3 移除snap应用",[14,119170,119171],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[27,119173,119175],{"className":117581,"code":119174,"language":117583,"meta":32,"style":32},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[34,119176,119177,119189,119200],{"__ignoreMap":32},[37,119178,119179,119181,119183,119186],{"class":39,"line":40},[37,119180,24918],{"class":2320},[37,119182,26855],{"class":185},[37,119184,119185],{"class":185}," disable",[37,119187,119188],{"class":185}," snapd.service\n",[37,119190,119191,119193,119195,119197],{"class":39,"line":47},[37,119192,24918],{"class":2320},[37,119194,26855],{"class":185},[37,119196,119185],{"class":185},[37,119198,119199],{"class":185}," snapd.socket\n",[37,119201,119202,119204,119206,119208],{"class":39,"line":104},[37,119203,24918],{"class":2320},[37,119205,26855],{"class":185},[37,119207,119185],{"class":185},[37,119209,119210],{"class":185}," snapd.seeded.service\n",[14,119212,119213],{},"然后查看snap应用列表",[14,119215,119216,119217,119222],{},"根据你安装的选择不同（最小安装或普通安装），有",[51,119218,119221],{"href":119219,"rel":119220},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24206],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[27,119224,119226],{"className":117581,"code":119225,"language":117583,"meta":32,"style":32},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[34,119227,119228,119233],{"__ignoreMap":32},[37,119229,119230],{"class":39,"line":40},[37,119231,119232],{"class":43},"# 查询当前系统上snap安装了哪些app\n",[37,119234,119235,119238],{"class":39,"line":47},[37,119236,119237],{"class":2320},"snap",[37,119239,119240],{"class":185}," list\n",[14,119242,119243],{},[1838,119244],{"alt":32,"src":119245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119247,119248,119249,119252],{},"卸载掉图中所有应用，按照 ",[673,119250,119251],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[27,119254,119256],{"className":117581,"code":119255,"language":117583,"meta":32,"style":32},"#移除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",[34,119257,119258,119263,119275,119280,119291,119296,119307,119312,119323,119328,119332,119337,119348,119359],{"__ignoreMap":32},[37,119259,119260],{"class":39,"line":40},[37,119261,119262],{"class":43},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[37,119264,119265,119267,119270,119272],{"class":39,"line":47},[37,119266,24918],{"class":2320},[37,119268,119269],{"class":185}," snap",[37,119271,26421],{"class":185},[37,119273,119274],{"class":185}," snap-store\n",[37,119276,119277],{"class":39,"line":104},[37,119278,119279],{"class":43},"#移除firefox浏览器\n",[37,119281,119282,119284,119286,119288],{"class":39,"line":113},[37,119283,24918],{"class":2320},[37,119285,119269],{"class":185},[37,119287,26421],{"class":185},[37,119289,119290],{"class":185}," firefox\n",[37,119292,119293],{"class":39,"line":189},[37,119294,119295],{"class":43},"#移除gnome-42-2204\n",[37,119297,119298,119300,119302,119304],{"class":39,"line":195},[37,119299,24918],{"class":2320},[37,119301,119269],{"class":185},[37,119303,26421],{"class":185},[37,119305,119306],{"class":185}," gnome-42-2204\n",[37,119308,119309],{"class":39,"line":201},[37,119310,119311],{"class":43},"#移除gtk-common-themes\n",[37,119313,119314,119316,119318,119320],{"class":39,"line":207},[37,119315,24918],{"class":2320},[37,119317,119269],{"class":185},[37,119319,26421],{"class":185},[37,119321,119322],{"class":185}," gtk-common-themes\n",[37,119324,119325],{"class":39,"line":213},[37,119326,119327],{"class":43},"#移除其它...\n",[37,119329,119330],{"class":39,"line":218},[37,119331,3024],{"class":50},[37,119333,119334],{"class":39,"line":227},[37,119335,119336],{"class":43},"#移除core22,bare以及snapd\n",[37,119338,119339,119341,119343,119345],{"class":39,"line":232},[37,119340,24918],{"class":2320},[37,119342,119269],{"class":185},[37,119344,26421],{"class":185},[37,119346,119347],{"class":185}," core22\n",[37,119349,119350,119352,119354,119356],{"class":39,"line":238},[37,119351,24918],{"class":2320},[37,119353,119269],{"class":185},[37,119355,26421],{"class":185},[37,119357,119358],{"class":185}," bare\n",[37,119360,119361,119363,119365,119367],{"class":39,"line":244},[37,119362,24918],{"class":2320},[37,119364,119269],{"class":185},[37,119366,26421],{"class":185},[37,119368,119369],{"class":185}," snapd\n",[14,119371,119372],{},[1838,119373],{"alt":32,"src":119374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119376,119377],{},"输入以下命令查看是否还有snap包",[27,119379,119381],{"className":117581,"code":119380,"language":117583,"meta":32,"style":32},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[34,119382,119383,119389,119393,119397,119401],{"__ignoreMap":32},[37,119384,119385,119387],{"class":39,"line":40},[37,119386,119237],{"class":2320},[37,119388,119240],{"class":185},[37,119390,119391],{"class":39,"line":47},[37,119392,119089],{"class":43},[37,119394,119395],{"class":39,"line":104},[37,119396,119113],{"class":2320},[37,119398,119399],{"class":39,"line":113},[37,119400,119122],{"class":43},[37,119402,119403],{"class":39,"line":189},[37,119404,119156],{"class":2320},[14,119406,119407],{},[1838,119408],{"alt":32,"src":119409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[498,119411,119413],{"id":119412},"_324-移除snap","3.2.4 移除snap",[14,119415,119416,119417,119422],{},"在删除掉",[51,119418,119421],{"href":119419,"rel":119420},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24206],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[27,119424,119426],{"className":117581,"code":119425,"language":117583,"meta":32,"style":32}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[34,119427,119428,119433,119446,119451,119462],{"__ignoreMap":32},[37,119429,119430],{"class":39,"line":40},[37,119431,119432],{"class":43}," #使用apt移除掉snap\n",[37,119434,119435,119437,119439,119441,119444],{"class":39,"line":47},[37,119436,24918],{"class":2320},[37,119438,117602],{"class":185},[37,119440,117910],{"class":185},[37,119442,119443],{"class":61}," --purge",[37,119445,119369],{"class":185},[37,119447,119448],{"class":39,"line":104},[37,119449,119450],{"class":43},"#移除snapd的一些目录\n",[37,119452,119453,119455,119457,119459],{"class":39,"line":113},[37,119454,24918],{"class":2320},[37,119456,118838],{"class":185},[37,119458,25667],{"class":61},[37,119460,119461],{"class":185}," \u002Fvar\u002Fcache\u002Fsnapd\n",[37,119463,119464,119466,119468,119470],{"class":39,"line":189},[37,119465,24918],{"class":2320},[37,119467,118838],{"class":185},[37,119469,25667],{"class":61},[37,119471,119472],{"class":185}," ~\u002Fsnap\n",[14,119474,119475,119476,119479],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[34,119477,119478],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[498,119481,119483],{"id":119482},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119485,119486],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[27,119488,119490],{"className":117581,"code":119489,"language":117583,"meta":32,"style":32},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[34,119491,119492],{"__ignoreMap":32},[37,119493,119494,119496,119498],{"class":39,"line":40},[37,119495,24918],{"class":2320},[37,119497,118868],{"class":185},[37,119499,119500],{"class":185}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119502,119503,119504,119507],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[34,119505,119506],{},":wq"," 回车",[27,119509,119511],{"className":117581,"code":119510,"language":117583,"meta":32,"style":32},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[34,119512,119513,119520,119534],{"__ignoreMap":32},[37,119514,119515,119518],{"class":39,"line":40},[37,119516,119517],{"class":2320},"Package:",[37,119519,119369],{"class":185},[37,119521,119522,119525,119528,119531],{"class":39,"line":47},[37,119523,119524],{"class":2320},"Pin:",[37,119526,119527],{"class":185}," release",[37,119529,119530],{"class":185}," a=",[37,119532,119533],{"class":61},"*\n",[37,119535,119536,119539],{"class":39,"line":104},[37,119537,119538],{"class":2320},"Pin-Priority:",[37,119540,119541],{"class":61}," -10\n",[14,119543,119544],{},[1838,119545],{"alt":32,"src":119546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[498,119548,119550],{"id":119549},"_326-测试是否成功","3.2.6 测试是否成功",[27,119552,119554],{"className":117581,"code":119553,"language":117583,"meta":32,"style":32},"sudo apt update\nsudo apt install firefox\n",[34,119555,119556,119564],{"__ignoreMap":32},[37,119557,119558,119560,119562],{"class":39,"line":40},[37,119559,24918],{"class":2320},[37,119561,117602],{"class":185},[37,119563,26584],{"class":185},[37,119565,119566,119568,119570,119572],{"class":39,"line":47},[37,119567,24918],{"class":2320},[37,119569,117602],{"class":185},[37,119571,24175],{"class":185},[37,119573,119290],{"class":185},[14,119575,119576],{},"这里提示snapd无法被安装，就证明成功了",[14,119578,119579],{},[1838,119580],{"alt":32,"src":119581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[498,119583,119585],{"id":119584},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119587,119588],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119590,119591],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119593,119594],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[27,119596,119598],{"className":117581,"code":119597,"language":117583,"meta":32,"style":32},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[34,119599,119600,119605,119614,119619,119627],{"__ignoreMap":32},[37,119601,119602],{"class":39,"line":40},[37,119603,119604],{"class":43},"# 添加Mozilla提供的源\n",[37,119606,119607,119609,119611],{"class":39,"line":47},[37,119608,24918],{"class":2320},[37,119610,119129],{"class":185},[37,119612,119613],{"class":185}," ppa:mozillateam\u002Fppa\n",[37,119615,119616],{"class":39,"line":104},[37,119617,119618],{"class":43},"# 安装Firefox\n",[37,119620,119621,119623,119625],{"class":39,"line":113},[37,119622,24918],{"class":2320},[37,119624,117602],{"class":185},[37,119626,26584],{"class":185},[37,119628,119629,119631,119633,119635],{"class":39,"line":189},[37,119630,24918],{"class":2320},[37,119632,117602],{"class":185},[37,119634,24175],{"class":185},[37,119636,119290],{"class":185},[498,119638,119640],{"id":119639},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119642,119643],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119645,119646],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[27,119648,119650],{"className":117581,"code":119649,"language":117583,"meta":32,"style":32},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[34,119651,119652,119657,119667,119675,119679],{"__ignoreMap":32},[37,119653,119654],{"class":39,"line":40},[37,119655,119656],{"class":43},"#删掉禁止安装snap的配置文件\n",[37,119658,119659,119661,119663,119665],{"class":39,"line":47},[37,119660,24918],{"class":2320},[37,119662,118838],{"class":185},[37,119664,25667],{"class":61},[37,119666,119500],{"class":185},[37,119668,119669,119671,119673],{"class":39,"line":104},[37,119670,24918],{"class":2320},[37,119672,117602],{"class":185},[37,119674,26584],{"class":185},[37,119676,119677],{"class":39,"line":113},[37,119678,2757],{"emptyLinePlaceholder":454},[37,119680,119681,119683,119685],{"class":39,"line":189},[37,119682,24918],{"class":2320},[37,119684,117602],{"class":185},[37,119686,119687],{"class":185}," dist-update\n",[469,119689,119691],{"id":119690},"_33-中文输入法","3.3 中文输入法",[498,119693,119695],{"id":119694},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119697,119698],{},"官网下载搜狗输入法",[14,119700,119701],{},[1838,119702],{"alt":32,"src":119703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119705,119706],{},[1838,119707],{"alt":32,"src":119708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119710,119711],{},"打开终端输入如下",[27,119713,119715],{"className":117581,"code":119714,"language":117583,"meta":32,"style":32},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[34,119716,119717,119724],{"__ignoreMap":32},[37,119718,119719,119721],{"class":39,"line":40},[37,119720,101561],{"class":61},[37,119722,119723],{"class":185}," ~\u002FDownloads\u002F\n",[37,119725,119726,119728,119730,119732],{"class":39,"line":47},[37,119727,24918],{"class":2320},[37,119729,117602],{"class":185},[37,119731,24175],{"class":185},[37,119733,119734],{"class":185}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119736,119737],{},"打开Fcitx",[14,119739,119740,119743],{},[1838,119741],{"alt":32,"src":119742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1838,119744],{"alt":32,"src":119745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119747,119748],{},[1838,119749],{"alt":32,"src":119750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119752,119753],{},"添加搜狗输入法",[14,119755,119756],{},[1838,119757],{"alt":32,"src":119758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119760,119761],{},[1838,119762],{"alt":32,"src":119763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119765,119766],{},"将搜狗输入法设置为唯一输入法",[14,119768,119769],{},[1838,119770],{"alt":32,"src":119771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[498,119773,119775],{"id":119774},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[481,119777,119778],{},[484,119779,119780],{},"卸载旧输入法",[27,119782,119784],{"className":118808,"code":119783,"language":118810,"meta":32,"style":32},"sudo apt purge fcitx* ibus*\n",[34,119785,119786],{"__ignoreMap":32},[37,119787,119788,119790,119792,119794,119797,119799,119802],{"class":39,"line":40},[37,119789,24918],{"class":2320},[37,119791,117602],{"class":185},[37,119793,117943],{"class":185},[37,119795,119796],{"class":185}," fcitx",[37,119798,967],{"class":61},[37,119800,119801],{"class":185}," ibus",[37,119803,119533],{"class":61},[481,119805,119806],{"start":47},[484,119807,119808],{},"安装Fcitx5",[27,119810,119812],{"className":117581,"code":119811,"language":117583,"meta":32,"style":32},"# 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",[34,119813,119814,119819,119833,119837,119842,119851,119859],{"__ignoreMap":32},[37,119815,119816],{"class":39,"line":40},[37,119817,119818],{"class":43},"# Ubuntu22.04及以上、Debian12及以上\n",[37,119820,119821,119823,119825,119827,119830],{"class":39,"line":47},[37,119822,24918],{"class":2320},[37,119824,117602],{"class":185},[37,119826,24175],{"class":185},[37,119828,119829],{"class":185}," fcitx5",[37,119831,119832],{"class":185}," fcitx5-chinese-addons\n",[37,119834,119835],{"class":39,"line":104},[37,119836,2757],{"emptyLinePlaceholder":454},[37,119838,119839],{"class":39,"line":113},[37,119840,119841],{"class":43},"# Ubuntu20.04\n",[37,119843,119844,119846,119848],{"class":39,"line":189},[37,119845,24918],{"class":2320},[37,119847,119129],{"class":185},[37,119849,119850],{"class":185}," ppa:zhsj\u002Ffcitx5\n",[37,119852,119853,119855,119857],{"class":39,"line":195},[37,119854,24918],{"class":2320},[37,119856,117602],{"class":185},[37,119858,26584],{"class":185},[37,119860,119861,119863,119865,119867,119869],{"class":39,"line":201},[37,119862,24918],{"class":2320},[37,119864,117602],{"class":185},[37,119866,24175],{"class":185},[37,119868,119829],{"class":185},[37,119870,119832],{"class":185},[481,119872,119873,119876],{"start":104},[484,119874,119875],{},"Reboot System",[484,119877,119878],{},"启动Fcitx5",[14,119880,119881],{},[1838,119882],{"alt":32,"src":119883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[481,119885,119886],{"start":189},[484,119887,119888],{},"修改一些设置",[14,119890,119891],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119893,119894],{},[1838,119895],{"alt":32,"src":119896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119898,119899],{},"添加快捷键以便于更好切换中英文",[14,119901,119902],{},[1838,119903],{"alt":32,"src":119904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[481,119906,119907],{"start":195},[484,119908,119909],{},"重启",[27,119911,119913],{"className":118808,"code":119912,"language":118810,"meta":32,"style":32},"sudo shutdown -r now\n",[34,119914,119915],{"__ignoreMap":32},[37,119916,119917,119919,119922,119925],{"class":39,"line":40},[37,119918,24918],{"class":2320},[37,119920,119921],{"class":185}," shutdown",[37,119923,119924],{"class":61}," -r",[37,119926,119927],{"class":185}," now\n",[481,119929,119930],{"start":201},[484,119931,119932],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119934,119935],{},[51,119936,119937],{"href":119937,"rel":119938},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24206],[481,119940,119941],{"start":207},[484,119942,119943],{},"再重启",[27,119945,119946],{"className":118808,"code":119912,"language":118810,"meta":32,"style":32},[34,119947,119948],{"__ignoreMap":32},[37,119949,119950,119952,119954,119956],{"class":39,"line":40},[37,119951,24918],{"class":2320},[37,119953,119921],{"class":185},[37,119955,119924],{"class":61},[37,119957,119927],{"class":185},[469,119959,119961],{"id":119960},"_34-pip3源替换","3.4 pip3源替换",[14,119963,119964],{},"非Debian系发行版需要做。",[14,119966,119967],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119969,119970],{},"使用dnf的系统也可能不用做。",[27,119972,119974],{"className":117581,"code":119973,"language":117583,"meta":32,"style":32},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[34,119975,119976,119981,119988,119993,119998],{"__ignoreMap":32},[37,119977,119978],{"class":39,"line":40},[37,119979,119980],{"class":43},"# 检查是否已安装 pip\n",[37,119982,119983,119986],{"class":39,"line":47},[37,119984,119985],{"class":2320},"pip3",[37,119987,26635],{"class":61},[37,119989,119990],{"class":39,"line":104},[37,119991,119992],{"class":43},"# 如果未安装，先安装 pip3（见下方）\n",[37,119994,119995],{"class":39,"line":113},[37,119996,119997],{"class":43},"# 配置 pip 使用清华源\n",[37,119999,120000,120002,120005,120008,120011],{"class":39,"line":189},[37,120001,119985],{"class":2320},[37,120003,120004],{"class":185}," config",[37,120006,120007],{"class":185}," set",[37,120009,120010],{"class":185}," global.index-url",[37,120012,120013],{"class":185}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,120015,120016],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,120018,120019],{},[1838,120020],{"alt":32,"src":120021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[27,120023,120025],{"className":117581,"code":120024,"language":117583,"meta":32,"style":32},"#安装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",[34,120026,120027,120032,120040,120051,120055,120060,120079,120083,120088,120100,120104,120109],{"__ignoreMap":32},[37,120028,120029],{"class":39,"line":40},[37,120030,120031],{"class":43},"#安装pip3\n",[37,120033,120034,120036,120038],{"class":39,"line":47},[37,120035,24918],{"class":2320},[37,120037,117602],{"class":185},[37,120039,26584],{"class":185},[37,120041,120042,120044,120046,120048],{"class":39,"line":104},[37,120043,24918],{"class":2320},[37,120045,26418],{"class":185},[37,120047,24175],{"class":185},[37,120049,120050],{"class":185}," python3-pip\n",[37,120052,120053],{"class":39,"line":113},[37,120054,2757],{"emptyLinePlaceholder":454},[37,120056,120057],{"class":39,"line":189},[37,120058,120059],{"class":43},"#更新pip3\n",[37,120061,120062,120064,120066,120068,120070,120072,120075,120077],{"class":39,"line":195},[37,120063,101164],{"class":2320},[37,120065,101167],{"class":61},[37,120067,101190],{"class":185},[37,120069,24175],{"class":185},[37,120071,26772],{"class":61},[37,120073,120074],{"class":185}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[37,120076,101195],{"class":61},[37,120078,101198],{"class":185},[37,120080,120081],{"class":39,"line":201},[37,120082,2757],{"emptyLinePlaceholder":454},[37,120084,120085],{"class":39,"line":207},[37,120086,120087],{"class":43},"#设置pip源为清华源\n",[37,120089,120090,120092,120094,120096,120098],{"class":39,"line":213},[37,120091,119985],{"class":2320},[37,120093,120004],{"class":185},[37,120095,120007],{"class":185},[37,120097,120010],{"class":185},[37,120099,120013],{"class":185},[37,120101,120102],{"class":39,"line":218},[37,120103,2757],{"emptyLinePlaceholder":454},[37,120105,120106],{"class":39,"line":227},[37,120107,120108],{"class":43},"#测试\n",[37,120110,120111,120113,120115,120117,120119,120121],{"class":39,"line":232},[37,120112,101164],{"class":2320},[37,120114,101167],{"class":61},[37,120116,101190],{"class":185},[37,120118,24175],{"class":185},[37,120120,101195],{"class":61},[37,120122,101198],{"class":185},[14,120124,120125],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,120127,120128],{},[1838,120129],{"alt":32,"src":120130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[469,120132,120134],{"id":120133},"_35-显卡驱动安装","3.5 显卡驱动安装",[498,120136,120138],{"id":120137},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[27,120140,120142],{"className":118808,"code":120141,"language":118810,"meta":32,"style":32},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[34,120143,120144,120149,120164,120169],{"__ignoreMap":32},[37,120145,120146],{"class":39,"line":40},[37,120147,120148],{"class":43},"# 如果是使用apt安装的驱动\n",[37,120150,120151,120153,120155,120157,120159,120162],{"class":39,"line":47},[37,120152,24918],{"class":2320},[37,120154,26418],{"class":185},[37,120156,26421],{"class":185},[37,120158,119443],{"class":61},[37,120160,120161],{"class":185}," nvidia",[37,120163,119533],{"class":61},[37,120165,120166],{"class":39,"line":104},[37,120167,120168],{"class":43},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[37,120170,120171,120173],{"class":39,"line":113},[37,120172,24918],{"class":2320},[37,120174,120175],{"class":185}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[498,120177,120179],{"id":120178},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22339,120181,120183],{"id":120182},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23251,120185,120187],{"id":120186},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[27,120189,120191],{"className":118808,"code":120190,"language":118810,"meta":32,"style":32},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[34,120192,120193,120198,120209,120214,120224,120229],{"__ignoreMap":32},[37,120194,120195],{"class":39,"line":40},[37,120196,120197],{"class":43},"# 安装英伟达驱动\n",[37,120199,120200,120202,120204,120206],{"class":39,"line":47},[37,120201,24918],{"class":2320},[37,120203,117602],{"class":185},[37,120205,24175],{"class":185},[37,120207,120208],{"class":185}," nvidia-driver-版本号\n",[37,120210,120211],{"class":39,"line":104},[37,120212,120213],{"class":43},"# 重启 \n",[37,120215,120216,120218,120220,120222],{"class":39,"line":113},[37,120217,24918],{"class":2320},[37,120219,119921],{"class":185},[37,120221,119924],{"class":61},[37,120223,119927],{"class":185},[37,120225,120226],{"class":39,"line":189},[37,120227,120228],{"class":43},"# 检查驱动是否安装成功\n",[37,120230,120231],{"class":39,"line":195},[37,120232,120233],{"class":2320},"nvidia-smi\n",[23251,120235,120237],{"id":120236},"_35212-debian","3.5.2.1.2 Debian",[27,120239,120241],{"className":118808,"code":120240,"language":118810,"meta":32,"style":32},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[34,120242,120243,120247,120261,120265,120275,120279],{"__ignoreMap":32},[37,120244,120245],{"class":39,"line":40},[37,120246,120197],{"class":43},[37,120248,120249,120251,120253,120255,120258],{"class":39,"line":47},[37,120250,24918],{"class":2320},[37,120252,117602],{"class":185},[37,120254,24175],{"class":185},[37,120256,120257],{"class":185}," nvidia-driver",[37,120259,120260],{"class":185}," nvidia-settings\n",[37,120262,120263],{"class":39,"line":104},[37,120264,120213],{"class":43},[37,120266,120267,120269,120271,120273],{"class":39,"line":113},[37,120268,24918],{"class":2320},[37,120270,119921],{"class":185},[37,120272,119924],{"class":61},[37,120274,119927],{"class":185},[37,120276,120277],{"class":39,"line":189},[37,120278,120228],{"class":43},[37,120280,120281],{"class":39,"line":195},[37,120282,120233],{"class":2320},[22339,120284,120286],{"id":120285},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120288,120289,120290,120293],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[673,120291,120292],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120295,120296,120297],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23894,120298,120299],{},[673,120300,120301],{},"（也可以不禁用桌面环境，直接进行下一步。）",[27,120303,120305],{"className":118808,"code":120304,"language":118810,"meta":32,"style":32},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[34,120306,120307,120312,120322,120327,120340,120345],{"__ignoreMap":32},[37,120308,120309],{"class":39,"line":40},[37,120310,120311],{"class":43},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[37,120313,120314,120316,120319],{"class":39,"line":47},[37,120315,24918],{"class":2320},[37,120317,120318],{"class":185}," telinit",[37,120320,120321],{"class":61}," 3\n",[37,120323,120324],{"class":39,"line":104},[37,120325,120326],{"class":43},"# ubuntu 使用下方命令\n",[37,120328,120329,120331,120334,120337],{"class":39,"line":113},[37,120330,24918],{"class":2320},[37,120332,120333],{"class":185}," service",[37,120335,120336],{"class":185}," lightdm",[37,120338,120339],{"class":185}," stop\n",[37,120341,120342],{"class":39,"line":189},[37,120343,120344],{"class":43},"# Fedora 使用下方命令\n",[37,120346,120347,120349,120351,120354],{"class":39,"line":195},[37,120348,24918],{"class":2320},[37,120350,26855],{"class":185},[37,120352,120353],{"class":185}," isolate",[37,120355,120356],{"class":185}," multi-user.target\n",[14,120358,120359],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[27,120361,120363],{"className":118808,"code":120362,"language":118810,"meta":32,"style":32},"# 编译环境+准备工作\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",[34,120364,120365,120370,120381,120386,120393,120398,120410,120415,120422,120427],{"__ignoreMap":32},[37,120366,120367],{"class":39,"line":40},[37,120368,120369],{"class":43},"# 编译环境+准备工作\n",[37,120371,120372,120374,120376,120378],{"class":39,"line":47},[37,120373,24918],{"class":2320},[37,120375,117602],{"class":185},[37,120377,24175],{"class":185},[37,120379,120380],{"class":185}," build-essential\n",[37,120382,120383],{"class":39,"line":104},[37,120384,120385],{"class":43},"# 进入到.run目录中\n",[37,120387,120388,120390],{"class":39,"line":113},[37,120389,101561],{"class":61},[37,120391,120392],{"class":185}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[37,120394,120395],{"class":39,"line":189},[37,120396,120397],{"class":43},"# 给驱动文件增加可执行权限：\n",[37,120399,120400,120402,120404,120407],{"class":39,"line":195},[37,120401,24918],{"class":2320},[37,120403,24921],{"class":185},[37,120405,120406],{"class":185}," a+x",[37,120408,120409],{"class":185}," NVIDIA-Linux-x86_64-550.107.02.run\n",[37,120411,120412],{"class":39,"line":201},[37,120413,120414],{"class":43},"# 然后执行安装：\n",[37,120416,120417,120419],{"class":39,"line":207},[37,120418,24918],{"class":2320},[37,120420,120421],{"class":185}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[37,120423,120424],{"class":39,"line":213},[37,120425,120426],{"class":43},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[37,120428,120429,120431,120434],{"class":39,"line":218},[37,120430,24918],{"class":2320},[37,120432,120433],{"class":185}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[37,120435,120436],{"class":61},"  --no-opengl-files\n",[14,120438,120439],{},"安装完毕重启即可",[27,120441,120443],{"className":118808,"code":120442,"language":118810,"meta":32,"style":32},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[34,120444,120445,120449,120455,120459],{"__ignoreMap":32},[37,120446,120447],{"class":39,"line":40},[37,120448,120213],{"class":43},[37,120450,120451,120453],{"class":39,"line":47},[37,120452,24918],{"class":2320},[37,120454,26989],{"class":185},[37,120456,120457],{"class":39,"line":104},[37,120458,120228],{"class":43},[37,120460,120461],{"class":39,"line":113},[37,120462,120233],{"class":2320},[498,120464,120466],{"id":120465},"_353-安装cuda","3.5.3 安装CUDA",[14,120468,120469],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120471,120472],{},[1838,120473],{"alt":32,"src":120474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[481,120476,120477],{},[484,120478,120479],{},"先查看显卡驱动所支持的最高CUDA版本",[27,120481,120482],{"className":118808,"code":120233,"language":118810,"meta":32,"style":32},[34,120483,120484],{"__ignoreMap":32},[37,120485,120486],{"class":39,"line":40},[37,120487,120233],{"class":2320},[14,120489,120490],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120492,120493],{},[1838,120494],{"alt":32,"src":120495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[481,120497,120498],{"start":47},[484,120499,120500],{},"下载CUDA并安装CUDA",[14,120502,118587,120503],{},[51,120504,118590],{"href":118590,"rel":120505},[24206],[14,120507,120508],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120510,120511],{},[1838,120512],{"alt":32,"src":120513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120515,120516,120517,120522],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[51,120518,120521],{"href":120519,"rel":120520},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24206],"Vinci机器人队单片机教程","）",[14,120524,120525],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120527,120528],{},[1838,120529],{"alt":32,"src":120530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120532,120533],{},"将最下方框框里的命令敲入终端",[27,120535,120537],{"className":118808,"code":120536,"language":118810,"meta":32,"style":32},"# 在当前文件夹下创建一个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",[34,120538,120539,120544,120553,120558,120565,120570,120578,120583,120594,120599],{"__ignoreMap":32},[37,120540,120541],{"class":39,"line":40},[37,120542,120543],{"class":43},"# 在当前文件夹下创建一个ttt的子文件夹\n",[37,120545,120546,120548,120550],{"class":39,"line":47},[37,120547,101551],{"class":2320},[37,120549,29558],{"class":61},[37,120551,120552],{"class":185}," .\u002Fttt\n",[37,120554,120555],{"class":39,"line":104},[37,120556,120557],{"class":43},"# 进入ttt文件夹\n",[37,120559,120560,120562],{"class":39,"line":113},[37,120561,101561],{"class":61},[37,120563,120564],{"class":185}," ttt\n",[37,120566,120567],{"class":39,"line":189},[37,120568,120569],{"class":43},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[37,120571,120572,120575],{"class":39,"line":195},[37,120573,120574],{"class":2320},"wget",[37,120576,120577],{"class":185}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[37,120579,120580],{"class":39,"line":201},[37,120581,120582],{"class":43},"# 给予权限\n",[37,120584,120585,120587,120589,120591],{"class":39,"line":207},[37,120586,24918],{"class":2320},[37,120588,24921],{"class":185},[37,120590,120406],{"class":185},[37,120592,120593],{"class":185}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[37,120595,120596],{"class":39,"line":213},[37,120597,120598],{"class":43},"# 运行脚本\n",[37,120600,120601,120603],{"class":39,"line":218},[37,120602,24918],{"class":2320},[37,120604,120593],{"class":185},[14,120606,120607],{},[1838,120608],{"alt":32,"src":120609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120611,120612],{},"正在安装中：",[14,120614,120615],{},[1838,120616],{"alt":32,"src":120617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120619,120620],{},"输入accept接受即可",[14,120622,120623],{},[1838,120624],{"alt":32,"src":120625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120627,120628],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120630,120631],{},[1838,120632],{"alt":32,"src":120633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120635,120636],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120638,120639],{},[1838,120640],{"alt":32,"src":120641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[481,120643,120644],{"start":104},[484,120645,120646],{},"配置环境",[14,120648,120649],{},"根据上方确认一下路径，比如我上面红色框起来的为",[27,120651,120653],{"className":118808,"code":120652,"language":118810,"meta":32,"style":32},"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",[34,120654,120655,120671,120686],{"__ignoreMap":32},[37,120656,120657,120660,120663,120666,120669],{"class":39,"line":40},[37,120658,120659],{"class":2320},"Please",[37,120661,120662],{"class":185}," make",[37,120664,120665],{"class":185}," sure",[37,120667,120668],{"class":185}," that",[37,120670,3024],{"class":50},[37,120672,120673,120675,120678,120681,120684],{"class":39,"line":47},[37,120674,52607],{"class":2320},[37,120676,120677],{"class":185},"   PATH",[37,120679,120680],{"class":185}," includes",[37,120682,120683],{"class":185}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[37,120685,3024],{"class":50},[37,120687,120688,120690,120693,120695,120698,120701,120703,120706,120709,120712,120715,120717,120720,120722],{"class":39,"line":104},[37,120689,52607],{"class":2320},[37,120691,120692],{"class":185},"   LD_LIBRARY_PATH",[37,120694,120680],{"class":185},[37,120696,120697],{"class":185}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[37,120699,120700],{"class":185}," or,",[37,120702,5558],{"class":185},[37,120704,120705],{"class":185}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[37,120707,120708],{"class":185}," to",[37,120710,120711],{"class":185}," \u002Fetc\u002Fld.so.conf",[37,120713,120714],{"class":185}," and",[37,120716,27572],{"class":185},[37,120718,120719],{"class":185}," ldconfig",[37,120721,64940],{"class":185},[37,120723,120724],{"class":185}," root\n",[14,120726,120727],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[27,120729,120731],{"className":118808,"code":120730,"language":118810,"meta":32,"style":32},"which nvcc\n",[34,120732,120733],{"__ignoreMap":32},[37,120734,120735,120738],{"class":39,"line":40},[37,120736,120737],{"class":61},"which",[37,120739,120740],{"class":185}," nvcc\n",[14,120742,120743],{},[1838,120744],{"alt":32,"src":120745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120747,120748],{},"所以我进行以下操作：",[27,120750,120752],{"className":118808,"code":120751,"language":118810,"meta":32,"style":32},"sudo vim ~\u002F.bashrc\n",[34,120753,120754],{"__ignoreMap":32},[37,120755,120756,120758,120760],{"class":39,"line":40},[37,120757,24918],{"class":2320},[37,120759,118868],{"class":185},[37,120761,120762],{"class":185}," ~\u002F.bashrc\n",[14,120764,120765],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[27,120767,120769],{"className":118808,"code":120768,"language":118810,"meta":32,"style":32},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[34,120770,120771,120783],{"__ignoreMap":32},[37,120772,120773,120775,120778,120780],{"class":39,"line":40},[37,120774,25384],{"class":54},[37,120776,120777],{"class":50}," PATH",[37,120779,55],{"class":54},[37,120781,120782],{"class":50},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[37,120784,120785,120787,120790,120792],{"class":39,"line":47},[37,120786,25384],{"class":54},[37,120788,120789],{"class":50}," LD_LIBRARY_PATH",[37,120791,55],{"class":54},[37,120793,120794],{"class":50},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120796,120797],{},[1838,120798],{"alt":32,"src":120799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[27,120801,120803],{"className":118808,"code":120802,"language":118810,"meta":32,"style":32},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[34,120804,120805,120810,120816,120821],{"__ignoreMap":32},[37,120806,120807],{"class":39,"line":40},[37,120808,120809],{"class":43},"# 刷新当前终端的环境变量\n",[37,120811,120812,120814],{"class":39,"line":47},[37,120813,101178],{"class":61},[37,120815,120762],{"class":185},[37,120817,120818],{"class":39,"line":104},[37,120819,120820],{"class":43},"# 验证CUDA是否安装成功\n",[37,120822,120823,120826],{"class":39,"line":113},[37,120824,120825],{"class":2320},"nvcc",[37,120827,120828],{"class":61}," -V\n",[14,120830,120831],{},"出现下图这种则安装成功。",[14,120833,120834],{},[1838,120835],{"alt":32,"src":120836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[498,120838,120840],{"id":120839},"_354-安装cudnn","3.5.4 安装cuDNN",[481,120842,120843],{},[484,120844,120845],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120847,120848,120849,120854],{},"前往 NVIDIA cuDNN 下载页面：",[51,120850,120853],{"href":120851,"rel":120852},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24206],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120856,120857],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120859,120860],{},[1838,120861],{"alt":32,"src":120862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120864,120865],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120867,120868],{},[1838,120869],{"alt":32,"src":120870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120872,120873],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120875,120876],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120878,120879],{},[673,120880,120881],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120883,120884],{},"下载好的：",[14,120886,120887],{},[1838,120888],{"alt":32,"src":120889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[481,120891,120892],{"start":47},[484,120893,120894],{},"安装cuDNN",[14,120896,120897],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120899,120900],{},[1838,120901],{"alt":32,"src":120902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120904,120905],{},"解压文件，并复制到对应位置完成安装",[27,120907,120909],{"className":118808,"code":120908,"language":118810,"meta":32,"style":32},"# 解压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",[34,120910,120911,120916,120927,120932,120939,120944,120960,120974,120979,120990,120999,121003,121019],{"__ignoreMap":32},[37,120912,120913],{"class":39,"line":40},[37,120914,120915],{"class":43},"# 解压cuDNN文件\n",[37,120917,120918,120921,120924],{"class":39,"line":47},[37,120919,120920],{"class":2320},"tar",[37,120922,120923],{"class":61}," -xvf",[37,120925,120926],{"class":185}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[37,120928,120929],{"class":39,"line":104},[37,120930,120931],{"class":43},"# cd进文件夹\n",[37,120933,120934,120936],{"class":39,"line":113},[37,120935,101561],{"class":61},[37,120937,120938],{"class":185}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[37,120940,120941],{"class":39,"line":189},[37,120942,120943],{"class":43},"# 复制cuDNN文件到CUDA目录\n",[37,120945,120946,120948,120950,120953,120955,120958],{"class":39,"line":195},[37,120947,24918],{"class":2320},[37,120949,28203],{"class":185},[37,120951,120952],{"class":185}," include\u002Fcudnn",[37,120954,967],{"class":61},[37,120956,120957],{"class":185},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[37,120959,3024],{"class":50},[37,120961,120962,120964,120966,120969,120971],{"class":39,"line":201},[37,120963,24918],{"class":2320},[37,120965,28203],{"class":185},[37,120967,120968],{"class":185}," lib\u002Flibcudnn",[37,120970,967],{"class":61},[37,120972,120973],{"class":185},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[37,120975,120976],{"class":39,"line":207},[37,120977,120978],{"class":43},"# 对比一下有没有缺文件\n",[37,120980,120981,120983,120986,120988],{"class":39,"line":213},[37,120982,27103],{"class":2320},[37,120984,120985],{"class":185}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[37,120987,967],{"class":61},[37,120989,3024],{"class":50},[37,120991,120992,120994,120997],{"class":39,"line":218},[37,120993,27103],{"class":2320},[37,120995,120996],{"class":185}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[37,120998,119533],{"class":61},[37,121000,121001],{"class":39,"line":227},[37,121002,120582],{"class":43},[37,121004,121005,121007,121009,121012,121014,121016],{"class":39,"line":232},[37,121006,24918],{"class":2320},[37,121008,24921],{"class":185},[37,121010,121011],{"class":185}," a+r",[37,121013,120985],{"class":185},[37,121015,967],{"class":61},[37,121017,121018],{"class":50},"   \n",[37,121020,121021,121023,121025,121027,121029],{"class":39,"line":238},[37,121022,24918],{"class":2320},[37,121024,24921],{"class":185},[37,121026,121011],{"class":185},[37,121028,120996],{"class":185},[37,121030,119533],{"class":61},[481,121032,121033],{"start":104},[484,121034,121035],{},"检查是否安装成功",[27,121037,121039],{"className":118808,"code":121038,"language":118810,"meta":32,"style":32},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[34,121040,121041,121046],{"__ignoreMap":32},[37,121042,121043],{"class":39,"line":40},[37,121044,121045],{"class":43},"# 检查cuDNN版本命令\n",[37,121047,121048,121051,121054,121056,121058,121061,121064],{"class":39,"line":47},[37,121049,121050],{"class":2320},"cat",[37,121052,121053],{"class":185}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[37,121055,25451],{"class":54},[37,121057,30578],{"class":2320},[37,121059,121060],{"class":185}," CUDNN_MAJOR",[37,121062,121063],{"class":61}," -A",[37,121065,48059],{"class":61},[14,121067,121068],{},"出现下图这样的就是安装成功了",[14,121070,121071],{},[1838,121072],{"alt":32,"src":121073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[481,121075,121076],{"start":113},[484,121077,121078],{},"软链接(一般不需要)",[27,121080,121082],{"className":118808,"code":121081,"language":118810,"meta":32,"style":32},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[34,121083,121084,121089],{"__ignoreMap":32},[37,121085,121086],{"class":39,"line":40},[37,121087,121088],{"class":43},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[37,121090,121091,121093],{"class":39,"line":47},[37,121092,24918],{"class":2320},[37,121094,121095],{"class":185}," ldconfig\n",[14,121097,121098],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[27,121100,121105],{"className":121101,"code":121102,"language":121103,"meta":121104,"style":32},"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",[34,121106,121107,121112,121117,121122,121127,121132,121137],{"__ignoreMap":32},[37,121108,121109],{"class":39,"line":40},[37,121110,121111],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[37,121113,121114],{"class":39,"line":47},[37,121115,121116],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[37,121118,121119],{"class":39,"line":104},[37,121120,121121],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[37,121123,121124],{"class":39,"line":113},[37,121125,121126],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[37,121128,121129],{"class":39,"line":189},[37,121130,121131],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[37,121133,121134],{"class":39,"line":195},[37,121135,121136],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[37,121138,121139],{"class":39,"line":201},[37,121140,121141],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,121143,121144],{},"运行下方的命令",[27,121146,121148],{"className":118808,"code":121147,"language":118810,"meta":32,"style":32},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[34,121149,121150,121155,121162,121167],{"__ignoreMap":32},[37,121151,121152],{"class":39,"line":40},[37,121153,121154],{"class":43},"# cd进入CUDA路径\n",[37,121156,121157,121159],{"class":39,"line":47},[37,121158,101561],{"class":61},[37,121160,121161],{"class":185}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[37,121163,121164],{"class":39,"line":104},[37,121165,121166],{"class":43}," # 查看本路径下的需要软链接的文件名\n",[37,121168,121169],{"class":39,"line":113},[37,121170,121171],{"class":2320}," ls\n",[14,121173,121174],{},[1838,121175],{"alt":32,"src":121176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,121178,121179,121180,18751,121183,18751,121186,121189],{},"如上图，我需要将",[34,121181,121182],{},"libcudnn_xxx_xxxxx.so.8.9.7",[34,121184,121185],{},"libcudnn_xxx_xxxxx.so.8",[34,121187,121188],{},"libcudnn_xxx_xxxxx.so","软链接",[27,121191,121193],{"className":118808,"code":121192,"language":118810,"meta":32,"style":32},"# 创建符号链接。对于每个 .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",[34,121194,121195,121200,121216,121230,121244,121258,121272,121286,121300,121305,121311,121316],{"__ignoreMap":32},[37,121196,121197],{"class":39,"line":40},[37,121198,121199],{"class":43},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[37,121201,121202,121204,121207,121210,121213],{"class":39,"line":47},[37,121203,24918],{"class":2320},[37,121205,121206],{"class":185}," ln",[37,121208,121209],{"class":61}," -sf",[37,121211,121212],{"class":185}," libcudnn_cnn_train.so.8.9.7",[37,121214,121215],{"class":185}," libcudnn_cnn_train.so.8\n",[37,121217,121218,121220,121222,121224,121227],{"class":39,"line":104},[37,121219,24918],{"class":2320},[37,121221,121206],{"class":185},[37,121223,121209],{"class":61},[37,121225,121226],{"class":185}," libcudnn_adv_infer.so.8.9.7",[37,121228,121229],{"class":185}," libcudnn_adv_infer.so.8\n",[37,121231,121232,121234,121236,121238,121241],{"class":39,"line":113},[37,121233,24918],{"class":2320},[37,121235,121206],{"class":185},[37,121237,121209],{"class":61},[37,121239,121240],{"class":185}," libcudnn_adv_train.so.8.9.7",[37,121242,121243],{"class":185}," libcudnn_adv_train.so.8\n",[37,121245,121246,121248,121250,121252,121255],{"class":39,"line":189},[37,121247,24918],{"class":2320},[37,121249,121206],{"class":185},[37,121251,121209],{"class":61},[37,121253,121254],{"class":185}," libcudnn_cnn_infer.so.8.9.7",[37,121256,121257],{"class":185}," libcudnn_cnn_infer.so.8\n",[37,121259,121260,121262,121264,121266,121269],{"class":39,"line":195},[37,121261,24918],{"class":2320},[37,121263,121206],{"class":185},[37,121265,121209],{"class":61},[37,121267,121268],{"class":185}," libcudnn.so.8.9.7",[37,121270,121271],{"class":185}," libcudnn.so.8\n",[37,121273,121274,121276,121278,121280,121283],{"class":39,"line":201},[37,121275,24918],{"class":2320},[37,121277,121206],{"class":185},[37,121279,121209],{"class":61},[37,121281,121282],{"class":185}," libcudnn_ops_infer.so.8.9.7",[37,121284,121285],{"class":185}," libcudnn_ops_infer.so.8\n",[37,121287,121288,121290,121292,121294,121297],{"class":39,"line":207},[37,121289,24918],{"class":2320},[37,121291,121206],{"class":185},[37,121293,121209],{"class":61},[37,121295,121296],{"class":185}," libcudnn_ops_train.so.8.9.7",[37,121298,121299],{"class":185}," libcudnn_ops_train.so.8\n",[37,121301,121302],{"class":39,"line":213},[37,121303,121304],{"class":43},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[37,121306,121307,121309],{"class":39,"line":218},[37,121308,24918],{"class":2320},[37,121310,121095],{"class":185},[37,121312,121313],{"class":39,"line":227},[37,121314,121315],{"class":43},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[37,121317,121318,121320,121323,121326,121328,121331],{"class":39,"line":232},[37,121319,27103],{"class":2320},[37,121321,121322],{"class":61}," -l",[37,121324,121325],{"class":185}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[37,121327,967],{"class":61},[37,121329,121330],{"class":185},".so",[37,121332,119533],{"class":61},[498,121334,121336],{"id":121335},"_355-常见问题","3.5.5 常见问题",[481,121338,121339],{},[484,121340,121341],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[27,121343,121345],{"className":118808,"code":121344,"language":118810,"meta":32,"style":32},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[34,121346,121347],{"__ignoreMap":32},[37,121348,121349,121351,121353],{"class":39,"line":40},[37,121350,24918],{"class":2320},[37,121352,118868],{"class":185},[37,121354,121355],{"class":185}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121357,121358],{},"blacklist-nouveau.conf文件内容如下：",[27,121360,121362],{"className":118808,"code":121361,"language":118810,"meta":32,"style":32},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[34,121363,121364,121372,121379,121391,121401],{"__ignoreMap":32},[37,121365,121366,121369],{"class":39,"line":40},[37,121367,121368],{"class":2320},"blacklist",[37,121370,121371],{"class":185}," nouveau\n",[37,121373,121374,121376],{"class":39,"line":47},[37,121375,121368],{"class":2320},[37,121377,121378],{"class":185}," lbm-nouveau\n",[37,121380,121381,121383,121386,121389],{"class":39,"line":104},[37,121382,116215],{"class":2320},[37,121384,121385],{"class":185}," nouveau",[37,121387,121388],{"class":185}," modeset=",[37,121390,3435],{"class":61},[37,121392,121393,121396,121398],{"class":39,"line":113},[37,121394,121395],{"class":61},"alias",[37,121397,121385],{"class":185},[37,121399,121400],{"class":185}," off\n",[37,121402,121403,121405,121408],{"class":39,"line":189},[37,121404,121395],{"class":61},[37,121406,121407],{"class":185}," lbm-nouveau",[37,121409,121400],{"class":185},[14,121411,121412],{},"接着运行下方命令",[27,121414,121416],{"className":118808,"code":121415,"language":118810,"meta":32,"style":32},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[34,121417,121418,121428,121433],{"__ignoreMap":32},[37,121419,121420,121422,121425],{"class":39,"line":40},[37,121421,24918],{"class":2320},[37,121423,121424],{"class":185}," update-initramfs",[37,121426,121427],{"class":61}," -u\n",[37,121429,121430],{"class":39,"line":47},[37,121431,121432],{"class":2320},"或者\n",[37,121434,121435,121437,121440],{"class":39,"line":104},[37,121436,24918],{"class":2320},[37,121438,121439],{"class":185}," dracut",[37,121441,121442],{"class":61}," --force\n",[14,121444,121445],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[27,121447,121449],{"className":118808,"code":121448,"language":118810,"meta":32,"style":32},"lsmod | grep nouveau\n",[34,121450,121451],{"__ignoreMap":32},[37,121452,121453,121456,121458,121460],{"class":39,"line":40},[37,121454,121455],{"class":2320},"lsmod",[37,121457,25451],{"class":54},[37,121459,30578],{"class":2320},[37,121461,121371],{"class":185},[481,121463,121464],{"start":47},[484,121465,121466],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[27,121468,121470],{"className":118808,"code":121469,"language":118810,"meta":32,"style":32},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[34,121471,121472],{"__ignoreMap":32},[37,121473,121474,121476,121478],{"class":39,"line":40},[37,121475,24918],{"class":2320},[37,121477,118868],{"class":185},[37,121479,121480],{"class":185}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121482,121483],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[27,121485,121487],{"className":118808,"code":121486,"language":118810,"meta":32,"style":32},"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",[34,121488,121489,121497,121505,121513,121520,121528,121538,121546],{"__ignoreMap":32},[37,121490,121491,121494],{"class":39,"line":40},[37,121492,121493],{"class":2320},"Section",[37,121495,121496],{"class":185}," \"OutputClass\"\n",[37,121498,121499,121502],{"class":39,"line":47},[37,121500,121501],{"class":2320},"   Identifier",[37,121503,121504],{"class":185}," \"nvidia\"\n",[37,121506,121507,121510],{"class":39,"line":104},[37,121508,121509],{"class":2320},"   MatchDriver",[37,121511,121512],{"class":185}," \"nvidia-drm\"\n",[37,121514,121515,121518],{"class":39,"line":113},[37,121516,121517],{"class":2320},"   Driver",[37,121519,121504],{"class":185},[37,121521,121522,121525],{"class":39,"line":189},[37,121523,121524],{"class":2320},"   Option",[37,121526,121527],{"class":185}," \"AllowEmptyInitialConfiguration\"\n",[37,121529,121530,121532,121535],{"class":39,"line":195},[37,121531,121524],{"class":2320},[37,121533,121534],{"class":185}," \"PrimaryGPU\"",[37,121536,121537],{"class":185}," \"yes\"\n",[37,121539,121540,121543],{"class":39,"line":201},[37,121541,121542],{"class":2320},"   ModulePath",[37,121544,121545],{"class":185}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[37,121547,121548],{"class":39,"line":207},[37,121549,121550],{"class":2320},"EndSection\n",[481,121552,121553],{"start":104},[484,121554,121555],{},"安装N卡驱动提示错误",[27,121557,121559],{"className":121101,"code":121558,"language":121103,"meta":121104,"style":32},"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",[34,121560,121561],{"__ignoreMap":32},[37,121562,121563],{"class":39,"line":40},[37,121564,121558],{},[481,121566,121567],{},[484,121568,121569],{},"检查当前运行的内核版本：",[14,121571,121572],{},"运行以下命令以查看你当前正在使用的内核版本：",[27,121574,121576],{"className":117581,"code":121575,"language":117583,"meta":32,"style":32},"uname -r\n",[34,121577,121578],{"__ignoreMap":32},[37,121579,121580,121582],{"class":39,"line":40},[37,121581,70540],{"class":2320},[37,121583,121584],{"class":61}," -r\n",[481,121586,121587],{"start":47},[484,121588,121589],{},"安装内核开发文件：",[14,121591,121592,121593,121596],{},"确保你已经安装了与当前内核版本相匹配的 ",[34,121594,121595],{},"kernel-devel"," 包。运行以下命令来安装：",[27,121598,121600],{"className":117581,"code":121599,"language":117583,"meta":32,"style":32},"sudo dnf install kernel-devel-$(uname -r)\n",[34,121601,121602],{"__ignoreMap":32},[37,121603,121604,121606,121608,121610,121613,121615,121617,121619],{"class":39,"line":40},[37,121605,24918],{"class":2320},[37,121607,26657],{"class":185},[37,121609,24175],{"class":185},[37,121611,121612],{"class":185}," kernel-devel-",[37,121614,25441],{"class":50},[37,121616,70540],{"class":2320},[37,121618,119924],{"class":61},[37,121620,280],{"class":50},[14,121622,121623],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[481,121625,121626],{"start":104},[484,121627,121628],{},"安装内核源代码（如果需要）：",[14,121630,121631],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[27,121633,121635],{"className":117581,"code":121634,"language":117583,"meta":32,"style":32},"sudo dnf install kernel-headers kernel-source\n",[34,121636,121637],{"__ignoreMap":32},[37,121638,121639,121641,121643,121645,121648],{"class":39,"line":40},[37,121640,24918],{"class":2320},[37,121642,26657],{"class":185},[37,121644,24175],{"class":185},[37,121646,121647],{"class":185}," kernel-headers",[37,121649,121650],{"class":185}," kernel-source\n",[481,121652,121653],{"start":113},[484,121654,121655],{},"检查安装：",[14,121657,121658,121659,121662],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[34,121660,121661],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[27,121664,121666],{"className":117581,"code":121665,"language":117583,"meta":32,"style":32},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[34,121667,121668],{"__ignoreMap":32},[37,121669,121670,121672],{"class":39,"line":40},[37,121671,27103],{"class":2320},[37,121673,121674],{"class":185}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121676,121677,121678,121681],{},"如果仍然遇到问题，可以通过 ",[34,121679,121680],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[446,121683,121684],{},"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":32,"searchDepth":47,"depth":47,"links":121686},[121687,121691,121701,121705,121706],{"id":118784,"depth":47,"text":118785,"children":121688},[121689,121690],{"id":118794,"depth":104,"text":118795},{"id":118804,"depth":104,"text":118805},{"id":119004,"depth":47,"text":119005,"children":121692},[121693,121694,121695,121696,121697,121698,121699,121700],{"id":119008,"depth":104,"text":119009},{"id":119078,"depth":104,"text":119079},{"id":119167,"depth":104,"text":119168},{"id":119412,"depth":104,"text":119413},{"id":119482,"depth":104,"text":119483},{"id":119549,"depth":104,"text":119550},{"id":119584,"depth":104,"text":119585},{"id":119639,"depth":104,"text":119640},{"id":119690,"depth":47,"text":119691,"children":121702},[121703,121704],{"id":119694,"depth":104,"text":119695},{"id":119774,"depth":104,"text":119775},{"id":119960,"depth":47,"text":119961},{"id":120133,"depth":47,"text":120134,"children":121707},[121708,121709,121710,121711,121712],{"id":120137,"depth":104,"text":120138},{"id":120178,"depth":104,"text":120179},{"id":120465,"depth":104,"text":120466},{"id":120839,"depth":104,"text":120840},{"id":121335,"depth":104,"text":121336},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118776,"description":451},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121719,"title":121720,"body":121721,"description":451,"extension":452,"meta":122061,"navigation":454,"path":122062,"seo":122063,"stem":122064,"__hash__":122065},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121722,"toc":122059},[121723,121726,121731,121734,121980,121985,121988,122024,122027,122056],[10,121724,121720],{"id":121725},"_4-命令教程长期积累",[481,121727,121728],{},[484,121729,121730],{},"大多数命令",[14,121732,121733],{},"常用 Linux 命令速查：",[27,121735,121737],{"className":117581,"code":121736,"language":117583,"meta":32,"style":32},"# 文件与目录\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",[34,121738,121739,121744,121751,121758,121766,121773,121780,121788,121796,121803,121810,121818,121822,121827,121834,121842,121849,121853,121858,121865,121873,121881,121889,121897,121901,121906,121914,121921,121928,121936,121944,121948,121953,121962,121971],{"__ignoreMap":32},[37,121740,121741],{"class":39,"line":40},[37,121742,121743],{"class":43},"# 文件与目录\n",[37,121745,121746,121748],{"class":39,"line":47},[37,121747,27103],{"class":2320},[37,121749,121750],{"class":43},"        # 列出目录内容\n",[37,121752,121753,121755],{"class":39,"line":104},[37,121754,101561],{"class":61},[37,121756,121757],{"class":43},"        # 切换目录\n",[37,121759,121760,121763],{"class":39,"line":113},[37,121761,121762],{"class":61},"pwd",[37,121764,121765],{"class":43},"       # 显示当前路径\n",[37,121767,121768,121770],{"class":39,"line":189},[37,121769,101551],{"class":2320},[37,121771,121772],{"class":43},"     # 创建目录\n",[37,121774,121775,121777],{"class":39,"line":195},[37,121776,25664],{"class":2320},[37,121778,121779],{"class":43},"        # 删除文件或目录\n",[37,121781,121782,121785],{"class":39,"line":201},[37,121783,121784],{"class":2320},"cp",[37,121786,121787],{"class":43},"        # 复制文件或目录\n",[37,121789,121790,121793],{"class":39,"line":207},[37,121791,121792],{"class":2320},"mv",[37,121794,121795],{"class":43},"        # 移动\u002F重命名文件或目录\n",[37,121797,121798,121800],{"class":39,"line":213},[37,121799,101568],{"class":2320},[37,121801,121802],{"class":43},"     # 创建空文件\n",[37,121804,121805,121807],{"class":39,"line":218},[37,121806,121050],{"class":2320},[37,121808,121809],{"class":43},"       # 查看文件内容\n",[37,121811,121812,121815],{"class":39,"line":227},[37,121813,121814],{"class":2320},"head\u002Ftail",[37,121816,121817],{"class":43}," # 查看文件头部\u002F尾部\n",[37,121819,121820],{"class":39,"line":232},[37,121821,2757],{"emptyLinePlaceholder":454},[37,121823,121824],{"class":39,"line":238},[37,121825,121826],{"class":43},"# 权限管理\n",[37,121828,121829,121831],{"class":39,"line":244},[37,121830,24953],{"class":2320},[37,121832,121833],{"class":43},"     # 修改文件权限\n",[37,121835,121836,121839],{"class":39,"line":250},[37,121837,121838],{"class":2320},"chown",[37,121840,121841],{"class":43},"     # 修改文件所有者\n",[37,121843,121844,121846],{"class":39,"line":256},[37,121845,24918],{"class":2320},[37,121847,121848],{"class":43},"      # 以管理员身份执行\n",[37,121850,121851],{"class":39,"line":261},[37,121852,2757],{"emptyLinePlaceholder":454},[37,121854,121855],{"class":39,"line":267},[37,121856,121857],{"class":43},"# 系统信息\n",[37,121859,121860,121862],{"class":39,"line":283},[37,121861,70540],{"class":2320},[37,121863,121864],{"class":43},"     # 系统信息\n",[37,121866,121867,121870],{"class":39,"line":288},[37,121868,121869],{"class":2320},"df",[37,121871,121872],{"class":43},"        # 磁盘使用情况\n",[37,121874,121875,121878],{"class":39,"line":294},[37,121876,121877],{"class":2320},"free",[37,121879,121880],{"class":43},"      # 内存使用情况\n",[37,121882,121883,121886],{"class":39,"line":300},[37,121884,121885],{"class":2320},"top\u002Fhtop",[37,121887,121888],{"class":43},"  # 进程监控\n",[37,121890,121891,121894],{"class":39,"line":306},[37,121892,121893],{"class":2320},"ps",[37,121895,121896],{"class":43},"        # 查看进程\n",[37,121898,121899],{"class":39,"line":312},[37,121900,2757],{"emptyLinePlaceholder":454},[37,121902,121903],{"class":39,"line":317},[37,121904,121905],{"class":43},"# 网络\n",[37,121907,121908,121911],{"class":39,"line":323},[37,121909,121910],{"class":2320},"ping",[37,121912,121913],{"class":43},"      # 测试网络连通性\n",[37,121915,121916,121918],{"class":39,"line":337},[37,121917,27191],{"class":2320},[37,121919,121920],{"class":43},"      # 发送 HTTP 请求\n",[37,121922,121923,121925],{"class":39,"line":342},[37,121924,120574],{"class":2320},[37,121926,121927],{"class":43},"      # 下载文件\n",[37,121929,121930,121933],{"class":39,"line":347},[37,121931,121932],{"class":2320},"ssh",[37,121934,121935],{"class":43},"       # 远程登录\n",[37,121937,121938,121941],{"class":39,"line":352},[37,121939,121940],{"class":2320},"scp",[37,121942,121943],{"class":43},"       # 远程文件传输\n",[37,121945,121946],{"class":39,"line":357},[37,121947,2757],{"emptyLinePlaceholder":454},[37,121949,121950],{"class":39,"line":362},[37,121951,121952],{"class":43},"# 包管理（Debian\u002FUbuntu）\n",[37,121954,121955,121957,121959],{"class":39,"line":367},[37,121956,117653],{"class":2320},[37,121958,117632],{"class":185},[37,121960,121961],{"class":43},"   # 更新软件源\n",[37,121963,121964,121966,121968],{"class":39,"line":373},[37,121965,117653],{"class":2320},[37,121967,24175],{"class":185},[37,121969,121970],{"class":43},"  # 安装软件包\n",[37,121972,121973,121975,121977],{"class":39,"line":392},[37,121974,117653],{"class":2320},[37,121976,26421],{"class":185},[37,121978,121979],{"class":43},"   # 卸载软件包\n",[481,121981,121982],{"start":47},[484,121983,121984],{},"KDE Dolphin 以root打开",[14,121986,121987],{},"kde5",[27,121989,121991],{"className":117581,"code":121990,"language":117583,"meta":32,"style":32},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[34,121992,121993],{"__ignoreMap":32},[37,121994,121995,121998,122001,122004,122006,122008,122011,122014,122016,122019,122021],{"class":39,"line":40},[37,121996,121997],{"class":2320},"pkexec",[37,121999,122000],{"class":185}," env",[37,122002,122003],{"class":185}," DISPLAY=",[37,122005,28485],{"class":50},[37,122007,28543],{"class":185},[37,122009,122010],{"class":50},"$XAUTHORITY ",[37,122012,122013],{"class":185},"KDE_SESSION_VERSION=",[37,122015,836],{"class":61},[37,122017,122018],{"class":185}," KDE_FULL_SESSION=",[37,122020,1738],{"class":61},[37,122022,122023],{"class":185}," dolphin\n",[14,122025,122026],{},"kde6",[27,122028,122030],{"className":117581,"code":122029,"language":117583,"meta":32,"style":32},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[34,122031,122032],{"__ignoreMap":32},[37,122033,122034,122036,122038,122040,122042,122044,122046,122048,122050,122052,122054],{"class":39,"line":40},[37,122035,121997],{"class":2320},[37,122037,122000],{"class":185},[37,122039,122003],{"class":185},[37,122041,28485],{"class":50},[37,122043,28543],{"class":185},[37,122045,122010],{"class":50},[37,122047,122013],{"class":185},[37,122049,93],{"class":61},[37,122051,122018],{"class":185},[37,122053,1738],{"class":61},[37,122055,122023],{"class":185},[446,122057,122058],{},"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":32,"searchDepth":47,"depth":47,"links":122060},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121720,"description":451},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122067,"title":122068,"body":122069,"description":451,"extension":452,"meta":122083,"navigation":454,"path":122084,"seo":122085,"stem":122086,"__hash__":122087},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122070,"toc":122081},[122071,122074],[10,122072,122068],{"id":122073},"_5-各种环境配置",[14,122075,122076],{},[51,122077,122080],{"href":122078,"rel":122079},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24206],"电控组环境搭建大全",{"title":32,"searchDepth":47,"depth":47,"links":122082},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122068,"description":451},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122089,"title":122090,"body":122091,"description":451,"extension":452,"meta":122439,"navigation":454,"path":122440,"seo":122441,"stem":122442,"__hash__":122443},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122092,"toc":122431},[122093,122096,122100,122104,122108,122113,122120,122124,122417,122421,122428],[10,122094,122090],{"id":122095},"_6-拓展功能",[469,122097,122099],{"id":122098},"_61-wine","6.1 Wine",[469,122101,122103],{"id":122102},"_62-android","6.2 Android",[498,122105,122107],{"id":122106},"_621-i卡a卡","6.2.1 I卡、A卡",[481,122109,122110],{},[484,122111,122112],{},"Wayland-Waydroid(体验超级好)",[14,122114,122115,122116],{},"Waydroid 官网与安装指南：",[51,122117,122118],{"href":122118,"rel":122119},"https:\u002F\u002Fwaydro.id\u002F",[24206],[498,122121,122123],{"id":122122},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[481,122125,122126],{},[484,122127,122128,122129,122131,122132,122136,122138,122141,122146,122343],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54052,122130],{},"BlissOS 官网下载：",[51,122133,122134],{"href":122134,"rel":122135},"https:\u002F\u002Fblissos.org\u002F",[24206],[54052,122137],{},[1838,122139],{"alt":32,"src":122140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[481,122142,122143],{"start":104},[484,122144,122145],{},"比较推荐的配置",[27,122147,122149],{"className":117581,"code":122148,"language":117583,"meta":32,"style":32},"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",[34,122150,122151,122158,122168,122178,122188,122200,122210,122217,122227,122236,122245,122255,122265,122274,122284,122294,122306,122316,122325,122335],{"__ignoreMap":32},[37,122152,122153,122156],{"class":39,"line":40},[37,122154,122155],{"class":2320},"qemu-system-x86_64",[37,122157,25020],{"class":61},[37,122159,122160,122163,122166],{"class":39,"line":47},[37,122161,122162],{"class":61},"        -M",[37,122164,122165],{"class":185}," q35,vmport=off",[37,122167,25020],{"class":61},[37,122169,122170,122173,122176],{"class":39,"line":104},[37,122171,122172],{"class":61},"        -accel",[37,122174,122175],{"class":185}," kvm",[37,122177,25020],{"class":61},[37,122179,122180,122183,122186],{"class":39,"line":113},[37,122181,122182],{"class":61},"        -cpu",[37,122184,122185],{"class":185}," qemu64,+sse3,+sse4.2",[37,122187,25020],{"class":61},[37,122189,122190,122193,122196,122198],{"class":39,"line":189},[37,122191,122192],{"class":61},"        -smp",[37,122194,122195],{"class":185}," 8,cores=",[37,122197,168],{"class":61},[37,122199,25020],{"class":61},[37,122201,122202,122205,122208],{"class":39,"line":195},[37,122203,122204],{"class":61},"        -m",[37,122206,122207],{"class":185}," 6G",[37,122209,25020],{"class":61},[37,122211,122212,122215],{"class":39,"line":201},[37,122213,122214],{"class":61},"        -usb",[37,122216,25020],{"class":61},[37,122218,122219,122222,122225],{"class":39,"line":207},[37,122220,122221],{"class":61},"        -device",[37,122223,122224],{"class":185}," virtio-tablet",[37,122226,25020],{"class":61},[37,122228,122229,122231,122234],{"class":39,"line":213},[37,122230,122221],{"class":61},[37,122232,122233],{"class":185}," virtio-keyboard",[37,122235,25020],{"class":61},[37,122237,122238,122240,122243],{"class":39,"line":218},[37,122239,122221],{"class":61},[37,122241,122242],{"class":185}," usb-tablet",[37,122244,25020],{"class":61},[37,122246,122247,122250,122253],{"class":39,"line":227},[37,122248,122249],{"class":61},"        -bios",[37,122251,122252],{"class":185}," OVMF-pure-efi64.fd",[37,122254,25020],{"class":61},[37,122256,122257,122260,122263],{"class":39,"line":232},[37,122258,122259],{"class":61},"        -net",[37,122261,122262],{"class":185}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[37,122264,25020],{"class":61},[37,122266,122267,122269,122272],{"class":39,"line":238},[37,122268,122259],{"class":61},[37,122270,122271],{"class":185}," nic,model=virtio",[37,122273,25020],{"class":61},[37,122275,122276,122279,122282],{"class":39,"line":244},[37,122277,122278],{"class":61},"        -audio",[37,122280,122281],{"class":185}," sdl,model=hda",[37,122283,25020],{"class":61},[37,122285,122286,122289,122292],{"class":39,"line":250},[37,122287,122288],{"class":61},"        -display",[37,122290,122291],{"class":185}," sdl,gl=on,show-cursor=on",[37,122293,25020],{"class":61},[37,122295,122296,122298,122301,122304],{"class":39,"line":256},[37,122297,122221],{"class":61},[37,122299,122300],{"class":185}," virtio-vga-gl,xres=1920,yres=",[37,122302,122303],{"class":61},"1080",[37,122305,25020],{"class":61},[37,122307,122308,122311,122314],{"class":39,"line":261},[37,122309,122310],{"class":61},"        -drive",[37,122312,122313],{"class":185}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[37,122315,25020],{"class":61},[37,122317,122318,122320,122323],{"class":39,"line":267},[37,122319,122310],{"class":61},[37,122321,122322],{"class":185}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[37,122324,25020],{"class":61},[37,122326,122327,122330,122333],{"class":39,"line":283},[37,122328,122329],{"class":61},"        -monitor",[37,122331,122332],{"class":185}," stdio",[37,122334,25020],{"class":61},[37,122336,122337,122340],{"class":39,"line":288},[37,122338,122339],{"class":61},"        -serial",[37,122341,122342],{"class":185}," none\n",[481,122344,122345],{"start":189},[484,122346,122347,122348],{},"常用操作：",[481,122349,122350,122353,122409],{},[484,122351,122352],{},"全屏：Ctrl+Alt+F",[484,122354,122355,122356,122361],{},"adb调试",[481,122357,122358],{},[484,122359,122360],{},"使Linux与Android用ADB连接。",[27,122362,122364],{"className":117581,"code":122363,"language":117583,"meta":32,"style":32},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[34,122365,122366,122371,122382,122387,122399,122404],{"__ignoreMap":32},[37,122367,122368],{"class":39,"line":40},[37,122369,122370],{"class":43},"# 连接安卓\n",[37,122372,122373,122376,122379],{"class":39,"line":47},[37,122374,122375],{"class":2320},"adb",[37,122377,122378],{"class":185}," connect",[37,122380,122381],{"class":61}," 127.0.0.1\n",[37,122383,122384],{"class":39,"line":104},[37,122385,122386],{"class":43},"# 打开shell\n",[37,122388,122389,122391,122393,122396],{"class":39,"line":113},[37,122390,122375],{"class":2320},[37,122392,27225],{"class":61},[37,122394,122395],{"class":185}," 127.0.0.1:5555",[37,122397,122398],{"class":185}," shell\n",[37,122400,122401],{"class":39,"line":189},[37,122402,122403],{"class":43},"# 使用root权限\n",[37,122405,122406],{"class":39,"line":195},[37,122407,122408],{"class":2320},"su\n",[484,122410,122411,122412],{},"中文输入法",[481,122413,122414],{},[484,122415,122416],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[469,122418,122420],{"id":122419},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122422,122423,122424],{},"rEFInd 官网与文档：",[51,122425,122426],{"href":122426,"rel":122427},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24206],[446,122429,122430],{},"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":32,"searchDepth":47,"depth":47,"links":122432},[122433,122434,122438],{"id":122098,"depth":47,"text":122099},{"id":122102,"depth":47,"text":122103,"children":122435},[122436,122437],{"id":122106,"depth":104,"text":122107},{"id":122122,"depth":104,"text":122123},{"id":122419,"depth":47,"text":122420},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122090,"description":451},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122445,"title":122446,"body":122447,"description":451,"extension":452,"meta":125746,"navigation":454,"path":125747,"seo":125748,"stem":125749,"__hash__":125750},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122448,"toc":125720},[122449,122452,122456,122459,122466,122716,122719,122791,122794,122798,122802,122807,122810,122813,122816,122821,122824,122827,122830,122835,122838,122843,122846,122849,122854,122857,122862,122865,122869,122873,122876,122881,122884,122898,122901,122904,122913,122916,122925,122928,122931,122940,122943,122952,122955,122958,122967,122970,122973,122988,122991,122994,123003,123008,123011,123014,123023,123026,123035,123038,123047,123050,123059,123064,123067,123075,123080,123083,123092,123095,123103,123108,123111,123120,123123,123126,123130,123133,123138,123141,123146,123160,123165,123170,123181,123186,123192,123197,123212,123217,123220,123225,123230,123235,123243,123248,123255,123260,123271,123276,123279,123283,123286,123289,123294,123297,123316,123321,123324,123333,123338,123341,123363,123366,123396,123399,123404,123407,123421,123426,123445,123448,123451,123456,123468,123473,123478,123481,123486,123489,123504,123507,123512,123517,123521,123526,123566,123569,123573,123579,123585,123590,123593,123600,123605,123612,123615,123618,123625,123639,123642,123702,123705,123719,123731,123734,123737,123740,123804,123807,123810,123813,123833,123836,123841,123848,123852,123855,123859,123864,123869,123873,123876,123879,123921,123926,123929,123951,123966,123968,123973,123985,124045,124047,124049,124103,124105,124107,124113,124118,124121,124126,124130,124133,124195,124200,124203,124205,124209,124221,124303,124305,124307,124361,124367,124369,124373,124378,124380,124385,124389,124409,124444,124448,124451,124454,124457,124464,124467,124479,124482,124497,124500,124519,124567,124570,124587,124590,124604,124609,124612,124621,124636,124648,124686,124691,124700,124705,124710,124736,124745,124749,124753,124758,124761,124765,124769,124774,124777,124782,124785,124790,124793,124798,124801,124805,124810,124813,124818,124821,124825,124830,124833,124838,124841,124846,124849,124853,124858,124861,124866,124869,124874,124877,124881,124886,124889,124894,124897,124902,124905,124910,124913,124918,124921,124926,124929,124933,124938,124941,124946,124953,124957,124962,124965,124970,124973,124977,124982,124985,124988,124991,124994,124997,125001,125004,125014,125019,125024,125046,125051,125056,125063,125067,125072,125075,125078,125083,125086,125089,125092,125095,125098,125101,125104,125107,125110,125113,125116,125119,125124,125129,125134,125139,125144,125149,125154,125157,125161,125164,125168,125173,125178,125183,125188,125192,125198,125206,125211,125214,125219,125234,125237,125242,125276,125291,125294,125349,125375,125387,125390,125399,125402,125417,125422,125425,125431,125436,125439,125444,125447,125452,125457,125464,125467,125482,125485,125520,125525,125533,125571,125574,125577,125582,125585,125590,125601,125635,125640,125643,125652,125657,125663,125666,125671,125680,125685,125688,125691,125696,125704,125707,125712,125717],[10,122450,122446],{"id":122451},"_7-其他操作",[469,122453,122455],{"id":122454},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122457,122458],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122460,122461,122462,122465],{},"进入工控机的硬盘目录，进入",[34,122463,122464],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[27,122467,122471],{"className":122468,"code":122469,"language":122470,"meta":32,"style":32},"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",[34,122472,122473,122481,122492,122499,122506,122518,122525,122537,122548,122559,122566,122573,122580,122592,122604,122611,122623,122635,122642,122654,122666,122678,122689,122696,122707],{"__ignoreMap":32},[37,122474,122475,122478],{"class":39,"line":40},[37,122476,122477],{"class":51636},"network",[37,122479,122480],{"class":50},": \n",[37,122482,122483,122486,122488,122490],{"class":39,"line":47},[37,122484,122485],{"class":51636},"  version",[37,122487,51773],{"class":50},[37,122489,602],{"class":61},[37,122491,3024],{"class":50},[37,122493,122494,122497],{"class":39,"line":104},[37,122495,122496],{"class":51636},"  wifis",[37,122498,122480],{"class":50},[37,122500,122501,122504],{"class":39,"line":113},[37,122502,122503],{"class":51636},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[37,122505,122480],{"class":50},[37,122507,122508,122511,122513,122516],{"class":39,"line":189},[37,122509,122510],{"class":51636},"      renderer",[37,122512,51773],{"class":50},[37,122514,122515],{"class":185},"NetworkManager",[37,122517,3024],{"class":50},[37,122519,122520,122523],{"class":39,"line":195},[37,122521,122522],{"class":51636},"      match",[37,122524,122480],{"class":50},[37,122526,122527,122530,122532,122535],{"class":39,"line":201},[37,122528,122529],{"class":51636},"        name",[37,122531,51773],{"class":50},[37,122533,122534],{"class":185},"\"wlan0\"",[37,122536,3024],{"class":50},[37,122538,122539,122542,122544,122546],{"class":39,"line":207},[37,122540,122541],{"class":51636},"      dhcp4",[37,122543,51773],{"class":50},[37,122545,1738],{"class":61},[37,122547,3024],{"class":50},[37,122549,122550,122553,122555,122557],{"class":39,"line":213},[37,122551,122552],{"class":51636},"      dhcp6",[37,122554,51773],{"class":50},[37,122556,1738],{"class":61},[37,122558,3024],{"class":50},[37,122560,122561,122564],{"class":39,"line":218},[37,122562,122563],{"class":51636},"      access-points",[37,122565,122480],{"class":50},[37,122567,122568,122571],{"class":39,"line":227},[37,122569,122570],{"class":185},"        \"EMIS_Vinci_Robocon_5G\"",[37,122572,122480],{"class":50},[37,122574,122575,122578],{"class":39,"line":232},[37,122576,122577],{"class":51636},"          auth",[37,122579,122480],{"class":50},[37,122581,122582,122585,122587,122590],{"class":39,"line":238},[37,122583,122584],{"class":51636},"            key-management",[37,122586,51773],{"class":50},[37,122588,122589],{"class":185},"\"psk\"",[37,122591,3024],{"class":50},[37,122593,122594,122597,122599,122602],{"class":39,"line":244},[37,122595,122596],{"class":51636},"            password",[37,122598,51773],{"class":50},[37,122600,122601],{"class":185},"\"vinci666\"",[37,122603,3024],{"class":50},[37,122605,122606,122609],{"class":39,"line":250},[37,122607,122608],{"class":51636},"          networkmanager",[37,122610,122480],{"class":50},[37,122612,122613,122616,122618,122621],{"class":39,"line":256},[37,122614,122615],{"class":51636},"            uuid",[37,122617,51773],{"class":50},[37,122619,122620],{"class":185},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[37,122622,3024],{"class":50},[37,122624,122625,122628,122630,122633],{"class":39,"line":261},[37,122626,122627],{"class":51636},"            name",[37,122629,51773],{"class":50},[37,122631,122632],{"class":185},"\"EMIS_Vinci_Robocon_5G\"",[37,122634,3024],{"class":50},[37,122636,122637,122640],{"class":39,"line":267},[37,122638,122639],{"class":51636},"            passthrough",[37,122641,122480],{"class":50},[37,122643,122644,122647,122649,122652],{"class":39,"line":283},[37,122645,122646],{"class":51636},"              wifi-security.auth-alg",[37,122648,51773],{"class":50},[37,122650,122651],{"class":185},"\"open\"",[37,122653,3024],{"class":50},[37,122655,122656,122659,122661,122664],{"class":39,"line":288},[37,122657,122658],{"class":51636},"              ipv6.addr-gen-mode",[37,122660,51773],{"class":50},[37,122662,122663],{"class":185},"\"default\"",[37,122665,3024],{"class":50},[37,122667,122668,122671,122673,122676],{"class":39,"line":294},[37,122669,122670],{"class":51636},"              ipv6.ip6-privacy",[37,122672,51773],{"class":50},[37,122674,122675],{"class":185},"\"-1\"",[37,122677,3024],{"class":50},[37,122679,122680,122683,122685,122687],{"class":39,"line":300},[37,122681,122682],{"class":51636},"              proxy._",[37,122684,51773],{"class":50},[37,122686,8000],{"class":185},[37,122688,3024],{"class":50},[37,122690,122691,122694],{"class":39,"line":306},[37,122692,122693],{"class":51636},"      networkmanager",[37,122695,122480],{"class":50},[37,122697,122698,122701,122703,122705],{"class":39,"line":312},[37,122699,122700],{"class":51636},"        uuid",[37,122702,51773],{"class":50},[37,122704,122620],{"class":185},[37,122706,3024],{"class":50},[37,122708,122709,122711,122713],{"class":39,"line":317},[37,122710,122529],{"class":51636},[37,122712,51773],{"class":50},[37,122714,122715],{"class":185},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122717,122718],{},"将其改为新wifi的名和密码：",[27,122720,122722],{"className":122468,"code":122721,"language":122470,"meta":32,"style":32},"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",[34,122723,122724,122730,122739,122745,122752,122761,122769,122775,122781],{"__ignoreMap":32},[37,122725,122726,122728],{"class":39,"line":40},[37,122727,122477],{"class":51636},[37,122729,4089],{"class":50},[37,122731,122732,122734,122736],{"class":39,"line":47},[37,122733,122485],{"class":51636},[37,122735,51773],{"class":50},[37,122737,122738],{"class":61},"2\n",[37,122740,122741,122743],{"class":39,"line":104},[37,122742,122496],{"class":51636},[37,122744,4089],{"class":50},[37,122746,122747,122750],{"class":39,"line":113},[37,122748,122749],{"class":51636},"    wlan0",[37,122751,4089],{"class":50},[37,122753,122754,122756,122758],{"class":39,"line":189},[37,122755,122541],{"class":51636},[37,122757,51773],{"class":50},[37,122759,122760],{"class":61},"true\n",[37,122762,122763,122765,122767],{"class":39,"line":195},[37,122764,122552],{"class":51636},[37,122766,51773],{"class":50},[37,122768,122760],{"class":61},[37,122770,122771,122773],{"class":39,"line":201},[37,122772,122563],{"class":51636},[37,122774,4089],{"class":50},[37,122776,122777,122779],{"class":39,"line":207},[37,122778,122570],{"class":185},[37,122780,4089],{"class":50},[37,122782,122783,122786,122788],{"class":39,"line":213},[37,122784,122785],{"class":51636},"          password",[37,122787,51773],{"class":50},[37,122789,122790],{"class":185},"\"vinci666\"\n",[14,122792,122793],{},"工控机开机即可连上网。",[469,122795,122797],{"id":122796},"_72-ssh远程开发","7.2 SSH远程开发",[498,122799,122801],{"id":122800},"_721-环境准备","7.2.1 环境准备",[14,122803,122804],{},[673,122805,122806],{},"1.硬件准备",[14,122808,122809],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122811,122812],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122814,122815],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122817,122818],{},[673,122819,122820],{},"2.设置固定IP",[14,122822,122823],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122825,122826],{},"1.进入设置界面",[14,122828,122829],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122831,122832],{},[1838,122833],{"alt":32,"src":122834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122836,122837],{},"2.配置所连接的网络",[14,122839,122840],{},[1838,122841],{"alt":32,"src":122842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122844,122845],{},"3.设置固定IP",[14,122847,122848],{},"查看当前IP地址。",[14,122850,122851],{},[1838,122852],{"alt":32,"src":122853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122855,122856],{},"设置固定IP。",[14,122858,122859],{},[1838,122860],{"alt":32,"src":122861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122863,122864],{},"至此，IP配置完毕。",[498,122866,122868],{"id":122867},"_722-环境搭建","7.2.2 环境搭建",[14,122870,122871],{},[673,122872,26095],{},[14,122874,122875],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122877,122878],{},[673,122879,122880],{},"实现",[14,122882,122883],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[481,122885,122886,122889,122892,122895],{},[484,122887,122888],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[484,122890,122891],{},"远程主机启动SSH服务；",[484,122893,122894],{},"本地主机登陆远程主机；",[484,122896,122897],{},"实现数据传输。",[14,122899,122900],{},"1.安装SSH客户端与服务端",[14,122902,122903],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[27,122905,122907],{"className":121101,"code":122906,"language":121103,"meta":121104,"style":32}," sudo apt install openssh-server\n",[34,122908,122909],{"__ignoreMap":32},[37,122910,122911],{"class":39,"line":40},[37,122912,122906],{},[14,122914,122915],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[27,122917,122919],{"className":121101,"code":122918,"language":121103,"meta":121104,"style":32},"sudo apt install openssh-client\n",[34,122920,122921],{"__ignoreMap":32},[37,122922,122923],{"class":39,"line":40},[37,122924,122918],{},[14,122926,122927],{},"2.远程主机启动SSH服务",[14,122929,122930],{},"远程主机启动 ssh 服务命令如下：",[27,122932,122934],{"className":121101,"code":122933,"language":121103,"meta":121104,"style":32},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[34,122935,122936],{"__ignoreMap":32},[37,122937,122938],{"class":39,"line":40},[37,122939,122933],{},[14,122941,122942],{},"启动后可使用如下命令查看服务是否正常运行：",[27,122944,122946],{"className":121101,"code":122945,"language":121103,"meta":121104,"style":32},"ps -e | grep ssh\n",[34,122947,122948],{"__ignoreMap":32},[37,122949,122950],{"class":39,"line":40},[37,122951,122945],{},[14,122953,122954],{},"如果启动成功，会包含 sshd 程序。",[14,122956,122957],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[27,122959,122961],{"className":121101,"code":122960,"language":121103,"meta":121104,"style":32},"sudo systemctl enable ssh\n",[34,122962,122963],{"__ignoreMap":32},[37,122964,122965],{"class":39,"line":40},[37,122966,122960],{},[14,122968,122969],{},"3.本地远程登录",[14,122971,122972],{},"登录远程主机可以调用如下命令:",[27,122974,122976],{"className":117581,"code":122975,"language":117583,"meta":32,"style":32},"ssh -X 用户名@ip地址\n",[34,122977,122978],{"__ignoreMap":32},[37,122979,122980,122982,122985],{"class":39,"line":40},[37,122981,121932],{"class":2320},[37,122983,122984],{"class":61}," -X",[37,122986,122987],{"class":185}," 用户名@ip地址\n",[14,122989,122990],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122992,122993],{},"如果退出，可以调用exit命令：",[27,122995,122997],{"className":121101,"code":122996,"language":121103,"meta":121104,"style":32},"exit\n",[34,122998,122999],{"__ignoreMap":32},[37,123000,123001],{"class":39,"line":40},[37,123002,122996],{},[14,123004,123005],{},[673,123006,123007],{},"4.实现数据传输",[14,123009,123010],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,123012,123013],{},"上传文件指令格式如下：",[27,123015,123017],{"className":121101,"code":123016,"language":121103,"meta":121104,"style":32},"scp 本地文件路径 账号@ip:路径\n",[34,123018,123019],{"__ignoreMap":32},[37,123020,123021],{"class":39,"line":40},[37,123022,123016],{},[14,123024,123025],{},"上传文件夹指令格式如下：",[27,123027,123029],{"className":121101,"code":123028,"language":121103,"meta":121104,"style":32},"scp -r 本地文件夹路径 账号@ip:路径\n",[34,123030,123031],{"__ignoreMap":32},[37,123032,123033],{"class":39,"line":40},[37,123034,123028],{},[14,123036,123037],{},"下载文件指令格式如下：",[27,123039,123041],{"className":121101,"code":123040,"language":121103,"meta":121104,"style":32},"scp 账号@ip:路径 本地文件夹路径\n",[34,123042,123043],{"__ignoreMap":32},[37,123044,123045],{"class":39,"line":40},[37,123046,123040],{},[14,123048,123049],{},"下载文件夹指令格式如下：",[27,123051,123053],{"className":121101,"code":123052,"language":121103,"meta":121104,"style":32},"scp -r 账号@ip:路径 本地文件夹路径\n",[34,123054,123055],{"__ignoreMap":32},[37,123056,123057],{"class":39,"line":40},[37,123058,123052],{},[14,123060,123061],{},[673,123062,123063],{},"优化",[14,123065,123066],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[481,123068,123069,123072],{},[484,123070,123071],{},"本地生成密钥对；",[484,123073,123074],{},"将公钥上传至远程主机。",[14,123076,123077],{},[673,123078,123079],{},"1.生成密钥对",[14,123081,123082],{},"本地客户端生成公私钥：（一路回车默认即可）",[27,123084,123086],{"className":121101,"code":123085,"language":121103,"meta":121104,"style":32},"ssh-keygen\n",[34,123087,123088],{"__ignoreMap":32},[37,123089,123090],{"class":39,"line":40},[37,123091,123085],{},[14,123093,123094],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[481,123096,123097,123100],{},[484,123098,123099],{},"id_rsa （私钥）；",[484,123101,123102],{},"id_rsa.pub (公钥)。",[14,123104,123105],{},[673,123106,123107],{},"2.公钥上传",[14,123109,123110],{},"上传指令如下：",[27,123112,123114],{"className":121101,"code":123113,"language":121103,"meta":121104,"style":32},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[34,123115,123116],{"__ignoreMap":32},[37,123117,123118],{"class":39,"line":40},[37,123119,123113],{},[14,123121,123122],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,123124,123125],{},"以后再远程登录就无需录入密码了。",[498,123127,123129],{"id":123128},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,123131,123132],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,123134,123135],{},[673,123136,123137],{},"1.准备工作",[14,123139,123140],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,123142,123143],{},[673,123144,123145],{},"2.为VScode安装远程开发插件",[14,123147,123148,123149,123152,123153,123156,123157,28727],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[34,123150,123151],{},"扩展：商店","的搜索栏输入",[34,123154,123155],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[34,123158,123159],{},"安装",[14,123161,123162],{},[1838,123163],{"alt":32,"src":123164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,123166,123167],{},[673,123168,123169],{},"3.配置远程连接",[14,123171,123172,123173,123176,123177,123180],{},"步骤1：使用快捷键",[34,123174,123175],{},"ctrl + shift + p","打开命令输入窗口，并输入",[34,123178,123179],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,123182,123183],{},[1838,123184],{"alt":32,"src":123185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,123187,123188,123189,28727],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[34,123190,123191],{},"Add New SSH Host",[14,123193,123194],{},[1838,123195],{"alt":32,"src":123196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,123198,123199,123200,123203,123204,123207,123208,123211],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[34,123201,123202],{},"ssh +X ubuntu@192.168.43.164","，其中，",[34,123205,123206],{},"ubuntu","需要替换为你的登录用户名，",[34,123209,123210],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,123213,123214],{},[1838,123215],{"alt":32,"src":123216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,123218,123219],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,123221,123222],{},[1838,123223],{"alt":32,"src":123224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,123226,123227],{},[1838,123228],{"alt":32,"src":123229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,123231,123232],{},[673,123233,123234],{},"4.使用",[14,123236,123237,123238,123176,123240,123242],{},"步骤1：继续使用快捷键",[34,123239,123175],{},[34,123241,123179],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123244,123245],{},[1838,123246],{"alt":32,"src":123247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123249,123250,123251,123254],{},"或者，也可以点击侧边栏的",[34,123252,123253],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123256,123257],{},[1838,123258],{"alt":32,"src":123259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123261,123262,123263,123266,123267,123270],{},"步骤2：选择菜单栏的",[34,123264,123265],{},"文件","下的",[34,123268,123269],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123272,123273],{},[1838,123274],{"alt":32,"src":123275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123277,123278],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[469,123280,123282],{"id":123281},"_73-远程桌面","7.3 远程桌面",[14,123284,123285],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123287,123288],{},"我们选择使用VNC来看。",[481,123290,123291],{},[484,123292,123293],{},"安装VNC服务器：",[14,123295,123296],{},"这里以TigerVNC为例进行安装：",[27,123298,123300],{"className":117581,"code":123299,"language":117583,"meta":32,"style":32},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[34,123301,123302],{"__ignoreMap":32},[37,123303,123304,123306,123308,123310,123313],{"class":39,"line":40},[37,123305,24918],{"class":2320},[37,123307,117602],{"class":185},[37,123309,24175],{"class":185},[37,123311,123312],{"class":185}," tigervnc-standalone-server",[37,123314,123315],{"class":185}," tigervnc-common\n",[481,123317,123318],{"start":47},[484,123319,123320],{},"设置VNC密码：",[14,123322,123323],{},"为VNC用户设置密码，运行以下命令：",[27,123325,123327],{"className":117581,"code":123326,"language":117583,"meta":32,"style":32},"vncpasswd\n",[34,123328,123329],{"__ignoreMap":32},[37,123330,123331],{"class":39,"line":40},[37,123332,123326],{"class":2320},[481,123334,123335],{"start":104},[484,123336,123337],{},"配置VNC启动脚本:",[14,123339,123340],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[27,123342,123344],{"className":117581,"code":123343,"language":117583,"meta":32,"style":32},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[34,123345,123346,123355],{"__ignoreMap":32},[37,123347,123348,123350,123352],{"class":39,"line":40},[37,123349,101551],{"class":2320},[37,123351,29558],{"class":61},[37,123353,123354],{"class":185}," ~\u002F.vnc\n",[37,123356,123357,123360],{"class":39,"line":47},[37,123358,123359],{"class":2320},"nano",[37,123361,123362],{"class":185}," ~\u002F.vnc\u002Fxstartup\n",[14,123364,123365],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[27,123367,123369],{"className":117581,"code":123368,"language":117583,"meta":32,"style":32},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[34,123370,123371,123376,123384,123391],{"__ignoreMap":32},[37,123372,123373],{"class":39,"line":40},[37,123374,123375],{"class":43},"#!\u002Fbin\u002Fsh\n",[37,123377,123378,123381],{"class":39,"line":47},[37,123379,123380],{"class":61},"unset",[37,123382,123383],{"class":185}," SESSION_MANAGER\n",[37,123385,123386,123388],{"class":39,"line":104},[37,123387,123380],{"class":61},[37,123389,123390],{"class":185}," DBUS_SESSION_BUS_ADDRESS\n",[37,123392,123393],{"class":39,"line":113},[37,123394,123395],{"class":2320},"gnome-session\n",[14,123397,123398],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[481,123400,123401],{"start":113},[484,123402,123403],{},"给予执行权限：",[14,123405,123406],{},"为xstartup文件设置执行权限：",[27,123408,123410],{"className":117581,"code":123409,"language":117583,"meta":32,"style":32},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[34,123411,123412],{"__ignoreMap":32},[37,123413,123414,123416,123419],{"class":39,"line":40},[37,123415,24953],{"class":2320},[37,123417,123418],{"class":185}," +x",[37,123420,123362],{"class":185},[481,123422,123423],{"start":189},[484,123424,123425],{},"启动VNC服务器：",[27,123427,123429],{"className":117581,"code":123428,"language":117583,"meta":32,"style":32},"vncserver -geometry 1920x1080 -localhost=0\n",[34,123430,123431],{"__ignoreMap":32},[37,123432,123433,123436,123439,123442],{"class":39,"line":40},[37,123434,123435],{"class":2320},"vncserver",[37,123437,123438],{"class":61}," -geometry",[37,123440,123441],{"class":185}," 1920x1080",[37,123443,123444],{"class":61}," -localhost=0\n",[14,123446,123447],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123449,123450],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[481,123452,123453],{"start":195},[484,123454,123455],{},"查看已开启的VNC服务器：",[27,123457,123459],{"className":117581,"code":123458,"language":117583,"meta":32,"style":32},"vncserver -list\n",[34,123460,123461],{"__ignoreMap":32},[37,123462,123463,123465],{"class":39,"line":40},[37,123464,123435],{"class":2320},[37,123466,123467],{"class":61}," -list\n",[14,123469,123470],{},[1838,123471],{"alt":32,"src":123472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[481,123474,123475],{"start":201},[484,123476,123477],{},"连接到VNC服务器：",[14,123479,123480],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[481,123482,123483],{"start":207},[484,123484,123485],{},"停止VNC服务器：",[14,123487,123488],{},"如果需要停止VNC服务器，可以使用以下命令：",[27,123490,123492],{"className":117581,"code":123491,"language":117583,"meta":32,"style":32},"vncserver -kill :1\n",[34,123493,123494],{"__ignoreMap":32},[37,123495,123496,123498,123501],{"class":39,"line":40},[37,123497,123435],{"class":2320},[37,123499,123500],{"class":61}," -kill",[37,123502,123503],{"class":185}," :1\n",[14,123505,123506],{},"将:1替换为你实际使用的显示编号。",[14,123508,123509],{},[1838,123510],{"alt":32,"src":123511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123513,123514],{},[1838,123515],{"alt":32,"src":123516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[469,123518,123520],{"id":123519},"_74-usb端口设置","7.4 USB端口设置",[14,123522,123523],{},[673,123524,123525],{},"首先先配置好权限",[27,123527,123529],{"className":117581,"code":123528,"language":117583,"meta":32,"style":32},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[34,123530,123531,123536,123549,123556,123561],{"__ignoreMap":32},[37,123532,123533],{"class":39,"line":40},[37,123534,123535],{"class":43},"# 将用户权限提高\n",[37,123537,123538,123540,123542,123544,123547],{"class":39,"line":47},[37,123539,24918],{"class":2320},[37,123541,26916],{"class":185},[37,123543,26919],{"class":61},[37,123545,123546],{"class":185}," dialout",[37,123548,26924],{"class":50},[37,123550,123551,123553],{"class":39,"line":104},[37,123552,26943],{"class":2320},[37,123554,123555],{"class":185}," dialout\n",[37,123557,123558],{"class":39,"line":113},[37,123559,123560],{"class":43},"# 查看下面命令是否输出dialout（若输出才正常）\n",[37,123562,123563],{"class":39,"line":189},[37,123564,123565],{"class":2320},"groups\n",[14,123567,123568],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[498,123570,123572],{"id":123571},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123574,123575,123578],{},[673,123576,123577],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123580,123581,123584],{},[673,123582,123583],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123586,123587],{},[673,123588,123589],{},"流程如下：",[14,123591,123592],{},"（1）.查找设备idVendor和idProduct",[14,123594,123595,123596,123599],{},"接入两个USB设备，在终端调用指令",[34,123597,123598],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123601,123602],{},[1838,123603],{"alt":32,"src":123604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123606,123607,123608,123611],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[34,123609,123610],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123613,123614],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123616,123617],{},"（2）.编写映射规则",[14,123619,123620,123621,123624],{},"在",[34,123622,123623],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[27,123626,123628],{"className":117581,"code":123627,"language":117583,"meta":32,"style":32},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[34,123629,123630],{"__ignoreMap":32},[37,123631,123632,123634,123636],{"class":39,"line":40},[37,123633,24918],{"class":2320},[37,123635,118868],{"class":185},[37,123637,123638],{"class":185}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123640,123641],{},"输入如下内容：",[27,123643,123645],{"className":117581,"code":123644,"language":117583,"meta":32,"style":32},"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",[34,123646,123647,123677],{"__ignoreMap":32},[37,123648,123649,123652,123654,123657,123660,123663,123666,123668,123671,123674],{"class":39,"line":40},[37,123650,123651],{"class":50},"KERNEL",[37,123653,55],{"class":54},[37,123655,123656],{"class":185},"=\"ttyUSB*\",",[37,123658,123659],{"class":2320}," ATTRS",[37,123661,123662],{"class":185},"{idVendor}==",[37,123664,123665],{"class":2320},"\"10c4\"",[37,123667,65],{"class":2320},[37,123669,123670],{"class":185}," ATTRS{idProduct}==\"ea60\",",[37,123672,123673],{"class":185}," MODE:=\"0777\",",[37,123675,123676],{"class":185}," SYMLINK+=\"mylidar\"\n",[37,123678,123679,123681,123683,123685,123687,123689,123692,123694,123697,123699],{"class":39,"line":47},[37,123680,123651],{"class":50},[37,123682,55],{"class":54},[37,123684,123656],{"class":185},[37,123686,123659],{"class":2320},[37,123688,123662],{"class":185},[37,123690,123691],{"class":2320},"\"1a86\"",[37,123693,65],{"class":2320},[37,123695,123696],{"class":185}," ATTRS{idProduct}==\"7523\",",[37,123698,123673],{"class":185},[37,123700,123701],{"class":185}," SYMLINK+=\"mycar\"\n",[14,123703,123704],{},"代码解释：",[1515,123706,123707,123710,123713,123716],{},[484,123708,123709],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[484,123711,123712],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[484,123714,123715],{},"SYMLINK是符号连接，即绑定的别名；",[484,123717,123718],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123720,123721,123722,123725,123728],{},"***小提示：***",[23894,123723,123724],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[34,123726,123727],{},"\u002Fetc\u002Fudev\u002Frule.d",[23894,123729,123730],{},"目录即可。",[14,123732,123733],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123735,123736],{},"（3）.使规则生效",[14,123738,123739],{},"在终端下输入如下指令：",[27,123741,123743],{"className":117581,"code":123742,"language":117583,"meta":32,"style":32},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[34,123744,123745,123750,123762,123773,123777,123782,123795],{"__ignoreMap":32},[37,123746,123747],{"class":39,"line":40},[37,123748,123749],{"class":43},"# Ubuntu用下方命令\n",[37,123751,123752,123754,123756,123759],{"class":39,"line":47},[37,123753,24918],{"class":2320},[37,123755,120333],{"class":185},[37,123757,123758],{"class":185}," udev",[37,123760,123761],{"class":185}," reload\n",[37,123763,123764,123766,123768,123770],{"class":39,"line":104},[37,123765,24918],{"class":2320},[37,123767,120333],{"class":185},[37,123769,123758],{"class":185},[37,123771,123772],{"class":185}," restart\n",[37,123774,123775],{"class":39,"line":113},[37,123776,2757],{"emptyLinePlaceholder":454},[37,123778,123779],{"class":39,"line":189},[37,123780,123781],{"class":43},"#Fedora用下方命令\n",[37,123783,123784,123786,123789,123792],{"class":39,"line":195},[37,123785,24918],{"class":2320},[37,123787,123788],{"class":185}," udevadm",[37,123790,123791],{"class":185}," control",[37,123793,123794],{"class":61}," --reload\n",[37,123796,123797,123799,123801],{"class":39,"line":201},[37,123798,24918],{"class":2320},[37,123800,123788],{"class":185},[37,123802,123803],{"class":185}," trigger\n",[14,123805,123806],{},"再重新插拔设备即可。",[14,123808,123809],{},"（4）.测试",[14,123811,123812],{},"终端下输入如下指令",[27,123814,123816],{"className":117581,"code":123815,"language":117583,"meta":32,"style":32},"ll \u002Fdev | grep ttyUSB\n",[34,123817,123818],{"__ignoreMap":32},[37,123819,123820,123823,123826,123828,123830],{"class":39,"line":40},[37,123821,123822],{"class":2320},"ll",[37,123824,123825],{"class":185}," \u002Fdev",[37,123827,25451],{"class":54},[37,123829,30578],{"class":2320},[37,123831,123832],{"class":185}," ttyUSB\n",[14,123834,123835],{},"运行结果如下：",[14,123837,123838],{},[1838,123839],{"alt":32,"src":123840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123842,123843,123844,123847],{},"也可以多次插拔USB设备，会发现设备端口",[34,123845,123846],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123849,123850],{},[673,123851,118249],{},[14,123853,123854],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[498,123856,123858],{"id":123857},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123860,123861,123863],{},[673,123862,123577],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123865,123866,123868],{},[673,123867,123583],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123870,123871],{},[673,123872,123589],{},[14,123874,123875],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123877,123878],{},"调用如下指令查看第一台雷达的USB信息：",[27,123880,123882],{"className":117581,"code":123881,"language":117583,"meta":32,"style":32},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[34,123883,123884,123904],{"__ignoreMap":32},[37,123885,123886,123889,123891,123894,123897,123899,123901],{"class":39,"line":40},[37,123887,123888],{"class":2320},"udevadm",[37,123890,70157],{"class":185},[37,123892,123893],{"class":61}," --attribute-walk",[37,123895,123896],{"class":61}," --name=\u002Fdev\u002FttyUSB0",[37,123898,25451],{"class":54},[37,123900,30578],{"class":2320},[37,123902,123903],{"class":185}," KERNELS\n",[37,123905,123906,123908,123910,123912,123915,123917,123919],{"class":39,"line":47},[37,123907,123888],{"class":2320},[37,123909,70157],{"class":185},[37,123911,123893],{"class":61},[37,123913,123914],{"class":61}," --name=\u002Fdev\u002FttyACM0",[37,123916,25451],{"class":54},[37,123918,30578],{"class":2320},[37,123920,123903],{"class":185},[14,123922,123923],{},[1838,123924],{"alt":32,"src":123925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123927,123928],{},"调用如下指令查看第二台雷达的USB信息：",[27,123930,123932],{"className":117581,"code":123931,"language":117583,"meta":32,"style":32},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[34,123933,123934],{"__ignoreMap":32},[37,123935,123936,123938,123940,123942,123945,123947,123949],{"class":39,"line":40},[37,123937,123888],{"class":2320},[37,123939,70157],{"class":185},[37,123941,123893],{"class":61},[37,123943,123944],{"class":61}," --name=\u002Fdev\u002FttyUSB1",[37,123946,25451],{"class":54},[37,123948,30578],{"class":2320},[37,123950,123903],{"class":185},[14,123952,123953,123954,123957,123958,123961,123962,123965],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[34,123955,123956],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[34,123959,123960],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[673,123963,123964],{},"唯一性标识","”。",[14,123967,123617],{},[14,123969,123620,123970,123972],{},[34,123971,123623],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[27,123974,123975],{"className":117581,"code":123627,"language":117583,"meta":32,"style":32},[34,123976,123977],{"__ignoreMap":32},[37,123978,123979,123981,123983],{"class":39,"line":40},[37,123980,24918],{"class":2320},[37,123982,118868],{"class":185},[37,123984,123638],{"class":185},[27,123986,123988],{"className":117581,"code":123987,"language":117583,"meta":32,"style":32},"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",[34,123989,123990,124019],{"__ignoreMap":32},[37,123991,123992,123994,123996,123998,124001,124003,124006,124009,124011,124014,124016],{"class":39,"line":40},[37,123993,123651],{"class":50},[37,123995,55],{"class":54},[37,123997,123656],{"class":185},[37,123999,124000],{"class":50}," KERNELS",[37,124002,55],{"class":54},[37,124004,124005],{"class":185},"=\"1-1.3:1.0\",",[37,124007,124008],{"class":2320}," MODE:",[37,124010,55],{"class":185},[37,124012,124013],{"class":2320},"\"0777\"",[37,124015,65],{"class":2320},[37,124017,124018],{"class":185}," SYMLINK+=\"rplidar_front\"\n",[37,124020,124021,124023,124025,124027,124029,124031,124034,124036,124038,124040,124042],{"class":39,"line":47},[37,124022,123651],{"class":50},[37,124024,55],{"class":54},[37,124026,123656],{"class":185},[37,124028,124000],{"class":50},[37,124030,55],{"class":54},[37,124032,124033],{"class":185},"=\"1-1.4:1.0\",",[37,124035,124008],{"class":2320},[37,124037,55],{"class":185},[37,124039,124013],{"class":2320},[37,124041,65],{"class":2320},[37,124043,124044],{"class":185}," SYMLINK+=\"rplidar_back\"\n",[14,124046,123736],{},[14,124048,123739],{},[27,124050,124051],{"className":117581,"code":123742,"language":117583,"meta":32,"style":32},[34,124052,124053,124057,124067,124077,124081,124085,124095],{"__ignoreMap":32},[37,124054,124055],{"class":39,"line":40},[37,124056,123749],{"class":43},[37,124058,124059,124061,124063,124065],{"class":39,"line":47},[37,124060,24918],{"class":2320},[37,124062,120333],{"class":185},[37,124064,123758],{"class":185},[37,124066,123761],{"class":185},[37,124068,124069,124071,124073,124075],{"class":39,"line":104},[37,124070,24918],{"class":2320},[37,124072,120333],{"class":185},[37,124074,123758],{"class":185},[37,124076,123772],{"class":185},[37,124078,124079],{"class":39,"line":113},[37,124080,2757],{"emptyLinePlaceholder":454},[37,124082,124083],{"class":39,"line":189},[37,124084,123781],{"class":43},[37,124086,124087,124089,124091,124093],{"class":39,"line":195},[37,124088,24918],{"class":2320},[37,124090,123788],{"class":185},[37,124092,123791],{"class":185},[37,124094,123794],{"class":61},[37,124096,124097,124099,124101],{"class":39,"line":201},[37,124098,24918],{"class":2320},[37,124100,123788],{"class":185},[37,124102,123803],{"class":185},[14,124104,123806],{},[14,124106,123809],{},[14,124108,123812,124109,124112],{},[34,124110,124111],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,124114,124115],{},[1838,124116],{"alt":32,"src":124117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,124119,124120],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,124122,124123,124125],{},[673,124124,118249],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[498,124127,124129],{"id":124128},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,124131,124132],{},"（1）.查看所连接的主机USB接口的信息",[27,124134,124136],{"className":117581,"code":124135,"language":117583,"meta":32,"style":32},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[34,124137,124138,124168],{"__ignoreMap":32},[37,124139,124140,124142,124144,124147,124149,124151,124153,124155,124158,124161,124163,124166],{"class":39,"line":40},[37,124141,123888],{"class":2320},[37,124143,70157],{"class":185},[37,124145,124146],{"class":61}," -a",[37,124148,29558],{"class":61},[37,124150,28764],{"class":50},[37,124152,123888],{"class":2320},[37,124154,70157],{"class":185},[37,124156,124157],{"class":61}," -q",[37,124159,124160],{"class":185}," path",[37,124162,25457],{"class":61},[37,124164,124165],{"class":185}," \u002Fdev\u002FttyACM0",[37,124167,280],{"class":50},[37,124169,124170,124172,124174,124176,124178,124180,124182,124184,124186,124188,124190,124193],{"class":39,"line":47},[37,124171,123888],{"class":2320},[37,124173,70157],{"class":185},[37,124175,124146],{"class":61},[37,124177,29558],{"class":61},[37,124179,28764],{"class":50},[37,124181,123888],{"class":2320},[37,124183,70157],{"class":185},[37,124185,124157],{"class":61},[37,124187,124160],{"class":185},[37,124189,25457],{"class":61},[37,124191,124192],{"class":185}," \u002Fdev\u002FttyUSB0",[37,124194,280],{"class":50},[14,124196,124197],{},[1838,124198],{"alt":32,"src":124199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,124201,124202],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,124204,123617],{},[14,124206,123620,124207,123972],{},[34,124208,123623],{},[27,124210,124211],{"className":117581,"code":123627,"language":117583,"meta":32,"style":32},[34,124212,124213],{"__ignoreMap":32},[37,124214,124215,124217,124219],{"class":39,"line":40},[37,124216,24918],{"class":2320},[37,124218,118868],{"class":185},[37,124220,123638],{"class":185},[27,124222,124224],{"className":117581,"code":124223,"language":117583,"meta":32,"style":32},"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",[34,124225,124226,124254,124280],{"__ignoreMap":32},[37,124227,124228,124230,124232,124235,124237,124239,124241,124243,124246,124249,124251],{"class":39,"line":40},[37,124229,123651],{"class":50},[37,124231,55],{"class":54},[37,124233,124234],{"class":185},"=\"ttyACM*\",",[37,124236,123659],{"class":2320},[37,124238,123662],{"class":185},[37,124240,123691],{"class":2320},[37,124242,65],{"class":2320},[37,124244,124245],{"class":185}," ATTRS{idProduct}==\"55d4\",",[37,124247,124248],{"class":185}," ATTRS{serial}==\"0001\",",[37,124250,123673],{"class":185},[37,124252,124253],{"class":185}," SYMLINK+=\"ttyACM_MCU\"\n",[37,124255,124256,124258,124260,124262,124264,124266,124268,124270,124272,124275,124277],{"class":39,"line":47},[37,124257,123651],{"class":50},[37,124259,55],{"class":54},[37,124261,124234],{"class":185},[37,124263,123659],{"class":2320},[37,124265,123662],{"class":185},[37,124267,123691],{"class":2320},[37,124269,65],{"class":2320},[37,124271,124245],{"class":185},[37,124273,124274],{"class":185}," ATTRS{serial}==\"0002\",",[37,124276,123673],{"class":185},[37,124278,124279],{"class":185}," SYMLINK+=\"ttyACM_Lidar\"\n",[37,124281,124282,124284,124286,124288,124290,124292,124294,124296,124298,124300],{"class":39,"line":104},[37,124283,123651],{"class":50},[37,124285,55],{"class":54},[37,124287,123656],{"class":185},[37,124289,123659],{"class":2320},[37,124291,123662],{"class":185},[37,124293,123691],{"class":2320},[37,124295,65],{"class":2320},[37,124297,123696],{"class":185},[37,124299,123673],{"class":185},[37,124301,124302],{"class":185}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124304,123736],{},[14,124306,123739],{},[27,124308,124309],{"className":117581,"code":123742,"language":117583,"meta":32,"style":32},[34,124310,124311,124315,124325,124335,124339,124343,124353],{"__ignoreMap":32},[37,124312,124313],{"class":39,"line":40},[37,124314,123749],{"class":43},[37,124316,124317,124319,124321,124323],{"class":39,"line":47},[37,124318,24918],{"class":2320},[37,124320,120333],{"class":185},[37,124322,123758],{"class":185},[37,124324,123761],{"class":185},[37,124326,124327,124329,124331,124333],{"class":39,"line":104},[37,124328,24918],{"class":2320},[37,124330,120333],{"class":185},[37,124332,123758],{"class":185},[37,124334,123772],{"class":185},[37,124336,124337],{"class":39,"line":113},[37,124338,2757],{"emptyLinePlaceholder":454},[37,124340,124341],{"class":39,"line":189},[37,124342,123781],{"class":43},[37,124344,124345,124347,124349,124351],{"class":39,"line":195},[37,124346,24918],{"class":2320},[37,124348,123788],{"class":185},[37,124350,123791],{"class":185},[37,124352,123794],{"class":61},[37,124354,124355,124357,124359],{"class":39,"line":201},[37,124356,24918],{"class":2320},[37,124358,123788],{"class":185},[37,124360,123803],{"class":185},[14,124362,124363,124364],{},"再重新插拔设备即可，或者 ",[673,124365,124366],{},"直接重启系统。",[14,124368,123809],{},[14,124370,123812,124371,124112],{},[34,124372,124111],{},[14,124374,124375],{},[1838,124376],{"alt":32,"src":124377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124379,124120],{},[14,124381,124382,124384],{},[673,124383,118249],{}," 一些设备可能没有串口号等。",[498,124386,124388],{"id":124387},"_744-其他注意事项","7.4.4 其他注意事项",[14,124390,124391,124392,124394,124395,124398,124399,18751,124402,124405,124406,124408],{},"并非所有的USB设备端口号都是",[34,124393,123846],{},"的格式，比如Arduino的端口号可能是",[34,124396,124397],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[34,124400,124401],{},"videon",[34,124403,124404],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[34,124407,124401],{},"端口，绑定时需要关联的也是该接口。",[14,124410,124411,124412,124415,124416,124419,124420,124422,124423,124426,124427,124430,124431,124434,124435,124434,124438,124434,124441,28727],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[34,124413,124414],{},"KERNEL==\"ttyUSB*\"","修改为",[34,124417,124418],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[34,124421,124414],{},"修改为类似于",[34,124424,124425],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[34,124428,124429],{},"video[0,2,4,6]","表示可以绑定的端口为",[34,124432,124433],{},"video0","或",[34,124436,124437],{},"video2",[34,124439,124440],{},"video4",[34,124442,124443],{},"video6",[469,124445,124447],{"id":124446},"_75-挂载内网网页","7.5 挂载内网网页",[14,124449,124450],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124452,124453],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124455,124456],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124458,124459,124460],{},"Termux 下载地址（F-Droid）：",[51,124461,124462],{"href":124462,"rel":124463},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24206],[14,124465,124466],{},"首先打开app后，先更新软件缓存：",[27,124468,124470],{"className":117581,"code":124469,"language":117583,"meta":32,"style":32},"pkg update\n",[34,124471,124472],{"__ignoreMap":32},[37,124473,124474,124477],{"class":39,"line":40},[37,124475,124476],{"class":2320},"pkg",[37,124478,26584],{"class":185},[14,124480,124481],{},"然后换源",[27,124483,124485],{"className":117581,"code":124484,"language":117583,"meta":32,"style":32},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[34,124486,124487],{"__ignoreMap":32},[37,124488,124489,124491,124494],{"class":39,"line":40},[37,124490,123359],{"class":2320},[37,124492,124493],{"class":50}," $PREFIX",[37,124495,124496],{"class":185},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124498,124499],{},"将该文件内容替换为下面：",[27,124501,124503],{"className":117581,"code":124502,"language":117583,"meta":32,"style":32},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[34,124504,124505],{"__ignoreMap":32},[37,124506,124507,124510,124513,124516],{"class":39,"line":40},[37,124508,124509],{"class":2320},"deb",[37,124511,124512],{"class":185}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[37,124514,124515],{"class":185}," stable",[37,124517,124518],{"class":185}," main\n",[1515,124520,124521,124548],{},[484,124522,124523,124524,124526,124527],{},"如果你使用的是",[34,124525,123359],{},"编辑器：",[1515,124528,124529,124536,124542],{},[484,124530,124531,124532,124535],{},"按 ",[34,124533,124534],{},"Ctrl+O"," 保存文件。",[484,124537,124531,124538,124541],{},[34,124539,124540],{},"Enter"," 确认文件名。",[484,124543,124531,124544,124547],{},[34,124545,124546],{},"Ctrl+X"," 退出编辑器。",[484,124549,124523,124550,124526,124553],{},[34,124551,124552],{},"vim",[1515,124554,124555,124561],{},[484,124556,124531,124557,124560],{},[34,124558,124559],{},"Esc"," 退出编辑模式。",[484,124562,124563,124564,124566],{},"输入 ",[34,124565,119506],{}," 保存并退出。",[14,124568,124569],{},"接下来重新更新软件源：",[27,124571,124573],{"className":117581,"code":124572,"language":117583,"meta":32,"style":32},"pkg update && pkg upgrade\n",[34,124574,124575],{"__ignoreMap":32},[37,124576,124577,124579,124581,124583,124585],{"class":39,"line":40},[37,124578,124476],{"class":2320},[37,124580,117632],{"class":185},[37,124582,26532],{"class":50},[37,124584,124476],{"class":2320},[37,124586,117618],{"class":185},[14,124588,124589],{},"安装python：",[27,124591,124593],{"className":117581,"code":124592,"language":117583,"meta":32,"style":32},"pkg install python\n",[34,124594,124595],{"__ignoreMap":32},[37,124596,124597,124599,124601],{"class":39,"line":40},[37,124598,124476],{"class":2320},[37,124600,24175],{"class":185},[37,124602,124603],{"class":185}," python\n",[14,124605,124606,26815],{},[673,124607,124608],{},"通过Termux访问设备存储",[14,124610,124611],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[27,124613,124615],{"className":117581,"code":124614,"language":117583,"meta":32,"style":32},"termux-setup-storage\n",[34,124616,124617],{"__ignoreMap":32},[37,124618,124619],{"class":39,"line":40},[37,124620,124614],{"class":2320},[481,124622,124623],{},[484,124624,124625,26815,124628],{},[673,124626,124627],{},"进入HTML文件所在的目录",[481,124629,124630],{},[484,124631,124632,124633,124635],{},"使用",[34,124634,101561],{},"命令进入HTML文件所在的目录：",[27,124637,124639],{"className":117581,"code":124638,"language":117583,"meta":32,"style":32},"cd ~\u002Fyour_html_folder\n",[34,124640,124641],{"__ignoreMap":32},[37,124642,124643,124645],{"class":39,"line":40},[37,124644,101561],{"class":61},[37,124646,124647],{"class":185}," ~\u002Fyour_html_folder\n",[481,124649,124650],{"start":47},[484,124651,124652,26815,124655,124660,124677],{},[673,124653,124654],{},"启动Python HTTP服务器",[481,124656,124657],{},[484,124658,124659],{},"运行以下命令启动一个简单的HTTP服务器：",[27,124661,124663],{"className":117581,"code":124662,"language":117583,"meta":32,"style":32},"python -m http.server 8000\n",[34,124664,124665],{"__ignoreMap":32},[37,124666,124667,124669,124671,124674],{"class":39,"line":40},[37,124668,31],{"class":2320},[37,124670,101167],{"class":61},[37,124672,124673],{"class":185}," http.server",[37,124675,124676],{"class":61}," 8000\n",[481,124678,124679],{"start":104},[484,124680,124681,124682,124685],{},"这会在端口",[34,124683,124684],{},"8000","上启动一个Web服务器。",[1515,124687,124688],{},[484,124689,124690],{},"启动服务器后，Termux会显示日志信息，例如：",[27,124692,124694],{"className":121101,"code":124693,"language":121103,"meta":121104,"style":32},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[34,124695,124696],{"__ignoreMap":32},[37,124697,124698],{"class":39,"line":40},[37,124699,124693],{},[1515,124701,124702],{},[484,124703,124704],{},"这表示服务器已成功启动。",[14,124706,124707],{},[673,124708,124709],{},"在浏览器中访问HTML文件",[481,124711,124712],{},[484,124713,124714,26815,124717,124722],{},[673,124715,124716],{},"在同一设备上访问",[481,124718,124719],{},[484,124720,124721],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[27,124723,124726],{"className":124724,"code":124725,"language":72000,"meta":32,"style":32},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[34,124727,124728],{"__ignoreMap":32},[37,124729,124730,124733],{"class":39,"line":40},[37,124731,124732],{"class":50},"http:",[37,124734,124735],{"class":43},"\u002F\u002Flocalhost:8000\n",[1515,124737,124738],{},[484,124739,124740,124741,124744],{},"如果HTML文件中有",[34,124742,124743],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[469,124746,124748],{"id":124747},"_76-linux重点知识","7.6 Linux重点知识",[498,124750,124752],{"id":124751},"_761-关于点的说明","7.6.1 关于点的说明",[14,124754,124755],{},[1838,124756],{"alt":32,"src":124757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124759,124760],{},"一点本目录，两点上目录",[498,124762,124764],{"id":124763},"_762-目录","7.6.2 目录",[22339,124766,124768],{"id":124767},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124770,124771],{},[673,124772,124773],{},"\u002Fboot:",[14,124775,124776],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124778,124779],{},[673,124780,124781],{},"\u002Fetc:",[14,124783,124784],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124786,124787],{},[673,124788,124789],{},"\u002Flib：",[14,124791,124792],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124794,124795],{},[673,124796,124797],{},"\u002Fsys:",[14,124799,124800],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22339,124802,124804],{"id":124803},"_7622-指令集合","7.6.2.2 指令集合",[14,124806,124807],{},[673,124808,124809],{},"\u002Fbin:",[14,124811,124812],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124814,124815],{},[673,124816,124817],{},"\u002Fsbin:",[14,124819,124820],{},"只有系统管理员才能使用的程序和指令",[22339,124822,124824],{"id":124823},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124826,124827],{},[673,124828,124829],{},"\u002Fdev:",[14,124831,124832],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124834,124835],{},[673,124836,124837],{},"\u002Fmedia:",[14,124839,124840],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124842,124843],{},[673,124844,124845],{},"\u002Fmnt:",[14,124847,124848],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22339,124850,124852],{"id":124851},"_7624-临时文件","7.6.2.4 临时文件",[14,124854,124855],{},[673,124856,124857],{},"\u002Frun:",[14,124859,124860],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124862,124863],{},[673,124864,124865],{},"\u002Flost+found:",[14,124867,124868],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124870,124871],{},[673,124872,124873],{},"\u002Ftmp:",[14,124875,124876],{},"这个目录是用来存放一些临时文件的",[22339,124878,124880],{"id":124879},"_7625-账户","7.6.2.5 账户",[14,124882,124883],{},[673,124884,124885],{},"\u002Froot：",[14,124887,124888],{},"系统管理员的用户主目录",[14,124890,124891,26815],{},[673,124892,124893],{},"\u002Fhome",[14,124895,124896],{},"用户的主目录，以用户的账号命名的",[14,124898,124899,26815],{},[673,124900,124901],{},"\u002Fusr",[14,124903,124904],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124906,124907],{},[673,124908,124909],{},"\u002Fusr\u002Fbin：",[14,124911,124912],{},"系统用户使用的应用程序与指令",[14,124914,124915],{},[673,124916,124917],{},"\u002Fusr\u002Fsbin：",[14,124919,124920],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124922,124923],{},[673,124924,124925],{},"\u002Fusr\u002Fsrc：",[14,124927,124928],{},"内核源代码默认的放置目录",[22339,124930,124932],{"id":124931},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124934,124935],{},[673,124936,124937],{},"\u002Fvar：",[14,124939,124940],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124942,124943],{},[673,124944,124945],{},"\u002Fproc:",[14,124947,124948,124949,124952],{},"管理 ",[673,124950,124951],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22339,124954,124956],{"id":124955},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124958,124959],{},[673,124960,124961],{},"\u002Fopt:",[14,124963,124964],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124966,124967],{},[673,124968,124969],{},"\u002Fsrv:",[14,124971,124972],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[498,124974,124976],{"id":124975},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124978,124979],{},[1838,124980],{"alt":32,"src":124981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124983,124984],{},"windows-->linux:",[14,124986,124987],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124989,124990],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124992,124993],{},"linux传输文件到windows",[14,124995,124996],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[498,124998,125000],{"id":124999},"_764-易忘知识","7.6.4 易忘知识",[14,125002,125003],{},"操作系统内核查看",[27,125005,125006],{"className":117581,"code":121575,"language":117583,"meta":32,"style":32},[34,125007,125008],{"__ignoreMap":32},[37,125009,125010,125012],{"class":39,"line":40},[37,125011,70540],{"class":2320},[37,125013,121584],{"class":61},[14,125015,125016],{},[1838,125017],{"alt":32,"src":125018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,125020,125021],{},[1838,125022],{"alt":32,"src":125023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[27,125025,125027],{"className":117581,"code":125026,"language":117583,"meta":32,"style":32},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[34,125028,125029,125041],{"__ignoreMap":32},[37,125030,125031,125033,125036,125039],{"class":39,"line":40},[37,125032,121792],{"class":2320},[37,125034,125035],{"class":185}," mvtest",[37,125037,125038],{"class":185}," mvtest2",[37,125040,3024],{"class":50},[37,125042,125043],{"class":39,"line":47},[37,125044,125045],{"class":2320},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,125047,125048],{},[1838,125049],{"alt":32,"src":125050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,125052,125053],{},[1838,125054],{"alt":32,"src":125055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,125057,125058,125059,125062],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[34,125060,125061],{},"du -a"," 可以快速查看磁盘使用细节。",[498,125064,125066],{"id":125065},"_765-vim","7.6.5 Vim",[14,125068,125069],{},[1838,125070],{"alt":32,"src":125071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,125073,125074],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,125076,125077],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,125079,125080],{},[673,125081,125082],{},"1.命令模式：",[14,125084,125085],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,125087,125088],{},"x 删除当前光标所在处的字符",[14,125090,125091],{},"：切换到底线命令模式，以在最底一行输入命令",[14,125093,125094],{},"a 进行插入模式，在光标下一个位置输入文本",[14,125096,125097],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,125099,125100],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,125102,125103],{},"dd 剪切当前行",[14,125105,125106],{},"yy 复制当前行",[14,125108,125109],{},"p 粘贴剪贴板内容到光标下方",[14,125111,125112],{},"P 粘贴剪贴板内容到光标上方",[14,125114,125115],{},"u 撤销上一次操作",[14,125117,125118],{},"ctrl+r 重做上一次操作",[14,125120,125121,125123],{},[1304,125122],{}," 保存文件",[14,125125,125126,125128],{},[1155,125127],{}," 退出Vim编辑器",[14,125130,125131,125133],{},[1155,125132],{},"! 强制退出Vim编辑器，不保存修改",[14,125135,125136],{},[673,125137,125138],{},"2.输入模式：",[14,125140,125141],{},[1838,125142],{"alt":32,"src":125143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,125145,125146],{},[673,125147,125148],{},"3.底线命令模式：",[14,125150,125151],{},[1838,125152],{"alt":32,"src":125153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,125155,125156],{},"按下esc可以退出底线命令模式",[498,125158,125160],{"id":125159},"_766-apt","7.6.6 apt",[14,125162,125163],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[498,125165,125167],{"id":125166},"_767-home与root的区别","7.6.7 home与root的区别",[14,125169,125170],{},[1838,125171],{"alt":32,"src":125172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,125174,125175],{},[1838,125176],{"alt":32,"src":125177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,125179,125180],{},[1838,125181],{"alt":32,"src":125182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,125184,125185],{},[1838,125186],{"alt":32,"src":125187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[498,125189,125191],{"id":125190},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,125193,125194],{},[51,125195,125196],{"href":125196,"rel":125197},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24206],[481,125199,125200,125203],{},[484,125201,125202],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[484,125204,125205],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,125207,125208],{},[1838,125209],{"alt":32,"src":125210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,125212,125213],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,125215,125216],{},[1838,125217],{"alt":32,"src":125218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[27,125220,125222],{"className":121101,"code":125221,"language":121103,"meta":121104,"style":32},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[34,125223,125224,125229],{"__ignoreMap":32},[37,125225,125226],{"class":39,"line":40},[37,125227,125228],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[37,125230,125231],{"class":39,"line":47},[37,125232,125233],{},".\u002Fpycharm.sh\n",[14,125235,125236],{},"3️⃣创建.desktop文件",[14,125238,125239],{},[673,125240,125241],{},"原理：",[1515,125243,125244,125254],{},[484,125245,125246,125247,125253],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[673,125248,125249,125252],{},[34,125250,125251],{},".desktop"," 文件"," 来识别应用。",[484,125255,125256,125258,125259],{},[34,125257,125251],{}," 文件相当于一个“应用注册表”，告诉系统：",[1515,125260,125261,125264,125267,125270,125273],{},[484,125262,125263],{},"应用名字（Name）",[484,125265,125266],{},"图标（Icon）",[484,125268,125269],{},"执行命令（Exec）",[484,125271,125272],{},"分类（Categories）",[484,125274,125275],{},"是否需要终端（Terminal）",[27,125277,125279],{"className":121101,"code":125278,"language":121103,"meta":121104,"style":32},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[34,125280,125281,125286],{"__ignoreMap":32},[37,125282,125283],{"class":39,"line":40},[37,125284,125285],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[37,125287,125288],{"class":39,"line":47},[37,125289,125290],{},"nano pycharm.desktop\n",[14,125292,125293],{},"nano是一个命令行下的编辑器，也可以使用vim",[27,125295,125297],{"className":121101,"code":125296,"language":121103,"meta":121104,"style":32},"[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",[34,125298,125299,125304,125309,125314,125319,125324,125329,125334,125339,125344],{"__ignoreMap":32},[37,125300,125301],{"class":39,"line":40},[37,125302,125303],{},"[Desktop Entry]\n",[37,125305,125306],{"class":39,"line":47},[37,125307,125308],{},"Version=1.0\n",[37,125310,125311],{"class":39,"line":104},[37,125312,125313],{},"Type=Application\n",[37,125315,125316],{"class":39,"line":113},[37,125317,125318],{},"Name=PyCharm\n",[37,125320,125321],{"class":39,"line":189},[37,125322,125323],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[37,125325,125326],{"class":39,"line":195},[37,125327,125328],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[37,125330,125331],{"class":39,"line":201},[37,125332,125333],{},"Comment=JetBrains PyCharm IDE\n",[37,125335,125336],{"class":39,"line":207},[37,125337,125338],{},"Categories=Development;IDE;\n",[37,125340,125341],{"class":39,"line":213},[37,125342,125343],{},"Terminal=false\n",[37,125345,125346],{"class":39,"line":218},[37,125347,125348],{},"StartupWMClass=jetbrains-pycharm\n",[1515,125350,125351,125357,125363,125369],{},[484,125352,125353,125356],{},[34,125354,125355],{},"Exec"," → 点击图标时执行的命令",[484,125358,125359,125362],{},[34,125360,125361],{},"Icon"," → 显示在菜单和桌面上的图标",[484,125364,125365,125368],{},[34,125366,125367],{},"Terminal=false"," → 不打开终端",[484,125370,125371,125374],{},[34,125372,125373],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125376,125377,125378],"blockquote",{},[14,125379,125380,125381,125383,125384],{},"可以理解成 ",[34,125382,125251],{}," 文件是 Linux 的 ",[673,125385,125386],{},"快捷方式配置文件",[14,125388,125389],{},"4️⃣设置可执行权限",[27,125391,125393],{"className":121101,"code":125392,"language":121103,"meta":121104,"style":32},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[34,125394,125395],{"__ignoreMap":32},[37,125396,125397],{"class":39,"line":40},[37,125398,125392],{},[14,125400,125401],{},"5️⃣桌面图标启动的话如下：",[27,125403,125405],{"className":121101,"code":125404,"language":121103,"meta":121104,"style":32},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[34,125406,125407,125412],{"__ignoreMap":32},[37,125408,125409],{"class":39,"line":40},[37,125410,125411],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[37,125413,125414],{"class":39,"line":47},[37,125415,125416],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[481,125418,125419],{"start":104},[484,125420,125421],{},"下载Appimage文件实现软件的安装",[14,125423,125424],{},"1️⃣先下载appimage",[14,125426,125427],{},[51,125428,125429],{"href":125429,"rel":125430},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24206],[14,125432,125433],{},[1838,125434],{"alt":32,"src":125435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125437,125438],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125440,125441],{},[1838,125442],{"alt":32,"src":125443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125445,125446],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125448,125449],{},[1838,125450],{"alt":32,"src":125451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125453,125454],{},[1838,125455],{"alt":32,"src":125456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125458,125459,125460,125463],{},"3️⃣给他们放在",[34,125461,125462],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125465,125466],{},"4️⃣给软件执行权限",[27,125468,125470],{"className":121101,"code":125469,"language":121103,"meta":121104,"style":32},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[34,125471,125472,125477],{"__ignoreMap":32},[37,125473,125474],{"class":39,"line":40},[37,125475,125476],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[37,125478,125479],{"class":39,"line":47},[37,125480,125481],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125483,125484],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[27,125486,125488],{"className":117581,"code":125487,"language":117583,"meta":32,"style":32},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[34,125489,125490,125497,125504,125510],{"__ignoreMap":32},[37,125491,125492,125494],{"class":39,"line":40},[37,125493,101561],{"class":61},[37,125495,125496],{"class":185}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[37,125498,125499,125501],{"class":39,"line":47},[37,125500,101568],{"class":2320},[37,125502,125503],{"class":185}," .\u002Fqqmusic.desktop\n",[37,125505,125506,125508],{"class":39,"line":104},[37,125507,124552],{"class":2320},[37,125509,125503],{"class":185},[37,125511,125512,125514,125516,125518],{"class":39,"line":113},[37,125513,24918],{"class":2320},[37,125515,24921],{"class":185},[37,125517,123418],{"class":185},[37,125519,125503],{"class":185},[14,125521,125522,125524],{},[34,125523,101568],{},"：一个 Linux 命令，主要功能是：",[1515,125526,125527,125530],{},[484,125528,125529],{},"如果文件不存在，就创建一个新的空文件",[484,125531,125532],{},"如果文件已存在，就更新该文件的最后修改时间",[27,125534,125536],{"className":121101,"code":125535,"language":121103,"meta":121104,"style":32},"[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",[34,125537,125538,125542,125547,125552,125557,125561,125566],{"__ignoreMap":32},[37,125539,125540],{"class":39,"line":40},[37,125541,125303],{},[37,125543,125544],{"class":39,"line":47},[37,125545,125546],{},"Name=QQ音乐\n",[37,125548,125549],{"class":39,"line":104},[37,125550,125551],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[37,125553,125554],{"class":39,"line":113},[37,125555,125556],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[37,125558,125559],{"class":39,"line":189},[37,125560,125313],{},[37,125562,125563],{"class":39,"line":195},[37,125564,125565],{},"Categories=Audio;Music;Player;\n",[37,125567,125568],{"class":39,"line":201},[37,125569,125570],{},"Comment=QQ Music Client for Linux\n",[14,125572,125573],{},"将文件复制进去",[14,125575,125576],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125578,125579],{},[1838,125580],{"alt":32,"src":125581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125583,125584],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125586,125587],{},[1838,125588],{"alt":32,"src":125589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125591,125592,125593,125596,125597,125600],{},"如果你用的不是KDE，那么也可以直接修改",[34,125594,125595],{},"qqmuic.desktop","：在exec的末尾加上",[34,125598,125599],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[27,125602,125604],{"className":121101,"code":125603,"language":121103,"meta":121104,"style":32},"[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",[34,125605,125606,125610,125614,125619,125623,125627,125631],{"__ignoreMap":32},[37,125607,125608],{"class":39,"line":40},[37,125609,125303],{},[37,125611,125612],{"class":39,"line":47},[37,125613,125546],{},[37,125615,125616],{"class":39,"line":104},[37,125617,125618],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[37,125620,125621],{"class":39,"line":113},[37,125622,125556],{},[37,125624,125625],{"class":39,"line":189},[37,125626,125313],{},[37,125628,125629],{"class":39,"line":195},[37,125630,125565],{},[37,125632,125633],{"class":39,"line":201},[37,125634,125570],{},[14,125636,125637],{},[1838,125638],{"alt":32,"src":125639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125641,125642],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[27,125644,125646],{"className":121101,"code":125645,"language":121103,"meta":121104,"style":32},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[34,125647,125648],{"__ignoreMap":32},[37,125649,125650],{"class":39,"line":40},[37,125651,125645],{},[481,125653,125654],{"start":113},[484,125655,125656],{},"去Flathub上安装软件",[14,125658,125659],{},[51,125660,125661],{"href":125661,"rel":125662},"https:\u002F\u002Fflathub.org\u002F",[24206],[14,125664,125665],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125667,125668],{},[1838,125669],{"alt":32,"src":125670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[27,125672,125674],{"className":121101,"code":125673,"language":121103,"meta":121104,"style":32},"flatpak install flathub com.obsproject.Studio\n",[34,125675,125676],{"__ignoreMap":32},[37,125677,125678],{"class":39,"line":40},[37,125679,125673],{},[14,125681,125682],{},[1838,125683],{"alt":32,"src":125684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125686,125687],{},"2️⃣运行软件",[14,125689,125690],{},"a.官方方式：",[14,125692,125693],{},[1838,125694],{"alt":32,"src":125695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[27,125697,125698],{"className":121101,"code":125673,"language":121103,"meta":121104,"style":32},[34,125699,125700],{"__ignoreMap":32},[37,125701,125702],{"class":39,"line":40},[37,125703,125673],{},[14,125705,125706],{},"b.当普通软件运行：",[14,125708,125709],{},[1838,125710],{"alt":32,"src":125711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125713,125714],{},[1838,125715],{"alt":32,"src":125716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[446,125718,125719],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":32,"searchDepth":47,"depth":47,"links":125721},[125722,125723,125728,125729,125735,125736],{"id":122454,"depth":47,"text":122455},{"id":122796,"depth":47,"text":122797,"children":125724},[125725,125726,125727],{"id":122800,"depth":104,"text":122801},{"id":122867,"depth":104,"text":122868},{"id":123128,"depth":104,"text":123129},{"id":123281,"depth":47,"text":123282},{"id":123519,"depth":47,"text":123520,"children":125730},[125731,125732,125733,125734],{"id":123571,"depth":104,"text":123572},{"id":123857,"depth":104,"text":123858},{"id":124128,"depth":104,"text":124129},{"id":124387,"depth":104,"text":124388},{"id":124446,"depth":47,"text":124447},{"id":124747,"depth":47,"text":124748,"children":125737},[125738,125739,125740,125741,125742,125743,125744,125745],{"id":124751,"depth":104,"text":124752},{"id":124763,"depth":104,"text":124764},{"id":124975,"depth":104,"text":124976},{"id":124999,"depth":104,"text":125000},{"id":125065,"depth":104,"text":125066},{"id":125159,"depth":104,"text":125160},{"id":125166,"depth":104,"text":125167},{"id":125190,"depth":104,"text":125191},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122446,"description":451},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125752,"title":125753,"body":125754,"description":451,"extension":452,"meta":125758,"navigation":454,"path":125759,"seo":125760,"stem":125761,"__hash__":125762},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125755,"toc":125756},[],{"title":32,"searchDepth":47,"depth":47,"links":125757},[],{"category":30605},"\u002Fwiki\u002F2025-01-27-linux",{"title":125753,"description":451},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125764,"title":125765,"body":125766,"description":125770,"extension":452,"meta":126161,"navigation":454,"path":126162,"seo":126163,"stem":126164,"__hash__":126165},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125767,"toc":126159},[125768,125771,125775,125792,125795,125848,125852,125854,125894,125903,125907,125910,126151,126156],[14,125769,125770],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125772,125774],{"id":125773},"_1ubuntu环境配置","1.Ubuntu环境配置",[481,125776,125777,125780,125783,125786,125789],{},[484,125778,125779],{},"ubuntu环境换源",[484,125781,125782],{},"安装cuda",[484,125784,125785],{},"安装miniconda",[484,125787,125788],{},"安装pytorch",[484,125790,125791],{},"安装genesis",[14,125793,125794],{},"参考链接：",[27,125796,125798],{"className":24163,"code":125797,"language":24165,"meta":32,"style":32},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[34,125799,125800],{"__ignoreMap":32},[37,125801,125802,125805,125808,125811,125813,125816,125819,125821,125824,125827,125829,125832,125835,125837,125840,125843,125845],{"class":39,"line":40},[37,125803,125804],{"class":2320},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[37,125806,125807],{"class":185},"=blogdetail",[37,125809,125810],{"class":50},"&sharetype",[37,125812,55],{"class":54},[37,125814,125815],{"class":185},"blogdetail",[37,125817,125818],{"class":50},"&sharerId",[37,125820,55],{"class":54},[37,125822,125823],{"class":185},"144728092",[37,125825,125826],{"class":50},"&sharerefer",[37,125828,55],{"class":54},[37,125830,125831],{"class":185},"PC",[37,125833,125834],{"class":50},"&sharesource",[37,125836,55],{"class":54},[37,125838,125839],{"class":185},"qq_69379513",[37,125841,125842],{"class":50},"&sharefrom",[37,125844,55],{"class":54},[37,125846,125847],{"class":185},"from_link\n",[10,125849,125851],{"id":125850},"_2genesis-报错issue","2.Genesis 报错issue",[14,125853,125794],{},[27,125855,125856],{"className":24163,"code":125797,"language":24165,"meta":32,"style":32},[34,125857,125858],{"__ignoreMap":32},[37,125859,125860,125862,125864,125866,125868,125870,125872,125874,125876,125878,125880,125882,125884,125886,125888,125890,125892],{"class":39,"line":40},[37,125861,125804],{"class":2320},[37,125863,125807],{"class":185},[37,125865,125810],{"class":50},[37,125867,55],{"class":54},[37,125869,125815],{"class":185},[37,125871,125818],{"class":50},[37,125873,55],{"class":54},[37,125875,125823],{"class":185},[37,125877,125826],{"class":50},[37,125879,55],{"class":54},[37,125881,125831],{"class":185},[37,125883,125834],{"class":50},[37,125885,55],{"class":54},[37,125887,125839],{"class":185},[37,125889,125842],{"class":50},[37,125891,55],{"class":54},[37,125893,125847],{"class":185},[27,125895,125897],{"className":24163,"code":125896,"language":24165,"meta":32,"style":32},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[34,125898,125899],{"__ignoreMap":32},[37,125900,125901],{"class":39,"line":40},[37,125902,125896],{"class":2320},[10,125904,125906],{"id":125905},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125908,125909],{},"hello_robot.py",[27,125911,125913],{"className":29,"code":125912,"language":31,"meta":32,"style":32},"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",[34,125914,125915,125921,125936,125940,125952,125964,125968,125981,125985,126004,126014,126024,126038,126042,126046,126051,126055,126065,126072,126086,126093,126103,126108,126112,126130,126135,126139,126146],{"__ignoreMap":32},[37,125916,125917,125919],{"class":39,"line":40},[37,125918,30732],{"class":54},[37,125920,45642],{"class":50},[37,125922,125923,125926,125929,125931,125933],{"class":39,"line":47},[37,125924,125925],{"class":50},"os.environ[",[37,125927,125928],{"class":185},"'PYOPENGL_PLATFORM'",[37,125930,4793],{"class":50},[37,125932,55],{"class":54},[37,125934,125935],{"class":185}," 'glx'\n",[37,125937,125938],{"class":39,"line":104},[37,125939,2757],{"emptyLinePlaceholder":454},[37,125941,125942,125944,125947,125949],{"class":39,"line":113},[37,125943,30732],{"class":54},[37,125945,125946],{"class":50}," genesis ",[37,125948,31722],{"class":54},[37,125950,125951],{"class":50}," gs\n",[37,125953,125954,125956,125959,125961],{"class":39,"line":189},[37,125955,31076],{"class":54},[37,125957,125958],{"class":50}," pynput ",[37,125960,30732],{"class":54},[37,125962,125963],{"class":50}," keyboard\n",[37,125965,125966],{"class":39,"line":195},[37,125967,2757],{"emptyLinePlaceholder":454},[37,125969,125970,125973,125976,125978],{"class":39,"line":201},[37,125971,125972],{"class":50},"gs.init(",[37,125974,125975],{"class":159},"backend",[37,125977,55],{"class":54},[37,125979,125980],{"class":50},"gs.gpu)\n",[37,125982,125983],{"class":39,"line":207},[37,125984,2757],{"emptyLinePlaceholder":454},[37,125986,125987,125990,125992,125995,125998,126000,126002],{"class":39,"line":213},[37,125988,125989],{"class":50},"scene ",[37,125991,55],{"class":54},[37,125993,125994],{"class":50}," gs.Scene(",[37,125996,125997],{"class":159},"show_viewer",[37,125999,55],{"class":54},[37,126001,31815],{"class":61},[37,126003,280],{"class":50},[37,126005,126006,126009,126011],{"class":39,"line":218},[37,126007,126008],{"class":50},"plane ",[37,126010,55],{"class":54},[37,126012,126013],{"class":50}," scene.add_entity(gs.morphs.Plane())\n",[37,126015,126016,126019,126021],{"class":39,"line":227},[37,126017,126018],{"class":50},"franka ",[37,126020,55],{"class":54},[37,126022,126023],{"class":50}," scene.add_entity(\n",[37,126025,126026,126029,126031,126033,126036],{"class":39,"line":232},[37,126027,126028],{"class":50},"    gs.morphs.MJCF(",[37,126030,45691],{"class":159},[37,126032,55],{"class":54},[37,126034,126035],{"class":185},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[37,126037,38384],{"class":50},[37,126039,126040],{"class":39,"line":238},[37,126041,280],{"class":50},[37,126043,126044],{"class":39,"line":244},[37,126045,2757],{"emptyLinePlaceholder":454},[37,126047,126048],{"class":39,"line":250},[37,126049,126050],{"class":50},"scene.build()\n",[37,126052,126053],{"class":39,"line":256},[37,126054,2757],{"emptyLinePlaceholder":454},[37,126056,126057,126059,126062],{"class":39,"line":261},[37,126058,32285],{"class":54},[37,126060,126061],{"class":2320}," on_press",[37,126063,126064],{"class":50},"(key):\n",[37,126066,126067,126070],{"class":39,"line":267},[37,126068,126069],{"class":54},"    try",[37,126071,4089],{"class":50},[37,126073,126074,126076,126079,126081,126084],{"class":39,"line":283},[37,126075,2854],{"class":54},[37,126077,126078],{"class":50}," key.char ",[37,126080,3299],{"class":54},[37,126082,126083],{"class":185}," 'q'",[37,126085,4089],{"class":50},[37,126087,126088,126090],{"class":39,"line":288},[37,126089,16073],{"class":54},[37,126091,126092],{"class":61}," False\n",[37,126094,126095,126098,126101],{"class":39,"line":294},[37,126096,126097],{"class":54},"    except",[37,126099,126100],{"class":61}," AttributeError",[37,126102,4089],{"class":50},[37,126104,126105],{"class":39,"line":300},[37,126106,126107],{"class":54},"        pass\n",[37,126109,126110],{"class":39,"line":306},[37,126111,2757],{"emptyLinePlaceholder":454},[37,126113,126114,126117,126119,126122,126125,126127],{"class":39,"line":312},[37,126115,126116],{"class":50},"listener ",[37,126118,55],{"class":54},[37,126120,126121],{"class":50}," keyboard.Listener(",[37,126123,126124],{"class":159},"on_press",[37,126126,55],{"class":54},[37,126128,126129],{"class":50},"on_press)\n",[37,126131,126132],{"class":39,"line":317},[37,126133,126134],{"class":50},"listener.start()\n",[37,126136,126137],{"class":39,"line":323},[37,126138,2757],{"emptyLinePlaceholder":454},[37,126140,126141,126143],{"class":39,"line":337},[37,126142,108948],{"class":54},[37,126144,126145],{"class":50}," listener.running:\n",[37,126147,126148],{"class":39,"line":342},[37,126149,126150],{"class":50},"    scene.step()\n",[14,126152,126153],{},[1838,126154],{"alt":32,"src":126155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[446,126157,126158],{},"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":32,"searchDepth":47,"depth":47,"links":126160},[],{"category":23719},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125765,"description":125770},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126167,"title":126168,"body":126169,"description":451,"extension":452,"meta":126184,"navigation":454,"path":126185,"seo":126186,"stem":126187,"__hash__":126188},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126170,"toc":126181},[126171,126174,126178],[10,126172,126168],{"id":126173},"_1-基础知识",[469,126175,126177],{"id":126176},"_11-js的组成","1.1 js的组成",[14,126179,126180],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":32,"searchDepth":47,"depth":47,"links":126182},[126183],{"id":126176,"depth":47,"text":126177},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126168,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126190,"title":126191,"body":126192,"description":451,"extension":452,"meta":126331,"navigation":454,"path":126332,"seo":126333,"stem":126334,"__hash__":126335},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126193,"toc":126319},[126194,126197,126201,126204,126208,126218,126222,126225,126228,126231,126235,126242,126248,126252,126258,126269,126273,126276,126280,126283,126287,126290,126294,126297,126301,126304,126307,126310,126313,126316],[10,126195,126191],{"id":126196},"_2-vscode必备内容",[469,126198,126200],{"id":126199},"_21-标签分类","2.1 标签分类",[14,126202,126203],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[469,126205,126207],{"id":126206},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,126209,126210,126211,126213,126214,126217],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[34,126212,748],{}," 然后按 ",[34,126215,126216],{},"Tab","，快速自动生成基本结构。",[469,126219,126221],{"id":126220},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,126223,126224],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,126226,126227],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,126229,126230],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[469,126232,126234],{"id":126233},"_24-视图缩放","2.4 视图缩放",[14,126236,126237,126238,126241],{},"缩放视图 ",[34,126239,126240],{},"ctrl+"," 可实现代码增大。",[14,126243,126244,126247],{},[34,126245,126246],{},"ctrl-"," 可实现代码减小。",[469,126249,126251],{"id":126250},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126253,126254,126255,28727],{},"VSCode 新建文件快捷键为 ",[34,126256,126257],{},"ctrl+N",[14,126259,126260,126261,126264,126265,126268],{},"保存快捷键为 ",[34,126262,126263],{},"ctrl+S","，将文本保存为 ",[34,126266,126267],{},".html"," 文件。",[469,126270,126272],{"id":126271},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126274,126275],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[469,126277,126279],{"id":126278},"_27-vscode-icons","2.7 vscode-icons",[14,126281,126282],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[469,126284,126286],{"id":126285},"_28-easy-less","2.8 Easy LESS",[14,126288,126289],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[469,126291,126293],{"id":126292},"_29-会了吧插件","2.9 会了吧插件",[14,126295,126296],{},"会了吧插件可以展示代码中英语单词的意思。",[469,126298,126300],{"id":126299},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126302,126303],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126305,126306],{},"②选定多个相同的单词:ctrl+D",[14,126308,126309],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126311,126312],{},"④全局替换某些单词:ctrl+h",[14,126314,126315],{},"⑤快速定位到某一行:ctrl+g",[14,126317,126318],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":32,"searchDepth":47,"depth":47,"links":126320},[126321,126322,126323,126324,126325,126326,126327,126328,126329,126330],{"id":126199,"depth":47,"text":126200},{"id":126206,"depth":47,"text":126207},{"id":126220,"depth":47,"text":126221},{"id":126233,"depth":47,"text":126234},{"id":126250,"depth":47,"text":126251},{"id":126271,"depth":47,"text":126272},{"id":126278,"depth":47,"text":126279},{"id":126285,"depth":47,"text":126286},{"id":126292,"depth":47,"text":126293},{"id":126299,"depth":47,"text":126300},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126191,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126337,"title":126338,"body":126339,"description":451,"extension":452,"meta":126498,"navigation":454,"path":126499,"seo":126500,"stem":126501,"__hash__":126502},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126340,"toc":126490},[126341,126344,126348,126358,126364,126370,126374,126383,126387,126392,126395,126398,126402,126405,126415,126424,126433,126442,126452,126459,126464,126469,126482],[10,126342,126338],{"id":126343},"_3-html文本与容器标签",[469,126345,126347],{"id":126346},"_31-标题标签","3.1 标题标签",[14,126349,126350,126353,126354,126357],{},[34,126351,126352],{},"\u003Ch1>","我是一级标签",[34,126355,126356],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126359,126360,126353,126362],{},[34,126361,126352],{},[34,126363,126356],{},[14,126365,123620,126366,126369],{},[34,126367,126368],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[469,126371,126373],{"id":126372},"_32-段落标签","3.2 段落标签",[14,126375,126376,126379,126380],{},[34,126377,126378],{},"\u003Cp>","....",[34,126381,126382],{},"\u003C\u002Fp>",[469,126384,126386],{"id":126385},"_33-换行标签","3.3 换行标签",[14,126388,126389],{},[34,126390,126391],{},"\u003Cbr \u002F>",[14,126393,126394],{},"具有强制换行的作用",[14,126396,126397],{},"单标签",[469,126399,126401],{"id":126400},"_34-文本格式化标签","3.4 文本格式化标签",[14,126403,126404],{},"提供粗体、斜体和下划线等效果",[14,126406,126407,126408,82874,126411,126414],{},"加粗：",[34,126409,126410],{},"\u003Cstrong>...\u003C\u002Fstrong>",[34,126412,126413],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126416,126417,126418,82874,126421,126414],{},"斜体：",[34,126419,126420],{},"\u003Cem>...\u003C\u002Fem>",[34,126422,126423],{},"\u003Ci>...\u003C\u002Fi>",[14,126425,126426,126427,82874,126430,126414],{},"删除线：",[34,126428,126429],{},"\u003Cdel>...\u003C\u002Fdel>",[34,126431,126432],{},"\u003Cs>...\u003C\u002Fs>",[14,126434,126435,126436,82874,126439,126414],{},"下划线：",[34,126437,126438],{},"\u003Cins>...\u003C\u002Fins>",[34,126440,126441],{},"\u003Cu>...\u003C\u002Fu>",[469,126443,126445,126446,18751,126449,102978],{"id":126444},"_35-div和span标签","3.5 ",[34,126447,126448],{},"\u003Cdiv>",[34,126450,126451],{},"\u003Cspan>",[14,126453,126454,101303,126456,126458],{},[34,126455,126448],{},[34,126457,126451],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126460,126461],{},[34,126462,126463],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126465,126466],{},[34,126467,126468],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126470,126471,126472,126474,126475,126477,126478,126481],{},"两者特点：①",[34,126473,126448],{}," 标签用来布局，但一行通常只放一个 ",[34,126476,126448],{},"。可以理解为一个大盒子，独占一行，在 ",[34,126479,126480],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126483,77584,126484,126486,126487,126489],{},[34,126485,126451],{}," 标签也可用于布局，一行可以放多个 ",[34,126488,126451],{},"，可理解为小盒子。",{"title":32,"searchDepth":47,"depth":47,"links":126491},[126492,126493,126494,126495,126496],{"id":126346,"depth":47,"text":126347},{"id":126372,"depth":47,"text":126373},{"id":126385,"depth":47,"text":126386},{"id":126400,"depth":47,"text":126401},{"id":126444,"depth":47,"text":126497},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126338,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126504,"title":126505,"body":126506,"description":451,"extension":452,"meta":126703,"navigation":454,"path":126704,"seo":126705,"stem":126706,"__hash__":126707},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126507,"toc":126695},[126508,126511,126515,126518,126524,126531,126537,126543,126546,126549,126552,126555,126558,126561,126564,126568,126571,126574,126577,126583,126589,126595,126602,126606,126612,126618,126621,126624,126630,126636,126642,126645,126648,126652,126655,126665,126671,126675,126684,126688,126691],[10,126509,126505],{"id":126510},"_4-html图像与链接",[469,126512,126514],{"id":126513},"_41-图像标签","4.1 图像标签",[14,126516,126517],{},"（1）标签",[14,126519,126520,126523],{},[34,126521,126522],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126525,126526,126527,126530],{},"src是",[34,126528,126529],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126532,126533,126534],{},"alt:文本，替换文本。图像不能显示的文字 ",[34,126535,126536],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126538,126539,126540],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[34,126541,126542],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126544,126545],{},"width:像素，设置图像的宽度",[14,126547,126548],{},"height:像素，设置图像的高度",[14,126550,126551],{},"border：像素，设置图像的边框粗细",[14,126553,126554],{},"（2）图像标签属性的注意点：",[14,126556,126557],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126559,126560],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126562,126563],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[469,126565,126567],{"id":126566},"_42-路径注意要点","4.2 路径注意要点：",[14,126569,126570],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126572,126573],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126575,126576],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126578,126579,126580],{},"①同一级路径：图像文件位于HTML文件同一级，如",[34,126581,126582],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126584,126585,126586],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[34,126587,126588],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126590,126591,126592],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[34,126593,126594],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126596,126597,126598,772],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[51,126599,126600],{"href":126600,"rel":126601},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24206],[469,126603,126605],{"id":126604},"_43-超链接标签","4.3 超链接标签",[14,126607,126608,126611],{},[34,126609,126610],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126613,126614,126615],{},"①语法格式：",[34,126616,126617],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126619,126620],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126622,126623],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126625,126626,126627],{},"③链接分类：外部链接：",[34,126628,126629],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126631,126632,126633],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[34,126634,126635],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126637,126638,126639],{},"空链接：如果当时没有确定链接目标时，",[34,126640,126641],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126643,126644],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126646,126647],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[469,126649,126651],{"id":126650},"_44-锚点链接","4.4 锚点链接",[14,126653,126654],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126656,126657,126658,126661,126662],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[34,126659,126660],{},"\u003Ca href=\"#two\">","第二级",[34,126663,126664],{},"\u003C\u002Fa>",[14,126666,126667,126668],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[34,126669,126670],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[469,126672,126674],{"id":126673},"_45-注释标签","4.5 注释标签",[14,126676,126677,126680,126681],{},[34,126678,126679],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[34,126682,126683],{},"ctrl+\u002F",[469,126685,126687],{"id":126686},"_46-特殊字符","4.6 特殊字符",[14,126689,126690],{},"可以实现添加多个空格",[1838,126692],{"style":126693,"src":126694},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":32,"searchDepth":47,"depth":47,"links":126696},[126697,126698,126699,126700,126701,126702],{"id":126513,"depth":47,"text":126514},{"id":126566,"depth":47,"text":126567},{"id":126604,"depth":47,"text":126605},{"id":126650,"depth":47,"text":126651},{"id":126673,"depth":47,"text":126674},{"id":126686,"depth":47,"text":126687},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126505,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126709,"title":126710,"body":126711,"description":451,"extension":452,"meta":127004,"navigation":454,"path":127005,"seo":127006,"stem":127007,"__hash__":127008},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126712,"toc":126995},[126713,126716,126720,126723,126726,126729,126732,126735,126738,126741,126744,126747,126767,126773,126777,126780,126783,126786,126789,126792,126795,126799,126802,126805,126808,126811,126824,126829,126832,126835,126850,126853,126856,126859,126862,126865,126869,126872,126879,126882,126885,126888,126891,126894,126900,126903,126906,126912,126915,126918,126921,126927,126930,126933,126947,126954,126957,126960,126967,126976,126979,126982,126985,126989,126992],[10,126714,126710],{"id":126715},"_5-html表格列表与表单",[469,126717,126719],{"id":126718},"_51-表格标签","5.1 表格标签",[14,126721,126722],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126724,126725],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126727,126728],{},"②表格基本语法：",[1838,126730],{"style":126693,"src":126731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126733,126734],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1838,126736],{"style":126693,"src":126737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126739,126740],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1838,126742],{"style":126693,"src":126743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126745,126746],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126748,126749,126752,126753,126755,126756,126759,126760,126762,126763,126766],{},[34,126750,126751],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[34,126754,126751],{},"内部必须拥有",[34,126757,126758],{},"\u003Ctr>","标签，一般位于第一行，",[34,126761,126751],{},"比",[34,126764,126765],{},"\u003Cth>","范围广",[14,126768,126769,126772],{},[34,126770,126771],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[469,126774,126776],{"id":126775},"_52-合并单元格","5.2 合并单元格",[14,126778,126779],{},"（1）合并单元格方式：",[14,126781,126782],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126784,126785],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126787,126788],{},"（2）目标单元格：",[14,126790,126791],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126793,126794],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[469,126796,126798],{"id":126797},"_53-列表标签","5.3 列表标签",[14,126800,126801],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126803,126804],{},"①无序列表：",[1838,126806],{"style":126693,"src":126807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126809,126810],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126812,126813,126816,126817,126820,126821,126823],{},[34,126814,126815],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[34,126818,126819],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[34,126822,126815],{},"中输入其他标签或文字是不对的",[14,126825,126826,126828],{},[34,126827,126819],{},"之间相当于一个容器，可以容纳所有元素",[14,126830,126831],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126833,126834],{},"在css中去除前边的小圆点采用如下代码:",[27,126836,126840],{"className":126837,"code":126838,"language":126839,"meta":32,"style":32},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[34,126841,126842],{"__ignoreMap":32},[37,126843,126844,126847],{"class":39,"line":40},[37,126845,126846],{"class":51636},"list-style",[37,126848,126849],{"class":50},": none;\n",[14,126851,126852],{},"②有序列表：",[1838,126854],{"style":126693,"src":126855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126857,126858],{},"③自定义列表：",[1838,126860],{"style":126693,"src":126861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1838,126863],{"style":126693,"src":126864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[469,126866,126868],{"id":126867},"_54-表单标签","5.4 表单标签",[14,126870,126871],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126873,126874,126875,126878],{},"（1）表单域：包含单元素的区域，",[34,126876,126877],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1838,126880],{"style":126693,"src":126881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126883,126884],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126886,126887],{},"表单元素提交必须有name属性",[14,126889,126890],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126892,126893],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126895,77561,126896,126899],{},[34,126897,126898],{},"\u003Cinput>","输入表单元素",[1838,126901],{"style":126693,"src":126902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1838,126904],{"style":126693,"src":126905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126907,126908,126909],{},"单选按钮：",[34,126910,126911],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1838,126913],{"style":126693,"src":126914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126916,126917],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1838,126919],{"style":126693,"src":126920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126922,126923,126926],{},[673,126924,126925],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126928,126929],{},"②select下拉表单元素：可以节约页面控件",[1838,126931],{"style":126693,"src":126932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126934,126935,14136,126937,126940,126941,126943,126944,126946],{},[673,126936,558],{},[34,126938,126939],{},"\u003Cselect>","中至少包含一对",[34,126942,102999],{},"；在",[34,126945,102999],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126948,126949,126950,126953],{},"③",[34,126951,126952],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1838,126955],{"style":126693,"src":126956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126958,126959],{},"3行20列",[469,126961,126963,126964,102978],{"id":126962},"_55-lable标签","5.5 ",[34,126965,126966],{},"\u003Clable>",[14,126968,126969,126970,126972,126973,126975],{},"它不是表单标签，但常常与表单标签搭配使用，",[34,126971,126966],{},"标签用于绑定一个表单标签，当点击",[34,126974,126966],{},"标签内的文本",[14,126977,126978],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1838,126980],{"style":126693,"src":126981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1838,126983],{"style":126693,"src":126984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[469,126986,126988],{"id":126987},"_56-实例","5.6 实例",[1838,126990],{"style":126693,"src":126991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[446,126993,126994],{},"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":32,"searchDepth":47,"depth":47,"links":126996},[126997,126998,126999,127000,127001,127003],{"id":126718,"depth":47,"text":126719},{"id":126775,"depth":47,"text":126776},{"id":126797,"depth":47,"text":126798},{"id":126867,"depth":47,"text":126868},{"id":126962,"depth":47,"text":127002},"5.5 \u003Clable>标签",{"id":126987,"depth":47,"text":126988},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126710,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127010,"title":127011,"body":127012,"description":451,"extension":452,"meta":127561,"navigation":454,"path":127562,"seo":127563,"stem":127564,"__hash__":127565},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127013,"toc":127536},[127014,127017,127021,127024,127027,127031,127034,127037,127040,127043,127046,127049,127052,127056,127059,127063,127066,127069,127072,127076,127079,127082,127085,127091,127094,127097,127100,127103,127106,127109,127112,127145,127149,127152,127155,127158,127162,127165,127168,127171,127174,127177,127181,127184,127187,127190,127194,127197,127201,127204,127208,127211,127216,127220,127223,127227,127230,127233,127236,127239,127266,127269,127273,127276,127279,127284,127287,127290,127294,127297,127302,127305,127308,127311,127315,127318,127321,127324,127328,127331,127334,127337,127341,127345,127348,127388,127391,127395,127402,127405,127409,127412,127458,127462,127465,127468,127471,127499,127503,127506,127533],[10,127015,127011],{"id":127016},"_6-css语法与文本样式",[469,127018,127020],{"id":127019},"_61-css语法规范","6.1 css语法规范",[14,127022,127023],{},"由两部分组成，选择器及一条或多条声明",[1838,127025],{"style":126693,"src":127026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,127028,127029],{},[673,127030,558],{},[14,127032,127033],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,127035,127036],{},"②属性与属性值以“键值对”的形式出现",[14,127038,127039],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,127041,127042],{},"④属性和属性值之间用英文“;”分开",[1838,127044],{"style":126693,"src":127045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1838,127047],{"style":126693,"src":127048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1838,127050],{"style":126693,"src":127051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[469,127053,127055],{"id":127054},"_62-css选择器","6.2 css选择器",[14,127057,127058],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[498,127060,127062],{"id":127061},"_621-标签选择器","6.2.1 标签选择器",[14,127064,127065],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,127067,127068],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1838,127070],{"style":126693,"src":127071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[498,127073,127075],{"id":127074},"_622-类选择器","6.2.2 类选择器",[14,127077,127078],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,127080,127081],{},"②样例",[1838,127083],{"style":126693,"src":127084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,127086,127087,127088,127090],{},"③ ",[673,127089,126925],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,127092,127093],{},"可以理解为给这个标签起了个名字，来表示；",[14,127095,127096],{},"长名称或词组可以使用横线来为选择器命名；",[14,127098,127099],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,127101,127102],{},"命名要有意义；",[1838,127104],{"style":126693,"src":127105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,127107,127108],{},"类选择器也可以指定特殊的元素p.center{}",[14,127110,127111],{},"p.center和.center都对",[27,127113,127115],{"className":126837,"code":127114,"language":126839,"meta":32,"style":32},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[34,127116,127117,127122,127131,127141],{"__ignoreMap":32},[37,127118,127119],{"class":39,"line":40},[37,127120,127121],{"class":43},"\u002F* 类选择器指定特殊元素 *\u002F\n",[37,127123,127124,127126,127129],{"class":39,"line":47},[37,127125,14],{"class":51636},[37,127127,127128],{"class":2320},".center",[37,127130,15913],{"class":50},[37,127132,127133,127135,127137,127139],{"class":39,"line":104},[37,127134,70862],{"class":61},[37,127136,51773],{"class":50},[37,127138,51928],{"class":61},[37,127140,1669],{"class":50},[37,127142,127143],{"class":39,"line":113},[37,127144,1941],{"class":50},[498,127146,127148],{"id":127147},"_623-多类名使用","6.2.3 多类名使用",[14,127150,127151],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1838,127153],{"style":126693,"src":127154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,127156,127157],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[498,127159,127161],{"id":127160},"_624-id选择器","6.2.4 id选择器",[14,127163,127164],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,127166,127167],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1838,127169],{"style":126693,"src":127170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,127172,127173],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,127175,127176],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[498,127178,127180],{"id":127179},"_625-通配符选择器","6.2.5 通配符选择器",[14,127182,127183],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,127185,127186],{},"* {",[14,127188,127189],{},"color=\"red\"}",[498,127191,127193],{"id":127192},"_626-总结","6.2.6 总结",[1838,127195],{"style":126693,"src":127196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[469,127198,127200],{"id":127199},"_63-css字体属性","6.3 css字体属性",[14,127202,127203],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[498,127205,127207],{"id":127206},"_631-字体系列","6.3.1 字体系列",[14,127209,127210],{},"font-family: '宋体';",[14,127212,127213,127215],{},[673,127214,558],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[498,127217,127219],{"id":127218},"_632-字体大小","6.3.2 字体大小",[14,127221,127222],{},"font-size: 20px",[14,127224,127225,26815],{},[673,127226,126925],{},[14,127228,127229],{},"①px（像素）大小是网页的最常用单位",[14,127231,127232],{},"②谷歌浏览器默认为16px",[14,127234,127235],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127237,127238],{},"④可以给body指定整个页面的大小：会自动引用",[27,127240,127242],{"className":126837,"code":127241,"language":126839,"meta":32,"style":32},"body {\n  font-size: 16px;\n}\n",[34,127243,127244,127250,127262],{"__ignoreMap":32},[37,127245,127246,127248],{"class":39,"line":40},[37,127247,52136],{"class":51636},[37,127249,15913],{"class":50},[37,127251,127252,127254,127256,127258,127260],{"class":39,"line":47},[37,127253,70962],{"class":61},[37,127255,51773],{"class":50},[37,127257,1111],{"class":61},[37,127259,51828],{"class":54},[37,127261,1669],{"class":50},[37,127263,127264],{"class":39,"line":104},[37,127265,1941],{"class":50},[14,127267,127268],{},"⑤标题标签比较特殊，需要单独指定大小",[498,127270,127272],{"id":127271},"_633-字体粗细","6.3.3 字体粗细",[14,127274,127275],{},"font-weight: bold;",[14,127277,127278],{},"font-weight: 100；",[14,127280,127281,127283],{},[673,127282,558],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127285,127286],{},"font-weight= 400;",[14,127288,127289],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[498,127291,127293],{"id":127292},"_634-文字样式","6.3.4 文字样式",[14,127295,127296],{},"font-style: normal；",[14,127298,127299,26815],{},[673,127300,127301],{},"属性值",[14,127303,127304],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127306,127307],{},"②italic：浏览器会显示斜体的字体样式",[1838,127309],{"style":126693,"src":127310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[498,127312,127314],{"id":127313},"_635-字体符合属性","6.3.5 字体符合属性",[1838,127316],{"style":126693,"src":127317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1838,127319],{"style":126693,"src":127320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127322,127323],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127325,127326,26815],{},[673,127327,126925],{},[14,127329,127330],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127332,127333],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127335,127336],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[469,127338,127340],{"id":127339},"_64-css-test文本属性","6.4 css test文本属性",[498,127342,127344],{"id":127343},"_641-文本颜色","6.4.1 文本颜色",[14,127346,127347],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[27,127349,127351],{"className":126837,"code":127350,"language":126839,"meta":32,"style":32},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[34,127352,127353,127358,127364,127374,127379,127384],{"__ignoreMap":32},[37,127354,127355],{"class":39,"line":40},[37,127356,127357],{"class":43},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[37,127359,127360,127362],{"class":39,"line":47},[37,127361,14],{"class":51636},[37,127363,15913],{"class":50},[37,127365,127366,127368,127370,127372],{"class":39,"line":104},[37,127367,71241],{"class":61},[37,127369,51773],{"class":50},[37,127371,57757],{"class":61},[37,127373,1669],{"class":50},[37,127375,127376],{"class":39,"line":113},[37,127377,127378],{"class":43},"  \u002F* color: #ff0000; *\u002F\n",[37,127380,127381],{"class":39,"line":189},[37,127382,127383],{"class":43},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[37,127385,127386],{"class":39,"line":195},[37,127387,1941],{"class":50},[1838,127389],{"style":126693,"src":127390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[498,127392,127394],{"id":127393},"_642-对齐文本","6.4.2 对齐文本",[14,127396,127397,127398,127401],{},"text-align属于用于设置元素内文本内容的 ",[673,127399,127400],{},"水平对齐"," 方式",[14,127403,127404],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[498,127406,127408],{"id":127407},"_643-装饰文本","6.4.3 装饰文本",[14,127410,127411],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[27,127413,127415],{"className":126837,"code":127414,"language":126839,"meta":32,"style":32},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[34,127416,127417,127423,127433,127437,127443,127454],{"__ignoreMap":32},[37,127418,127419,127421],{"class":39,"line":40},[37,127420,51],{"class":51636},[37,127422,15913],{"class":50},[37,127424,127425,127427,127429,127431],{"class":39,"line":47},[37,127426,70838],{"class":61},[37,127428,51773],{"class":50},[37,127430,55073],{"class":61},[37,127432,1669],{"class":50},[37,127434,127435],{"class":39,"line":104},[37,127436,1941],{"class":50},[37,127438,127439,127441],{"class":39,"line":113},[37,127440,14],{"class":51636},[37,127442,15913],{"class":50},[37,127444,127445,127447,127449,127452],{"class":39,"line":189},[37,127446,70838],{"class":61},[37,127448,51773],{"class":50},[37,127450,127451],{"class":61},"underline",[37,127453,1669],{"class":50},[37,127455,127456],{"class":39,"line":195},[37,127457,1941],{"class":50},[498,127459,127461],{"id":127460},"_644-文本缩进","6.4.4 文本缩进",[14,127463,127464],{},"实现文本的第一行首行缩进自己指定的距离",[14,127466,127467],{},"20px往右边走；-20px往左边走",[14,127469,127470],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[27,127472,127474],{"className":126837,"code":127473,"language":126839,"meta":32,"style":32},"p {\n  text-indent: 2em;\n}\n",[34,127475,127476,127482,127495],{"__ignoreMap":32},[37,127477,127478,127480],{"class":39,"line":40},[37,127479,14],{"class":51636},[37,127481,15913],{"class":50},[37,127483,127484,127487,127489,127491,127493],{"class":39,"line":47},[37,127485,127486],{"class":61},"  text-indent",[37,127488,51773],{"class":50},[37,127490,602],{"class":61},[37,127492,23894],{"class":54},[37,127494,1669],{"class":50},[37,127496,127497],{"class":39,"line":104},[37,127498,1941],{"class":50},[498,127500,127502],{"id":127501},"_645-行间距","6.4.5 行间距",[14,127504,127505],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[27,127507,127509],{"className":126837,"code":127508,"language":126839,"meta":32,"style":32},"p {\n  line-height: 1.6;\n}\n",[34,127510,127511,127517,127529],{"__ignoreMap":32},[37,127512,127513,127515],{"class":39,"line":40},[37,127514,14],{"class":51636},[37,127516,15913],{"class":50},[37,127518,127519,127522,127524,127527],{"class":39,"line":47},[37,127520,127521],{"class":61},"  line-height",[37,127523,51773],{"class":50},[37,127525,127526],{"class":61},"1.6",[37,127528,1669],{"class":50},[37,127530,127531],{"class":39,"line":104},[37,127532,1941],{"class":50},[446,127534,127535],{},"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":32,"searchDepth":47,"depth":47,"links":127537},[127538,127539,127547,127554],{"id":127019,"depth":47,"text":127020},{"id":127054,"depth":47,"text":127055,"children":127540},[127541,127542,127543,127544,127545,127546],{"id":127061,"depth":104,"text":127062},{"id":127074,"depth":104,"text":127075},{"id":127147,"depth":104,"text":127148},{"id":127160,"depth":104,"text":127161},{"id":127179,"depth":104,"text":127180},{"id":127192,"depth":104,"text":127193},{"id":127199,"depth":47,"text":127200,"children":127548},[127549,127550,127551,127552,127553],{"id":127206,"depth":104,"text":127207},{"id":127218,"depth":104,"text":127219},{"id":127271,"depth":104,"text":127272},{"id":127292,"depth":104,"text":127293},{"id":127313,"depth":104,"text":127314},{"id":127339,"depth":47,"text":127340,"children":127555},[127556,127557,127558,127559,127560],{"id":127343,"depth":104,"text":127344},{"id":127393,"depth":104,"text":127394},{"id":127407,"depth":104,"text":127408},{"id":127460,"depth":104,"text":127461},{"id":127501,"depth":104,"text":127502},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127011,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127567,"title":127568,"body":127569,"description":451,"extension":452,"meta":128218,"navigation":454,"path":128219,"seo":128220,"stem":128221,"__hash__":128222},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127570,"toc":128199},[127571,127574,127578,127582,127642,127646,127656,127659,127662,127666,127691,127695,127698,127701,127704,127707,127710,127714,127717,127720,127762,127765,127791,127797,127800,127804,127808,127814,127817,127820,127823,127826,127829,127832,127877,127881,127884,127887,127891,127895,127924,127927,127932,127935,127938,127941,127944,127948,127952,127955,127957,127960,127964,127967,127971,127974,127977,127980,127984,127988,127994,128004,128007,128010,128013,128016,128019,128142,128150,128158,128196],[10,127572,127568],{"id":127573},"_7-css引入方式与选择器进阶",[469,127575,127577],{"id":127576},"_71-css引入方式","7.1 css引入方式",[498,127579,127581],{"id":127580},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[27,127583,127587],{"className":127584,"code":127585,"language":127586,"meta":32,"style":32},"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",[34,127588,127589,127597,127604,127616,127629,127634],{"__ignoreMap":32},[37,127590,127591,127593,127595],{"class":39,"line":40},[37,127592,1418],{"class":50},[37,127594,446],{"class":51636},[37,127596,51643],{"class":50},[37,127598,127599,127602],{"class":39,"line":47},[37,127600,127601],{"class":51636},"  h1",[37,127603,15913],{"class":50},[37,127605,127606,127609,127611,127614],{"class":39,"line":104},[37,127607,127608],{"class":61},"    color",[37,127610,51773],{"class":50},[37,127612,127613],{"class":61},"blue",[37,127615,1669],{"class":50},[37,127617,127618,127621,127623,127625,127627],{"class":39,"line":113},[37,127619,127620],{"class":61},"    font-size",[37,127622,51773],{"class":50},[37,127624,1309],{"class":61},[37,127626,51828],{"class":54},[37,127628,1669],{"class":50},[37,127630,127631],{"class":39,"line":189},[37,127632,127633],{"class":50},"  }\n",[37,127635,127636,127638,127640],{"class":39,"line":195},[37,127637,52121],{"class":50},[37,127639,446],{"class":51636},[37,127641,51643],{"class":50},[14,127643,127644,26815],{},[673,127645,126925],{},[14,127647,77561,127648,127651,127652,127655],{},[34,127649,127650],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[34,127653,127654],{},"\u003Chead>","标签中",[14,127657,127658],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127660,127661],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[498,127663,127665],{"id":127664},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[27,127667,127669],{"className":127584,"code":127668,"language":127586,"meta":32,"style":32},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[34,127670,127671],{"__ignoreMap":32},[37,127672,127673,127675,127677,127679,127681,127684,127687,127689],{"class":39,"line":40},[37,127674,1418],{"class":50},[37,127676,14],{"class":51636},[37,127678,62962],{"class":2320},[37,127680,55],{"class":50},[37,127682,127683],{"class":185},"\"color: red; font-size: 16px;\"",[37,127685,127686],{"class":50},">这是一个段落\u003C\u002F",[37,127688,14],{"class":51636},[37,127690,51643],{"class":50},[14,127692,127693,26815],{},[673,127694,126925],{},[14,127696,127697],{},"①style其实就是标签的属性",[14,127699,127700],{},"②在双引号中间，写法要符合css规范",[14,127702,127703],{},"③可以控制当前的标签设置样式",[14,127705,127706],{},"④书写繁琐，简单时才用",[14,127708,127709],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[498,127711,127713],{"id":127712},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127715,127716],{},"使用最多，单独建一个css文件，然后html引用",[14,127718,127719],{},"①css文件部分： style.css",[27,127721,127723],{"className":126837,"code":127722,"language":126839,"meta":32,"style":32},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[34,127724,127725,127730,127736,127746,127758],{"__ignoreMap":32},[37,127726,127727],{"class":39,"line":40},[37,127728,127729],{"class":43},"\u002F* style.css *\u002F\n",[37,127731,127732,127734],{"class":39,"line":47},[37,127733,10],{"class":51636},[37,127735,15913],{"class":50},[37,127737,127738,127740,127742,127744],{"class":39,"line":104},[37,127739,71241],{"class":61},[37,127741,51773],{"class":50},[37,127743,127613],{"class":61},[37,127745,1669],{"class":50},[37,127747,127748,127750,127752,127754,127756],{"class":39,"line":113},[37,127749,70962],{"class":61},[37,127751,51773],{"class":50},[37,127753,1309],{"class":61},[37,127755,51828],{"class":54},[37,127757,1669],{"class":50},[37,127759,127760],{"class":39,"line":189},[37,127761,1941],{"class":50},[14,127763,127764],{},"②html部分",[27,127766,127768],{"className":127584,"code":127767,"language":127586,"meta":32,"style":32},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[34,127769,127770],{"__ignoreMap":32},[37,127771,127772,127774,127776,127778,127780,127782,127784,127786,127789],{"class":39,"line":40},[37,127773,1418],{"class":50},[37,127775,69341],{"class":51636},[37,127777,69344],{"class":2320},[37,127779,55],{"class":50},[37,127781,69349],{"class":185},[37,127783,61393],{"class":2320},[37,127785,55],{"class":50},[37,127787,127788],{"class":185},"\"style.css\"",[37,127790,51643],{"class":50},[14,127792,127793,127796],{},[34,127794,127795],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127798,127799],{},"ctrl+0回到页面原来大小",[469,127801,127803],{"id":127802},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[498,127805,127807],{"id":127806},"_721-快速生成html","7.2.1 快速生成html",[14,127809,127810,127811],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[34,127812,127813],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127815,127816],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127818,127819],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127821,127822],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127824,127825],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127827,127828],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127830,127831],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[27,127833,127835],{"className":127584,"code":127834,"language":127586,"meta":32,"style":32},"\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",[34,127836,127837,127842,127847,127852,127857,127862,127867,127872],{"__ignoreMap":32},[37,127838,127839],{"class":39,"line":40},[37,127840,127841],{"class":43},"\u003C!-- Emmet 语法示例 -->\n",[37,127843,127844],{"class":39,"line":47},[37,127845,127846],{"class":43},"\u003C!-- div*3        → 生成3个div -->\n",[37,127848,127849],{"class":39,"line":104},[37,127850,127851],{"class":43},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[37,127853,127854],{"class":39,"line":113},[37,127855,127856],{"class":43},"\u003C!-- div+p        → 兄弟div和p -->\n",[37,127858,127859],{"class":39,"line":189},[37,127860,127861],{"class":43},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[37,127863,127864],{"class":39,"line":195},[37,127865,127866],{"class":43},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[37,127868,127869],{"class":39,"line":201},[37,127870,127871],{"class":43},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[37,127873,127874],{"class":39,"line":207},[37,127875,127876],{"class":43},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[498,127878,127880],{"id":127879},"_722-快速生成css","7.2.2 快速生成css",[14,127882,127883],{},"简写开头",[14,127885,127886],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[469,127888,127890],{"id":127889},"_73-css复合选择器","7.3 css复合选择器",[498,127892,127894],{"id":127893},"_731-后代选择器","7.3.1 后代选择器",[27,127896,127898],{"className":126837,"code":127897,"language":126839,"meta":32,"style":32},".parent .child {\n  color: blue;\n}\n",[34,127899,127900,127910,127920],{"__ignoreMap":32},[37,127901,127902,127905,127908],{"class":39,"line":40},[37,127903,127904],{"class":2320},".parent",[37,127906,127907],{"class":2320}," .child",[37,127909,15913],{"class":50},[37,127911,127912,127914,127916,127918],{"class":39,"line":47},[37,127913,71241],{"class":61},[37,127915,51773],{"class":50},[37,127917,127613],{"class":61},[37,127919,1669],{"class":50},[37,127921,127922],{"class":39,"line":104},[37,127923,1941],{"class":50},[14,127925,127926],{},"元素1 元素2 {样式声明}",[14,127928,127929],{},[673,127930,127931],{},"注意点:",[14,127933,127934],{},"①元素1和元素2中间用空格隔开",[14,127936,127937],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127939,127940],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127942,127943],{},"④元素1和元素2可以是任意基础选择器",[498,127945,127947],{"id":127946},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127949,127950],{},[673,127951,127931],{},[14,127953,127954],{},"①元素1和元素2中间用大于号隔开",[14,127956,127937],{},[14,127958,127959],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[498,127961,127963],{"id":127962},"_733-并集选择器","7.3.3 并集选择器",[14,127965,127966],{},"元素1，元素2 {样式声明}",[14,127968,127969],{},[673,127970,127931],{},[14,127972,127973],{},"①元素1和元素2中间用逗号隔开",[14,127975,127976],{},"②逗号可以理解为和的意思",[14,127978,127979],{},"③并集选择器通常用于集体声明",[498,127981,127983],{"id":127982},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127985,127986],{},[673,127987,127931],{},[14,127989,127990,127991,127993],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69341,127992],{},"－:visited－:hover－:active。",[14,127995,127996,127997,128000,128001,26082],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127998,127999],"hover",{}," 、 ",[128002,128003],"first-child",{},[14,128005,128006],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,128008,128009],{},"link对没访问的进行设置",[14,128011,128012],{},"vistied对已访问的进行改变",[14,128014,128015],{},"hover鼠标经过就会变",[14,128017,128018],{},"active常按(点)就会变",[27,128020,128022],{"className":126837,"code":128021,"language":126839,"meta":32,"style":32},"\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",[34,128023,128024,128029,128038,128048,128058,128062,128071,128082,128086,128094,128104,128114,128118,128127,128138],{"__ignoreMap":32},[37,128025,128026],{"class":39,"line":40},[37,128027,128028],{"class":43},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[37,128030,128031,128033,128036],{"class":39,"line":47},[37,128032,51],{"class":51636},[37,128034,128035],{"class":2320},":link",[37,128037,15913],{"class":50},[37,128039,128040,128042,128044,128046],{"class":39,"line":104},[37,128041,71241],{"class":61},[37,128043,51773],{"class":50},[37,128045,62705],{"class":61},[37,128047,1669],{"class":50},[37,128049,128050,128052,128054,128056],{"class":39,"line":113},[37,128051,70838],{"class":61},[37,128053,51773],{"class":50},[37,128055,55073],{"class":61},[37,128057,1669],{"class":50},[37,128059,128060],{"class":39,"line":189},[37,128061,1941],{"class":50},[37,128063,128064,128066,128069],{"class":39,"line":195},[37,128065,51],{"class":51636},[37,128067,128068],{"class":2320},":visited",[37,128070,15913],{"class":50},[37,128072,128073,128075,128077,128080],{"class":39,"line":201},[37,128074,71241],{"class":61},[37,128076,51773],{"class":50},[37,128078,128079],{"class":61},"purple",[37,128081,1669],{"class":50},[37,128083,128084],{"class":39,"line":207},[37,128085,1941],{"class":50},[37,128087,128088,128090,128092],{"class":39,"line":213},[37,128089,51],{"class":51636},[37,128091,61276],{"class":2320},[37,128093,15913],{"class":50},[37,128095,128096,128098,128100,128102],{"class":39,"line":218},[37,128097,71241],{"class":61},[37,128099,51773],{"class":50},[37,128101,55225],{"class":61},[37,128103,1669],{"class":50},[37,128105,128106,128108,128110,128112],{"class":39,"line":227},[37,128107,70838],{"class":61},[37,128109,51773],{"class":50},[37,128111,127451],{"class":61},[37,128113,1669],{"class":50},[37,128115,128116],{"class":39,"line":232},[37,128117,1941],{"class":50},[37,128119,128120,128122,128125],{"class":39,"line":238},[37,128121,51],{"class":51636},[37,128123,128124],{"class":2320},":active",[37,128126,15913],{"class":50},[37,128128,128129,128131,128133,128136],{"class":39,"line":244},[37,128130,71241],{"class":61},[37,128132,51773],{"class":50},[37,128134,128135],{"class":61},"green",[37,128137,1669],{"class":50},[37,128139,128140],{"class":39,"line":250},[37,128141,1941],{"class":50},[498,128143,128145,128146,128149],{"id":128144},"_735-伪类选择器","7.3.5 ",[128147,128148],"focus",{},"伪类选择器",[14,128151,128152,128154,128155,128157],{},[128147,128153],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[34,128156,126898],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[27,128159,128161],{"className":126837,"code":128160,"language":126839,"meta":32,"style":32},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[34,128162,128163,128171,128182,128192],{"__ignoreMap":32},[37,128164,128165,128167,128169],{"class":39,"line":40},[37,128166,54157],{"class":51636},[37,128168,62236],{"class":2320},[37,128170,15913],{"class":50},[37,128172,128173,128176,128178,128180],{"class":39,"line":47},[37,128174,128175],{"class":61},"  border-color",[37,128177,51773],{"class":50},[37,128179,55225],{"class":61},[37,128181,1669],{"class":50},[37,128183,128184,128186,128188,128190],{"class":39,"line":104},[37,128185,71134],{"class":61},[37,128187,51773],{"class":50},[37,128189,55073],{"class":61},[37,128191,1669],{"class":50},[37,128193,128194],{"class":39,"line":113},[37,128195,1941],{"class":50},[446,128197,128198],{},"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":32,"searchDepth":47,"depth":47,"links":128200},[128201,128206,128210],{"id":127576,"depth":47,"text":127577,"children":128202},[128203,128204,128205],{"id":127580,"depth":104,"text":127581},{"id":127664,"depth":104,"text":127665},{"id":127712,"depth":104,"text":127713},{"id":127802,"depth":47,"text":127803,"children":128207},[128208,128209],{"id":127806,"depth":104,"text":127807},{"id":127879,"depth":104,"text":127880},{"id":127889,"depth":47,"text":127890,"children":128211},[128212,128213,128214,128215,128216],{"id":127893,"depth":104,"text":127894},{"id":127946,"depth":104,"text":127947},{"id":127962,"depth":104,"text":127963},{"id":127982,"depth":104,"text":127983},{"id":128144,"depth":104,"text":128217},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127568,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128224,"title":128225,"body":128226,"description":451,"extension":452,"meta":130149,"navigation":454,"path":130150,"seo":130151,"stem":130152,"__hash__":130153},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128227,"toc":130123},[128228,128231,128235,128244,128248,128274,128279,128282,128285,128288,128291,128295,128298,128308,128316,128320,128355,128360,128363,128366,128369,128372,128376,128379,128388,128392,128405,128410,128413,128416,128419,128423,128426,128430,128433,128488,128491,128522,128525,128579,128583,128586,128752,128875,128878,128881,128884,128887,128891,128894,128898,128901,128904,128908,128911,128942,128969,128997,129000,129004,129030,129073,129077,129171,129174,129201,129204,129207,129210,129213,129216,129219,129222,129225,129228,129232,129289,129316,129320,129368,129372,129413,129415,129418,129421,129424,129427,129431,129523,129526,129529,129532,129536,129659,129860,129864,129868,129871,129874,129877,129881,129884,129887,129912,129915,129918,129921,129924,129927,129931,129939,130001,130004,130062,130065,130068,130071,130074,130077,130080,130083,130120],[10,128229,128225],{"id":128230},"_8-css显示模式与背景特性",[469,128232,128234],{"id":128233},"_81-css元素显示模式","8.1 css元素显示模式",[14,128236,128237,128238,128240,128241,128243],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[34,128239,126448],{},"自己占一行，比如一行可以放多个",[34,128242,126451],{},"，HTML 元素一般分为块元素和行内元素两种类型",[498,128245,128247],{"id":128246},"_811-块元素","8.1.1 块元素",[14,128249,128250,128251,128253,128254,735,128257,735,128259,735,128261,735,128264,735,128267,128270,128271,128273],{},"常见的块元素有",[34,128252,126352],{},"~",[34,128255,128256],{},"\u003Ch6>",[34,128258,126378],{},[34,128260,126448],{},[34,128262,128263],{},"\u003Cul>",[34,128265,128266],{},"\u003Col>",[34,128268,128269],{},"\u003Cli>","等，其中 ",[34,128272,126448],{}," 标签是最典型的块元素",[14,128275,128276],{},[673,128277,128278],{},"块级元素的特点：",[14,128280,128281],{},"① 比较霸道，自己独占一行。",[14,128283,128284],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128286,128287],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128289,128290],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128292,128293],{},[673,128294,558],{},[14,128296,128297],{},"①文字类的元素内不能使用块级元素",[14,128299,77584,128300,128302,128303,128305,128306],{},[34,128301,126378],{}," 标签主要用于存放文字，因此 ",[34,128304,126378],{}," 里面不能放块级元素，特别是不能放",[34,128307,126448],{},[14,128309,128310,128311,128253,128313,128315],{},"⑥同理， ",[34,128312,126352],{},[34,128314,128256],{},"等都是文字类块级标签，里面也不能放其他块级元素",[498,128317,128319],{"id":128318},"_812-行内元素","8.1.2 行内元素",[14,128321,128322,128323,735,128325,735,128328,735,128331,735,128334,735,128337,735,128340,735,128343,735,128346,735,128349,128351,128352,128354],{},"常见的行内元素有 ",[34,128324,126610],{},[34,128326,128327],{},"\u003Cstrong>",[34,128329,128330],{},"\u003Cb>",[34,128332,128333],{},"\u003Cem>",[34,128335,128336],{},"\u003Ci>",[34,128338,128339],{},"\u003Cdel>",[34,128341,128342],{},"\u003Cs>",[34,128344,128345],{},"\u003Cins>",[34,128347,128348],{},"\u003Cu>",[34,128350,126451],{}," 等，其中 ",[34,128353,126451],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128356,128357],{},[673,128358,128359],{},"特点：",[14,128361,128362],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128364,128365],{},"② 高、宽直接设置是无效的。",[14,128367,128368],{},"③ 默认宽度就是它本身内容的宽度。",[14,128370,128371],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128373,128374],{},[673,128375,558],{},[14,128377,128378],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128380,128381,128382,128384,128385,128387],{},"②特殊情况链接 ",[34,128383,126610],{}," 里面可以放块级元素，但是给 ",[34,128386,126610],{}," 转换一下块级模式最安全",[498,128389,128391],{"id":128390},"_813-行内块元素","8.1.3 行内块元素",[14,128393,128394,128395,735,128398,735,128401,128404],{},"在行内元素中有几个特殊的标签 —— ",[34,128396,128397],{},"\u003Cimg \u002F>",[34,128399,128400],{},"\u003Cinput \u002F>",[34,128402,128403],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128406,128407],{},[673,128408,128409],{},"行内块元素的特点：",[14,128411,128412],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128414,128415],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128417,128418],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[498,128420,128422],{"id":128421},"_814-总结","8.1.4 总结",[1838,128424],{"style":126693,"src":128425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[498,128427,128429],{"id":128428},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128431,128432],{},"①转换为块元素：display:block;",[27,128434,128436],{"className":126837,"code":128435,"language":126839,"meta":32,"style":32},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[34,128437,128438,128443,128449,128460,128472,128484],{"__ignoreMap":32},[37,128439,128440],{"class":39,"line":40},[37,128441,128442],{"class":43},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[37,128444,128445,128447],{"class":39,"line":47},[37,128446,51],{"class":51636},[37,128448,15913],{"class":50},[37,128450,128451,128454,128456,128458],{"class":39,"line":104},[37,128452,128453],{"class":61},"  display",[37,128455,51773],{"class":50},[37,128457,61205],{"class":61},[37,128459,1669],{"class":50},[37,128461,128462,128464,128466,128468,128470],{"class":39,"line":113},[37,128463,70904],{"class":61},[37,128465,51773],{"class":50},[37,128467,154],{"class":61},[37,128469,51828],{"class":54},[37,128471,1669],{"class":50},[37,128473,128474,128476,128478,128480,128482],{"class":39,"line":189},[37,128475,71124],{"class":61},[37,128477,51773],{"class":50},[37,128479,915],{"class":61},[37,128481,51828],{"class":54},[37,128483,1669],{"class":50},[37,128485,128486],{"class":39,"line":195},[37,128487,1941],{"class":50},[14,128489,128490],{},"②转换为行内元素：display:inline;",[27,128492,128494],{"className":126837,"code":128493,"language":126839,"meta":32,"style":32},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[34,128495,128496,128501,128507,128518],{"__ignoreMap":32},[37,128497,128498],{"class":39,"line":40},[37,128499,128500],{"class":43},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[37,128502,128503,128505],{"class":39,"line":47},[37,128504,51947],{"class":51636},[37,128506,15913],{"class":50},[37,128508,128509,128511,128513,128516],{"class":39,"line":104},[37,128510,128453],{"class":61},[37,128512,51773],{"class":50},[37,128514,128515],{"class":61},"inline",[37,128517,1669],{"class":50},[37,128519,128520],{"class":39,"line":113},[37,128521,1941],{"class":50},[14,128523,128524],{},"③转换为行内块：display:inline-block;",[27,128526,128528],{"className":126837,"code":128527,"language":126839,"meta":32,"style":32},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[34,128529,128530,128535,128541,128551,128563,128575],{"__ignoreMap":32},[37,128531,128532],{"class":39,"line":40},[37,128533,128534],{"class":43},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[37,128536,128537,128539],{"class":39,"line":47},[37,128538,37],{"class":51636},[37,128540,15913],{"class":50},[37,128542,128543,128545,128547,128549],{"class":39,"line":104},[37,128544,128453],{"class":61},[37,128546,51773],{"class":50},[37,128548,72719],{"class":61},[37,128550,1669],{"class":50},[37,128552,128553,128555,128557,128559,128561],{"class":39,"line":113},[37,128554,70904],{"class":61},[37,128556,51773],{"class":50},[37,128558,1122],{"class":61},[37,128560,51828],{"class":54},[37,128562,1669],{"class":50},[37,128564,128565,128567,128569,128571,128573],{"class":39,"line":189},[37,128566,71124],{"class":61},[37,128568,51773],{"class":50},[37,128570,1459],{"class":61},[37,128572,51828],{"class":54},[37,128574,1669],{"class":50},[37,128576,128577],{"class":39,"line":195},[37,128578,1941],{"class":50},[498,128580,128582],{"id":128581},"_816-小米侧边栏","8.1.6 小米侧边栏",[1838,128584],{"style":126693,"src":128585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[27,128587,128589],{"className":127584,"code":128588,"language":127586,"meta":32,"style":32},"\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",[34,128590,128591,128596,128611,128630,128649,128668,128687,128706,128725,128744],{"__ignoreMap":32},[37,128592,128593],{"class":39,"line":40},[37,128594,128595],{"class":43},"\u003C!-- 小米侧边栏案例 -->\n",[37,128597,128598,128600,128602,128604,128606,128609],{"class":39,"line":47},[37,128599,1418],{"class":50},[37,128601,51947],{"class":51636},[37,128603,53822],{"class":2320},[37,128605,55],{"class":50},[37,128607,128608],{"class":185},"\"sidebar\"",[37,128610,51643],{"class":50},[37,128612,128613,128615,128617,128619,128621,128623,128626,128628],{"class":39,"line":104},[37,128614,52480],{"class":50},[37,128616,51],{"class":51636},[37,128618,61393],{"class":2320},[37,128620,55],{"class":50},[37,128622,61398],{"class":185},[37,128624,128625],{"class":50},">手机 电话卡\u003C\u002F",[37,128627,51],{"class":51636},[37,128629,51643],{"class":50},[37,128631,128632,128634,128636,128638,128640,128642,128645,128647],{"class":39,"line":113},[37,128633,52480],{"class":50},[37,128635,51],{"class":51636},[37,128637,61393],{"class":2320},[37,128639,55],{"class":50},[37,128641,61398],{"class":185},[37,128643,128644],{"class":50},">电视 盒子\u003C\u002F",[37,128646,51],{"class":51636},[37,128648,51643],{"class":50},[37,128650,128651,128653,128655,128657,128659,128661,128664,128666],{"class":39,"line":189},[37,128652,52480],{"class":50},[37,128654,51],{"class":51636},[37,128656,61393],{"class":2320},[37,128658,55],{"class":50},[37,128660,61398],{"class":185},[37,128662,128663],{"class":50},">笔记本 平板\u003C\u002F",[37,128665,51],{"class":51636},[37,128667,51643],{"class":50},[37,128669,128670,128672,128674,128676,128678,128680,128683,128685],{"class":39,"line":195},[37,128671,52480],{"class":50},[37,128673,51],{"class":51636},[37,128675,61393],{"class":2320},[37,128677,55],{"class":50},[37,128679,61398],{"class":185},[37,128681,128682],{"class":50},">出行 穿戴\u003C\u002F",[37,128684,51],{"class":51636},[37,128686,51643],{"class":50},[37,128688,128689,128691,128693,128695,128697,128699,128702,128704],{"class":39,"line":201},[37,128690,52480],{"class":50},[37,128692,51],{"class":51636},[37,128694,61393],{"class":2320},[37,128696,55],{"class":50},[37,128698,61398],{"class":185},[37,128700,128701],{"class":50},">智能 路由器\u003C\u002F",[37,128703,51],{"class":51636},[37,128705,51643],{"class":50},[37,128707,128708,128710,128712,128714,128716,128718,128721,128723],{"class":39,"line":207},[37,128709,52480],{"class":50},[37,128711,51],{"class":51636},[37,128713,61393],{"class":2320},[37,128715,55],{"class":50},[37,128717,61398],{"class":185},[37,128719,128720],{"class":50},">健康 儿童\u003C\u002F",[37,128722,51],{"class":51636},[37,128724,51643],{"class":50},[37,128726,128727,128729,128731,128733,128735,128737,128740,128742],{"class":39,"line":213},[37,128728,52480],{"class":50},[37,128730,51],{"class":51636},[37,128732,61393],{"class":2320},[37,128734,55],{"class":50},[37,128736,61398],{"class":185},[37,128738,128739],{"class":50},">耳机 音响\u003C\u002F",[37,128741,51],{"class":51636},[37,128743,51643],{"class":50},[37,128745,128746,128748,128750],{"class":39,"line":218},[37,128747,52121],{"class":50},[37,128749,51947],{"class":51636},[37,128751,51643],{"class":50},[27,128753,128755],{"className":126837,"code":128754,"language":126839,"meta":32,"style":32},".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",[34,128756,128757,128766,128776,128789,128801,128813,128825,128835,128846,128850,128860,128871],{"__ignoreMap":32},[37,128758,128759,128762,128764],{"class":39,"line":40},[37,128760,128761],{"class":2320},".sidebar",[37,128763,1774],{"class":51636},[37,128765,15913],{"class":50},[37,128767,128768,128770,128772,128774],{"class":39,"line":47},[37,128769,128453],{"class":61},[37,128771,51773],{"class":50},[37,128773,61205],{"class":61},[37,128775,1669],{"class":50},[37,128777,128778,128780,128782,128785,128787],{"class":39,"line":104},[37,128779,70904],{"class":61},[37,128781,51773],{"class":50},[37,128783,128784],{"class":61},"234",[37,128786,51828],{"class":54},[37,128788,1669],{"class":50},[37,128790,128791,128793,128795,128797,128799],{"class":39,"line":113},[37,128792,71124],{"class":61},[37,128794,51773],{"class":50},[37,128796,964],{"class":61},[37,128798,51828],{"class":54},[37,128800,1669],{"class":50},[37,128802,128803,128805,128807,128809,128811],{"class":39,"line":189},[37,128804,127521],{"class":61},[37,128806,51773],{"class":50},[37,128808,964],{"class":61},[37,128810,51828],{"class":54},[37,128812,1669],{"class":50},[37,128814,128815,128817,128819,128821,128823],{"class":39,"line":195},[37,128816,71159],{"class":61},[37,128818,51773],{"class":50},[37,128820,1459],{"class":61},[37,128822,51828],{"class":54},[37,128824,1669],{"class":50},[37,128826,128827,128829,128831,128833],{"class":39,"line":201},[37,128828,71241],{"class":61},[37,128830,51773],{"class":50},[37,128832,61178],{"class":61},[37,128834,1669],{"class":50},[37,128836,128837,128839,128841,128844],{"class":39,"line":207},[37,128838,71214],{"class":61},[37,128840,51773],{"class":50},[37,128842,128843],{"class":61},"#55585a",[37,128845,1669],{"class":50},[37,128847,128848],{"class":39,"line":213},[37,128849,1941],{"class":50},[37,128851,128852,128854,128856,128858],{"class":39,"line":218},[37,128853,128761],{"class":2320},[37,128855,1774],{"class":51636},[37,128857,61276],{"class":2320},[37,128859,15913],{"class":50},[37,128861,128862,128864,128866,128869],{"class":39,"line":227},[37,128863,71214],{"class":61},[37,128865,51773],{"class":50},[37,128867,128868],{"class":61},"#ff6700",[37,128870,1669],{"class":50},[37,128872,128873],{"class":39,"line":232},[37,128874,1941],{"class":50},[1838,128876],{"style":126693,"src":128877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128879,128880],{},"行高=盒子高度：实现文字的垂直居中",[14,128882,128883],{},"原理讲解：",[1838,128885],{"style":126693,"src":128886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[469,128888,128890],{"id":128889},"_82-css背景","8.2 css背景",[14,128892,128893],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[498,128895,128897],{"id":128896},"_821-背景颜色","8.2.1 背景颜色",[14,128899,128900],{},"background-color:颜色值;",[14,128902,128903],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[498,128905,128907],{"id":128906},"_822-背景图片","8.2.2 背景图片",[14,128909,128910],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[27,128912,128914],{"className":126837,"code":128913,"language":126839,"meta":32,"style":32},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[34,128915,128916,128922,128938],{"__ignoreMap":32},[37,128917,128918,128920],{"class":39,"line":40},[37,128919,51947],{"class":51636},[37,128921,15913],{"class":50},[37,128923,128924,128927,128929,128931,128933,128936],{"class":39,"line":47},[37,128925,128926],{"class":61},"  background-image",[37,128928,51773],{"class":50},[37,128930,62062],{"class":61},[37,128932,165],{"class":50},[37,128934,128935],{"class":159},"images\u002Fbg.png",[37,128937,3069],{"class":50},[37,128939,128940],{"class":39,"line":104},[37,128941,1941],{"class":50},[661,128943,128944,128953],{},[664,128945,128946],{},[667,128947,128948,128951],{},[670,128949,128950],{"align":24077},"参数值",[670,128952,102981],{"align":24077},[708,128954,128955,128962],{},[667,128956,128957,128959],{},[713,128958,55073],{"align":24077},[713,128960,128961],{"align":24077},"无背景图（默认的）",[667,128963,128964,128966],{},[713,128965,62062],{"align":24077},[713,128967,128968],{"align":24077},"使用绝对或相对地址指定背景图像",[27,128970,128971],{"className":126837,"code":128913,"language":126839,"meta":32,"style":32},[34,128972,128973,128979,128993],{"__ignoreMap":32},[37,128974,128975,128977],{"class":39,"line":40},[37,128976,51947],{"class":51636},[37,128978,15913],{"class":50},[37,128980,128981,128983,128985,128987,128989,128991],{"class":39,"line":47},[37,128982,128926],{"class":61},[37,128984,51773],{"class":50},[37,128986,62062],{"class":61},[37,128988,165],{"class":50},[37,128990,128935],{"class":159},[37,128992,3069],{"class":50},[37,128994,128995],{"class":39,"line":104},[37,128996,1941],{"class":50},[14,128998,128999],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[498,129001,129003],{"id":129002},"_823-背景平铺","8.2.3 背景平铺",[27,129005,129007],{"className":126837,"code":129006,"language":126839,"meta":32,"style":32},"div {\n  background-repeat: no-repeat;\n}\n",[34,129008,129009,129015,129026],{"__ignoreMap":32},[37,129010,129011,129013],{"class":39,"line":40},[37,129012,51947],{"class":51636},[37,129014,15913],{"class":50},[37,129016,129017,129020,129022,129024],{"class":39,"line":47},[37,129018,129019],{"class":61},"  background-repeat",[37,129021,51773],{"class":50},[37,129023,62072],{"class":61},[37,129025,1669],{"class":50},[37,129027,129028],{"class":39,"line":104},[37,129029,1941],{"class":50},[661,129031,129032,129040],{},[664,129033,129034],{},[667,129035,129036,129038],{},[670,129037,128950],{"align":24077},[670,129039,102981],{"align":24077},[708,129041,129042,129050,129057,129065],{},[667,129043,129044,129047],{},[713,129045,129046],{"align":24077},"repeat",[713,129048,129049],{"align":24077},"背景图像在纵向和横向上平铺（默认的）",[667,129051,129052,129054],{},[713,129053,62072],{"align":24077},[713,129055,129056],{"align":24077},"背景图像不平铺",[667,129058,129059,129062],{},[713,129060,129061],{"align":24077},"repeat-x",[713,129063,129064],{"align":24077},"背景图像在横向上平铺",[667,129066,129067,129070],{},[713,129068,129069],{"align":24077},"repeat-y",[713,129071,129072],{"align":24077},"背景图像在纵向平铺",[498,129074,129076],{"id":129075},"_824-背景图片位置","8.2.4 背景图片位置",[27,129078,129080],{"className":126837,"code":129079,"language":126839,"meta":32,"style":32},"\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",[34,129081,129082,129087,129093,129107,129111,129116,129122,129138,129142,129147,129153,129167],{"__ignoreMap":32},[37,129083,129084],{"class":39,"line":40},[37,129085,129086],{"class":43},"\u002F* 方位名词 *\u002F\n",[37,129088,129089,129091],{"class":39,"line":47},[37,129090,51947],{"class":51636},[37,129092,15913],{"class":50},[37,129094,129095,129098,129100,129102,129105],{"class":39,"line":104},[37,129096,129097],{"class":61},"  background-position",[37,129099,51773],{"class":50},[37,129101,51928],{"class":61},[37,129103,129104],{"class":61}," top",[37,129106,1669],{"class":50},[37,129108,129109],{"class":39,"line":113},[37,129110,1941],{"class":50},[37,129112,129113],{"class":39,"line":189},[37,129114,129115],{"class":43},"\u002F* 精确单位 *\u002F\n",[37,129117,129118,129120],{"class":39,"line":195},[37,129119,51947],{"class":51636},[37,129121,15913],{"class":50},[37,129123,129124,129126,129128,129130,129132,129134,129136],{"class":39,"line":201},[37,129125,129097],{"class":61},[37,129127,51773],{"class":50},[37,129129,1210],{"class":61},[37,129131,51828],{"class":54},[37,129133,57840],{"class":61},[37,129135,51828],{"class":54},[37,129137,1669],{"class":50},[37,129139,129140],{"class":39,"line":207},[37,129141,1941],{"class":50},[37,129143,129144],{"class":39,"line":213},[37,129145,129146],{"class":43},"\u002F* 混合单位 *\u002F\n",[37,129148,129149,129151],{"class":39,"line":218},[37,129150,51947],{"class":51636},[37,129152,15913],{"class":50},[37,129154,129155,129157,129159,129161,129163,129165],{"class":39,"line":227},[37,129156,129097],{"class":61},[37,129158,51773],{"class":50},[37,129160,1210],{"class":61},[37,129162,51828],{"class":54},[37,129164,17485],{"class":61},[37,129166,1669],{"class":50},[37,129168,129169],{"class":39,"line":232},[37,129170,1941],{"class":50},[14,129172,129173],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[661,129175,129176,129184],{},[664,129177,129178],{},[667,129179,129180,129182],{},[670,129181,128950],{"align":24077},[670,129183,26211],{"align":24077},[708,129185,129186,129193],{},[667,129187,129188,129190],{},[713,129189,52304],{"align":24077},[713,129191,129192],{"align":24077},"百分数|由浮点数和单位标识符组成的长度值",[667,129194,129195,129198],{},[713,129196,129197],{"align":24077},"position",[713,129199,129200],{"align":24077},"top|center|bottom|left|center|right 方位名词",[14,129202,129203],{},"其他说明：",[14,129205,129206],{},"①参数是方位名词",[14,129208,129209],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,129211,129212],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,129214,129215],{},"②参数是精确单位",[14,129217,129218],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,129220,129221],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,129223,129224],{},"③参数是混合单位",[14,129226,129227],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[498,129229,129231],{"id":129230},"_825-背景图片固定","8.2.5 背景图片固定",[27,129233,129235],{"className":126837,"code":129234,"language":126839,"meta":32,"style":32},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[34,129236,129237,129242,129248,129260,129264,129269,129275,129285],{"__ignoreMap":32},[37,129238,129239],{"class":39,"line":40},[37,129240,129241],{"class":43},"\u002F* 背景滚动（默认） *\u002F\n",[37,129243,129244,129246],{"class":39,"line":47},[37,129245,51947],{"class":51636},[37,129247,15913],{"class":50},[37,129249,129250,129253,129255,129258],{"class":39,"line":104},[37,129251,129252],{"class":61},"  background-attachment",[37,129254,51773],{"class":50},[37,129256,129257],{"class":61},"scroll",[37,129259,1669],{"class":50},[37,129261,129262],{"class":39,"line":113},[37,129263,1941],{"class":50},[37,129265,129266],{"class":39,"line":189},[37,129267,129268],{"class":43},"\u002F* 背景固定 *\u002F\n",[37,129270,129271,129273],{"class":39,"line":195},[37,129272,51947],{"class":51636},[37,129274,15913],{"class":50},[37,129276,129277,129279,129281,129283],{"class":39,"line":201},[37,129278,129252],{"class":61},[37,129280,51773],{"class":50},[37,129282,86568],{"class":61},[37,129284,1669],{"class":50},[37,129286,129287],{"class":39,"line":207},[37,129288,1941],{"class":50},[661,129290,129291,129300],{},[664,129292,129293],{},[667,129294,129295,129298],{},[670,129296,129297],{"align":24077},"参数",[670,129299,102981],{"align":24077},[708,129301,129302,129309],{},[667,129303,129304,129306],{},[713,129305,129257],{"align":24077},[713,129307,129308],{"align":24077},"背景图像是随对象内容滚动",[667,129310,129311,129313],{},[713,129312,86568],{"align":24077},[713,129314,129315],{"align":24077},"背景图像固定",[498,129317,129319],{"id":129318},"_826-背景样式合写","8.2.6 背景样式合写",[27,129321,129323],{"className":126837,"code":129322,"language":126839,"meta":32,"style":32},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[34,129324,129325,129330,129336,129364],{"__ignoreMap":32},[37,129326,129327],{"class":39,"line":40},[37,129328,129329],{"class":43},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[37,129331,129332,129334],{"class":39,"line":47},[37,129333,51947],{"class":51636},[37,129335,15913],{"class":50},[37,129337,129338,129340,129342,129344,129347,129349,129351,129353,129355,129358,129360,129362],{"class":39,"line":104},[37,129339,70947],{"class":61},[37,129341,51773],{"class":50},[37,129343,61178],{"class":61},[37,129345,129346],{"class":61}," url",[37,129348,165],{"class":50},[37,129350,128935],{"class":159},[37,129352,14055],{"class":50},[37,129354,62072],{"class":61},[37,129356,129357],{"class":61}," fixed",[37,129359,17485],{"class":61},[37,129361,129104],{"class":61},[37,129363,1669],{"class":50},[37,129365,129366],{"class":39,"line":113},[37,129367,1941],{"class":50},[498,129369,129371],{"id":129370},"_827-背景色半透明","8.2.7 背景色半透明",[27,129373,129375],{"className":126837,"code":129374,"language":126839,"meta":32,"style":32},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[34,129376,129377,129383,129409],{"__ignoreMap":32},[37,129378,129379,129381],{"class":39,"line":40},[37,129380,51947],{"class":51636},[37,129382,15913],{"class":50},[37,129384,129385,129387,129389,129391,129393,129395,129397,129399,129401,129403,129405,129407],{"class":39,"line":47},[37,129386,70947],{"class":61},[37,129388,51773],{"class":50},[37,129390,55446],{"class":61},[37,129392,165],{"class":50},[37,129394,135],{"class":61},[37,129396,12776],{"class":50},[37,129398,135],{"class":61},[37,129400,12776],{"class":50},[37,129402,135],{"class":61},[37,129404,12776],{"class":50},[37,129406,100806],{"class":61},[37,129408,3069],{"class":50},[37,129410,129411],{"class":39,"line":104},[37,129412,1941],{"class":50},[14,129414,99681],{},[14,129416,129417],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129419,129420],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129422,129423],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129425,129426],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[498,129428,129430],{"id":129429},"_828-总结","8.2.8 总结",[661,129432,129433,129444],{},[664,129434,129435],{},[667,129436,129437,129440,129442],{},[670,129438,129439],{"align":24077},"属性",[670,129441,102981],{"align":24077},[670,129443,676],{"align":24077},[708,129445,129446,129457,129468,129479,129490,129501,129512],{},[667,129447,129448,129451,129454],{},[713,129449,129450],{"align":24077},"background-color",[713,129452,129453],{"align":24077},"背景颜色",[713,129455,129456],{"align":24077},"预定义的颜色值\u002F十六进制\u002FRGB代码",[667,129458,129459,129462,129465],{},[713,129460,129461],{"align":24077},"background-image",[713,129463,129464],{"align":24077},"背景图片",[713,129466,129467],{"align":24077},"url(图片路径)",[667,129469,129470,129473,129476],{},[713,129471,129472],{"align":24077},"background-repeat",[713,129474,129475],{"align":24077},"是否平铺",[713,129477,129478],{"align":24077},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[667,129480,129481,129484,129487],{},[713,129482,129483],{"align":24077},"background-position",[713,129485,129486],{"align":24077},"背景位置",[713,129488,129489],{"align":24077},"length\u002Fposition 分别是x和y坐标",[667,129491,129492,129495,129498],{},[713,129493,129494],{"align":24077},"background-attachment",[713,129496,129497],{"align":24077},"背景附着",[713,129499,129500],{"align":24077},"scroll(背景滚动) \u002Ffixed (背景固定)",[667,129502,129503,129506,129509],{},[713,129504,129505],{"align":24077},"背景简写",[713,129507,129508],{"align":24077},"书写更简单",[713,129510,129511],{"align":24077},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[667,129513,129514,129517,129520],{},[713,129515,129516],{"align":24077},"背景半透明",[713,129518,129519],{"align":24077},"背景颜色半透明",[713,129521,129522],{"align":24077},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129524,129525],{},"颜色渐变：",[1838,129527],{"style":126693,"src":129528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1838,129530],{"style":126693,"src":129531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[498,129533,129535],{"id":129534},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[27,129537,129539],{"className":127584,"code":129538,"language":127586,"meta":32,"style":32},"\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",[34,129540,129541,129556,129575,129594,129613,129632,129651],{"__ignoreMap":32},[37,129542,129543,129545,129547,129549,129551,129554],{"class":39,"line":40},[37,129544,1418],{"class":50},[37,129546,51947],{"class":51636},[37,129548,53822],{"class":2320},[37,129550,55],{"class":50},[37,129552,129553],{"class":185},"\"nav\"",[37,129555,51643],{"class":50},[37,129557,129558,129560,129562,129564,129566,129568,129571,129573],{"class":39,"line":47},[37,129559,52480],{"class":50},[37,129561,51],{"class":51636},[37,129563,61393],{"class":2320},[37,129565,55],{"class":50},[37,129567,61398],{"class":185},[37,129569,129570],{"class":50},">五彩导航1\u003C\u002F",[37,129572,51],{"class":51636},[37,129574,51643],{"class":50},[37,129576,129577,129579,129581,129583,129585,129587,129590,129592],{"class":39,"line":104},[37,129578,52480],{"class":50},[37,129580,51],{"class":51636},[37,129582,61393],{"class":2320},[37,129584,55],{"class":50},[37,129586,61398],{"class":185},[37,129588,129589],{"class":50},">五彩导航2\u003C\u002F",[37,129591,51],{"class":51636},[37,129593,51643],{"class":50},[37,129595,129596,129598,129600,129602,129604,129606,129609,129611],{"class":39,"line":113},[37,129597,52480],{"class":50},[37,129599,51],{"class":51636},[37,129601,61393],{"class":2320},[37,129603,55],{"class":50},[37,129605,61398],{"class":185},[37,129607,129608],{"class":50},">五彩导航3\u003C\u002F",[37,129610,51],{"class":51636},[37,129612,51643],{"class":50},[37,129614,129615,129617,129619,129621,129623,129625,129628,129630],{"class":39,"line":189},[37,129616,52480],{"class":50},[37,129618,51],{"class":51636},[37,129620,61393],{"class":2320},[37,129622,55],{"class":50},[37,129624,61398],{"class":185},[37,129626,129627],{"class":50},">五彩导航4\u003C\u002F",[37,129629,51],{"class":51636},[37,129631,51643],{"class":50},[37,129633,129634,129636,129638,129640,129642,129644,129647,129649],{"class":39,"line":195},[37,129635,52480],{"class":50},[37,129637,51],{"class":51636},[37,129639,61393],{"class":2320},[37,129641,55],{"class":50},[37,129643,61398],{"class":185},[37,129645,129646],{"class":50},">五彩导航5\u003C\u002F",[37,129648,51],{"class":51636},[37,129650,51643],{"class":50},[37,129652,129653,129655,129657],{"class":39,"line":201},[37,129654,52121],{"class":50},[37,129656,51947],{"class":51636},[37,129658,51643],{"class":50},[27,129660,129662],{"className":126837,"code":129661,"language":126839,"meta":32,"style":32},".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",[34,129663,129664,129673,129683,129695,129707,129717,129729,129739,129743,129768,129791,129814,129837],{"__ignoreMap":32},[37,129665,129666,129669,129671],{"class":39,"line":40},[37,129667,129668],{"class":2320},".nav",[37,129670,1774],{"class":51636},[37,129672,15913],{"class":50},[37,129674,129675,129677,129679,129681],{"class":39,"line":47},[37,129676,128453],{"class":61},[37,129678,51773],{"class":50},[37,129680,72719],{"class":61},[37,129682,1669],{"class":50},[37,129684,129685,129687,129689,129691,129693],{"class":39,"line":104},[37,129686,70904],{"class":61},[37,129688,51773],{"class":50},[37,129690,1326],{"class":61},[37,129692,51828],{"class":54},[37,129694,1669],{"class":50},[37,129696,129697,129699,129701,129703,129705],{"class":39,"line":113},[37,129698,71124],{"class":61},[37,129700,51773],{"class":50},[37,129702,1365],{"class":61},[37,129704,51828],{"class":54},[37,129706,1669],{"class":50},[37,129708,129709,129711,129713,129715],{"class":39,"line":189},[37,129710,70862],{"class":61},[37,129712,51773],{"class":50},[37,129714,51928],{"class":61},[37,129716,1669],{"class":50},[37,129718,129719,129721,129723,129725,129727],{"class":39,"line":195},[37,129720,127521],{"class":61},[37,129722,51773],{"class":50},[37,129724,1365],{"class":61},[37,129726,51828],{"class":54},[37,129728,1669],{"class":50},[37,129730,129731,129733,129735,129737],{"class":39,"line":201},[37,129732,71241],{"class":61},[37,129734,51773],{"class":50},[37,129736,61178],{"class":61},[37,129738,1669],{"class":50},[37,129740,129741],{"class":39,"line":207},[37,129742,1941],{"class":50},[37,129744,129745,129747,129749,129752,129754,129756,129759,129761,129763,129765],{"class":39,"line":213},[37,129746,129668],{"class":2320},[37,129748,1774],{"class":51636},[37,129750,129751],{"class":2320},":nth-child",[37,129753,165],{"class":50},[37,129755,332],{"class":61},[37,129757,129758],{"class":50},") { ",[37,129760,129450],{"class":61},[37,129762,51773],{"class":50},[37,129764,128868],{"class":61},[37,129766,129767],{"class":50},"; }\n",[37,129769,129770,129772,129774,129776,129778,129780,129782,129784,129786,129789],{"class":39,"line":218},[37,129771,129668],{"class":2320},[37,129773,1774],{"class":51636},[37,129775,129751],{"class":2320},[37,129777,165],{"class":50},[37,129779,602],{"class":61},[37,129781,129758],{"class":50},[37,129783,129450],{"class":61},[37,129785,51773],{"class":50},[37,129787,129788],{"class":61},"#ff0000",[37,129790,129767],{"class":50},[37,129792,129793,129795,129797,129799,129801,129803,129805,129807,129809,129812],{"class":39,"line":227},[37,129794,129668],{"class":2320},[37,129796,1774],{"class":51636},[37,129798,129751],{"class":2320},[37,129800,165],{"class":50},[37,129802,62],{"class":61},[37,129804,129758],{"class":50},[37,129806,129450],{"class":61},[37,129808,51773],{"class":50},[37,129810,129811],{"class":61},"#00a4ff",[37,129813,129767],{"class":50},[37,129815,129816,129818,129820,129822,129824,129826,129828,129830,129832,129835],{"class":39,"line":232},[37,129817,129668],{"class":2320},[37,129819,1774],{"class":51636},[37,129821,129751],{"class":2320},[37,129823,165],{"class":50},[37,129825,168],{"class":61},[37,129827,129758],{"class":50},[37,129829,129450],{"class":61},[37,129831,51773],{"class":50},[37,129833,129834],{"class":61},"#ff00ff",[37,129836,129767],{"class":50},[37,129838,129839,129841,129843,129845,129847,129849,129851,129853,129855,129858],{"class":39,"line":238},[37,129840,129668],{"class":2320},[37,129842,1774],{"class":51636},[37,129844,129751],{"class":2320},[37,129846,165],{"class":50},[37,129848,836],{"class":61},[37,129850,129758],{"class":50},[37,129852,129450],{"class":61},[37,129854,51773],{"class":50},[37,129856,129857],{"class":61},"#00ff00",[37,129859,129767],{"class":50},[469,129861,129863],{"id":129862},"_83-css三大特性","8.3 css三大特性",[498,129865,129867],{"id":129866},"_831-层叠性","8.3.1 层叠性",[14,129869,129870],{},"为了解决样式冲突问题",[14,129872,129873],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129875,129876],{},"   ②样式不冲突，不会层叠",[498,129878,129880],{"id":129879},"_832-继承性","8.3.2 继承性",[14,129882,129883],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129885,129886],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[27,129888,129890],{"className":126837,"code":129889,"language":126839,"meta":32,"style":32},"p {\n  color: #333;\n}\n",[34,129891,129892,129898,129908],{"__ignoreMap":32},[37,129893,129894,129896],{"class":39,"line":40},[37,129895,14],{"class":51636},[37,129897,15913],{"class":50},[37,129899,129900,129902,129904,129906],{"class":39,"line":47},[37,129901,71241],{"class":61},[37,129903,51773],{"class":50},[37,129905,62705],{"class":61},[37,129907,1669],{"class":50},[37,129909,129910],{"class":39,"line":104},[37,129911,1941],{"class":50},[1838,129913],{"style":126693,"src":129914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129916,129917],{},"解释：①行高可以跟单位也可以不跟单位",[14,129919,129920],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129922,129923],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129925,129926],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[498,129928,129930],{"id":129929},"_833-优先级","8.3.3 优先级",[481,129932,129933,129936],{},[484,129934,129935],{},"选择器相同，则执行层叠性",[484,129937,129938],{},"选择器不同，则根据选择器权重执行",[661,129940,129941,129951],{},[664,129942,129943],{},[667,129944,129945,129948],{},[670,129946,129947],{"align":24077},"选择器",[670,129949,129950],{"align":24077},"选择器权重",[708,129952,129953,129961,129969,129977,129985,129993],{},[667,129954,129955,129958],{},[713,129956,129957],{"align":24077},"继承 或者*",[713,129959,129960],{"align":24077},"0，0，0，0",[667,129962,129963,129966],{},[713,129964,129965],{"align":24077},"标签选择器",[713,129967,129968],{"align":24077},"0，0，0，1",[667,129970,129971,129974],{},[713,129972,129973],{"align":24077},"类选择器，伪类选择器",[713,129975,129976],{"align":24077},"0，0，1，0",[667,129978,129979,129982],{},[713,129980,129981],{"align":24077},"ID选择器",[713,129983,129984],{"align":24077},"0，1，0，0",[667,129986,129987,129990],{},[713,129988,129989],{"align":24077},"行内样式",[713,129991,129992],{"align":24077},"1，0，0，0",[667,129994,129995,129998],{},[713,129996,129997],{"align":24077},"！important",[713,129999,130000],{"align":24077},"无穷大",[14,130002,130003],{},"! important用法：",[27,130005,130007],{"className":126837,"code":130006,"language":126839,"meta":32,"style":32},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[34,130008,130009,130014,130020,130033,130037,130042,130048,130058],{"__ignoreMap":32},[37,130010,130011],{"class":39,"line":40},[37,130012,130013],{"class":43},"\u002F* !important 拥有最高优先级 *\u002F\n",[37,130015,130016,130018],{"class":39,"line":47},[37,130017,51947],{"class":51636},[37,130019,15913],{"class":50},[37,130021,130022,130024,130026,130028,130031],{"class":39,"line":104},[37,130023,71241],{"class":61},[37,130025,51773],{"class":50},[37,130027,51981],{"class":61},[37,130029,130030],{"class":54}," !important",[37,130032,1669],{"class":50},[37,130034,130035],{"class":39,"line":113},[37,130036,1941],{"class":50},[37,130038,130039],{"class":39,"line":189},[37,130040,130041],{"class":43},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[37,130043,130044,130046],{"class":39,"line":195},[37,130045,51947],{"class":51636},[37,130047,15913],{"class":50},[37,130049,130050,130052,130054,130056],{"class":39,"line":201},[37,130051,71241],{"class":61},[37,130053,51773],{"class":50},[37,130055,57757],{"class":61},[37,130057,1669],{"class":50},[37,130059,130060],{"class":39,"line":207},[37,130061,1941],{"class":50},[14,130063,130064],{},"优先级注意点：",[14,130066,130067],{},"①权重是有4组数字组成,但是不会有进位",[14,130069,130070],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,130072,130073],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,130075,130076],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,130078,130079],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,130081,130082],{},"⑥复合选择器",[661,130084,130085,130095],{},[664,130086,130087],{},[667,130088,130089,130092],{},[670,130090,130091],{"align":24077},"div ul li",[670,130093,130094],{"align":24077},"0,0,0,3",[708,130096,130097,130105,130113],{},[667,130098,130099,130102],{},[713,130100,130101],{"align":24077},".nav ul li",[713,130103,130104],{"align":24077},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[667,130106,130107,130110],{},[713,130108,130109],{"align":24077},"a:hover",[713,130111,130112],{"align":24077},"0,0,1,1",[667,130114,130115,130118],{},[713,130116,130117],{"align":24077},".nav a",[713,130119,130112],{"align":24077},[446,130121,130122],{},"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":32,"searchDepth":47,"depth":47,"links":130124},[130125,130133,130144],{"id":128233,"depth":47,"text":128234,"children":130126},[130127,130128,130129,130130,130131,130132],{"id":128246,"depth":104,"text":128247},{"id":128318,"depth":104,"text":128319},{"id":128390,"depth":104,"text":128391},{"id":128421,"depth":104,"text":128422},{"id":128428,"depth":104,"text":128429},{"id":128581,"depth":104,"text":128582},{"id":128889,"depth":47,"text":128890,"children":130134},[130135,130136,130137,130138,130139,130140,130141,130142,130143],{"id":128896,"depth":104,"text":128897},{"id":128906,"depth":104,"text":128907},{"id":129002,"depth":104,"text":129003},{"id":129075,"depth":104,"text":129076},{"id":129230,"depth":104,"text":129231},{"id":129318,"depth":104,"text":129319},{"id":129370,"depth":104,"text":129371},{"id":129429,"depth":104,"text":129430},{"id":129534,"depth":104,"text":129535},{"id":129862,"depth":47,"text":129863,"children":130145},[130146,130147,130148],{"id":129866,"depth":104,"text":129867},{"id":129879,"depth":104,"text":129880},{"id":129929,"depth":104,"text":129930},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128225,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130155,"title":130156,"body":130157,"description":451,"extension":452,"meta":131747,"navigation":454,"path":131748,"seo":131749,"stem":131750,"__hash__":131751},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130158,"toc":131726},[130159,130162,130166,130169,130172,130175,130178,130181,130184,130187,130191,130199,130236,130272,130275,130289,130294,130328,130331,130424,130429,130432,130462,130465,130470,130478,130482,130489,130535,130579,130584,130587,130590,130593,130596,130599,130602,130604,130607,130611,130616,130660,130665,130668,130671,130708,130713,130716,130719,130722,130725,130757,130760,130763,130766,130798,130801,130804,130807,130811,130814,130846,130849,130853,130873,130876,130884,130887,130891,130896,130899,130931,130936,130939,130977,130981,130986,130989,130992,131023,131026,131043,131048,131100,131160,131165,131219,131257,131261,131265,131268,131272,131280,131283,131285,131296,131301,131349,131383,131386,131389,131392,131395,131439,131442,131445,131448,131451,131454,131457,131501,131504,131507,131510,131513,131516,131519,131525,131528,131572,131575,131578,131581,131584,131587,131631,131634,131636,131639,131643,131647,131685,131689,131692,131695,131699,131707,131711,131714,131717,131720,131723],[10,130160,130156],{"id":130161},"_9-css盒模型浮动与切图",[469,130163,130165],{"id":130164},"_91-盒子模型","9.1 盒子模型",[14,130167,130168],{},"利用盒子来设计网页",[14,130170,130171],{},"盒子包含：边框、外边距、内边距、实际内容",[14,130173,130174],{},"网页布局设置：",[14,130176,130177],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,130179,130180],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,130182,130183],{},"③往盒子里装内容",[1838,130185],{"style":126693,"src":130186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[498,130188,130190],{"id":130189},"_911-边框border","9.1.1 边框（border）",[481,130192,130193,130196],{},[484,130194,130195],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[484,130197,130198],{},"语法",[27,130200,130202],{"className":126837,"code":130201,"language":126839,"meta":32,"style":32},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[34,130203,130204,130209,130215,130232],{"__ignoreMap":32},[37,130205,130206],{"class":39,"line":40},[37,130207,130208],{"class":43},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[37,130210,130211,130213],{"class":39,"line":47},[37,130212,51947],{"class":51636},[37,130214,15913],{"class":50},[37,130216,130217,130219,130221,130223,130225,130227,130230],{"class":39,"line":104},[37,130218,71232],{"class":61},[37,130220,51773],{"class":50},[37,130222,332],{"class":61},[37,130224,51828],{"class":54},[37,130226,51857],{"class":61},[37,130228,130229],{"class":61}," #ccc",[37,130231,1669],{"class":50},[37,130233,130234],{"class":39,"line":113},[37,130235,1941],{"class":50},[661,130237,130238,130246],{},[664,130239,130240],{},[667,130241,130242,130244],{},[670,130243,129439],{"align":24077},[670,130245,102981],{"align":24077},[708,130247,130248,130256,130264],{},[667,130249,130250,130253],{},[713,130251,130252],{"align":24077},"border-width",[713,130254,130255],{"align":24077},"定义边框粗细，单位是px",[667,130257,130258,130261],{},[713,130259,130260],{"align":24077},"border-style",[713,130262,130263],{"align":24077},"边框的样式",[667,130265,130266,130269],{},[713,130267,130268],{"align":24077},"border-color",[713,130270,130271],{"align":24077},"边框的颜色",[14,130273,130274],{},"边框样式 border-style 可以设置如下值：",[1515,130276,130277,130280,130283,130286],{},[484,130278,130279],{},"none：没有边框即忽略所有边框的宽度（默认值）",[484,130281,130282],{},"solid：边框为单实线(最为常用的)",[484,130284,130285],{},"dashed：边框为虚线",[484,130287,130288],{},"dotted：边框为点线",[481,130290,130291],{"start":104},[484,130292,130293],{},"边框的合写分写",[27,130295,130296],{"className":126837,"code":130201,"language":126839,"meta":32,"style":32},[34,130297,130298,130302,130308,130324],{"__ignoreMap":32},[37,130299,130300],{"class":39,"line":40},[37,130301,130208],{"class":43},[37,130303,130304,130306],{"class":39,"line":47},[37,130305,51947],{"class":51636},[37,130307,15913],{"class":50},[37,130309,130310,130312,130314,130316,130318,130320,130322],{"class":39,"line":104},[37,130311,71232],{"class":61},[37,130313,51773],{"class":50},[37,130315,332],{"class":61},[37,130317,51828],{"class":54},[37,130319,51857],{"class":61},[37,130321,130229],{"class":61},[37,130323,1669],{"class":50},[37,130325,130326],{"class":39,"line":113},[37,130327,1941],{"class":50},[14,130329,130330],{},"边框分开写法：",[27,130332,130334],{"className":126837,"code":130333,"language":126839,"meta":32,"style":32},"\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",[34,130335,130336,130341,130347,130365,130383,130402,130420],{"__ignoreMap":32},[37,130337,130338],{"class":39,"line":40},[37,130339,130340],{"class":43},"\u002F* 边框分开写法 *\u002F\n",[37,130342,130343,130345],{"class":39,"line":47},[37,130344,51947],{"class":51636},[37,130346,15913],{"class":50},[37,130348,130349,130352,130354,130356,130358,130360,130363],{"class":39,"line":104},[37,130350,130351],{"class":61},"  border-top",[37,130353,51773],{"class":50},[37,130355,332],{"class":61},[37,130357,51828],{"class":54},[37,130359,51857],{"class":61},[37,130361,130362],{"class":61}," #000",[37,130364,1669],{"class":50},[37,130366,130367,130370,130372,130374,130376,130378,130381],{"class":39,"line":113},[37,130368,130369],{"class":61},"  border-right",[37,130371,51773],{"class":50},[37,130373,602],{"class":61},[37,130375,51828],{"class":54},[37,130377,62577],{"class":61},[37,130379,130380],{"class":61}," #333",[37,130382,1669],{"class":50},[37,130384,130385,130388,130390,130392,130394,130397,130400],{"class":39,"line":189},[37,130386,130387],{"class":61},"  border-bottom",[37,130389,51773],{"class":50},[37,130391,62],{"class":61},[37,130393,51828],{"class":54},[37,130395,130396],{"class":61}," dotted",[37,130398,130399],{"class":61}," #666",[37,130401,1669],{"class":50},[37,130403,130404,130407,130409,130411,130413,130415,130418],{"class":39,"line":195},[37,130405,130406],{"class":61},"  border-left",[37,130408,51773],{"class":50},[37,130410,332],{"class":61},[37,130412,51828],{"class":54},[37,130414,51857],{"class":61},[37,130416,130417],{"class":61}," #999",[37,130419,1669],{"class":50},[37,130421,130422],{"class":39,"line":201},[37,130423,1941],{"class":50},[481,130425,130426],{"start":113},[484,130427,130428],{},"表格的细线边框",[14,130430,130431],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[27,130433,130435],{"className":126837,"code":130434,"language":126839,"meta":32,"style":32},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[34,130436,130437,130442,130448,130458],{"__ignoreMap":32},[37,130438,130439],{"class":39,"line":40},[37,130440,130441],{"class":43},"\u002F* 表格细线边框合并 *\u002F\n",[37,130443,130444,130446],{"class":39,"line":47},[37,130445,661],{"class":51636},[37,130447,15913],{"class":50},[37,130449,130450,130452,130454,130456],{"class":39,"line":104},[37,130451,70914],{"class":61},[37,130453,51773],{"class":50},[37,130455,65371],{"class":61},[37,130457,1669],{"class":50},[37,130459,130460],{"class":39,"line":113},[37,130461,1941],{"class":50},[14,130463,130464],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[481,130466,130467],{"start":189},[484,130468,130469],{},"解决边框额外增加盒子的实际大小的方法：",[1515,130471,130472,130475],{},[484,130473,130474],{},"测量盒子大小的时候,不量边框",[484,130476,130477],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[498,130479,130481],{"id":130480},"_912-内边距","9.1.2 内边距",[481,130483,130484,130487],{},[484,130485,130486],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[484,130488,130198],{},[661,130490,130491,130501],{},[664,130492,130493],{},[667,130494,130495,130498],{},[670,130496,130497],{"align":24077},"值的个数",[670,130499,130500],{"align":24077},"表达意思",[708,130502,130503,130511,130519,130527],{},[667,130504,130505,130508],{},[713,130506,130507],{"align":24077},"padding: 5px;",[713,130509,130510],{"align":24077},"1个值，代表上下左右都有5个元素",[667,130512,130513,130516],{},[713,130514,130515],{"align":24077},"padding: 5px 10px;",[713,130517,130518],{"align":24077},"2个值，代表上下内边距为5像素，左右内边距为10像素",[667,130520,130521,130524],{},[713,130522,130523],{"align":24077},"padding: 5px 10px 20px;",[713,130525,130526],{"align":24077},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[667,130528,130529,130532],{},[713,130530,130531],{"align":24077},"padding: 5px 10px 20px 30px;",[713,130533,130534],{"align":24077},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[661,130536,130537,130545],{},[664,130538,130539],{},[667,130540,130541,130543],{},[670,130542,129439],{"align":24077},[670,130544,102981],{"align":24077},[708,130546,130547,130555,130563,130571],{},[667,130548,130549,130552],{},[713,130550,130551],{"align":24077},"padding-left",[713,130553,130554],{"align":24077},"左内边距",[667,130556,130557,130560],{},[713,130558,130559],{"align":24077},"padding-right",[713,130561,130562],{"align":24077},"右内边距",[667,130564,130565,130568],{},[713,130566,130567],{"align":24077},"padding-top",[713,130569,130570],{"align":24077},"上内边距",[667,130572,130573,130576],{},[713,130574,130575],{"align":24077},"padding-bottom",[713,130577,130578],{"align":24077},"下内边距",[481,130580,130581],{"start":104},[484,130582,130583],{},"内边距会影响盒子的实际大小",[14,130585,130586],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130588,130589],{},"①内容和边框有了距离，添加了内边距",[14,130591,130592],{},"②padding影响了盒子实际大小",[14,130594,130595],{},"内边距对盒子大小的影响：",[14,130597,130598],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130600,130601],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130603,95505],{},[14,130605,130606],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[498,130608,130610],{"id":130609},"_913-外边距","9.1.3 外边距",[481,130612,130613],{},[484,130614,130615],{},"控制盒子与盒子之间的距离",[661,130617,130618,130626],{},[664,130619,130620],{},[667,130621,130622,130624],{},[670,130623,129439],{"align":24077},[670,130625,102981],{"align":24077},[708,130627,130628,130636,130644,130652],{},[667,130629,130630,130633],{},[713,130631,130632],{"align":24077},"margin-left",[713,130634,130635],{"align":24077},"左外边距",[667,130637,130638,130641],{},[713,130639,130640],{"align":24077},"margin-right",[713,130642,130643],{"align":24077},"右外边距",[667,130645,130646,130649],{},[713,130647,130648],{"align":24077},"margin-top",[713,130650,130651],{"align":24077},"上外边距",[667,130653,130654,130657],{},[713,130655,130656],{"align":24077},"margin-bottom",[713,130658,130659],{"align":24077},"下外边距",[481,130661,130662],{"start":47},[484,130663,130664],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130666,130667],{},"①盒子必须指定了宽度（width）",[14,130669,130670],{},"②盒子左右的外边距都设置为 auto",[27,130672,130674],{"className":126837,"code":130673,"language":126839,"meta":32,"style":32},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[34,130675,130676,130681,130688,130704],{"__ignoreMap":32},[37,130677,130678],{"class":39,"line":40},[37,130679,130680],{"class":43},"\u002F* margin 复合写法（同上） *\u002F\n",[37,130682,130683,130686],{"class":39,"line":47},[37,130684,130685],{"class":2320},".box",[37,130687,15913],{"class":50},[37,130689,130690,130692,130694,130696,130698,130701],{"class":39,"line":104},[37,130691,70806],{"class":61},[37,130693,51773],{"class":50},[37,130695,135],{"class":61},[37,130697,51892],{"class":61},[37,130699,130700],{"class":50},";  ",[37,130702,130703],{"class":43},"\u002F* 块级盒子水平居中 *\u002F\n",[37,130705,130706],{"class":39,"line":113},[37,130707,1941],{"class":50},[481,130709,130710],{"start":104},[484,130711,130712],{},"外边距塌陷问题",[14,130714,130715],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1838,130717],{"style":126693,"src":130718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130720,130721],{},"解决方案：",[14,130723,130724],{},"①可以为父亲元素定义上边距",[27,130726,130727],{"className":126837,"code":130673,"language":126839,"meta":32,"style":32},[34,130728,130729,130733,130739,130753],{"__ignoreMap":32},[37,130730,130731],{"class":39,"line":40},[37,130732,130680],{"class":43},[37,130734,130735,130737],{"class":39,"line":47},[37,130736,130685],{"class":2320},[37,130738,15913],{"class":50},[37,130740,130741,130743,130745,130747,130749,130751],{"class":39,"line":104},[37,130742,70806],{"class":61},[37,130744,51773],{"class":50},[37,130746,135],{"class":61},[37,130748,51892],{"class":61},[37,130750,130700],{"class":50},[37,130752,130703],{"class":43},[37,130754,130755],{"class":39,"line":113},[37,130756,1941],{"class":50},[14,130758,130759],{},"②可以为父亲元素定义上内边距",[14,130761,130762],{},"③可以为父亲元素添加overflow:hidden",[1838,130764],{"style":126693,"src":130765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[27,130767,130768],{"className":126837,"code":130673,"language":126839,"meta":32,"style":32},[34,130769,130770,130774,130780,130794],{"__ignoreMap":32},[37,130771,130772],{"class":39,"line":40},[37,130773,130680],{"class":43},[37,130775,130776,130778],{"class":39,"line":47},[37,130777,130685],{"class":2320},[37,130779,15913],{"class":50},[37,130781,130782,130784,130786,130788,130790,130792],{"class":39,"line":104},[37,130783,70806],{"class":61},[37,130785,51773],{"class":50},[37,130787,135],{"class":61},[37,130789,51892],{"class":61},[37,130791,130700],{"class":50},[37,130793,130703],{"class":43},[37,130795,130796],{"class":39,"line":113},[37,130797,1941],{"class":50},[1838,130799],{"style":126693,"src":130800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130802,130803],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130805,130806],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[498,130808,130810],{"id":130809},"_914-清除内外边距","9.1.4 清除内外边距",[14,130812,130813],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[27,130815,130816],{"className":126837,"code":130673,"language":126839,"meta":32,"style":32},[34,130817,130818,130822,130828,130842],{"__ignoreMap":32},[37,130819,130820],{"class":39,"line":40},[37,130821,130680],{"class":43},[37,130823,130824,130826],{"class":39,"line":47},[37,130825,130685],{"class":2320},[37,130827,15913],{"class":50},[37,130829,130830,130832,130834,130836,130838,130840],{"class":39,"line":104},[37,130831,70806],{"class":61},[37,130833,51773],{"class":50},[37,130835,135],{"class":61},[37,130837,51892],{"class":61},[37,130839,130700],{"class":50},[37,130841,130703],{"class":43},[37,130843,130844],{"class":39,"line":113},[37,130845,1941],{"class":50},[14,130847,130848],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[498,130850,130852],{"id":130851},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1515,130854,130855,130858,130861,130864,130867,130870],{},[484,130856,130857],{},"文件→打开 ：可以打开我们要测量的图片",[484,130859,130860],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[484,130862,130863],{},"右击标尺，把里面的单位改为像素",[484,130865,130866],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[484,130868,130869],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[484,130871,130872],{},"用选区拖动 可以测量大小",[1838,130874],{"style":126693,"src":130875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1515,130877,130878,130881],{},[484,130879,130880],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[484,130882,130883],{},"吸管取色工具",[1838,130885],{"style":126693,"src":130886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[498,130888,130890],{"id":130889},"_916-案例","9.1.6 案例",[481,130892,130893],{},[484,130894,130895],{},"小米商品",[1838,130897],{"style":126693,"src":130898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[27,130900,130901],{"className":126837,"code":130673,"language":126839,"meta":32,"style":32},[34,130902,130903,130907,130913,130927],{"__ignoreMap":32},[37,130904,130905],{"class":39,"line":40},[37,130906,130680],{"class":43},[37,130908,130909,130911],{"class":39,"line":47},[37,130910,130685],{"class":2320},[37,130912,15913],{"class":50},[37,130914,130915,130917,130919,130921,130923,130925],{"class":39,"line":104},[37,130916,70806],{"class":61},[37,130918,51773],{"class":50},[37,130920,135],{"class":61},[37,130922,51892],{"class":61},[37,130924,130700],{"class":50},[37,130926,130703],{"class":43},[37,130928,130929],{"class":39,"line":113},[37,130930,1941],{"class":50},[481,130932,130933],{"start":47},[484,130934,130935],{},"快报模块",[1838,130937],{"style":126693,"src":130938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[27,130940,130942],{"className":127584,"code":130941,"language":127586,"meta":32,"style":32},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[34,130943,130944,130949,130964,130969],{"__ignoreMap":32},[37,130945,130946],{"class":39,"line":40},[37,130947,130948],{"class":43},"\u003C!-- HTML 代码示例 -->\n",[37,130950,130951,130953,130955,130957,130959,130962],{"class":39,"line":47},[37,130952,1418],{"class":50},[37,130954,51947],{"class":51636},[37,130956,53822],{"class":2320},[37,130958,55],{"class":50},[37,130960,130961],{"class":185},"\"example\"",[37,130963,51643],{"class":50},[37,130965,130966],{"class":39,"line":104},[37,130967,130968],{"class":50},"  示例内容\n",[37,130970,130971,130973,130975],{"class":39,"line":113},[37,130972,52121],{"class":50},[37,130974,51947],{"class":51636},[37,130976,51643],{"class":50},[498,130978,130980],{"id":130979},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[481,130982,130983],{},[484,130984,130985],{},"圆角边框",[14,130987,130988],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1838,130990],{"style":126693,"src":130991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[27,130993,130995],{"className":126837,"code":130994,"language":126839,"meta":32,"style":32},"div {\n  border: 1px solid #ccc;\n}\n",[34,130996,130997,131003,131019],{"__ignoreMap":32},[37,130998,130999,131001],{"class":39,"line":40},[37,131000,51947],{"class":51636},[37,131002,15913],{"class":50},[37,131004,131005,131007,131009,131011,131013,131015,131017],{"class":39,"line":47},[37,131006,71232],{"class":61},[37,131008,51773],{"class":50},[37,131010,332],{"class":61},[37,131012,51828],{"class":54},[37,131014,51857],{"class":61},[37,131016,130229],{"class":61},[37,131018,1669],{"class":50},[37,131020,131021],{"class":39,"line":104},[37,131022,1941],{"class":50},[14,131024,131025],{},"解释:",[1515,131027,131028,131031,131034,131037,131040],{},[484,131029,131030],{},"参数值可以为数值或百分比的形式",[484,131032,131033],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[484,131035,131036],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[484,131038,131039],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[484,131041,131042],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[481,131044,131045],{"start":47},[484,131046,131047],{},"盒子阴影",[27,131049,131051],{"className":126837,"code":131050,"language":126839,"meta":32,"style":32},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[34,131052,131053,131059,131096],{"__ignoreMap":32},[37,131054,131055,131057],{"class":39,"line":40},[37,131056,51947],{"class":51636},[37,131058,15913],{"class":50},[37,131060,131061,131064,131066,131068,131070,131072,131074,131076,131078,131080,131082,131084,131086,131088,131090,131092,131094],{"class":39,"line":47},[37,131062,131063],{"class":61},"  box-shadow",[37,131065,51773],{"class":50},[37,131067,135],{"class":61},[37,131069,15096],{"class":61},[37,131071,51828],{"class":54},[37,131073,2395],{"class":61},[37,131075,51828],{"class":54},[37,131077,79102],{"class":61},[37,131079,165],{"class":50},[37,131081,135],{"class":61},[37,131083,12776],{"class":50},[37,131085,135],{"class":61},[37,131087,12776],{"class":50},[37,131089,135],{"class":61},[37,131091,12776],{"class":50},[37,131093,86545],{"class":61},[37,131095,3069],{"class":50},[37,131097,131098],{"class":39,"line":104},[37,131099,1941],{"class":50},[661,131101,131102,131110],{},[664,131103,131104],{},[667,131105,131106,131108],{},[670,131107,676],{"align":24077},[670,131109,27831],{"align":24077},[708,131111,131112,131120,131128,131136,131144,131152],{},[667,131113,131114,131117],{},[713,131115,131116],{"align":24077},"h-shadow",[713,131118,131119],{"align":24077},"必需,水平阴影的位置,允许负值",[667,131121,131122,131125],{},[713,131123,131124],{"align":24077},"v-shadow",[713,131126,131127],{"align":24077},"必需,垂直阴影的位置,允许负值",[667,131129,131130,131133],{},[713,131131,131132],{"align":24077},"blur",[713,131134,131135],{"align":24077},"可选,模糊距离,就是影子的虚实",[667,131137,131138,131141],{},[713,131139,131140],{"align":24077},"spread",[713,131142,131143],{"align":24077},"可选,阴影尺寸",[667,131145,131146,131149],{},[713,131147,131148],{"align":24077},"color",[713,131150,131151],{"align":24077},"可选,阴影的颜色",[667,131153,131154,131157],{},[713,131155,131156],{"align":24077},"inset",[713,131158,131159],{"align":24077},"可选,将外部阴影(outset)改为内部阴影",[481,131161,131162],{"start":104},[484,131163,131164],{},"文字阴影",[27,131166,131168],{"className":126837,"code":131167,"language":126839,"meta":32,"style":32},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[34,131169,131170,131176,131215],{"__ignoreMap":32},[37,131171,131172,131174],{"class":39,"line":40},[37,131173,14],{"class":51636},[37,131175,15913],{"class":50},[37,131177,131178,131181,131183,131185,131187,131189,131191,131193,131195,131197,131199,131201,131203,131205,131207,131209,131211,131213],{"class":39,"line":47},[37,131179,131180],{"class":61},"  text-shadow",[37,131182,51773],{"class":50},[37,131184,332],{"class":61},[37,131186,51828],{"class":54},[37,131188,25460],{"class":61},[37,131190,51828],{"class":54},[37,131192,15096],{"class":61},[37,131194,51828],{"class":54},[37,131196,79102],{"class":61},[37,131198,165],{"class":50},[37,131200,135],{"class":61},[37,131202,12776],{"class":50},[37,131204,135],{"class":61},[37,131206,12776],{"class":50},[37,131208,135],{"class":61},[37,131210,12776],{"class":50},[37,131212,100806],{"class":61},[37,131214,3069],{"class":50},[37,131216,131217],{"class":39,"line":104},[37,131218,1941],{"class":50},[661,131220,131221,131229],{},[664,131222,131223],{},[667,131224,131225,131227],{},[670,131226,676],{"align":24077},[670,131228,27831],{"align":24077},[708,131230,131231,131237,131244,131251],{},[667,131232,131233,131235],{},[713,131234,131116],{"align":24077},[713,131236,131119],{"align":24077},[667,131238,131239,131241],{},[713,131240,131124],{"align":24077},[713,131242,131243],{"align":24077},"必需,垂直阴影位置,允许负值",[667,131245,131246,131248],{},[713,131247,131132],{"align":24077},[713,131249,131250],{"align":24077},"可选,模糊的距离",[667,131252,131253,131255],{},[713,131254,131148],{"align":24077},[713,131256,131151],{"align":24077},[469,131258,131260],{"id":131259},"_92-浮动","9.2 浮动",[498,131262,131264],{"id":131263},"_921-浮动介绍","9.2.1 浮动介绍",[14,131266,131267],{},"在16.2中详细介绍",[498,131269,131271],{"id":131270},"_922-清除浮动","9.2.2 清除浮动",[481,131273,131274,131277],{},[484,131275,131276],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[484,131278,131279],{},"清除浮动的本质",[14,131281,131282],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131284,9366],{},[1515,131286,131287,131290,131293],{},[484,131288,131289],{},"如果父盒子本身有高度，则不需要清除浮动",[484,131291,131292],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[484,131294,131295],{},"父级有了高度，就不会影响下面的标准流了",[481,131297,131298],{"start":104},[484,131299,131300],{},"清除浮动样式",[27,131302,131304],{"className":126837,"code":131303,"language":126839,"meta":32,"style":32},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[34,131305,131306,131313,131324,131328,131335,131345],{"__ignoreMap":32},[37,131307,131308,131311],{"class":39,"line":40},[37,131309,131310],{"class":2320},".left",[37,131312,15913],{"class":50},[37,131314,131315,131318,131320,131322],{"class":39,"line":47},[37,131316,131317],{"class":61},"  float",[37,131319,51773],{"class":50},[37,131321,24077],{"class":61},[37,131323,1669],{"class":50},[37,131325,131326],{"class":39,"line":104},[37,131327,1941],{"class":50},[37,131329,131330,131333],{"class":39,"line":113},[37,131331,131332],{"class":2320},".right",[37,131334,15913],{"class":50},[37,131336,131337,131339,131341,131343],{"class":39,"line":189},[37,131338,131317],{"class":61},[37,131340,51773],{"class":50},[37,131342,72858],{"class":61},[37,131344,1669],{"class":50},[37,131346,131347],{"class":39,"line":195},[37,131348,1941],{"class":50},[661,131350,131351,131359],{},[664,131352,131353],{},[667,131354,131355,131357],{},[670,131356,127301],{"align":24077},[670,131358,27831],{"align":24077},[708,131360,131361,131368,131375],{},[667,131362,131363,131365],{},[713,131364,24077],{"align":24077},[713,131366,131367],{"align":24077},"不允许左侧有浮动元素（清除左侧浮动的影响）",[667,131369,131370,131372],{},[713,131371,72858],{"align":24077},[713,131373,131374],{"align":24077},"不允许右侧有浮动元素（清除右侧浮动的影响）",[667,131376,131377,131380],{},[713,131378,131379],{"align":24077},"both",[713,131381,131382],{"align":24077},"同时清除左右侧浮动的影响",[14,131384,131385],{},"法一",[14,131387,131388],{},"额外标签法也称为隔墙法",[14,131390,131391],{},"使用方式：",[14,131393,131394],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[27,131396,131397],{"className":126837,"code":131303,"language":126839,"meta":32,"style":32},[34,131398,131399,131405,131415,131419,131425,131435],{"__ignoreMap":32},[37,131400,131401,131403],{"class":39,"line":40},[37,131402,131310],{"class":2320},[37,131404,15913],{"class":50},[37,131406,131407,131409,131411,131413],{"class":39,"line":47},[37,131408,131317],{"class":61},[37,131410,51773],{"class":50},[37,131412,24077],{"class":61},[37,131414,1669],{"class":50},[37,131416,131417],{"class":39,"line":104},[37,131418,1941],{"class":50},[37,131420,131421,131423],{"class":39,"line":113},[37,131422,131332],{"class":2320},[37,131424,15913],{"class":50},[37,131426,131427,131429,131431,131433],{"class":39,"line":189},[37,131428,131317],{"class":61},[37,131430,51773],{"class":50},[37,131432,72858],{"class":61},[37,131434,1669],{"class":50},[37,131436,131437],{"class":39,"line":195},[37,131438,1941],{"class":50},[14,131440,131441],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131443,131444],{},"优点： 通俗易懂，书写方便",[14,131446,131447],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131449,131450],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131452,131453],{},"法二",[14,131455,131456],{},"父级添加overflow属性",[27,131458,131459],{"className":126837,"code":131303,"language":126839,"meta":32,"style":32},[34,131460,131461,131467,131477,131481,131487,131497],{"__ignoreMap":32},[37,131462,131463,131465],{"class":39,"line":40},[37,131464,131310],{"class":2320},[37,131466,15913],{"class":50},[37,131468,131469,131471,131473,131475],{"class":39,"line":47},[37,131470,131317],{"class":61},[37,131472,51773],{"class":50},[37,131474,24077],{"class":61},[37,131476,1669],{"class":50},[37,131478,131479],{"class":39,"line":104},[37,131480,1941],{"class":50},[37,131482,131483,131485],{"class":39,"line":113},[37,131484,131332],{"class":2320},[37,131486,15913],{"class":50},[37,131488,131489,131491,131493,131495],{"class":39,"line":189},[37,131490,131317],{"class":61},[37,131492,51773],{"class":50},[37,131494,72858],{"class":61},[37,131496,1669],{"class":50},[37,131498,131499],{"class":39,"line":195},[37,131500,1941],{"class":50},[14,131502,131503],{},"overflow: hidden;",[14,131505,131506],{},"优点：代码简洁",[14,131508,131509],{},"缺点：无法显示溢出的部分",[14,131511,131512],{},"注意：是给父元素添加代码",[14,131514,131515],{},"法三",[14,131517,131518],{},"父级添加after伪元素",[14,131520,131521,131524],{},[131522,131523],"after",{}," 方式是额外标签法的升级版",[14,131526,131527],{},"使用的时候复制就可以",[27,131529,131530],{"className":126837,"code":131303,"language":126839,"meta":32,"style":32},[34,131531,131532,131538,131548,131552,131558,131568],{"__ignoreMap":32},[37,131533,131534,131536],{"class":39,"line":40},[37,131535,131310],{"class":2320},[37,131537,15913],{"class":50},[37,131539,131540,131542,131544,131546],{"class":39,"line":47},[37,131541,131317],{"class":61},[37,131543,51773],{"class":50},[37,131545,24077],{"class":61},[37,131547,1669],{"class":50},[37,131549,131550],{"class":39,"line":104},[37,131551,1941],{"class":50},[37,131553,131554,131556],{"class":39,"line":113},[37,131555,131332],{"class":2320},[37,131557,15913],{"class":50},[37,131559,131560,131562,131564,131566],{"class":39,"line":189},[37,131561,131317],{"class":61},[37,131563,51773],{"class":50},[37,131565,72858],{"class":61},[37,131567,1669],{"class":50},[37,131569,131570],{"class":39,"line":195},[37,131571,1941],{"class":50},[14,131573,131574],{},"优点：没有增加标签，结构更简单",[14,131576,131577],{},"缺点：照顾低版本浏览器",[14,131579,131580],{},"代表网站： 百度、淘宝网、网易等",[14,131582,131583],{},"法四",[14,131585,131586],{},"父级添加双伪元素",[27,131588,131589],{"className":126837,"code":131303,"language":126839,"meta":32,"style":32},[34,131590,131591,131597,131607,131611,131617,131627],{"__ignoreMap":32},[37,131592,131593,131595],{"class":39,"line":40},[37,131594,131310],{"class":2320},[37,131596,15913],{"class":50},[37,131598,131599,131601,131603,131605],{"class":39,"line":47},[37,131600,131317],{"class":61},[37,131602,51773],{"class":50},[37,131604,24077],{"class":61},[37,131606,1669],{"class":50},[37,131608,131609],{"class":39,"line":104},[37,131610,1941],{"class":50},[37,131612,131613,131615],{"class":39,"line":113},[37,131614,131332],{"class":2320},[37,131616,15913],{"class":50},[37,131618,131619,131621,131623,131625],{"class":39,"line":189},[37,131620,131317],{"class":61},[37,131622,51773],{"class":50},[37,131624,72858],{"class":61},[37,131626,1669],{"class":50},[37,131628,131629],{"class":39,"line":195},[37,131630,1941],{"class":50},[14,131632,131633],{},"优点：代码更简洁",[14,131635,131577],{},[14,131637,131638],{},"代表网站：小米、腾讯等",[469,131640,131642],{"id":131641},"_93-ps切图","9.3 PS切图",[498,131644,131646],{"id":131645},"_931-常见图片格式","9.3.1 常见图片格式",[661,131648,131649,131659],{},[664,131650,131651],{},[667,131652,131653,131656],{},[670,131654,131655],{"align":24077},"jpg图像格式",[670,131657,131658],{"align":24077},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[708,131660,131661,131669,131677],{},[667,131662,131663,131666],{},[713,131664,131665],{"align":24077},"gif图像格式",[713,131667,131668],{"align":24077},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[667,131670,131671,131674],{},[713,131672,131673],{"align":24077},"png图像格式",[713,131675,131676],{"align":24077},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[667,131678,131679,131682],{},[713,131680,131681],{"align":24077},"PSD图像格式",[713,131683,131684],{"align":24077},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[498,131686,131688],{"id":131687},"_932-图层切图","9.3.2 图层切图",[14,131690,131691],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131693,131694],{},"按住shift选中两个图层->图层菜单->合并图层",[498,131696,131698],{"id":131697},"_933-切片切图","9.3.3 切片切图",[1515,131700,131701,131704],{},[484,131702,131703],{},"利用切片工具手动划出",[484,131705,131706],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[498,131708,131710],{"id":131709},"_934-切图步骤","9.3.4 切图步骤",[14,131712,131713],{},"用切片工具选中：",[1838,131715],{"style":126693,"src":131716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131718,131719],{},"文件 -> 导出",[1838,131721],{"style":126693,"src":131722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[446,131724,131725],{},"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":32,"searchDepth":47,"depth":47,"links":131727},[131728,131737,131741],{"id":130164,"depth":47,"text":130165,"children":131729},[131730,131731,131732,131733,131734,131735,131736],{"id":130189,"depth":104,"text":130190},{"id":130480,"depth":104,"text":130481},{"id":130609,"depth":104,"text":130610},{"id":130809,"depth":104,"text":130810},{"id":130851,"depth":104,"text":130852},{"id":130889,"depth":104,"text":130890},{"id":130979,"depth":104,"text":130980},{"id":131259,"depth":47,"text":131260,"children":131738},[131739,131740],{"id":131263,"depth":104,"text":131264},{"id":131270,"depth":104,"text":131271},{"id":131641,"depth":47,"text":131642,"children":131742},[131743,131744,131745,131746],{"id":131645,"depth":104,"text":131646},{"id":131687,"depth":104,"text":131688},{"id":131697,"depth":104,"text":131698},{"id":131709,"depth":104,"text":131710},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130156,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131753,"title":131754,"body":131755,"description":451,"extension":452,"meta":132396,"navigation":454,"path":132397,"seo":132398,"stem":132399,"__hash__":132400},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131756,"toc":132384},[131757,131760,131764,131790,131824,131828,131832,131835,131877,131884,131894,131902,131904,131907,131910,131913,131920,131934,131938,131941,131970,131974,131977,131991,131995,131998,132026,132030,132033,132059,132063,132068,132101,132106,132134,132138,132155,132201,132206,132250,132267,132374,132382],[10,131758,131754],{"id":131759},"_10-css规范与学成在线案例",[469,131761,131763],{"id":131762},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[481,131765,131766,131772,131778,131784],{},[484,131767,131768,131771],{},[673,131769,131770],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[484,131773,131774,131777],{},[673,131775,131776],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[484,131779,131780,131783],{},[673,131781,131782],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[484,131785,131786,131789],{},[673,131787,131788],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[27,131791,131792],{"className":126837,"code":130201,"language":126839,"meta":32,"style":32},[34,131793,131794,131798,131804,131820],{"__ignoreMap":32},[37,131795,131796],{"class":39,"line":40},[37,131797,130208],{"class":43},[37,131799,131800,131802],{"class":39,"line":47},[37,131801,51947],{"class":51636},[37,131803,15913],{"class":50},[37,131805,131806,131808,131810,131812,131814,131816,131818],{"class":39,"line":104},[37,131807,71232],{"class":61},[37,131809,51773],{"class":50},[37,131811,332],{"class":61},[37,131813,51828],{"class":54},[37,131815,51857],{"class":61},[37,131817,130229],{"class":61},[37,131819,1669],{"class":50},[37,131821,131822],{"class":39,"line":113},[37,131823,1941],{"class":50},[469,131825,131827],{"id":131826},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[498,131829,131831],{"id":131830},"_1021-header头部制作","10.2.1 header头部制作",[1838,131833],{"style":126693,"src":131834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1515,131836,131837,131844,131851,131857,131864,131871],{},[484,131838,131839,131840,131843],{},"1号是版心盒子 ",[673,131841,131842],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[484,131845,131846,131847,131850],{},"版心盒子 里面包含 2号盒子 ",[673,131848,131849],{},"logo"," 图标",[484,131852,131853,131854,131856],{},"版心盒子 里面包含 3号盒子 ",[673,131855,54049],{}," 导航栏",[484,131858,131859,131860,131863],{},"版心盒子 里面包含 4号盒子 ",[673,131861,131862],{},"search"," 搜索框",[484,131865,131866,131867,131870],{},"版心盒子 里面包含 5号盒子 ",[673,131868,131869],{},"user"," 个人信息",[484,131872,131873,131874],{},"注意，要求里面的 ",[673,131875,131876],{},"4个子盒子 必须都浮动",[481,131878,131879],{},[484,131880,131881],{},[673,131882,131883],{},"导航栏注意点:",[14,131885,131886,131887,131890,131891],{},"实际开发中， ",[673,131888,131889],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[673,131892,131893],{},"用 li 包含链接(li+a)的做法",[1515,131895,131896,131899],{},[484,131897,131898],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[484,131900,131901],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131903,9366],{},[14,131905,131906],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131908,131909],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131911,131912],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[481,131914,131915],{"start":47},[484,131916,131917],{},[673,131918,131919],{},"4号盒子search的细节：",[1515,131921,131922,131925,131928],{},[484,131923,131924],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[484,131926,131927],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[484,131929,131930,131933],{},[34,131931,131932],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[498,131935,131937],{"id":131936},"_1022-banner制作","10.2.2 banner制作",[1838,131939],{"style":126693,"src":131940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1515,131942,131943,131950,131956,131963],{},[484,131944,131945,131946,131949],{},"1号盒子是通栏的大盒子 ",[673,131947,131948],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[484,131951,131952,131953,131955],{},"2号盒子是版心 ",[673,131954,1304],{}," ， 要水平居中对齐",[484,131957,131958,131959,131962],{},"3号盒子版心内，左对齐 ",[673,131960,131961],{},"subnav"," 侧导航栏",[484,131964,131965,131966,131969],{},"4号盒子版心内，右对齐 ",[673,131967,131968],{},"course"," 课程",[498,131971,131973],{"id":131972},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1838,131975],{"style":126693,"src":131976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1515,131978,131979,131982,131985,131988],{},[484,131980,131981],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[484,131983,131984],{},"1号盒子是标题 H3 左侧浮动",[484,131986,131987],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[484,131989,131990],{},"3号盒子 右浮动 mod 修改",[498,131992,131994],{"id":131993},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1838,131996],{"style":126693,"src":131997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1515,131999,132000,132006,132013,132020,132023],{},[484,132001,132002,132003,132005],{},"1号盒子为最大的盒子 ",[673,132004,54050],{}," 版心水平居中对齐",[484,132007,132008,132009,132012],{},"2号盒子为上面部分 ",[673,132010,132011],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[484,132014,132015,132016,132019],{},"3号盒子为底下部分 ",[673,132017,132018],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[484,132021,132022],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[484,132024,132025],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[498,132027,132029],{"id":132028},"_1025-底部模块制作","10.2.5 底部模块制作",[1838,132031],{"style":126693,"src":132032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1515,132034,132035,132042,132045,132052],{},[484,132036,132037,132038,132041],{},"1号盒子通栏大盒子 底部 ",[673,132039,132040],{},"footer"," 给高度 底色是白色",[484,132043,132044],{},"2号盒子版心水平居中",[484,132046,132047,132048,132051],{},"3号盒子版权 ",[673,132049,132050],{},"copyright"," 左对齐",[484,132053,132054,132055,132058],{},"4号盒子 链接组 ",[673,132056,132057],{},"links"," 右对齐",[498,132060,132062],{"id":132061},"_1026-代码模块","10.2.6 代码模块",[481,132064,132065],{},[484,132066,132067],{},"html部分",[27,132069,132071],{"className":127584,"code":132070,"language":127586,"meta":32,"style":32},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[34,132072,132073],{"__ignoreMap":32},[37,132074,132075,132077,132079,132081,132083,132086,132089,132091,132094,132097,132099],{"class":39,"line":40},[37,132076,1418],{"class":50},[37,132078,51],{"class":51636},[37,132080,61393],{"class":2320},[37,132082,55],{"class":50},[37,132084,132085],{"class":185},"\"https:\u002F\u002Fexample.com\"",[37,132087,132088],{"class":2320}," target",[37,132090,55],{"class":50},[37,132092,132093],{"class":185},"\"_blank\"",[37,132095,132096],{"class":50},">链接文字\u003C\u002F",[37,132098,51],{"class":51636},[37,132100,51643],{"class":50},[481,132102,132103],{"start":47},[484,132104,132105],{},"css部分",[27,132107,132108],{"className":127584,"code":132070,"language":127586,"meta":32,"style":32},[34,132109,132110],{"__ignoreMap":32},[37,132111,132112,132114,132116,132118,132120,132122,132124,132126,132128,132130,132132],{"class":39,"line":40},[37,132113,1418],{"class":50},[37,132115,51],{"class":51636},[37,132117,61393],{"class":2320},[37,132119,55],{"class":50},[37,132121,132085],{"class":185},[37,132123,132088],{"class":2320},[37,132125,55],{"class":50},[37,132127,132093],{"class":185},[37,132129,132096],{"class":50},[37,132131,51],{"class":51636},[37,132133,51643],{"class":50},[498,132135,132137],{"id":132136},"_1027-收获","10.2.7 收获",[481,132139,132140,132143,132146,132149,132152],{},[484,132141,132142],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[484,132144,132145],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[484,132147,132148],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[484,132150,132151],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[484,132153,132154],{},"遗忘代码",[27,132156,132158],{"className":126837,"code":132157,"language":126839,"meta":32,"style":32},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[34,132159,132160,132182,132187,132197],{"__ignoreMap":32},[37,132161,132162,132164,132166,132168,132170,132172,132174,132176,132178,132180],{"class":39,"line":40},[37,132163,51947],{"class":51636},[37,132165,12776],{"class":50},[37,132167,14],{"class":51636},[37,132169,12776],{"class":50},[37,132171,10],{"class":51636},[37,132173,12776],{"class":50},[37,132175,1515],{"class":51636},[37,132177,12776],{"class":50},[37,132179,484],{"class":51636},[37,132181,15913],{"class":50},[37,132183,132184],{"class":39,"line":47},[37,132185,132186],{"class":43},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[37,132188,132189,132191,132193,132195],{"class":39,"line":104},[37,132190,128453],{"class":61},[37,132192,51773],{"class":50},[37,132194,61205],{"class":61},[37,132196,1669],{"class":50},[37,132198,132199],{"class":39,"line":113},[37,132200,1941],{"class":50},[481,132202,132203],{"start":195},[484,132204,132205],{},"html引css的程序",[27,132207,132208],{"className":126837,"code":132157,"language":126839,"meta":32,"style":32},[34,132209,132210,132232,132236,132246],{"__ignoreMap":32},[37,132211,132212,132214,132216,132218,132220,132222,132224,132226,132228,132230],{"class":39,"line":40},[37,132213,51947],{"class":51636},[37,132215,12776],{"class":50},[37,132217,14],{"class":51636},[37,132219,12776],{"class":50},[37,132221,10],{"class":51636},[37,132223,12776],{"class":50},[37,132225,1515],{"class":51636},[37,132227,12776],{"class":50},[37,132229,484],{"class":51636},[37,132231,15913],{"class":50},[37,132233,132234],{"class":39,"line":47},[37,132235,132186],{"class":43},[37,132237,132238,132240,132242,132244],{"class":39,"line":104},[37,132239,128453],{"class":61},[37,132241,51773],{"class":50},[37,132243,61205],{"class":61},[37,132245,1669],{"class":50},[37,132247,132248],{"class":39,"line":113},[37,132249,1941],{"class":50},[481,132251,132252,132255,132258,132261,132264],{"start":201},[484,132253,132254],{},"浮动的盒子不会有外边距合并问题",[484,132256,132257],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[484,132259,132260],{},"ctrl+g快速定位行；shift+alt多个光标",[484,132262,132263],{},"学习上方各个模块的选择器起名方法，以后就这样用",[484,132265,132266],{},"在写选择器时尽量写全一些，例如",[27,132268,132270],{"className":126837,"code":132269,"language":126839,"meta":32,"style":32},"\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",[34,132271,132272,132277,132293,132298,132313,132318,132333,132338,132353,132358],{"__ignoreMap":32},[37,132273,132274],{"class":39,"line":40},[37,132275,132276],{"class":43},"\u002F* 静态定位（默认） *\u002F\n",[37,132278,132279,132282,132284,132286,132288,132291],{"class":39,"line":47},[37,132280,132281],{"class":2320},".static",[37,132283,80142],{"class":50},[37,132285,129197],{"class":61},[37,132287,51773],{"class":50},[37,132289,132290],{"class":61},"static",[37,132292,129767],{"class":50},[37,132294,132295],{"class":39,"line":104},[37,132296,132297],{"class":43},"\u002F* 相对定位 *\u002F\n",[37,132299,132300,132303,132305,132307,132309,132311],{"class":39,"line":113},[37,132301,132302],{"class":2320},".relative",[37,132304,80142],{"class":50},[37,132306,129197],{"class":61},[37,132308,51773],{"class":50},[37,132310,55100],{"class":61},[37,132312,129767],{"class":50},[37,132314,132315],{"class":39,"line":189},[37,132316,132317],{"class":43},"\u002F* 绝对定位 *\u002F\n",[37,132319,132320,132323,132325,132327,132329,132331],{"class":39,"line":195},[37,132321,132322],{"class":2320},".absolute",[37,132324,80142],{"class":50},[37,132326,129197],{"class":61},[37,132328,51773],{"class":50},[37,132330,55167],{"class":61},[37,132332,129767],{"class":50},[37,132334,132335],{"class":39,"line":201},[37,132336,132337],{"class":43},"\u002F* 固定定位 *\u002F\n",[37,132339,132340,132343,132345,132347,132349,132351],{"class":39,"line":207},[37,132341,132342],{"class":2320},".fixed",[37,132344,80142],{"class":50},[37,132346,129197],{"class":61},[37,132348,51773],{"class":50},[37,132350,86568],{"class":61},[37,132352,129767],{"class":50},[37,132354,132355],{"class":39,"line":213},[37,132356,132357],{"class":43},"\u002F* 粘性定位 *\u002F\n",[37,132359,132360,132363,132365,132367,132369,132372],{"class":39,"line":218},[37,132361,132362],{"class":2320},".sticky",[37,132364,80142],{"class":50},[37,132366,129197],{"class":61},[37,132368,51773],{"class":50},[37,132370,132371],{"class":61},"sticky",[37,132373,129767],{"class":50},[481,132375,132376,132379],{"start":232},[484,132377,132378],{},"一定要用好注释",[484,132380,132381],{},"浮动的盒子不会有外边距合并的问题",[446,132383,131725],{},{"title":32,"searchDepth":47,"depth":47,"links":132385},[132386,132387],{"id":131762,"depth":47,"text":131763},{"id":131826,"depth":47,"text":131827,"children":132388},[132389,132390,132391,132392,132393,132394,132395],{"id":131830,"depth":104,"text":131831},{"id":131936,"depth":104,"text":131937},{"id":131972,"depth":104,"text":131973},{"id":131993,"depth":104,"text":131994},{"id":132028,"depth":104,"text":132029},{"id":132061,"depth":104,"text":132062},{"id":132136,"depth":104,"text":132137},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131754,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132402,"title":132403,"body":132404,"description":451,"extension":452,"meta":133890,"navigation":454,"path":133891,"seo":133892,"stem":133893,"__hash__":133894},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132405,"toc":133882},[132406,132409,132413,132417,132428,132432,132449,132493,132526,132529,132546,132549,132552,132596,132600,132604,132607,132610,132614,132617,132628,132691,132732,132735,132750,132804,132812,132815,132826,132880,132906,132909,132922,132976,133008,133062,133085,133139,133142,133145,133152,133206,133227,133281,133284,133287,133372,133380,133437,133460,133464,133467,133485,133489,133508,133562,133600,133604,133607,133610,133632,133636,133644,133647,133652,133663,133666,133670,133684,133728,133731,133735,133738,133743,133769,133774,133851,133854,133858,133861,133864,133867,133870,133873,133876,133879],[10,132407,132403],{"id":132408},"_11-传统布局与定位体系",[469,132410,132412],{"id":132411},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[498,132414,132416],{"id":132415},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1515,132418,132419,132422,132425],{},[484,132420,132421],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[484,132423,132424],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[484,132426,132427],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[498,132429,132431],{"id":132430},"_1112-浮动","11.1.2 浮动",[1515,132433,132434,132437,132440,132443,132446],{},[484,132435,132436],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[484,132438,132439],{},"浮动可以改变元素标签默认的排列方式",[484,132441,132442],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[484,132444,132445],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[484,132447,132448],{},"在使用行内块转换时盒子之间是有空隙的",[27,132450,132451],{"className":126837,"code":131303,"language":126839,"meta":32,"style":32},[34,132452,132453,132459,132469,132473,132479,132489],{"__ignoreMap":32},[37,132454,132455,132457],{"class":39,"line":40},[37,132456,131310],{"class":2320},[37,132458,15913],{"class":50},[37,132460,132461,132463,132465,132467],{"class":39,"line":47},[37,132462,131317],{"class":61},[37,132464,51773],{"class":50},[37,132466,24077],{"class":61},[37,132468,1669],{"class":50},[37,132470,132471],{"class":39,"line":104},[37,132472,1941],{"class":50},[37,132474,132475,132477],{"class":39,"line":113},[37,132476,131332],{"class":2320},[37,132478,15913],{"class":50},[37,132480,132481,132483,132485,132487],{"class":39,"line":189},[37,132482,131317],{"class":61},[37,132484,51773],{"class":50},[37,132486,72858],{"class":61},[37,132488,1669],{"class":50},[37,132490,132491],{"class":39,"line":195},[37,132492,1941],{"class":50},[661,132494,132495,132503],{},[664,132496,132497],{},[667,132498,132499,132501],{},[670,132500,127301],{"align":24077},[670,132502,27831],{"align":24077},[708,132504,132505,132512,132519],{},[667,132506,132507,132509],{},[713,132508,55073],{"align":24077},[713,132510,132511],{"align":24077},"元素不浮动（默认值）",[667,132513,132514,132516],{},[713,132515,24077],{"align":24077},[713,132517,132518],{"align":24077},"元素向左浮动",[667,132520,132521,132523],{},[713,132522,72858],{"align":24077},[713,132524,132525],{"align":24077},"元素向右浮动",[14,132527,132528],{},"浮动重点：",[1515,132530,132531,132534,132537,132540,132543],{},[484,132532,132533],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[484,132535,132536],{},"浮动的元素会一行内显示并且元素顶部对齐",[484,132538,132539],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[484,132541,132542],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[484,132544,132545],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132547,132548],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132550,132551],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[27,132553,132554],{"className":126837,"code":131303,"language":126839,"meta":32,"style":32},[34,132555,132556,132562,132572,132576,132582,132592],{"__ignoreMap":32},[37,132557,132558,132560],{"class":39,"line":40},[37,132559,131310],{"class":2320},[37,132561,15913],{"class":50},[37,132563,132564,132566,132568,132570],{"class":39,"line":47},[37,132565,131317],{"class":61},[37,132567,51773],{"class":50},[37,132569,24077],{"class":61},[37,132571,1669],{"class":50},[37,132573,132574],{"class":39,"line":104},[37,132575,1941],{"class":50},[37,132577,132578,132580],{"class":39,"line":113},[37,132579,131332],{"class":2320},[37,132581,15913],{"class":50},[37,132583,132584,132586,132588,132590],{"class":39,"line":189},[37,132585,131317],{"class":61},[37,132587,51773],{"class":50},[37,132589,72858],{"class":61},[37,132591,1669],{"class":50},[37,132593,132594],{"class":39,"line":195},[37,132595,1941],{"class":50},[498,132597,132599],{"id":132598},"_1113-定位","11.1.3 定位",[22339,132601,132603],{"id":132602},"_11131-使用场景","11.1.3.1 使用场景",[14,132605,132606],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132608,132609],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22339,132611,132613],{"id":132612},"_11132-定位组成","11.1.3.2 定位组成",[14,132615,132616],{},"定位 = 定位模式 + 边偏移",[481,132618,132619],{},[484,132620,132621,132624,132625],{},[673,132622,132623],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[673,132626,132627],{},"定位模式",[27,132629,132631],{"className":126837,"code":132630,"language":126839,"meta":32,"style":32},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[34,132632,132633,132639,132653,132670,132687],{"__ignoreMap":32},[37,132634,132635,132637],{"class":39,"line":40},[37,132636,130685],{"class":2320},[37,132638,15913],{"class":50},[37,132640,132641,132644,132646,132648,132650],{"class":39,"line":47},[37,132642,132643],{"class":61},"  position",[37,132645,51773],{"class":50},[37,132647,55100],{"class":61},[37,132649,130700],{"class":50},[37,132651,132652],{"class":43},"\u002F* 定位模式 *\u002F\n",[37,132654,132655,132658,132660,132662,132664,132667],{"class":39,"line":104},[37,132656,132657],{"class":61},"  top",[37,132659,51773],{"class":50},[37,132661,98],{"class":61},[37,132663,51828],{"class":54},[37,132665,132666],{"class":50},";           ",[37,132668,132669],{"class":43},"\u002F* 边偏移：上 *\u002F\n",[37,132671,132672,132675,132677,132679,132681,132684],{"class":39,"line":113},[37,132673,132674],{"class":61},"  left",[37,132676,51773],{"class":50},[37,132678,1210],{"class":61},[37,132680,51828],{"class":54},[37,132682,132683],{"class":50},";          ",[37,132685,132686],{"class":43},"\u002F* 边偏移：左 *\u002F\n",[37,132688,132689],{"class":39,"line":189},[37,132690,1941],{"class":50},[661,132692,132693,132702],{},[664,132694,132695],{},[667,132696,132697,132699],{},[670,132698,676],{"align":24077},[670,132700,132701],{"align":24077},"语义",[708,132703,132704,132711,132718,132725],{},[667,132705,132706,132708],{},[713,132707,132290],{"align":24077},[713,132709,132710],{"align":24077},"静态定位",[667,132712,132713,132715],{},[713,132714,55100],{"align":24077},[713,132716,132717],{"align":24077},"相对定位",[667,132719,132720,132722],{},[713,132721,55167],{"align":24077},[713,132723,132724],{"align":24077},"绝对定位",[667,132726,132727,132729],{},[713,132728,86568],{"align":24077},[713,132730,132731],{"align":24077},"固定定位",[14,132733,132734],{},"（1）静态定位：",[1515,132736,132737,132748],{},[484,132738,132739,132740,132743,132744,132747],{},"静态定位是元素的 ",[673,132741,132742],{},"默认定位方式"," ， ",[673,132745,132746],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[484,132749,5530],{},[27,132751,132752],{"className":126837,"code":132630,"language":126839,"meta":32,"style":32},[34,132753,132754,132760,132772,132786,132800],{"__ignoreMap":32},[37,132755,132756,132758],{"class":39,"line":40},[37,132757,130685],{"class":2320},[37,132759,15913],{"class":50},[37,132761,132762,132764,132766,132768,132770],{"class":39,"line":47},[37,132763,132643],{"class":61},[37,132765,51773],{"class":50},[37,132767,55100],{"class":61},[37,132769,130700],{"class":50},[37,132771,132652],{"class":43},[37,132773,132774,132776,132778,132780,132782,132784],{"class":39,"line":104},[37,132775,132657],{"class":61},[37,132777,51773],{"class":50},[37,132779,98],{"class":61},[37,132781,51828],{"class":54},[37,132783,132666],{"class":50},[37,132785,132669],{"class":43},[37,132787,132788,132790,132792,132794,132796,132798],{"class":39,"line":113},[37,132789,132674],{"class":61},[37,132791,51773],{"class":50},[37,132793,1210],{"class":61},[37,132795,51828],{"class":54},[37,132797,132683],{"class":50},[37,132799,132686],{"class":43},[37,132801,132802],{"class":39,"line":189},[37,132803,1941],{"class":50},[1515,132805,132806,132809],{},[484,132807,132808],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[484,132810,132811],{},"静态定位在布局时我们几乎不用的",[14,132813,132814],{},"（2）相对定位",[1515,132816,132817,132824],{},[484,132818,132819,132820,132823],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[673,132821,132822],{},"原来的位置"," 来说的（自恋型）",[484,132825,5530],{},[27,132827,132828],{"className":126837,"code":132630,"language":126839,"meta":32,"style":32},[34,132829,132830,132836,132848,132862,132876],{"__ignoreMap":32},[37,132831,132832,132834],{"class":39,"line":40},[37,132833,130685],{"class":2320},[37,132835,15913],{"class":50},[37,132837,132838,132840,132842,132844,132846],{"class":39,"line":47},[37,132839,132643],{"class":61},[37,132841,51773],{"class":50},[37,132843,55100],{"class":61},[37,132845,130700],{"class":50},[37,132847,132652],{"class":43},[37,132849,132850,132852,132854,132856,132858,132860],{"class":39,"line":104},[37,132851,132657],{"class":61},[37,132853,51773],{"class":50},[37,132855,98],{"class":61},[37,132857,51828],{"class":54},[37,132859,132666],{"class":50},[37,132861,132669],{"class":43},[37,132863,132864,132866,132868,132870,132872,132874],{"class":39,"line":113},[37,132865,132674],{"class":61},[37,132867,51773],{"class":50},[37,132869,1210],{"class":61},[37,132871,51828],{"class":54},[37,132873,132683],{"class":50},[37,132875,132686],{"class":43},[37,132877,132878],{"class":39,"line":189},[37,132879,1941],{"class":50},[1515,132881,132882],{},[484,132883,132884,132885,132887,132888,132890,132891,132894,132895,132898,132899,132901,132902,132905],{},"相对定位的特点：",[54052,132886],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54052,132889],{},"  ② ",[673,132892,132893],{},"原来"," 在标准流的 ",[673,132896,132897],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54052,132900],{},"  ③因此， ",[673,132903,132904],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132907,132908],{},"（3）绝对定位",[1515,132910,132911,132920],{},[484,132912,132913,132915,132916,132919],{},[673,132914,132724],{}," 是元素在移动位置的时候，是相对于它 ",[673,132917,132918],{},"祖先元素"," 来说的（拼爹型）",[484,132921,5530],{},[27,132923,132924],{"className":126837,"code":132630,"language":126839,"meta":32,"style":32},[34,132925,132926,132932,132944,132958,132972],{"__ignoreMap":32},[37,132927,132928,132930],{"class":39,"line":40},[37,132929,130685],{"class":2320},[37,132931,15913],{"class":50},[37,132933,132934,132936,132938,132940,132942],{"class":39,"line":47},[37,132935,132643],{"class":61},[37,132937,51773],{"class":50},[37,132939,55100],{"class":61},[37,132941,130700],{"class":50},[37,132943,132652],{"class":43},[37,132945,132946,132948,132950,132952,132954,132956],{"class":39,"line":104},[37,132947,132657],{"class":61},[37,132949,51773],{"class":50},[37,132951,98],{"class":61},[37,132953,51828],{"class":54},[37,132955,132666],{"class":50},[37,132957,132669],{"class":43},[37,132959,132960,132962,132964,132966,132968,132970],{"class":39,"line":113},[37,132961,132674],{"class":61},[37,132963,51773],{"class":50},[37,132965,1210],{"class":61},[37,132967,51828],{"class":54},[37,132969,132683],{"class":50},[37,132971,132686],{"class":43},[37,132973,132974],{"class":39,"line":189},[37,132975,1941],{"class":50},[1515,132977,132978,132993,133002,133005],{},[484,132979,132980,132981,132983,132984,132986,132987,132989,132990,132992],{},"绝对定位的特点：",[54052,132982],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54052,132985],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54052,132988],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54052,132991],{},"  (4)固定定位",[484,132994,132995,132997,132998,133001],{},[673,132996,132731],{}," 是元素 ",[673,132999,133000],{},"固定于浏览器可视区的位置"," 。（认死理型）",[484,133003,133004],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[484,133006,133007],{},"语法:",[27,133009,133010],{"className":126837,"code":132630,"language":126839,"meta":32,"style":32},[34,133011,133012,133018,133030,133044,133058],{"__ignoreMap":32},[37,133013,133014,133016],{"class":39,"line":40},[37,133015,130685],{"class":2320},[37,133017,15913],{"class":50},[37,133019,133020,133022,133024,133026,133028],{"class":39,"line":47},[37,133021,132643],{"class":61},[37,133023,51773],{"class":50},[37,133025,55100],{"class":61},[37,133027,130700],{"class":50},[37,133029,132652],{"class":43},[37,133031,133032,133034,133036,133038,133040,133042],{"class":39,"line":104},[37,133033,132657],{"class":61},[37,133035,51773],{"class":50},[37,133037,98],{"class":61},[37,133039,51828],{"class":54},[37,133041,132666],{"class":50},[37,133043,132669],{"class":43},[37,133045,133046,133048,133050,133052,133054,133056],{"class":39,"line":113},[37,133047,132674],{"class":61},[37,133049,51773],{"class":50},[37,133051,1210],{"class":61},[37,133053,51828],{"class":54},[37,133055,132683],{"class":50},[37,133057,132686],{"class":43},[37,133059,133060],{"class":39,"line":189},[37,133061,1941],{"class":50},[1515,133063,133064,133073],{},[484,133065,133066,133067,133069,133070,133072],{},"特点:",[54052,133068],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54052,133071],{},"  ②固定定位不再占有原先的位置,完全脱标",[484,133074,133075,133076,133078,133079,133081,133082,133084],{},"固定在版心位置的方法:",[54052,133077],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54052,133080],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54052,133083],{},"  实例：",[27,133086,133087],{"className":126837,"code":132630,"language":126839,"meta":32,"style":32},[34,133088,133089,133095,133107,133121,133135],{"__ignoreMap":32},[37,133090,133091,133093],{"class":39,"line":40},[37,133092,130685],{"class":2320},[37,133094,15913],{"class":50},[37,133096,133097,133099,133101,133103,133105],{"class":39,"line":47},[37,133098,132643],{"class":61},[37,133100,51773],{"class":50},[37,133102,55100],{"class":61},[37,133104,130700],{"class":50},[37,133106,132652],{"class":43},[37,133108,133109,133111,133113,133115,133117,133119],{"class":39,"line":104},[37,133110,132657],{"class":61},[37,133112,51773],{"class":50},[37,133114,98],{"class":61},[37,133116,51828],{"class":54},[37,133118,132666],{"class":50},[37,133120,132669],{"class":43},[37,133122,133123,133125,133127,133129,133131,133133],{"class":39,"line":113},[37,133124,132674],{"class":61},[37,133126,51773],{"class":50},[37,133128,1210],{"class":61},[37,133130,51828],{"class":54},[37,133132,132683],{"class":50},[37,133134,132686],{"class":43},[37,133136,133137],{"class":39,"line":189},[37,133138,1941],{"class":50},[1838,133140],{"style":126693,"src":133141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,133143,133144],{},"(5)粘性定位",[1515,133146,133147,133150],{},[484,133148,133149],{},"粘性定位可以被认为是相对定位和固定定位的混合",[484,133151,5530],{},[27,133153,133154],{"className":126837,"code":132630,"language":126839,"meta":32,"style":32},[34,133155,133156,133162,133174,133188,133202],{"__ignoreMap":32},[37,133157,133158,133160],{"class":39,"line":40},[37,133159,130685],{"class":2320},[37,133161,15913],{"class":50},[37,133163,133164,133166,133168,133170,133172],{"class":39,"line":47},[37,133165,132643],{"class":61},[37,133167,51773],{"class":50},[37,133169,55100],{"class":61},[37,133171,130700],{"class":50},[37,133173,132652],{"class":43},[37,133175,133176,133178,133180,133182,133184,133186],{"class":39,"line":104},[37,133177,132657],{"class":61},[37,133179,51773],{"class":50},[37,133181,98],{"class":61},[37,133183,51828],{"class":54},[37,133185,132666],{"class":50},[37,133187,132669],{"class":43},[37,133189,133190,133192,133194,133196,133198,133200],{"class":39,"line":113},[37,133191,132674],{"class":61},[37,133193,51773],{"class":50},[37,133195,1210],{"class":61},[37,133197,51828],{"class":54},[37,133199,132683],{"class":50},[37,133201,132686],{"class":43},[37,133203,133204],{"class":39,"line":189},[37,133205,1941],{"class":50},[1515,133207,133208],{},[484,133209,133210,133211,133213,133214,133216,133217,133219,133220,133223,133224,133226],{},"粘性定位的特点：",[54052,133212],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54052,133215],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54052,133218],{},"  ③必须添加 top 、left、right、bottom ",[673,133221,133222],{},"其中一个"," 才有效",[54052,133225],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[27,133228,133229],{"className":126837,"code":132630,"language":126839,"meta":32,"style":32},[34,133230,133231,133237,133249,133263,133277],{"__ignoreMap":32},[37,133232,133233,133235],{"class":39,"line":40},[37,133234,130685],{"class":2320},[37,133236,15913],{"class":50},[37,133238,133239,133241,133243,133245,133247],{"class":39,"line":47},[37,133240,132643],{"class":61},[37,133242,51773],{"class":50},[37,133244,55100],{"class":61},[37,133246,130700],{"class":50},[37,133248,132652],{"class":43},[37,133250,133251,133253,133255,133257,133259,133261],{"class":39,"line":104},[37,133252,132657],{"class":61},[37,133254,51773],{"class":50},[37,133256,98],{"class":61},[37,133258,51828],{"class":54},[37,133260,132666],{"class":50},[37,133262,132669],{"class":43},[37,133264,133265,133267,133269,133271,133273,133275],{"class":39,"line":113},[37,133266,132674],{"class":61},[37,133268,51773],{"class":50},[37,133270,1210],{"class":61},[37,133272,51828],{"class":54},[37,133274,132683],{"class":50},[37,133276,132686],{"class":43},[37,133278,133279],{"class":39,"line":189},[37,133280,1941],{"class":50},[1838,133282],{"style":126693,"src":133283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133285,133286],{},"(6)总结",[661,133288,133289,133304],{},[664,133290,133291],{},[667,133292,133293,133295,133298,133301],{},[670,133294,132627],{"align":24077},[670,133296,133297],{"align":24077},"是否脱标",[670,133299,133300],{"align":24077},"移动位置",[670,133302,133303],{"align":24077},"是否常用",[708,133305,133306,133319,133333,133347,133360],{},[667,133307,133308,133311,133313,133316],{},[713,133309,133310],{"align":24077},"Static 静态定位",[713,133312,104963],{"align":24077},[713,133314,133315],{"align":24077},"不能使用边偏移",[713,133317,133318],{"align":24077},"很少",[667,133320,133321,133324,133327,133330],{},[713,133322,133323],{"align":24077},"Relative 相对定位",[713,133325,133326],{"align":24077},"否(占有位置)",[713,133328,133329],{"align":24077},"相对于自身位置移动",[713,133331,133332],{"align":24077},"基本单独使用",[667,133334,133335,133338,133341,133344],{},[713,133336,133337],{"align":24077},"Absolute 绝对定位",[713,133339,133340],{"align":24077},"是(不占有位置)",[713,133342,133343],{"align":24077},"带有定位的父级",[713,133345,133346],{"align":24077},"要和定位父级元素搭配使用",[667,133348,133349,133352,133354,133357],{},[713,133350,133351],{"align":24077},"Fixed 固定定位",[713,133353,133340],{"align":24077},[713,133355,133356],{"align":24077},"浏览器可视区",[713,133358,133359],{"align":24077},"单独使用,不需要父级",[667,133361,133362,133365,133367,133369],{},[713,133363,133364],{"align":24077},"Sticky 粘性定位",[713,133366,133326],{"align":24077},[713,133368,133356],{"align":24077},[713,133370,133371],{"align":24077},"当前阶段少",[481,133373,133374],{"start":47},[484,133375,133376,133379],{},[673,133377,133378],{},"边偏移"," 则决定了该元素的最终位置",[661,133381,133382,133393],{},[664,133383,133384],{},[667,133385,133386,133389,133391],{},[670,133387,133388],{"align":24077},"边偏移属性",[670,133390,27834],{"align":24077},[670,133392,27831],{"align":24077},[708,133394,133395,133406,133417,133427],{},[667,133396,133397,133400,133403],{},[713,133398,133399],{"align":24077},"top",[713,133401,133402],{"align":24077},"top: 80px;",[713,133404,133405],{"align":24077},"顶端偏移量，定义元素相对于父元素上边线的距离",[667,133407,133408,133411,133414],{},[713,133409,133410],{"align":24077},"bottom",[713,133412,133413],{"align":24077},"bottom: 80px ;",[713,133415,133416],{"align":24077},"底部偏移量，定义元素相对于其父元素下边线的距离",[667,133418,133419,133421,133424],{},[713,133420,24077],{"align":24077},[713,133422,133423],{"align":24077},"left: 80px ;",[713,133425,133426],{"align":24077},"左侧偏移量，定义元素相对于其父元素左边线的距离",[667,133428,133429,133431,133434],{},[713,133430,72858],{"align":24077},[713,133432,133433],{"align":24077},"right: 80px ;",[713,133435,133436],{"align":24077},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1515,133438,133439],{},[484,133440,9366,133441,133443,133444,133446,133447,133449,133450,133453,133454,133456,133457,133459],{},[54052,133442],{},"  ① ",[673,133445,133378],{}," 需要和 ",[673,133448,132627],{}," 联合使用， ",[673,133451,133452],{},"单独使用无效"," ；",[54052,133455],{},"  ②top和bottom不要同时使用",[54052,133458],{},"  ③left和right不要同时使用",[22339,133461,133463],{"id":133462},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133465,133466],{},"子级是绝对定位的话，父级要用相对定位",[1515,133468,133469,133472,133475,133478],{},[484,133470,133471],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[484,133473,133474],{},"父盒子需要加定位限制子盒子在父盒子内显示",[484,133476,133477],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[484,133479,133480,133481,133484],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[673,133482,133483],{},"子绝父绝"," 也会遇到",[22339,133486,133488],{"id":133487},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1515,133490,133491,133506],{},[484,133492,133493,133494,133497,133498,133501,133502,133505],{},"在使用 ",[673,133495,133496],{},"定位"," 布局时，可能会 ",[673,133499,133500],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[673,133503,133504],{},"z-index"," 来控制盒子的前后次序 (z轴)",[484,133507,5530],{},[27,133509,133510],{"className":126837,"code":132630,"language":126839,"meta":32,"style":32},[34,133511,133512,133518,133530,133544,133558],{"__ignoreMap":32},[37,133513,133514,133516],{"class":39,"line":40},[37,133515,130685],{"class":2320},[37,133517,15913],{"class":50},[37,133519,133520,133522,133524,133526,133528],{"class":39,"line":47},[37,133521,132643],{"class":61},[37,133523,51773],{"class":50},[37,133525,55100],{"class":61},[37,133527,130700],{"class":50},[37,133529,132652],{"class":43},[37,133531,133532,133534,133536,133538,133540,133542],{"class":39,"line":104},[37,133533,132657],{"class":61},[37,133535,51773],{"class":50},[37,133537,98],{"class":61},[37,133539,51828],{"class":54},[37,133541,132666],{"class":50},[37,133543,132669],{"class":43},[37,133545,133546,133548,133550,133552,133554,133556],{"class":39,"line":113},[37,133547,132674],{"class":61},[37,133549,51773],{"class":50},[37,133551,1210],{"class":61},[37,133553,51828],{"class":54},[37,133555,132683],{"class":50},[37,133557,132686],{"class":43},[37,133559,133560],{"class":39,"line":189},[37,133561,1941],{"class":50},[1515,133563,133564],{},[484,133565,133566,133567,133443,133569,133571,133572,128000,133575,82874,133578,133580,133581,133583,133584,133587,133588,133453,133591,133593,133594,133597,133599],{},"z-index的特性",[54052,133568],{},[673,133570,127301],{}," ： ",[673,133573,133574],{},"正整数",[673,133576,133577],{},"负整数",[673,133579,135],{}," ，默认值是 0，数值越大，盒子越靠上；",[54052,133582],{},"  ②如果 ",[673,133585,133586],{},"属性值相同"," ，则按照书写顺序， ",[673,133589,133590],{},"后来居上",[54052,133592],{},"  ③数字后面 ",[673,133595,133596],{},"不能加单位",[54052,133598],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22339,133601,133603],{"id":133602},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133605,133606],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133608,133609],{},"方法:",[1515,133611,133612,133622],{},[484,133613,133614,133615,133618,133619],{},"left: 50%; 让 ",[673,133616,133617],{},"盒子的左侧"," 移动到 ",[673,133620,133621],{},"父级元素的水平中心位置",[484,133623,133624,133625,133628,133629],{},"margin-left: -100px; 让盒子 ",[673,133626,133627],{},"向左"," 移动 ",[673,133630,133631],{},"自身宽度的一半",[22339,133633,133635],{"id":133634},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[481,133637,133638,133641],{},[484,133639,133640],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[484,133642,133643],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133645,133646],{},"也就是说绝对定位和固定定位和浮动类似",[481,133648,133649],{"start":104},[484,133650,133651],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1515,133653,133654,133657,133660],{},[484,133655,133656],{},"可以用inline-block 转换为行内块",[484,133658,133659],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[484,133661,133662],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133664,133665],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22339,133667,133669],{"id":133668},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[481,133671,133672,133675,133678,133681],{},[484,133673,133674],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[484,133676,133677],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[484,133679,133680],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[484,133682,133683],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[27,133685,133686],{"className":126837,"code":131303,"language":126839,"meta":32,"style":32},[34,133687,133688,133694,133704,133708,133714,133724],{"__ignoreMap":32},[37,133689,133690,133692],{"class":39,"line":40},[37,133691,131310],{"class":2320},[37,133693,15913],{"class":50},[37,133695,133696,133698,133700,133702],{"class":39,"line":47},[37,133697,131317],{"class":61},[37,133699,51773],{"class":50},[37,133701,24077],{"class":61},[37,133703,1669],{"class":50},[37,133705,133706],{"class":39,"line":104},[37,133707,1941],{"class":50},[37,133709,133710,133712],{"class":39,"line":113},[37,133711,131332],{"class":2320},[37,133713,15913],{"class":50},[37,133715,133716,133718,133720,133722],{"class":39,"line":189},[37,133717,131317],{"class":61},[37,133719,51773],{"class":50},[37,133721,72858],{"class":61},[37,133723,1669],{"class":50},[37,133725,133726],{"class":39,"line":195},[37,133727,1941],{"class":50},[1838,133729],{"style":126693,"src":133730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22339,133732,133734],{"id":133733},"_11138-轮播图","11.1.3.8 轮播图",[1838,133736],{"style":126693,"src":133737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[481,133739,133740],{},[484,133741,133742],{},"制作顺序:",[1515,133744,133745,133748,133751,133760],{},[484,133746,133747],{},"大盒子我们类名为： tb-promo 淘宝广告",[484,133749,133750],{},"里面先放一张图片",[484,133752,133753,133754,133756,133757,133759],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54052,133755],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54052,133758],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[484,133761,133762,133763,133765,133766,133768],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54052,133764],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54052,133767],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[481,133770,133771],{"start":47},[484,133772,133773],{},"代码模块",[27,133775,133777],{"className":126837,"code":133776,"language":126839,"meta":32,"style":32},"\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",[34,133778,133779,133784,133791,133801,133811,133821,133825,133830,133837,133847],{"__ignoreMap":32},[37,133780,133781],{"class":39,"line":40},[37,133782,133783],{"class":43},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[37,133785,133786,133789],{"class":39,"line":47},[37,133787,133788],{"class":2320},".son",[37,133790,15913],{"class":50},[37,133792,133793,133795,133797,133799],{"class":39,"line":104},[37,133794,132643],{"class":61},[37,133796,51773],{"class":50},[37,133798,55167],{"class":61},[37,133800,1669],{"class":50},[37,133802,133803,133805,133807,133809],{"class":39,"line":113},[37,133804,132657],{"class":61},[37,133806,51773],{"class":50},[37,133808,135],{"class":61},[37,133810,1669],{"class":50},[37,133812,133813,133815,133817,133819],{"class":39,"line":189},[37,133814,132674],{"class":61},[37,133816,51773],{"class":50},[37,133818,135],{"class":61},[37,133820,1669],{"class":50},[37,133822,133823],{"class":39,"line":195},[37,133824,1941],{"class":50},[37,133826,133827],{"class":39,"line":201},[37,133828,133829],{"class":43},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[37,133831,133832,133835],{"class":39,"line":207},[37,133833,133834],{"class":2320},".father",[37,133836,15913],{"class":50},[37,133838,133839,133841,133843,133845],{"class":39,"line":213},[37,133840,132643],{"class":61},[37,133842,51773],{"class":50},[37,133844,55100],{"class":61},[37,133846,1669],{"class":50},[37,133848,133849],{"class":39,"line":218},[37,133850,1941],{"class":50},[14,133852,133853],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[498,133855,133857],{"id":133856},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1838,133859],{"style":126693,"src":133860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133862,133863],{},"✨ 黄金口诀：",[14,133865,133866],{},"\"TOP正下负上，LEFT正右负左\"",[14,133868,133869],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133871,133872],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133874,133875],{},"✨ 简单记：",[14,133877,133878],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[446,133880,133881],{},"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":32,"searchDepth":47,"depth":47,"links":133883},[133884],{"id":132411,"depth":47,"text":132412,"children":133885},[133886,133887,133888,133889],{"id":132415,"depth":104,"text":132416},{"id":132430,"depth":104,"text":132431},{"id":132598,"depth":104,"text":132599},{"id":133856,"depth":104,"text":133857},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132403,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133896,"title":133897,"body":133898,"description":451,"extension":452,"meta":135321,"navigation":454,"path":135322,"seo":135323,"stem":135324,"__hash__":135325},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133899,"toc":135300},[133900,133903,133907,133915,133919,133924,133932,133944,133948,133953,133961,133972,133976,133981,134022,134030,134034,134037,134040,134043,134137,134140,134234,134237,134331,134334,134337,134372,134375,134378,134408,134411,134414,134417,134420,134423,134426,134429,134499,134502,134506,134510,134551,134555,134561,134564,134567,134571,134574,134577,134580,134661,134664,134667,134671,134675,134678,134681,134684,134687,134690,134696,134705,134709,134728,134732,134742,134745,134748,134751,134754,134757,134760,134763,134766,134775,134779,134788,134791,134796,134849,134854,135020,135023,135026,135031,135034,135037,135040,135043,135048,135196,135199,135202,135207,135210,135215,135249,135252,135255,135259,135262,135269,135272,135275,135278,135281,135284,135287,135290,135294,135297],[10,133901,133897],{"id":133902},"_12-显示隐藏与图形资源",[469,133904,133906],{"id":133905},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1515,133908,133909,133912],{},[484,133910,133911],{},"目的:让一个元素在页面中消失或者显示出来",[484,133913,133914],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[498,133916,133918],{"id":133917},"_1211-display-显示","12.1.1 display 显示",[481,133920,133921],{},[484,133922,133923],{},"display 设置或检索对象是否及如何显示",[1515,133925,133926,133929],{},[484,133927,133928],{},"display: none;隐藏对象",[484,133930,133931],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[481,133933,133934,133941],{"start":47},[484,133935,133936,133937,133940],{},"特点： display 隐藏元素后， ",[673,133938,133939],{},"不再占"," 有原来的位置",[484,133942,133943],{},"在js中使用非常的广泛",[498,133945,133947],{"id":133946},"_1212-visibility可见性","12.1.2 visibility可见性",[481,133949,133950],{},[484,133951,133952],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1515,133954,133955,133958],{},[484,133956,133957],{},"visibility： visible；元素可见",[484,133959,133960],{},"visibility：hidden；元素隐藏",[481,133962,133963,133966,133969],{"start":47},[484,133964,133965],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[484,133967,133968],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[484,133970,133971],{},"隐藏后继续占有原有位置",[498,133973,133975],{"id":133974},"_1213-overflow溢出","12.1.3 overflow溢出",[1515,133977,133978],{},[484,133979,133980],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[661,133982,133983,133991],{},[664,133984,133985],{},[667,133986,133987,133989],{},[670,133988,127301],{"align":24077},[670,133990,27831],{"align":24077},[708,133992,133993,134001,134008,134015],{},[667,133994,133995,133998],{},[713,133996,133997],{"align":24077},"visible",[713,133999,134000],{"align":24077},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[667,134002,134003,134005],{},[713,134004,62050],{"align":24077},[713,134006,134007],{"align":24077},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[667,134009,134010,134012],{},[713,134011,129257],{"align":24077},[713,134013,134014],{"align":24077},"不管超出内容否，总是显示滚动条",[667,134016,134017,134019],{},[713,134018,72999],{"align":24077},[713,134020,134021],{"align":24077},"超出自动显示滚动条，不超出不显示滚动条",[1515,134023,134024,134027],{},[484,134025,134026],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[484,134028,134029],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[498,134031,134033],{"id":134032},"_1214-案例收获","12.1.4 案例收获",[1838,134035],{"style":126693,"src":134036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,134038,134039],{},"问题：没做出来动态效果，使用hover没实现",[14,134041,134042],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[27,134044,134045],{"className":126837,"code":132269,"language":126839,"meta":32,"style":32},[34,134046,134047,134051,134065,134069,134083,134087,134101,134105,134119,134123],{"__ignoreMap":32},[37,134048,134049],{"class":39,"line":40},[37,134050,132276],{"class":43},[37,134052,134053,134055,134057,134059,134061,134063],{"class":39,"line":47},[37,134054,132281],{"class":2320},[37,134056,80142],{"class":50},[37,134058,129197],{"class":61},[37,134060,51773],{"class":50},[37,134062,132290],{"class":61},[37,134064,129767],{"class":50},[37,134066,134067],{"class":39,"line":104},[37,134068,132297],{"class":43},[37,134070,134071,134073,134075,134077,134079,134081],{"class":39,"line":113},[37,134072,132302],{"class":2320},[37,134074,80142],{"class":50},[37,134076,129197],{"class":61},[37,134078,51773],{"class":50},[37,134080,55100],{"class":61},[37,134082,129767],{"class":50},[37,134084,134085],{"class":39,"line":189},[37,134086,132317],{"class":43},[37,134088,134089,134091,134093,134095,134097,134099],{"class":39,"line":195},[37,134090,132322],{"class":2320},[37,134092,80142],{"class":50},[37,134094,129197],{"class":61},[37,134096,51773],{"class":50},[37,134098,55167],{"class":61},[37,134100,129767],{"class":50},[37,134102,134103],{"class":39,"line":201},[37,134104,132337],{"class":43},[37,134106,134107,134109,134111,134113,134115,134117],{"class":39,"line":207},[37,134108,132342],{"class":2320},[37,134110,80142],{"class":50},[37,134112,129197],{"class":61},[37,134114,51773],{"class":50},[37,134116,86568],{"class":61},[37,134118,129767],{"class":50},[37,134120,134121],{"class":39,"line":213},[37,134122,132357],{"class":43},[37,134124,134125,134127,134129,134131,134133,134135],{"class":39,"line":218},[37,134126,132362],{"class":2320},[37,134128,80142],{"class":50},[37,134130,129197],{"class":61},[37,134132,51773],{"class":50},[37,134134,132371],{"class":61},[37,134136,129767],{"class":50},[14,134138,134139],{},"完整代码：",[27,134141,134142],{"className":126837,"code":132269,"language":126839,"meta":32,"style":32},[34,134143,134144,134148,134162,134166,134180,134184,134198,134202,134216,134220],{"__ignoreMap":32},[37,134145,134146],{"class":39,"line":40},[37,134147,132276],{"class":43},[37,134149,134150,134152,134154,134156,134158,134160],{"class":39,"line":47},[37,134151,132281],{"class":2320},[37,134153,80142],{"class":50},[37,134155,129197],{"class":61},[37,134157,51773],{"class":50},[37,134159,132290],{"class":61},[37,134161,129767],{"class":50},[37,134163,134164],{"class":39,"line":104},[37,134165,132297],{"class":43},[37,134167,134168,134170,134172,134174,134176,134178],{"class":39,"line":113},[37,134169,132302],{"class":2320},[37,134171,80142],{"class":50},[37,134173,129197],{"class":61},[37,134175,51773],{"class":50},[37,134177,55100],{"class":61},[37,134179,129767],{"class":50},[37,134181,134182],{"class":39,"line":189},[37,134183,132317],{"class":43},[37,134185,134186,134188,134190,134192,134194,134196],{"class":39,"line":195},[37,134187,132322],{"class":2320},[37,134189,80142],{"class":50},[37,134191,129197],{"class":61},[37,134193,51773],{"class":50},[37,134195,55167],{"class":61},[37,134197,129767],{"class":50},[37,134199,134200],{"class":39,"line":201},[37,134201,132337],{"class":43},[37,134203,134204,134206,134208,134210,134212,134214],{"class":39,"line":207},[37,134205,132342],{"class":2320},[37,134207,80142],{"class":50},[37,134209,129197],{"class":61},[37,134211,51773],{"class":50},[37,134213,86568],{"class":61},[37,134215,129767],{"class":50},[37,134217,134218],{"class":39,"line":213},[37,134219,132357],{"class":43},[37,134221,134222,134224,134226,134228,134230,134232],{"class":39,"line":218},[37,134223,132362],{"class":2320},[37,134225,80142],{"class":50},[37,134227,129197],{"class":61},[37,134229,51773],{"class":50},[37,134231,132371],{"class":61},[37,134233,129767],{"class":50},[14,134235,134236],{},"分布思路重点详解：",[27,134238,134239],{"className":126837,"code":132269,"language":126839,"meta":32,"style":32},[34,134240,134241,134245,134259,134263,134277,134281,134295,134299,134313,134317],{"__ignoreMap":32},[37,134242,134243],{"class":39,"line":40},[37,134244,132276],{"class":43},[37,134246,134247,134249,134251,134253,134255,134257],{"class":39,"line":47},[37,134248,132281],{"class":2320},[37,134250,80142],{"class":50},[37,134252,129197],{"class":61},[37,134254,51773],{"class":50},[37,134256,132290],{"class":61},[37,134258,129767],{"class":50},[37,134260,134261],{"class":39,"line":104},[37,134262,132297],{"class":43},[37,134264,134265,134267,134269,134271,134273,134275],{"class":39,"line":113},[37,134266,132302],{"class":2320},[37,134268,80142],{"class":50},[37,134270,129197],{"class":61},[37,134272,51773],{"class":50},[37,134274,55100],{"class":61},[37,134276,129767],{"class":50},[37,134278,134279],{"class":39,"line":189},[37,134280,132317],{"class":43},[37,134282,134283,134285,134287,134289,134291,134293],{"class":39,"line":195},[37,134284,132322],{"class":2320},[37,134286,80142],{"class":50},[37,134288,129197],{"class":61},[37,134290,51773],{"class":50},[37,134292,55167],{"class":61},[37,134294,129767],{"class":50},[37,134296,134297],{"class":39,"line":201},[37,134298,132337],{"class":43},[37,134300,134301,134303,134305,134307,134309,134311],{"class":39,"line":207},[37,134302,132342],{"class":2320},[37,134304,80142],{"class":50},[37,134306,129197],{"class":61},[37,134308,51773],{"class":50},[37,134310,86568],{"class":61},[37,134312,129767],{"class":50},[37,134314,134315],{"class":39,"line":213},[37,134316,132357],{"class":43},[37,134318,134319,134321,134323,134325,134327,134329],{"class":39,"line":218},[37,134320,132362],{"class":2320},[37,134322,80142],{"class":50},[37,134324,129197],{"class":61},[37,134326,51773],{"class":50},[37,134328,132371],{"class":61},[37,134330,129767],{"class":50},[1838,134332],{"style":126693,"src":134333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134335,134336],{},"图片太大，盒子太小，此时需要修改图片的大小",[27,134338,134340],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[34,134341,134342],{"__ignoreMap":32},[37,134343,134344,134346,134348,134350,134352,134355,134357,134359,134362,134365,134367,134370],{"class":39,"line":40},[37,134345,1418],{"class":50},[37,134347,1838],{"class":51636},[37,134349,55575],{"class":2320},[37,134351,55],{"class":50},[37,134353,134354],{"class":185},"\"images\u002Fpic.jpg\"",[37,134356,55583],{"class":2320},[37,134358,55],{"class":50},[37,134360,134361],{"class":185},"\"描述文字\"",[37,134363,134364],{"class":2320}," title",[37,134366,55],{"class":50},[37,134368,134369],{"class":185},"\"悬停提示\"",[37,134371,51643],{"class":50},[1838,134373],{"style":126693,"src":134374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134376,134377],{},"制造遮罩层",[27,134379,134380],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,134381,134382],{"__ignoreMap":32},[37,134383,134384,134386,134388,134390,134392,134394,134396,134398,134400,134402,134404,134406],{"class":39,"line":40},[37,134385,1418],{"class":50},[37,134387,1838],{"class":51636},[37,134389,55575],{"class":2320},[37,134391,55],{"class":50},[37,134393,134354],{"class":185},[37,134395,55583],{"class":2320},[37,134397,55],{"class":50},[37,134399,134361],{"class":185},[37,134401,134364],{"class":2320},[37,134403,55],{"class":50},[37,134405,134369],{"class":185},[37,134407,51643],{"class":50},[14,134409,134410],{},"此时是这样的为标准流",[1838,134412],{"style":126693,"src":134413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134415,134416],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134418,134419],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134421,134422],{},"让他在中间，用center(background-position)",[14,134424,134425],{},"将需要变的尽可能放到一个盒子中",[14,134427,134428],{},"放大盒子上内部盒子发生变化",[27,134430,134432],{"className":126837,"code":134431,"language":126839,"meta":32,"style":32},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[34,134433,134434,134440,134450,134454,134461,134471,134483,134495],{"__ignoreMap":32},[37,134435,134436,134438],{"class":39,"line":40},[37,134437,127904],{"class":2320},[37,134439,15913],{"class":50},[37,134441,134442,134444,134446,134448],{"class":39,"line":47},[37,134443,132643],{"class":61},[37,134445,51773],{"class":50},[37,134447,55100],{"class":61},[37,134449,1669],{"class":50},[37,134451,134452],{"class":39,"line":104},[37,134453,1941],{"class":50},[37,134455,134456,134459],{"class":39,"line":113},[37,134457,134458],{"class":2320},".child",[37,134460,15913],{"class":50},[37,134462,134463,134465,134467,134469],{"class":39,"line":189},[37,134464,132643],{"class":61},[37,134466,51773],{"class":50},[37,134468,55167],{"class":61},[37,134470,1669],{"class":50},[37,134472,134473,134475,134477,134479,134481],{"class":39,"line":195},[37,134474,132657],{"class":61},[37,134476,51773],{"class":50},[37,134478,1166],{"class":61},[37,134480,845],{"class":54},[37,134482,1669],{"class":50},[37,134484,134485,134487,134489,134491,134493],{"class":39,"line":201},[37,134486,132674],{"class":61},[37,134488,51773],{"class":50},[37,134490,1166],{"class":61},[37,134492,845],{"class":54},[37,134494,1669],{"class":50},[37,134496,134497],{"class":39,"line":207},[37,134498,1941],{"class":50},[14,134500,134501],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[469,134503,134505],{"id":134504},"_122-精灵图","12.2 精灵图",[498,134507,134509],{"id":134508},"_1221-理解","12.2.1 理解",[481,134511,134512,134530],{},[484,134513,134514,134515,132743,134518,134521,134522,134525,134526,134529],{},"目的： ",[673,134516,134517],{},"为了有效地减少服务器接收和发送请求的次数",[673,134519,134520],{},"提高"," 页面的 ",[673,134523,134524],{},"加载速度"," ，出现了 ",[673,134527,134528],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[484,134531,134532,134533,134535,134536,134538,134539,134541,134542,134544,134545,134547,134548,134550],{},"使用精灵图核心：",[54052,134534],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54052,134537],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54052,134540],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54052,134543],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54052,134546],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54052,134549],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[498,134552,134554],{"id":134553},"_1222-扒图","12.2.2 扒图",[27,134556,134559],{"className":134557,"code":134558,"language":5536},[5534],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[34,134560,134558],{"__ignoreMap":32},[1838,134562],{"style":126693,"src":134563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1838,134565],{"style":126693,"src":134566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[498,134568,134570],{"id":134569},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1838,134572],{"style":126693,"src":134573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134575,134576],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1838,134578],{"style":126693,"src":134579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[27,134581,134583],{"className":126837,"code":134582,"language":126839,"meta":32,"style":32},"\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",[34,134584,134585,134590,134597,134609,134621,134640,134657],{"__ignoreMap":32},[37,134586,134587],{"class":39,"line":40},[37,134588,134589],{"class":43},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[37,134591,134592,134595],{"class":39,"line":47},[37,134593,134594],{"class":2320},".icon",[37,134596,15913],{"class":50},[37,134598,134599,134601,134603,134605,134607],{"class":39,"line":104},[37,134600,70904],{"class":61},[37,134602,51773],{"class":50},[37,134604,1210],{"class":61},[37,134606,51828],{"class":54},[37,134608,1669],{"class":50},[37,134610,134611,134613,134615,134617,134619],{"class":39,"line":113},[37,134612,71124],{"class":61},[37,134614,51773],{"class":50},[37,134616,1210],{"class":61},[37,134618,51828],{"class":54},[37,134620,1669],{"class":50},[37,134622,134623,134625,134627,134629,134631,134634,134636,134638],{"class":39,"line":189},[37,134624,70947],{"class":61},[37,134626,51773],{"class":50},[37,134628,62062],{"class":61},[37,134630,165],{"class":50},[37,134632,134633],{"class":159},"sprites.png",[37,134635,14055],{"class":50},[37,134637,62072],{"class":61},[37,134639,1669],{"class":50},[37,134641,134642,134644,134646,134648,134650,134653,134655],{"class":39,"line":195},[37,134643,129097],{"class":61},[37,134645,51773],{"class":50},[37,134647,52099],{"class":61},[37,134649,51828],{"class":54},[37,134651,134652],{"class":61}," -20",[37,134654,51828],{"class":54},[37,134656,1669],{"class":50},[37,134658,134659],{"class":39,"line":201},[37,134660,1941],{"class":50},[1838,134662],{"style":126693,"src":134663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134665,134666],{},"在前端中坐标轴的正方向是右和下",[469,134668,134670],{"id":134669},"_123-字体图标","12.3 字体图标",[498,134672,134674],{"id":134673},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134676,134677],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134679,134680],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134682,134683],{},"1.图片文件还是比较大的。",[14,134685,134686],{},"2.图片本身放大和缩小会失真。",[14,134688,134689],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134691,134692,134693,26082],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[673,134694,134695],{},"字体图标 iconfont",[14,134697,134698,134701,134702,28727],{},[673,134699,134700],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[673,134703,134704],{},"展示的是图标，本质属于字体",[498,134706,134708],{"id":134707},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1515,134710,134711,134716,134719,134722,134725],{},[484,134712,134713,134715],{},[673,134714,26218],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[484,134717,134718],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[484,134720,134721],{},"兼容性：几乎支持所有的浏览器，请放心使用",[484,134723,134724],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[484,134726,134727],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[498,134729,134731],{"id":134730},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1515,134733,134734],{},[484,134735,134736,134737],{},"icomoon字体库：",[51,134738,134741],{"href":134739,"rel":134740},"http:\u002F\u002Ficomoon.io\u002F",[24206],"http:\u002F\u002Ficomoon.io",[14,134743,134744],{},"进去之后点icomoon app",[1838,134746],{"style":126693,"src":134747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134749,134750],{},"可以对其编辑：",[1838,134752],{"style":126693,"src":134753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134755,134756],{},"生成字体：",[1838,134758],{"style":126693,"src":134759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134761,134762],{},"下载：",[1838,134764],{"style":126693,"src":134765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1515,134767,134768],{},[484,134769,134770,134771],{},"阿里iconfont字体库： ",[51,134772,134773],{"href":134773,"rel":134774},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24206],[498,134776,134778],{"id":134777},"_1234-字体图标的引入","12.3.4 字体图标的引入",[481,134780,134781],{},[484,134782,134783,134784,134787],{},"把下载包里面的 ",[673,134785,134786],{},"fonts"," 文件夹放入页面根目录下",[1838,134789],{"style":126693,"src":134790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[481,134792,134793],{"start":47},[484,134794,134795],{},"字体文件格式",[661,134797,134798,134807],{},[664,134799,134800],{},[667,134801,134802,134805],{},[670,134803,134804],{"align":24077},"格式",[670,134806,24081],{"align":24077},[708,134808,134809,134819,134829,134839],{},[667,134810,134811,134816],{},[713,134812,134813],{"align":24077},[673,134814,134815],{},".ttf",[713,134817,134818],{"align":24077},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[667,134820,134821,134826],{},[713,134822,134823],{"align":24077},[673,134824,134825],{},".woff",[713,134827,134828],{"align":24077},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[667,134830,134831,134836],{},[713,134832,134833],{"align":24077},[673,134834,134835],{},".eot",[713,134837,134838],{"align":24077},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[667,134840,134841,134846],{},[713,134842,134843],{"align":24077},[673,134844,134845],{},"svg",[713,134847,134848],{"align":24077},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[481,134850,134851],{"start":104},[484,134852,134853],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[27,134855,134857],{"className":126837,"code":134856,"language":126839,"meta":32,"style":32},"\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",[34,134858,134859,134864,134871,134883,134899,134924,134945,134965,134985,134989,134995,135005,135016],{"__ignoreMap":32},[37,134860,134861],{"class":39,"line":40},[37,134862,134863],{"class":43},"\u002F* 引入字体图标 *\u002F\n",[37,134865,134866,134869],{"class":39,"line":47},[37,134867,134868],{"class":54},"@font-face",[37,134870,15913],{"class":50},[37,134872,134873,134876,134878,134881],{"class":39,"line":104},[37,134874,134875],{"class":61},"  font-family",[37,134877,51773],{"class":50},[37,134879,134880],{"class":185},"'icomoon'",[37,134882,1669],{"class":50},[37,134884,134885,134888,134890,134892,134894,134897],{"class":39,"line":113},[37,134886,134887],{"class":61},"  src",[37,134889,51773],{"class":50},[37,134891,62062],{"class":61},[37,134893,165],{"class":50},[37,134895,134896],{"class":185},"'fonts\u002Ficomoon.eot'",[37,134898,3069],{"class":50},[37,134900,134901,134903,134905,134907,134909,134912,134914,134917,134919,134922],{"class":39,"line":189},[37,134902,134887],{"class":61},[37,134904,51773],{"class":50},[37,134906,62062],{"class":61},[37,134908,165],{"class":50},[37,134910,134911],{"class":185},"'fonts\u002Ficomoon.eot?#iefix'",[37,134913,14055],{"class":50},[37,134915,134916],{"class":61},"format",[37,134918,165],{"class":50},[37,134920,134921],{"class":185},"'embedded-opentype'",[37,134923,38384],{"class":50},[37,134925,134926,134929,134931,134934,134936,134938,134940,134943],{"class":39,"line":195},[37,134927,134928],{"class":61},"       url",[37,134930,165],{"class":50},[37,134932,134933],{"class":185},"'fonts\u002Ficomoon.woff'",[37,134935,14055],{"class":50},[37,134937,134916],{"class":61},[37,134939,165],{"class":50},[37,134941,134942],{"class":185},"'woff'",[37,134944,38384],{"class":50},[37,134946,134947,134949,134951,134954,134956,134958,134960,134963],{"class":39,"line":201},[37,134948,134928],{"class":61},[37,134950,165],{"class":50},[37,134952,134953],{"class":185},"'fonts\u002Ficomoon.ttf'",[37,134955,14055],{"class":50},[37,134957,134916],{"class":61},[37,134959,165],{"class":50},[37,134961,134962],{"class":185},"'truetype'",[37,134964,38384],{"class":50},[37,134966,134967,134969,134971,134974,134976,134978,134980,134983],{"class":39,"line":207},[37,134968,134928],{"class":61},[37,134970,165],{"class":50},[37,134972,134973],{"class":185},"'fonts\u002Ficomoon.svg#icomoon'",[37,134975,14055],{"class":50},[37,134977,134916],{"class":61},[37,134979,165],{"class":50},[37,134981,134982],{"class":185},"'svg'",[37,134984,3069],{"class":50},[37,134986,134987],{"class":39,"line":213},[37,134988,1941],{"class":50},[37,134990,134991,134993],{"class":39,"line":218},[37,134992,134594],{"class":2320},[37,134994,15913],{"class":50},[37,134996,134997,134999,135001,135003],{"class":39,"line":227},[37,134998,134875],{"class":61},[37,135000,51773],{"class":50},[37,135002,134880],{"class":185},[37,135004,1669],{"class":50},[37,135006,135007,135010,135012,135014],{"class":39,"line":232},[37,135008,135009],{"class":61},"  font-style",[37,135011,51773],{"class":50},[37,135013,64177],{"class":61},[37,135015,1669],{"class":50},[37,135017,135018],{"class":39,"line":238},[37,135019,1941],{"class":50},[14,135021,135022],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1838,135024],{"style":126693,"src":135025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[481,135027,135028],{"start":113},[484,135029,135030],{},"添加字体",[1838,135032],{"style":126693,"src":135033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,135035,135036],{},"复制：",[1838,135038],{"style":126693,"src":135039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,135041,135042],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[481,135044,135045],{"start":189},[484,135046,135047],{},"代码展示：",[27,135049,135050],{"className":126837,"code":134856,"language":126839,"meta":32,"style":32},[34,135051,135052,135056,135062,135072,135086,135108,135126,135144,135162,135166,135172,135182,135192],{"__ignoreMap":32},[37,135053,135054],{"class":39,"line":40},[37,135055,134863],{"class":43},[37,135057,135058,135060],{"class":39,"line":47},[37,135059,134868],{"class":54},[37,135061,15913],{"class":50},[37,135063,135064,135066,135068,135070],{"class":39,"line":104},[37,135065,134875],{"class":61},[37,135067,51773],{"class":50},[37,135069,134880],{"class":185},[37,135071,1669],{"class":50},[37,135073,135074,135076,135078,135080,135082,135084],{"class":39,"line":113},[37,135075,134887],{"class":61},[37,135077,51773],{"class":50},[37,135079,62062],{"class":61},[37,135081,165],{"class":50},[37,135083,134896],{"class":185},[37,135085,3069],{"class":50},[37,135087,135088,135090,135092,135094,135096,135098,135100,135102,135104,135106],{"class":39,"line":189},[37,135089,134887],{"class":61},[37,135091,51773],{"class":50},[37,135093,62062],{"class":61},[37,135095,165],{"class":50},[37,135097,134911],{"class":185},[37,135099,14055],{"class":50},[37,135101,134916],{"class":61},[37,135103,165],{"class":50},[37,135105,134921],{"class":185},[37,135107,38384],{"class":50},[37,135109,135110,135112,135114,135116,135118,135120,135122,135124],{"class":39,"line":195},[37,135111,134928],{"class":61},[37,135113,165],{"class":50},[37,135115,134933],{"class":185},[37,135117,14055],{"class":50},[37,135119,134916],{"class":61},[37,135121,165],{"class":50},[37,135123,134942],{"class":185},[37,135125,38384],{"class":50},[37,135127,135128,135130,135132,135134,135136,135138,135140,135142],{"class":39,"line":201},[37,135129,134928],{"class":61},[37,135131,165],{"class":50},[37,135133,134953],{"class":185},[37,135135,14055],{"class":50},[37,135137,134916],{"class":61},[37,135139,165],{"class":50},[37,135141,134962],{"class":185},[37,135143,38384],{"class":50},[37,135145,135146,135148,135150,135152,135154,135156,135158,135160],{"class":39,"line":207},[37,135147,134928],{"class":61},[37,135149,165],{"class":50},[37,135151,134973],{"class":185},[37,135153,14055],{"class":50},[37,135155,134916],{"class":61},[37,135157,165],{"class":50},[37,135159,134982],{"class":185},[37,135161,3069],{"class":50},[37,135163,135164],{"class":39,"line":213},[37,135165,1941],{"class":50},[37,135167,135168,135170],{"class":39,"line":218},[37,135169,134594],{"class":2320},[37,135171,15913],{"class":50},[37,135173,135174,135176,135178,135180],{"class":39,"line":227},[37,135175,134875],{"class":61},[37,135177,51773],{"class":50},[37,135179,134880],{"class":185},[37,135181,1669],{"class":50},[37,135183,135184,135186,135188,135190],{"class":39,"line":232},[37,135185,135009],{"class":61},[37,135187,51773],{"class":50},[37,135189,64177],{"class":61},[37,135191,1669],{"class":50},[37,135193,135194],{"class":39,"line":238},[37,135195,1941],{"class":50},[1838,135197],{"style":126693,"src":135198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,135200,135201],{},"更加细节展示：",[481,135203,135204],{},[484,135205,135206],{},"html 标签内添加小图标",[1838,135208],{"style":126693,"src":135209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[481,135211,135212],{"start":47},[484,135213,135214],{},"给标签定义字体",[27,135216,135217],{"className":127584,"code":130941,"language":127586,"meta":32,"style":32},[34,135218,135219,135223,135237,135241],{"__ignoreMap":32},[37,135220,135221],{"class":39,"line":40},[37,135222,130948],{"class":43},[37,135224,135225,135227,135229,135231,135233,135235],{"class":39,"line":47},[37,135226,1418],{"class":50},[37,135228,51947],{"class":51636},[37,135230,53822],{"class":2320},[37,135232,55],{"class":50},[37,135234,130961],{"class":185},[37,135236,51643],{"class":50},[37,135238,135239],{"class":39,"line":104},[37,135240,130968],{"class":50},[37,135242,135243,135245,135247],{"class":39,"line":113},[37,135244,52121],{"class":50},[37,135246,51947],{"class":51636},[37,135248,51643],{"class":50},[14,135250,135251],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1838,135253],{"style":126693,"src":135254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[498,135256,135258],{"id":135257},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135260,135261],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135263,135264,135265,135268],{},"把压缩包里面的 ",[673,135266,135267],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135270,135271],{},"打开网站，点下方：",[1838,135273],{"style":126693,"src":135274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1838,135276],{"style":126693,"src":135277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1838,135279],{"style":126693,"src":135280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135282,135283],{},"点yes重新加载",[14,135285,135286],{},"然后重复之前的操作就可以实现了",[14,135288,135289],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[498,135291,135293],{"id":135292},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1838,135295],{"style":126693,"src":135296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[446,135298,135299],{},"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":32,"searchDepth":47,"depth":47,"links":135301},[135302,135308,135313],{"id":133905,"depth":47,"text":133906,"children":135303},[135304,135305,135306,135307],{"id":133917,"depth":104,"text":133918},{"id":133946,"depth":104,"text":133947},{"id":133974,"depth":104,"text":133975},{"id":134032,"depth":104,"text":134033},{"id":134504,"depth":47,"text":134505,"children":135309},[135310,135311,135312],{"id":134508,"depth":104,"text":134509},{"id":134553,"depth":104,"text":134554},{"id":134569,"depth":104,"text":134570},{"id":134669,"depth":47,"text":134670,"children":135314},[135315,135316,135317,135318,135319,135320],{"id":134673,"depth":104,"text":134674},{"id":134707,"depth":104,"text":134708},{"id":134730,"depth":104,"text":134731},{"id":134777,"depth":104,"text":134778},{"id":135257,"depth":104,"text":135258},{"id":135292,"depth":104,"text":135293},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133897,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135327,"title":135328,"body":135329,"description":451,"extension":452,"meta":136556,"navigation":454,"path":136557,"seo":136558,"stem":136559,"__hash__":136560},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135330,"toc":136537},[135331,135334,135338,135341,135355,135423,135453,135456,135460,135464,135566,135613,135617,135620,135623,135657,135660,135663,135666,135669,135672,135675,135678,135680,135683,135686,135689,135692,135695,135698,135701,135729,135732,135736,135739,135746,135749,135752,135778,135781,135785,135788,135791,135798,135802,135805,135807,135839,135842,135845,135857,135863,135866,135869,135872,135874,135878,135881,135884,135887,135932,135936,135938,135941,135948,135990,135993,135997,136002,136016,136020,136023,136026,136029,136032,136035,136069,136072,136075,136129,136132,136135,136138,136141,136193,136196,136199,136248,136252,136254,136257,136260,136263,136266,136269,136327,136330,136336,136339,136342,136374,136377,136381,136385,136388,136420,136424,136427,136471,136475,136478,136481,136484,136487,136490,136493,136496,136498,136501,136503,136506,136509,136512,136515,136520,136523,136525,136528,136531,136534],[10,135332,135328],{"id":135333},"_13-界面样式与布局技巧",[469,135335,135337],{"id":135336},"_131-css三角","13.1 css三角",[14,135339,135340],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1515,135342,135343,135346,135349,135352],{},[484,135344,135345],{},"用css 边框可以模拟三角效果",[484,135347,135348],{},"宽度高度为0",[484,135350,135351],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[484,135353,135354],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[27,135356,135358],{"className":126837,"code":135357,"language":126839,"meta":32,"style":32},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[34,135359,135360,135365,135372,135382,135392,135408,135419],{"__ignoreMap":32},[37,135361,135362],{"class":39,"line":40},[37,135363,135364],{"class":43},"\u002F* CSS 实现三角形 *\u002F\n",[37,135366,135367,135370],{"class":39,"line":47},[37,135368,135369],{"class":2320},".triangle",[37,135371,15913],{"class":50},[37,135373,135374,135376,135378,135380],{"class":39,"line":104},[37,135375,70904],{"class":61},[37,135377,51773],{"class":50},[37,135379,135],{"class":61},[37,135381,1669],{"class":50},[37,135383,135384,135386,135388,135390],{"class":39,"line":113},[37,135385,71124],{"class":61},[37,135387,51773],{"class":50},[37,135389,135],{"class":61},[37,135391,1669],{"class":50},[37,135393,135394,135396,135398,135400,135402,135404,135406],{"class":39,"line":189},[37,135395,71232],{"class":61},[37,135397,51773],{"class":50},[37,135399,98],{"class":61},[37,135401,51828],{"class":54},[37,135403,51857],{"class":61},[37,135405,64327],{"class":61},[37,135407,1669],{"class":50},[37,135409,135410,135413,135415,135417],{"class":39,"line":195},[37,135411,135412],{"class":61},"  border-bottom-color",[37,135414,51773],{"class":50},[37,135416,62705],{"class":61},[37,135418,1669],{"class":50},[37,135420,135421],{"class":39,"line":201},[37,135422,1941],{"class":50},[27,135424,135425],{"className":126837,"code":130994,"language":126839,"meta":32,"style":32},[34,135426,135427,135433,135449],{"__ignoreMap":32},[37,135428,135429,135431],{"class":39,"line":40},[37,135430,51947],{"class":51636},[37,135432,15913],{"class":50},[37,135434,135435,135437,135439,135441,135443,135445,135447],{"class":39,"line":47},[37,135436,71232],{"class":61},[37,135438,51773],{"class":50},[37,135440,332],{"class":61},[37,135442,51828],{"class":54},[37,135444,51857],{"class":61},[37,135446,130229],{"class":61},[37,135448,1669],{"class":50},[37,135450,135451],{"class":39,"line":104},[37,135452,1941],{"class":50},[1838,135454],{"style":126693,"src":135455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[469,135457,135459],{"id":135458},"_132-css用户界面样式","13.2 css用户界面样式",[498,135461,135463],{"id":135462},"_1321-鼠标样式","13.2.1 鼠标样式",[27,135465,135467],{"className":126837,"code":135466,"language":126839,"meta":32,"style":32},"\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",[34,135468,135469,135474,135493,135511,135530,135547],{"__ignoreMap":32},[37,135470,135471],{"class":39,"line":40},[37,135472,135473],{"class":43},"\u002F* 鼠标样式 *\u002F\n",[37,135475,135476,135478,135480,135483,135485,135487,135490],{"class":39,"line":47},[37,135477,51947],{"class":51636},[37,135479,80142],{"class":50},[37,135481,135482],{"class":61},"cursor",[37,135484,51773],{"class":50},[37,135486,62366],{"class":61},[37,135488,135489],{"class":50},"; }   ",[37,135491,135492],{"class":43},"\u002F* 手型 *\u002F\n",[37,135494,135495,135497,135499,135501,135503,135506,135508],{"class":39,"line":104},[37,135496,51947],{"class":51636},[37,135498,80142],{"class":50},[37,135500,135482],{"class":61},[37,135502,51773],{"class":50},[37,135504,135505],{"class":61},"default",[37,135507,135489],{"class":50},[37,135509,135510],{"class":43},"\u002F* 默认 *\u002F\n",[37,135512,135513,135515,135517,135519,135521,135524,135527],{"class":39,"line":113},[37,135514,51947],{"class":51636},[37,135516,80142],{"class":50},[37,135518,135482],{"class":61},[37,135520,51773],{"class":50},[37,135522,135523],{"class":61},"move",[37,135525,135526],{"class":50},"; }      ",[37,135528,135529],{"class":43},"\u002F* 移动 *\u002F\n",[37,135531,135532,135534,135536,135538,135540,135542,135544],{"class":39,"line":189},[37,135533,51947],{"class":51636},[37,135535,80142],{"class":50},[37,135537,135482],{"class":61},[37,135539,51773],{"class":50},[37,135541,5536],{"class":61},[37,135543,135526],{"class":50},[37,135545,135546],{"class":43},"\u002F* 文本 *\u002F\n",[37,135548,135549,135551,135553,135555,135557,135560,135563],{"class":39,"line":195},[37,135550,51947],{"class":51636},[37,135552,80142],{"class":50},[37,135554,135482],{"class":61},[37,135556,51773],{"class":50},[37,135558,135559],{"class":61},"not-allowed",[37,135561,135562],{"class":50},"; } ",[37,135564,135565],{"class":43},"\u002F* 禁止 *\u002F\n",[661,135567,135568,135576],{},[664,135569,135570],{},[667,135571,135572,135574],{},[670,135573,127301],{"align":24077},[670,135575,27831],{"align":24077},[708,135577,135578,135585,135592,135599,135606],{},[667,135579,135580,135582],{},[713,135581,135505],{"align":24077},[713,135583,135584],{"align":24077},"小白 默认",[667,135586,135587,135589],{},[713,135588,62366],{"align":24077},[713,135590,135591],{"align":24077},"小手",[667,135593,135594,135596],{},[713,135595,135523],{"align":24077},[713,135597,135598],{"align":24077},"移动",[667,135600,135601,135603],{},[713,135602,5536],{"align":24077},[713,135604,135605],{"align":24077},"文本",[667,135607,135608,135610],{},[713,135609,135559],{"align":24077},[713,135611,135612],{"align":24077},"禁止",[498,135614,135616],{"id":135615},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135618,135619],{},"去除表单轮廓线",[14,135621,135622],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[27,135624,135625],{"className":126837,"code":130201,"language":126839,"meta":32,"style":32},[34,135626,135627,135631,135637,135653],{"__ignoreMap":32},[37,135628,135629],{"class":39,"line":40},[37,135630,130208],{"class":43},[37,135632,135633,135635],{"class":39,"line":47},[37,135634,51947],{"class":51636},[37,135636,15913],{"class":50},[37,135638,135639,135641,135643,135645,135647,135649,135651],{"class":39,"line":104},[37,135640,71232],{"class":61},[37,135642,51773],{"class":50},[37,135644,332],{"class":61},[37,135646,51828],{"class":54},[37,135648,51857],{"class":61},[37,135650,130229],{"class":61},[37,135652,1669],{"class":50},[37,135654,135655],{"class":39,"line":113},[37,135656,1941],{"class":50},[14,135658,135659],{},"文本域：",[1838,135661],{"style":126693,"src":135662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135664,135665],{},"此时会有一个空白区域",[1838,135667],{"style":126693,"src":135668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135670,135671],{},"写在同一行就不会出现这个问题",[1838,135673],{"style":126693,"src":135674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135676,135677],{},"文本域是行内块元素，一定记住！！！",[14,135679,98518],{},[1838,135681],{"style":126693,"src":135682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135684,135685],{},"文本域尽量放在一行",[14,135687,135688],{},"知识回顾：cols是列，rols是行",[1838,135690],{"style":126693,"src":135691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135693,135694],{},"它可以进行拖动，显然这是我们不愿意看到的",[1838,135696],{"style":126693,"src":135697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135699,135700],{},"使用resize进行解决",[27,135702,135704],{"className":126837,"code":135703,"language":126839,"meta":32,"style":32},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[34,135705,135706,135712,135725],{"__ignoreMap":32},[37,135707,135708,135710],{"class":39,"line":40},[37,135709,54157],{"class":51636},[37,135711,15913],{"class":50},[37,135713,135714,135716,135718,135720,135722],{"class":39,"line":47},[37,135715,71134],{"class":61},[37,135717,51773],{"class":50},[37,135719,55073],{"class":61},[37,135721,130700],{"class":50},[37,135723,135724],{"class":43},"\u002F* 取消表单轮廓线 *\u002F\n",[37,135726,135727],{"class":39,"line":104},[37,135728,1941],{"class":50},[14,135730,135731],{},"此时就无法通过右下方实现拖动了",[498,135733,135735],{"id":135734},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135737,135738],{},"实现一个盒子中的文字和图片对齐",[14,135740,135741,135742,135745],{},"用于设置一个元素的 ",[673,135743,135744],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135747,135748],{},"图片和文字默认是基线对齐",[1838,135750],{"style":126693,"src":135751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[27,135753,135754],{"className":126837,"code":135703,"language":126839,"meta":32,"style":32},[34,135755,135756,135762,135774],{"__ignoreMap":32},[37,135757,135758,135760],{"class":39,"line":40},[37,135759,54157],{"class":51636},[37,135761,15913],{"class":50},[37,135763,135764,135766,135768,135770,135772],{"class":39,"line":47},[37,135765,71134],{"class":61},[37,135767,51773],{"class":50},[37,135769,55073],{"class":61},[37,135771,130700],{"class":50},[37,135773,135724],{"class":43},[37,135775,135776],{"class":39,"line":104},[37,135777,1941],{"class":50},[1838,135779],{"style":126693,"src":135780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22339,135782,135784],{"id":135783},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135786,135787],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1838,135789],{"style":126693,"src":135790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135792,135793,135794,135797],{},"此时可以给图片、表单这些行内块元素的 ",[673,135795,135796],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22339,135799,135801],{"id":135800},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135803,135804],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135806,14974],{},[27,135808,135810],{"className":126837,"code":135809,"language":126839,"meta":32,"style":32},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[34,135811,135812,135817,135823,135835],{"__ignoreMap":32},[37,135813,135814],{"class":39,"line":40},[37,135815,135816],{"class":43},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[37,135818,135819,135821],{"class":39,"line":47},[37,135820,1838],{"class":51636},[37,135822,15913],{"class":50},[37,135824,135825,135828,135830,135833],{"class":39,"line":104},[37,135826,135827],{"class":61},"  vertical-align",[37,135829,51773],{"class":50},[37,135831,135832],{"class":61},"middle",[37,135834,1669],{"class":50},[37,135836,135837],{"class":39,"line":113},[37,135838,1941],{"class":50},[1838,135840],{"style":126693,"src":135841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135843,135844],{},"主要解决方法有两种：",[481,135846,135847],{},[484,135848,135849,135852,135853,135856],{},[673,135850,135851],{},"给图片"," 添加 ",[673,135854,135855],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135858,135859,135860],{},"2.把图片转换为块级元素 ",[673,135861,135862],{},"display: block",[14,135864,135865],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135867,135868],{},"img {",[14,135870,135871],{},"vertical-align:middle;",[14,135873,1454],{},[498,135875,135877],{"id":135876},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135879,135880],{},"效果：",[1838,135882],{"style":126693,"src":135883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135885,135886],{},"单行文本溢出显示省略号--必须满足三个条件：",[27,135888,135890],{"className":126837,"code":135889,"language":126839,"meta":32,"style":32},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[34,135891,135892,135897,135903,135913,135918,135928],{"__ignoreMap":32},[37,135893,135894],{"class":39,"line":40},[37,135895,135896],{"class":43},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[37,135898,135899,135901],{"class":39,"line":47},[37,135900,1838],{"class":51636},[37,135902,15913],{"class":50},[37,135904,135905,135907,135909,135911],{"class":39,"line":104},[37,135906,135827],{"class":61},[37,135908,51773],{"class":50},[37,135910,135832],{"class":61},[37,135912,1669],{"class":50},[37,135914,135915],{"class":39,"line":113},[37,135916,135917],{"class":43},"  \u002F* 或 *\u002F\n",[37,135919,135920,135922,135924,135926],{"class":39,"line":189},[37,135921,128453],{"class":61},[37,135923,51773],{"class":50},[37,135925,61205],{"class":61},[37,135927,1669],{"class":50},[37,135929,135930],{"class":39,"line":195},[37,135931,1941],{"class":50},[498,135933,135935],{"id":135934},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135937,135880],{},[1838,135939],{"style":126693,"src":135940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135942,135943,135944,135947],{},"多行文本溢出显示省略号， ",[673,135945,135946],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[27,135949,135950],{"className":126837,"code":135889,"language":126839,"meta":32,"style":32},[34,135951,135952,135956,135962,135972,135976,135986],{"__ignoreMap":32},[37,135953,135954],{"class":39,"line":40},[37,135955,135896],{"class":43},[37,135957,135958,135960],{"class":39,"line":47},[37,135959,1838],{"class":51636},[37,135961,15913],{"class":50},[37,135963,135964,135966,135968,135970],{"class":39,"line":104},[37,135965,135827],{"class":61},[37,135967,51773],{"class":50},[37,135969,135832],{"class":61},[37,135971,1669],{"class":50},[37,135973,135974],{"class":39,"line":113},[37,135975,135917],{"class":43},[37,135977,135978,135980,135982,135984],{"class":39,"line":189},[37,135979,128453],{"class":61},[37,135981,51773],{"class":50},[37,135983,61205],{"class":61},[37,135985,1669],{"class":50},[37,135987,135988],{"class":39,"line":195},[37,135989,1941],{"class":50},[14,135991,135992],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[469,135994,135996],{"id":135995},"_133-常见布局技巧","13.3 常见布局技巧",[14,135998,135999],{},[673,136000,136001],{},"巧妙利用一个技术更快更好的布局：",[481,136003,136004,136007,136010,136013],{},[484,136005,136006],{},"margin负值的运用",[484,136008,136009],{},"文字围绕浮动元素",[484,136011,136012],{},"行内块的巧妙运用",[484,136014,136015],{},"CSS三角强化",[498,136017,136019],{"id":136018},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,136021,136022],{},"应用场景：",[1838,136024],{"style":126693,"src":136025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1838,136027],{"style":126693,"src":136028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,136030,136031],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,136033,136034],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[27,136036,136037],{"className":126837,"code":130201,"language":126839,"meta":32,"style":32},[34,136038,136039,136043,136049,136065],{"__ignoreMap":32},[37,136040,136041],{"class":39,"line":40},[37,136042,130208],{"class":43},[37,136044,136045,136047],{"class":39,"line":47},[37,136046,51947],{"class":51636},[37,136048,15913],{"class":50},[37,136050,136051,136053,136055,136057,136059,136061,136063],{"class":39,"line":104},[37,136052,71232],{"class":61},[37,136054,51773],{"class":50},[37,136056,332],{"class":61},[37,136058,51828],{"class":54},[37,136060,51857],{"class":61},[37,136062,130229],{"class":61},[37,136064,1669],{"class":50},[37,136066,136067],{"class":39,"line":113},[37,136068,1941],{"class":50},[1838,136070],{"style":126693,"src":136071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,136073,136074],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[27,136076,136078],{"className":126837,"code":136077,"language":126839,"meta":32,"style":32},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[34,136079,136080,136085,136091,136101,136113,136125],{"__ignoreMap":32},[37,136081,136082],{"class":39,"line":40},[37,136083,136084],{"class":43},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[37,136086,136087,136089],{"class":39,"line":47},[37,136088,130685],{"class":2320},[37,136090,15913],{"class":50},[37,136092,136093,136095,136097,136099],{"class":39,"line":104},[37,136094,132643],{"class":61},[37,136096,51773],{"class":50},[37,136098,55100],{"class":61},[37,136100,1669],{"class":50},[37,136102,136103,136105,136107,136109,136111],{"class":39,"line":113},[37,136104,132657],{"class":61},[37,136106,51773],{"class":50},[37,136108,98],{"class":61},[37,136110,51828],{"class":54},[37,136112,1669],{"class":50},[37,136114,136115,136117,136119,136121,136123],{"class":39,"line":189},[37,136116,132674],{"class":61},[37,136118,51773],{"class":50},[37,136120,1210],{"class":61},[37,136122,51828],{"class":54},[37,136124,1669],{"class":50},[37,136126,136127],{"class":39,"line":195},[37,136128,1941],{"class":50},[14,136130,136131],{},"加上上述代码会发现：",[1838,136133],{"style":126693,"src":136134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,136136,136137],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,136139,136140],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[27,136142,136143],{"className":126837,"code":136077,"language":126839,"meta":32,"style":32},[34,136144,136145,136149,136155,136165,136177,136189],{"__ignoreMap":32},[37,136146,136147],{"class":39,"line":40},[37,136148,136084],{"class":43},[37,136150,136151,136153],{"class":39,"line":47},[37,136152,130685],{"class":2320},[37,136154,15913],{"class":50},[37,136156,136157,136159,136161,136163],{"class":39,"line":104},[37,136158,132643],{"class":61},[37,136160,51773],{"class":50},[37,136162,55100],{"class":61},[37,136164,1669],{"class":50},[37,136166,136167,136169,136171,136173,136175],{"class":39,"line":113},[37,136168,132657],{"class":61},[37,136170,51773],{"class":50},[37,136172,98],{"class":61},[37,136174,51828],{"class":54},[37,136176,1669],{"class":50},[37,136178,136179,136181,136183,136185,136187],{"class":39,"line":189},[37,136180,132674],{"class":61},[37,136182,51773],{"class":50},[37,136184,1210],{"class":61},[37,136186,51828],{"class":54},[37,136188,1669],{"class":50},[37,136190,136191],{"class":39,"line":195},[37,136192,1941],{"class":50},[14,136194,136195],{},"解决方式2：",[14,136197,136198],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[27,136200,136202],{"className":126837,"code":136201,"language":126839,"meta":32,"style":32},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[34,136203,136204,136210,136220,136232,136244],{"__ignoreMap":32},[37,136205,136206,136208],{"class":39,"line":40},[37,136207,51947],{"class":51636},[37,136209,15913],{"class":50},[37,136211,136212,136214,136216,136218],{"class":39,"line":47},[37,136213,132643],{"class":61},[37,136215,51773],{"class":50},[37,136217,55100],{"class":61},[37,136219,1669],{"class":50},[37,136221,136222,136224,136226,136228,136230],{"class":39,"line":104},[37,136223,132657],{"class":61},[37,136225,51773],{"class":50},[37,136227,98],{"class":61},[37,136229,51828],{"class":54},[37,136231,1669],{"class":50},[37,136233,136234,136236,136238,136240,136242],{"class":39,"line":113},[37,136235,132674],{"class":61},[37,136237,51773],{"class":50},[37,136239,1210],{"class":61},[37,136241,51828],{"class":54},[37,136243,1669],{"class":50},[37,136245,136246],{"class":39,"line":189},[37,136247,1941],{"class":50},[498,136249,136251],{"id":136250},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136253,136022],{},[1838,136255],{"style":126693,"src":136256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136258,136259],{},"实现结构图：",[1838,136261],{"style":126693,"src":136262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136264,136265],{},"巧妙运用浮动元素不会压住文字的特性",[14,136267,136268],{},"代码显示：",[27,136270,136272],{"className":126837,"code":136271,"language":126839,"meta":32,"style":32},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[34,136273,136274,136280,136290,136294,136299,136303,136309,136323],{"__ignoreMap":32},[37,136275,136276,136278],{"class":39,"line":40},[37,136277,130685],{"class":2320},[37,136279,15913],{"class":50},[37,136281,136282,136284,136286,136288],{"class":39,"line":47},[37,136283,131317],{"class":61},[37,136285,51773],{"class":50},[37,136287,24077],{"class":61},[37,136289,1669],{"class":50},[37,136291,136292],{"class":39,"line":104},[37,136293,1941],{"class":50},[37,136295,136296],{"class":39,"line":113},[37,136297,136298],{"class":50},"```Css\n",[37,136300,136301],{"class":39,"line":189},[37,136302,130680],{"class":43},[37,136304,136305,136307],{"class":39,"line":195},[37,136306,130685],{"class":2320},[37,136308,15913],{"class":50},[37,136310,136311,136313,136315,136317,136319,136321],{"class":39,"line":201},[37,136312,70806],{"class":61},[37,136314,51773],{"class":50},[37,136316,135],{"class":61},[37,136318,51892],{"class":61},[37,136320,130700],{"class":50},[37,136322,130703],{"class":43},[37,136324,136325],{"class":39,"line":207},[37,136326,1941],{"class":50},[14,136328,136329],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[27,136331,136334],{"className":136332,"code":136333,"language":5536},[5534],"\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",[34,136335,136333],{"__ignoreMap":32},[1838,136337],{"style":126693,"src":136338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136340,136341],{},"最终展示结果：",[27,136343,136344],{"className":126837,"code":130673,"language":126839,"meta":32,"style":32},[34,136345,136346,136350,136356,136370],{"__ignoreMap":32},[37,136347,136348],{"class":39,"line":40},[37,136349,130680],{"class":43},[37,136351,136352,136354],{"class":39,"line":47},[37,136353,130685],{"class":2320},[37,136355,15913],{"class":50},[37,136357,136358,136360,136362,136364,136366,136368],{"class":39,"line":104},[37,136359,70806],{"class":61},[37,136361,51773],{"class":50},[37,136363,135],{"class":61},[37,136365,51892],{"class":61},[37,136367,130700],{"class":50},[37,136369,130703],{"class":43},[37,136371,136372],{"class":39,"line":113},[37,136373,1941],{"class":50},[1838,136375],{"style":126693,"src":136376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[469,136378,136380],{"id":136379},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[498,136382,136384],{"id":136383},"_1341-原理","13.4.1 原理",[1838,136386],{"style":126693,"src":136387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[27,136389,136390],{"className":126837,"code":130673,"language":126839,"meta":32,"style":32},[34,136391,136392,136396,136402,136416],{"__ignoreMap":32},[37,136393,136394],{"class":39,"line":40},[37,136395,130680],{"class":43},[37,136397,136398,136400],{"class":39,"line":47},[37,136399,130685],{"class":2320},[37,136401,15913],{"class":50},[37,136403,136404,136406,136408,136410,136412,136414],{"class":39,"line":104},[37,136405,70806],{"class":61},[37,136407,51773],{"class":50},[37,136409,135],{"class":61},[37,136411,51892],{"class":61},[37,136413,130700],{"class":50},[37,136415,130703],{"class":43},[37,136417,136418],{"class":39,"line":113},[37,136419,1941],{"class":50},[498,136421,136423],{"id":136422},"_1342-实例","13.4.2 实例",[1838,136425],{"style":126693,"src":136426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[27,136428,136429],{"className":126837,"code":131303,"language":126839,"meta":32,"style":32},[34,136430,136431,136437,136447,136451,136457,136467],{"__ignoreMap":32},[37,136432,136433,136435],{"class":39,"line":40},[37,136434,131310],{"class":2320},[37,136436,15913],{"class":50},[37,136438,136439,136441,136443,136445],{"class":39,"line":47},[37,136440,131317],{"class":61},[37,136442,51773],{"class":50},[37,136444,24077],{"class":61},[37,136446,1669],{"class":50},[37,136448,136449],{"class":39,"line":104},[37,136450,1941],{"class":50},[37,136452,136453,136455],{"class":39,"line":113},[37,136454,131332],{"class":2320},[37,136456,15913],{"class":50},[37,136458,136459,136461,136463,136465],{"class":39,"line":189},[37,136460,131317],{"class":61},[37,136462,51773],{"class":50},[37,136464,72858],{"class":61},[37,136466,1669],{"class":50},[37,136468,136469],{"class":39,"line":195},[37,136470,1941],{"class":50},[469,136472,136474],{"id":136473},"_135-css的初始化","13.5 css的初始化",[14,136476,136477],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136479,136480],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136482,136483],{},"每个网页都必须首先进行 CSS初始化。",[14,136485,136486],{},"这里我们以 京东CSS初始化代码为例。",[14,136488,136489],{},"在网页右键查看网页源代码",[14,136491,136492],{},"找到css的link引入语句",[14,136494,136495],{},"然后ctrl+f 输入body",[14,136497,77561],{},[1838,136499],{"style":126693,"src":136500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136502,77584],{},[1838,136504],{"style":126693,"src":136505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136507,136508],{},"③打开了网页上传压缩的代码",[1838,136510],{"style":126693,"src":136511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136513,136514],{},"④从body前可以查看这个网页的初始化代码",[14,136516,136517],{},[673,136518,136519],{},"Unicode编码字体：",[14,136521,136522],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136524,83542],{},[14,136526,136527],{},"黑体 \\9ED1\\4F53",[14,136529,136530],{},"宋体 \\5B8B\\4F53",[14,136532,136533],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[446,136535,136536],{},"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":32,"searchDepth":47,"depth":47,"links":136538},[136539,136540,136547,136551,136555],{"id":135336,"depth":47,"text":135337},{"id":135458,"depth":47,"text":135459,"children":136541},[136542,136543,136544,136545,136546],{"id":135462,"depth":104,"text":135463},{"id":135615,"depth":104,"text":135616},{"id":135734,"depth":104,"text":135735},{"id":135876,"depth":104,"text":135877},{"id":135934,"depth":104,"text":135935},{"id":135995,"depth":47,"text":135996,"children":136548},[136549,136550],{"id":136018,"depth":104,"text":136019},{"id":136250,"depth":104,"text":136251},{"id":136379,"depth":47,"text":136380,"children":136552},[136553,136554],{"id":136383,"depth":104,"text":136384},{"id":136422,"depth":104,"text":136423},{"id":136473,"depth":47,"text":136474},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135328,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136562,"title":136563,"body":136564,"description":451,"extension":452,"meta":138250,"navigation":454,"path":138251,"seo":138252,"stem":138253,"__hash__":138254},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136565,"toc":138239},[136566,136569,136573,136577,136580,136587,136590,136593,136631,136634,136636,136650,136654,136663,136667,136672,136675,136678,136681,136716,136721,136724,136754,136757,136762,136765,136768,136798,136801,136855,136858,136862,136867,136879,136882,136886,136916,136919,136924,136927,136957,136960,136964,136981,136985,136989,136992,137025,137028,137032,137035,137038,137041,137044,137047,137158,137161,137164,137167,137269,137272,137276,137280,137284,137287,137327,137330,137332,137348,137352,137355,137360,137441,137444,137447,137573,137578,137581,137589,137592,137597,137682,137685,137689,137692,137695,137699,137719,137724,137808,137811,137816,137819,137822,137900,137903,137906,137909,137912,137915,137920,137923,137926,137998,138001,138006,138009,138106,138109,138115,138118,138121,138124,138127,138130,138133,138136,138139,138143,138148,138151,138184,138189,138192,138233,138236],[10,136567,136563],{"id":136568},"_14-html5与css3新特性",[469,136570,136572],{"id":136571},"_141-html5的新特性","14.1 HTML5的新特性",[498,136574,136576],{"id":136575},"_1411-基本标签","14.1.1 基本标签",[14,136578,136579],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136581,136582,136583,136586],{},"这些新特性都有兼容性问题，基本是 ",[673,136584,136585],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136588,136589],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136591,136592],{},"现在使用的是新特性：",[1515,136594,136595,136601,136607,136613,136619,136625],{},[484,136596,136597,136600],{},[34,136598,136599],{},"\u003Cheader>"," 头部标签",[484,136602,136603,136606],{},[34,136604,136605],{},"\u003Cnav>"," 导航标签",[484,136608,136609,136612],{},[34,136610,136611],{},"\u003Carticle>"," 内容标签",[484,136614,136615,136618],{},[34,136616,136617],{},"\u003Csection>"," 定义文档某个区域",[484,136620,136621,136624],{},[34,136622,136623],{},"\u003Caside>"," 侧边栏标签",[484,136626,136627,136630],{},[34,136628,136629],{},"\u003Cfooter>"," 尾部标签",[1838,136632],{"style":126693,"src":136633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136635,558],{},[1515,136637,136638,136641,136644,136647],{},[484,136639,136640],{},"这种语义化标准主要是针对搜索引擎的",[484,136642,136643],{},"这些标签页面中可以经常使用",[484,136645,136646],{},"在IE9中，需要把这些元素转换为块级元素",[484,136648,136649],{},"移动端更喜欢使用这些标签",[498,136651,136653],{"id":136652},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136655,136656,136657,136659,136660,136662],{},"音频 ",[673,136658,28516],{}," 和视频 ",[673,136661,28525],{}," 两个标签",[22339,136664,136666],{"id":136665},"_14121-视频标签-video","14.1.2.1 视频标签- video",[481,136668,136669],{},[484,136670,136671],{},"支持格式：",[1838,136673],{"style":126693,"src":136674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136676,136677],{},"尽量使用MP4，兼容性好",[14,136679,136680],{},"用MP4就可以",[27,136682,136684],{"className":127584,"code":136683,"language":127586,"meta":32,"style":32},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[34,136685,136686],{"__ignoreMap":32},[37,136687,136688,136690,136692,136694,136696,136699,136701,136704,136707,136710,136712,136714],{"class":39,"line":40},[37,136689,1418],{"class":50},[37,136691,28525],{"class":51636},[37,136693,55575],{"class":2320},[37,136695,55],{"class":50},[37,136697,136698],{"class":185},"\"movie.mp4\"",[37,136700,92758],{"class":2320},[37,136702,136703],{"class":2320}," autoplay",[37,136705,136706],{"class":2320}," muted",[37,136708,136709],{"class":2320}," loop",[37,136711,55650],{"class":50},[37,136713,28525],{"class":51636},[37,136715,51643],{"class":50},[481,136717,136718],{"start":47},[484,136719,136720],{},"兼容写法",[14,136722,136723],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[27,136725,136726],{"className":127584,"code":136683,"language":127586,"meta":32,"style":32},[34,136727,136728],{"__ignoreMap":32},[37,136729,136730,136732,136734,136736,136738,136740,136742,136744,136746,136748,136750,136752],{"class":39,"line":40},[37,136731,1418],{"class":50},[37,136733,28525],{"class":51636},[37,136735,55575],{"class":2320},[37,136737,55],{"class":50},[37,136739,136698],{"class":185},[37,136741,92758],{"class":2320},[37,136743,136703],{"class":2320},[37,136745,136706],{"class":2320},[37,136747,136709],{"class":2320},[37,136749,55650],{"class":50},[37,136751,28525],{"class":51636},[37,136753,51643],{"class":50},[14,136755,136756],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[481,136758,136759],{"start":104},[484,136760,136761],{},"video常用属性",[1838,136763],{"style":126693,"src":136764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136766,136767],{},"poster属性后面是跟的等待加载图片的地址",[27,136769,136770],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,136771,136772],{"__ignoreMap":32},[37,136773,136774,136776,136778,136780,136782,136784,136786,136788,136790,136792,136794,136796],{"class":39,"line":40},[37,136775,1418],{"class":50},[37,136777,1838],{"class":51636},[37,136779,55575],{"class":2320},[37,136781,55],{"class":50},[37,136783,134354],{"class":185},[37,136785,55583],{"class":2320},[37,136787,55],{"class":50},[37,136789,134361],{"class":185},[37,136791,134364],{"class":2320},[37,136793,55],{"class":50},[37,136795,134369],{"class":185},[37,136797,51643],{"class":50},[14,136799,136800],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[27,136802,136804],{"className":126837,"code":136803,"language":126839,"meta":32,"style":32},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[34,136805,136806,136811,136817,136841,136846,136851],{"__ignoreMap":32},[37,136807,136808],{"class":39,"line":40},[37,136809,136810],{"class":43},"\u002F* 2D 位移 *\u002F\n",[37,136812,136813,136815],{"class":39,"line":47},[37,136814,51947],{"class":51636},[37,136816,15913],{"class":50},[37,136818,136819,136822,136824,136827,136829,136831,136833,136835,136837,136839],{"class":39,"line":104},[37,136820,136821],{"class":61},"  transform",[37,136823,51773],{"class":50},[37,136825,136826],{"class":61},"translate",[37,136828,165],{"class":50},[37,136830,154],{"class":61},[37,136832,51828],{"class":54},[37,136834,12776],{"class":50},[37,136836,1166],{"class":61},[37,136838,51828],{"class":54},[37,136840,3069],{"class":50},[37,136842,136843],{"class":39,"line":113},[37,136844,136845],{"class":43},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[37,136847,136848],{"class":39,"line":189},[37,136849,136850],{"class":43},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[37,136852,136853],{"class":39,"line":195},[37,136854,1941],{"class":50},[14,136856,136857],{},"muted:自动静音属性",[22339,136859,136861],{"id":136860},"_14122-音频标签audio","14.1.2.2 音频标签audio",[481,136863,136864],{},[484,136865,136866],{},"基本使用",[14,136868,136869,136870,136875,136876],{},"当前 ",[673,136871,136872],{},[34,136873,136874],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[673,136877,136878],{},"mp3格式",[1838,136880],{"style":126693,"src":136881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[481,136883,136884],{"start":47},[484,136885,136720],{},[27,136887,136888],{"className":127584,"code":136683,"language":127586,"meta":32,"style":32},[34,136889,136890],{"__ignoreMap":32},[37,136891,136892,136894,136896,136898,136900,136902,136904,136906,136908,136910,136912,136914],{"class":39,"line":40},[37,136893,1418],{"class":50},[37,136895,28525],{"class":51636},[37,136897,55575],{"class":2320},[37,136899,55],{"class":50},[37,136901,136698],{"class":185},[37,136903,92758],{"class":2320},[37,136905,136703],{"class":2320},[37,136907,136706],{"class":2320},[37,136909,136709],{"class":2320},[37,136911,55650],{"class":50},[37,136913,28525],{"class":51636},[37,136915,51643],{"class":50},[14,136917,136918],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[481,136920,136921],{"start":104},[484,136922,136923],{},"常用属性",[1838,136925],{"style":126693,"src":136926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[27,136928,136929],{"className":127584,"code":136683,"language":127586,"meta":32,"style":32},[34,136930,136931],{"__ignoreMap":32},[37,136932,136933,136935,136937,136939,136941,136943,136945,136947,136949,136951,136953,136955],{"class":39,"line":40},[37,136934,1418],{"class":50},[37,136936,28525],{"class":51636},[37,136938,55575],{"class":2320},[37,136940,55],{"class":50},[37,136942,136698],{"class":185},[37,136944,92758],{"class":2320},[37,136946,136703],{"class":2320},[37,136948,136706],{"class":2320},[37,136950,136709],{"class":2320},[37,136952,55650],{"class":50},[37,136954,28525],{"class":51636},[37,136956,51643],{"class":50},[14,136958,136959],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22339,136961,136963],{"id":136962},"_14123-总结","14.1.2.3 总结",[1515,136965,136966,136969,136972,136975,136978],{},[484,136967,136968],{},"音频标签和视频标签使用方式基本一致",[484,136970,136971],{},"浏览器支持情况不同",[484,136973,136974],{},"谷歌浏览器把音频和视频自动播放禁止了",[484,136976,136977],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[484,136979,136980],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[498,136982,136984],{"id":136983},"_1413-表单元素","14.1.3 表单元素",[22339,136986,136988],{"id":136987},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1838,136990],{"style":126693,"src":136991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[27,136993,136995],{"className":127584,"code":136994,"language":127586,"meta":32,"style":32},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[34,136996,136997],{"__ignoreMap":32},[37,136998,136999,137001,137003,137005,137007,137009,137011,137013,137016,137018,137020,137023],{"class":39,"line":40},[37,137000,1418],{"class":50},[37,137002,54157],{"class":51636},[37,137004,54160],{"class":2320},[37,137006,55],{"class":50},[37,137008,63035],{"class":185},[37,137010,15261],{"class":2320},[37,137012,55],{"class":50},[37,137014,137015],{"class":185},"\"username\"",[37,137017,61356],{"class":2320},[37,137019,55],{"class":50},[37,137021,137022],{"class":185},"\"请输入用户名\"",[37,137024,51643],{"class":50},[1838,137026],{"style":126693,"src":137027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22339,137029,137031],{"id":137030},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1838,137033],{"style":126693,"src":137034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,137036,137037],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,137039,137040],{},"快捷操作：",[1838,137042],{"style":126693,"src":137043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,137045,137046],{},"例子1：",[27,137048,137050],{"className":127584,"code":137049,"language":127586,"meta":32,"style":32},"\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",[34,137051,137052,137075,137102,137131,137150],{"__ignoreMap":32},[37,137053,137054,137056,137058,137060,137062,137065,137068,137070,137073],{"class":39,"line":40},[37,137055,1418],{"class":50},[37,137057,66961],{"class":51636},[37,137059,66964],{"class":2320},[37,137061,55],{"class":50},[37,137063,137064],{"class":185},"\"\u002Fsubmit\"",[37,137066,137067],{"class":2320}," method",[37,137069,55],{"class":50},[37,137071,137072],{"class":185},"\"post\"",[37,137074,51643],{"class":50},[37,137076,137077,137079,137081,137083,137085,137087,137089,137091,137093,137095,137097,137100],{"class":39,"line":47},[37,137078,52480],{"class":50},[37,137080,54157],{"class":51636},[37,137082,54160],{"class":2320},[37,137084,55],{"class":50},[37,137086,63035],{"class":185},[37,137088,15261],{"class":2320},[37,137090,55],{"class":50},[37,137092,137015],{"class":185},[37,137094,61356],{"class":2320},[37,137096,55],{"class":50},[37,137098,137099],{"class":185},"\"用户名\"",[37,137101,51643],{"class":50},[37,137103,137104,137106,137108,137110,137112,137115,137117,137119,137122,137124,137126,137129],{"class":39,"line":104},[37,137105,52480],{"class":50},[37,137107,54157],{"class":51636},[37,137109,54160],{"class":2320},[37,137111,55],{"class":50},[37,137113,137114],{"class":185},"\"password\"",[37,137116,15261],{"class":2320},[37,137118,55],{"class":50},[37,137120,137121],{"class":185},"\"pwd\"",[37,137123,61356],{"class":2320},[37,137125,55],{"class":50},[37,137127,137128],{"class":185},"\"密码\"",[37,137130,51643],{"class":50},[37,137132,137133,137135,137137,137139,137141,137143,137146,137148],{"class":39,"line":113},[37,137134,52480],{"class":50},[37,137136,54223],{"class":51636},[37,137138,54160],{"class":2320},[37,137140,55],{"class":50},[37,137142,66984],{"class":185},[37,137144,137145],{"class":50},">提交\u003C\u002F",[37,137147,54223],{"class":51636},[37,137149,51643],{"class":50},[37,137151,137152,137154,137156],{"class":39,"line":189},[37,137153,52121],{"class":50},[37,137155,66961],{"class":51636},[37,137157,51643],{"class":50},[1838,137159],{"style":126693,"src":137160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,137162,137163],{},"value是表单域的内容",[14,137165,137166],{},"例子2：",[27,137168,137169],{"className":127584,"code":137049,"language":127586,"meta":32,"style":32},[34,137170,137171,137191,137217,137243,137261],{"__ignoreMap":32},[37,137172,137173,137175,137177,137179,137181,137183,137185,137187,137189],{"class":39,"line":40},[37,137174,1418],{"class":50},[37,137176,66961],{"class":51636},[37,137178,66964],{"class":2320},[37,137180,55],{"class":50},[37,137182,137064],{"class":185},[37,137184,137067],{"class":2320},[37,137186,55],{"class":50},[37,137188,137072],{"class":185},[37,137190,51643],{"class":50},[37,137192,137193,137195,137197,137199,137201,137203,137205,137207,137209,137211,137213,137215],{"class":39,"line":47},[37,137194,52480],{"class":50},[37,137196,54157],{"class":51636},[37,137198,54160],{"class":2320},[37,137200,55],{"class":50},[37,137202,63035],{"class":185},[37,137204,15261],{"class":2320},[37,137206,55],{"class":50},[37,137208,137015],{"class":185},[37,137210,61356],{"class":2320},[37,137212,55],{"class":50},[37,137214,137099],{"class":185},[37,137216,51643],{"class":50},[37,137218,137219,137221,137223,137225,137227,137229,137231,137233,137235,137237,137239,137241],{"class":39,"line":104},[37,137220,52480],{"class":50},[37,137222,54157],{"class":51636},[37,137224,54160],{"class":2320},[37,137226,55],{"class":50},[37,137228,137114],{"class":185},[37,137230,15261],{"class":2320},[37,137232,55],{"class":50},[37,137234,137121],{"class":185},[37,137236,61356],{"class":2320},[37,137238,55],{"class":50},[37,137240,137128],{"class":185},[37,137242,51643],{"class":50},[37,137244,137245,137247,137249,137251,137253,137255,137257,137259],{"class":39,"line":113},[37,137246,52480],{"class":50},[37,137248,54223],{"class":51636},[37,137250,54160],{"class":2320},[37,137252,55],{"class":50},[37,137254,66984],{"class":185},[37,137256,137145],{"class":50},[37,137258,54223],{"class":51636},[37,137260,51643],{"class":50},[37,137262,137263,137265,137267],{"class":39,"line":189},[37,137264,52121],{"class":50},[37,137266,66961],{"class":51636},[37,137268,51643],{"class":50},[1838,137270],{"style":126693,"src":137271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[469,137273,137275],{"id":137274},"_142-css新特性","14.2 CSS新特性",[498,137277,137279],{"id":137278},"_1421-新增选择器","14.2.1 新增选择器",[22339,137281,137283],{"id":137282},"_14211-属性选择器","14.2.1.1 属性选择器",[1838,137285],{"style":126693,"src":137286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[27,137288,137290],{"className":126837,"code":137289,"language":126839,"meta":32,"style":32},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[34,137291,137292,137307,137323],{"__ignoreMap":32},[37,137293,137294,137296,137298,137300,137302,137304],{"class":39,"line":40},[37,137295,54157],{"class":51636},[37,137297,1399],{"class":50},[37,137299,103392],{"class":2320},[37,137301,55],{"class":54},[37,137303,63035],{"class":185},[37,137305,137306],{"class":50},"] {\n",[37,137308,137309,137311,137313,137315,137317,137319,137321],{"class":39,"line":47},[37,137310,71232],{"class":61},[37,137312,51773],{"class":50},[37,137314,332],{"class":61},[37,137316,51828],{"class":54},[37,137318,51857],{"class":61},[37,137320,130417],{"class":61},[37,137322,1669],{"class":50},[37,137324,137325],{"class":39,"line":104},[37,137326,1941],{"class":50},[1838,137328],{"style":126693,"src":137329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137331,558],{},[1515,137333,137334,137337,137340,137343],{},[484,137335,137336],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[484,137338,137339],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[484,137341,137342],{},"属性选择器也可以选择出来自定义的属性",[484,137344,137345,137347],{},[673,137346,9366],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22339,137349,137351],{"id":137350},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1838,137353],{"style":126693,"src":137354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[481,137356,137357],{},[484,137358,137359],{},"fist-child",[27,137361,137363],{"className":126837,"code":137362,"language":126839,"meta":32,"style":32},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[34,137364,137365,137370,137385,137405,137423],{"__ignoreMap":32},[37,137366,137367],{"class":39,"line":40},[37,137368,137369],{"class":43},"\u002F* 属性选择器 *\u002F\n",[37,137371,137372,137374,137376,137378,137380,137382],{"class":39,"line":47},[37,137373,54157],{"class":51636},[37,137375,1399],{"class":50},[37,137377,103392],{"class":2320},[37,137379,55],{"class":54},[37,137381,63035],{"class":185},[37,137383,137384],{"class":50},"] { }\n",[37,137386,137387,137389,137391,137393,137396,137399,137402],{"class":39,"line":104},[37,137388,54157],{"class":51636},[37,137390,1399],{"class":50},[37,137392,15035],{"class":2320},[37,137394,137395],{"class":54},"^=",[37,137397,137398],{"class":185},"\"icon\"",[37,137400,137401],{"class":50},"] { }  ",[37,137403,137404],{"class":43},"\u002F* 以 icon 开头 *\u002F\n",[37,137406,137407,137409,137411,137413,137416,137418,137420],{"class":39,"line":113},[37,137408,54157],{"class":51636},[37,137410,1399],{"class":50},[37,137412,15035],{"class":2320},[37,137414,137415],{"class":54},"$=",[37,137417,137398],{"class":185},[37,137419,137401],{"class":50},[37,137421,137422],{"class":43},"\u002F* 以 icon 结尾 *\u002F\n",[37,137424,137425,137427,137429,137431,137434,137436,137438],{"class":39,"line":189},[37,137426,54157],{"class":51636},[37,137428,1399],{"class":50},[37,137430,15035],{"class":2320},[37,137432,137433],{"class":54},"*=",[37,137435,137398],{"class":185},[37,137437,137401],{"class":50},[37,137439,137440],{"class":43},"\u002F* 包含 icon *\u002F\n",[14,137442,137443],{},"ul的第一个儿子文本为红色",[14,137445,137446],{},"一定要在冒号前加空格，不然就是选中所有的了",[27,137448,137450],{"className":126837,"code":137449,"language":126839,"meta":32,"style":32},".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",[34,137451,137452,137458,137468,137472,137476,137481,137494,137507,137523,137540,137557],{"__ignoreMap":32},[37,137453,137454,137456],{"class":39,"line":40},[37,137455,127128],{"class":2320},[37,137457,15913],{"class":50},[37,137459,137460,137462,137464,137466],{"class":39,"line":47},[37,137461,71241],{"class":61},[37,137463,51773],{"class":50},[37,137465,57757],{"class":61},[37,137467,1669],{"class":50},[37,137469,137470],{"class":39,"line":104},[37,137471,1941],{"class":50},[37,137473,137474],{"class":39,"line":113},[37,137475,136298],{"class":50},[37,137477,137478],{"class":39,"line":189},[37,137479,137480],{"class":43},"\u002F* 结构伪类选择器 *\u002F\n",[37,137482,137483,137485,137488,137491],{"class":39,"line":195},[37,137484,484],{"class":51636},[37,137486,137487],{"class":2320},":first-child",[37,137489,137490],{"class":50}," { }           ",[37,137492,137493],{"class":43},"\u002F* 第一个 *\u002F\n",[37,137495,137496,137498,137501,137504],{"class":39,"line":201},[37,137497,484],{"class":51636},[37,137499,137500],{"class":2320},":last-child",[37,137502,137503],{"class":50}," { }            ",[37,137505,137506],{"class":43},"\u002F* 最后一个 *\u002F\n",[37,137508,137509,137511,137513,137515,137517,137520],{"class":39,"line":207},[37,137510,484],{"class":51636},[37,137512,129751],{"class":2320},[37,137514,165],{"class":50},[37,137516,602],{"class":61},[37,137518,137519],{"class":50},") { }          ",[37,137521,137522],{"class":43},"\u002F* 第2个 *\u002F\n",[37,137524,137525,137527,137529,137531,137534,137537],{"class":39,"line":213},[37,137526,484],{"class":51636},[37,137528,129751],{"class":2320},[37,137530,165],{"class":50},[37,137532,137533],{"class":61},"2n",[37,137535,137536],{"class":50},") { }         ",[37,137538,137539],{"class":43},"\u002F* 偶数 *\u002F\n",[37,137541,137542,137544,137546,137548,137551,137554],{"class":39,"line":218},[37,137543,484],{"class":51636},[37,137545,129751],{"class":2320},[37,137547,165],{"class":50},[37,137549,137550],{"class":61},"2n+1",[37,137552,137553],{"class":50},") { }       ",[37,137555,137556],{"class":43},"\u002F* 奇数 *\u002F\n",[37,137558,137559,137561,137563,137565,137568,137570],{"class":39,"line":227},[37,137560,484],{"class":51636},[37,137562,129751],{"class":2320},[37,137564,165],{"class":50},[37,137566,137567],{"class":61},"-n+3",[37,137569,137553],{"class":50},[37,137571,137572],{"class":43},"\u002F* 前3个 *\u002F\n",[51947,137574,137577],{"className":137575},[137576],"example","\n  示例内容\n",[14,137579,137580],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1515,137582,137583],{},[484,137584,137585,137588],{},[34,137586,137587],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137590,137591],{},"也就是说它选择的是熊大",[481,137593,137594],{"start":195},[484,137595,137596],{},"权重",[27,137598,137600],{"className":126837,"code":137599,"language":126839,"meta":32,"style":32},"\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",[34,137601,137602,137606,137616,137626,137640,137654,137668],{"__ignoreMap":32},[37,137603,137604],{"class":39,"line":40},[37,137605,137480],{"class":43},[37,137607,137608,137610,137612,137614],{"class":39,"line":47},[37,137609,484],{"class":51636},[37,137611,137487],{"class":2320},[37,137613,137490],{"class":50},[37,137615,137493],{"class":43},[37,137617,137618,137620,137622,137624],{"class":39,"line":104},[37,137619,484],{"class":51636},[37,137621,137500],{"class":2320},[37,137623,137503],{"class":50},[37,137625,137506],{"class":43},[37,137627,137628,137630,137632,137634,137636,137638],{"class":39,"line":113},[37,137629,484],{"class":51636},[37,137631,129751],{"class":2320},[37,137633,165],{"class":50},[37,137635,602],{"class":61},[37,137637,137519],{"class":50},[37,137639,137522],{"class":43},[37,137641,137642,137644,137646,137648,137650,137652],{"class":39,"line":189},[37,137643,484],{"class":51636},[37,137645,129751],{"class":2320},[37,137647,165],{"class":50},[37,137649,137533],{"class":61},[37,137651,137536],{"class":50},[37,137653,137539],{"class":43},[37,137655,137656,137658,137660,137662,137664,137666],{"class":39,"line":195},[37,137657,484],{"class":51636},[37,137659,129751],{"class":2320},[37,137661,165],{"class":50},[37,137663,137550],{"class":61},[37,137665,137553],{"class":50},[37,137667,137556],{"class":43},[37,137669,137670,137672,137674,137676,137678,137680],{"class":39,"line":201},[37,137671,484],{"class":51636},[37,137673,129751],{"class":2320},[37,137675,165],{"class":50},[37,137677,137567],{"class":61},[37,137679,137553],{"class":50},[37,137681,137572],{"class":43},[14,137683,137684],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22339,137686,137688],{"id":137687},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137690,137691],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1838,137693],{"style":126693,"src":137694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[481,137696,137697],{},[484,137698,558],{},[1515,137700,137701,137704,137707,137710,137713,137716],{},[484,137702,137703],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[484,137705,137706],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[484,137708,137709],{},"语法： element::before {}",[484,137711,137712],{},"before 和 after 必须有 content 属性",[484,137714,137715],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[484,137717,137718],{},"伪元素选择器和标签选择器一样，权重为 1",[481,137720,137721],{"start":47},[484,137722,137723],{},"实例",[27,137725,137726],{"className":126837,"code":137599,"language":126839,"meta":32,"style":32},[34,137727,137728,137732,137742,137752,137766,137780,137794],{"__ignoreMap":32},[37,137729,137730],{"class":39,"line":40},[37,137731,137480],{"class":43},[37,137733,137734,137736,137738,137740],{"class":39,"line":47},[37,137735,484],{"class":51636},[37,137737,137487],{"class":2320},[37,137739,137490],{"class":50},[37,137741,137493],{"class":43},[37,137743,137744,137746,137748,137750],{"class":39,"line":104},[37,137745,484],{"class":51636},[37,137747,137500],{"class":2320},[37,137749,137503],{"class":50},[37,137751,137506],{"class":43},[37,137753,137754,137756,137758,137760,137762,137764],{"class":39,"line":113},[37,137755,484],{"class":51636},[37,137757,129751],{"class":2320},[37,137759,165],{"class":50},[37,137761,602],{"class":61},[37,137763,137519],{"class":50},[37,137765,137522],{"class":43},[37,137767,137768,137770,137772,137774,137776,137778],{"class":39,"line":189},[37,137769,484],{"class":51636},[37,137771,129751],{"class":2320},[37,137773,165],{"class":50},[37,137775,137533],{"class":61},[37,137777,137536],{"class":50},[37,137779,137539],{"class":43},[37,137781,137782,137784,137786,137788,137790,137792],{"class":39,"line":195},[37,137783,484],{"class":51636},[37,137785,129751],{"class":2320},[37,137787,165],{"class":50},[37,137789,137550],{"class":61},[37,137791,137553],{"class":50},[37,137793,137556],{"class":43},[37,137795,137796,137798,137800,137802,137804,137806],{"class":39,"line":201},[37,137797,484],{"class":51636},[37,137799,129751],{"class":2320},[37,137801,165],{"class":50},[37,137803,137567],{"class":61},[37,137805,137553],{"class":50},[37,137807,137572],{"class":43},[1838,137809],{"style":126693,"src":137810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[481,137812,137813],{"start":104},[484,137814,137815],{},"使用场景1",[1838,137817],{"style":126693,"src":137818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137820,137821],{},"不需要再加盒子来整红色那部分了",[27,137823,137825],{"className":126837,"code":137824,"language":126839,"meta":32,"style":32},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[34,137826,137827,137832,137841,137852,137862,137866,137875,137886,137896],{"__ignoreMap":32},[37,137828,137829],{"class":39,"line":40},[37,137830,137831],{"class":43},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[37,137833,137834,137836,137839],{"class":39,"line":47},[37,137835,51947],{"class":51636},[37,137837,137838],{"class":2320},"::before",[37,137840,15913],{"class":50},[37,137842,137843,137846,137848,137850],{"class":39,"line":104},[37,137844,137845],{"class":61},"  content",[37,137847,51773],{"class":50},[37,137849,8000],{"class":185},[37,137851,1669],{"class":50},[37,137853,137854,137856,137858,137860],{"class":39,"line":113},[37,137855,128453],{"class":61},[37,137857,51773],{"class":50},[37,137859,61205],{"class":61},[37,137861,1669],{"class":50},[37,137863,137864],{"class":39,"line":189},[37,137865,1941],{"class":50},[37,137867,137868,137870,137873],{"class":39,"line":195},[37,137869,51947],{"class":51636},[37,137871,137872],{"class":2320},"::after",[37,137874,15913],{"class":50},[37,137876,137877,137879,137881,137884],{"class":39,"line":201},[37,137878,137845],{"class":61},[37,137880,51773],{"class":50},[37,137882,137883],{"class":185},"\"→\"",[37,137885,1669],{"class":50},[37,137887,137888,137890,137892,137894],{"class":39,"line":207},[37,137889,71241],{"class":61},[37,137891,51773],{"class":50},[37,137893,62406],{"class":61},[37,137895,1669],{"class":50},[37,137897,137898],{"class":39,"line":213},[37,137899,1941],{"class":50},[1838,137901],{"style":126693,"src":137902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137904,137905],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1838,137907],{"style":126693,"src":137908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137910,137911],{},"但是在引用时需要先转义一下",[14,137913,137914],{},"content='\\e930'",[481,137916,137917],{"start":113},[484,137918,137919],{},"使用场景2",[14,137921,137922],{},"仿土豆效果",[14,137924,137925],{},"通过使用伪元素选择器可以减少body中盒子的数量",[27,137927,137928],{"className":126837,"code":137824,"language":126839,"meta":32,"style":32},[34,137929,137930,137934,137942,137952,137962,137966,137974,137984,137994],{"__ignoreMap":32},[37,137931,137932],{"class":39,"line":40},[37,137933,137831],{"class":43},[37,137935,137936,137938,137940],{"class":39,"line":47},[37,137937,51947],{"class":51636},[37,137939,137838],{"class":2320},[37,137941,15913],{"class":50},[37,137943,137944,137946,137948,137950],{"class":39,"line":104},[37,137945,137845],{"class":61},[37,137947,51773],{"class":50},[37,137949,8000],{"class":185},[37,137951,1669],{"class":50},[37,137953,137954,137956,137958,137960],{"class":39,"line":113},[37,137955,128453],{"class":61},[37,137957,51773],{"class":50},[37,137959,61205],{"class":61},[37,137961,1669],{"class":50},[37,137963,137964],{"class":39,"line":189},[37,137965,1941],{"class":50},[37,137967,137968,137970,137972],{"class":39,"line":195},[37,137969,51947],{"class":51636},[37,137971,137872],{"class":2320},[37,137973,15913],{"class":50},[37,137975,137976,137978,137980,137982],{"class":39,"line":201},[37,137977,137845],{"class":61},[37,137979,51773],{"class":50},[37,137981,137883],{"class":185},[37,137983,1669],{"class":50},[37,137985,137986,137988,137990,137992],{"class":39,"line":207},[37,137987,71241],{"class":61},[37,137989,51773],{"class":50},[37,137991,62406],{"class":61},[37,137993,1669],{"class":50},[37,137995,137996],{"class":39,"line":213},[37,137997,1941],{"class":50},[1838,137999],{"style":126693,"src":138000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[481,138002,138003],{"start":189},[484,138004,138005],{},"使用场景3",[14,138007,138008],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[27,138010,138012],{"className":126837,"code":138011,"language":126839,"meta":32,"style":32},".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",[34,138013,138014,138020,138030,138034,138038,138042,138050,138060,138070,138074,138082,138092,138102],{"__ignoreMap":32},[37,138015,138016,138018],{"class":39,"line":40},[37,138017,130685],{"class":2320},[37,138019,15913],{"class":50},[37,138021,138022,138024,138026,138028],{"class":39,"line":47},[37,138023,131317],{"class":61},[37,138025,51773],{"class":50},[37,138027,24077],{"class":61},[37,138029,1669],{"class":50},[37,138031,138032],{"class":39,"line":104},[37,138033,1941],{"class":50},[37,138035,138036],{"class":39,"line":113},[37,138037,136298],{"class":50},[37,138039,138040],{"class":39,"line":189},[37,138041,137831],{"class":43},[37,138043,138044,138046,138048],{"class":39,"line":195},[37,138045,51947],{"class":51636},[37,138047,137838],{"class":2320},[37,138049,15913],{"class":50},[37,138051,138052,138054,138056,138058],{"class":39,"line":201},[37,138053,137845],{"class":61},[37,138055,51773],{"class":50},[37,138057,8000],{"class":185},[37,138059,1669],{"class":50},[37,138061,138062,138064,138066,138068],{"class":39,"line":207},[37,138063,128453],{"class":61},[37,138065,51773],{"class":50},[37,138067,61205],{"class":61},[37,138069,1669],{"class":50},[37,138071,138072],{"class":39,"line":213},[37,138073,1941],{"class":50},[37,138075,138076,138078,138080],{"class":39,"line":218},[37,138077,51947],{"class":51636},[37,138079,137872],{"class":2320},[37,138081,15913],{"class":50},[37,138083,138084,138086,138088,138090],{"class":39,"line":227},[37,138085,137845],{"class":61},[37,138087,51773],{"class":50},[37,138089,137883],{"class":185},[37,138091,1669],{"class":50},[37,138093,138094,138096,138098,138100],{"class":39,"line":232},[37,138095,71241],{"class":61},[37,138097,51773],{"class":50},[37,138099,62406],{"class":61},[37,138101,1669],{"class":50},[37,138103,138104],{"class":39,"line":238},[37,138105,1941],{"class":50},[14,138107,138108],{},"div {\nmargin: 0 auto;\n}",[27,138110,138113],{"className":138111,"code":138112,"language":5536},[5534],"\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",[34,138114,138112],{"__ignoreMap":32},[14,138116,138117],{},"如果想让多个元素都发生变化",[14,138119,138120],{},"不能如下操作：",[14,138122,138123],{},"transition: width 2s ease 0.5s;",[14,138125,138126],{},"transition: height 2s ease 0.5s;不对！！！",[14,138128,138129],{},"上方会样式冲突，导致不显示任何过渡效果",[14,138131,138132],{},"使用如下：加逗号隔开",[14,138134,138135],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,138137,138138],{},"transition all 2s ease;",[498,138140,138142],{"id":138141},"_1426-过渡练习","14.2.6 过渡练习",[481,138144,138145],{},[484,138146,138147],{},"进度条",[1838,138149],{"style":126693,"src":138150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[27,138152,138154],{"className":126837,"code":138153,"language":126839,"meta":32,"style":32},"div {\n  transition: all 0.3s ease;\n}\n",[34,138155,138156,138162,138180],{"__ignoreMap":32},[37,138157,138158,138160],{"class":39,"line":40},[37,138159,51947],{"class":51636},[37,138161,15913],{"class":50},[37,138163,138164,138167,138169,138171,138174,138176,138178],{"class":39,"line":47},[37,138165,138166],{"class":61},"  transition",[37,138168,51773],{"class":50},[37,138170,28463],{"class":61},[37,138172,138173],{"class":61}," 0.3",[37,138175,1205],{"class":54},[37,138177,79015],{"class":61},[37,138179,1669],{"class":50},[37,138181,138182],{"class":39,"line":104},[37,138183,1941],{"class":50},[481,138185,138186],{"start":47},[484,138187,138188],{},"小米logo",[14,138190,138191],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[27,138193,138195],{"className":126837,"code":138194,"language":126839,"meta":32,"style":32},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[34,138196,138197,138202,138208,138224,138229],{"__ignoreMap":32},[37,138198,138199],{"class":39,"line":40},[37,138200,138201],{"class":43},"\u002F* CSS3 过渡 *\u002F\n",[37,138203,138204,138206],{"class":39,"line":47},[37,138205,51947],{"class":51636},[37,138207,15913],{"class":50},[37,138209,138210,138212,138214,138216,138218,138220,138222],{"class":39,"line":104},[37,138211,138166],{"class":61},[37,138213,51773],{"class":50},[37,138215,28463],{"class":61},[37,138217,138173],{"class":61},[37,138219,1205],{"class":54},[37,138221,79015],{"class":61},[37,138223,1669],{"class":50},[37,138225,138226],{"class":39,"line":113},[37,138227,138228],{"class":43},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[37,138230,138231],{"class":39,"line":189},[37,138232,1941],{"class":50},[14,138234,138235],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[446,138237,138238],{},"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":32,"searchDepth":47,"depth":47,"links":138240},[138241,138246],{"id":136571,"depth":47,"text":136572,"children":138242},[138243,138244,138245],{"id":136575,"depth":104,"text":136576},{"id":136652,"depth":104,"text":136653},{"id":136983,"depth":104,"text":136984},{"id":137274,"depth":47,"text":137275,"children":138247},[138248,138249],{"id":137278,"depth":104,"text":137279},{"id":138141,"depth":104,"text":138142},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136563,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138256,"title":138257,"body":138258,"description":451,"extension":452,"meta":140002,"navigation":454,"path":140003,"seo":140004,"stem":140005,"__hash__":140006},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138259,"toc":139983},[138260,138263,138267,138270,138276,138282,138286,138288,138291,138294,138297,138300,138303,138306,138309,138313,138317,138320,138323,138326,138330,138333,138336,138341,138344,138347,138350,138354,138357,138366,138369,138372,138376,138379,138382,138387,138394,138408,138416,138423,138428,138431,138434,138437,138444,138448,138454,138460,138463,138466,138471,138477,138479,138487,138492,138495,138501,138503,138508,138513,138516,138518,138523,138526,138531,138536,138570,138574,138578,138581,138585,138588,138674,138677,138714,138717,138753,138757,138762,138775,138829,138831,138859,138861,138889,138895,138909,138911,138955,138957,139001,139004,139011,139022,139024,139051,139053,139079,139086,139102,139104,139198,139200,139294,139301,139304,139309,139315,139389,139392,139394,139430,139432,139468,139471,139478,139497,139500,139503,139505,139530,139532,139556,139559,139562,139592,139596,139599,139662,139664,139730,139732,139796,139799,139831,139833,139859,139861,139887,139890,139921,139923,139949,139951,139977,139980],[10,138261,138257],{"id":138262},"_15-品优购项目上篇-搭建与公共模块",[469,138264,138266],{"id":138265},"_151-项目规划","15.1 项目规划",[1838,138268],{"style":126693,"src":138269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138271,138272,138275],{},[673,138273,138274],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138277,138278,138281],{},[673,138279,138280],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[469,138283,138285],{"id":138284},"_152-项目介绍","15.2 项目介绍",[14,138287,138274],{},[1838,138289],{"style":126693,"src":138290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138292,138293],{},"主页：",[1838,138295],{"style":126693,"src":138296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138298,138299],{},"列表页：",[1838,138301],{"style":126693,"src":138302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138304,138305],{},"注册页：",[1838,138307],{"style":126693,"src":138308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[469,138310,138312],{"id":138311},"_153-项目搭建工作","15.3 项目搭建工作",[498,138314,138316],{"id":138315},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1838,138318],{"style":126693,"src":138319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138321,138322],{},"经常更换的图片要放到upload文件夹中",[14,138324,138325],{},"不经常换的放到images文件夹中",[498,138327,138329],{"id":138328},"_1532-创建文件如下","15.3.2 创建文件如下",[1838,138331],{"style":126693,"src":138332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1838,138334],{"style":126693,"src":138335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138337,138338],{},[673,138339,138340],{},"初始化样式：",[14,138342,138343],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138345,138346],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138348,138349],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[498,138351,138353],{"id":138352},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138355,138356],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138358,138359,138360,138365],{},"这里最典型的应用就是 ",[673,138361,138362],{},[34,138363,138364],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1838,138367],{"style":126693,"src":138368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138370,138371],{},"通过link方法来引入",[498,138373,138375],{"id":138374},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1838,138377],{"style":126693,"src":138378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138380,138381],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[481,138383,138384],{},[484,138385,138386],{},"制作favicon图标",[14,138388,138389,138390,138393],{},"①把品优购图标切成 ",[34,138391,138392],{},"png"," 图片",[14,138395,138396,138397,138399,138400,138403,138404],{},"②把 ",[34,138398,138392],{}," 图片转换为 ",[34,138401,138402],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[51,138405,138406],{"href":138406,"rel":138407},"http:\u002F\u002Fwww.bitbug.net\u002F",[24206],[481,138409,138410,138413],{"start":47},[484,138411,138412],{},"favicon图标放到网站根目录下",[484,138414,138415],{},"HTML页面引入favicon",[14,138417,138418,138419,138422],{},"在html 页面里面的 ",[34,138420,138421],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138424,138425],{},[34,138426,138427],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138429,138430],{},"复制这行代码或者在生成这个的网站进行复制",[1838,138432],{"style":126693,"src":138433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138435,138436],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138438,138439,138440],{},"例如:",[51,138441,138442],{"href":138442,"rel":138443},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24206],[498,138445,138447],{"id":138446},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138449,138450,138453],{},[673,138451,138452],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138455,138456,138459],{},[673,138457,138458],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138461,138462],{},"页面必须有三个标签用来符合 SEO 优化",[1838,138464],{"style":126693,"src":138465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[481,138467,138468],{},[484,138469,138470],{},"title网站标题",[14,138472,138473,138476],{},[673,138474,138475],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138478,69126],{},[1515,138480,138481,138484],{},[484,138482,138483],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[484,138485,138486],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[481,138488,138489],{"start":47},[484,138490,138491],{},"description网站描述",[14,138493,138494],{},"简要说明我们网站主要是做什么的",[14,138496,138497,138500],{},[673,138498,138499],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138502,69126],{},[14,138504,138505],{},[34,138506,138507],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[481,138509,138510],{"start":104},[484,138511,138512],{},"keywords关键词",[14,138514,138515],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138517,69126],{},[14,138519,138520],{},[34,138521,138522],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138524,138525],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138527,138528],{},[673,138529,138530],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[481,138532,138533],{"start":113},[484,138534,138535],{},"代码总结",[27,138537,138538],{"className":127584,"code":130941,"language":127586,"meta":32,"style":32},[34,138539,138540,138544,138558,138562],{"__ignoreMap":32},[37,138541,138542],{"class":39,"line":40},[37,138543,130948],{"class":43},[37,138545,138546,138548,138550,138552,138554,138556],{"class":39,"line":47},[37,138547,1418],{"class":50},[37,138549,51947],{"class":51636},[37,138551,53822],{"class":2320},[37,138553,55],{"class":50},[37,138555,130961],{"class":185},[37,138557,51643],{"class":50},[37,138559,138560],{"class":39,"line":104},[37,138561,130968],{"class":50},[37,138563,138564,138566,138568],{"class":39,"line":113},[37,138565,52121],{"class":50},[37,138567,51947],{"class":51636},[37,138569,51643],{"class":50},[469,138571,138573],{"id":138572},"_154-项目公共部分制作","15.4 项目公共部分制作",[498,138575,138577],{"id":138576},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1838,138579],{"style":126693,"src":138580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[498,138582,138584],{"id":138583},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138586,138587],{},"布局思路：",[1515,138589,138590,138593,138596,138618,138651],{},[484,138591,138592],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[484,138594,138595],{},"里面包含版心的盒子",[484,138597,138598,138599],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1515,138600,138601,138609,138615],{},[484,138602,138603,138604,21841,138606,138608],{},"1 号盒子 里面包含一个",[34,138605,1515],{},[34,138607,1515],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[484,138610,138611,138612,138614],{},"里面的内容是水平排列，所以需要给",[34,138613,484],{},"设置浮动",[484,138616,138617],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[484,138619,138620,138621],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1515,138622,138623,138637,138642],{},[484,138624,138625,138626,21841,138628,138630,138631,138633,138634,138636],{},"2 号盒子 里面包含一个",[34,138627,1515],{},[34,138629,1515],{},"包裹",[34,138632,484],{},"，中间的",[34,138635,1429],{},"可以用样式去设置，也可以用字符 |",[484,138638,138639,138640,138614],{},"里面内容水平排列，给",[34,138641,484],{},[484,138643,138644,138645,138647,138648,138650],{},"找到里面所有偶数的 ",[34,138646,484],{}," 设置样式（偶数的 ",[34,138649,484],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[484,138652,138653,138654],{},"需要用到字体图标",[1515,138655,138656,138662,138665,138668,138671],{},[484,138657,138658,138659],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[34,138660,138661],{},"arrow-icon",[484,138663,138664],{},"先要引入字体图片的资源",[484,138666,138667],{},"在样式里面利用 font-face 来进行声明",[484,138669,138670],{},"在伪元素的 content属性设置 图标的编码",[484,138672,138673],{},"给伪元素设置font-family属性",[14,138675,138676],{},"结构实例代码：",[27,138678,138680],{"className":126837,"code":138679,"language":126839,"meta":32,"style":32},"div::before {\n  content: \"\";\n  display: block;\n}\n",[34,138681,138682,138690,138700,138710],{"__ignoreMap":32},[37,138683,138684,138686,138688],{"class":39,"line":40},[37,138685,51947],{"class":51636},[37,138687,137838],{"class":2320},[37,138689,15913],{"class":50},[37,138691,138692,138694,138696,138698],{"class":39,"line":47},[37,138693,137845],{"class":61},[37,138695,51773],{"class":50},[37,138697,8000],{"class":185},[37,138699,1669],{"class":50},[37,138701,138702,138704,138706,138708],{"class":39,"line":104},[37,138703,128453],{"class":61},[37,138705,51773],{"class":50},[37,138707,61205],{"class":61},[37,138709,1669],{"class":50},[37,138711,138712],{"class":39,"line":113},[37,138713,1941],{"class":50},[14,138715,138716],{},"样式实例代码：",[27,138718,138719],{"className":126837,"code":138679,"language":126839,"meta":32,"style":32},[34,138720,138721,138729,138739,138749],{"__ignoreMap":32},[37,138722,138723,138725,138727],{"class":39,"line":40},[37,138724,51947],{"class":51636},[37,138726,137838],{"class":2320},[37,138728,15913],{"class":50},[37,138730,138731,138733,138735,138737],{"class":39,"line":47},[37,138732,137845],{"class":61},[37,138734,51773],{"class":50},[37,138736,8000],{"class":185},[37,138738,1669],{"class":50},[37,138740,138741,138743,138745,138747],{"class":39,"line":104},[37,138742,128453],{"class":61},[37,138744,51773],{"class":50},[37,138746,61205],{"class":61},[37,138748,1669],{"class":50},[37,138750,138751],{"class":39,"line":113},[37,138752,1941],{"class":50},[498,138754,138756],{"id":138755},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1515,138758,138759],{},[484,138760,138761],{},"header 盒子必须要有高度",[14,138763,138764,138765,138767,138768],{},"1 号盒子是 ",[34,138766,131849],{}," 标志定位，在正常开发过程中， ",[673,138769,138770,138771,138774],{},"logo的布局其实是有讲究的，需要进行 ",[34,138772,138773],{},"logoSEO","的优化 （★★★）",[1515,138776,138777,138785,138793,138820],{},[484,138778,138779,138781,138782,138784],{},[34,138780,131849],{}," 里面首先放一个 ",[34,138783,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[484,138786,138787,138789,138790,138792],{},[34,138788,10],{}," 里面再放一个链接，可以返回首页的，把 ",[34,138791,131849],{}," 的背景图片给链接即可",[484,138794,138795,138796],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1515,138797,138798,138813],{},[484,138799,138800,138801,138804,138805,138808,138809,138812],{},"方法1：",[34,138802,138803],{},"text-indent"," 移到盒子外面（",[34,138806,138807],{},"text-indent: -9999px",") ，然后 ",[34,138810,138811],{},"overflow:hidden"," ，淘宝的做法",[484,138814,138815,138816,138819],{},"方法2：直接给 ",[34,138817,138818],{},"font-size: 0;"," 就看不到文字了，京东的做法",[484,138821,138822,138823,138825,138826,138828],{},"最后给链接一个 ",[34,138824,51743],{}," 属性，这样鼠标放到 ",[34,138827,131849],{}," 上就可以看到提示文字了",[14,138830,138676],{},[27,138832,138833],{"className":127584,"code":132070,"language":127586,"meta":32,"style":32},[34,138834,138835],{"__ignoreMap":32},[37,138836,138837,138839,138841,138843,138845,138847,138849,138851,138853,138855,138857],{"class":39,"line":40},[37,138838,1418],{"class":50},[37,138840,51],{"class":51636},[37,138842,61393],{"class":2320},[37,138844,55],{"class":50},[37,138846,132085],{"class":185},[37,138848,132088],{"class":2320},[37,138850,55],{"class":50},[37,138852,132093],{"class":185},[37,138854,132096],{"class":50},[37,138856,51],{"class":51636},[37,138858,51643],{"class":50},[14,138860,138716],{},[27,138862,138863],{"className":127584,"code":132070,"language":127586,"meta":32,"style":32},[34,138864,138865],{"__ignoreMap":32},[37,138866,138867,138869,138871,138873,138875,138877,138879,138881,138883,138885,138887],{"class":39,"line":40},[37,138868,1418],{"class":50},[37,138870,51],{"class":51636},[37,138872,61393],{"class":2320},[37,138874,55],{"class":50},[37,138876,132085],{"class":185},[37,138878,132088],{"class":2320},[37,138880,55],{"class":50},[37,138882,132093],{"class":185},[37,138884,132096],{"class":50},[37,138886,51],{"class":51636},[37,138888,51643],{"class":50},[14,138890,138891,138892,138894],{},"2 号盒子是 ",[34,138893,131862],{}," 搜索模块定位",[1515,138896,138897,138900,138903,138906],{},[484,138898,138899],{},"search盒子利用定位的方式放在对应的位置",[484,138901,138902],{},"search盒子设置绝对定位，header盒子设置相对定位",[484,138904,138905],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[484,138907,138908],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138910,138676],{},[27,138912,138913],{"className":126837,"code":132157,"language":126839,"meta":32,"style":32},[34,138914,138915,138937,138941,138951],{"__ignoreMap":32},[37,138916,138917,138919,138921,138923,138925,138927,138929,138931,138933,138935],{"class":39,"line":40},[37,138918,51947],{"class":51636},[37,138920,12776],{"class":50},[37,138922,14],{"class":51636},[37,138924,12776],{"class":50},[37,138926,10],{"class":51636},[37,138928,12776],{"class":50},[37,138930,1515],{"class":51636},[37,138932,12776],{"class":50},[37,138934,484],{"class":51636},[37,138936,15913],{"class":50},[37,138938,138939],{"class":39,"line":47},[37,138940,132186],{"class":43},[37,138942,138943,138945,138947,138949],{"class":39,"line":104},[37,138944,128453],{"class":61},[37,138946,51773],{"class":50},[37,138948,61205],{"class":61},[37,138950,1669],{"class":50},[37,138952,138953],{"class":39,"line":113},[37,138954,1941],{"class":50},[14,138956,138716],{},[27,138958,138959],{"className":126837,"code":132157,"language":126839,"meta":32,"style":32},[34,138960,138961,138983,138987,138997],{"__ignoreMap":32},[37,138962,138963,138965,138967,138969,138971,138973,138975,138977,138979,138981],{"class":39,"line":40},[37,138964,51947],{"class":51636},[37,138966,12776],{"class":50},[37,138968,14],{"class":51636},[37,138970,12776],{"class":50},[37,138972,10],{"class":51636},[37,138974,12776],{"class":50},[37,138976,1515],{"class":51636},[37,138978,12776],{"class":50},[37,138980,484],{"class":51636},[37,138982,15913],{"class":50},[37,138984,138985],{"class":39,"line":47},[37,138986,132186],{"class":43},[37,138988,138989,138991,138993,138995],{"class":39,"line":104},[37,138990,128453],{"class":61},[37,138992,51773],{"class":50},[37,138994,61205],{"class":61},[37,138996,1669],{"class":50},[37,138998,138999],{"class":39,"line":113},[37,139000,1941],{"class":50},[14,139002,139003],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,139005,139006,139007,139010],{},"3 号盒子是 ",[34,139008,139009],{},"hotwords"," 热词模块定位",[1515,139012,139013,139016,139019],{},[484,139014,139015],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[484,139017,139018],{},"给里面所有的a标签设置 左右10px的外边距",[484,139020,139021],{},"给第一个a标签设置文字变红色（#c81623）",[14,139023,138676],{},[27,139025,139027],{"className":126837,"code":139026,"language":126839,"meta":32,"style":32},"div {\n  margin: 0 auto;\n}\n",[34,139028,139029,139035,139047],{"__ignoreMap":32},[37,139030,139031,139033],{"class":39,"line":40},[37,139032,51947],{"class":51636},[37,139034,15913],{"class":50},[37,139036,139037,139039,139041,139043,139045],{"class":39,"line":47},[37,139038,70806],{"class":61},[37,139040,51773],{"class":50},[37,139042,135],{"class":61},[37,139044,51892],{"class":61},[37,139046,1669],{"class":50},[37,139048,139049],{"class":39,"line":104},[37,139050,1941],{"class":50},[14,139052,138716],{},[27,139054,139055],{"className":126837,"code":139026,"language":126839,"meta":32,"style":32},[34,139056,139057,139063,139075],{"__ignoreMap":32},[37,139058,139059,139061],{"class":39,"line":40},[37,139060,51947],{"class":51636},[37,139062,15913],{"class":50},[37,139064,139065,139067,139069,139071,139073],{"class":39,"line":47},[37,139066,70806],{"class":61},[37,139068,51773],{"class":50},[37,139070,135],{"class":61},[37,139072,51892],{"class":61},[37,139074,1669],{"class":50},[37,139076,139077],{"class":39,"line":104},[37,139078,1941],{"class":50},[14,139080,139081,139082,139085],{},"4 号盒子是 ",[34,139083,139084],{},"shopcar"," 购物车模块",[1515,139087,139088,139093,139096,139099],{},[484,139089,123620,139090,139092],{},[34,139091,139084],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[484,139094,139095],{},"count 统计部分用绝对定位做",[484,139097,139098],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[484,139100,139101],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,139103,138676],{},[27,139105,139106],{"className":126837,"code":132269,"language":126839,"meta":32,"style":32},[34,139107,139108,139112,139126,139130,139144,139148,139162,139166,139180,139184],{"__ignoreMap":32},[37,139109,139110],{"class":39,"line":40},[37,139111,132276],{"class":43},[37,139113,139114,139116,139118,139120,139122,139124],{"class":39,"line":47},[37,139115,132281],{"class":2320},[37,139117,80142],{"class":50},[37,139119,129197],{"class":61},[37,139121,51773],{"class":50},[37,139123,132290],{"class":61},[37,139125,129767],{"class":50},[37,139127,139128],{"class":39,"line":104},[37,139129,132297],{"class":43},[37,139131,139132,139134,139136,139138,139140,139142],{"class":39,"line":113},[37,139133,132302],{"class":2320},[37,139135,80142],{"class":50},[37,139137,129197],{"class":61},[37,139139,51773],{"class":50},[37,139141,55100],{"class":61},[37,139143,129767],{"class":50},[37,139145,139146],{"class":39,"line":189},[37,139147,132317],{"class":43},[37,139149,139150,139152,139154,139156,139158,139160],{"class":39,"line":195},[37,139151,132322],{"class":2320},[37,139153,80142],{"class":50},[37,139155,129197],{"class":61},[37,139157,51773],{"class":50},[37,139159,55167],{"class":61},[37,139161,129767],{"class":50},[37,139163,139164],{"class":39,"line":201},[37,139165,132337],{"class":43},[37,139167,139168,139170,139172,139174,139176,139178],{"class":39,"line":207},[37,139169,132342],{"class":2320},[37,139171,80142],{"class":50},[37,139173,129197],{"class":61},[37,139175,51773],{"class":50},[37,139177,86568],{"class":61},[37,139179,129767],{"class":50},[37,139181,139182],{"class":39,"line":213},[37,139183,132357],{"class":43},[37,139185,139186,139188,139190,139192,139194,139196],{"class":39,"line":218},[37,139187,132362],{"class":2320},[37,139189,80142],{"class":50},[37,139191,129197],{"class":61},[37,139193,51773],{"class":50},[37,139195,132371],{"class":61},[37,139197,129767],{"class":50},[14,139199,138716],{},[27,139201,139202],{"className":126837,"code":132269,"language":126839,"meta":32,"style":32},[34,139203,139204,139208,139222,139226,139240,139244,139258,139262,139276,139280],{"__ignoreMap":32},[37,139205,139206],{"class":39,"line":40},[37,139207,132276],{"class":43},[37,139209,139210,139212,139214,139216,139218,139220],{"class":39,"line":47},[37,139211,132281],{"class":2320},[37,139213,80142],{"class":50},[37,139215,129197],{"class":61},[37,139217,51773],{"class":50},[37,139219,132290],{"class":61},[37,139221,129767],{"class":50},[37,139223,139224],{"class":39,"line":104},[37,139225,132297],{"class":43},[37,139227,139228,139230,139232,139234,139236,139238],{"class":39,"line":113},[37,139229,132302],{"class":2320},[37,139231,80142],{"class":50},[37,139233,129197],{"class":61},[37,139235,51773],{"class":50},[37,139237,55100],{"class":61},[37,139239,129767],{"class":50},[37,139241,139242],{"class":39,"line":189},[37,139243,132317],{"class":43},[37,139245,139246,139248,139250,139252,139254,139256],{"class":39,"line":195},[37,139247,132322],{"class":2320},[37,139249,80142],{"class":50},[37,139251,129197],{"class":61},[37,139253,51773],{"class":50},[37,139255,55167],{"class":61},[37,139257,129767],{"class":50},[37,139259,139260],{"class":39,"line":201},[37,139261,132337],{"class":43},[37,139263,139264,139266,139268,139270,139272,139274],{"class":39,"line":207},[37,139265,132342],{"class":2320},[37,139267,80142],{"class":50},[37,139269,129197],{"class":61},[37,139271,51773],{"class":50},[37,139273,86568],{"class":61},[37,139275,129767],{"class":50},[37,139277,139278],{"class":39,"line":213},[37,139279,132357],{"class":43},[37,139281,139282,139284,139286,139288,139290,139292],{"class":39,"line":218},[37,139283,132362],{"class":2320},[37,139285,80142],{"class":50},[37,139287,129197],{"class":61},[37,139289,51773],{"class":50},[37,139291,132371],{"class":61},[37,139293,129767],{"class":50},[498,139295,139297,139298,139300],{"id":139296},"_1544-nav导航模块制作","15.4.4 ",[34,139299,54049],{},"导航模块制作",[1838,139302],{"style":126693,"src":139303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139305,139306,139308],{},[34,139307,54049],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139310,139311,139312],{},"1 号盒子左侧浮动，",[34,139313,139314],{},"dropdown",[1515,139316,139317,139327,139335,139341,139349,139359,139367,139378],{},[484,139318,139319,139320,101303,139323,139326],{},"1号盒子有讲究，根据相关性 里面包含 ",[34,139321,139322],{},".dt",[34,139324,139325],{},".dd"," 两个盒子",[484,139328,139329,139331,139332,139334],{},[34,139330,139322],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[34,139333,139325],{}," 挤到下面去了",[484,139336,139337,139338,139340],{},"给 ",[34,139339,139325],{}," 盒子设置宽度 和 高度，以及背景颜色",[484,139342,139337,139343,139345,139346,120522],{},[34,139344,139325],{}," 盒子里面定义 无序列表 （",[34,139347,139348],{},"ul > li > a",[484,139350,139351,139352,139354,139355,139358],{},"每个 ",[34,139353,484],{}," 都有一个高度（",[34,139356,139357],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[484,139360,139337,139361,139363,139364,120522],{},[34,139362,484],{}," 里面的a设置文字大小（",[34,139365,139366],{},"14px",[484,139368,139337,139369,139371,139372,139374,139375,139377],{},[34,139370,484],{}," 设置 ",[34,139373,127998],{},"，当鼠标移入的时候，让",[34,139376,484],{},"的背景变成白色，让里面的文字变成红色",[484,139379,139380,139382,139383,139385,139386,139388],{},[34,139381,484],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[34,139384,484],{},"的右侧，那么给",[34,139387,484],{},"设置相对定位",[14,139390,139391],{},"一定要注意相关性",[14,139393,138676],{},[27,139395,139396],{"className":126837,"code":138679,"language":126839,"meta":32,"style":32},[34,139397,139398,139406,139416,139426],{"__ignoreMap":32},[37,139399,139400,139402,139404],{"class":39,"line":40},[37,139401,51947],{"class":51636},[37,139403,137838],{"class":2320},[37,139405,15913],{"class":50},[37,139407,139408,139410,139412,139414],{"class":39,"line":47},[37,139409,137845],{"class":61},[37,139411,51773],{"class":50},[37,139413,8000],{"class":185},[37,139415,1669],{"class":50},[37,139417,139418,139420,139422,139424],{"class":39,"line":104},[37,139419,128453],{"class":61},[37,139421,51773],{"class":50},[37,139423,61205],{"class":61},[37,139425,1669],{"class":50},[37,139427,139428],{"class":39,"line":113},[37,139429,1941],{"class":50},[14,139431,138716],{},[27,139433,139434],{"className":126837,"code":138679,"language":126839,"meta":32,"style":32},[34,139435,139436,139444,139454,139464],{"__ignoreMap":32},[37,139437,139438,139440,139442],{"class":39,"line":40},[37,139439,51947],{"class":51636},[37,139441,137838],{"class":2320},[37,139443,15913],{"class":50},[37,139445,139446,139448,139450,139452],{"class":39,"line":47},[37,139447,137845],{"class":61},[37,139449,51773],{"class":50},[37,139451,8000],{"class":185},[37,139453,1669],{"class":50},[37,139455,139456,139458,139460,139462],{"class":39,"line":104},[37,139457,128453],{"class":61},[37,139459,51773],{"class":50},[37,139461,61205],{"class":61},[37,139463,1669],{"class":50},[37,139465,139466],{"class":39,"line":113},[37,139467,1941],{"class":50},[14,139469,139470],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139472,139473,139474,139477],{},"2 号盒子左侧浮动，",[34,139475,139476],{},"navitems"," 导航栏组",[1515,139479,139480,139485,139494],{},[484,139481,139482,139483],{},"里面结构是 ",[34,139484,139348],{},[484,139486,139487,139488,139490,139491,139493],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[34,139489,51],{},"左右的",[34,139492,31222],{},"把两侧撑开",[484,139495,139496],{},"让文字垂直居中（行高等于高度）",[1838,139498],{"style":126693,"src":139499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139501,139502],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139504,138676],{},[27,139506,139508],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},".box {\n  float: left;\n}\n",[34,139509,139510,139516,139526],{"__ignoreMap":32},[37,139511,139512,139514],{"class":39,"line":40},[37,139513,130685],{"class":2320},[37,139515,15913],{"class":50},[37,139517,139518,139520,139522,139524],{"class":39,"line":47},[37,139519,131317],{"class":61},[37,139521,51773],{"class":50},[37,139523,24077],{"class":61},[37,139525,1669],{"class":50},[37,139527,139528],{"class":39,"line":104},[37,139529,1941],{"class":50},[14,139531,138716],{},[27,139533,139534],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,139535,139536,139542,139552],{"__ignoreMap":32},[37,139537,139538,139540],{"class":39,"line":40},[37,139539,130685],{"class":2320},[37,139541,15913],{"class":50},[37,139543,139544,139546,139548,139550],{"class":39,"line":47},[37,139545,131317],{"class":61},[37,139547,51773],{"class":50},[37,139549,24077],{"class":61},[37,139551,1669],{"class":50},[37,139553,139554],{"class":39,"line":104},[37,139555,1941],{"class":50},[14,139557,139558],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1838,139560],{"style":126693,"src":139561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[27,139563,139564],{"className":126837,"code":130994,"language":126839,"meta":32,"style":32},[34,139565,139566,139572,139588],{"__ignoreMap":32},[37,139567,139568,139570],{"class":39,"line":40},[37,139569,51947],{"class":51636},[37,139571,15913],{"class":50},[37,139573,139574,139576,139578,139580,139582,139584,139586],{"class":39,"line":47},[37,139575,71232],{"class":61},[37,139577,51773],{"class":50},[37,139579,332],{"class":61},[37,139581,51828],{"class":54},[37,139583,51857],{"class":61},[37,139585,130229],{"class":61},[37,139587,1669],{"class":50},[37,139589,139590],{"class":39,"line":104},[37,139591,1941],{"class":50},[498,139593,139595],{"id":139594},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1838,139597],{"style":126693,"src":139598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1515,139600,139601,139606,139611],{},[484,139602,139603,139605],{},[34,139604,132040],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[484,139607,139608,139610],{},[34,139609,132040],{}," 里面有一个大的版心",[484,139612,139613,139614,139617,139618],{},"版心里面包含 1 号盒子，",[34,139615,139616],{},"mod_service"," 是服务模块，mod 是模块的意思",[1515,139619,139620,139625,139638,139654,139659],{},[484,139621,139337,139622,139624],{},[34,139623,139616],{}," 设置高度（80px）和下边框",[484,139626,139627,139628,139631,139632,139634,139635,139637],{},"在里面定义 ",[34,139629,139630],{},"ul > li"," ,每个",[34,139633,484],{}," 宽度是300px 高度是 50px，给每个",[34,139636,484],{},"设置35px的左内边距",[484,139639,139640,139641,139643,139644,139646,139647,139649,139650,18751,139652,120522],{},"在每个",[34,139642,484],{},"里面，放一个 ",[34,139645,23251],{},"（里面放图标），一个",[34,139648,51947],{},"（里面放",[34,139651,51947],{},[34,139653,14],{},[484,139655,139337,139656,139658],{},[34,139657,23251],{},"设置浮动，让h5与这个div左右排列",[484,139660,139661],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139663,138676],{},[27,139665,139667],{"className":126837,"code":139666,"language":126839,"meta":32,"style":32},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[34,139668,139669,139675,139687,139699,139726],{"__ignoreMap":32},[37,139670,139671,139673],{"class":39,"line":40},[37,139672,134594],{"class":2320},[37,139674,15913],{"class":50},[37,139676,139677,139679,139681,139683,139685],{"class":39,"line":47},[37,139678,70904],{"class":61},[37,139680,51773],{"class":50},[37,139682,1210],{"class":61},[37,139684,51828],{"class":54},[37,139686,1669],{"class":50},[37,139688,139689,139691,139693,139695,139697],{"class":39,"line":104},[37,139690,71124],{"class":61},[37,139692,51773],{"class":50},[37,139694,1210],{"class":61},[37,139696,51828],{"class":54},[37,139698,1669],{"class":50},[37,139700,139701,139703,139705,139707,139709,139711,139713,139715,139718,139720,139722,139724],{"class":39,"line":113},[37,139702,70947],{"class":61},[37,139704,51773],{"class":50},[37,139706,62062],{"class":61},[37,139708,165],{"class":50},[37,139710,134633],{"class":159},[37,139712,14055],{"class":50},[37,139714,62072],{"class":61},[37,139716,139717],{"class":61}," -10",[37,139719,51828],{"class":54},[37,139721,134652],{"class":61},[37,139723,51828],{"class":54},[37,139725,1669],{"class":50},[37,139727,139728],{"class":39,"line":189},[37,139729,1941],{"class":50},[14,139731,138716],{},[27,139733,139734],{"className":126837,"code":139666,"language":126839,"meta":32,"style":32},[34,139735,139736,139742,139754,139766,139792],{"__ignoreMap":32},[37,139737,139738,139740],{"class":39,"line":40},[37,139739,134594],{"class":2320},[37,139741,15913],{"class":50},[37,139743,139744,139746,139748,139750,139752],{"class":39,"line":47},[37,139745,70904],{"class":61},[37,139747,51773],{"class":50},[37,139749,1210],{"class":61},[37,139751,51828],{"class":54},[37,139753,1669],{"class":50},[37,139755,139756,139758,139760,139762,139764],{"class":39,"line":104},[37,139757,71124],{"class":61},[37,139759,51773],{"class":50},[37,139761,1210],{"class":61},[37,139763,51828],{"class":54},[37,139765,1669],{"class":50},[37,139767,139768,139770,139772,139774,139776,139778,139780,139782,139784,139786,139788,139790],{"class":39,"line":113},[37,139769,70947],{"class":61},[37,139771,51773],{"class":50},[37,139773,62062],{"class":61},[37,139775,165],{"class":50},[37,139777,134633],{"class":159},[37,139779,14055],{"class":50},[37,139781,62072],{"class":61},[37,139783,139717],{"class":61},[37,139785,51828],{"class":54},[37,139787,134652],{"class":61},[37,139789,51828],{"class":54},[37,139791,1669],{"class":50},[37,139793,139794],{"class":39,"line":189},[37,139795,1941],{"class":50},[14,139797,139798],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1515,139800,139801,139804,139810,139816,139828],{},[484,139802,139803],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[484,139805,139806,139807,120522],{},"里面的布局利用 自定义列表来实现（",[34,139808,139809],{},"dl > dt + dd",[484,139811,139337,139812,139815],{},[34,139813,139814],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[484,139817,139337,139818,139821,139822,18751,139824,139827],{},[34,139819,139820],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[34,139823,139820],{},[34,139825,139826],{},"dd","之间有些距离",[484,139829,139830],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139832,138676],{},[27,139834,139835],{"className":126837,"code":139026,"language":126839,"meta":32,"style":32},[34,139836,139837,139843,139855],{"__ignoreMap":32},[37,139838,139839,139841],{"class":39,"line":40},[37,139840,51947],{"class":51636},[37,139842,15913],{"class":50},[37,139844,139845,139847,139849,139851,139853],{"class":39,"line":47},[37,139846,70806],{"class":61},[37,139848,51773],{"class":50},[37,139850,135],{"class":61},[37,139852,51892],{"class":61},[37,139854,1669],{"class":50},[37,139856,139857],{"class":39,"line":104},[37,139858,1941],{"class":50},[14,139860,138716],{},[27,139862,139863],{"className":126837,"code":139026,"language":126839,"meta":32,"style":32},[34,139864,139865,139871,139883],{"__ignoreMap":32},[37,139866,139867,139869],{"class":39,"line":40},[37,139868,51947],{"class":51636},[37,139870,15913],{"class":50},[37,139872,139873,139875,139877,139879,139881],{"class":39,"line":47},[37,139874,70806],{"class":61},[37,139876,51773],{"class":50},[37,139878,135],{"class":61},[37,139880,51892],{"class":61},[37,139882,1669],{"class":50},[37,139884,139885],{"class":39,"line":104},[37,139886,1941],{"class":50},[14,139888,139889],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1515,139891,139892,139901,139904,139915],{},[484,139893,139894,139895,139897,139898,139900],{},"分为上下两块，上面是 ",[34,139896,132057],{}," 友情链接，下面是 ",[34,139899,132050],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[484,139902,139903],{},"把内容分别复制到相应模块中",[484,139905,139337,139906,139908,139909,139911,139912,139914],{},[34,139907,132057],{}," 设置 15px 的下外边距，给",[34,139910,132057],{}," 里面 的 ",[34,139913,51],{}," 标签设置 左右 3px 的外边距",[484,139916,139917,139918,139920],{},"给",[34,139919,132050],{}," 设置 20px 的行高",[14,139922,138676],{},[27,139924,139925],{"className":126837,"code":139026,"language":126839,"meta":32,"style":32},[34,139926,139927,139933,139945],{"__ignoreMap":32},[37,139928,139929,139931],{"class":39,"line":40},[37,139930,51947],{"class":51636},[37,139932,15913],{"class":50},[37,139934,139935,139937,139939,139941,139943],{"class":39,"line":47},[37,139936,70806],{"class":61},[37,139938,51773],{"class":50},[37,139940,135],{"class":61},[37,139942,51892],{"class":61},[37,139944,1669],{"class":50},[37,139946,139947],{"class":39,"line":104},[37,139948,1941],{"class":50},[14,139950,138716],{},[27,139952,139953],{"className":126837,"code":139026,"language":126839,"meta":32,"style":32},[34,139954,139955,139961,139973],{"__ignoreMap":32},[37,139956,139957,139959],{"class":39,"line":40},[37,139958,51947],{"class":51636},[37,139960,15913],{"class":50},[37,139962,139963,139965,139967,139969,139971],{"class":39,"line":47},[37,139964,70806],{"class":61},[37,139966,51773],{"class":50},[37,139968,135],{"class":61},[37,139970,51892],{"class":61},[37,139972,1669],{"class":50},[37,139974,139975],{"class":39,"line":104},[37,139976,1941],{"class":50},[14,139978,139979],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[446,139981,139982],{},"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":32,"searchDepth":47,"depth":47,"links":139984},[139985,139986,139987,139994],{"id":138265,"depth":47,"text":138266},{"id":138284,"depth":47,"text":138285},{"id":138311,"depth":47,"text":138312,"children":139988},[139989,139990,139991,139992,139993],{"id":138315,"depth":104,"text":138316},{"id":138328,"depth":104,"text":138329},{"id":138352,"depth":104,"text":138353},{"id":138374,"depth":104,"text":138375},{"id":138446,"depth":104,"text":138447},{"id":138572,"depth":47,"text":138573,"children":139995},[139996,139997,139998,139999,140001],{"id":138576,"depth":104,"text":138577},{"id":138583,"depth":104,"text":138584},{"id":138755,"depth":104,"text":138756},{"id":139296,"depth":104,"text":140000},"15.4.4 nav导航模块制作",{"id":139594,"depth":104,"text":139595},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138257,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140008,"title":140009,"body":140010,"description":451,"extension":452,"meta":142412,"navigation":454,"path":142413,"seo":142414,"stem":142415,"__hash__":142416},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140011,"toc":142389},[140012,140015,140019,140023,140035,140038,140041,140044,140055,140057,140081,140083,140107,140112,140115,140117,140153,140155,140191,140194,140199,140202,140205,140208,140238,140245,140248,140258,140260,140294,140297,140331,140337,140354,140356,140392,140394,140430,140435,140460,140462,140488,140490,140514,140521,140524,140588,140590,140632,140634,140674,140681,140686,140688,140718,140720,140750,140754,140757,140764,140776,140778,140804,140806,140830,140833,140835,140859,140865,140875,140877,140907,140909,140939,140946,140987,140989,141025,141027,141063,141067,141070,141073,141076,141082,141087,141090,141113,141116,141140,141143,141167,141172,141175,141178,141181,141184,141187,141261,141263,141293,141295,141325,141328,141331,141363,141367,141371,141385,141394,141397,141402,141404,141498,141500,141594,141617,141619,141643,141645,141669,141676,141679,141689,141691,141715,141720,141728,141730,141760,141765,141805,141807,141833,141835,141861,141865,141868,141873,141876,141880,141888,141895,141903,141905,141935,141937,141967,141975,141978,141981,141983,142013,142015,142045,142048,142053,142055,142079,142081,142105,142108,142193,142195,142219,142221,142245,142249,142251,142275,142277,142311,142315,142329,142332,142337,142340,142345,142348,142378,142386],[10,140013,140009],{"id":140014},"_16-品优购项目下篇-主体与页面开发",[469,140016,140018],{"id":140017},"_161-项目主体模块制作","16.1 项目主体模块制作",[498,140020,140022],{"id":140021},"_1611-首页制作","16.1.1 首页制作",[14,140024,140025,140027,140028,140030,140031,140034],{},[673,140026,102343],{}," 主体模块是 ",[673,140029,401],{}," 里面专有的，注意需要新的样式文件 ",[673,140032,140033],{},"index.css，"," 就不要写在common.css中了",[1838,140036],{"style":126693,"src":140037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1838,140039],{"style":126693,"src":140040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,140042,140043],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1515,140045,140046,140049,140052],{},[484,140047,140048],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[484,140050,140051],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[484,140053,140054],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,140056,138676],{},[27,140058,140059],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,140060,140061,140067,140077],{"__ignoreMap":32},[37,140062,140063,140065],{"class":39,"line":40},[37,140064,130685],{"class":2320},[37,140066,15913],{"class":50},[37,140068,140069,140071,140073,140075],{"class":39,"line":47},[37,140070,131317],{"class":61},[37,140072,51773],{"class":50},[37,140074,24077],{"class":61},[37,140076,1669],{"class":50},[37,140078,140079],{"class":39,"line":104},[37,140080,1941],{"class":50},[14,140082,138716],{},[27,140084,140085],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,140086,140087,140093,140103],{"__ignoreMap":32},[37,140088,140089,140091],{"class":39,"line":40},[37,140090,130685],{"class":2320},[37,140092,15913],{"class":50},[37,140094,140095,140097,140099,140101],{"class":39,"line":47},[37,140096,131317],{"class":61},[37,140098,51773],{"class":50},[37,140100,24077],{"class":61},[37,140102,1669],{"class":50},[37,140104,140105],{"class":39,"line":104},[37,140106,1941],{"class":50},[481,140108,140109],{},[484,140110,140111],{},"左侧focus模块制作",[1838,140113],{"style":126693,"src":140114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,140116,138676],{},[27,140118,140119],{"className":126837,"code":128160,"language":126839,"meta":32,"style":32},[34,140120,140121,140129,140139,140149],{"__ignoreMap":32},[37,140122,140123,140125,140127],{"class":39,"line":40},[37,140124,54157],{"class":51636},[37,140126,62236],{"class":2320},[37,140128,15913],{"class":50},[37,140130,140131,140133,140135,140137],{"class":39,"line":47},[37,140132,128175],{"class":61},[37,140134,51773],{"class":50},[37,140136,55225],{"class":61},[37,140138,1669],{"class":50},[37,140140,140141,140143,140145,140147],{"class":39,"line":104},[37,140142,71134],{"class":61},[37,140144,51773],{"class":50},[37,140146,55073],{"class":61},[37,140148,1669],{"class":50},[37,140150,140151],{"class":39,"line":113},[37,140152,1941],{"class":50},[14,140154,138716],{},[27,140156,140157],{"className":126837,"code":128160,"language":126839,"meta":32,"style":32},[34,140158,140159,140167,140177,140187],{"__ignoreMap":32},[37,140160,140161,140163,140165],{"class":39,"line":40},[37,140162,54157],{"class":51636},[37,140164,62236],{"class":2320},[37,140166,15913],{"class":50},[37,140168,140169,140171,140173,140175],{"class":39,"line":47},[37,140170,128175],{"class":61},[37,140172,51773],{"class":50},[37,140174,55225],{"class":61},[37,140176,1669],{"class":50},[37,140178,140179,140181,140183,140185],{"class":39,"line":104},[37,140180,71134],{"class":61},[37,140182,51773],{"class":50},[37,140184,55073],{"class":61},[37,140186,1669],{"class":50},[37,140188,140189],{"class":39,"line":113},[37,140190,1941],{"class":50},[14,140192,140193],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[481,140195,140196],{"start":47},[484,140197,140198],{},"右侧newsflash模块制作",[1838,140200],{"style":126693,"src":140201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,140203,140204],{},"右侧的模块 分为上中下三个盒子",[14,140206,140207],{},"结构代码：",[27,140209,140210],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,140211,140212],{"__ignoreMap":32},[37,140213,140214,140216,140218,140220,140222,140224,140226,140228,140230,140232,140234,140236],{"class":39,"line":40},[37,140215,1418],{"class":50},[37,140217,1838],{"class":51636},[37,140219,55575],{"class":2320},[37,140221,55],{"class":50},[37,140223,134354],{"class":185},[37,140225,55583],{"class":2320},[37,140227,55],{"class":50},[37,140229,134361],{"class":185},[37,140231,134364],{"class":2320},[37,140233,55],{"class":50},[37,140235,134369],{"class":185},[37,140237,51643],{"class":50},[14,140239,140240,140241,140244],{},"1 号盒子为 ",[34,140242,140243],{},"news"," 新闻模块 高度为 165px",[1838,140246],{"style":126693,"src":140247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140249,140250,140251,140254,140255],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[34,140252,140253],{},"news-hd","，下面是 ",[34,140256,140257],{},"news-bd",[14,140259,140207],{},[27,140261,140262],{"className":127584,"code":130941,"language":127586,"meta":32,"style":32},[34,140263,140264,140268,140282,140286],{"__ignoreMap":32},[37,140265,140266],{"class":39,"line":40},[37,140267,130948],{"class":43},[37,140269,140270,140272,140274,140276,140278,140280],{"class":39,"line":47},[37,140271,1418],{"class":50},[37,140273,51947],{"class":51636},[37,140275,53822],{"class":2320},[37,140277,55],{"class":50},[37,140279,130961],{"class":185},[37,140281,51643],{"class":50},[37,140283,140284],{"class":39,"line":104},[37,140285,130968],{"class":50},[37,140287,140288,140290,140292],{"class":39,"line":113},[37,140289,52121],{"class":50},[37,140291,51947],{"class":51636},[37,140293,51643],{"class":50},[14,140295,140296],{},"样式代码：",[27,140298,140299],{"className":127584,"code":130941,"language":127586,"meta":32,"style":32},[34,140300,140301,140305,140319,140323],{"__ignoreMap":32},[37,140302,140303],{"class":39,"line":40},[37,140304,130948],{"class":43},[37,140306,140307,140309,140311,140313,140315,140317],{"class":39,"line":47},[37,140308,1418],{"class":50},[37,140310,51947],{"class":51636},[37,140312,53822],{"class":2320},[37,140314,55],{"class":50},[37,140316,130961],{"class":185},[37,140318,51643],{"class":50},[37,140320,140321],{"class":39,"line":104},[37,140322,130968],{"class":50},[37,140324,140325,140327,140329],{"class":39,"line":113},[37,140326,52121],{"class":50},[37,140328,51947],{"class":51636},[37,140330,51643],{"class":50},[14,140332,140333,140334,140336],{},"上面是",[34,140335,140253],{},"，设置高度是 33px，设置下边框",[1515,140338,140339,140345],{},[484,140340,140341,140342,140344],{},"里面放一个",[34,140343,23251],{}," 标题",[484,140346,140347,140348,140350,140351,140353],{},"放一个a",[34,140349,102978],{},"，内容是 更多，然后让 ",[34,140352,51],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140355,140207],{},[27,140357,140358],{"className":126837,"code":138679,"language":126839,"meta":32,"style":32},[34,140359,140360,140368,140378,140388],{"__ignoreMap":32},[37,140361,140362,140364,140366],{"class":39,"line":40},[37,140363,51947],{"class":51636},[37,140365,137838],{"class":2320},[37,140367,15913],{"class":50},[37,140369,140370,140372,140374,140376],{"class":39,"line":47},[37,140371,137845],{"class":61},[37,140373,51773],{"class":50},[37,140375,8000],{"class":185},[37,140377,1669],{"class":50},[37,140379,140380,140382,140384,140386],{"class":39,"line":104},[37,140381,128453],{"class":61},[37,140383,51773],{"class":50},[37,140385,61205],{"class":61},[37,140387,1669],{"class":50},[37,140389,140390],{"class":39,"line":113},[37,140391,1941],{"class":50},[14,140393,140296],{},[27,140395,140396],{"className":126837,"code":138679,"language":126839,"meta":32,"style":32},[34,140397,140398,140406,140416,140426],{"__ignoreMap":32},[37,140399,140400,140402,140404],{"class":39,"line":40},[37,140401,51947],{"class":51636},[37,140403,137838],{"class":2320},[37,140405,15913],{"class":50},[37,140407,140408,140410,140412,140414],{"class":39,"line":47},[37,140409,137845],{"class":61},[37,140411,51773],{"class":50},[37,140413,8000],{"class":185},[37,140415,1669],{"class":50},[37,140417,140418,140420,140422,140424],{"class":39,"line":104},[37,140419,128453],{"class":61},[37,140421,51773],{"class":50},[37,140423,61205],{"class":61},[37,140425,1669],{"class":50},[37,140427,140428],{"class":39,"line":113},[37,140429,1941],{"class":50},[14,140431,140432,140433],{},"下面是",[34,140434,140257],{},[1515,140436,140437,140445],{},[484,140438,140439,140440,101303,140442,140444],{},"里面包含 ",[34,140441,1515],{},[34,140443,484],{}," 还有链接",[484,140446,139917,140447,140449,140450,140452,140453,140456,140457],{},[34,140448,484],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[34,140451,131503],{}," 2.设置 ",[34,140454,140455],{},"white-space: nowrap;"," 3. 设置 ",[34,140458,140459],{},"text-overflow: ellipsis;",[14,140461,140207],{},[27,140463,140465],{"className":126837,"code":140464,"language":126839,"meta":32,"style":32},"div {\n  overflow: hidden;\n}\n",[34,140466,140467,140473,140484],{"__ignoreMap":32},[37,140468,140469,140471],{"class":39,"line":40},[37,140470,51947],{"class":51636},[37,140472,15913],{"class":50},[37,140474,140475,140478,140480,140482],{"class":39,"line":47},[37,140476,140477],{"class":61},"  overflow",[37,140479,51773],{"class":50},[37,140481,62050],{"class":61},[37,140483,1669],{"class":50},[37,140485,140486],{"class":39,"line":104},[37,140487,1941],{"class":50},[14,140489,140296],{},[27,140491,140492],{"className":126837,"code":140464,"language":126839,"meta":32,"style":32},[34,140493,140494,140500,140510],{"__ignoreMap":32},[37,140495,140496,140498],{"class":39,"line":40},[37,140497,51947],{"class":51636},[37,140499,15913],{"class":50},[37,140501,140502,140504,140506,140508],{"class":39,"line":47},[37,140503,140477],{"class":61},[37,140505,51773],{"class":50},[37,140507,62050],{"class":61},[37,140509,1669],{"class":50},[37,140511,140512],{"class":39,"line":104},[37,140513,1941],{"class":50},[14,140515,140516,140517,140520],{},"2 号盒子为 ",[34,140518,140519],{},"lifeservice"," 生活服务模块 高度为 209px",[1838,140522],{"style":126693,"src":140523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1515,140525,140526,140529,140539,140563,140574],{},[484,140527,140528],{},"设置边框（左右下边框）",[484,140530,140531,140532,140535,140536,140538],{},"里面的内容 是 ",[34,140533,140534],{},"ul > 12*li","，给",[34,140537,484],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[484,140540,140541,140542],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1515,140543,140544,140549,140558],{},[484,140545,140546,140548],{},[34,140547,140519],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[484,140550,140551,140552,140554,140555,140557],{},"可以让 ",[34,140553,140519],{}," 里面的 ",[34,140556,1515],{}," 宽度为 252，就可以装的下 4 个 小 li",[484,140559,140560,140562],{},[34,140561,140519],{}," 盒子 overflow 隐藏多余的部分就可以了",[484,140564,116752,140565,140567,140568,140570,140571,140573],{},[34,140566,484],{}," 里面放一个 ",[34,140569,954],{},"（里面放图标），下面的文本用 ",[34,140572,14],{}," 标签包裹",[484,140575,139337,140576,140578,140579,140581,140582,139371,140584,140587],{},[34,140577,954],{}," 设置 24px宽和28px的高（注意 ",[34,140580,954],{}," 是行内元素， 转成行内块），给 ",[34,140583,484],{},[34,140585,140586],{},"text-align:center"," 让里面内容居中显示",[14,140589,140207],{},[27,140591,140593],{"className":126837,"code":140592,"language":126839,"meta":32,"style":32},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[34,140594,140595,140613,140618,140628],{"__ignoreMap":32},[37,140596,140597,140599,140601,140603,140605,140607,140609,140611],{"class":39,"line":40},[37,140598,37],{"class":51636},[37,140600,12776],{"class":50},[37,140602,51],{"class":51636},[37,140604,12776],{"class":50},[37,140606,23894],{"class":51636},[37,140608,12776],{"class":50},[37,140610,673],{"class":51636},[37,140612,15913],{"class":50},[37,140614,140615],{"class":39,"line":47},[37,140616,140617],{"class":43},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[37,140619,140620,140622,140624,140626],{"class":39,"line":104},[37,140621,128453],{"class":61},[37,140623,51773],{"class":50},[37,140625,128515],{"class":61},[37,140627,1669],{"class":50},[37,140629,140630],{"class":39,"line":113},[37,140631,1941],{"class":50},[14,140633,140296],{},[27,140635,140636],{"className":126837,"code":140592,"language":126839,"meta":32,"style":32},[34,140637,140638,140656,140660,140670],{"__ignoreMap":32},[37,140639,140640,140642,140644,140646,140648,140650,140652,140654],{"class":39,"line":40},[37,140641,37],{"class":51636},[37,140643,12776],{"class":50},[37,140645,51],{"class":51636},[37,140647,12776],{"class":50},[37,140649,23894],{"class":51636},[37,140651,12776],{"class":50},[37,140653,673],{"class":51636},[37,140655,15913],{"class":50},[37,140657,140658],{"class":39,"line":47},[37,140659,140617],{"class":43},[37,140661,140662,140664,140666,140668],{"class":39,"line":104},[37,140663,128453],{"class":61},[37,140665,51773],{"class":50},[37,140667,128515],{"class":61},[37,140669,1669],{"class":50},[37,140671,140672],{"class":39,"line":113},[37,140673,1941],{"class":50},[14,140675,140676,140677,140680],{},"3 号盒子为 ",[34,140678,140679],{},"bargain"," 特价商品",[1515,140682,140683],{},[484,140684,140685],{},"这个比较简单，直接插入一张图片即可",[14,140687,140207],{},[27,140689,140690],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,140691,140692],{"__ignoreMap":32},[37,140693,140694,140696,140698,140700,140702,140704,140706,140708,140710,140712,140714,140716],{"class":39,"line":40},[37,140695,1418],{"class":50},[37,140697,1838],{"class":51636},[37,140699,55575],{"class":2320},[37,140701,55],{"class":50},[37,140703,134354],{"class":185},[37,140705,55583],{"class":2320},[37,140707,55],{"class":50},[37,140709,134361],{"class":185},[37,140711,134364],{"class":2320},[37,140713,55],{"class":50},[37,140715,134369],{"class":185},[37,140717,51643],{"class":50},[14,140719,140296],{},[27,140721,140722],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,140723,140724],{"__ignoreMap":32},[37,140725,140726,140728,140730,140732,140734,140736,140738,140740,140742,140744,140746,140748],{"class":39,"line":40},[37,140727,1418],{"class":50},[37,140729,1838],{"class":51636},[37,140731,55575],{"class":2320},[37,140733,55],{"class":50},[37,140735,134354],{"class":185},[37,140737,55583],{"class":2320},[37,140739,55],{"class":50},[37,140741,134361],{"class":185},[37,140743,134364],{"class":2320},[37,140745,55],{"class":50},[37,140747,134369],{"class":185},[37,140749,51643],{"class":50},[498,140751,140753],{"id":140752},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1838,140755],{"style":126693,"src":140756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140758,140759,140760,140763],{},"大盒子 ",[34,140761,140762],{},"recom"," 推荐模块 recommend",[1515,140765,140766],{},[484,140767,140768,140769,140771,140772,140775],{},"给这个 ",[34,140770,140762],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[34,140773,140774],{},"#ebebeb","），设置距离上边 12px",[14,140777,140207],{},[27,140779,140781],{"className":126837,"code":140780,"language":126839,"meta":32,"style":32},"div {\n  background-color: #f0f0f0;\n}\n",[34,140782,140783,140789,140800],{"__ignoreMap":32},[37,140784,140785,140787],{"class":39,"line":40},[37,140786,51947],{"class":51636},[37,140788,15913],{"class":50},[37,140790,140791,140793,140795,140798],{"class":39,"line":47},[37,140792,71214],{"class":61},[37,140794,51773],{"class":50},[37,140796,140797],{"class":61},"#f0f0f0",[37,140799,1669],{"class":50},[37,140801,140802],{"class":39,"line":104},[37,140803,1941],{"class":50},[14,140805,140296],{},[27,140807,140808],{"className":126837,"code":140780,"language":126839,"meta":32,"style":32},[34,140809,140810,140816,140826],{"__ignoreMap":32},[37,140811,140812,140814],{"class":39,"line":40},[37,140813,51947],{"class":51636},[37,140815,15913],{"class":50},[37,140817,140818,140820,140822,140824],{"class":39,"line":47},[37,140819,71214],{"class":61},[37,140821,51773],{"class":50},[37,140823,140797],{"class":61},[37,140825,1669],{"class":50},[37,140827,140828],{"class":39,"line":104},[37,140829,1941],{"class":50},[14,140831,140832],{},"里面包含 2 个盒子， 浮动即可",[14,140834,140207],{},[27,140836,140837],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,140838,140839,140845,140855],{"__ignoreMap":32},[37,140840,140841,140843],{"class":39,"line":40},[37,140842,130685],{"class":2320},[37,140844,15913],{"class":50},[37,140846,140847,140849,140851,140853],{"class":39,"line":47},[37,140848,131317],{"class":61},[37,140850,51773],{"class":50},[37,140852,24077],{"class":61},[37,140854,1669],{"class":50},[37,140856,140857],{"class":39,"line":104},[37,140858,1941],{"class":50},[14,140860,140861,140862],{},"1 号盒子 ",[34,140863,140864],{},"recom_hd",[1515,140866,140867,140870],{},[484,140868,140869],{},"设置宽度205px，高度163px",[484,140871,140341,140872,140874],{},[34,140873,1838],{},"标签，插入图片即可",[14,140876,140207],{},[27,140878,140879],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,140880,140881],{"__ignoreMap":32},[37,140882,140883,140885,140887,140889,140891,140893,140895,140897,140899,140901,140903,140905],{"class":39,"line":40},[37,140884,1418],{"class":50},[37,140886,1838],{"class":51636},[37,140888,55575],{"class":2320},[37,140890,55],{"class":50},[37,140892,134354],{"class":185},[37,140894,55583],{"class":2320},[37,140896,55],{"class":50},[37,140898,134361],{"class":185},[37,140900,134364],{"class":2320},[37,140902,55],{"class":50},[37,140904,134369],{"class":185},[37,140906,51643],{"class":50},[14,140908,140296],{},[27,140910,140911],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,140912,140913],{"__ignoreMap":32},[37,140914,140915,140917,140919,140921,140923,140925,140927,140929,140931,140933,140935,140937],{"class":39,"line":40},[37,140916,1418],{"class":50},[37,140918,1838],{"class":51636},[37,140920,55575],{"class":2320},[37,140922,55],{"class":50},[37,140924,134354],{"class":185},[37,140926,55583],{"class":2320},[37,140928,55],{"class":50},[37,140930,134361],{"class":185},[37,140932,134364],{"class":2320},[37,140934,55],{"class":50},[37,140936,134369],{"class":185},[37,140938,51643],{"class":50},[14,140940,140941,140942,140945],{},"2 号盒子 ",[34,140943,140944],{},"recom_bd"," ，注意里面的小竖线",[1515,140947,140948,140959,140962,140967,140972],{},[484,140949,140950,140951,140953,140954,140956,140957],{},"右侧结构里面放 ",[34,140952,1515],{}," 包含 4个 ",[34,140955,484],{},"，每个li里面包含一个",[34,140958,1838],{},[484,140960,140961],{},"直接利用切片工具把里面的内容当成一张图片",[484,140963,139337,140964,140966],{},[34,140965,484],{}," 设置浮动",[484,140968,139337,140969,140971],{},[34,140970,1838],{}," 设置宽高，宽度 248px，高度 163px",[484,140973,140974,140975,140535,140978,140980,140981,140983,140984],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[34,140976,140977],{},"top 10px",[34,140979,484],{},"设置相对定位（注意，最后一个",[34,140982,484],{},"不用设置伪元素），可以利用 ",[34,140985,140986],{},"nth-child(-n+3){...}",[14,140988,140207],{},[27,140990,140991],{"className":126837,"code":138679,"language":126839,"meta":32,"style":32},[34,140992,140993,141001,141011,141021],{"__ignoreMap":32},[37,140994,140995,140997,140999],{"class":39,"line":40},[37,140996,51947],{"class":51636},[37,140998,137838],{"class":2320},[37,141000,15913],{"class":50},[37,141002,141003,141005,141007,141009],{"class":39,"line":47},[37,141004,137845],{"class":61},[37,141006,51773],{"class":50},[37,141008,8000],{"class":185},[37,141010,1669],{"class":50},[37,141012,141013,141015,141017,141019],{"class":39,"line":104},[37,141014,128453],{"class":61},[37,141016,51773],{"class":50},[37,141018,61205],{"class":61},[37,141020,1669],{"class":50},[37,141022,141023],{"class":39,"line":113},[37,141024,1941],{"class":50},[14,141026,140296],{},[27,141028,141029],{"className":126837,"code":138679,"language":126839,"meta":32,"style":32},[34,141030,141031,141039,141049,141059],{"__ignoreMap":32},[37,141032,141033,141035,141037],{"class":39,"line":40},[37,141034,51947],{"class":51636},[37,141036,137838],{"class":2320},[37,141038,15913],{"class":50},[37,141040,141041,141043,141045,141047],{"class":39,"line":47},[37,141042,137845],{"class":61},[37,141044,51773],{"class":50},[37,141046,8000],{"class":185},[37,141048,1669],{"class":50},[37,141050,141051,141053,141055,141057],{"class":39,"line":104},[37,141052,128453],{"class":61},[37,141054,51773],{"class":50},[37,141056,61205],{"class":61},[37,141058,1669],{"class":50},[37,141060,141061],{"class":39,"line":113},[37,141062,1941],{"class":50},[498,141064,141066],{"id":141065},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1838,141068],{"style":126693,"src":141069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,141071,141072],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,141074,141075],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,141077,141078,141081],{},[34,141079,141080],{},"box_hd"," 制作",[14,141083,140861,141084,141086],{},[34,141085,141080],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1838,141088],{"style":126693,"src":141089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1515,141091,141092,141097,141102,141105],{},[484,141093,141094,141096],{},[34,141095,141080],{}," 给 30px 的高度，2个像素的下边框",[484,141098,141099,141100],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[34,141101,139348],{},[484,141103,141104],{},"左侧盒左浮动，右侧盒子右浮动",[484,141106,141107,141109,141110,141112],{},[34,141108,51],{},"标签之间的距离用左右的",[34,141111,31222],{},"撑开即可",[14,141114,141115],{},"结构代码",[27,141117,141118],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,141119,141120,141126,141136],{"__ignoreMap":32},[37,141121,141122,141124],{"class":39,"line":40},[37,141123,130685],{"class":2320},[37,141125,15913],{"class":50},[37,141127,141128,141130,141132,141134],{"class":39,"line":47},[37,141129,131317],{"class":61},[37,141131,51773],{"class":50},[37,141133,24077],{"class":61},[37,141135,1669],{"class":50},[37,141137,141138],{"class":39,"line":104},[37,141139,1941],{"class":50},[14,141141,141142],{},"样式代码",[27,141144,141145],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,141146,141147,141153,141163],{"__ignoreMap":32},[37,141148,141149,141151],{"class":39,"line":40},[37,141150,130685],{"class":2320},[37,141152,15913],{"class":50},[37,141154,141155,141157,141159,141161],{"class":39,"line":47},[37,141156,131317],{"class":61},[37,141158,51773],{"class":50},[37,141160,24077],{"class":61},[37,141162,1669],{"class":50},[37,141164,141165],{"class":39,"line":104},[37,141166,1941],{"class":50},[14,141168,141169,141081],{},[34,141170,141171],{},"box_bd",[14,141173,141174],{},"2 号盒子 box_bd，不要给高度",[1838,141176],{"style":126693,"src":141177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,141179,141180],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,141182,141183],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,141185,141186],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1515,141188,141189,141201,141217],{},[484,141190,141191,141193,141194,141197,141198,141200],{},[34,141192,141171],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[34,141195,141196],{},"tab_content","，在",[34,141199,141196],{}," 里面包裹tab选项卡对应的内容",[484,141202,141203,141204,141207,141208,141210,141211,141213,141214,141216],{},"内容被一个大盒子包裹（",[34,141205,141206],{},"tab_list_item","），里面是 ",[34,141209,1515],{}," 包裹 5个 ",[34,141212,484],{},"，每个",[34,141215,484],{},"设置对应的宽度，然后设置浮动",[484,141218,141219,141220,141222,141223,141225,141226],{},"而这5个",[34,141221,484],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[34,141224,484],{},"设置",[1515,141227,141228,141246,141249],{},[484,141229,141230,141231,141233,141234,141236,141237,141239,141240,141242,141243,141245],{},"第一个小 ",[34,141232,484],{}," 分为上下结构，上面是 ",[34,141235,1515],{}," 包裹 ",[34,141238,484],{}," ，",[34,141241,484],{},"里面包裹 ",[34,141244,51],{},"，下面插入一张图片",[484,141247,141248],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[484,141250,141251,141252,141254,141255,141257,141258,141260],{},"后面的小 ",[34,141253,484],{}," 里面先放一个",[34,141256,51],{},"标签，然后在",[34,141259,51],{},"标签里面插入图片即可",[14,141262,141115],{},[27,141264,141265],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,141266,141267],{"__ignoreMap":32},[37,141268,141269,141271,141273,141275,141277,141279,141281,141283,141285,141287,141289,141291],{"class":39,"line":40},[37,141270,1418],{"class":50},[37,141272,1838],{"class":51636},[37,141274,55575],{"class":2320},[37,141276,55],{"class":50},[37,141278,134354],{"class":185},[37,141280,55583],{"class":2320},[37,141282,55],{"class":50},[37,141284,134361],{"class":185},[37,141286,134364],{"class":2320},[37,141288,55],{"class":50},[37,141290,134369],{"class":185},[37,141292,51643],{"class":50},[14,141294,141142],{},[27,141296,141297],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,141298,141299],{"__ignoreMap":32},[37,141300,141301,141303,141305,141307,141309,141311,141313,141315,141317,141319,141321,141323],{"class":39,"line":40},[37,141302,1418],{"class":50},[37,141304,1838],{"class":51636},[37,141306,55575],{"class":2320},[37,141308,55],{"class":50},[37,141310,134354],{"class":185},[37,141312,55583],{"class":2320},[37,141314,55],{"class":50},[37,141316,134361],{"class":185},[37,141318,134364],{"class":2320},[37,141320,55],{"class":50},[37,141322,134369],{"class":185},[37,141324,51643],{"class":50},[14,141326,141327],{},"tab栏切换需求！！！！！！介绍：",[1838,141329],{"style":126693,"src":141330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1515,141332,141333,141341,141347,141350],{},[484,141334,141335,141338,141339],{},[34,141336,141337],{},"tab","栏的布局是 ",[34,141340,139348],{},[484,141342,141343,141344,141346],{},"有多少个",[34,141345,141337],{},"选项卡，那么对应就有多少个内容",[484,141348,141349],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[484,141351,141352,141353,141356,141357,141359,141360,141362],{},"等后面我们学习了",[34,141354,141355],{},"js","之后，我们就会配合",[34,141358,141355],{},"来实现，",[34,141361,141337],{},"栏的切换",[469,141364,141366],{"id":141365},"_162-列表制作","16.2 列表制作",[498,141368,141370],{"id":141369},"_1621-准备工作","16.2.1 准备工作",[1515,141372,141373,141376,141379,141382],{},[484,141374,141375],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[484,141377,141378],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[484,141380,141381],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[484,141383,141384],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[498,141386,141388,141389,101303,141391,141393],{"id":141387},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[34,141390,131842],{},[34,141392,54049],{}," 修改",[1838,141395],{"style":126693,"src":141396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1515,141398,141399],{},[484,141400,141401],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141403,140207],{},[27,141405,141406],{"className":126837,"code":132269,"language":126839,"meta":32,"style":32},[34,141407,141408,141412,141426,141430,141444,141448,141462,141466,141480,141484],{"__ignoreMap":32},[37,141409,141410],{"class":39,"line":40},[37,141411,132276],{"class":43},[37,141413,141414,141416,141418,141420,141422,141424],{"class":39,"line":47},[37,141415,132281],{"class":2320},[37,141417,80142],{"class":50},[37,141419,129197],{"class":61},[37,141421,51773],{"class":50},[37,141423,132290],{"class":61},[37,141425,129767],{"class":50},[37,141427,141428],{"class":39,"line":104},[37,141429,132297],{"class":43},[37,141431,141432,141434,141436,141438,141440,141442],{"class":39,"line":113},[37,141433,132302],{"class":2320},[37,141435,80142],{"class":50},[37,141437,129197],{"class":61},[37,141439,51773],{"class":50},[37,141441,55100],{"class":61},[37,141443,129767],{"class":50},[37,141445,141446],{"class":39,"line":189},[37,141447,132317],{"class":43},[37,141449,141450,141452,141454,141456,141458,141460],{"class":39,"line":195},[37,141451,132322],{"class":2320},[37,141453,80142],{"class":50},[37,141455,129197],{"class":61},[37,141457,51773],{"class":50},[37,141459,55167],{"class":61},[37,141461,129767],{"class":50},[37,141463,141464],{"class":39,"line":201},[37,141465,132337],{"class":43},[37,141467,141468,141470,141472,141474,141476,141478],{"class":39,"line":207},[37,141469,132342],{"class":2320},[37,141471,80142],{"class":50},[37,141473,129197],{"class":61},[37,141475,51773],{"class":50},[37,141477,86568],{"class":61},[37,141479,129767],{"class":50},[37,141481,141482],{"class":39,"line":213},[37,141483,132357],{"class":43},[37,141485,141486,141488,141490,141492,141494,141496],{"class":39,"line":218},[37,141487,132362],{"class":2320},[37,141489,80142],{"class":50},[37,141491,129197],{"class":61},[37,141493,51773],{"class":50},[37,141495,132371],{"class":61},[37,141497,129767],{"class":50},[14,141499,140296],{},[27,141501,141502],{"className":126837,"code":132269,"language":126839,"meta":32,"style":32},[34,141503,141504,141508,141522,141526,141540,141544,141558,141562,141576,141580],{"__ignoreMap":32},[37,141505,141506],{"class":39,"line":40},[37,141507,132276],{"class":43},[37,141509,141510,141512,141514,141516,141518,141520],{"class":39,"line":47},[37,141511,132281],{"class":2320},[37,141513,80142],{"class":50},[37,141515,129197],{"class":61},[37,141517,51773],{"class":50},[37,141519,132290],{"class":61},[37,141521,129767],{"class":50},[37,141523,141524],{"class":39,"line":104},[37,141525,132297],{"class":43},[37,141527,141528,141530,141532,141534,141536,141538],{"class":39,"line":113},[37,141529,132302],{"class":2320},[37,141531,80142],{"class":50},[37,141533,129197],{"class":61},[37,141535,51773],{"class":50},[37,141537,55100],{"class":61},[37,141539,129767],{"class":50},[37,141541,141542],{"class":39,"line":189},[37,141543,132317],{"class":43},[37,141545,141546,141548,141550,141552,141554,141556],{"class":39,"line":195},[37,141547,132322],{"class":2320},[37,141549,80142],{"class":50},[37,141551,129197],{"class":61},[37,141553,51773],{"class":50},[37,141555,55167],{"class":61},[37,141557,129767],{"class":50},[37,141559,141560],{"class":39,"line":201},[37,141561,132337],{"class":43},[37,141563,141564,141566,141568,141570,141572,141574],{"class":39,"line":207},[37,141565,132342],{"class":2320},[37,141567,80142],{"class":50},[37,141569,129197],{"class":61},[37,141571,51773],{"class":50},[37,141573,86568],{"class":61},[37,141575,129767],{"class":50},[37,141577,141578],{"class":39,"line":213},[37,141579,132357],{"class":43},[37,141581,141582,141584,141586,141588,141590,141592],{"class":39,"line":218},[37,141583,132362],{"class":2320},[37,141585,80142],{"class":50},[37,141587,129197],{"class":61},[37,141589,51773],{"class":50},[37,141591,132371],{"class":61},[37,141593,129767],{"class":50},[1515,141595,141596,141607],{},[484,141597,141598,141599,141602,141603,101303,141605],{},"1 号盒子左侧浮动 ",[34,141600,141601],{},"sk_list"," 里面包含 ",[34,141604,1515],{},[34,141606,484],{},[484,141608,141609,141610,141602,141613,101303,141615],{},"2 号盒子左侧浮动 ",[34,141611,141612],{},"sk_con",[34,141614,1515],{},[34,141616,484],{},[14,141618,140207],{},[27,141620,141621],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,141622,141623,141629,141639],{"__ignoreMap":32},[37,141624,141625,141627],{"class":39,"line":40},[37,141626,130685],{"class":2320},[37,141628,15913],{"class":50},[37,141630,141631,141633,141635,141637],{"class":39,"line":47},[37,141632,131317],{"class":61},[37,141634,51773],{"class":50},[37,141636,24077],{"class":61},[37,141638,1669],{"class":50},[37,141640,141641],{"class":39,"line":104},[37,141642,1941],{"class":50},[14,141644,140296],{},[27,141646,141647],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,141648,141649,141655,141665],{"__ignoreMap":32},[37,141650,141651,141653],{"class":39,"line":40},[37,141652,130685],{"class":2320},[37,141654,15913],{"class":50},[37,141656,141657,141659,141661,141663],{"class":39,"line":47},[37,141658,131317],{"class":61},[37,141660,51773],{"class":50},[37,141662,24077],{"class":61},[37,141664,1669],{"class":50},[37,141666,141667],{"class":39,"line":104},[37,141668,1941],{"class":50},[498,141670,141672,141673],{"id":141671},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[34,141674,141675],{},"sk_container",[1838,141677],{"style":126693,"src":141678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1515,141680,141681,141686],{},[484,141682,140861,141683,141685],{},[34,141684,141675],{}," 给宽度 1200，不要给高度",[484,141687,141688],{},"一定不要忘记清除浮动",[14,141690,140207],{},[27,141692,141693],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,141694,141695,141701,141711],{"__ignoreMap":32},[37,141696,141697,141699],{"class":39,"line":40},[37,141698,130685],{"class":2320},[37,141700,15913],{"class":50},[37,141702,141703,141705,141707,141709],{"class":39,"line":47},[37,141704,131317],{"class":61},[37,141706,51773],{"class":50},[37,141708,24077],{"class":61},[37,141710,1669],{"class":50},[37,141712,141713],{"class":39,"line":104},[37,141714,1941],{"class":50},[481,141716,141717],{},[484,141718,141719],{},"sk_hd制作",[1515,141721,141722],{},[484,141723,140941,141724,141727],{},[34,141725,141726],{},"sk_hd"," ，插入图片即可",[14,141729,140207],{},[27,141731,141732],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,141733,141734],{"__ignoreMap":32},[37,141735,141736,141738,141740,141742,141744,141746,141748,141750,141752,141754,141756,141758],{"class":39,"line":40},[37,141737,1418],{"class":50},[37,141739,1838],{"class":51636},[37,141741,55575],{"class":2320},[37,141743,55],{"class":50},[37,141745,134354],{"class":185},[37,141747,55583],{"class":2320},[37,141749,55],{"class":50},[37,141751,134361],{"class":185},[37,141753,134364],{"class":2320},[37,141755,55],{"class":50},[37,141757,134369],{"class":185},[37,141759,51643],{"class":50},[481,141761,141762],{"start":47},[484,141763,141764],{},"sk_bd制作",[1515,141766,141767],{},[484,141768,141769,141770,141773,141774,101303,141776,141778],{},"3 号盒子 ",[34,141771,141772],{},"sk_bd"," ，里面包含很多的 ",[34,141775,1515],{},[34,141777,484],{},[1515,141779,141780,141789],{},[484,141781,141782,141783,141785,141786,141788],{},"当鼠标移入到 ",[34,141784,484],{}," 上面的时候显示红色的边框，在这里先给 ",[34,141787,484],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[484,141790,141791,141792,141794,141795,141797,141798,141801,141802,141804],{},"由于给每个 ",[34,141793,484],{}," 都设置了外边距，导致一行的最后一个 ",[34,141796,484],{}," 掉了下来，在这里我们利用 ",[34,141799,141800],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[34,141803,484],{},"，去掉外边距就好了",[14,141806,140207],{},[27,141808,141809],{"className":126837,"code":139026,"language":126839,"meta":32,"style":32},[34,141810,141811,141817,141829],{"__ignoreMap":32},[37,141812,141813,141815],{"class":39,"line":40},[37,141814,51947],{"class":51636},[37,141816,15913],{"class":50},[37,141818,141819,141821,141823,141825,141827],{"class":39,"line":47},[37,141820,70806],{"class":61},[37,141822,51773],{"class":50},[37,141824,135],{"class":61},[37,141826,51892],{"class":61},[37,141828,1669],{"class":50},[37,141830,141831],{"class":39,"line":104},[37,141832,1941],{"class":50},[14,141834,140296],{},[27,141836,141837],{"className":126837,"code":139026,"language":126839,"meta":32,"style":32},[34,141838,141839,141845,141857],{"__ignoreMap":32},[37,141840,141841,141843],{"class":39,"line":40},[37,141842,51947],{"class":51636},[37,141844,15913],{"class":50},[37,141846,141847,141849,141851,141853,141855],{"class":39,"line":47},[37,141848,70806],{"class":61},[37,141850,51773],{"class":50},[37,141852,135],{"class":61},[37,141854,51892],{"class":61},[37,141856,1669],{"class":50},[37,141858,141859],{"class":39,"line":104},[37,141860,1941],{"class":50},[469,141862,141864],{"id":141863},"_163-注册页面制作","16.3 注册页面制作",[1838,141866],{"style":126693,"src":141867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141869,141870,141872],{},[673,141871,9366],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1838,141874],{"style":126693,"src":141875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[498,141877,141879],{"id":141878},"_1631-准备工作","16.3.1 准备工作",[1515,141881,141882,141885],{},[484,141883,141884],{},"创建register.html，引入 base.css，引入favicon图标",[484,141886,141887],{},"创建register.css ，在html页面进行引入",[498,141889,141891,141892,141894],{"id":141890},"_1632-header-头部实现","16.3.2 ",[34,141893,131842],{}," 头部实现",[1515,141896,141897,141900],{},[484,141898,141899],{},"整个内容用 版心 进行包裹",[484,141901,141902],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141904,140207],{},[27,141906,141907],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,141908,141909],{"__ignoreMap":32},[37,141910,141911,141913,141915,141917,141919,141921,141923,141925,141927,141929,141931,141933],{"class":39,"line":40},[37,141912,1418],{"class":50},[37,141914,1838],{"class":51636},[37,141916,55575],{"class":2320},[37,141918,55],{"class":50},[37,141920,134354],{"class":185},[37,141922,55583],{"class":2320},[37,141924,55],{"class":50},[37,141926,134361],{"class":185},[37,141928,134364],{"class":2320},[37,141930,55],{"class":50},[37,141932,134369],{"class":185},[37,141934,51643],{"class":50},[14,141936,140296],{},[27,141938,141939],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,141940,141941],{"__ignoreMap":32},[37,141942,141943,141945,141947,141949,141951,141953,141955,141957,141959,141961,141963,141965],{"class":39,"line":40},[37,141944,1418],{"class":50},[37,141946,1838],{"class":51636},[37,141948,55575],{"class":2320},[37,141950,55],{"class":50},[37,141952,134354],{"class":185},[37,141954,55583],{"class":2320},[37,141956,55],{"class":50},[37,141958,134361],{"class":185},[37,141960,134364],{"class":2320},[37,141962,55],{"class":50},[37,141964,134369],{"class":185},[37,141966,51643],{"class":50},[498,141968,141970,141971,141974],{"id":141969},"_1633-registerarea-主体模块实现","16.3.3 ",[34,141972,141973],{},"registerarea"," 主体模块实现",[1838,141976],{"style":126693,"src":141977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141979,141980],{},"整个大盒子 高度为 522px，设置4个边框",[14,141982,140207],{},[27,141984,141985],{"className":126837,"code":130994,"language":126839,"meta":32,"style":32},[34,141986,141987,141993,142009],{"__ignoreMap":32},[37,141988,141989,141991],{"class":39,"line":40},[37,141990,51947],{"class":51636},[37,141992,15913],{"class":50},[37,141994,141995,141997,141999,142001,142003,142005,142007],{"class":39,"line":47},[37,141996,71232],{"class":61},[37,141998,51773],{"class":50},[37,142000,332],{"class":61},[37,142002,51828],{"class":54},[37,142004,51857],{"class":61},[37,142006,130229],{"class":61},[37,142008,1669],{"class":50},[37,142010,142011],{"class":39,"line":104},[37,142012,1941],{"class":50},[14,142014,140296],{},[27,142016,142017],{"className":126837,"code":130994,"language":126839,"meta":32,"style":32},[34,142018,142019,142025,142041],{"__ignoreMap":32},[37,142020,142021,142023],{"class":39,"line":40},[37,142022,51947],{"class":51636},[37,142024,15913],{"class":50},[37,142026,142027,142029,142031,142033,142035,142037,142039],{"class":39,"line":47},[37,142028,71232],{"class":61},[37,142030,51773],{"class":50},[37,142032,332],{"class":61},[37,142034,51828],{"class":54},[37,142036,51857],{"class":61},[37,142038,130229],{"class":61},[37,142040,1669],{"class":50},[37,142042,142043],{"class":39,"line":104},[37,142044,1941],{"class":50},[14,142046,142047],{},"1号盒子 是一个 h3 标签，放标题",[1515,142049,142050],{},[484,142051,142052],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,142054,140207],{},[27,142056,142057],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,142058,142059,142065,142075],{"__ignoreMap":32},[37,142060,142061,142063],{"class":39,"line":40},[37,142062,130685],{"class":2320},[37,142064,15913],{"class":50},[37,142066,142067,142069,142071,142073],{"class":39,"line":47},[37,142068,131317],{"class":61},[37,142070,51773],{"class":50},[37,142072,24077],{"class":61},[37,142074,1669],{"class":50},[37,142076,142077],{"class":39,"line":104},[37,142078,1941],{"class":50},[14,142080,140296],{},[27,142082,142083],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,142084,142085,142091,142101],{"__ignoreMap":32},[37,142086,142087,142089],{"class":39,"line":40},[37,142088,130685],{"class":2320},[37,142090,15913],{"class":50},[37,142092,142093,142095,142097,142099],{"class":39,"line":47},[37,142094,131317],{"class":61},[37,142096,51773],{"class":50},[37,142098,24077],{"class":61},[37,142100,1669],{"class":50},[37,142102,142103],{"class":39,"line":104},[37,142104,1941],{"class":50},[14,142106,142107],{},"2号盒子 里面放注册的内容",[1515,142109,142110,142113,142122,142136,142149,142152,142155,142173,142187],{},[484,142111,142112],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[484,142114,142115,142116,142118,142119,142121],{},"里面的内容利用 ",[34,142117,1515],{}," 包含 ",[34,142120,484],{}," 来实现的（不需要用表格）",[484,142123,139351,142124,142126,142127,142129,142130,142132,142133,142135],{},[34,142125,484],{}," 里面，左侧放 ",[34,142128,33945],{}," 标签， 中间放",[34,142131,54157],{}," 标签， 右侧放 ",[34,142134,37],{}," 提示信息",[484,142137,142138,142139,142141,142142,142144,142145,142148],{},"左侧 ",[34,142140,33945],{},"里面的文字都是右对齐，我们可以给",[34,142143,33945],{},"设置一个宽度（88px），然后利用",[34,142146,142147],{},"text-align"," 来设置右对齐",[484,142150,142151],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[484,142153,142154],{},"右侧 span修饰一下文字颜色",[484,142156,142157,142158],{},"提示信息的样式优化",[1515,142159,142160,142163,142166],{},[484,142161,142162],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[484,142164,142165],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[484,142167,142168,142169,142172],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[34,142170,142171],{},"vertical-algin"," 来设置 图片与文字对齐方式",[484,142174,142175,142176],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1515,142177,142178,142184],{},[484,142179,142180,142181,142183],{},"设置 ",[34,142182,23894],{}," 的 左右 12px 的内边距，设置一下文字颜色",[484,142185,142186],{},"分别设置 背景颜色",[484,142188,142189,142190,142192],{},"同意协议 和 完成注册 都是用 ",[34,142191,484],{}," 进行包裹",[14,142194,140207],{},[27,142196,142197],{"className":126837,"code":140780,"language":126839,"meta":32,"style":32},[34,142198,142199,142205,142215],{"__ignoreMap":32},[37,142200,142201,142203],{"class":39,"line":40},[37,142202,51947],{"class":51636},[37,142204,15913],{"class":50},[37,142206,142207,142209,142211,142213],{"class":39,"line":47},[37,142208,71214],{"class":61},[37,142210,51773],{"class":50},[37,142212,140797],{"class":61},[37,142214,1669],{"class":50},[37,142216,142217],{"class":39,"line":104},[37,142218,1941],{"class":50},[14,142220,140296],{},[27,142222,142223],{"className":126837,"code":140780,"language":126839,"meta":32,"style":32},[34,142224,142225,142231,142241],{"__ignoreMap":32},[37,142226,142227,142229],{"class":39,"line":40},[37,142228,51947],{"class":51636},[37,142230,15913],{"class":50},[37,142232,142233,142235,142237,142239],{"class":39,"line":47},[37,142234,71214],{"class":61},[37,142236,51773],{"class":50},[37,142238,140797],{"class":61},[37,142240,1669],{"class":50},[37,142242,142243],{"class":39,"line":104},[37,142244,1941],{"class":50},[498,142246,142248],{"id":142247},"_1634-底部实现","16.3.4 底部实现",[14,142250,140207],{},[27,142252,142253],{"className":126837,"code":140780,"language":126839,"meta":32,"style":32},[34,142254,142255,142261,142271],{"__ignoreMap":32},[37,142256,142257,142259],{"class":39,"line":40},[37,142258,51947],{"class":51636},[37,142260,15913],{"class":50},[37,142262,142263,142265,142267,142269],{"class":39,"line":47},[37,142264,71214],{"class":61},[37,142266,51773],{"class":50},[37,142268,140797],{"class":61},[37,142270,1669],{"class":50},[37,142272,142273],{"class":39,"line":104},[37,142274,1941],{"class":50},[14,142276,140296],{},[27,142278,142279],{"className":127584,"code":130941,"language":127586,"meta":32,"style":32},[34,142280,142281,142285,142299,142303],{"__ignoreMap":32},[37,142282,142283],{"class":39,"line":40},[37,142284,130948],{"class":43},[37,142286,142287,142289,142291,142293,142295,142297],{"class":39,"line":47},[37,142288,1418],{"class":50},[37,142290,51947],{"class":51636},[37,142292,53822],{"class":2320},[37,142294,55],{"class":50},[37,142296,130961],{"class":185},[37,142298,51643],{"class":50},[37,142300,142301],{"class":39,"line":104},[37,142302,130968],{"class":50},[37,142304,142305,142307,142309],{"class":39,"line":113},[37,142306,52121],{"class":50},[37,142308,51947],{"class":51636},[37,142310,51643],{"class":50},[469,142312,142314],{"id":142313},"_164-项目总结","16.4 项目总结",[481,142316,142317,142320,142323,142326],{},[484,142318,142319],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[484,142321,142322],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[484,142324,142325],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[484,142327,142328],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1838,142330],{"style":126693,"src":142331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[481,142333,142334],{"start":189},[484,142335,142336],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1838,142338],{"style":126693,"src":142339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[481,142341,142342],{"start":195},[484,142343,142344],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1838,142346],{"style":126693,"src":142347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[27,142349,142350],{"className":127584,"code":136994,"language":127586,"meta":32,"style":32},[34,142351,142352],{"__ignoreMap":32},[37,142353,142354,142356,142358,142360,142362,142364,142366,142368,142370,142372,142374,142376],{"class":39,"line":40},[37,142355,1418],{"class":50},[37,142357,54157],{"class":51636},[37,142359,54160],{"class":2320},[37,142361,55],{"class":50},[37,142363,63035],{"class":185},[37,142365,15261],{"class":2320},[37,142367,55],{"class":50},[37,142369,137015],{"class":185},[37,142371,61356],{"class":2320},[37,142373,55],{"class":50},[37,142375,137022],{"class":185},[37,142377,51643],{"class":50},[481,142379,142380,142383],{"start":201},[484,142381,142382],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[484,142384,142385],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[446,142387,142388],{},"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":32,"searchDepth":47,"depth":47,"links":142390},[142391,142396,142403,142411],{"id":140017,"depth":47,"text":140018,"children":142392},[142393,142394,142395],{"id":140021,"depth":104,"text":140022},{"id":140752,"depth":104,"text":140753},{"id":141065,"depth":104,"text":141066},{"id":141365,"depth":47,"text":141366,"children":142397},[142398,142399,142401],{"id":141369,"depth":104,"text":141370},{"id":141387,"depth":104,"text":142400},"16.2.2 列表页 header 和 nav 修改",{"id":141671,"depth":104,"text":142402},"16.2.3 列表页主体 sk_container",{"id":141863,"depth":47,"text":141864,"children":142404},[142405,142406,142408,142410],{"id":141878,"depth":104,"text":141879},{"id":141890,"depth":104,"text":142407},"16.3.2 header 头部实现",{"id":141969,"depth":104,"text":142409},"16.3.3 registerarea 主体模块实现",{"id":142247,"depth":104,"text":142248},{"id":142313,"depth":47,"text":142314},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140009,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142418,"title":142419,"body":142420,"description":451,"extension":452,"meta":142528,"navigation":454,"path":142529,"seo":142530,"stem":142531,"__hash__":142532},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142421,"toc":142523},[142422,142425,142429,142432,142435,142444,142453,142457,142462,142469,142487,142490,142493,142496,142499,142502,142505,142508,142511,142514,142517,142520],[10,142423,142419],{"id":142424},"_17-web服务器与网站发布",[469,142426,142428],{"id":142427},"_171-web服务器","17.1 Web服务器",[14,142430,142431],{},"把自己网站上传到服务器上，可以让其他人访问",[1838,142433],{"style":126693,"src":142434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142436,142437,142440,142441],{},[673,142438,142439],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[673,142442,142443],{},"Web 服务器等",[14,142445,142446,142447,101303,142450,26082],{},"根据服务器在网络中所在的位置不同，又可分为 ",[673,142448,142449],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[673,142451,142452],{},"远程服务器",[498,142454,142456],{"id":142455},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142458,142459],{},[673,142460,142461],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142463,142464,142465],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[51,142466,142467],{"href":142467,"rel":142468},"http:\u002F\u002Ffree.3v.do\u002F",[24206],[1515,142470,142471,142474,142477,142484],{},[484,142472,142473],{},"去免费空间网站注册账号。",[484,142475,142476],{},"记录下主机名、用户名、密码、域名。",[484,142478,142479,142480,142483],{},"利用 ",[34,142481,142482],{},"utftp"," 软件 上传网站到远程服务器",[484,142485,142486],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142488,142489],{},"使用软件上传，对上传软件文件进行解压",[1838,142491],{"style":126693,"src":142492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1838,142494],{"style":126693,"src":142495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142497,142498],{},"输入刚刚申请的服务器账号信息：",[1838,142500],{"style":126693,"src":142501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1838,142503],{"style":126693,"src":142504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1838,142506],{"style":126693,"src":142507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1838,142509],{"style":126693,"src":142510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142512,142513],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1838,142515],{"style":126693,"src":142516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142518,142519],{},"浏览器输入域名即可访问",[14,142521,142522],{},"首页一定必须是index",{"title":32,"searchDepth":47,"depth":47,"links":142524},[142525],{"id":142427,"depth":47,"text":142428,"children":142526},[142527],{"id":142455,"depth":104,"text":142456},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142419,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142534,"title":142535,"body":142536,"description":451,"extension":452,"meta":143463,"navigation":454,"path":143464,"seo":143465,"stem":143466,"__hash__":143467},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142537,"toc":143446},[142538,142541,142545,142548,142551,142562,142565,142569,142573,142578,142581,142584,142587,142590,142594,142620,142624,142628,142631,142634,142638,142671,142675,142678,142681,142745,142749,142753,142756,142759,142762,142766,142811,142815,142818,142848,142852,142856,142859,142862,142866,142869,142938,142941,143049,143051,143057,143061,143064,143067,143163,143166,143170,143194,143198,143201,143205,143208,143212,143215,143218,143221,143224,143228,143231,143234,143238,143242,143245,143248,143251,143254,143258,143261,143265,143268,143271,143316,143320,143324,143327,143330,143333,143365,143369,143372,143406,143410,143413,143443],[10,142539,142535],{"id":142540},"_18-2d动画与3d转换",[469,142542,142544],{"id":142543},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142546,142547],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142549,142550],{},"转换（transform）你可以简单理解为变形",[1515,142552,142553,142556,142559],{},[484,142554,142555],{},"移动：translate",[484,142557,142558],{},"旋转：rotate",[484,142560,142561],{},"缩放：scale",[1838,142563],{"style":126693,"src":142564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[498,142566,142568],{"id":142567},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22339,142570,142572],{"id":142571},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142574,142575,142576],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[673,142577,133496],{},[1838,142579],{"style":126693,"src":142580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142582,142583],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142585,142586],{},"对于行内元素无效",[14,142588,142589],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22339,142591,142593],{"id":142592},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[27,142595,142596],{"className":126837,"code":139026,"language":126839,"meta":32,"style":32},[34,142597,142598,142604,142616],{"__ignoreMap":32},[37,142599,142600,142602],{"class":39,"line":40},[37,142601,51947],{"class":51636},[37,142603,15913],{"class":50},[37,142605,142606,142608,142610,142612,142614],{"class":39,"line":47},[37,142607,70806],{"class":61},[37,142609,51773],{"class":50},[37,142611,135],{"class":61},[37,142613,51892],{"class":61},[37,142615,1669],{"class":50},[37,142617,142618],{"class":39,"line":104},[37,142619,1941],{"class":50},[498,142621,142623],{"id":142622},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22339,142625,142627],{"id":142626},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142629,142630],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1838,142632],{"style":126693,"src":142633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22339,142635,142637],{"id":142636},"_18122-旋转效果","18.1.2.2 旋转效果",[27,142639,142641],{"className":126837,"code":142640,"language":126839,"meta":32,"style":32},"div {\n  transform: rotate(45deg);\n}\n",[34,142642,142643,142649,142667],{"__ignoreMap":32},[37,142644,142645,142647],{"class":39,"line":40},[37,142646,51947],{"class":51636},[37,142648,15913],{"class":50},[37,142650,142651,142653,142655,142658,142660,142662,142665],{"class":39,"line":47},[37,142652,136821],{"class":61},[37,142654,51773],{"class":50},[37,142656,142657],{"class":61},"rotate",[37,142659,165],{"class":50},[37,142661,1040],{"class":61},[37,142663,142664],{"class":54},"deg",[37,142666,3069],{"class":50},[37,142668,142669],{"class":39,"line":104},[37,142670,1941],{"class":50},[22339,142672,142674],{"id":142673},"_18123-三角做法","18.1.2.3 三角做法",[14,142676,142677],{},"该下标当经过最外层大盒子时会实现向上反转",[1838,142679],{"style":126693,"src":142680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[27,142682,142683],{"className":126837,"code":135357,"language":126839,"meta":32,"style":32},[34,142684,142685,142689,142695,142705,142715,142731,142741],{"__ignoreMap":32},[37,142686,142687],{"class":39,"line":40},[37,142688,135364],{"class":43},[37,142690,142691,142693],{"class":39,"line":47},[37,142692,135369],{"class":2320},[37,142694,15913],{"class":50},[37,142696,142697,142699,142701,142703],{"class":39,"line":104},[37,142698,70904],{"class":61},[37,142700,51773],{"class":50},[37,142702,135],{"class":61},[37,142704,1669],{"class":50},[37,142706,142707,142709,142711,142713],{"class":39,"line":113},[37,142708,71124],{"class":61},[37,142710,51773],{"class":50},[37,142712,135],{"class":61},[37,142714,1669],{"class":50},[37,142716,142717,142719,142721,142723,142725,142727,142729],{"class":39,"line":189},[37,142718,71232],{"class":61},[37,142720,51773],{"class":50},[37,142722,98],{"class":61},[37,142724,51828],{"class":54},[37,142726,51857],{"class":61},[37,142728,64327],{"class":61},[37,142730,1669],{"class":50},[37,142732,142733,142735,142737,142739],{"class":39,"line":195},[37,142734,135412],{"class":61},[37,142736,51773],{"class":50},[37,142738,62705],{"class":61},[37,142740,1669],{"class":50},[37,142742,142743],{"class":39,"line":201},[37,142744,1941],{"class":50},[498,142746,142748],{"id":142747},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22339,142750,142752],{"id":142751},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142754,142755],{},"设置中心点",[1838,142757],{"style":126693,"src":142758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142760,142761],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22339,142763,142765],{"id":142764},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[27,142767,142769],{"className":126837,"code":142768,"language":126839,"meta":32,"style":32},"\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",[34,142770,142771,142776,142782,142797,142802,142807],{"__ignoreMap":32},[37,142772,142773],{"class":39,"line":40},[37,142774,142775],{"class":43},"\u002F* 转换中心点 *\u002F\n",[37,142777,142778,142780],{"class":39,"line":47},[37,142779,51947],{"class":51636},[37,142781,15913],{"class":50},[37,142783,142784,142787,142789,142791,142793,142795],{"class":39,"line":104},[37,142785,142786],{"class":61},"  transform-origin",[37,142788,51773],{"class":50},[37,142790,51928],{"class":61},[37,142792,17485],{"class":61},[37,142794,130700],{"class":50},[37,142796,135510],{"class":43},[37,142798,142799],{"class":39,"line":113},[37,142800,142801],{"class":43},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[37,142803,142804],{"class":39,"line":189},[37,142805,142806],{"class":43},"  \u002F* transform-origin: left top; *\u002F\n",[37,142808,142809],{"class":39,"line":195},[37,142810,1941],{"class":50},[22339,142812,142814],{"id":142813},"_18133-旋转案例","18.1.3.3 旋转案例",[1838,142816],{"style":126693,"src":142817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[27,142819,142820],{"className":126837,"code":142640,"language":126839,"meta":32,"style":32},[34,142821,142822,142828,142844],{"__ignoreMap":32},[37,142823,142824,142826],{"class":39,"line":40},[37,142825,51947],{"class":51636},[37,142827,15913],{"class":50},[37,142829,142830,142832,142834,142836,142838,142840,142842],{"class":39,"line":47},[37,142831,136821],{"class":61},[37,142833,51773],{"class":50},[37,142835,142657],{"class":61},[37,142837,165],{"class":50},[37,142839,1040],{"class":61},[37,142841,142664],{"class":54},[37,142843,3069],{"class":50},[37,142845,142846],{"class":39,"line":104},[37,142847,1941],{"class":50},[498,142849,142851],{"id":142850},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22339,142853,142855],{"id":142854},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142857,142858],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1838,142860],{"style":126693,"src":142861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22339,142863,142865],{"id":142864},"_18142-分页按钮","18.1.4.2 分页按钮",[1838,142867],{"style":126693,"src":142868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[27,142870,142872],{"className":126837,"code":142871,"language":126839,"meta":32,"style":32},"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",[34,142873,142874,142880,142896,142900,142904,142909,142915,142929,142934],{"__ignoreMap":32},[37,142875,142876,142878],{"class":39,"line":40},[37,142877,51947],{"class":51636},[37,142879,15913],{"class":50},[37,142881,142882,142884,142886,142889,142891,142894],{"class":39,"line":47},[37,142883,136821],{"class":61},[37,142885,51773],{"class":50},[37,142887,142888],{"class":61},"scale",[37,142890,165],{"class":50},[37,142892,142893],{"class":61},"1.2",[37,142895,3069],{"class":50},[37,142897,142898],{"class":39,"line":104},[37,142899,1941],{"class":50},[37,142901,142902],{"class":39,"line":113},[37,142903,136298],{"class":50},[37,142905,142906],{"class":39,"line":189},[37,142907,142908],{"class":43},"\u002F* 2D 缩放 *\u002F\n",[37,142910,142911,142913],{"class":39,"line":195},[37,142912,51947],{"class":51636},[37,142914,15913],{"class":50},[37,142916,142917,142919,142921,142923,142925,142927],{"class":39,"line":201},[37,142918,136821],{"class":61},[37,142920,51773],{"class":50},[37,142922,142888],{"class":61},[37,142924,165],{"class":50},[37,142926,142893],{"class":61},[37,142928,3069],{"class":50},[37,142930,142931],{"class":39,"line":207},[37,142932,142933],{"class":43},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[37,142935,142936],{"class":39,"line":213},[37,142937,1941],{"class":50},[14,142939,142940],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[27,142942,142944],{"className":126837,"code":142943,"language":126839,"meta":32,"style":32},"\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",[34,142945,142946,142951,142961,142982,143003,143007,143012,143018,143045],{"__ignoreMap":32},[37,142947,142948],{"class":39,"line":40},[37,142949,142950],{"class":43},"\u002F* 定义动画 *\u002F\n",[37,142952,142953,142956,142959],{"class":39,"line":47},[37,142954,142955],{"class":54},"@keyframes",[37,142957,142958],{"class":159}," move",[37,142960,15913],{"class":50},[37,142962,142963,142966,142968,142970,142972,142975,142977,142979],{"class":39,"line":104},[37,142964,142965],{"class":2320},"  0%",[37,142967,80142],{"class":50},[37,142969,48470],{"class":61},[37,142971,51773],{"class":50},[37,142973,142974],{"class":61},"translateX",[37,142976,165],{"class":50},[37,142978,135],{"class":61},[37,142980,142981],{"class":50},"); }\n",[37,142983,142984,142987,142989,142991,142993,142995,142997,142999,143001],{"class":39,"line":113},[37,142985,142986],{"class":2320},"  100%",[37,142988,80142],{"class":50},[37,142990,48470],{"class":61},[37,142992,51773],{"class":50},[37,142994,142974],{"class":61},[37,142996,165],{"class":50},[37,142998,154],{"class":61},[37,143000,51828],{"class":54},[37,143002,142981],{"class":50},[37,143004,143005],{"class":39,"line":189},[37,143006,1941],{"class":50},[37,143008,143009],{"class":39,"line":195},[37,143010,143011],{"class":43},"\u002F* 调用动画 *\u002F\n",[37,143013,143014,143016],{"class":39,"line":201},[37,143015,51947],{"class":51636},[37,143017,15913],{"class":50},[37,143019,143020,143023,143025,143027,143029,143031,143033,143035,143037,143040,143043],{"class":39,"line":207},[37,143021,143022],{"class":61},"  animation",[37,143024,51773],{"class":50},[37,143026,135523],{"class":61},[37,143028,25460],{"class":61},[37,143030,1205],{"class":54},[37,143032,79015],{"class":61},[37,143034,4443],{"class":61},[37,143036,1205],{"class":54},[37,143038,143039],{"class":61}," infinite",[37,143041,143042],{"class":61}," alternate",[37,143044,1669],{"class":50},[37,143046,143047],{"class":39,"line":213},[37,143048,1941],{"class":50},[14,143050,142940],{},[27,143052,143055],{"className":143053,"code":143054,"language":5536},[5534],"\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",[34,143056,143054],{"__ignoreMap":32},[22339,143058,143060],{"id":143059},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,143062,143063],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1838,143065],{"style":126693,"src":143066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[27,143068,143069],{"className":126837,"code":142943,"language":126839,"meta":32,"style":32},[34,143070,143071,143075,143083,143101,143121,143125,143129,143135,143159],{"__ignoreMap":32},[37,143072,143073],{"class":39,"line":40},[37,143074,142950],{"class":43},[37,143076,143077,143079,143081],{"class":39,"line":47},[37,143078,142955],{"class":54},[37,143080,142958],{"class":159},[37,143082,15913],{"class":50},[37,143084,143085,143087,143089,143091,143093,143095,143097,143099],{"class":39,"line":104},[37,143086,142965],{"class":2320},[37,143088,80142],{"class":50},[37,143090,48470],{"class":61},[37,143092,51773],{"class":50},[37,143094,142974],{"class":61},[37,143096,165],{"class":50},[37,143098,135],{"class":61},[37,143100,142981],{"class":50},[37,143102,143103,143105,143107,143109,143111,143113,143115,143117,143119],{"class":39,"line":113},[37,143104,142986],{"class":2320},[37,143106,80142],{"class":50},[37,143108,48470],{"class":61},[37,143110,51773],{"class":50},[37,143112,142974],{"class":61},[37,143114,165],{"class":50},[37,143116,154],{"class":61},[37,143118,51828],{"class":54},[37,143120,142981],{"class":50},[37,143122,143123],{"class":39,"line":189},[37,143124,1941],{"class":50},[37,143126,143127],{"class":39,"line":195},[37,143128,143011],{"class":43},[37,143130,143131,143133],{"class":39,"line":201},[37,143132,51947],{"class":51636},[37,143134,15913],{"class":50},[37,143136,143137,143139,143141,143143,143145,143147,143149,143151,143153,143155,143157],{"class":39,"line":207},[37,143138,143022],{"class":61},[37,143140,51773],{"class":50},[37,143142,135523],{"class":61},[37,143144,25460],{"class":61},[37,143146,1205],{"class":54},[37,143148,79015],{"class":61},[37,143150,4443],{"class":61},[37,143152,1205],{"class":54},[37,143154,143039],{"class":61},[37,143156,143042],{"class":61},[37,143158,1669],{"class":50},[37,143160,143161],{"class":39,"line":213},[37,143162,1941],{"class":50},[14,143164,143165],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[498,143167,143169],{"id":143168},"_1823-知识点回顾","18.2.3 知识点回顾",[27,143171,143172],{"className":126837,"code":129006,"language":126839,"meta":32,"style":32},[34,143173,143174,143180,143190],{"__ignoreMap":32},[37,143175,143176,143178],{"class":39,"line":40},[37,143177,51947],{"class":51636},[37,143179,15913],{"class":50},[37,143181,143182,143184,143186,143188],{"class":39,"line":47},[37,143183,129019],{"class":61},[37,143185,51773],{"class":50},[37,143187,62072],{"class":61},[37,143189,1669],{"class":50},[37,143191,143192],{"class":39,"line":104},[37,143193,1941],{"class":50},[469,143195,143197],{"id":143196},"_183-3d-转换","18.3 3D 转换",[14,143199,143200],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[498,143202,143204],{"id":143203},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1838,143206],{"style":126693,"src":143207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[498,143209,143211],{"id":143210},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1838,143213],{"style":126693,"src":143214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,143216,143217],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,143219,143220],{},"translate3d的效果需要搭配透视perspective来使用",[1838,143222],{"style":126693,"src":143223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[498,143225,143227],{"id":143226},"_1833-透视-perspective","18.3.3 透视 perspective",[1838,143229],{"style":126693,"src":143230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,143232,143233],{},"透视写在父盒子上，单位为像素",[498,143235,143237],{"id":143236},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22339,143239,143241],{"id":143240},"_18341-分开解释","18.3.4.1 分开解释",[1838,143243],{"style":126693,"src":143244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1838,143246],{"style":126693,"src":143247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1838,143249],{"style":126693,"src":143250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143252,143253],{},"总结来说就是左手原则",[22339,143255,143257],{"id":143256},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1838,143259],{"style":126693,"src":143260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[498,143262,143264],{"id":143263},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1838,143266],{"style":126693,"src":143267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1838,143269],{"style":126693,"src":143270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[27,143272,143274],{"className":126837,"code":143273,"language":126839,"meta":32,"style":32},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[34,143275,143276,143282,143295,143312],{"__ignoreMap":32},[37,143277,143278,143280],{"class":39,"line":40},[37,143279,51947],{"class":51636},[37,143281,15913],{"class":50},[37,143283,143284,143287,143289,143291,143293],{"class":39,"line":47},[37,143285,143286],{"class":61},"  perspective",[37,143288,51773],{"class":50},[37,143290,65410],{"class":61},[37,143292,51828],{"class":54},[37,143294,1669],{"class":50},[37,143296,143297,143299,143301,143304,143306,143308,143310],{"class":39,"line":104},[37,143298,136821],{"class":61},[37,143300,51773],{"class":50},[37,143302,143303],{"class":61},"rotateX",[37,143305,165],{"class":50},[37,143307,1040],{"class":61},[37,143309,142664],{"class":54},[37,143311,3069],{"class":50},[37,143313,143314],{"class":39,"line":113},[37,143315,1941],{"class":50},[498,143317,143319],{"id":143318},"_1836-案例","18.3.6 案例",[22339,143321,143323],{"id":143322},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1838,143325],{"style":126693,"src":143326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1838,143328],{"style":126693,"src":143329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1838,143331],{"style":126693,"src":143332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[27,143334,143336],{"className":126837,"code":143335,"language":126839,"meta":32,"style":32},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[34,143337,143338,143343,143349,143361],{"__ignoreMap":32},[37,143339,143340],{"class":39,"line":40},[37,143341,143342],{"class":43},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[37,143344,143345,143347],{"class":39,"line":47},[37,143346,133834],{"class":2320},[37,143348,15913],{"class":50},[37,143350,143351,143353,143355,143357,143359],{"class":39,"line":104},[37,143352,143286],{"class":61},[37,143354,51773],{"class":50},[37,143356,65410],{"class":61},[37,143358,51828],{"class":54},[37,143360,1669],{"class":50},[37,143362,143363],{"class":39,"line":113},[37,143364,1941],{"class":50},[22339,143366,143368],{"id":143367},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1838,143370],{"style":126693,"src":143371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[27,143373,143374],{"className":127584,"code":130941,"language":127586,"meta":32,"style":32},[34,143375,143376,143380,143394,143398],{"__ignoreMap":32},[37,143377,143378],{"class":39,"line":40},[37,143379,130948],{"class":43},[37,143381,143382,143384,143386,143388,143390,143392],{"class":39,"line":47},[37,143383,1418],{"class":50},[37,143385,51947],{"class":51636},[37,143387,53822],{"class":2320},[37,143389,55],{"class":50},[37,143391,130961],{"class":185},[37,143393,51643],{"class":50},[37,143395,143396],{"class":39,"line":104},[37,143397,130968],{"class":50},[37,143399,143400,143402,143404],{"class":39,"line":113},[37,143401,52121],{"class":50},[37,143403,51947],{"class":51636},[37,143405,51643],{"class":50},[22339,143407,143409],{"id":143408},"_18363-旋转木马","18.3.6.3 旋转木马",[1838,143411],{"style":126693,"src":143412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[27,143414,143415],{"className":126837,"code":142640,"language":126839,"meta":32,"style":32},[34,143416,143417,143423,143439],{"__ignoreMap":32},[37,143418,143419,143421],{"class":39,"line":40},[37,143420,51947],{"class":51636},[37,143422,15913],{"class":50},[37,143424,143425,143427,143429,143431,143433,143435,143437],{"class":39,"line":47},[37,143426,136821],{"class":61},[37,143428,51773],{"class":50},[37,143430,142657],{"class":61},[37,143432,165],{"class":50},[37,143434,1040],{"class":61},[37,143436,142664],{"class":54},[37,143438,3069],{"class":50},[37,143440,143441],{"class":39,"line":104},[37,143442,1941],{"class":50},[446,143444,143445],{},"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":32,"searchDepth":47,"depth":47,"links":143447},[143448,143455],{"id":142543,"depth":47,"text":142544,"children":143449},[143450,143451,143452,143453,143454],{"id":142567,"depth":104,"text":142568},{"id":142622,"depth":104,"text":142623},{"id":142747,"depth":104,"text":142748},{"id":142850,"depth":104,"text":142851},{"id":143168,"depth":104,"text":143169},{"id":143196,"depth":47,"text":143197,"children":143456},[143457,143458,143459,143460,143461,143462],{"id":143203,"depth":104,"text":143204},{"id":143210,"depth":104,"text":143211},{"id":143226,"depth":104,"text":143227},{"id":143236,"depth":104,"text":143237},{"id":143263,"depth":104,"text":143264},{"id":143318,"depth":104,"text":143319},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142535,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143469,"title":143470,"body":143471,"description":451,"extension":452,"meta":143674,"navigation":454,"path":143675,"seo":143676,"stem":143677,"__hash__":143678},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143472,"toc":143663},[143473,143476,143480,143483,143486,143490,143493,143496,143499,143503,143506,143510,143513,143517,143520,143524,143538,143542,143567,143570,143573,143590,143594,143598,143601,143604,143608,143611,143614,143632,143636,143639,143653,143657,143660],[10,143474,143470],{"id":143475},"_19-移动端基础-前缀现状与视口",[469,143477,143479],{"id":143478},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1838,143481],{"style":126693,"src":143482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143484,143485],{},"意思就是加个前缀，增加兼容性",[469,143487,143489],{"id":143488},"_192-移动端现状认识","19.2 移动端现状认识",[1838,143491],{"style":126693,"src":143492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143494,143495],{},"调试方法：",[1838,143497],{"style":126693,"src":143498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[469,143500,143502],{"id":143501},"_193-视口","19.3 视口",[14,143504,143505],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[498,143507,143509],{"id":143508},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1838,143511],{"style":126693,"src":143512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[498,143514,143516],{"id":143515},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1838,143518],{"style":126693,"src":143519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[498,143521,143523],{"id":143522},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1515,143525,143526,143529,143532,143535],{},[484,143527,143528],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[484,143530,143531],{},"理想视口，对设备来讲，是最理想的视口尺寸",[484,143533,143534],{},"需要手动添写meta视口标签通知浏览器操作",[484,143536,143537],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[498,143539,143541],{"id":143540},"_1934-meta视口标签","19.3.4 meta视口标签",[27,143543,143545],{"className":127584,"code":143544,"language":127586,"meta":32,"style":32},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[34,143546,143547],{"__ignoreMap":32},[37,143548,143549,143551,143553,143555,143557,143559,143561,143563,143565],{"class":39,"line":40},[37,143550,1418],{"class":50},[37,143552,51680],{"class":51636},[37,143554,15261],{"class":2320},[37,143556,55],{"class":50},[37,143558,51727],{"class":185},[37,143560,51707],{"class":2320},[37,143562,55],{"class":50},[37,143564,51734],{"class":185},[37,143566,51643],{"class":50},[1838,143568],{"style":126693,"src":143569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143571,143572],{},"标准视口设置：",[481,143574,143575,143578,143581,143584,143587],{},[484,143576,143577],{},"视口宽度和设备保持一致",[484,143579,143580],{},"视口的默认缩放比例1.0",[484,143582,143583],{},"不允许用户自行缩放",[484,143585,143586],{},"最大允许的缩放比例1.0",[484,143588,143589],{},"最小允许的缩放比例1.0",[498,143591,143593],{"id":143592},"_1935-二倍图","19.3.5 二倍图",[22339,143595,143597],{"id":143596},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1838,143599],{"style":126693,"src":143600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1838,143602],{"style":126693,"src":143603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22339,143605,143607],{"id":143606},"_19352-多倍图","19.3.5.2 多倍图",[1838,143609],{"style":126693,"src":143610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143612,143613],{},"二倍图法，代码如下：",[27,143615,143617],{"className":126837,"code":143616,"language":126839,"meta":32,"style":32},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[34,143618,143619,143624],{"__ignoreMap":32},[37,143620,143621],{"class":39,"line":40},[37,143622,143623],{"class":43},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[37,143625,143626,143629],{"class":39,"line":47},[37,143627,143628],{"class":51636},"background-size",[37,143630,143631],{"class":50},": 50% 50%;\n",[22339,143633,143635],{"id":143634},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1838,143637],{"style":126693,"src":143638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[481,143640,143641,143644,143647,143650],{},[484,143642,143643],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[484,143645,143646],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[484,143648,143649],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[484,143651,143652],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22339,143654,143656],{"id":143655},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1838,143658],{"style":126693,"src":143659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[446,143661,143662],{},"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":32,"searchDepth":47,"depth":47,"links":143664},[143665,143666,143667],{"id":143478,"depth":47,"text":143479},{"id":143488,"depth":47,"text":143489},{"id":143501,"depth":47,"text":143502,"children":143668},[143669,143670,143671,143672,143673],{"id":143508,"depth":104,"text":143509},{"id":143515,"depth":104,"text":143516},{"id":143522,"depth":104,"text":143523},{"id":143540,"depth":104,"text":143541},{"id":143592,"depth":104,"text":143593},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143470,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143680,"title":143681,"body":143682,"description":451,"extension":452,"meta":144559,"navigation":454,"path":144560,"seo":144561,"stem":144562,"__hash__":144563},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143683,"toc":144543},[143684,143687,143691,143698,143701,143708,143711,143716,143719,143723,143727,143734,143737,143740,143744,143747,143750,143753,143756,143759,143763,143766,143770,143772,143775,143778,143781,143784,143786,143789,143791,143821,143823,143853,143857,143860,143864,143867,143884,143887,143890,143966,143968,143971,143974,143977,143980,143982,143985,143988,143992,144014,144017,144020,144024,144027,144033,144036,144040,144043,144046,144050,144053,144056,144059,144063,144066,144069,144072,144075,144079,144082,144086,144093,144096,144099,144102,144105,144115,144118,144121,144128,144131,144135,144138,144141,144145,144148,144151,144154,144199,144202,144205,144208,144210,144339,144341,144379,144382,144385,144387,144505,144507,144541],[10,143685,143681],{"id":143686},"_20-移动端布局实战上篇",[469,143688,143690],{"id":143689},"_201-移动端主流方案","20.1 移动端主流方案",[481,143692,143693],{},[484,143694,143695],{},[673,143696,143697],{},"单独移动端页面（主流）",[1838,143699],{"style":126693,"src":143700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[481,143702,143703],{"start":47},[484,143704,143705],{},[673,143706,143707],{},"响应式兼容PC移动端",[1838,143709],{"style":126693,"src":143710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[481,143712,143713],{"start":104},[484,143714,143715],{},"两种页面选型布局方式",[1838,143717],{"style":126693,"src":143718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[469,143720,143722],{"id":143721},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[498,143724,143726],{"id":143725},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143728,143729,143730],{},"官网地址： ",[51,143731,143732],{"href":143732,"rel":143733},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24206],[1838,143735],{"style":126693,"src":143736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1838,143738],{"style":126693,"src":143739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[498,143741,143743],{"id":143742},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1838,143745],{"style":126693,"src":143746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1838,143748],{"style":126693,"src":143749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143751,143752],{},"去除高亮：",[14,143754,143755],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143757,143758],{},"-webkit- tap-highlight-color: transparent;",[469,143760,143762],{"id":143761},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1838,143764],{"style":126693,"src":143765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[469,143767,143769],{"id":143768},"_204-流式布局案例","20.4 流式布局案例",[14,143771,558],{},[14,143773,143774],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143776,143777],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143779,143780],{},"图片格式：",[1838,143782],{"style":126693,"src":143783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143785,135880],{},[1838,143787],{"style":126693,"src":143788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143790,140207],{},[27,143792,143793],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,143794,143795],{"__ignoreMap":32},[37,143796,143797,143799,143801,143803,143805,143807,143809,143811,143813,143815,143817,143819],{"class":39,"line":40},[37,143798,1418],{"class":50},[37,143800,1838],{"class":51636},[37,143802,55575],{"class":2320},[37,143804,55],{"class":50},[37,143806,134354],{"class":185},[37,143808,55583],{"class":2320},[37,143810,55],{"class":50},[37,143812,134361],{"class":185},[37,143814,134364],{"class":2320},[37,143816,55],{"class":50},[37,143818,134369],{"class":185},[37,143820,51643],{"class":50},[14,143822,140296],{},[27,143824,143825],{"className":127584,"code":134339,"language":127586,"meta":32,"style":32},[34,143826,143827],{"__ignoreMap":32},[37,143828,143829,143831,143833,143835,143837,143839,143841,143843,143845,143847,143849,143851],{"class":39,"line":40},[37,143830,1418],{"class":50},[37,143832,1838],{"class":51636},[37,143834,55575],{"class":2320},[37,143836,55],{"class":50},[37,143838,134354],{"class":185},[37,143840,55583],{"class":2320},[37,143842,55],{"class":50},[37,143844,134361],{"class":185},[37,143846,134364],{"class":2320},[37,143848,55],{"class":50},[37,143850,134369],{"class":185},[37,143852,51643],{"class":50},[469,143854,143856],{"id":143855},"_205-flex布局","20.5 flex布局",[1838,143858],{"style":126693,"src":143859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[498,143861,143863],{"id":143862},"_2051-布局原理","20.5.1 布局原理",[14,143865,143866],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1515,143868,143869,143872,143875,143878,143881],{},[484,143870,143871],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[484,143873,143874],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[484,143876,143877],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[484,143879,143880],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[484,143882,143883],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143885,143886],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143888,143889],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[27,143891,143893],{"className":126837,"code":143892,"language":126839,"meta":32,"style":32},"\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",[34,143894,143895,143900,143907,143917,143929,143940,143951,143962],{"__ignoreMap":32},[37,143896,143897],{"class":39,"line":40},[37,143898,143899],{"class":43},"\u002F* Flex 弹性布局 *\u002F\n",[37,143901,143902,143905],{"class":39,"line":47},[37,143903,143904],{"class":2320},".container",[37,143906,15913],{"class":50},[37,143908,143909,143911,143913,143915],{"class":39,"line":104},[37,143910,128453],{"class":61},[37,143912,51773],{"class":50},[37,143914,51813],{"class":61},[37,143916,1669],{"class":50},[37,143918,143919,143922,143924,143927],{"class":39,"line":113},[37,143920,143921],{"class":61},"  flex-direction",[37,143923,51773],{"class":50},[37,143925,143926],{"class":61},"row",[37,143928,1669],{"class":50},[37,143930,143931,143934,143936,143938],{"class":39,"line":189},[37,143932,143933],{"class":61},"  justify-content",[37,143935,51773],{"class":50},[37,143937,52004],{"class":61},[37,143939,1669],{"class":50},[37,143941,143942,143945,143947,143949],{"class":39,"line":195},[37,143943,143944],{"class":61},"  align-items",[37,143946,51773],{"class":50},[37,143948,51928],{"class":61},[37,143950,1669],{"class":50},[37,143952,143953,143956,143958,143960],{"class":39,"line":201},[37,143954,143955],{"class":61},"  flex-wrap",[37,143957,51773],{"class":50},[37,143959,78945],{"class":61},[37,143961,1669],{"class":50},[37,143963,143964],{"class":39,"line":207},[37,143965,1941],{"class":50},[14,143967,70789],{},[14,143969,143970],{},".form-item .male-label {",[14,143972,143973],{},"   margin-right: 20px;",[14,143975,143976],{},"   display: inline-flex;",[14,143978,143979],{},"   align-items: center;",[14,143981,1454],{},[1838,143983],{"style":126693,"src":143984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1838,143986],{"style":126693,"src":143987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[498,143989,143991],{"id":143990},"_2052-常见父项属性","20.5.2 常见父项属性",[481,143993,143994,143997,144000,144003,144006,144009,144012],{},[484,143995,143996],{},"flex-direction：设置主轴的方向",[484,143998,143999],{},"justify-content：设置主轴上的子元素排列方式",[484,144001,144002],{},"flex-wrap：设置子元素是否换行",[484,144004,144005],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[484,144007,144008],{},"align-items：设置侧轴上的子元素排列方式（单行）",[484,144010,144011],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[484,144013,143996],{},[1838,144015],{"style":126693,"src":144016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1838,144018],{"style":126693,"src":144019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[481,144021,144022],{"start":47},[484,144023,143999],{},[1838,144025],{"style":126693,"src":144026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,144028,144029,144032],{},[34,144030,144031],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,144034,144035],{},"跟着主轴走",[481,144037,144038],{"start":104},[484,144039,144002],{},[1838,144041],{"style":126693,"src":144042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,144044,144045],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[481,144047,144048],{"start":113},[484,144049,144005],{},[1838,144051],{"style":126693,"src":144052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,144054,144055],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,144057,144058],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[481,144060,144061],{"start":189},[484,144062,144008],{},[1838,144064],{"style":126693,"src":144065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,144067,144068],{},"align-items与align-content之间的区别：",[14,144070,144071],{},"单找items，多找content",[1838,144073],{"style":126693,"src":144074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[481,144076,144077],{"start":195},[484,144078,144011],{},[1838,144080],{"style":126693,"src":144081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[498,144083,144085],{"id":144084},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[481,144087,144088],{},[484,144089,144090],{},[673,144091,144092],{},"flex 属性",[14,144094,144095],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1838,144097],{"style":126693,"src":144098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,144100,144101],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,144103,144104],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[481,144106,144107],{"start":47},[484,144108,144109,14136,144112],{},[673,144110,144111],{},"align-self",[673,144113,144114],{},"控制子项自己在侧轴上的排列方式",[1838,144116],{"style":126693,"src":144117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,144119,144120],{},"单个子盒子在父盒子侧轴上的排列方式",[481,144122,144123],{"start":104},[484,144124,144125,144127],{},[673,144126,95582],{}," 属性定义项目的排列顺序",[1838,144129],{"style":126693,"src":144130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[498,144132,144134],{"id":144133},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1838,144136],{"style":126693,"src":144137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,144139,144140],{},"必须要添加浏览器的私有前缀",[498,144142,144144],{"id":144143},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,144146,144147],{},"学到最重要的知识：",[14,144149,144150],{},"flex处理这样的布局思路",[1838,144152],{"style":126693,"src":144153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[27,144155,144157],{"className":126837,"code":144156,"language":126839,"meta":32,"style":32},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[34,144158,144159,144165,144175,144185,144195],{"__ignoreMap":32},[37,144160,144161,144163],{"class":39,"line":40},[37,144162,143904],{"class":2320},[37,144164,15913],{"class":50},[37,144166,144167,144169,144171,144173],{"class":39,"line":47},[37,144168,128453],{"class":61},[37,144170,51773],{"class":50},[37,144172,51813],{"class":61},[37,144174,1669],{"class":50},[37,144176,144177,144179,144181,144183],{"class":39,"line":104},[37,144178,143933],{"class":61},[37,144180,51773],{"class":50},[37,144182,51928],{"class":61},[37,144184,1669],{"class":50},[37,144186,144187,144189,144191,144193],{"class":39,"line":113},[37,144188,143944],{"class":61},[37,144190,51773],{"class":50},[37,144192,51928],{"class":61},[37,144194,1669],{"class":50},[37,144196,144197],{"class":39,"line":189},[37,144198,1941],{"class":50},[14,144200,144201],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,144203,144204],{},"使用属性选择器",[1838,144206],{"style":126693,"src":144207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,144209,69225],{},[27,144211,144213],{"className":127584,"code":144212,"language":127586,"meta":32,"style":32},"\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",[34,144214,144215,144220,144234,144239,144259,144264,144283,144288,144307,144312,144331],{"__ignoreMap":32},[37,144216,144217],{"class":39,"line":40},[37,144218,144219],{"class":43},"\u003C!-- 携程网移动端案例结构 -->\n",[37,144221,144222,144224,144226,144228,144230,144232],{"class":39,"line":47},[37,144223,1418],{"class":50},[37,144225,51947],{"class":51636},[37,144227,53822],{"class":2320},[37,144229,55],{"class":50},[37,144231,92658],{"class":185},[37,144233,51643],{"class":50},[37,144235,144236],{"class":39,"line":104},[37,144237,144238],{"class":43},"  \u003C!-- 搜索栏 -->\n",[37,144240,144241,144243,144245,144247,144249,144252,144255,144257],{"class":39,"line":113},[37,144242,52480],{"class":50},[37,144244,51947],{"class":51636},[37,144246,53822],{"class":2320},[37,144248,55],{"class":50},[37,144250,144251],{"class":185},"\"search-index\"",[37,144253,144254],{"class":50},">...\u003C\u002F",[37,144256,51947],{"class":51636},[37,144258,51643],{"class":50},[37,144260,144261],{"class":39,"line":189},[37,144262,144263],{"class":43},"  \u003C!-- 焦点图 -->\n",[37,144265,144266,144268,144270,144272,144274,144277,144279,144281],{"class":39,"line":195},[37,144267,52480],{"class":50},[37,144269,51947],{"class":51636},[37,144271,53822],{"class":2320},[37,144273,55],{"class":50},[37,144275,144276],{"class":185},"\"focus\"",[37,144278,144254],{"class":50},[37,144280,51947],{"class":51636},[37,144282,51643],{"class":50},[37,144284,144285],{"class":39,"line":201},[37,144286,144287],{"class":43},"  \u003C!-- 主导航 -->\n",[37,144289,144290,144292,144294,144296,144298,144301,144303,144305],{"class":39,"line":207},[37,144291,52480],{"class":50},[37,144293,51947],{"class":51636},[37,144295,53822],{"class":2320},[37,144297,55],{"class":50},[37,144299,144300],{"class":185},"\"local-nav\"",[37,144302,144254],{"class":50},[37,144304,51947],{"class":51636},[37,144306,51643],{"class":50},[37,144308,144309],{"class":39,"line":213},[37,144310,144311],{"class":43},"  \u003C!-- 子导航 -->\n",[37,144313,144314,144316,144318,144320,144322,144325,144327,144329],{"class":39,"line":218},[37,144315,52480],{"class":50},[37,144317,51947],{"class":51636},[37,144319,53822],{"class":2320},[37,144321,55],{"class":50},[37,144323,144324],{"class":185},"\"nav-common\"",[37,144326,144254],{"class":50},[37,144328,51947],{"class":51636},[37,144330,51643],{"class":50},[37,144332,144333,144335,144337],{"class":39,"line":227},[37,144334,52121],{"class":50},[37,144336,51947],{"class":51636},[37,144338,51643],{"class":50},[14,144340,70789],{},[27,144342,144343],{"className":126837,"code":137289,"language":126839,"meta":32,"style":32},[34,144344,144345,144359,144375],{"__ignoreMap":32},[37,144346,144347,144349,144351,144353,144355,144357],{"class":39,"line":40},[37,144348,54157],{"class":51636},[37,144350,1399],{"class":50},[37,144352,103392],{"class":2320},[37,144354,55],{"class":54},[37,144356,63035],{"class":185},[37,144358,137306],{"class":50},[37,144360,144361,144363,144365,144367,144369,144371,144373],{"class":39,"line":47},[37,144362,71232],{"class":61},[37,144364,51773],{"class":50},[37,144366,332],{"class":61},[37,144368,51828],{"class":54},[37,144370,51857],{"class":61},[37,144372,130417],{"class":61},[37,144374,1669],{"class":50},[37,144376,144377],{"class":39,"line":104},[37,144378,1941],{"class":50},[14,144380,144381],{},"总代码和效果展示：",[1838,144383],{"style":126693,"src":144384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144386,69225],{},[27,144388,144389],{"className":127584,"code":144212,"language":127586,"meta":32,"style":32},[34,144390,144391,144395,144409,144413,144431,144435,144453,144457,144475,144479,144497],{"__ignoreMap":32},[37,144392,144393],{"class":39,"line":40},[37,144394,144219],{"class":43},[37,144396,144397,144399,144401,144403,144405,144407],{"class":39,"line":47},[37,144398,1418],{"class":50},[37,144400,51947],{"class":51636},[37,144402,53822],{"class":2320},[37,144404,55],{"class":50},[37,144406,92658],{"class":185},[37,144408,51643],{"class":50},[37,144410,144411],{"class":39,"line":104},[37,144412,144238],{"class":43},[37,144414,144415,144417,144419,144421,144423,144425,144427,144429],{"class":39,"line":113},[37,144416,52480],{"class":50},[37,144418,51947],{"class":51636},[37,144420,53822],{"class":2320},[37,144422,55],{"class":50},[37,144424,144251],{"class":185},[37,144426,144254],{"class":50},[37,144428,51947],{"class":51636},[37,144430,51643],{"class":50},[37,144432,144433],{"class":39,"line":189},[37,144434,144263],{"class":43},[37,144436,144437,144439,144441,144443,144445,144447,144449,144451],{"class":39,"line":195},[37,144438,52480],{"class":50},[37,144440,51947],{"class":51636},[37,144442,53822],{"class":2320},[37,144444,55],{"class":50},[37,144446,144276],{"class":185},[37,144448,144254],{"class":50},[37,144450,51947],{"class":51636},[37,144452,51643],{"class":50},[37,144454,144455],{"class":39,"line":201},[37,144456,144287],{"class":43},[37,144458,144459,144461,144463,144465,144467,144469,144471,144473],{"class":39,"line":207},[37,144460,52480],{"class":50},[37,144462,51947],{"class":51636},[37,144464,53822],{"class":2320},[37,144466,55],{"class":50},[37,144468,144300],{"class":185},[37,144470,144254],{"class":50},[37,144472,51947],{"class":51636},[37,144474,51643],{"class":50},[37,144476,144477],{"class":39,"line":213},[37,144478,144311],{"class":43},[37,144480,144481,144483,144485,144487,144489,144491,144493,144495],{"class":39,"line":218},[37,144482,52480],{"class":50},[37,144484,51947],{"class":51636},[37,144486,53822],{"class":2320},[37,144488,55],{"class":50},[37,144490,144324],{"class":185},[37,144492,144254],{"class":50},[37,144494,51947],{"class":51636},[37,144496,51643],{"class":50},[37,144498,144499,144501,144503],{"class":39,"line":227},[37,144500,52121],{"class":50},[37,144502,51947],{"class":51636},[37,144504,51643],{"class":50},[14,144506,70789],{},[27,144508,144509],{"className":127584,"code":130941,"language":127586,"meta":32,"style":32},[34,144510,144511,144515,144529,144533],{"__ignoreMap":32},[37,144512,144513],{"class":39,"line":40},[37,144514,130948],{"class":43},[37,144516,144517,144519,144521,144523,144525,144527],{"class":39,"line":47},[37,144518,1418],{"class":50},[37,144520,51947],{"class":51636},[37,144522,53822],{"class":2320},[37,144524,55],{"class":50},[37,144526,130961],{"class":185},[37,144528,51643],{"class":50},[37,144530,144531],{"class":39,"line":104},[37,144532,130968],{"class":50},[37,144534,144535,144537,144539],{"class":39,"line":113},[37,144536,52121],{"class":50},[37,144538,51947],{"class":51636},[37,144540,51643],{"class":50},[446,144542,138238],{},{"title":32,"searchDepth":47,"depth":47,"links":144544},[144545,144546,144550,144551,144552],{"id":143689,"depth":47,"text":143690},{"id":143721,"depth":47,"text":143722,"children":144547},[144548,144549],{"id":143725,"depth":104,"text":143726},{"id":143742,"depth":104,"text":143743},{"id":143761,"depth":47,"text":143762},{"id":143768,"depth":47,"text":143769},{"id":143855,"depth":47,"text":143856,"children":144553},[144554,144555,144556,144557,144558],{"id":143862,"depth":104,"text":143863},{"id":143990,"depth":104,"text":143991},{"id":144084,"depth":104,"text":144085},{"id":144133,"depth":104,"text":144134},{"id":144143,"depth":104,"text":144144},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143681,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144565,"title":144566,"body":144567,"description":451,"extension":452,"meta":145794,"navigation":454,"path":145795,"seo":145796,"stem":145797,"__hash__":145798},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144568,"toc":145772},[144569,144572,144576,144580,144583,144586,144590,144595,144598,144601,144604,144607,144610,144667,144670,144675,144678,144681,144685,144696,144700,144703,144706,144713,144718,144722,144725,144731,144734,144738,144741,144748,144751,144754,144761,144764,144771,144774,144777,144784,144787,144790,144792,144809,144813,144816,144819,144822,144826,144829,144832,144835,144838,144841,144844,144846,144849,144852,144914,144917,145027,145034,145040,145043,145046,145050,145053,145057,145062,145065,145072,145075,145081,145086,145089,145092,145095,145098,145101,145104,145107,145110,145166,145168,145194,145198,145201,145204,145207,145215,145218,145221,145225,145281,145284,145288,145294,145305,145308,145313,145316,145319,145325,145328,145331,145334,145337,145340,145343,145346,145349,145374,145380,145383,145386,145389,145392,145395,145398,145403,145406,145409,145412,145420,145423,145430,145433,145436,145438,145462,145464,145467,145470,145473,145476,145479,145482,145485,145519,145522,145525,145559,145566,145569,145572,145575,145578,145581,145584,145591,145594,145597,145600,145603,145610,145613,145616,145623,145626,145629,145633,145636,145639,145642,145645,145648,145651,145654,145657,145659,145683,145685,145709,145713,145724,145727,145730,145733,145736,145739,145742,145745,145748,145751,145754,145757,145760,145763,145766,145769],[10,144570,144566],{"id":144571},"_21-移动端布局实战下篇",[469,144573,144575],{"id":144574},"_211-rem适配布局","21.1 rem适配布局",[498,144577,144579],{"id":144578},"_2111-rem单位","21.1.1 rem单位",[1838,144581],{"style":126693,"src":144582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144584,144585],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[498,144587,144589],{"id":144588},"_2112-媒体查询","21.1.2 媒体查询",[481,144591,144592],{},[484,144593,144594],{},"参数介绍",[1838,144596],{"style":126693,"src":144597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1838,144599],{"style":126693,"src":144600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1838,144602],{"style":126693,"src":144603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1838,144605],{"style":126693,"src":144606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1838,144608],{"style":126693,"src":144609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[27,144611,144613],{"className":126837,"code":144612,"language":126839,"meta":32,"style":32},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[34,144614,144615,144620,144639,144646,144659,144663],{"__ignoreMap":32},[37,144616,144617],{"class":39,"line":40},[37,144618,144619],{"class":43},"\u002F* 媒体查询 *\u002F\n",[37,144621,144622,144625,144627,144630,144632,144635,144637],{"class":39,"line":47},[37,144623,144624],{"class":54},"@media",[37,144626,2027],{"class":50},[37,144628,144629],{"class":61},"max-width",[37,144631,51773],{"class":50},[37,144633,144634],{"class":61},"768",[37,144636,51828],{"class":54},[37,144638,12783],{"class":50},[37,144640,144641,144644],{"class":39,"line":104},[37,144642,144643],{"class":2320},"  .container",[37,144645,15913],{"class":50},[37,144647,144648,144651,144653,144655,144657],{"class":39,"line":113},[37,144649,144650],{"class":61},"    width",[37,144652,51773],{"class":50},[37,144654,154],{"class":61},[37,144656,845],{"class":54},[37,144658,1669],{"class":50},[37,144660,144661],{"class":39,"line":189},[37,144662,127633],{"class":50},[37,144664,144665],{"class":39,"line":195},[37,144666,1941],{"class":50},[14,144668,144669],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[481,144671,144672],{"start":47},[484,144673,144674],{},"引入资源",[1838,144676],{"style":126693,"src":144677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144679,144680],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[498,144682,144684],{"id":144683},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1515,144686,144687,144690,144693],{},[484,144688,144689],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[484,144691,144692],{},"媒体查询可以根据不同设备宽度来修改样式",[484,144694,144695],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[469,144697,144699],{"id":144698},"_212-less基础","21.2 Less基础",[14,144701,144702],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144704,144705],{},"Less可以解决该问题，它是css的扩展语言",[14,144707,144708,144709],{},"Less中文网址： ",[51,144710,144711],{"href":144711,"rel":144712},"http:\u002F\u002Flesscss.cn\u002F",[24206],[14,144714,144715],{},[673,144716,144717],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[498,144719,144721],{"id":144720},"_2121-less安装","21.2.1 less安装",[14,144723,144724],{},"如果使用vscode，则无需进行下方安装步骤",[14,144726,144727],{},[51,144728,144729],{"href":144729,"rel":144730},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24206],[1838,144732],{"style":126693,"src":144733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[498,144735,144737],{"id":144736},"_2122-less使用","21.2.2 less使用",[14,144739,144740],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[481,144742,144743],{},[484,144744,144745],{},[673,144746,144747],{},"Less 变量",[1838,144749],{"style":126693,"src":144750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1838,144752],{"style":126693,"src":144753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[481,144755,144756],{"start":47},[484,144757,144758],{},[673,144759,144760],{},"Less 编译",[1838,144762],{"style":126693,"src":144763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[481,144765,144766],{"start":104},[484,144767,144768],{},[673,144769,144770],{},"Less 嵌套",[1838,144772],{"style":126693,"src":144773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1838,144775],{"style":126693,"src":144776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[481,144778,144779],{"start":113},[484,144780,144781],{},[673,144782,144783],{},"Less 运算",[1838,144785],{"style":126693,"src":144786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144788,144789],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144791,558],{},[1515,144793,144794,144797,144800,144803,144806],{},[484,144795,144796],{},"乘号（*）和除号（\u002F）的写法",[484,144798,144799],{},"运算符中间左右有个空格隔开 1px + 5",[484,144801,144802],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[484,144804,144805],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[484,144807,144808],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[469,144810,144812],{"id":144811},"_213-rem-适配方案","21.3 rem 适配方案",[14,144814,144815],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144817,144818],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1838,144820],{"style":126693,"src":144821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[498,144823,144825],{"id":144824},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144827,144828],{},"rem + 媒体查询 + less 技术",[1838,144830],{"style":126693,"src":144831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144833,144834],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144836,144837],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1838,144839],{"style":126693,"src":144840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144842,144843],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144845,14974],{},[1838,144847],{"style":126693,"src":144848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144850,144851],{},"index.html:",[27,144853,144855],{"className":126837,"code":144854,"language":126839,"meta":32,"style":32},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[34,144856,144857,144862,144868,144884,144888,144894,144910],{"__ignoreMap":32},[37,144858,144859],{"class":39,"line":40},[37,144860,144861],{"class":43},"\u002F* rem 适配方案 *\u002F\n",[37,144863,144864,144866],{"class":39,"line":47},[37,144865,50971],{"class":51636},[37,144867,15913],{"class":50},[37,144869,144870,144872,144874,144877,144879,144881],{"class":39,"line":104},[37,144871,70962],{"class":61},[37,144873,51773],{"class":50},[37,144875,144876],{"class":61},"62.5",[37,144878,845],{"class":54},[37,144880,130700],{"class":50},[37,144882,144883],{"class":43},"\u002F* 1rem = 10px *\u002F\n",[37,144885,144886],{"class":39,"line":113},[37,144887,1941],{"class":50},[37,144889,144890,144892],{"class":39,"line":189},[37,144891,130685],{"class":2320},[37,144893,15913],{"class":50},[37,144895,144896,144898,144900,144902,144905,144907],{"class":39,"line":195},[37,144897,70904],{"class":61},[37,144899,51773],{"class":50},[37,144901,98],{"class":61},[37,144903,144904],{"class":54},"rem",[37,144906,130700],{"class":50},[37,144908,144909],{"class":43},"\u002F* 100px *\u002F\n",[37,144911,144912],{"class":39,"line":201},[37,144913,1941],{"class":50},[14,144915,144916],{},"common.less",[27,144918,144920],{"className":126837,"code":144919,"language":126839,"meta":32,"style":32},"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",[34,144921,144922,144928,144943,144947,144953,144967,144971,144975,144979,144985,144999,145003,145009,145023],{"__ignoreMap":32},[37,144923,144924,144926],{"class":39,"line":40},[37,144925,50971],{"class":51636},[37,144927,15913],{"class":50},[37,144929,144930,144932,144934,144936,144938,144940],{"class":39,"line":47},[37,144931,70962],{"class":61},[37,144933,51773],{"class":50},[37,144935,144876],{"class":61},[37,144937,845],{"class":54},[37,144939,26409],{"class":50},[37,144941,144942],{"class":43},"\u002F* 10px *\u002F\n",[37,144944,144945],{"class":39,"line":104},[37,144946,1941],{"class":50},[37,144948,144949,144951],{"class":39,"line":113},[37,144950,51947],{"class":51636},[37,144952,15913],{"class":50},[37,144954,144955,144957,144959,144961,144963,144965],{"class":39,"line":189},[37,144956,70904],{"class":61},[37,144958,51773],{"class":50},[37,144960,98],{"class":61},[37,144962,144904],{"class":54},[37,144964,26409],{"class":50},[37,144966,144909],{"class":43},[37,144968,144969],{"class":39,"line":195},[37,144970,1941],{"class":50},[37,144972,144973],{"class":39,"line":201},[37,144974,136298],{"class":50},[37,144976,144977],{"class":39,"line":207},[37,144978,144861],{"class":43},[37,144980,144981,144983],{"class":39,"line":213},[37,144982,50971],{"class":51636},[37,144984,15913],{"class":50},[37,144986,144987,144989,144991,144993,144995,144997],{"class":39,"line":218},[37,144988,70962],{"class":61},[37,144990,51773],{"class":50},[37,144992,144876],{"class":61},[37,144994,845],{"class":54},[37,144996,130700],{"class":50},[37,144998,144883],{"class":43},[37,145000,145001],{"class":39,"line":227},[37,145002,1941],{"class":50},[37,145004,145005,145007],{"class":39,"line":232},[37,145006,130685],{"class":2320},[37,145008,15913],{"class":50},[37,145010,145011,145013,145015,145017,145019,145021],{"class":39,"line":238},[37,145012,70904],{"class":61},[37,145014,51773],{"class":50},[37,145016,98],{"class":61},[37,145018,144904],{"class":54},[37,145020,130700],{"class":50},[37,145022,144909],{"class":43},[37,145024,145025],{"class":39,"line":244},[37,145026,1941],{"class":50},[14,145028,145029,145030,145033],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23894,145031,145032],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[27,145035,145038],{"className":145036,"code":145037,"language":5536},[5534],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[34,145039,145037],{"__ignoreMap":32},[14,145041,145042],{},"less保存时会自动变成.css文件",[14,145044,145045],{},"好好搞懂上述代码写法",[498,145047,145049],{"id":145048},"_2132-样式导入样式","21.3.2 样式导入样式",[1838,145051],{"style":126693,"src":145052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[498,145054,145056],{"id":145055},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[481,145058,145059],{},[484,145060,145061],{},"准备工作",[1838,145063],{"style":126693,"src":145064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,145066,145067,145068],{},"github地址：",[51,145069,145070],{"href":145070,"rel":145071},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24206],[14,145073,145074],{},"下载之后，将index.js文件拖到项目中就可以了",[14,145076,145077,145078],{},"js文件引入到index.html中使用的是",[34,145079,145080],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[481,145082,145083],{"start":47},[484,145084,145085],{},"vscode插件",[1838,145087],{"style":126693,"src":145088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,145090,145091],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,145093,145094],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1838,145096],{"style":126693,"src":145097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,145099,145100],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1838,145102],{"style":126693,"src":145103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,145105,145106],{},"修改成75就可以，alt+z为快捷键",[14,145108,145109],{},"index.css：",[27,145111,145112],{"className":126837,"code":144854,"language":126839,"meta":32,"style":32},[34,145113,145114,145118,145124,145138,145142,145148,145162],{"__ignoreMap":32},[37,145115,145116],{"class":39,"line":40},[37,145117,144861],{"class":43},[37,145119,145120,145122],{"class":39,"line":47},[37,145121,50971],{"class":51636},[37,145123,15913],{"class":50},[37,145125,145126,145128,145130,145132,145134,145136],{"class":39,"line":104},[37,145127,70962],{"class":61},[37,145129,51773],{"class":50},[37,145131,144876],{"class":61},[37,145133,845],{"class":54},[37,145135,130700],{"class":50},[37,145137,144883],{"class":43},[37,145139,145140],{"class":39,"line":113},[37,145141,1941],{"class":50},[37,145143,145144,145146],{"class":39,"line":189},[37,145145,130685],{"class":2320},[37,145147,15913],{"class":50},[37,145149,145150,145152,145154,145156,145158,145160],{"class":39,"line":195},[37,145151,70904],{"class":61},[37,145153,51773],{"class":50},[37,145155,98],{"class":61},[37,145157,144904],{"class":54},[37,145159,130700],{"class":50},[37,145161,144909],{"class":43},[37,145163,145164],{"class":39,"line":201},[37,145165,1941],{"class":50},[14,145167,144851],{},[27,145169,145170],{"className":126837,"code":127241,"language":126839,"meta":32,"style":32},[34,145171,145172,145178,145190],{"__ignoreMap":32},[37,145173,145174,145176],{"class":39,"line":40},[37,145175,52136],{"class":51636},[37,145177,15913],{"class":50},[37,145179,145180,145182,145184,145186,145188],{"class":39,"line":47},[37,145181,70962],{"class":61},[37,145183,51773],{"class":50},[37,145185,1111],{"class":61},[37,145187,51828],{"class":54},[37,145189,1669],{"class":50},[37,145191,145192],{"class":39,"line":104},[37,145193,1941],{"class":50},[469,145195,145197],{"id":145196},"_214-响应式开发","21.4 响应式开发",[14,145199,145200],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1838,145202],{"style":126693,"src":145203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,145205,145206],{},"做法：",[1515,145208,145209,145212],{},[484,145210,145211],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[484,145213,145214],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1838,145216],{"style":126693,"src":145217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,145219,145220],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[498,145222,145224],{"id":145223},"_2141-简单代码示范","21.4.1 简单代码示范",[27,145226,145227],{"className":126837,"code":144854,"language":126839,"meta":32,"style":32},[34,145228,145229,145233,145239,145253,145257,145263,145277],{"__ignoreMap":32},[37,145230,145231],{"class":39,"line":40},[37,145232,144861],{"class":43},[37,145234,145235,145237],{"class":39,"line":47},[37,145236,50971],{"class":51636},[37,145238,15913],{"class":50},[37,145240,145241,145243,145245,145247,145249,145251],{"class":39,"line":104},[37,145242,70962],{"class":61},[37,145244,51773],{"class":50},[37,145246,144876],{"class":61},[37,145248,845],{"class":54},[37,145250,130700],{"class":50},[37,145252,144883],{"class":43},[37,145254,145255],{"class":39,"line":113},[37,145256,1941],{"class":50},[37,145258,145259,145261],{"class":39,"line":189},[37,145260,130685],{"class":2320},[37,145262,15913],{"class":50},[37,145264,145265,145267,145269,145271,145273,145275],{"class":39,"line":195},[37,145266,70904],{"class":61},[37,145268,51773],{"class":50},[37,145270,98],{"class":61},[37,145272,144904],{"class":54},[37,145274,130700],{"class":50},[37,145276,144909],{"class":43},[37,145278,145279],{"class":39,"line":201},[37,145280,1941],{"class":50},[14,145282,145283],{},"父盒子一般命名为container",[498,145285,145287],{"id":145286},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145289,145290,145291],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[673,145292,145293],{},"使得 Web 开发更加快捷",[1515,145295,145296],{},[484,145297,145298,145299],{},"官网：",[673,145300,145301],{},[51,145302,145303],{"href":145303,"rel":145304},"http:\u002F\u002Fgetbootstrap.com\u002F",[24206],[14,145306,145307],{},"可以直接去官网拿现成的东西",[481,145309,145310],{},[484,145311,145312],{},"Bootstrap的使用",[14,145314,145315],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145317,145318],{},"Bootstrap 使用四步曲：",[14,145320,145321,145324],{},[673,145322,145323],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1838,145326],{"style":126693,"src":145327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145329,145330],{},"打开Bootstrap官网，然后下载",[1838,145332],{"style":126693,"src":145333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1838,145335],{"style":126693,"src":145336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145338,145339],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145341,145342],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145344,145345],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1838,145347],{"style":126693,"src":145348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[27,145350,145352],{"className":126837,"code":145351,"language":126839,"meta":32,"style":32},".center {\n  color: red;\n}\n",[34,145353,145354,145360,145370],{"__ignoreMap":32},[37,145355,145356,145358],{"class":39,"line":40},[37,145357,127128],{"class":2320},[37,145359,15913],{"class":50},[37,145361,145362,145364,145366,145368],{"class":39,"line":47},[37,145363,71241],{"class":61},[37,145365,51773],{"class":50},[37,145367,57757],{"class":61},[37,145369,1669],{"class":50},[37,145371,145372],{"class":39,"line":104},[37,145373,1941],{"class":50},[14,145375,145376,145379],{},[34,145377,145378],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1838,145381],{"style":126693,"src":145382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1838,145384],{"style":126693,"src":145385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1838,145387],{"style":126693,"src":145388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145390,145391],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1838,145393],{"style":126693,"src":145394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145396,145397],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[481,145399,145400],{"start":47},[484,145401,145402],{},"布局容器",[1838,145404],{"style":126693,"src":145405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145407,145408],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145410,145411],{},"container-fluid用于移动式布局比较方便",[481,145413,145414],{"start":104},[484,145415,145416,145417],{},"bootstrap ",[673,145418,145419],{},"栅格系统原理",[1838,145421],{"style":126693,"src":145422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[481,145424,145425],{"start":113},[484,145426,145427],{},[673,145428,145429],{},"栅格选项参数",[1838,145431],{"style":126693,"src":145432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145434,145435],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145437,14974],{},[27,145439,145440],{"className":126837,"code":145351,"language":126839,"meta":32,"style":32},[34,145441,145442,145448,145458],{"__ignoreMap":32},[37,145443,145444,145446],{"class":39,"line":40},[37,145445,127128],{"class":2320},[37,145447,15913],{"class":50},[37,145449,145450,145452,145454,145456],{"class":39,"line":47},[37,145451,71241],{"class":61},[37,145453,51773],{"class":50},[37,145455,57757],{"class":61},[37,145457,1669],{"class":50},[37,145459,145460],{"class":39,"line":104},[37,145461,1941],{"class":50},[14,145463,135880],{},[1838,145465],{"style":126693,"src":145466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145468,145469],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145471,145472],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145474,145475],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145477,145478],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145480,145481],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145483,145484],{},"汇总展示说明：",[27,145486,145487],{"className":127584,"code":130941,"language":127586,"meta":32,"style":32},[34,145488,145489,145493,145507,145511],{"__ignoreMap":32},[37,145490,145491],{"class":39,"line":40},[37,145492,130948],{"class":43},[37,145494,145495,145497,145499,145501,145503,145505],{"class":39,"line":47},[37,145496,1418],{"class":50},[37,145498,51947],{"class":51636},[37,145500,53822],{"class":2320},[37,145502,55],{"class":50},[37,145504,130961],{"class":185},[37,145506,51643],{"class":50},[37,145508,145509],{"class":39,"line":104},[37,145510,130968],{"class":50},[37,145512,145513,145515,145517],{"class":39,"line":113},[37,145514,52121],{"class":50},[37,145516,51947],{"class":51636},[37,145518,51643],{"class":50},[1838,145520],{"style":126693,"src":145521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145523,145524],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[27,145526,145527],{"className":127584,"code":130941,"language":127586,"meta":32,"style":32},[34,145528,145529,145533,145547,145551],{"__ignoreMap":32},[37,145530,145531],{"class":39,"line":40},[37,145532,130948],{"class":43},[37,145534,145535,145537,145539,145541,145543,145545],{"class":39,"line":47},[37,145536,1418],{"class":50},[37,145538,51947],{"class":51636},[37,145540,53822],{"class":2320},[37,145542,55],{"class":50},[37,145544,130961],{"class":185},[37,145546,51643],{"class":50},[37,145548,145549],{"class":39,"line":104},[37,145550,130968],{"class":50},[37,145552,145553,145555,145557],{"class":39,"line":113},[37,145554,52121],{"class":50},[37,145556,51947],{"class":51636},[37,145558,51643],{"class":50},[481,145560,145561],{"start":189},[484,145562,145563],{},[673,145564,145565],{},"列嵌套",[1838,145567],{"style":126693,"src":145568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145570,145571],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145573,145574],{},"没加row内部这样：",[1838,145576],{"style":126693,"src":145577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145579,145580],{},"加上row之后内部为：",[1838,145582],{"style":126693,"src":145583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[481,145585,145586],{"start":195},[484,145587,145588],{},[673,145589,145590],{},"列偏移",[1838,145592],{"style":126693,"src":145593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145595,145596],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145598,145599],{},"要加偏移量，即偏移份数",[14,145601,145602],{},"偏移的份数=12-两个盒子的份数",[481,145604,145605],{"start":201},[484,145606,145607],{},[673,145608,145609],{},"列排序",[1838,145611],{"style":126693,"src":145612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145614,145615],{},"pull拉左；push推右",[481,145617,145618],{"start":207},[484,145619,145620],{},[673,145621,145622],{},"响应式工具",[1838,145624],{"style":126693,"src":145625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145627,145628],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[498,145630,145632],{"id":145631},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145634,145635],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145637,145638],{},"ul {",[14,145640,145641],{},"list-style: none;",[14,145643,145644],{},"margin:0;",[14,145646,145647],{},"padding:0; }",[1838,145649],{"style":126693,"src":145650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1838,145652],{"style":126693,"src":145653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145655,145656],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145658,69225],{},[27,145660,145661],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,145662,145663,145669,145679],{"__ignoreMap":32},[37,145664,145665,145667],{"class":39,"line":40},[37,145666,130685],{"class":2320},[37,145668,15913],{"class":50},[37,145670,145671,145673,145675,145677],{"class":39,"line":47},[37,145672,131317],{"class":61},[37,145674,51773],{"class":50},[37,145676,24077],{"class":61},[37,145678,1669],{"class":50},[37,145680,145681],{"class":39,"line":104},[37,145682,1941],{"class":50},[14,145684,70789],{},[27,145686,145687],{"className":126837,"code":139507,"language":126839,"meta":32,"style":32},[34,145688,145689,145695,145705],{"__ignoreMap":32},[37,145690,145691,145693],{"class":39,"line":40},[37,145692,130685],{"class":2320},[37,145694,15913],{"class":50},[37,145696,145697,145699,145701,145703],{"class":39,"line":47},[37,145698,131317],{"class":61},[37,145700,51773],{"class":50},[37,145702,24077],{"class":61},[37,145704,1669],{"class":50},[37,145706,145707],{"class":39,"line":104},[37,145708,1941],{"class":50},[469,145710,145712],{"id":145711},"_215-swiper-插件使用","21.5 swiper 插件使用",[1515,145714,145715,145718,145721],{},[484,145716,145717],{},"下载需要的css和js文件html页面中 引入相关文件",[484,145719,145720],{},"官网找到类似案例，复制html结构，css样式 js 语法",[484,145722,145723],{},"根据需求定制修改模块",[1838,145725],{"style":126693,"src":145726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145728,145729],{},"解压后将这两部分放到项目中",[1838,145731],{"style":126693,"src":145732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145734,145735],{},"这个插件可以帮助我们实现轮播图效果",[14,145737,145738],{},"用法：",[1838,145740],{"style":126693,"src":145741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145743,145744],{},"找到自己喜欢的",[1838,145746],{"style":126693,"src":145747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145749,145750],{},"右键，查看网页源代码",[1838,145752],{"style":126693,"src":145753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145755,145756],{},"复制人家的结构内容",[14,145758,145759],{},"然后去看API文档：",[1838,145761],{"style":126693,"src":145762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145764,145765],{},"可以看看如何修改样式",[14,145767,145768],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[446,145770,145771],{},"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":32,"searchDepth":47,"depth":47,"links":145773},[145774,145779,145783,145788,145793],{"id":144574,"depth":47,"text":144575,"children":145775},[145776,145777,145778],{"id":144578,"depth":104,"text":144579},{"id":144588,"depth":104,"text":144589},{"id":144683,"depth":104,"text":144684},{"id":144698,"depth":47,"text":144699,"children":145780},[145781,145782],{"id":144720,"depth":104,"text":144721},{"id":144736,"depth":104,"text":144737},{"id":144811,"depth":47,"text":144812,"children":145784},[145785,145786,145787],{"id":144824,"depth":104,"text":144825},{"id":145048,"depth":104,"text":145049},{"id":145055,"depth":104,"text":145056},{"id":145196,"depth":47,"text":145197,"children":145789},[145790,145791,145792],{"id":145223,"depth":104,"text":145224},{"id":145286,"depth":104,"text":145287},{"id":145631,"depth":104,"text":145632},{"id":145711,"depth":47,"text":145712},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144566,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145800,"title":145801,"body":145802,"description":451,"extension":452,"meta":146022,"navigation":454,"path":146023,"seo":146024,"stem":146025,"__hash__":146026},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145803,"toc":146018},[145804,145807,145811,145814,145829,145834,145837,145842,145877,145882,145894,145899,145912,145917,145934,145939,145959,145964,145982,145985,145988,145991,145994,145998,146001,146004,146007,146010,146013,146016],[10,145805,145801],{"id":145806},"_22-代码提交与新型相对单位",[469,145808,145810],{"id":145809},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145812,145813],{},"法1：",[481,145815,145816,145823,145826],{},[484,145817,145818,145819],{},"登录网站注册：",[51,145820,145821],{"href":145821,"rel":145822},"https:\u002F\u002Fgitee.com\u002F",[24206],[484,145824,145825],{},"码云创建新的仓库",[484,145827,145828],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1515,145830,145831],{},[484,145832,145833],{},"在网站根目录右键-- Git Bash Here",[1838,145835],{"style":126693,"src":145836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1515,145838,145839],{},[484,145840,145841],{},"如果是第一次利用git提交，请配置好全局选项",[27,145843,145845],{"className":117581,"code":145844,"language":117583,"meta":32,"style":32},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[34,145846,145847,145863],{"__ignoreMap":32},[37,145848,145849,145852,145854,145857,145860],{"class":39,"line":40},[37,145850,145851],{"class":2320},"git",[37,145853,120004],{"class":185},[37,145855,145856],{"class":61}," --global",[37,145858,145859],{"class":185}," user.name",[37,145861,145862],{"class":185}," \"你的名字\"\n",[37,145864,145865,145867,145869,145871,145874],{"class":39,"line":47},[37,145866,145851],{"class":2320},[37,145868,120004],{"class":185},[37,145870,145856],{"class":61},[37,145872,145873],{"class":185}," user.email",[37,145875,145876],{"class":185}," \"你的邮箱\"\n",[1515,145878,145879],{},[484,145880,145881],{},"初始化仓库",[27,145883,145885],{"className":117581,"code":145884,"language":117583,"meta":32,"style":32},"git init\n",[34,145886,145887],{"__ignoreMap":32},[37,145888,145889,145891],{"class":39,"line":40},[37,145890,145851],{"class":2320},[37,145892,145893],{"class":185}," init\n",[1515,145895,145896],{},[484,145897,145898],{},"把本地文件放到暂存区",[27,145900,145902],{"className":117581,"code":145901,"language":117583,"meta":32,"style":32},"git add .\n",[34,145903,145904],{"__ignoreMap":32},[37,145905,145906,145908,145910],{"class":39,"line":40},[37,145907,145851],{"class":2320},[37,145909,5558],{"class":185},[37,145911,29083],{"class":185},[1515,145913,145914],{},[484,145915,145916],{},"把本地文件放到本地仓库里面",[27,145918,145920],{"className":117581,"code":145919,"language":117583,"meta":32,"style":32},"git commit -m \"first commit\"\n",[34,145921,145922],{"__ignoreMap":32},[37,145923,145924,145926,145929,145931],{"class":39,"line":40},[37,145925,145851],{"class":2320},[37,145927,145928],{"class":185}," commit",[37,145930,101167],{"class":61},[37,145932,145933],{"class":185}," \"first commit\"\n",[1515,145935,145936],{},[484,145937,145938],{},"链接远程仓库",[27,145940,145942],{"className":117581,"code":145941,"language":117583,"meta":32,"style":32},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[34,145943,145944],{"__ignoreMap":32},[37,145945,145946,145948,145951,145953,145956],{"class":39,"line":40},[37,145947,145851],{"class":2320},[37,145949,145950],{"class":185}," remote",[37,145952,5558],{"class":185},[37,145954,145955],{"class":185}," origin",[37,145957,145958],{"class":185}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1515,145960,145961],{},[484,145962,145963],{},"把本地仓库的文件推送到远程仓库 push",[27,145965,145967],{"className":117581,"code":145966,"language":117583,"meta":32,"style":32},"git push -u origin master\n",[34,145968,145969],{"__ignoreMap":32},[37,145970,145971,145973,145975,145977,145979],{"class":39,"line":40},[37,145972,145851],{"class":2320},[37,145974,29358],{"class":185},[37,145976,28632],{"class":61},[37,145978,145955],{"class":185},[37,145980,145981],{"class":185}," master\n",[1838,145983],{"style":126693,"src":145984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145986,145987],{},"上方方法暂未实现，后边学完git后在整",[14,145989,145990],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1838,145992],{"style":126693,"src":145993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[469,145995,145997],{"id":145996},"_222-新型相对单位","22.2 新型相对单位",[1838,145999],{"style":126693,"src":146000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1838,146002],{"style":126693,"src":146003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,146005,146006],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,146008,146009],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1838,146011],{"style":126693,"src":146012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,146014,146015],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[446,146017,24299],{},{"title":32,"searchDepth":47,"depth":47,"links":146019},[146020,146021],{"id":145809,"depth":47,"text":145810},{"id":145996,"depth":47,"text":145997},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145801,"description":451},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146028,"title":146029,"body":146030,"description":146034,"extension":452,"meta":146035,"navigation":454,"path":146036,"seo":146037,"stem":146038,"__hash__":146039},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146031,"toc":146032},[],{"title":32,"searchDepth":47,"depth":47,"links":146033},[],"自己正经开始学编程的第一门语言！",{"category":93174},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146029,"description":146034},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146041,"title":146042,"body":146043,"description":451,"extension":452,"meta":147190,"navigation":454,"path":147191,"seo":147192,"stem":147193,"__hash__":147194},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146044,"toc":147166},[146045,146048,146052,146055,146058,146083,146086,146092,146096,146099,146126,146129,146169,146172,146184,146187,146193,146197,146201,146228,146245,146252,146256,146259,146285,146288,146292,146295,146335,146338,146355,146361,146365,146370,146414,146417,146435,146438,146506,146510,146517,146520,146535,146538,146547,146550,146561,146564,146573,146576,146593,146596,146611,146615,146619,146622,146624,146644,146648,146651,146654,146665,146668,146674,146678,146684,146711,146714,146726,146729,146740,146743,146749,146753,146759,146809,146812,146854,146857,146890,146893,146927,146931,146934,146954,146957,146993,146996,147009,147013,147017,147023,147026,147039,147043,147046,147052,147055,147059,147062,147065,147114,147118,147134,147140,147147,147153,147163],[10,146046,146042],{"id":146047},"_1-python环境与第一个程序",[469,146049,146051],{"id":146050},"_11-什么是python","1.1 什么是Python",[14,146053,146054],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,146056,146057],{},"理解 Python 时抓住三个关键词：",[481,146059,146060,146063,146066],{},[484,146061,146062],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[484,146064,146065],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[484,146067,146068,146069,735,146072,735,146075,735,146078,735,146080,28727],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[34,146070,146071],{},"os",[34,146073,146074],{},"sys",[34,146076,146077],{},"json",[34,146079,58196],{},[34,146081,146082],{},"datetime",[14,146084,146085],{},"Python 程序的运行链路：",[27,146087,146090],{"className":146088,"code":146089,"language":5536,"meta":32},[5534],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[34,146091,146089],{"__ignoreMap":32},[469,146093,146095],{"id":146094},"_12-python解释器","1.2 Python解释器",[14,146097,146098],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[27,146100,146102],{"className":24163,"code":146101,"language":24165,"meta":32,"style":32},"python --version\npython3 --version\npython\npython3\n",[34,146103,146104,146110,146116,146121],{"__ignoreMap":32},[37,146105,146106,146108],{"class":39,"line":40},[37,146107,31],{"class":2320},[37,146109,26635],{"class":61},[37,146111,146112,146114],{"class":39,"line":47},[37,146113,101164],{"class":2320},[37,146115,26635],{"class":61},[37,146117,146118],{"class":39,"line":104},[37,146119,146120],{"class":2320},"python\n",[37,146122,146123],{"class":39,"line":113},[37,146124,146125],{"class":2320},"python3\n",[14,146127,146128],{},"进入交互模式后，可以直接输入表达式：",[27,146130,146132],{"className":29,"code":146131,"language":31,"meta":32,"style":32},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[34,146133,146134,146145,146150,146164],{"__ignoreMap":32},[37,146135,146136,146139,146141,146143],{"class":39,"line":40},[37,146137,146138],{"class":54},">>>",[37,146140,25460],{"class":61},[37,146142,45903],{"class":54},[37,146144,48059],{"class":61},[37,146146,146147],{"class":39,"line":47},[37,146148,146149],{"class":61},"3\n",[37,146151,146152,146154,146157,146159,146162],{"class":39,"line":104},[37,146153,146138],{"class":54},[37,146155,146156],{"class":61}," print",[37,146158,165],{"class":50},[37,146160,146161],{"class":185},"\"hello python\"",[37,146163,280],{"class":50},[37,146165,146166],{"class":39,"line":113},[37,146167,146168],{"class":50},"hello python\n",[14,146170,146171],{},"退出交互模式：",[27,146173,146175],{"className":29,"code":146174,"language":31,"meta":32,"style":32},"exit()\n",[34,146176,146177],{"__ignoreMap":32},[37,146178,146179,146182],{"class":39,"line":40},[37,146180,146181],{"class":61},"exit",[37,146183,2333],{"class":50},[14,146185,146186],{},"或使用快捷键：",[27,146188,146191],{"className":146189,"code":146190,"language":5536,"meta":32},[5534],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[34,146192,146190],{"__ignoreMap":32},[469,146194,146196],{"id":146195},"_13-安装python","1.3 安装Python",[498,146198,146200],{"id":146199},"_131-windows安装","1.3.1 Windows安装",[481,146202,146203,146210,146213,146219,146225],{},[484,146204,146205,146206],{},"打开 Python 官网：",[51,146207,146208],{"href":146208,"rel":146209},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24206],[484,146211,146212],{},"下载 Windows Installer。",[484,146214,146215,146216,28727],{},"安装时勾选 ",[34,146217,146218],{},"Add Python to PATH",[484,146220,146221,146222,28727],{},"点击 ",[34,146223,146224],{},"Install Now",[484,146226,146227],{},"安装完成后打开命令提示符验证：",[27,146229,146231],{"className":24163,"code":146230,"language":24165,"meta":32,"style":32},"python --version\npip --version\n",[34,146232,146233,146239],{"__ignoreMap":32},[37,146234,146235,146237],{"class":39,"line":40},[37,146236,31],{"class":2320},[37,146238,26635],{"class":61},[37,146240,146241,146243],{"class":39,"line":47},[37,146242,24172],{"class":2320},[37,146244,26635],{"class":61},[14,146246,146247,146248,146251],{},"如果提示 ",[34,146249,146250],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[498,146253,146255],{"id":146254},"_132-macos安装","1.3.2 macOS安装",[14,146257,146258],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[27,146260,146262],{"className":24163,"code":146261,"language":24165,"meta":32,"style":32},"brew install python\npython3 --version\npip3 --version\n",[34,146263,146264,146273,146279],{"__ignoreMap":32},[37,146265,146266,146269,146271],{"class":39,"line":40},[37,146267,146268],{"class":2320},"brew",[37,146270,24175],{"class":185},[37,146272,124603],{"class":185},[37,146274,146275,146277],{"class":39,"line":47},[37,146276,101164],{"class":2320},[37,146278,26635],{"class":61},[37,146280,146281,146283],{"class":39,"line":104},[37,146282,119985],{"class":2320},[37,146284,26635],{"class":61},[14,146286,146287],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[498,146289,146291],{"id":146290},"_133-linux安装","1.3.3 Linux安装",[14,146293,146294],{},"Ubuntu\u002FDebian：",[27,146296,146298],{"className":24163,"code":146297,"language":24165,"meta":32,"style":32},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[34,146299,146300,146308,146323,146329],{"__ignoreMap":32},[37,146301,146302,146304,146306],{"class":39,"line":40},[37,146303,24918],{"class":2320},[37,146305,117602],{"class":185},[37,146307,26584],{"class":185},[37,146309,146310,146312,146314,146316,146318,146320],{"class":39,"line":47},[37,146311,24918],{"class":2320},[37,146313,117602],{"class":185},[37,146315,24175],{"class":185},[37,146317,104688],{"class":185},[37,146319,101083],{"class":185},[37,146321,146322],{"class":185}," python3-venv\n",[37,146324,146325,146327],{"class":39,"line":104},[37,146326,101164],{"class":2320},[37,146328,26635],{"class":61},[37,146330,146331,146333],{"class":39,"line":113},[37,146332,119985],{"class":2320},[37,146334,26635],{"class":61},[14,146336,146337],{},"Fedora：",[27,146339,146341],{"className":24163,"code":146340,"language":24165,"meta":32,"style":32},"sudo dnf install python3 python3-pip\n",[34,146342,146343],{"__ignoreMap":32},[37,146344,146345,146347,146349,146351,146353],{"class":39,"line":40},[37,146346,24918],{"class":2320},[37,146348,26657],{"class":185},[37,146350,24175],{"class":185},[37,146352,104688],{"class":185},[37,146354,120050],{"class":185},[14,146356,146357,146358,146360],{},"Linux 上通常使用 ",[34,146359,101164],{}," 命令，避免和系统旧版本 Python 冲突。",[469,146362,146364],{"id":146363},"_14-pip包管理器","1.4 pip包管理器",[14,146366,146367,146369],{},[34,146368,24172],{}," 用来安装第三方库。",[27,146371,146373],{"className":24163,"code":146372,"language":24165,"meta":32,"style":32},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[34,146374,146375,146384,146393,146401,146407],{"__ignoreMap":32},[37,146376,146377,146379,146381],{"class":39,"line":40},[37,146378,24172],{"class":2320},[37,146380,24175],{"class":185},[37,146382,146383],{"class":185}," requests\n",[37,146385,146386,146388,146391],{"class":39,"line":47},[37,146387,24172],{"class":2320},[37,146389,146390],{"class":185}," uninstall",[37,146392,146383],{"class":185},[37,146394,146395,146397,146399],{"class":39,"line":104},[37,146396,24172],{"class":2320},[37,146398,117859],{"class":185},[37,146400,146383],{"class":185},[37,146402,146403,146405],{"class":39,"line":113},[37,146404,24172],{"class":2320},[37,146406,119240],{"class":185},[37,146408,146409,146411],{"class":39,"line":189},[37,146410,24172],{"class":2320},[37,146412,146413],{"class":185}," freeze\n",[14,146415,146416],{},"国内网络较慢时可以临时使用镜像：",[27,146418,146420],{"className":24163,"code":146419,"language":24165,"meta":32,"style":32},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[34,146421,146422],{"__ignoreMap":32},[37,146423,146424,146426,146428,146431,146433],{"class":39,"line":40},[37,146425,24172],{"class":2320},[37,146427,24175],{"class":185},[37,146429,146430],{"class":185}," requests",[37,146432,26772],{"class":61},[37,146434,120013],{"class":185},[14,146436,146437],{},"常见第三方库：",[661,146439,146440,146449],{},[664,146441,146442],{},[667,146443,146444,146447],{},[670,146445,146446],{},"库",[670,146448,102981],{},[708,146450,146451,146459,146466,146474,146482,146490,146498],{},[667,146452,146453,146456],{},[713,146454,146455],{},"requests",[713,146457,146458],{},"网络请求",[667,146460,146461,146463],{},[713,146462,100911],{},[713,146464,146465],{},"数值计算",[667,146467,146468,146471],{},[713,146469,146470],{},"pandas",[713,146472,146473],{},"表格数据处理",[667,146475,146476,146479],{},[713,146477,146478],{},"matplotlib",[713,146480,146481],{},"绘图",[667,146483,146484,146487],{},[713,146485,146486],{},"pyecharts",[713,146488,146489],{},"ECharts 图表",[667,146491,146492,146495],{},[713,146493,146494],{},"flask",[713,146496,146497],{},"Web 后端",[667,146499,146500,146503],{},[713,146501,146502],{},"pytest",[713,146504,146505],{},"自动化测试",[469,146507,146509],{"id":146508},"_15-虚拟环境","1.5 虚拟环境",[14,146511,146512,146513,146516],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[34,146514,146515],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146518,146519],{},"创建虚拟环境：",[27,146521,146523],{"className":24163,"code":146522,"language":24165,"meta":32,"style":32},"python -m venv .venv\n",[34,146524,146525],{"__ignoreMap":32},[37,146526,146527,146529,146531,146533],{"class":39,"line":40},[37,146528,31],{"class":2320},[37,146530,101167],{"class":61},[37,146532,101170],{"class":185},[37,146534,101173],{"class":185},[14,146536,146537],{},"Windows 激活：",[27,146539,146541],{"className":24163,"code":146540,"language":24165,"meta":32,"style":32},".venv\\Scripts\\activate\n",[34,146542,146543],{"__ignoreMap":32},[37,146544,146545],{"class":39,"line":40},[37,146546,146540],{"class":2320},[14,146548,146549],{},"macOS\u002FLinux 激活：",[27,146551,146553],{"className":24163,"code":146552,"language":24165,"meta":32,"style":32},"source .venv\u002Fbin\u002Factivate\n",[34,146554,146555],{"__ignoreMap":32},[37,146556,146557,146559],{"class":39,"line":40},[37,146558,101178],{"class":61},[37,146560,101181],{"class":185},[14,146562,146563],{},"退出虚拟环境：",[27,146565,146567],{"className":24163,"code":146566,"language":24165,"meta":32,"style":32},"deactivate\n",[34,146568,146569],{"__ignoreMap":32},[37,146570,146571],{"class":39,"line":40},[37,146572,146566],{"class":2320},[14,146574,146575],{},"保存依赖：",[27,146577,146579],{"className":24163,"code":146578,"language":24165,"meta":32,"style":32},"pip freeze > requirements.txt\n",[34,146580,146581],{"__ignoreMap":32},[37,146582,146583,146585,146588,146590],{"class":39,"line":40},[37,146584,24172],{"class":2320},[37,146586,146587],{"class":185}," freeze",[37,146589,26564],{"class":54},[37,146591,146592],{"class":185}," requirements.txt\n",[14,146594,146595],{},"安装依赖：",[27,146597,146599],{"className":24163,"code":146598,"language":24165,"meta":32,"style":32},"pip install -r requirements.txt\n",[34,146600,146601],{"__ignoreMap":32},[37,146602,146603,146605,146607,146609],{"class":39,"line":40},[37,146604,24172],{"class":2320},[37,146606,24175],{"class":185},[37,146608,119924],{"class":61},[37,146610,146592],{"class":185},[469,146612,146614],{"id":146613},"_16-开发工具","1.6 开发工具",[498,146616,146618],{"id":146617},"_161-pycharm","1.6.1 PyCharm",[14,146620,146621],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146623,122347],{},[481,146625,146626,146629,146632,146638,146641],{},[484,146627,146628],{},"New Project：创建项目。",[484,146630,146631],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[484,146633,146634,146635,126268],{},"New Python File：创建 ",[34,146636,146637],{},".py",[484,146639,146640],{},"Run：运行当前文件。",[484,146642,146643],{},"Debug：断点调试。",[498,146645,146647],{"id":146646},"_162-vs-code","1.6.2 VS Code",[14,146649,146650],{},"VS Code 轻量，适合后续多语言开发。",[14,146652,146653],{},"建议安装插件：",[481,146655,146656,146659,146662],{},[484,146657,146658],{},"Python。",[484,146660,146661],{},"Pylance。",[484,146663,146664],{},"Jupyter。",[14,146666,146667],{},"选择解释器：",[27,146669,146672],{"className":146670,"code":146671,"language":5536,"meta":32},[5534],"Ctrl + Shift + P -> Python: Select Interpreter\n",[34,146673,146671],{"__ignoreMap":32},[469,146675,146677],{"id":146676},"_17-第一个python程序","1.7 第一个Python程序",[14,146679,146680,146681,24960],{},"创建文件 ",[34,146682,146683],{},"hello.py",[27,146685,146687],{"className":29,"code":146686,"language":31,"meta":32,"style":32},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[34,146688,146689,146700],{"__ignoreMap":32},[37,146690,146691,146693,146695,146698],{"class":39,"line":40},[37,146692,30755],{"class":61},[37,146694,165],{"class":50},[37,146696,146697],{"class":185},"\"Hello World\"",[37,146699,280],{"class":50},[37,146701,146702,146704,146706,146709],{"class":39,"line":47},[37,146703,30755],{"class":61},[37,146705,165],{"class":50},[37,146707,146708],{"class":185},"\"你好，Python\"",[37,146710,280],{"class":50},[14,146712,146713],{},"在终端运行：",[27,146715,146717],{"className":24163,"code":146716,"language":24165,"meta":32,"style":32},"python hello.py\n",[34,146718,146719],{"__ignoreMap":32},[37,146720,146721,146723],{"class":39,"line":40},[37,146722,31],{"class":2320},[37,146724,146725],{"class":185}," hello.py\n",[14,146727,146728],{},"或：",[27,146730,146732],{"className":24163,"code":146731,"language":24165,"meta":32,"style":32},"python3 hello.py\n",[34,146733,146734],{"__ignoreMap":32},[37,146735,146736,146738],{"class":39,"line":40},[37,146737,101164],{"class":2320},[37,146739,146725],{"class":185},[14,146741,146742],{},"输出：",[27,146744,146747],{"className":146745,"code":146746,"language":5536,"meta":32},[5534],"Hello World\n你好，Python\n",[34,146748,146746],{"__ignoreMap":32},[469,146750,146752],{"id":146751},"_18-print函数","1.8 print函数",[14,146754,146755,146758],{},[34,146756,146757],{},"print()"," 用来输出内容。",[27,146760,146762],{"className":29,"code":146761,"language":31,"meta":32,"style":32},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[34,146763,146764,146774,146784,146794],{"__ignoreMap":32},[37,146765,146766,146768,146770,146772],{"class":39,"line":40},[37,146767,30755],{"class":61},[37,146769,165],{"class":50},[37,146771,6192],{"class":185},[37,146773,280],{"class":50},[37,146775,146776,146778,146780,146782],{"class":39,"line":47},[37,146777,30755],{"class":61},[37,146779,165],{"class":50},[37,146781,154],{"class":61},[37,146783,280],{"class":50},[37,146785,146786,146788,146790,146792],{"class":39,"line":104},[37,146787,30755],{"class":61},[37,146789,165],{"class":50},[37,146791,576],{"class":61},[37,146793,280],{"class":50},[37,146795,146796,146798,146800,146803,146805,146807],{"class":39,"line":113},[37,146797,30755],{"class":61},[37,146799,165],{"class":50},[37,146801,146802],{"class":185},"\"年龄:\"",[37,146804,12776],{"class":50},[37,146806,1160],{"class":61},[37,146808,280],{"class":50},[14,146810,146811],{},"多个内容用逗号隔开，默认中间加空格：",[27,146813,146815],{"className":29,"code":146814,"language":31,"meta":32,"style":32},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[34,146816,146817,146827,146837],{"__ignoreMap":32},[37,146818,146819,146822,146824],{"class":39,"line":40},[37,146820,146821],{"class":50},"name ",[37,146823,55],{"class":54},[37,146825,146826],{"class":185}," \"张三\"\n",[37,146828,146829,146832,146834],{"class":39,"line":47},[37,146830,146831],{"class":50},"age ",[37,146833,55],{"class":54},[37,146835,146836],{"class":61}," 18\n",[37,146838,146839,146841,146843,146846,146849,146851],{"class":39,"line":104},[37,146840,30755],{"class":61},[37,146842,165],{"class":50},[37,146844,146845],{"class":185},"\"姓名:\"",[37,146847,146848],{"class":50},", name, ",[37,146850,146802],{"class":185},[37,146852,146853],{"class":50},", age)\n",[14,146855,146856],{},"修改分隔符：",[27,146858,146860],{"className":29,"code":146859,"language":31,"meta":32,"style":32},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[34,146861,146862],{"__ignoreMap":32},[37,146863,146864,146866,146868,146871,146873,146875,146877,146879,146881,146884,146886,146888],{"class":39,"line":40},[37,146865,30755],{"class":61},[37,146867,165],{"class":50},[37,146869,146870],{"class":185},"\"2024\"",[37,146872,12776],{"class":50},[37,146874,54652],{"class":185},[37,146876,12776],{"class":50},[37,146878,54652],{"class":185},[37,146880,12776],{"class":50},[37,146882,146883],{"class":159},"sep",[37,146885,55],{"class":54},[37,146887,32821],{"class":185},[37,146889,280],{"class":50},[14,146891,146892],{},"修改结尾符：",[27,146894,146896],{"className":29,"code":146895,"language":31,"meta":32,"style":32},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[34,146897,146898,146916],{"__ignoreMap":32},[37,146899,146900,146902,146904,146906,146908,146910,146912,146914],{"class":39,"line":40},[37,146901,30755],{"class":61},[37,146903,165],{"class":50},[37,146905,6192],{"class":185},[37,146907,12776],{"class":50},[37,146909,46138],{"class":159},[37,146911,55],{"class":54},[37,146913,4709],{"class":185},[37,146915,280],{"class":50},[37,146917,146918,146920,146922,146925],{"class":39,"line":47},[37,146919,30755],{"class":61},[37,146921,165],{"class":50},[37,146923,146924],{"class":185},"\"python\"",[37,146926,280],{"class":50},[469,146928,146930],{"id":146929},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146932,146933],{},"交互运行适合临时验证：",[27,146935,146937],{"className":29,"code":146936,"language":31,"meta":32,"style":32},">>> 10 * 3\n30\n",[34,146938,146939,146949],{"__ignoreMap":32},[37,146940,146941,146943,146945,146947],{"class":39,"line":40},[37,146942,146138],{"class":54},[37,146944,2395],{"class":61},[37,146946,6866],{"class":54},[37,146948,120321],{"class":61},[37,146950,146951],{"class":39,"line":47},[37,146952,146953],{"class":61},"30\n",[14,146955,146956],{},"脚本运行适合保存程序：",[27,146958,146960],{"className":29,"code":146959,"language":31,"meta":32,"style":32},"price = 8\ncount = 5\nprint(price * count)\n",[34,146961,146962,146972,146981],{"__ignoreMap":32},[37,146963,146964,146967,146969],{"class":39,"line":40},[37,146965,146966],{"class":50},"price ",[37,146968,55],{"class":54},[37,146970,146971],{"class":61}," 8\n",[37,146973,146974,146977,146979],{"class":39,"line":47},[37,146975,146976],{"class":50},"count ",[37,146978,55],{"class":54},[37,146980,54763],{"class":61},[37,146982,146983,146985,146988,146990],{"class":39,"line":104},[37,146984,30755],{"class":61},[37,146986,146987],{"class":50},"(price ",[37,146989,967],{"class":54},[37,146991,146992],{"class":50}," count)\n",[14,146994,146995],{},"实际学习中推荐：",[481,146997,146998,147001,147006],{},[484,146999,147000],{},"临时试一个语法，用交互模式。",[484,147002,147003,147004,126268],{},"写完整练习，用 ",[34,147005,146637],{},[484,147007,147008],{},"写项目，用独立目录和虚拟环境。",[469,147010,147012],{"id":147011},"_110-常见错误","1.10 常见错误",[498,147014,147016],{"id":147015},"_1101-命令找不到","1.10.1 命令找不到",[27,147018,147021],{"className":147019,"code":147020,"language":5536,"meta":32},[5534],"python: command not found\n",[34,147022,147020],{"__ignoreMap":32},[14,147024,147025],{},"原因：",[481,147027,147028,147031,147034],{},[484,147029,147030],{},"没安装 Python。",[484,147032,147033],{},"PATH 没配置。",[484,147035,147036,147037,28727],{},"Linux\u002FmacOS 应该使用 ",[34,147038,101164],{},[498,147040,147042],{"id":147041},"_1102-文件名冲突","1.10.2 文件名冲突",[14,147044,147045],{},"不要把文件命名为：",[27,147047,147050],{"className":147048,"code":147049,"language":5536,"meta":32},[5534],"random.py\njson.py\ntime.py\nrequests.py\n",[34,147051,147049],{"__ignoreMap":32},[14,147053,147054],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[498,147056,147058],{"id":147057},"_1103-中文乱码","1.10.3 中文乱码",[14,147060,147061],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,147063,147064],{},"如果读写文件出现乱码，要明确指定编码：",[27,147066,147068],{"className":29,"code":147067,"language":31,"meta":32,"style":32},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[34,147069,147070,147104],{"__ignoreMap":32},[37,147071,147072,147074,147077,147079,147082,147084,147087,147089,147092,147094,147097,147099,147101],{"class":39,"line":40},[37,147073,108118],{"class":54},[37,147075,147076],{"class":61}," open",[37,147078,165],{"class":50},[37,147080,147081],{"class":185},"\"data.txt\"",[37,147083,12776],{"class":50},[37,147085,147086],{"class":185},"\"r\"",[37,147088,12776],{"class":50},[37,147090,147091],{"class":159},"encoding",[37,147093,55],{"class":54},[37,147095,147096],{"class":185},"\"utf-8\"",[37,147098,14055],{"class":50},[37,147100,31722],{"class":54},[37,147102,147103],{"class":50}," f:\n",[37,147105,147106,147109,147111],{"class":39,"line":47},[37,147107,147108],{"class":50},"    content ",[37,147110,55],{"class":54},[37,147112,147113],{"class":50}," f.read()\n",[469,147115,147117],{"id":147116},"_111-本章练习","1.11 本章练习",[481,147119,147120,147123,147129],{},[484,147121,147122],{},"安装 Python，并在终端输出版本号。",[484,147124,147125,147126,147128],{},"新建 ",[34,147127,146683],{},"，输出自己的姓名、年龄、学习目标。",[484,147130,104651,147131,147133],{},[34,147132,146757],{}," 输出下面格式：",[27,147135,147138],{"className":147136,"code":147137,"language":5536,"meta":32},[5534],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[34,147139,147137],{"__ignoreMap":32},[481,147141,147142],{"start":113},[484,147143,104651,147144,147146],{},[34,147145,146883],{}," 输出日期：",[27,147148,147151],{"className":147149,"code":147150,"language":5536,"meta":32},[5534],"2024-10-10\n",[34,147152,147150],{"__ignoreMap":32},[481,147154,147155],{"start":189},[484,147156,104651,147157,147159,147160,147162],{},[34,147158,46138],{}," 让两次 ",[34,147161,146757],{}," 输出在同一行。",[446,147164,147165],{},"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":32,"searchDepth":47,"depth":47,"links":147167},[147168,147169,147170,147175,147176,147177,147181,147182,147183,147184,147189],{"id":146050,"depth":47,"text":146051},{"id":146094,"depth":47,"text":146095},{"id":146195,"depth":47,"text":146196,"children":147171},[147172,147173,147174],{"id":146199,"depth":104,"text":146200},{"id":146254,"depth":104,"text":146255},{"id":146290,"depth":104,"text":146291},{"id":146363,"depth":47,"text":146364},{"id":146508,"depth":47,"text":146509},{"id":146613,"depth":47,"text":146614,"children":147178},[147179,147180],{"id":146617,"depth":104,"text":146618},{"id":146646,"depth":104,"text":146647},{"id":146676,"depth":47,"text":146677},{"id":146751,"depth":47,"text":146752},{"id":146929,"depth":47,"text":146930},{"id":147011,"depth":47,"text":147012,"children":147185},[147186,147187,147188],{"id":147015,"depth":104,"text":147016},{"id":147041,"depth":104,"text":147042},{"id":147057,"depth":104,"text":147058},{"id":147116,"depth":47,"text":147117},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146042,"description":451},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147196,"title":147197,"body":147198,"description":451,"extension":452,"meta":149602,"navigation":454,"path":149603,"seo":149604,"stem":149605,"__hash__":149606},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147199,"toc":149587},[147200,147203,147207,147210,147213,147230,147233,147275,147278,147282,147285,147288,147325,147328,147362,147365,147457,147461,147475,147478,147505,147508,147512,147615,147622,147625,147642,147646,147653,147842,147845,147918,147922,147925,148009,148012,148044,148048,148252,148255,148259,148265,148367,148370,148626,148630,148633,148636,148650,148652,148838,148842,149204,149210,149214,149217,149341,149344,149523,149526,149530,149563,149567,149584],[10,147201,147197],{"id":147202},"_10-json与pyecharts折线图",[469,147204,147206],{"id":147205},"_101-数据可视化","10.1 数据可视化",[14,147208,147209],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,147211,147212],{},"常见图表：",[481,147214,147215,147218,147221,147224,147227],{},[484,147216,147217],{},"折线图：看趋势。",[484,147219,147220],{},"柱状图：看分类对比。",[484,147222,147223],{},"饼图：看占比。",[484,147225,147226],{},"地图：看地域分布。",[484,147228,147229],{},"散点图：看两个变量之间的关系。",[14,147231,147232],{},"Python 可视化常用库：",[661,147234,147235,147243],{},[664,147236,147237],{},[667,147238,147239,147241],{},[670,147240,146446],{},[670,147242,24081],{},[708,147244,147245,147252,147260,147267],{},[667,147246,147247,147249],{},[713,147248,146478],{},[713,147250,147251],{},"基础、经典、可定制",[667,147253,147254,147257],{},[713,147255,147256],{},"seaborn",[713,147258,147259],{},"统计图表更美观",[667,147261,147262,147264],{},[713,147263,146486],{},[713,147265,147266],{},"生成交互式网页图表",[667,147268,147269,147272],{},[713,147270,147271],{},"plotly",[713,147273,147274],{},"交互图表能力强",[14,147276,147277],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[469,147279,147281],{"id":147280},"_102-json回顾","10.2 JSON回顾",[14,147283,147284],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147286,147287],{},"Python 字典：",[27,147289,147291],{"className":29,"code":147290,"language":31,"meta":32,"style":32},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[34,147292,147293,147301,147312,147321],{"__ignoreMap":32},[37,147294,147295,147297,147299],{"class":39,"line":40},[37,147296,101943],{"class":50},[37,147298,55],{"class":54},[37,147300,15913],{"class":50},[37,147302,147303,147306,147308,147310],{"class":39,"line":47},[37,147304,147305],{"class":185},"    \"name\"",[37,147307,51773],{"class":50},[37,147309,69605],{"class":185},[37,147311,31805],{"class":50},[37,147313,147314,147317,147319],{"class":39,"line":104},[37,147315,147316],{"class":185},"    \"value\"",[37,147318,51773],{"class":50},[37,147320,97743],{"class":61},[37,147322,147323],{"class":39,"line":113},[37,147324,1941],{"class":50},[14,147326,147327],{},"JSON 字符串：",[27,147329,147332],{"className":147330,"code":147331,"language":146077,"meta":32,"style":32},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[34,147333,147334,147338,147349,147358],{"__ignoreMap":32},[37,147335,147336],{"class":39,"line":40},[37,147337,1922],{"class":50},[37,147339,147340,147343,147345,147347],{"class":39,"line":47},[37,147341,147342],{"class":61},"  \"name\"",[37,147344,51773],{"class":50},[37,147346,69605],{"class":185},[37,147348,31805],{"class":50},[37,147350,147351,147354,147356],{"class":39,"line":104},[37,147352,147353],{"class":61},"  \"value\"",[37,147355,51773],{"class":50},[37,147357,97743],{"class":61},[37,147359,147360],{"class":39,"line":113},[37,147361,1941],{"class":50},[14,147363,147364],{},"Python 与 JSON 的转换：",[27,147366,147368],{"className":29,"code":147367,"language":31,"meta":32,"style":32},"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",[34,147369,147370,147377,147381,147406,147410,147429,147436,147440,147450],{"__ignoreMap":32},[37,147371,147372,147374],{"class":39,"line":40},[37,147373,30732],{"class":54},[37,147375,147376],{"class":50}," json\n",[37,147378,147379],{"class":39,"line":47},[37,147380,2757],{"emptyLinePlaceholder":454},[37,147382,147383,147385,147387,147389,147391,147393,147395,147397,147400,147402,147404],{"class":39,"line":104},[37,147384,101943],{"class":50},[37,147386,55],{"class":54},[37,147388,4798],{"class":50},[37,147390,63015],{"class":185},[37,147392,51773],{"class":50},[37,147394,69605],{"class":185},[37,147396,12776],{"class":50},[37,147398,147399],{"class":185},"\"value\"",[37,147401,51773],{"class":50},[37,147403,154],{"class":61},[37,147405,1941],{"class":50},[37,147407,147408],{"class":39,"line":113},[37,147409,2757],{"emptyLinePlaceholder":454},[37,147411,147412,147415,147417,147420,147423,147425,147427],{"class":39,"line":189},[37,147413,147414],{"class":50},"json_text ",[37,147416,55],{"class":54},[37,147418,147419],{"class":50}," json.dumps(data, ",[37,147421,147422],{"class":159},"ensure_ascii",[37,147424,55],{"class":54},[37,147426,34324],{"class":61},[37,147428,280],{"class":50},[37,147430,147431,147433],{"class":39,"line":195},[37,147432,30755],{"class":61},[37,147434,147435],{"class":50},"(json_text)\n",[37,147437,147438],{"class":39,"line":201},[37,147439,2757],{"emptyLinePlaceholder":454},[37,147441,147442,147445,147447],{"class":39,"line":207},[37,147443,147444],{"class":50},"new_data ",[37,147446,55],{"class":54},[37,147448,147449],{"class":50}," json.loads(json_text)\n",[37,147451,147452,147454],{"class":39,"line":213},[37,147453,30755],{"class":61},[37,147455,147456],{"class":50},"(new_data)\n",[469,147458,147460],{"id":147459},"_103-安装pyecharts","10.3 安装pyecharts",[27,147462,147464],{"className":24163,"code":147463,"language":24165,"meta":32,"style":32},"pip install pyecharts\n",[34,147465,147466],{"__ignoreMap":32},[37,147467,147468,147470,147472],{"class":39,"line":40},[37,147469,24172],{"class":2320},[37,147471,24175],{"class":185},[37,147473,147474],{"class":185}," pyecharts\n",[14,147476,147477],{},"验证：",[27,147479,147481],{"className":29,"code":147480,"language":31,"meta":32,"style":32},"import pyecharts\n\nprint(pyecharts.__version__)\n",[34,147482,147483,147489,147493],{"__ignoreMap":32},[37,147484,147485,147487],{"class":39,"line":40},[37,147486,30732],{"class":54},[37,147488,147474],{"class":50},[37,147490,147491],{"class":39,"line":47},[37,147492,2757],{"emptyLinePlaceholder":454},[37,147494,147495,147497,147500,147503],{"class":39,"line":104},[37,147496,30755],{"class":61},[37,147498,147499],{"class":50},"(pyecharts.",[37,147501,147502],{"class":61},"__version__",[37,147504,280],{"class":50},[14,147506,147507],{},"如果使用虚拟环境，要先激活环境再安装。",[469,147509,147511],{"id":147510},"_104-第一个折线图","10.4 第一个折线图",[27,147513,147515],{"className":29,"code":147514,"language":31,"meta":32,"style":32},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[34,147516,147517,147529,147533,147543,147573,147605],{"__ignoreMap":32},[37,147518,147519,147521,147524,147526],{"class":39,"line":40},[37,147520,31076],{"class":54},[37,147522,147523],{"class":50}," pyecharts.charts ",[37,147525,30732],{"class":54},[37,147527,147528],{"class":50}," Line\n",[37,147530,147531],{"class":39,"line":47},[37,147532,2757],{"emptyLinePlaceholder":454},[37,147534,147535,147538,147540],{"class":39,"line":104},[37,147536,147537],{"class":50},"line ",[37,147539,55],{"class":54},[37,147541,147542],{"class":50}," Line()\n",[37,147544,147545,147548,147551,147553,147556,147558,147561,147563,147566,147568,147571],{"class":39,"line":113},[37,147546,147547],{"class":50},"line.add_xaxis([",[37,147549,147550],{"class":185},"\"周一\"",[37,147552,12776],{"class":50},[37,147554,147555],{"class":185},"\"周二\"",[37,147557,12776],{"class":50},[37,147559,147560],{"class":185},"\"周三\"",[37,147562,12776],{"class":50},[37,147564,147565],{"class":185},"\"周四\"",[37,147567,12776],{"class":50},[37,147569,147570],{"class":185},"\"周五\"",[37,147572,101],{"class":50},[37,147574,147575,147578,147581,147583,147585,147587,147589,147591,147593,147595,147598,147600,147603],{"class":39,"line":189},[37,147576,147577],{"class":50},"line.add_yaxis(",[37,147579,147580],{"class":185},"\"销售额\"",[37,147582,77853],{"class":50},[37,147584,154],{"class":61},[37,147586,12776],{"class":50},[37,147588,1326],{"class":61},[37,147590,12776],{"class":50},[37,147592,1371],{"class":61},[37,147594,12776],{"class":50},[37,147596,147597],{"class":61},"150",[37,147599,12776],{"class":50},[37,147601,147602],{"class":61},"180",[37,147604,101],{"class":50},[37,147606,147607,147610,147613],{"class":39,"line":195},[37,147608,147609],{"class":50},"line.render(",[37,147611,147612],{"class":185},"\"line.html\"",[37,147614,280],{"class":50},[14,147616,147617,147618,147621],{},"运行后会生成 ",[34,147619,147620],{},"line.html","，用浏览器打开即可看到图表。",[14,147623,147624],{},"核心步骤：",[481,147626,147627,147630,147633,147636,147639],{},[484,147628,147629],{},"导入图表类。",[484,147631,147632],{},"创建图表对象。",[484,147634,147635],{},"添加 x 轴数据。",[484,147637,147638],{},"添加 y 轴数据。",[484,147640,147641],{},"渲染为 HTML。",[469,147643,147645],{"id":147644},"_105-全局配置","10.5 全局配置",[14,147647,147648,147649,147652],{},"常用配置在 ",[34,147650,147651],{},"pyecharts.options"," 中。",[27,147654,147656],{"className":29,"code":147655,"language":31,"meta":32,"style":32},"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",[34,147657,147658,147675,147685,147689,147697,147721,147749,147754,147773,147792,147810,147830,147834],{"__ignoreMap":32},[37,147659,147660,147662,147665,147667,147670,147672],{"class":39,"line":40},[37,147661,31076],{"class":54},[37,147663,147664],{"class":50}," pyecharts ",[37,147666,30732],{"class":54},[37,147668,147669],{"class":50}," options ",[37,147671,31722],{"class":54},[37,147673,147674],{"class":50}," opts\n",[37,147676,147677,147679,147681,147683],{"class":39,"line":47},[37,147678,31076],{"class":54},[37,147680,147523],{"class":50},[37,147682,30732],{"class":54},[37,147684,147528],{"class":50},[37,147686,147687],{"class":39,"line":104},[37,147688,2757],{"emptyLinePlaceholder":454},[37,147690,147691,147693,147695],{"class":39,"line":113},[37,147692,147537],{"class":50},[37,147694,55],{"class":54},[37,147696,147542],{"class":50},[37,147698,147699,147701,147703,147705,147707,147709,147711,147713,147715,147717,147719],{"class":39,"line":189},[37,147700,147547],{"class":50},[37,147702,147550],{"class":185},[37,147704,12776],{"class":50},[37,147706,147555],{"class":185},[37,147708,12776],{"class":50},[37,147710,147560],{"class":185},[37,147712,12776],{"class":50},[37,147714,147565],{"class":185},[37,147716,12776],{"class":50},[37,147718,147570],{"class":185},[37,147720,101],{"class":50},[37,147722,147723,147725,147727,147729,147731,147733,147735,147737,147739,147741,147743,147745,147747],{"class":39,"line":195},[37,147724,147577],{"class":50},[37,147726,147580],{"class":185},[37,147728,77853],{"class":50},[37,147730,154],{"class":61},[37,147732,12776],{"class":50},[37,147734,1326],{"class":61},[37,147736,12776],{"class":50},[37,147738,1371],{"class":61},[37,147740,12776],{"class":50},[37,147742,147597],{"class":61},[37,147744,12776],{"class":50},[37,147746,147602],{"class":61},[37,147748,101],{"class":50},[37,147750,147751],{"class":39,"line":201},[37,147752,147753],{"class":50},"line.set_global_opts(\n",[37,147755,147756,147759,147761,147764,147766,147768,147771],{"class":39,"line":207},[37,147757,147758],{"class":159},"    title_opts",[37,147760,55],{"class":54},[37,147762,147763],{"class":50},"opts.TitleOpts(",[37,147765,51743],{"class":159},[37,147767,55],{"class":54},[37,147769,147770],{"class":185},"\"一周销售额\"",[37,147772,38384],{"class":50},[37,147774,147775,147778,147780,147783,147785,147787,147790],{"class":39,"line":213},[37,147776,147777],{"class":159},"    xaxis_opts",[37,147779,55],{"class":54},[37,147781,147782],{"class":50},"opts.AxisOpts(",[37,147784,80145],{"class":159},[37,147786,55],{"class":54},[37,147788,147789],{"class":185},"\"日期\"",[37,147791,38384],{"class":50},[37,147793,147794,147797,147799,147801,147803,147805,147808],{"class":39,"line":218},[37,147795,147796],{"class":159},"    yaxis_opts",[37,147798,55],{"class":54},[37,147800,147782],{"class":50},[37,147802,80145],{"class":159},[37,147804,55],{"class":54},[37,147806,147807],{"class":185},"\"金额\"",[37,147809,38384],{"class":50},[37,147811,147812,147815,147817,147820,147823,147825,147828],{"class":39,"line":227},[37,147813,147814],{"class":159},"    tooltip_opts",[37,147816,55],{"class":54},[37,147818,147819],{"class":50},"opts.TooltipOpts(",[37,147821,147822],{"class":159},"trigger",[37,147824,55],{"class":54},[37,147826,147827],{"class":185},"\"axis\"",[37,147829,38384],{"class":50},[37,147831,147832],{"class":39,"line":232},[37,147833,280],{"class":50},[37,147835,147836,147838,147840],{"class":39,"line":238},[37,147837,147609],{"class":50},[37,147839,147612],{"class":185},[37,147841,280],{"class":50},[14,147843,147844],{},"常见全局配置：",[661,147846,147847,147856],{},[664,147848,147849],{},[667,147850,147851,147854],{},[670,147852,147853],{},"配置",[670,147855,102981],{},[708,147857,147858,147868,147878,147888,147898,147908],{},[667,147859,147860,147865],{},[713,147861,147862],{},[34,147863,147864],{},"TitleOpts",[713,147866,147867],{},"标题",[667,147869,147870,147875],{},[713,147871,147872],{},[34,147873,147874],{},"LegendOpts",[713,147876,147877],{},"图例",[667,147879,147880,147885],{},[713,147881,147882],{},[34,147883,147884],{},"TooltipOpts",[713,147886,147887],{},"提示框",[667,147889,147890,147895],{},[713,147891,147892],{},[34,147893,147894],{},"AxisOpts",[713,147896,147897],{},"坐标轴",[667,147899,147900,147905],{},[713,147901,147902],{},[34,147903,147904],{},"VisualMapOpts",[713,147906,147907],{},"视觉映射",[667,147909,147910,147915],{},[713,147911,147912],{},[34,147913,147914],{},"DataZoomOpts",[713,147916,147917],{},"区域缩放",[469,147919,147921],{"id":147920},"_106-系列配置","10.6 系列配置",[14,147923,147924],{},"系列配置作用于某一组数据。",[27,147926,147928],{"className":29,"code":147927,"language":31,"meta":32,"style":32},"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",[34,147929,147930,147935,147946,147975,147986,148005],{"__ignoreMap":32},[37,147931,147932],{"class":39,"line":40},[37,147933,147934],{"class":50},"line.add_yaxis(\n",[37,147936,147937,147940,147942,147944],{"class":39,"line":47},[37,147938,147939],{"class":159},"    series_name",[37,147941,55],{"class":54},[37,147943,147580],{"class":185},[37,147945,31805],{"class":50},[37,147947,147948,147951,147953,147955,147957,147959,147961,147963,147965,147967,147969,147971,147973],{"class":39,"line":104},[37,147949,147950],{"class":159},"    y_axis",[37,147952,55],{"class":54},[37,147954,1399],{"class":50},[37,147956,154],{"class":61},[37,147958,12776],{"class":50},[37,147960,1326],{"class":61},[37,147962,12776],{"class":50},[37,147964,1371],{"class":61},[37,147966,12776],{"class":50},[37,147968,147597],{"class":61},[37,147970,12776],{"class":50},[37,147972,147602],{"class":61},[37,147974,88171],{"class":50},[37,147976,147977,147980,147982,147984],{"class":39,"line":113},[37,147978,147979],{"class":159},"    is_smooth",[37,147981,55],{"class":54},[37,147983,31815],{"class":61},[37,147985,31805],{"class":50},[37,147987,147988,147991,147993,147996,147999,148001,148003],{"class":39,"line":189},[37,147989,147990],{"class":159},"    label_opts",[37,147992,55],{"class":54},[37,147994,147995],{"class":50},"opts.LabelOpts(",[37,147997,147998],{"class":159},"is_show",[37,148000,55],{"class":54},[37,148002,31815],{"class":61},[37,148004,38384],{"class":50},[37,148006,148007],{"class":39,"line":195},[37,148008,280],{"class":50},[14,148010,148011],{},"常用参数：",[481,148013,148014,148020,148026,148032,148038],{},[484,148015,148016,148019],{},[34,148017,148018],{},"series_name","：系列名称。",[484,148021,148022,148025],{},[34,148023,148024],{},"y_axis","：y 轴数据。",[484,148027,148028,148031],{},[34,148029,148030],{},"is_smooth","：是否平滑曲线。",[484,148033,148034,148037],{},[34,148035,148036],{},"label_opts","：标签配置。",[484,148039,148040,148043],{},[34,148041,148042],{},"symbol_size","：标记点大小。",[469,148045,148047],{"id":148046},"_107-多条折线","10.7 多条折线",[27,148049,148051],{"className":29,"code":148050,"language":31,"meta":32,"style":32},"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",[34,148052,148053,148067,148077,148081,148110,148114,148122,148127,148165,148202,148206,148223,148239,148243],{"__ignoreMap":32},[37,148054,148055,148057,148059,148061,148063,148065],{"class":39,"line":40},[37,148056,31076],{"class":54},[37,148058,147664],{"class":50},[37,148060,30732],{"class":54},[37,148062,147669],{"class":50},[37,148064,31722],{"class":54},[37,148066,147674],{"class":50},[37,148068,148069,148071,148073,148075],{"class":39,"line":47},[37,148070,31076],{"class":54},[37,148072,147523],{"class":50},[37,148074,30732],{"class":54},[37,148076,147528],{"class":50},[37,148078,148079],{"class":39,"line":104},[37,148080,2757],{"emptyLinePlaceholder":454},[37,148082,148083,148086,148088,148090,148092,148094,148096,148098,148100,148102,148104,148106,148108],{"class":39,"line":113},[37,148084,148085],{"class":50},"dates ",[37,148087,55],{"class":54},[37,148089,52562],{"class":50},[37,148091,147550],{"class":185},[37,148093,12776],{"class":50},[37,148095,147555],{"class":185},[37,148097,12776],{"class":50},[37,148099,147560],{"class":185},[37,148101,12776],{"class":50},[37,148103,147565],{"class":185},[37,148105,12776],{"class":50},[37,148107,147570],{"class":185},[37,148109,389],{"class":50},[37,148111,148112],{"class":39,"line":189},[37,148113,2757],{"emptyLinePlaceholder":454},[37,148115,148116,148118,148120],{"class":39,"line":195},[37,148117,147537],{"class":50},[37,148119,55],{"class":54},[37,148121,147542],{"class":50},[37,148123,148124],{"class":39,"line":201},[37,148125,148126],{"class":50},"line.add_xaxis(dates)\n",[37,148128,148129,148131,148134,148136,148138,148140,148143,148145,148147,148149,148151,148153,148155,148157,148159,148161,148163],{"class":39,"line":207},[37,148130,147577],{"class":50},[37,148132,148133],{"class":185},"\"线上销售\"",[37,148135,77853],{"class":50},[37,148137,154],{"class":61},[37,148139,12776],{"class":50},[37,148141,148142],{"class":61},"130",[37,148144,12776],{"class":50},[37,148146,1326],{"class":61},[37,148148,12776],{"class":50},[37,148150,21389],{"class":61},[37,148152,12776],{"class":50},[37,148154,2087],{"class":61},[37,148156,112487],{"class":50},[37,148158,148030],{"class":159},[37,148160,55],{"class":54},[37,148162,31815],{"class":61},[37,148164,280],{"class":50},[37,148166,148167,148169,148172,148174,148176,148178,148180,148182,148184,148186,148188,148190,148192,148194,148196,148198,148200],{"class":39,"line":213},[37,148168,147577],{"class":50},[37,148170,148171],{"class":185},"\"线下销售\"",[37,148173,77853],{"class":50},[37,148175,1122],{"class":61},[37,148177,12776],{"class":50},[37,148179,1371],{"class":61},[37,148181,12776],{"class":50},[37,148183,154],{"class":61},[37,148185,12776],{"class":50},[37,148187,1326],{"class":61},[37,148189,12776],{"class":50},[37,148191,147597],{"class":61},[37,148193,112487],{"class":50},[37,148195,148030],{"class":159},[37,148197,55],{"class":54},[37,148199,31815],{"class":61},[37,148201,280],{"class":50},[37,148203,148204],{"class":39,"line":218},[37,148205,147753],{"class":50},[37,148207,148208,148210,148212,148214,148216,148218,148221],{"class":39,"line":227},[37,148209,147758],{"class":159},[37,148211,55],{"class":54},[37,148213,147763],{"class":50},[37,148215,51743],{"class":159},[37,148217,55],{"class":54},[37,148219,148220],{"class":185},"\"线上线下销售趋势\"",[37,148222,38384],{"class":50},[37,148224,148225,148227,148229,148231,148233,148235,148237],{"class":39,"line":232},[37,148226,147814],{"class":159},[37,148228,55],{"class":54},[37,148230,147819],{"class":50},[37,148232,147822],{"class":159},[37,148234,55],{"class":54},[37,148236,147827],{"class":185},[37,148238,38384],{"class":50},[37,148240,148241],{"class":39,"line":238},[37,148242,280],{"class":50},[37,148244,148245,148247,148250],{"class":39,"line":244},[37,148246,147609],{"class":50},[37,148248,148249],{"class":185},"\"sales.html\"",[37,148251,280],{"class":50},[14,148253,148254],{},"多条折线适合比较不同指标或不同地区。",[469,148256,148258],{"id":148257},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148260,148261,148262,24960],{},"假设 ",[34,148263,148264],{},"sales.json",[27,148266,148268],{"className":147330,"code":148267,"language":146077,"meta":32,"style":32},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[34,148269,148270,148275,148307,148335,148363],{"__ignoreMap":32},[37,148271,148272],{"class":39,"line":40},[37,148273,148274],{"class":50},"[\n",[37,148276,148277,148280,148283,148285,148287,148289,148292,148294,148296,148298,148301,148303,148305],{"class":39,"line":47},[37,148278,148279],{"class":50},"  {",[37,148281,148282],{"class":61},"\"date\"",[37,148284,51773],{"class":50},[37,148286,147550],{"class":185},[37,148288,12776],{"class":50},[37,148290,148291],{"class":61},"\"online\"",[37,148293,51773],{"class":50},[37,148295,154],{"class":61},[37,148297,12776],{"class":50},[37,148299,148300],{"class":61},"\"offline\"",[37,148302,51773],{"class":50},[37,148304,1122],{"class":61},[37,148306,5279],{"class":50},[37,148308,148309,148311,148313,148315,148317,148319,148321,148323,148325,148327,148329,148331,148333],{"class":39,"line":104},[37,148310,148279],{"class":50},[37,148312,148282],{"class":61},[37,148314,51773],{"class":50},[37,148316,147555],{"class":185},[37,148318,12776],{"class":50},[37,148320,148291],{"class":61},[37,148322,51773],{"class":50},[37,148324,148142],{"class":61},[37,148326,12776],{"class":50},[37,148328,148300],{"class":61},[37,148330,51773],{"class":50},[37,148332,1371],{"class":61},[37,148334,5279],{"class":50},[37,148336,148337,148339,148341,148343,148345,148347,148349,148351,148353,148355,148357,148359,148361],{"class":39,"line":113},[37,148338,148279],{"class":50},[37,148340,148282],{"class":61},[37,148342,51773],{"class":50},[37,148344,147560],{"class":185},[37,148346,12776],{"class":50},[37,148348,148291],{"class":61},[37,148350,51773],{"class":50},[37,148352,1326],{"class":61},[37,148354,12776],{"class":50},[37,148356,148300],{"class":61},[37,148358,51773],{"class":50},[37,148360,154],{"class":61},[37,148362,1941],{"class":50},[37,148364,148365],{"class":39,"line":189},[37,148366,389],{"class":50},[14,148368,148369],{},"读取并绘图：",[27,148371,148373],{"className":29,"code":148372,"language":31,"meta":32,"style":32},"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",[34,148374,148375,148381,148395,148405,148409,148441,148454,148458,148466,148475,148484,148488,148500,148509,148518,148527,148531,148539,148543,148560,148577,148581,148598,148614,148618],{"__ignoreMap":32},[37,148376,148377,148379],{"class":39,"line":40},[37,148378,30732],{"class":54},[37,148380,147376],{"class":50},[37,148382,148383,148385,148387,148389,148391,148393],{"class":39,"line":47},[37,148384,31076],{"class":54},[37,148386,147664],{"class":50},[37,148388,30732],{"class":54},[37,148390,147669],{"class":50},[37,148392,31722],{"class":54},[37,148394,147674],{"class":50},[37,148396,148397,148399,148401,148403],{"class":39,"line":104},[37,148398,31076],{"class":54},[37,148400,147523],{"class":50},[37,148402,30732],{"class":54},[37,148404,147528],{"class":50},[37,148406,148407],{"class":39,"line":113},[37,148408,2757],{"emptyLinePlaceholder":454},[37,148410,148411,148413,148415,148417,148420,148422,148424,148426,148428,148430,148432,148434,148436,148439],{"class":39,"line":189},[37,148412,108118],{"class":54},[37,148414,147076],{"class":61},[37,148416,165],{"class":50},[37,148418,148419],{"class":185},"\"sales.json\"",[37,148421,12776],{"class":50},[37,148423,147086],{"class":185},[37,148425,12776],{"class":50},[37,148427,147091],{"class":159},[37,148429,55],{"class":54},[37,148431,147096],{"class":185},[37,148433,14055],{"class":50},[37,148435,31722],{"class":54},[37,148437,148438],{"class":159}," file",[37,148440,4089],{"class":50},[37,148442,148443,148445,148447,148450,148452],{"class":39,"line":195},[37,148444,101706],{"class":50},[37,148446,55],{"class":54},[37,148448,148449],{"class":50}," json.load(",[37,148451,45691],{"class":159},[37,148453,280],{"class":50},[37,148455,148456],{"class":39,"line":201},[37,148457,2757],{"emptyLinePlaceholder":454},[37,148459,148460,148462,148464],{"class":39,"line":207},[37,148461,148085],{"class":50},[37,148463,55],{"class":54},[37,148465,52174],{"class":50},[37,148467,148468,148471,148473],{"class":39,"line":213},[37,148469,148470],{"class":50},"online_sales ",[37,148472,55],{"class":54},[37,148474,52174],{"class":50},[37,148476,148477,148480,148482],{"class":39,"line":218},[37,148478,148479],{"class":50},"offline_sales ",[37,148481,55],{"class":54},[37,148483,52174],{"class":50},[37,148485,148486],{"class":39,"line":227},[37,148487,2757],{"emptyLinePlaceholder":454},[37,148489,148490,148492,148495,148497],{"class":39,"line":232},[37,148491,3375],{"class":54},[37,148493,148494],{"class":50}," item ",[37,148496,26385],{"class":54},[37,148498,148499],{"class":50}," data:\n",[37,148501,148502,148505,148507],{"class":39,"line":238},[37,148503,148504],{"class":50},"    dates.append(item[",[37,148506,148282],{"class":185},[37,148508,101],{"class":50},[37,148510,148511,148514,148516],{"class":39,"line":244},[37,148512,148513],{"class":50},"    online_sales.append(item[",[37,148515,148291],{"class":185},[37,148517,101],{"class":50},[37,148519,148520,148523,148525],{"class":39,"line":250},[37,148521,148522],{"class":50},"    offline_sales.append(item[",[37,148524,148300],{"class":185},[37,148526,101],{"class":50},[37,148528,148529],{"class":39,"line":256},[37,148530,2757],{"emptyLinePlaceholder":454},[37,148532,148533,148535,148537],{"class":39,"line":261},[37,148534,147537],{"class":50},[37,148536,55],{"class":54},[37,148538,147542],{"class":50},[37,148540,148541],{"class":39,"line":267},[37,148542,148126],{"class":50},[37,148544,148545,148547,148549,148552,148554,148556,148558],{"class":39,"line":283},[37,148546,147577],{"class":50},[37,148548,148133],{"class":185},[37,148550,148551],{"class":50},", online_sales, ",[37,148553,148030],{"class":159},[37,148555,55],{"class":54},[37,148557,31815],{"class":61},[37,148559,280],{"class":50},[37,148561,148562,148564,148566,148569,148571,148573,148575],{"class":39,"line":288},[37,148563,147577],{"class":50},[37,148565,148171],{"class":185},[37,148567,148568],{"class":50},", offline_sales, ",[37,148570,148030],{"class":159},[37,148572,55],{"class":54},[37,148574,31815],{"class":61},[37,148576,280],{"class":50},[37,148578,148579],{"class":39,"line":294},[37,148580,147753],{"class":50},[37,148582,148583,148585,148587,148589,148591,148593,148596],{"class":39,"line":300},[37,148584,147758],{"class":159},[37,148586,55],{"class":54},[37,148588,147763],{"class":50},[37,148590,51743],{"class":159},[37,148592,55],{"class":54},[37,148594,148595],{"class":185},"\"销售趋势\"",[37,148597,38384],{"class":50},[37,148599,148600,148602,148604,148606,148608,148610,148612],{"class":39,"line":306},[37,148601,147814],{"class":159},[37,148603,55],{"class":54},[37,148605,147819],{"class":50},[37,148607,147822],{"class":159},[37,148609,55],{"class":54},[37,148611,147827],{"class":185},[37,148613,38384],{"class":50},[37,148615,148616],{"class":39,"line":312},[37,148617,280],{"class":50},[37,148619,148620,148622,148624],{"class":39,"line":317},[37,148621,147609],{"class":50},[37,148623,148249],{"class":185},[37,148625,280],{"class":50},[469,148627,148629],{"id":148628},"_109-数据清洗","10.9 数据清洗",[14,148631,148632],{},"真实数据经常不整齐，需要清洗。",[14,148634,148635],{},"常见问题：",[481,148637,148638,148641,148644,148647],{},[484,148639,148640],{},"数字是字符串。",[484,148642,148643],{},"字段缺失。",[484,148645,148646],{},"空值。",[484,148648,148649],{},"日期格式不统一。",[14,148651,15476],{},[27,148653,148655],{"className":29,"code":148654,"language":31,"meta":32,"style":32},"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",[34,148656,148657,148666,148689,148709,148730,148734,148738,148746,148755,148759,148770,148784,148793,148798,148802,148810,148820,148824,148831],{"__ignoreMap":32},[37,148658,148659,148662,148664],{"class":39,"line":40},[37,148660,148661],{"class":50},"raw_data ",[37,148663,55],{"class":54},[37,148665,55783],{"class":50},[37,148667,148668,148671,148673,148675,148677,148679,148682,148684,148687],{"class":39,"line":47},[37,148669,148670],{"class":50},"    {",[37,148672,148282],{"class":185},[37,148674,51773],{"class":50},[37,148676,147550],{"class":185},[37,148678,12776],{"class":50},[37,148680,148681],{"class":185},"\"sales\"",[37,148683,51773],{"class":50},[37,148685,148686],{"class":185},"\"100\"",[37,148688,5279],{"class":50},[37,148690,148691,148693,148695,148697,148699,148701,148703,148705,148707],{"class":39,"line":104},[37,148692,148670],{"class":50},[37,148694,148282],{"class":185},[37,148696,51773],{"class":50},[37,148698,147555],{"class":185},[37,148700,12776],{"class":50},[37,148702,148681],{"class":185},[37,148704,51773],{"class":50},[37,148706,8000],{"class":185},[37,148708,5279],{"class":50},[37,148710,148711,148713,148715,148717,148719,148721,148723,148725,148728],{"class":39,"line":113},[37,148712,148670],{"class":50},[37,148714,148282],{"class":185},[37,148716,51773],{"class":50},[37,148718,147560],{"class":185},[37,148720,12776],{"class":50},[37,148722,148681],{"class":185},[37,148724,51773],{"class":50},[37,148726,148727],{"class":185},"\"120\"",[37,148729,5279],{"class":50},[37,148731,148732],{"class":39,"line":189},[37,148733,389],{"class":50},[37,148735,148736],{"class":39,"line":195},[37,148737,2757],{"emptyLinePlaceholder":454},[37,148739,148740,148742,148744],{"class":39,"line":201},[37,148741,148085],{"class":50},[37,148743,55],{"class":54},[37,148745,52174],{"class":50},[37,148747,148748,148751,148753],{"class":39,"line":207},[37,148749,148750],{"class":50},"sales ",[37,148752,55],{"class":54},[37,148754,52174],{"class":50},[37,148756,148757],{"class":39,"line":213},[37,148758,2757],{"emptyLinePlaceholder":454},[37,148760,148761,148763,148765,148767],{"class":39,"line":218},[37,148762,3375],{"class":54},[37,148764,148494],{"class":50},[37,148766,26385],{"class":54},[37,148768,148769],{"class":50}," raw_data:\n",[37,148771,148772,148775,148777,148780,148782],{"class":39,"line":227},[37,148773,148774],{"class":50},"    value ",[37,148776,55],{"class":54},[37,148778,148779],{"class":50}," item.get(",[37,148781,148681],{"class":185},[37,148783,280],{"class":50},[37,148785,148786,148788,148790],{"class":39,"line":232},[37,148787,3451],{"class":54},[37,148789,39267],{"class":54},[37,148791,148792],{"class":50}," value:\n",[37,148794,148795],{"class":39,"line":238},[37,148796,148797],{"class":54},"        continue\n",[37,148799,148800],{"class":39,"line":244},[37,148801,2757],{"emptyLinePlaceholder":454},[37,148803,148804,148806,148808],{"class":39,"line":250},[37,148805,148504],{"class":50},[37,148807,148282],{"class":185},[37,148809,101],{"class":50},[37,148811,148812,148815,148817],{"class":39,"line":256},[37,148813,148814],{"class":50},"    sales.append(",[37,148816,533],{"class":61},[37,148818,148819],{"class":50},"(value))\n",[37,148821,148822],{"class":39,"line":261},[37,148823,2757],{"emptyLinePlaceholder":454},[37,148825,148826,148828],{"class":39,"line":267},[37,148827,30755],{"class":61},[37,148829,148830],{"class":50},"(dates)\n",[37,148832,148833,148835],{"class":39,"line":283},[37,148834,30755],{"class":61},[37,148836,148837],{"class":50},"(sales)\n",[469,148839,148841],{"id":148840},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[27,148843,148845],{"className":29,"code":148844,"language":31,"meta":32,"style":32},"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",[34,148846,148847,148861,148871,148875,148883,148904,148926,148948,148970,148992,148996,149000,149022,149043,149047,149055,149059,149063,149073,149082,149092,149108,149112,149116,149133,149149,149165,149181,149191,149195],{"__ignoreMap":32},[37,148848,148849,148851,148853,148855,148857,148859],{"class":39,"line":40},[37,148850,31076],{"class":54},[37,148852,147664],{"class":50},[37,148854,30732],{"class":54},[37,148856,147669],{"class":50},[37,148858,31722],{"class":54},[37,148860,147674],{"class":50},[37,148862,148863,148865,148867,148869],{"class":39,"line":47},[37,148864,31076],{"class":54},[37,148866,147523],{"class":50},[37,148868,30732],{"class":54},[37,148870,147528],{"class":50},[37,148872,148873],{"class":39,"line":104},[37,148874,2757],{"emptyLinePlaceholder":454},[37,148876,148877,148879,148881],{"class":39,"line":113},[37,148878,148750],{"class":50},[37,148880,55],{"class":54},[37,148882,55783],{"class":50},[37,148884,148885,148887,148889,148891,148894,148896,148898,148900,148902],{"class":39,"line":189},[37,148886,148670],{"class":50},[37,148888,148282],{"class":185},[37,148890,51773],{"class":50},[37,148892,148893],{"class":185},"\"2024-10-01\"",[37,148895,12776],{"class":50},[37,148897,84419],{"class":185},[37,148899,51773],{"class":50},[37,148901,92358],{"class":61},[37,148903,5279],{"class":50},[37,148905,148906,148908,148910,148912,148915,148917,148919,148921,148924],{"class":39,"line":195},[37,148907,148670],{"class":50},[37,148909,148282],{"class":185},[37,148911,51773],{"class":50},[37,148913,148914],{"class":185},"\"2024-10-02\"",[37,148916,12776],{"class":50},[37,148918,84419],{"class":185},[37,148920,51773],{"class":50},[37,148922,148923],{"class":61},"1800",[37,148925,5279],{"class":50},[37,148927,148928,148930,148932,148934,148937,148939,148941,148943,148946],{"class":39,"line":201},[37,148929,148670],{"class":50},[37,148931,148282],{"class":185},[37,148933,51773],{"class":50},[37,148935,148936],{"class":185},"\"2024-10-03\"",[37,148938,12776],{"class":50},[37,148940,84419],{"class":185},[37,148942,51773],{"class":50},[37,148944,148945],{"class":61},"1500",[37,148947,5279],{"class":50},[37,148949,148950,148952,148954,148956,148959,148961,148963,148965,148968],{"class":39,"line":207},[37,148951,148670],{"class":50},[37,148953,148282],{"class":185},[37,148955,51773],{"class":50},[37,148957,148958],{"class":185},"\"2024-10-04\"",[37,148960,12776],{"class":50},[37,148962,84419],{"class":185},[37,148964,51773],{"class":50},[37,148966,148967],{"class":61},"2100",[37,148969,5279],{"class":50},[37,148971,148972,148974,148976,148978,148981,148983,148985,148987,148990],{"class":39,"line":213},[37,148973,148670],{"class":50},[37,148975,148282],{"class":185},[37,148977,51773],{"class":50},[37,148979,148980],{"class":185},"\"2024-10-05\"",[37,148982,12776],{"class":50},[37,148984,84419],{"class":185},[37,148986,51773],{"class":50},[37,148988,148989],{"class":61},"2600",[37,148991,5279],{"class":50},[37,148993,148994],{"class":39,"line":218},[37,148995,389],{"class":50},[37,148997,148998],{"class":39,"line":227},[37,148999,2757],{"emptyLinePlaceholder":454},[37,149001,149002,149004,149006,149009,149011,149013,149015,149017,149019],{"class":39,"line":232},[37,149003,148085],{"class":50},[37,149005,55],{"class":54},[37,149007,149008],{"class":50}," [item[",[37,149010,148282],{"class":185},[37,149012,4793],{"class":50},[37,149014,3375],{"class":54},[37,149016,148494],{"class":50},[37,149018,26385],{"class":54},[37,149020,149021],{"class":50}," sales]\n",[37,149023,149024,149027,149029,149031,149033,149035,149037,149039,149041],{"class":39,"line":238},[37,149025,149026],{"class":50},"amounts ",[37,149028,55],{"class":54},[37,149030,149008],{"class":50},[37,149032,84419],{"class":185},[37,149034,4793],{"class":50},[37,149036,3375],{"class":54},[37,149038,148494],{"class":50},[37,149040,26385],{"class":54},[37,149042,149021],{"class":50},[37,149044,149045],{"class":39,"line":244},[37,149046,2757],{"emptyLinePlaceholder":454},[37,149048,149049,149051,149053],{"class":39,"line":250},[37,149050,147537],{"class":50},[37,149052,55],{"class":54},[37,149054,147542],{"class":50},[37,149056,149057],{"class":39,"line":256},[37,149058,148126],{"class":50},[37,149060,149061],{"class":39,"line":261},[37,149062,147934],{"class":50},[37,149064,149065,149067,149069,149071],{"class":39,"line":267},[37,149066,147939],{"class":159},[37,149068,55],{"class":54},[37,149070,147580],{"class":185},[37,149072,31805],{"class":50},[37,149074,149075,149077,149079],{"class":39,"line":283},[37,149076,147950],{"class":159},[37,149078,55],{"class":54},[37,149080,149081],{"class":50},"amounts,\n",[37,149083,149084,149086,149088,149090],{"class":39,"line":288},[37,149085,147979],{"class":159},[37,149087,55],{"class":54},[37,149089,31815],{"class":61},[37,149091,31805],{"class":50},[37,149093,149094,149096,149098,149100,149102,149104,149106],{"class":39,"line":294},[37,149095,147990],{"class":159},[37,149097,55],{"class":54},[37,149099,147995],{"class":50},[37,149101,147998],{"class":159},[37,149103,55],{"class":54},[37,149105,31815],{"class":61},[37,149107,38384],{"class":50},[37,149109,149110],{"class":39,"line":300},[37,149111,280],{"class":50},[37,149113,149114],{"class":39,"line":306},[37,149115,147753],{"class":50},[37,149117,149118,149120,149122,149124,149126,149128,149131],{"class":39,"line":312},[37,149119,147758],{"class":159},[37,149121,55],{"class":54},[37,149123,147763],{"class":50},[37,149125,51743],{"class":159},[37,149127,55],{"class":54},[37,149129,149130],{"class":185},"\"每日销售额\"",[37,149132,38384],{"class":50},[37,149134,149135,149137,149139,149141,149143,149145,149147],{"class":39,"line":317},[37,149136,147777],{"class":159},[37,149138,55],{"class":54},[37,149140,147782],{"class":50},[37,149142,80145],{"class":159},[37,149144,55],{"class":54},[37,149146,147789],{"class":185},[37,149148,38384],{"class":50},[37,149150,149151,149153,149155,149157,149159,149161,149163],{"class":39,"line":323},[37,149152,147796],{"class":159},[37,149154,55],{"class":54},[37,149156,147782],{"class":50},[37,149158,80145],{"class":159},[37,149160,55],{"class":54},[37,149162,147807],{"class":185},[37,149164,38384],{"class":50},[37,149166,149167,149169,149171,149173,149175,149177,149179],{"class":39,"line":337},[37,149168,147814],{"class":159},[37,149170,55],{"class":54},[37,149172,147819],{"class":50},[37,149174,147822],{"class":159},[37,149176,55],{"class":54},[37,149178,147827],{"class":185},[37,149180,38384],{"class":50},[37,149182,149183,149186,149188],{"class":39,"line":342},[37,149184,149185],{"class":159},"    datazoom_opts",[37,149187,55],{"class":54},[37,149189,149190],{"class":50},"[opts.DataZoomOpts()],\n",[37,149192,149193],{"class":39,"line":347},[37,149194,280],{"class":50},[37,149196,149197,149199,149202],{"class":39,"line":352},[37,149198,147609],{"class":50},[37,149200,149201],{"class":185},"\"daily_sales.html\"",[37,149203,280],{"class":50},[14,149205,149206,149209],{},[34,149207,149208],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[469,149211,149213],{"id":149212},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,149215,149216],{},"如果数据结构如下：",[27,149218,149220],{"className":29,"code":149219,"language":31,"meta":32,"style":32},"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",[34,149221,149222,149230,149238,149260,149281,149286,149293,149313,149333,149337],{"__ignoreMap":32},[37,149223,149224,149226,149228],{"class":39,"line":40},[37,149225,101943],{"class":50},[37,149227,55],{"class":54},[37,149229,15913],{"class":50},[37,149231,149232,149235],{"class":39,"line":47},[37,149233,149234],{"class":185},"    \"北京\"",[37,149236,149237],{"class":50},": [\n",[37,149239,149240,149242,149244,149246,149249,149251,149254,149256,149258],{"class":39,"line":104},[37,149241,5266],{"class":50},[37,149243,148282],{"class":185},[37,149245,51773],{"class":50},[37,149247,149248],{"class":185},"\"2024-01-01\"",[37,149250,12776],{"class":50},[37,149252,149253],{"class":185},"\"confirm\"",[37,149255,51773],{"class":50},[37,149257,98],{"class":61},[37,149259,5279],{"class":50},[37,149261,149262,149264,149266,149268,149271,149273,149275,149277,149279],{"class":39,"line":113},[37,149263,5266],{"class":50},[37,149265,148282],{"class":185},[37,149267,51773],{"class":50},[37,149269,149270],{"class":185},"\"2024-01-02\"",[37,149272,12776],{"class":50},[37,149274,149253],{"class":185},[37,149276,51773],{"class":50},[37,149278,68],{"class":61},[37,149280,5279],{"class":50},[37,149282,149283],{"class":39,"line":189},[37,149284,149285],{"class":50},"    ],\n",[37,149287,149288,149291],{"class":39,"line":195},[37,149289,149290],{"class":185},"    \"上海\"",[37,149292,149237],{"class":50},[37,149294,149295,149297,149299,149301,149303,149305,149307,149309,149311],{"class":39,"line":201},[37,149296,5266],{"class":50},[37,149298,148282],{"class":185},[37,149300,51773],{"class":50},[37,149302,149248],{"class":185},[37,149304,12776],{"class":50},[37,149306,149253],{"class":185},[37,149308,51773],{"class":50},[37,149310,73],{"class":61},[37,149312,5279],{"class":50},[37,149314,149315,149317,149319,149321,149323,149325,149327,149329,149331],{"class":39,"line":207},[37,149316,5266],{"class":50},[37,149318,148282],{"class":185},[37,149320,51773],{"class":50},[37,149322,149270],{"class":185},[37,149324,12776],{"class":50},[37,149326,149253],{"class":185},[37,149328,51773],{"class":50},[37,149330,1034],{"class":61},[37,149332,5279],{"class":50},[37,149334,149335],{"class":39,"line":213},[37,149336,149285],{"class":50},[37,149338,149339],{"class":39,"line":218},[37,149340,1941],{"class":50},[14,149342,149343],{},"绘制多地区趋势：",[27,149345,149347],{"className":29,"code":149346,"language":31,"meta":32,"style":32},"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",[34,149348,149349,149363,149373,149377,149402,149406,149414,149418,149422,149434,149456,149469,149473,149477,149494,149510,149514],{"__ignoreMap":32},[37,149350,149351,149353,149355,149357,149359,149361],{"class":39,"line":40},[37,149352,31076],{"class":54},[37,149354,147664],{"class":50},[37,149356,30732],{"class":54},[37,149358,147669],{"class":50},[37,149360,31722],{"class":54},[37,149362,147674],{"class":50},[37,149364,149365,149367,149369,149371],{"class":39,"line":47},[37,149366,31076],{"class":54},[37,149368,147523],{"class":50},[37,149370,30732],{"class":54},[37,149372,147528],{"class":50},[37,149374,149375],{"class":39,"line":104},[37,149376,2757],{"emptyLinePlaceholder":454},[37,149378,149379,149381,149383,149385,149387,149389,149391,149393,149395,149398,149400],{"class":39,"line":113},[37,149380,148085],{"class":50},[37,149382,55],{"class":54},[37,149384,149008],{"class":50},[37,149386,148282],{"class":185},[37,149388,4793],{"class":50},[37,149390,3375],{"class":54},[37,149392,148494],{"class":50},[37,149394,26385],{"class":54},[37,149396,149397],{"class":50}," data[",[37,149399,69605],{"class":185},[37,149401,77862],{"class":50},[37,149403,149404],{"class":39,"line":189},[37,149405,2757],{"emptyLinePlaceholder":454},[37,149407,149408,149410,149412],{"class":39,"line":195},[37,149409,147537],{"class":50},[37,149411,55],{"class":54},[37,149413,147542],{"class":50},[37,149415,149416],{"class":39,"line":201},[37,149417,148126],{"class":50},[37,149419,149420],{"class":39,"line":207},[37,149421,2757],{"emptyLinePlaceholder":454},[37,149423,149424,149426,149429,149431],{"class":39,"line":213},[37,149425,3375],{"class":54},[37,149427,149428],{"class":50}," city, records ",[37,149430,26385],{"class":54},[37,149432,149433],{"class":50}," data.items():\n",[37,149435,149436,149439,149441,149443,149445,149447,149449,149451,149453],{"class":39,"line":218},[37,149437,149438],{"class":50},"    values ",[37,149440,55],{"class":54},[37,149442,149008],{"class":50},[37,149444,149253],{"class":185},[37,149446,4793],{"class":50},[37,149448,3375],{"class":54},[37,149450,148494],{"class":50},[37,149452,26385],{"class":54},[37,149454,149455],{"class":50}," records]\n",[37,149457,149458,149461,149463,149465,149467],{"class":39,"line":227},[37,149459,149460],{"class":50},"    line.add_yaxis(city, values, ",[37,149462,148030],{"class":159},[37,149464,55],{"class":54},[37,149466,31815],{"class":61},[37,149468,280],{"class":50},[37,149470,149471],{"class":39,"line":232},[37,149472,2757],{"emptyLinePlaceholder":454},[37,149474,149475],{"class":39,"line":238},[37,149476,147753],{"class":50},[37,149478,149479,149481,149483,149485,149487,149489,149492],{"class":39,"line":244},[37,149480,147758],{"class":159},[37,149482,55],{"class":54},[37,149484,147763],{"class":50},[37,149486,51743],{"class":159},[37,149488,55],{"class":54},[37,149490,149491],{"class":185},"\"多地区趋势图\"",[37,149493,38384],{"class":50},[37,149495,149496,149498,149500,149502,149504,149506,149508],{"class":39,"line":250},[37,149497,147814],{"class":159},[37,149499,55],{"class":54},[37,149501,147819],{"class":50},[37,149503,147822],{"class":159},[37,149505,55],{"class":54},[37,149507,147827],{"class":185},[37,149509,38384],{"class":50},[37,149511,149512],{"class":39,"line":256},[37,149513,280],{"class":50},[37,149515,149516,149518,149521],{"class":39,"line":261},[37,149517,147609],{"class":50},[37,149519,149520],{"class":185},"\"trend.html\"",[37,149522,280],{"class":50},[14,149524,149525],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[469,149527,149529],{"id":149528},"_1012-易错点","10.12 易错点",[481,149531,149532,149538,149544,149554,149560],{},[484,149533,149534,149537],{},[34,149535,149536],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[484,149539,149540,149543],{},[34,149541,149542],{},"render()"," 生成的是 HTML，不是图片。",[484,149545,149546,149547,149550,149551,28727],{},"JSON 字符串用 ",[34,149548,149549],{},"json.loads()","，JSON 文件用 ",[34,149552,149553],{},"json.load()",[484,149555,149556,149557,28727],{},"中文 JSON 保存时加 ",[34,149558,149559],{},"ensure_ascii=False",[484,149561,149562],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[469,149564,149566],{"id":149565},"_1013-本章练习","10.13 本章练习",[481,149568,149569,149572,149575,149578,149581],{},[484,149570,149571],{},"安装 pyecharts 并生成第一个折线图。",[484,149573,149574],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[484,149576,149577],{},"绘制两条折线，对比线上和线下销售额。",[484,149579,149580],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[484,149582,149583],{},"对含有空值的销售数据进行清洗后再绘图。",[446,149585,149586],{},"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":32,"searchDepth":47,"depth":47,"links":149588},[149589,149590,149591,149592,149593,149594,149595,149596,149597,149598,149599,149600,149601],{"id":147205,"depth":47,"text":147206},{"id":147280,"depth":47,"text":147281},{"id":147459,"depth":47,"text":147460},{"id":147510,"depth":47,"text":147511},{"id":147644,"depth":47,"text":147645},{"id":147920,"depth":47,"text":147921},{"id":148046,"depth":47,"text":148047},{"id":148257,"depth":47,"text":148258},{"id":148628,"depth":47,"text":148629},{"id":148840,"depth":47,"text":148841},{"id":149212,"depth":47,"text":149213},{"id":149528,"depth":47,"text":149529},{"id":149565,"depth":47,"text":149566},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147197,"description":451},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149608,"title":149609,"body":149610,"description":451,"extension":452,"meta":151970,"navigation":454,"path":151971,"seo":151972,"stem":151973,"__hash__":151974},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149611,"toc":151947},[149612,149615,149619,149622,149625,149701,149704,149795,149798,149802,149805,149849,149862,149866,149869,149936,149939,149943,149946,150030,150038,150042,150047,150188,150191,150202,150208,150214,150328,150332,150335,150338,150591,150594,150598,150601,150705,150708,150712,150863,150867,150874,150987,150991,150994,151100,151103,151107,151110,151141,151144,151249,151252,151256,151260,151270,151338,151342,151349,151413,151416,151420,151426,151522,151531,151535,151859,151868,151872,151900,151904,151944],[10,149613,149609],{"id":149614},"_11-面向对象基础",[469,149616,149618],{"id":149617},"_111-什么是面向对象","11.1 什么是面向对象",[14,149620,149621],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149623,149624],{},"面向过程：",[27,149626,149628],{"className":29,"code":149627,"language":31,"meta":32,"style":32},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[34,149629,149630,149639,149647,149651,149661,149692,149696],{"__ignoreMap":32},[37,149631,149632,149634,149636],{"class":39,"line":40},[37,149633,146821],{"class":50},[37,149635,55],{"class":54},[37,149637,149638],{"class":185}," \"小明\"\n",[37,149640,149641,149643,149645],{"class":39,"line":47},[37,149642,146831],{"class":50},[37,149644,55],{"class":54},[37,149646,146836],{"class":61},[37,149648,149649],{"class":39,"line":104},[37,149650,2757],{"emptyLinePlaceholder":454},[37,149652,149653,149655,149658],{"class":39,"line":113},[37,149654,32285],{"class":54},[37,149656,149657],{"class":2320}," introduce",[37,149659,149660],{"class":50},"(name, age):\n",[37,149662,149663,149665,149667,149669,149672,149674,149676,149678,149681,149683,149685,149687,149690],{"class":39,"line":189},[37,149664,31638],{"class":61},[37,149666,165],{"class":50},[37,149668,579],{"class":54},[37,149670,149671],{"class":185},"\"我叫",[37,149673,1404],{"class":61},[37,149675,80145],{"class":50},[37,149677,1454],{"class":61},[37,149679,149680],{"class":185},"，今年",[37,149682,1404],{"class":61},[37,149684,70557],{"class":50},[37,149686,1454],{"class":61},[37,149688,149689],{"class":185},"岁\"",[37,149691,280],{"class":50},[37,149693,149694],{"class":39,"line":195},[37,149695,2757],{"emptyLinePlaceholder":454},[37,149697,149698],{"class":39,"line":201},[37,149699,149700],{"class":50},"introduce(name, age)\n",[14,149702,149703],{},"面向对象：",[27,149705,149707],{"className":29,"code":149706,"language":31,"meta":32,"style":32},"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",[34,149708,149709,149717,149725,149754,149758,149762,149772,149781,149790],{"__ignoreMap":32},[37,149710,149711,149713,149715],{"class":39,"line":40},[37,149712,15035],{"class":54},[37,149714,8246],{"class":2320},[37,149716,4089],{"class":50},[37,149718,149719,149721,149723],{"class":39,"line":47},[37,149720,31140],{"class":54},[37,149722,149657],{"class":2320},[37,149724,31146],{"class":50},[37,149726,149727,149729,149731,149733,149735,149738,149740,149742,149744,149746,149748,149750,149752],{"class":39,"line":104},[37,149728,32789],{"class":61},[37,149730,165],{"class":50},[37,149732,579],{"class":54},[37,149734,149671],{"class":185},[37,149736,149737],{"class":61},"{self",[37,149739,80636],{"class":50},[37,149741,1454],{"class":61},[37,149743,149680],{"class":185},[37,149745,149737],{"class":61},[37,149747,80648],{"class":50},[37,149749,1454],{"class":61},[37,149751,149689],{"class":185},[37,149753,280],{"class":50},[37,149755,149756],{"class":39,"line":113},[37,149757,2757],{"emptyLinePlaceholder":454},[37,149759,149760],{"class":39,"line":189},[37,149761,2757],{"emptyLinePlaceholder":454},[37,149763,149764,149767,149769],{"class":39,"line":195},[37,149765,149766],{"class":50},"student ",[37,149768,55],{"class":54},[37,149770,149771],{"class":50}," Student()\n",[37,149773,149774,149777,149779],{"class":39,"line":201},[37,149775,149776],{"class":50},"student.name ",[37,149778,55],{"class":54},[37,149780,149638],{"class":185},[37,149782,149783,149786,149788],{"class":39,"line":207},[37,149784,149785],{"class":50},"student.age ",[37,149787,55],{"class":54},[37,149789,146836],{"class":61},[37,149791,149792],{"class":39,"line":213},[37,149793,149794],{"class":50},"student.introduce()\n",[14,149796,149797],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[469,149799,149801],{"id":149800},"_112-类和对象","11.2 类和对象",[14,149803,149804],{},"类是模板，对象是根据模板创建出来的具体实例。",[27,149806,149808],{"className":29,"code":149807,"language":31,"meta":32,"style":32},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[34,149809,149810,149818,149823,149827,149831,149840],{"__ignoreMap":32},[37,149811,149812,149814,149816],{"class":39,"line":40},[37,149813,15035],{"class":54},[37,149815,8246],{"class":2320},[37,149817,4089],{"class":50},[37,149819,149820],{"class":39,"line":47},[37,149821,149822],{"class":54},"    pass\n",[37,149824,149825],{"class":39,"line":104},[37,149826,2757],{"emptyLinePlaceholder":454},[37,149828,149829],{"class":39,"line":113},[37,149830,2757],{"emptyLinePlaceholder":454},[37,149832,149833,149836,149838],{"class":39,"line":189},[37,149834,149835],{"class":50},"student1 ",[37,149837,55],{"class":54},[37,149839,149771],{"class":50},[37,149841,149842,149845,149847],{"class":39,"line":195},[37,149843,149844],{"class":50},"student2 ",[37,149846,55],{"class":54},[37,149848,149771],{"class":50},[14,149850,149851,149854,149855,101303,149858,149861],{},[34,149852,149853],{},"Student"," 是类，",[34,149856,149857],{},"student1",[34,149859,149860],{},"student2"," 是对象。",[469,149863,149865],{"id":149864},"_113-属性","11.3 属性",[14,149867,149868],{},"属性是对象保存的数据。",[27,149870,149872],{"className":29,"code":149871,"language":31,"meta":32,"style":32},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[34,149873,149874,149882,149886,149890,149894,149902,149910,149918,149922,149929],{"__ignoreMap":32},[37,149875,149876,149878,149880],{"class":39,"line":40},[37,149877,15035],{"class":54},[37,149879,8246],{"class":2320},[37,149881,4089],{"class":50},[37,149883,149884],{"class":39,"line":47},[37,149885,149822],{"class":54},[37,149887,149888],{"class":39,"line":104},[37,149889,2757],{"emptyLinePlaceholder":454},[37,149891,149892],{"class":39,"line":113},[37,149893,2757],{"emptyLinePlaceholder":454},[37,149895,149896,149898,149900],{"class":39,"line":189},[37,149897,149766],{"class":50},[37,149899,55],{"class":54},[37,149901,149771],{"class":50},[37,149903,149904,149906,149908],{"class":39,"line":195},[37,149905,149776],{"class":50},[37,149907,55],{"class":54},[37,149909,149638],{"class":185},[37,149911,149912,149914,149916],{"class":39,"line":201},[37,149913,149785],{"class":50},[37,149915,55],{"class":54},[37,149917,146836],{"class":61},[37,149919,149920],{"class":39,"line":207},[37,149921,2757],{"emptyLinePlaceholder":454},[37,149923,149924,149926],{"class":39,"line":213},[37,149925,30755],{"class":61},[37,149927,149928],{"class":50},"(student.name)\n",[37,149930,149931,149933],{"class":39,"line":218},[37,149932,30755],{"class":61},[37,149934,149935],{"class":50},"(student.age)\n",[14,149937,149938],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[469,149940,149942],{"id":149941},"_114-方法","11.4 方法",[14,149944,149945],{},"类中的函数叫方法。",[27,149947,149948],{"className":29,"code":149706,"language":31,"meta":32,"style":32},[34,149949,149950,149958,149966,149994,149998,150002,150010,150018,150026],{"__ignoreMap":32},[37,149951,149952,149954,149956],{"class":39,"line":40},[37,149953,15035],{"class":54},[37,149955,8246],{"class":2320},[37,149957,4089],{"class":50},[37,149959,149960,149962,149964],{"class":39,"line":47},[37,149961,31140],{"class":54},[37,149963,149657],{"class":2320},[37,149965,31146],{"class":50},[37,149967,149968,149970,149972,149974,149976,149978,149980,149982,149984,149986,149988,149990,149992],{"class":39,"line":104},[37,149969,32789],{"class":61},[37,149971,165],{"class":50},[37,149973,579],{"class":54},[37,149975,149671],{"class":185},[37,149977,149737],{"class":61},[37,149979,80636],{"class":50},[37,149981,1454],{"class":61},[37,149983,149680],{"class":185},[37,149985,149737],{"class":61},[37,149987,80648],{"class":50},[37,149989,1454],{"class":61},[37,149991,149689],{"class":185},[37,149993,280],{"class":50},[37,149995,149996],{"class":39,"line":113},[37,149997,2757],{"emptyLinePlaceholder":454},[37,149999,150000],{"class":39,"line":189},[37,150001,2757],{"emptyLinePlaceholder":454},[37,150003,150004,150006,150008],{"class":39,"line":195},[37,150005,149766],{"class":50},[37,150007,55],{"class":54},[37,150009,149771],{"class":50},[37,150011,150012,150014,150016],{"class":39,"line":201},[37,150013,149776],{"class":50},[37,150015,55],{"class":54},[37,150017,149638],{"class":185},[37,150019,150020,150022,150024],{"class":39,"line":207},[37,150021,149785],{"class":50},[37,150023,55],{"class":54},[37,150025,146836],{"class":61},[37,150027,150028],{"class":39,"line":213},[37,150029,149794],{"class":50},[14,150031,150032,150034,150035,150037],{},[34,150033,31162],{}," 表示当前对象。调用方法时不需要手动传入 ",[34,150036,31162],{},"，Python 会自动传。",[469,150039,150041],{"id":150040},"_115-构造方法__init__","11.5 构造方法__init__",[14,150043,150044,150046],{},[34,150045,31168],{}," 在对象创建时自动执行，用于初始化属性。",[27,150048,150050],{"className":29,"code":150049,"language":31,"meta":32,"style":32},"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",[34,150051,150052,150060,150069,150081,150093,150104,150108,150116,150154,150158,150162,150184],{"__ignoreMap":32},[37,150053,150054,150056,150058],{"class":39,"line":40},[37,150055,15035],{"class":54},[37,150057,8246],{"class":2320},[37,150059,4089],{"class":50},[37,150061,150062,150064,150066],{"class":39,"line":47},[37,150063,31140],{"class":54},[37,150065,31143],{"class":61},[37,150067,150068],{"class":50},"(self, name, age, score):\n",[37,150070,150071,150073,150076,150078],{"class":39,"line":104},[37,150072,31184],{"class":61},[37,150074,150075],{"class":50},".name ",[37,150077,55],{"class":54},[37,150079,150080],{"class":50}," name\n",[37,150082,150083,150085,150088,150090],{"class":39,"line":113},[37,150084,31184],{"class":61},[37,150086,150087],{"class":50},".age ",[37,150089,55],{"class":54},[37,150091,150092],{"class":50}," age\n",[37,150094,150095,150097,150100,150102],{"class":39,"line":189},[37,150096,31184],{"class":61},[37,150098,150099],{"class":50},".score ",[37,150101,55],{"class":54},[37,150103,1955],{"class":50},[37,150105,150106],{"class":39,"line":195},[37,150107,2757],{"emptyLinePlaceholder":454},[37,150109,150110,150112,150114],{"class":39,"line":201},[37,150111,31140],{"class":54},[37,150113,149657],{"class":2320},[37,150115,31146],{"class":50},[37,150117,150118,150120,150122,150124,150126,150128,150130,150132,150134,150136,150138,150140,150143,150145,150148,150150,150152],{"class":39,"line":207},[37,150119,32789],{"class":61},[37,150121,165],{"class":50},[37,150123,579],{"class":54},[37,150125,149671],{"class":185},[37,150127,149737],{"class":61},[37,150129,80636],{"class":50},[37,150131,1454],{"class":61},[37,150133,149680],{"class":185},[37,150135,149737],{"class":61},[37,150137,80648],{"class":50},[37,150139,1454],{"class":61},[37,150141,150142],{"class":185},"岁，成绩",[37,150144,149737],{"class":61},[37,150146,150147],{"class":50},".score",[37,150149,1454],{"class":61},[37,150151,772],{"class":185},[37,150153,280],{"class":50},[37,150155,150156],{"class":39,"line":213},[37,150157,2757],{"emptyLinePlaceholder":454},[37,150159,150160],{"class":39,"line":218},[37,150161,2757],{"emptyLinePlaceholder":454},[37,150163,150164,150166,150168,150171,150174,150176,150178,150180,150182],{"class":39,"line":227},[37,150165,149766],{"class":50},[37,150167,55],{"class":54},[37,150169,150170],{"class":50}," Student(",[37,150172,150173],{"class":185},"\"小明\"",[37,150175,12776],{"class":50},[37,150177,1160],{"class":61},[37,150179,12776],{"class":50},[37,150181,1497],{"class":61},[37,150183,280],{"class":50},[37,150185,150186],{"class":39,"line":232},[37,150187,149794],{"class":50},[14,150189,150190],{},"构造方法的好处：",[481,150192,150193,150196,150199],{},[484,150194,150195],{},"创建对象时必须提供必要数据。",[484,150197,150198],{},"属性初始化集中，不容易漏。",[484,150200,150201],{},"对象状态更完整。",[469,150203,150205,150206],{"id":150204},"_116-str","11.6 ",[673,150207,1678],{},[14,150209,150210,150211,28727],{},"直接打印对象时，默认输出不直观。可以定义 ",[34,150212,150213],{},"__str__",[27,150215,150217],{"className":29,"code":150216,"language":31,"meta":32,"style":32},"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",[34,150218,150219,150227,150236,150246,150256,150260,150269,150297,150301,150305,150321],{"__ignoreMap":32},[37,150220,150221,150223,150225],{"class":39,"line":40},[37,150222,15035],{"class":54},[37,150224,8246],{"class":2320},[37,150226,4089],{"class":50},[37,150228,150229,150231,150233],{"class":39,"line":47},[37,150230,31140],{"class":54},[37,150232,31143],{"class":61},[37,150234,150235],{"class":50},"(self, name, age):\n",[37,150237,150238,150240,150242,150244],{"class":39,"line":104},[37,150239,31184],{"class":61},[37,150241,150075],{"class":50},[37,150243,55],{"class":54},[37,150245,150080],{"class":50},[37,150247,150248,150250,150252,150254],{"class":39,"line":113},[37,150249,31184],{"class":61},[37,150251,150087],{"class":50},[37,150253,55],{"class":54},[37,150255,150092],{"class":50},[37,150257,150258],{"class":39,"line":189},[37,150259,2757],{"emptyLinePlaceholder":454},[37,150261,150262,150264,150267],{"class":39,"line":195},[37,150263,31140],{"class":54},[37,150265,150266],{"class":61}," __str__",[37,150268,31146],{"class":50},[37,150270,150271,150273,150276,150279,150281,150283,150285,150288,150290,150292,150294],{"class":39,"line":201},[37,150272,15093],{"class":54},[37,150274,150275],{"class":54}," f",[37,150277,150278],{"class":185},"\"Student(name=",[37,150280,149737],{"class":61},[37,150282,80636],{"class":50},[37,150284,1454],{"class":61},[37,150286,150287],{"class":185},", age=",[37,150289,149737],{"class":61},[37,150291,80648],{"class":50},[37,150293,1454],{"class":61},[37,150295,150296],{"class":185},")\"\n",[37,150298,150299],{"class":39,"line":207},[37,150300,2757],{"emptyLinePlaceholder":454},[37,150302,150303],{"class":39,"line":213},[37,150304,2757],{"emptyLinePlaceholder":454},[37,150306,150307,150309,150311,150313,150315,150317,150319],{"class":39,"line":218},[37,150308,149766],{"class":50},[37,150310,55],{"class":54},[37,150312,150170],{"class":50},[37,150314,150173],{"class":185},[37,150316,12776],{"class":50},[37,150318,1160],{"class":61},[37,150320,280],{"class":50},[37,150322,150323,150325],{"class":39,"line":227},[37,150324,30755],{"class":61},[37,150326,150327],{"class":50},"(student)\n",[469,150329,150331],{"id":150330},"_117-封装","11.7 封装",[14,150333,150334],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150336,150337],{},"Python 中以双下划线开头的属性通常视为私有属性。",[27,150339,150341],{"className":29,"code":150340,"language":31,"meta":32,"style":32},"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",[34,150342,150343,150352,150361,150373,150385,150389,150398,150407,150411,150421,150434,150445,150450,150461,150465,150474,150486,150497,150501,150514,150525,150529,150540,150544,150548,150566,150575,150584],{"__ignoreMap":32},[37,150344,150345,150347,150350],{"class":39,"line":40},[37,150346,15035],{"class":54},[37,150348,150349],{"class":2320}," Account",[37,150351,4089],{"class":50},[37,150353,150354,150356,150358],{"class":39,"line":47},[37,150355,31140],{"class":54},[37,150357,31143],{"class":61},[37,150359,150360],{"class":50},"(self, owner, balance):\n",[37,150362,150363,150365,150368,150370],{"class":39,"line":104},[37,150364,31184],{"class":61},[37,150366,150367],{"class":50},".owner ",[37,150369,55],{"class":54},[37,150371,150372],{"class":50}," owner\n",[37,150374,150375,150377,150380,150382],{"class":39,"line":113},[37,150376,31184],{"class":61},[37,150378,150379],{"class":50},".__balance ",[37,150381,55],{"class":54},[37,150383,150384],{"class":50}," balance\n",[37,150386,150387],{"class":39,"line":189},[37,150388,2757],{"emptyLinePlaceholder":454},[37,150390,150391,150393,150396],{"class":39,"line":195},[37,150392,31140],{"class":54},[37,150394,150395],{"class":2320}," get_balance",[37,150397,31146],{"class":50},[37,150399,150400,150402,150404],{"class":39,"line":201},[37,150401,15093],{"class":54},[37,150403,39210],{"class":61},[37,150405,150406],{"class":50},".__balance\n",[37,150408,150409],{"class":39,"line":207},[37,150410,2757],{"emptyLinePlaceholder":454},[37,150412,150413,150415,150418],{"class":39,"line":213},[37,150414,31140],{"class":54},[37,150416,150417],{"class":2320}," deposit",[37,150419,150420],{"class":50},"(self, money):\n",[37,150422,150423,150425,150428,150430,150432],{"class":39,"line":218},[37,150424,2854],{"class":54},[37,150426,150427],{"class":50}," money ",[37,150429,1964],{"class":54},[37,150431,4443],{"class":61},[37,150433,4089],{"class":50},[37,150435,150436,150438,150440,150443],{"class":39,"line":227},[37,150437,34987],{"class":61},[37,150439,165],{"class":50},[37,150441,150442],{"class":185},"\"存款金额必须大于0\"",[37,150444,280],{"class":50},[37,150446,150447],{"class":39,"line":232},[37,150448,150449],{"class":54},"            return\n",[37,150451,150452,150454,150456,150458],{"class":39,"line":238},[37,150453,31184],{"class":61},[37,150455,150379],{"class":50},[37,150457,9818],{"class":54},[37,150459,150460],{"class":50}," money\n",[37,150462,150463],{"class":39,"line":244},[37,150464,2757],{"emptyLinePlaceholder":454},[37,150466,150467,150469,150472],{"class":39,"line":250},[37,150468,31140],{"class":54},[37,150470,150471],{"class":2320}," withdraw",[37,150473,150420],{"class":50},[37,150475,150476,150478,150480,150482,150484],{"class":39,"line":256},[37,150477,2854],{"class":54},[37,150479,150427],{"class":50},[37,150481,1964],{"class":54},[37,150483,4443],{"class":61},[37,150485,4089],{"class":50},[37,150487,150488,150490,150492,150495],{"class":39,"line":261},[37,150489,34987],{"class":61},[37,150491,165],{"class":50},[37,150493,150494],{"class":185},"\"取款金额必须大于0\"",[37,150496,280],{"class":50},[37,150498,150499],{"class":39,"line":267},[37,150500,150449],{"class":54},[37,150502,150503,150505,150507,150509,150511],{"class":39,"line":283},[37,150504,2854],{"class":54},[37,150506,150427],{"class":50},[37,150508,1468],{"class":54},[37,150510,39210],{"class":61},[37,150512,150513],{"class":50},".__balance:\n",[37,150515,150516,150518,150520,150523],{"class":39,"line":288},[37,150517,34987],{"class":61},[37,150519,165],{"class":50},[37,150521,150522],{"class":185},"\"余额不足\"",[37,150524,280],{"class":50},[37,150526,150527],{"class":39,"line":294},[37,150528,150449],{"class":54},[37,150530,150531,150533,150535,150538],{"class":39,"line":300},[37,150532,31184],{"class":61},[37,150534,150379],{"class":50},[37,150536,150537],{"class":54},"-=",[37,150539,150460],{"class":50},[37,150541,150542],{"class":39,"line":306},[37,150543,2757],{"emptyLinePlaceholder":454},[37,150545,150546],{"class":39,"line":312},[37,150547,2757],{"emptyLinePlaceholder":454},[37,150549,150550,150553,150555,150558,150560,150562,150564],{"class":39,"line":317},[37,150551,150552],{"class":50},"account ",[37,150554,55],{"class":54},[37,150556,150557],{"class":50}," Account(",[37,150559,150173],{"class":185},[37,150561,12776],{"class":50},[37,150563,6758],{"class":61},[37,150565,280],{"class":50},[37,150567,150568,150571,150573],{"class":39,"line":323},[37,150569,150570],{"class":50},"account.deposit(",[37,150572,2087],{"class":61},[37,150574,280],{"class":50},[37,150576,150577,150580,150582],{"class":39,"line":337},[37,150578,150579],{"class":50},"account.withdraw(",[37,150581,154],{"class":61},[37,150583,280],{"class":50},[37,150585,150586,150588],{"class":39,"line":342},[37,150587,30755],{"class":61},[37,150589,150590],{"class":50},"(account.get_balance())\n",[14,150592,150593],{},"封装的意义是避免外部随意修改内部状态。",[469,150595,150597],{"id":150596},"_118-继承","11.8 继承",[14,150599,150600],{},"继承可以让子类复用父类的属性和方法。",[27,150602,150604],{"className":29,"code":150603,"language":31,"meta":32,"style":32},"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",[34,150605,150606,150615,150624,150635,150639,150643,150657,150666,150677,150681,150685,150695,150700],{"__ignoreMap":32},[37,150607,150608,150610,150613],{"class":39,"line":40},[37,150609,15035],{"class":54},[37,150611,150612],{"class":2320}," Animal",[37,150614,4089],{"class":50},[37,150616,150617,150619,150622],{"class":39,"line":47},[37,150618,31140],{"class":54},[37,150620,150621],{"class":2320}," eat",[37,150623,31146],{"class":50},[37,150625,150626,150628,150630,150633],{"class":39,"line":104},[37,150627,32789],{"class":61},[37,150629,165],{"class":50},[37,150631,150632],{"class":185},"\"吃东西\"",[37,150634,280],{"class":50},[37,150636,150637],{"class":39,"line":113},[37,150638,2757],{"emptyLinePlaceholder":454},[37,150640,150641],{"class":39,"line":189},[37,150642,2757],{"emptyLinePlaceholder":454},[37,150644,150645,150647,150650,150652,150655],{"class":39,"line":195},[37,150646,15035],{"class":54},[37,150648,150649],{"class":2320}," Dog",[37,150651,165],{"class":50},[37,150653,150654],{"class":2320},"Animal",[37,150656,31125],{"class":50},[37,150658,150659,150661,150664],{"class":39,"line":201},[37,150660,31140],{"class":54},[37,150662,150663],{"class":2320}," bark",[37,150665,31146],{"class":50},[37,150667,150668,150670,150672,150675],{"class":39,"line":207},[37,150669,32789],{"class":61},[37,150671,165],{"class":50},[37,150673,150674],{"class":185},"\"汪汪\"",[37,150676,280],{"class":50},[37,150678,150679],{"class":39,"line":213},[37,150680,2757],{"emptyLinePlaceholder":454},[37,150682,150683],{"class":39,"line":218},[37,150684,2757],{"emptyLinePlaceholder":454},[37,150686,150687,150690,150692],{"class":39,"line":227},[37,150688,150689],{"class":50},"dog ",[37,150691,55],{"class":54},[37,150693,150694],{"class":50}," Dog()\n",[37,150696,150697],{"class":39,"line":232},[37,150698,150699],{"class":50},"dog.eat()\n",[37,150701,150702],{"class":39,"line":238},[37,150703,150704],{"class":50},"dog.bark()\n",[14,150706,150707],{},"子类可以扩展新方法，也可以重写父类方法。",[469,150709,150711],{"id":150710},"_119-方法重写","11.9 方法重写",[27,150713,150715],{"className":29,"code":150714,"language":31,"meta":32,"style":32},"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",[34,150716,150717,150725,150734,150745,150749,150753,150765,150773,150783,150787,150791,150804,150812,150823,150827,150831,150839,150849,150853,150858],{"__ignoreMap":32},[37,150718,150719,150721,150723],{"class":39,"line":40},[37,150720,15035],{"class":54},[37,150722,150612],{"class":2320},[37,150724,4089],{"class":50},[37,150726,150727,150729,150732],{"class":39,"line":47},[37,150728,31140],{"class":54},[37,150730,150731],{"class":2320}," speak",[37,150733,31146],{"class":50},[37,150735,150736,150738,150740,150743],{"class":39,"line":104},[37,150737,32789],{"class":61},[37,150739,165],{"class":50},[37,150741,150742],{"class":185},"\"动物叫\"",[37,150744,280],{"class":50},[37,150746,150747],{"class":39,"line":113},[37,150748,2757],{"emptyLinePlaceholder":454},[37,150750,150751],{"class":39,"line":189},[37,150752,2757],{"emptyLinePlaceholder":454},[37,150754,150755,150757,150759,150761,150763],{"class":39,"line":195},[37,150756,15035],{"class":54},[37,150758,150649],{"class":2320},[37,150760,165],{"class":50},[37,150762,150654],{"class":2320},[37,150764,31125],{"class":50},[37,150766,150767,150769,150771],{"class":39,"line":201},[37,150768,31140],{"class":54},[37,150770,150731],{"class":2320},[37,150772,31146],{"class":50},[37,150774,150775,150777,150779,150781],{"class":39,"line":207},[37,150776,32789],{"class":61},[37,150778,165],{"class":50},[37,150780,150674],{"class":185},[37,150782,280],{"class":50},[37,150784,150785],{"class":39,"line":213},[37,150786,2757],{"emptyLinePlaceholder":454},[37,150788,150789],{"class":39,"line":218},[37,150790,2757],{"emptyLinePlaceholder":454},[37,150792,150793,150795,150798,150800,150802],{"class":39,"line":227},[37,150794,15035],{"class":54},[37,150796,150797],{"class":2320}," Cat",[37,150799,165],{"class":50},[37,150801,150654],{"class":2320},[37,150803,31125],{"class":50},[37,150805,150806,150808,150810],{"class":39,"line":232},[37,150807,31140],{"class":54},[37,150809,150731],{"class":2320},[37,150811,31146],{"class":50},[37,150813,150814,150816,150818,150821],{"class":39,"line":238},[37,150815,32789],{"class":61},[37,150817,165],{"class":50},[37,150819,150820],{"class":185},"\"喵喵\"",[37,150822,280],{"class":50},[37,150824,150825],{"class":39,"line":244},[37,150826,2757],{"emptyLinePlaceholder":454},[37,150828,150829],{"class":39,"line":250},[37,150830,2757],{"emptyLinePlaceholder":454},[37,150832,150833,150835,150837],{"class":39,"line":256},[37,150834,150689],{"class":50},[37,150836,55],{"class":54},[37,150838,150694],{"class":50},[37,150840,150841,150844,150846],{"class":39,"line":261},[37,150842,150843],{"class":50},"cat ",[37,150845,55],{"class":54},[37,150847,150848],{"class":50}," Cat()\n",[37,150850,150851],{"class":39,"line":267},[37,150852,2757],{"emptyLinePlaceholder":454},[37,150854,150855],{"class":39,"line":283},[37,150856,150857],{"class":50},"dog.speak()\n",[37,150859,150860],{"class":39,"line":288},[37,150861,150862],{"class":50},"cat.speak()\n",[469,150864,150866],{"id":150865},"_1110-super","11.10 super",[14,150868,150869,150870,150873],{},"子类可以通过 ",[34,150871,150872],{},"super()"," 调用父类方法。",[27,150875,150877],{"className":29,"code":150876,"language":31,"meta":32,"style":32},"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",[34,150878,150879,150887,150896,150906,150910,150914,150926,150935,150946,150956,150960,150964,150980],{"__ignoreMap":32},[37,150880,150881,150883,150885],{"class":39,"line":40},[37,150882,15035],{"class":54},[37,150884,15910],{"class":2320},[37,150886,4089],{"class":50},[37,150888,150889,150891,150893],{"class":39,"line":47},[37,150890,31140],{"class":54},[37,150892,31143],{"class":61},[37,150894,150895],{"class":50},"(self, name):\n",[37,150897,150898,150900,150902,150904],{"class":39,"line":104},[37,150899,31184],{"class":61},[37,150901,150075],{"class":50},[37,150903,55],{"class":54},[37,150905,150080],{"class":50},[37,150907,150908],{"class":39,"line":113},[37,150909,2757],{"emptyLinePlaceholder":454},[37,150911,150912],{"class":39,"line":189},[37,150913,2757],{"emptyLinePlaceholder":454},[37,150915,150916,150918,150920,150922,150924],{"class":39,"line":195},[37,150917,15035],{"class":54},[37,150919,8246],{"class":2320},[37,150921,165],{"class":50},[37,150923,19387],{"class":2320},[37,150925,31125],{"class":50},[37,150927,150928,150930,150932],{"class":39,"line":201},[37,150929,31140],{"class":54},[37,150931,31143],{"class":61},[37,150933,150934],{"class":50},"(self, name, score):\n",[37,150936,150937,150939,150941,150943],{"class":39,"line":207},[37,150938,31156],{"class":61},[37,150940,17602],{"class":50},[37,150942,31168],{"class":61},[37,150944,150945],{"class":50},"(name)\n",[37,150947,150948,150950,150952,150954],{"class":39,"line":213},[37,150949,31184],{"class":61},[37,150951,150099],{"class":50},[37,150953,55],{"class":54},[37,150955,1955],{"class":50},[37,150957,150958],{"class":39,"line":218},[37,150959,2757],{"emptyLinePlaceholder":454},[37,150961,150962],{"class":39,"line":227},[37,150963,2757],{"emptyLinePlaceholder":454},[37,150965,150966,150968,150970,150972,150974,150976,150978],{"class":39,"line":232},[37,150967,149766],{"class":50},[37,150969,55],{"class":54},[37,150971,150170],{"class":50},[37,150973,150173],{"class":185},[37,150975,12776],{"class":50},[37,150977,1497],{"class":61},[37,150979,280],{"class":50},[37,150981,150982,150984],{"class":39,"line":238},[37,150983,30755],{"class":61},[37,150985,150986],{"class":50},"(student.name, student.score)\n",[469,150988,150990],{"id":150989},"_1111-多态","11.11 多态",[14,150992,150993],{},"多态指不同对象响应同一个方法，表现出不同结果。",[27,150995,150997],{"className":29,"code":150996,"language":31,"meta":32,"style":32},"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",[34,150998,150999,151007,151015,151025,151029,151033,151041,151049,151059,151063,151067,151077,151082,151086,151090,151095],{"__ignoreMap":32},[37,151000,151001,151003,151005],{"class":39,"line":40},[37,151002,15035],{"class":54},[37,151004,150649],{"class":2320},[37,151006,4089],{"class":50},[37,151008,151009,151011,151013],{"class":39,"line":47},[37,151010,31140],{"class":54},[37,151012,150731],{"class":2320},[37,151014,31146],{"class":50},[37,151016,151017,151019,151021,151023],{"class":39,"line":104},[37,151018,32789],{"class":61},[37,151020,165],{"class":50},[37,151022,150674],{"class":185},[37,151024,280],{"class":50},[37,151026,151027],{"class":39,"line":113},[37,151028,2757],{"emptyLinePlaceholder":454},[37,151030,151031],{"class":39,"line":189},[37,151032,2757],{"emptyLinePlaceholder":454},[37,151034,151035,151037,151039],{"class":39,"line":195},[37,151036,15035],{"class":54},[37,151038,150797],{"class":2320},[37,151040,4089],{"class":50},[37,151042,151043,151045,151047],{"class":39,"line":201},[37,151044,31140],{"class":54},[37,151046,150731],{"class":2320},[37,151048,31146],{"class":50},[37,151050,151051,151053,151055,151057],{"class":39,"line":207},[37,151052,32789],{"class":61},[37,151054,165],{"class":50},[37,151056,150820],{"class":185},[37,151058,280],{"class":50},[37,151060,151061],{"class":39,"line":213},[37,151062,2757],{"emptyLinePlaceholder":454},[37,151064,151065],{"class":39,"line":218},[37,151066,2757],{"emptyLinePlaceholder":454},[37,151068,151069,151071,151074],{"class":39,"line":227},[37,151070,32285],{"class":54},[37,151072,151073],{"class":2320}," make_sound",[37,151075,151076],{"class":50},"(animal):\n",[37,151078,151079],{"class":39,"line":232},[37,151080,151081],{"class":50},"    animal.speak()\n",[37,151083,151084],{"class":39,"line":238},[37,151085,2757],{"emptyLinePlaceholder":454},[37,151087,151088],{"class":39,"line":244},[37,151089,2757],{"emptyLinePlaceholder":454},[37,151091,151092],{"class":39,"line":250},[37,151093,151094],{"class":50},"make_sound(Dog())\n",[37,151096,151097],{"class":39,"line":256},[37,151098,151099],{"class":50},"make_sound(Cat())\n",[14,151101,151102],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[469,151104,151106],{"id":151105},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,151108,151109],{},"实例属性属于对象：",[27,151111,151113],{"className":29,"code":151112,"language":31,"meta":32,"style":32},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[34,151114,151115,151123,151131],{"__ignoreMap":32},[37,151116,151117,151119,151121],{"class":39,"line":40},[37,151118,15035],{"class":54},[37,151120,8246],{"class":2320},[37,151122,4089],{"class":50},[37,151124,151125,151127,151129],{"class":39,"line":47},[37,151126,31140],{"class":54},[37,151128,31143],{"class":61},[37,151130,150895],{"class":50},[37,151132,151133,151135,151137,151139],{"class":39,"line":104},[37,151134,31184],{"class":61},[37,151136,150075],{"class":50},[37,151138,55],{"class":54},[37,151140,150080],{"class":50},[14,151142,151143],{},"类属性属于类，所有对象共享：",[27,151145,151147],{"className":29,"code":151146,"language":31,"meta":32,"style":32},"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",[34,151148,151149,151157,151167,151171,151179,151189,151193,151197,151210,151224,151228,151235,151242],{"__ignoreMap":32},[37,151150,151151,151153,151155],{"class":39,"line":40},[37,151152,15035],{"class":54},[37,151154,8246],{"class":2320},[37,151156,4089],{"class":50},[37,151158,151159,151162,151164],{"class":39,"line":47},[37,151160,151161],{"class":50},"    school ",[37,151163,55],{"class":54},[37,151165,151166],{"class":185}," \"黑马学校\"\n",[37,151168,151169],{"class":39,"line":104},[37,151170,2757],{"emptyLinePlaceholder":454},[37,151172,151173,151175,151177],{"class":39,"line":113},[37,151174,31140],{"class":54},[37,151176,31143],{"class":61},[37,151178,150895],{"class":50},[37,151180,151181,151183,151185,151187],{"class":39,"line":189},[37,151182,31184],{"class":61},[37,151184,150075],{"class":50},[37,151186,55],{"class":54},[37,151188,150080],{"class":50},[37,151190,151191],{"class":39,"line":195},[37,151192,2757],{"emptyLinePlaceholder":454},[37,151194,151195],{"class":39,"line":201},[37,151196,2757],{"emptyLinePlaceholder":454},[37,151198,151199,151202,151204,151206,151208],{"class":39,"line":207},[37,151200,151201],{"class":50},"s1 ",[37,151203,55],{"class":54},[37,151205,150170],{"class":50},[37,151207,150173],{"class":185},[37,151209,280],{"class":50},[37,151211,151212,151215,151217,151219,151222],{"class":39,"line":213},[37,151213,151214],{"class":50},"s2 ",[37,151216,55],{"class":54},[37,151218,150170],{"class":50},[37,151220,151221],{"class":185},"\"小红\"",[37,151223,280],{"class":50},[37,151225,151226],{"class":39,"line":218},[37,151227,2757],{"emptyLinePlaceholder":454},[37,151229,151230,151232],{"class":39,"line":227},[37,151231,30755],{"class":61},[37,151233,151234],{"class":50},"(s1.school)\n",[37,151236,151237,151239],{"class":39,"line":232},[37,151238,30755],{"class":61},[37,151240,151241],{"class":50},"(s2.school)\n",[37,151243,151244,151246],{"class":39,"line":238},[37,151245,30755],{"class":61},[37,151247,151248],{"class":50},"(Student.school)\n",[14,151250,151251],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[469,151253,151255],{"id":151254},"_1113-类方法和静态方法","11.13 类方法和静态方法",[498,151257,151259],{"id":151258},"_11131-类方法","11.13.1 类方法",[14,151261,151262,151263,151266,151267,28727],{},"类方法使用 ",[34,151264,151265],{},"@classmethod","，第一个参数通常是 ",[34,151268,151269],{},"cls",[27,151271,151273],{"className":29,"code":151272,"language":31,"meta":32,"style":32},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[34,151274,151275,151283,151291,151295,151303,151313,151323,151327,151331],{"__ignoreMap":32},[37,151276,151277,151279,151281],{"class":39,"line":40},[37,151278,15035],{"class":54},[37,151280,8246],{"class":2320},[37,151282,4089],{"class":50},[37,151284,151285,151287,151289],{"class":39,"line":47},[37,151286,151161],{"class":50},[37,151288,55],{"class":54},[37,151290,151166],{"class":185},[37,151292,151293],{"class":39,"line":104},[37,151294,2757],{"emptyLinePlaceholder":454},[37,151296,151297,151300],{"class":39,"line":113},[37,151298,151299],{"class":2320},"    @",[37,151301,151302],{"class":61},"classmethod\n",[37,151304,151305,151307,151310],{"class":39,"line":189},[37,151306,31140],{"class":54},[37,151308,151309],{"class":2320}," get_school",[37,151311,151312],{"class":50},"(cls):\n",[37,151314,151315,151317,151320],{"class":39,"line":195},[37,151316,15093],{"class":54},[37,151318,151319],{"class":61}," cls",[37,151321,151322],{"class":50},".school\n",[37,151324,151325],{"class":39,"line":201},[37,151326,2757],{"emptyLinePlaceholder":454},[37,151328,151329],{"class":39,"line":207},[37,151330,2757],{"emptyLinePlaceholder":454},[37,151332,151333,151335],{"class":39,"line":213},[37,151334,30755],{"class":61},[37,151336,151337],{"class":50},"(Student.get_school())\n",[498,151339,151341],{"id":151340},"_11132-静态方法","11.13.2 静态方法",[14,151343,151344,151345,151348],{},"静态方法使用 ",[34,151346,151347],{},"@staticmethod","，不需要访问实例和类。",[27,151350,151352],{"className":29,"code":151351,"language":31,"meta":32,"style":32},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[34,151353,151354,151363,151370,151379,151390,151394,151398],{"__ignoreMap":32},[37,151355,151356,151358,151361],{"class":39,"line":40},[37,151357,15035],{"class":54},[37,151359,151360],{"class":2320}," MathUtils",[37,151362,4089],{"class":50},[37,151364,151365,151367],{"class":39,"line":47},[37,151366,151299],{"class":2320},[37,151368,151369],{"class":61},"staticmethod\n",[37,151371,151372,151374,151376],{"class":39,"line":104},[37,151373,31140],{"class":54},[37,151375,5558],{"class":2320},[37,151377,151378],{"class":50},"(a, b):\n",[37,151380,151381,151383,151385,151387],{"class":39,"line":113},[37,151382,15093],{"class":54},[37,151384,11210],{"class":50},[37,151386,993],{"class":54},[37,151388,151389],{"class":50}," b\n",[37,151391,151392],{"class":39,"line":189},[37,151393,2757],{"emptyLinePlaceholder":454},[37,151395,151396],{"class":39,"line":195},[37,151397,2757],{"emptyLinePlaceholder":454},[37,151399,151400,151402,151405,151407,151409,151411],{"class":39,"line":201},[37,151401,30755],{"class":61},[37,151403,151404],{"class":50},"(MathUtils.add(",[37,151406,332],{"class":61},[37,151408,12776],{"class":50},[37,151410,602],{"class":61},[37,151412,175],{"class":50},[14,151414,151415],{},"静态方法本质上是放在类命名空间里的普通函数。",[469,151417,151419],{"id":151418},"_1114-dataclass","11.14 dataclass",[14,151421,151422,151425],{},[34,151423,151424],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[27,151427,151429],{"className":29,"code":151428,"language":31,"meta":32,"style":32},"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",[34,151430,151431,151443,151447,151451,151456,151464,151472,151480,151488,151492,151496,151516],{"__ignoreMap":32},[37,151432,151433,151435,151438,151440],{"class":39,"line":40},[37,151434,31076],{"class":54},[37,151436,151437],{"class":50}," dataclasses ",[37,151439,30732],{"class":54},[37,151441,151442],{"class":50}," dataclass\n",[37,151444,151445],{"class":39,"line":47},[37,151446,2757],{"emptyLinePlaceholder":454},[37,151448,151449],{"class":39,"line":104},[37,151450,2757],{"emptyLinePlaceholder":454},[37,151452,151453],{"class":39,"line":113},[37,151454,151455],{"class":2320},"@dataclass\n",[37,151457,151458,151460,151462],{"class":39,"line":189},[37,151459,15035],{"class":54},[37,151461,8246],{"class":2320},[37,151463,4089],{"class":50},[37,151465,151466,151469],{"class":39,"line":195},[37,151467,151468],{"class":50},"    name: ",[37,151470,151471],{"class":61},"str\n",[37,151473,151474,151477],{"class":39,"line":201},[37,151475,151476],{"class":50},"    age: ",[37,151478,151479],{"class":61},"int\n",[37,151481,151482,151485],{"class":39,"line":207},[37,151483,151484],{"class":50},"    score: ",[37,151486,151487],{"class":61},"float\n",[37,151489,151490],{"class":39,"line":213},[37,151491,2757],{"emptyLinePlaceholder":454},[37,151493,151494],{"class":39,"line":218},[37,151495,2757],{"emptyLinePlaceholder":454},[37,151497,151498,151500,151502,151504,151506,151508,151510,151512,151514],{"class":39,"line":227},[37,151499,149766],{"class":50},[37,151501,55],{"class":54},[37,151503,150170],{"class":50},[37,151505,150173],{"class":185},[37,151507,12776],{"class":50},[37,151509,1160],{"class":61},[37,151511,12776],{"class":50},[37,151513,1497],{"class":61},[37,151515,280],{"class":50},[37,151517,151518,151520],{"class":39,"line":232},[37,151519,30755],{"class":61},[37,151521,150327],{"class":50},[14,151523,151524,151525,735,151527,151530],{},"它会自动生成 ",[34,151526,31168],{},[34,151528,151529],{},"__repr__"," 等方法。适合数据模型类。",[469,151532,151534],{"id":151533},"_1115-小案例学生类","11.15 小案例：学生类",[27,151536,151538],{"className":29,"code":151537,"language":31,"meta":32,"style":32},"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",[34,151539,151540,151548,151557,151569,151579,151589,151599,151603,151612,151625,151629,151638,151644,151656,151668,151680,151692,151696,151700,151706,151716,151725,151735,151743,151751,151760,151764,151768,151776,151812,151816,151820,151845,151852],{"__ignoreMap":32},[37,151541,151542,151544,151546],{"class":39,"line":40},[37,151543,15035],{"class":54},[37,151545,8246],{"class":2320},[37,151547,4089],{"class":50},[37,151549,151550,151552,151554],{"class":39,"line":47},[37,151551,31140],{"class":54},[37,151553,31143],{"class":61},[37,151555,151556],{"class":50},"(self, student_id, name, age, score):\n",[37,151558,151559,151561,151564,151566],{"class":39,"line":104},[37,151560,31184],{"class":61},[37,151562,151563],{"class":50},".student_id ",[37,151565,55],{"class":54},[37,151567,151568],{"class":50}," student_id\n",[37,151570,151571,151573,151575,151577],{"class":39,"line":113},[37,151572,31184],{"class":61},[37,151574,150075],{"class":50},[37,151576,55],{"class":54},[37,151578,150080],{"class":50},[37,151580,151581,151583,151585,151587],{"class":39,"line":189},[37,151582,31184],{"class":61},[37,151584,150087],{"class":50},[37,151586,55],{"class":54},[37,151588,150092],{"class":50},[37,151590,151591,151593,151595,151597],{"class":39,"line":195},[37,151592,31184],{"class":61},[37,151594,150099],{"class":50},[37,151596,55],{"class":54},[37,151598,1955],{"class":50},[37,151600,151601],{"class":39,"line":201},[37,151602,2757],{"emptyLinePlaceholder":454},[37,151604,151605,151607,151610],{"class":39,"line":207},[37,151606,31140],{"class":54},[37,151608,151609],{"class":2320}," is_passed",[37,151611,31146],{"class":50},[37,151613,151614,151616,151618,151620,151622],{"class":39,"line":213},[37,151615,15093],{"class":54},[37,151617,39210],{"class":61},[37,151619,150099],{"class":50},[37,151621,2075],{"class":54},[37,151623,151624],{"class":61}," 60\n",[37,151626,151627],{"class":39,"line":218},[37,151628,2757],{"emptyLinePlaceholder":454},[37,151630,151631,151633,151636],{"class":39,"line":227},[37,151632,31140],{"class":54},[37,151634,151635],{"class":2320}," to_dict",[37,151637,31146],{"class":50},[37,151639,151640,151642],{"class":39,"line":232},[37,151641,15093],{"class":54},[37,151643,15913],{"class":50},[37,151645,151646,151649,151651,151653],{"class":39,"line":238},[37,151647,151648],{"class":185},"            \"student_id\"",[37,151650,51773],{"class":50},[37,151652,31162],{"class":61},[37,151654,151655],{"class":50},".student_id,\n",[37,151657,151658,151661,151663,151665],{"class":39,"line":244},[37,151659,151660],{"class":185},"            \"name\"",[37,151662,51773],{"class":50},[37,151664,31162],{"class":61},[37,151666,151667],{"class":50},".name,\n",[37,151669,151670,151673,151675,151677],{"class":39,"line":250},[37,151671,151672],{"class":185},"            \"age\"",[37,151674,51773],{"class":50},[37,151676,31162],{"class":61},[37,151678,151679],{"class":50},".age,\n",[37,151681,151682,151685,151687,151689],{"class":39,"line":256},[37,151683,151684],{"class":185},"            \"score\"",[37,151686,51773],{"class":50},[37,151688,31162],{"class":61},[37,151690,151691],{"class":50},".score,\n",[37,151693,151694],{"class":39,"line":261},[37,151695,2886],{"class":50},[37,151697,151698],{"class":39,"line":267},[37,151699,2757],{"emptyLinePlaceholder":454},[37,151701,151702,151704],{"class":39,"line":283},[37,151703,151299],{"class":2320},[37,151705,151302],{"class":61},[37,151707,151708,151710,151713],{"class":39,"line":288},[37,151709,31140],{"class":54},[37,151711,151712],{"class":2320}," from_dict",[37,151714,151715],{"class":50},"(cls, data):\n",[37,151717,151718,151720,151722],{"class":39,"line":294},[37,151719,15093],{"class":54},[37,151721,151319],{"class":61},[37,151723,151724],{"class":50},"(\n",[37,151726,151727,151730,151733],{"class":39,"line":300},[37,151728,151729],{"class":50},"            data[",[37,151731,151732],{"class":185},"\"student_id\"",[37,151734,88171],{"class":50},[37,151736,151737,151739,151741],{"class":39,"line":306},[37,151738,151729],{"class":50},[37,151740,63015],{"class":185},[37,151742,88171],{"class":50},[37,151744,151745,151747,151749],{"class":39,"line":312},[37,151746,151729],{"class":50},[37,151748,69460],{"class":185},[37,151750,88171],{"class":50},[37,151752,151753,151755,151758],{"class":39,"line":317},[37,151754,151729],{"class":50},[37,151756,151757],{"class":185},"\"score\"",[37,151759,88171],{"class":50},[37,151761,151762],{"class":39,"line":323},[37,151763,38463],{"class":50},[37,151765,151766],{"class":39,"line":337},[37,151767,2757],{"emptyLinePlaceholder":454},[37,151769,151770,151772,151774],{"class":39,"line":342},[37,151771,31140],{"class":54},[37,151773,150266],{"class":61},[37,151775,31146],{"class":50},[37,151777,151778,151780,151782,151784,151786,151789,151791,151794,151796,151798,151800,151802,151804,151806,151808,151810],{"class":39,"line":347},[37,151779,15093],{"class":54},[37,151781,150275],{"class":54},[37,151783,772],{"class":185},[37,151785,149737],{"class":61},[37,151787,151788],{"class":50},".student_id",[37,151790,1454],{"class":61},[37,151792,151793],{"class":61}," {self",[37,151795,80636],{"class":50},[37,151797,1454],{"class":61},[37,151799,151793],{"class":61},[37,151801,80648],{"class":50},[37,151803,1454],{"class":61},[37,151805,151793],{"class":61},[37,151807,150147],{"class":50},[37,151809,1454],{"class":61},[37,151811,25475],{"class":185},[37,151813,151814],{"class":39,"line":352},[37,151815,2757],{"emptyLinePlaceholder":454},[37,151817,151818],{"class":39,"line":357},[37,151819,2757],{"emptyLinePlaceholder":454},[37,151821,151822,151824,151826,151828,151831,151833,151835,151837,151839,151841,151843],{"class":39,"line":362},[37,151823,149766],{"class":50},[37,151825,55],{"class":54},[37,151827,150170],{"class":50},[37,151829,151830],{"class":185},"\"001\"",[37,151832,12776],{"class":50},[37,151834,150173],{"class":185},[37,151836,12776],{"class":50},[37,151838,1160],{"class":61},[37,151840,12776],{"class":50},[37,151842,1497],{"class":61},[37,151844,280],{"class":50},[37,151846,151847,151849],{"class":39,"line":367},[37,151848,30755],{"class":61},[37,151850,151851],{"class":50},"(student.is_passed())\n",[37,151853,151854,151856],{"class":39,"line":373},[37,151855,30755],{"class":61},[37,151857,151858],{"class":50},"(student.to_dict())\n",[14,151860,151861,101303,151864,151867],{},[34,151862,151863],{},"to_dict()",[34,151865,151866],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[469,151869,151871],{"id":151870},"_1116-易错点","11.16 易错点",[481,151873,151874,151880,151886,151891,151894,151897],{},[484,151875,151876,151877,28727],{},"类名推荐使用大驼峰，如 ",[34,151878,151879],{},"StudentManager",[484,151881,151882,151883,151885],{},"方法第一个参数必须写 ",[34,151884,31162],{},"，调用时不用传。",[484,151887,151888,151890],{},[34,151889,31168],{}," 不是普通方法，它在创建对象时自动执行。",[484,151892,151893],{},"私有属性不是绝对安全，只是约定和名称改写。",[484,151895,151896],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[484,151898,151899],{},"类中方法太多时，说明职责可能过重。",[469,151901,151903],{"id":151902},"_1117-本章练习","11.17 本章练习",[481,151905,151906,151912,151918,151923,151936],{},[484,151907,151908,151909,151911],{},"定义 ",[34,151910,149853],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[484,151913,151908,151914,151917],{},[34,151915,151916],{},"Account"," 类，实现存款、取款、查询余额。",[484,151919,151908,151920,151922],{},[34,151921,17567],{}," 类，计算圆的周长和面积。",[484,151924,151908,151925,735,151928,151931,151932,151935],{},[34,151926,151927],{},"Dog",[34,151929,151930],{},"Cat"," 类，并用同一个函数调用它们的 ",[34,151933,151934],{},"speak()"," 方法。",[484,151937,104651,151938,151940,151941,28727],{},[34,151939,151424],{}," 定义一个商品类 ",[34,151942,151943],{},"Product",[446,151945,151946],{},"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":32,"searchDepth":47,"depth":47,"links":151948},[151949,151950,151951,151952,151953,151954,151956,151957,151958,151959,151960,151961,151962,151966,151967,151968,151969],{"id":149617,"depth":47,"text":149618},{"id":149800,"depth":47,"text":149801},{"id":149864,"depth":47,"text":149865},{"id":149941,"depth":47,"text":149942},{"id":150040,"depth":47,"text":150041},{"id":150204,"depth":47,"text":151955},"11.6 str",{"id":150330,"depth":47,"text":150331},{"id":150596,"depth":47,"text":150597},{"id":150710,"depth":47,"text":150711},{"id":150865,"depth":47,"text":150866},{"id":150989,"depth":47,"text":150990},{"id":151105,"depth":47,"text":151106},{"id":151254,"depth":47,"text":151255,"children":151963},[151964,151965],{"id":151258,"depth":104,"text":151259},{"id":151340,"depth":104,"text":151341},{"id":151418,"depth":47,"text":151419},{"id":151533,"depth":47,"text":151534},{"id":151870,"depth":47,"text":151871},{"id":151902,"depth":47,"text":151903},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149609,"description":451},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151976,"title":151977,"body":151978,"description":451,"extension":452,"meta":155291,"navigation":454,"path":155292,"seo":155293,"stem":155294,"__hash__":155295},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151979,"toc":155267},[151980,151983,151987,151990,151993,152022,152025,152033,152037,152041,152044,152067,152070,152076,152080,153526,153529,153550,153554,153557,153569,153572,153756,153759,153885,153888,153892,153896,154032,154036,154122,154126,154208,154212,154249,154253,154442,154446,154449,154679,154683,154686,154867,154870,154874,154877,154883,154886,154912,154916,154919,154933,154936,154961,154964,154978,154981,154998,155001,155018,155021,155038,155042,155068,155072,155095,155099,155102,155104,155110,155112,155133,155136,155142,155148,155152,155155,155231,155234,155238,155264],[10,151981,151977],{"id":151982},"_12-综合案例与复习路线",[469,151984,151986],{"id":151985},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151988,151989],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151991,151992],{},"一个合格的入门综合项目最好覆盖：",[481,151994,151995,151998,152001,152004,152007,152010,152013,152016,152019],{},[484,151996,151997],{},"输入输出。",[484,151999,152000],{},"判断和循环。",[484,152002,152003],{},"函数拆分。",[484,152005,152006],{},"列表、字典等容器。",[484,152008,152009],{},"文件持久化。",[484,152011,152012],{},"异常处理。",[484,152014,152015],{},"模块拆分。",[484,152017,152018],{},"可选：面向对象。",[484,152020,152021],{},"可选：数据可视化。",[14,152023,152024],{},"本章整理两个方向：",[481,152026,152027,152030],{},[484,152028,152029],{},"学生管理系统。",[484,152031,152032],{},"销售数据统计和可视化。",[469,152034,152036],{"id":152035},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[498,152038,152040],{"id":152039},"_1221-需求","12.2.1 需求",[14,152042,152043],{},"实现一个命令行学生管理系统：",[481,152045,152046,152049,152052,152055,152058,152061,152064],{},[484,152047,152048],{},"添加学生。",[484,152050,152051],{},"删除学生。",[484,152053,152054],{},"修改学生。",[484,152056,152057],{},"查询学生。",[484,152059,152060],{},"显示所有学生。",[484,152062,152063],{},"保存到 JSON 文件。",[484,152065,152066],{},"程序启动时自动读取 JSON 文件。",[14,152068,152069],{},"学生字段：",[27,152071,152074],{"className":152072,"code":152073,"language":5536,"meta":32},[5534],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[34,152075,152073],{"__ignoreMap":32},[469,152077,152079],{"id":152078},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[27,152081,152083],{"className":29,"code":152082,"language":31,"meta":32,"style":32},"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",[34,152084,152085,152091,152101,152105,152119,152123,152127,152136,152148,152154,152158,152164,152195,152205,152212,152223,152229,152233,152237,152247,152278,152304,152308,152312,152321,152332,152343,152354,152365,152376,152387,152398,152402,152406,152416,152428,152444,152451,152458,152462,152466,152476,152484,152491,152504,152514,152525,152529,152533,152542,152550,152556,152568,152576,152587,152591,152595,152604,152620,152624,152631,152642,152647,152651,152667,152682,152697,152701,152706,152714,152722,152730,152738,152742,152747,152758,152762,152766,152775,152790,152800,152804,152816,152827,152831,152835,152840,152844,152855,152859,152863,152872,152887,152895,152899,152911,152921,152925,152929,152944,152957,152970,152974,152987,152999,153011,153015,153019,153030,153034,153038,153047,153062,153070,153074,153086,153096,153100,153104,153109,153113,153117,153127,153133,153155,153174,153193,153212,153217,153221,153225,153234,153242,153253,153257,153261,153287,153297,153302,153306,153310,153318,153328,153332,153340,153345,153361,153365,153379,153384,153398,153403,153416,153421,153434,153439,153452,153457,153470,153481,153485,153491,153502,153506,153510,153522],{"__ignoreMap":32},[37,152086,152087,152089],{"class":39,"line":40},[37,152088,30732],{"class":54},[37,152090,147376],{"class":50},[37,152092,152093,152095,152097,152099],{"class":39,"line":47},[37,152094,31076],{"class":54},[37,152096,108596],{"class":50},[37,152098,30732],{"class":54},[37,152100,108601],{"class":50},[37,152102,152103],{"class":39,"line":104},[37,152104,2757],{"emptyLinePlaceholder":454},[37,152106,152107,152110,152112,152114,152117],{"class":39,"line":113},[37,152108,152109],{"class":61},"DATA_FILE",[37,152111,13905],{"class":54},[37,152113,108830],{"class":50},[37,152115,152116],{"class":185},"\"students.json\"",[37,152118,280],{"class":50},[37,152120,152121],{"class":39,"line":189},[37,152122,2757],{"emptyLinePlaceholder":454},[37,152124,152125],{"class":39,"line":195},[37,152126,2757],{"emptyLinePlaceholder":454},[37,152128,152129,152131,152134],{"class":39,"line":201},[37,152130,32285],{"class":54},[37,152132,152133],{"class":2320}," load_students",[37,152135,32291],{"class":50},[37,152137,152138,152140,152142,152145],{"class":39,"line":207},[37,152139,3451],{"class":54},[37,152141,39267],{"class":54},[37,152143,152144],{"class":61}," DATA_FILE",[37,152146,152147],{"class":50},".exists():\n",[37,152149,152150,152152],{"class":39,"line":213},[37,152151,15093],{"class":54},[37,152153,52174],{"class":50},[37,152155,152156],{"class":39,"line":218},[37,152157,2757],{"emptyLinePlaceholder":454},[37,152159,152160,152162],{"class":39,"line":227},[37,152161,126069],{"class":54},[37,152163,4089],{"class":50},[37,152165,152166,152169,152171,152173,152175,152177,152179,152181,152183,152185,152187,152189,152191,152193],{"class":39,"line":232},[37,152167,152168],{"class":54},"        with",[37,152170,147076],{"class":61},[37,152172,165],{"class":50},[37,152174,152109],{"class":61},[37,152176,12776],{"class":50},[37,152178,147086],{"class":185},[37,152180,12776],{"class":50},[37,152182,147091],{"class":159},[37,152184,55],{"class":54},[37,152186,147096],{"class":185},[37,152188,14055],{"class":50},[37,152190,31722],{"class":54},[37,152192,148438],{"class":159},[37,152194,4089],{"class":50},[37,152196,152197,152199,152201,152203],{"class":39,"line":238},[37,152198,16073],{"class":54},[37,152200,148449],{"class":50},[37,152202,45691],{"class":159},[37,152204,280],{"class":50},[37,152206,152207,152209],{"class":39,"line":244},[37,152208,126097],{"class":54},[37,152210,152211],{"class":50}," json.JSONDecodeError:\n",[37,152213,152214,152216,152218,152221],{"class":39,"line":250},[37,152215,32789],{"class":61},[37,152217,165],{"class":50},[37,152219,152220],{"class":185},"\"数据文件格式错误，已使用空数据启动\"",[37,152222,280],{"class":50},[37,152224,152225,152227],{"class":39,"line":256},[37,152226,15093],{"class":54},[37,152228,52174],{"class":50},[37,152230,152231],{"class":39,"line":261},[37,152232,2757],{"emptyLinePlaceholder":454},[37,152234,152235],{"class":39,"line":267},[37,152236,2757],{"emptyLinePlaceholder":454},[37,152238,152239,152241,152244],{"class":39,"line":283},[37,152240,32285],{"class":54},[37,152242,152243],{"class":2320}," save_students",[37,152245,152246],{"class":50},"(students):\n",[37,152248,152249,152251,152253,152255,152257,152259,152262,152264,152266,152268,152270,152272,152274,152276],{"class":39,"line":288},[37,152250,34515],{"class":54},[37,152252,147076],{"class":61},[37,152254,165],{"class":50},[37,152256,152109],{"class":61},[37,152258,12776],{"class":50},[37,152260,152261],{"class":185},"\"w\"",[37,152263,12776],{"class":50},[37,152265,147091],{"class":159},[37,152267,55],{"class":54},[37,152269,147096],{"class":185},[37,152271,14055],{"class":50},[37,152273,31722],{"class":54},[37,152275,148438],{"class":159},[37,152277,4089],{"class":50},[37,152279,152280,152283,152285,152287,152289,152291,152293,152295,152298,152300,152302],{"class":39,"line":294},[37,152281,152282],{"class":50},"        json.dump(students, ",[37,152284,45691],{"class":159},[37,152286,12776],{"class":50},[37,152288,147422],{"class":159},[37,152290,55],{"class":54},[37,152292,34324],{"class":61},[37,152294,12776],{"class":50},[37,152296,152297],{"class":159},"indent",[37,152299,55],{"class":54},[37,152301,602],{"class":61},[37,152303,280],{"class":50},[37,152305,152306],{"class":39,"line":300},[37,152307,2757],{"emptyLinePlaceholder":454},[37,152309,152310],{"class":39,"line":306},[37,152311,2757],{"emptyLinePlaceholder":454},[37,152313,152314,152316,152319],{"class":39,"line":312},[37,152315,32285],{"class":54},[37,152317,152318],{"class":2320}," show_menu",[37,152320,32291],{"class":50},[37,152322,152323,152325,152327,152330],{"class":39,"line":317},[37,152324,31638],{"class":61},[37,152326,165],{"class":50},[37,152328,152329],{"class":185},"\"====== 学生管理系统 ======\"",[37,152331,280],{"class":50},[37,152333,152334,152336,152338,152341],{"class":39,"line":323},[37,152335,31638],{"class":61},[37,152337,165],{"class":50},[37,152339,152340],{"class":185},"\"1. 添加学生\"",[37,152342,280],{"class":50},[37,152344,152345,152347,152349,152352],{"class":39,"line":337},[37,152346,31638],{"class":61},[37,152348,165],{"class":50},[37,152350,152351],{"class":185},"\"2. 删除学生\"",[37,152353,280],{"class":50},[37,152355,152356,152358,152360,152363],{"class":39,"line":342},[37,152357,31638],{"class":61},[37,152359,165],{"class":50},[37,152361,152362],{"class":185},"\"3. 修改学生\"",[37,152364,280],{"class":50},[37,152366,152367,152369,152371,152374],{"class":39,"line":347},[37,152368,31638],{"class":61},[37,152370,165],{"class":50},[37,152372,152373],{"class":185},"\"4. 查询学生\"",[37,152375,280],{"class":50},[37,152377,152378,152380,152382,152385],{"class":39,"line":352},[37,152379,31638],{"class":61},[37,152381,165],{"class":50},[37,152383,152384],{"class":185},"\"5. 显示所有学生\"",[37,152386,280],{"class":50},[37,152388,152389,152391,152393,152396],{"class":39,"line":357},[37,152390,31638],{"class":61},[37,152392,165],{"class":50},[37,152394,152395],{"class":185},"\"0. 退出系统\"",[37,152397,280],{"class":50},[37,152399,152400],{"class":39,"line":362},[37,152401,2757],{"emptyLinePlaceholder":454},[37,152403,152404],{"class":39,"line":367},[37,152405,2757],{"emptyLinePlaceholder":454},[37,152407,152408,152410,152413],{"class":39,"line":373},[37,152409,32285],{"class":54},[37,152411,152412],{"class":2320}," find_student",[37,152414,152415],{"class":50},"(students, student_id):\n",[37,152417,152418,152420,152423,152425],{"class":39,"line":392},[37,152419,3551],{"class":54},[37,152421,152422],{"class":50}," student ",[37,152424,26385],{"class":54},[37,152426,152427],{"class":50}," students:\n",[37,152429,152430,152432,152435,152437,152439,152441],{"class":39,"line":398},[37,152431,2854],{"class":54},[37,152433,152434],{"class":50}," student[",[37,152436,151732],{"class":185},[37,152438,4793],{"class":50},[37,152440,3299],{"class":54},[37,152442,152443],{"class":50}," student_id:\n",[37,152445,152446,152448],{"class":39,"line":409},[37,152447,16073],{"class":54},[37,152449,152450],{"class":50}," student\n",[37,152452,152453,152455],{"class":39,"line":415},[37,152454,4440],{"class":54},[37,152456,152457],{"class":61}," None\n",[37,152459,152460],{"class":39,"line":420},[37,152461,2757],{"emptyLinePlaceholder":454},[37,152463,152464],{"class":39,"line":425},[37,152465,2757],{"emptyLinePlaceholder":454},[37,152467,152468,152470,152473],{"class":39,"line":431},[37,152469,32285],{"class":54},[37,152471,152472],{"class":2320}," input_int",[37,152474,152475],{"class":50},"(prompt):\n",[37,152477,152478,152480,152482],{"class":39,"line":436},[37,152479,2608],{"class":54},[37,152481,95577],{"class":61},[37,152483,4089],{"class":50},[37,152485,152486,152489],{"class":39,"line":442},[37,152487,152488],{"class":54},"        try",[37,152490,4089],{"class":50},[37,152492,152493,152495,152497,152499,152501],{"class":39,"line":8374},[37,152494,16073],{"class":54},[37,152496,2739],{"class":61},[37,152498,165],{"class":50},[37,152500,54157],{"class":61},[37,152502,152503],{"class":50},"(prompt))\n",[37,152505,152506,152509,152512],{"class":39,"line":8386},[37,152507,152508],{"class":54},"        except",[37,152510,152511],{"class":61}," ValueError",[37,152513,4089],{"class":50},[37,152515,152516,152518,152520,152523],{"class":39,"line":8398},[37,152517,34987],{"class":61},[37,152519,165],{"class":50},[37,152521,152522],{"class":185},"\"请输入整数\"",[37,152524,280],{"class":50},[37,152526,152527],{"class":39,"line":10057},[37,152528,2757],{"emptyLinePlaceholder":454},[37,152530,152531],{"class":39,"line":10082},[37,152532,2757],{"emptyLinePlaceholder":454},[37,152534,152535,152537,152540],{"class":39,"line":10105},[37,152536,32285],{"class":54},[37,152538,152539],{"class":2320}," input_float",[37,152541,152475],{"class":50},[37,152543,152544,152546,152548],{"class":39,"line":10129},[37,152545,2608],{"class":54},[37,152547,95577],{"class":61},[37,152549,4089],{"class":50},[37,152551,152552,152554],{"class":39,"line":10134},[37,152553,152488],{"class":54},[37,152555,4089],{"class":50},[37,152557,152558,152560,152562,152564,152566],{"class":39,"line":10139},[37,152559,16073],{"class":54},[37,152561,110082],{"class":61},[37,152563,165],{"class":50},[37,152565,54157],{"class":61},[37,152567,152503],{"class":50},[37,152569,152570,152572,152574],{"class":39,"line":10144},[37,152571,152508],{"class":54},[37,152573,152511],{"class":61},[37,152575,4089],{"class":50},[37,152577,152578,152580,152582,152585],{"class":39,"line":10153},[37,152579,34987],{"class":61},[37,152581,165],{"class":50},[37,152583,152584],{"class":185},"\"请输入数字\"",[37,152586,280],{"class":50},[37,152588,152589],{"class":39,"line":10158},[37,152590,2757],{"emptyLinePlaceholder":454},[37,152592,152593],{"class":39,"line":10164},[37,152594,2757],{"emptyLinePlaceholder":454},[37,152596,152597,152599,152602],{"class":39,"line":10185},[37,152598,32285],{"class":54},[37,152600,152601],{"class":2320}," add_student",[37,152603,152246],{"class":50},[37,152605,152606,152609,152611,152613,152615,152618],{"class":39,"line":10191},[37,152607,152608],{"class":50},"    student_id ",[37,152610,55],{"class":54},[37,152612,60941],{"class":61},[37,152614,165],{"class":50},[37,152616,152617],{"class":185},"\"请输入学号:\"",[37,152619,280],{"class":50},[37,152621,152622],{"class":39,"line":10205},[37,152623,2757],{"emptyLinePlaceholder":454},[37,152625,152626,152628],{"class":39,"line":10211},[37,152627,3451],{"class":54},[37,152629,152630],{"class":50}," find_student(students, student_id):\n",[37,152632,152633,152635,152637,152640],{"class":39,"line":10238},[37,152634,32789],{"class":61},[37,152636,165],{"class":50},[37,152638,152639],{"class":185},"\"学号已存在\"",[37,152641,280],{"class":50},[37,152643,152644],{"class":39,"line":10247},[37,152645,152646],{"class":54},"        return\n",[37,152648,152649],{"class":39,"line":10253},[37,152650,2757],{"emptyLinePlaceholder":454},[37,152652,152653,152656,152658,152660,152662,152665],{"class":39,"line":10261},[37,152654,152655],{"class":50},"    name ",[37,152657,55],{"class":54},[37,152659,60941],{"class":61},[37,152661,165],{"class":50},[37,152663,152664],{"class":185},"\"请输入姓名:\"",[37,152666,280],{"class":50},[37,152668,152669,152672,152674,152677,152680],{"class":39,"line":10266},[37,152670,152671],{"class":50},"    age ",[37,152673,55],{"class":54},[37,152675,152676],{"class":50}," input_int(",[37,152678,152679],{"class":185},"\"请输入年龄:\"",[37,152681,280],{"class":50},[37,152683,152684,152687,152689,152692,152695],{"class":39,"line":16945},[37,152685,152686],{"class":50},"    score ",[37,152688,55],{"class":54},[37,152690,152691],{"class":50}," input_float(",[37,152693,152694],{"class":185},"\"请输入成绩:\"",[37,152696,280],{"class":50},[37,152698,152699],{"class":39,"line":16951},[37,152700,2757],{"emptyLinePlaceholder":454},[37,152702,152703],{"class":39,"line":16974},[37,152704,152705],{"class":50},"    students.append({\n",[37,152707,152708,152711],{"class":39,"line":16980},[37,152709,152710],{"class":185},"        \"student_id\"",[37,152712,152713],{"class":50},": student_id,\n",[37,152715,152716,152719],{"class":39,"line":17003},[37,152717,152718],{"class":185},"        \"name\"",[37,152720,152721],{"class":50},": name,\n",[37,152723,152724,152727],{"class":39,"line":17017},[37,152725,152726],{"class":185},"        \"age\"",[37,152728,152729],{"class":50},": age,\n",[37,152731,152732,152735],{"class":39,"line":17037},[37,152733,152734],{"class":185},"        \"score\"",[37,152736,152737],{"class":50},": score,\n",[37,152739,152740],{"class":39,"line":17043},[37,152741,33798],{"class":50},[37,152743,152744],{"class":39,"line":17054},[37,152745,152746],{"class":50},"    save_students(students)\n",[37,152748,152749,152751,152753,152756],{"class":39,"line":17077},[37,152750,31638],{"class":61},[37,152752,165],{"class":50},[37,152754,152755],{"class":185},"\"添加成功\"",[37,152757,280],{"class":50},[37,152759,152760],{"class":39,"line":17099},[37,152761,2757],{"emptyLinePlaceholder":454},[37,152763,152764],{"class":39,"line":17104},[37,152765,2757],{"emptyLinePlaceholder":454},[37,152767,152768,152770,152773],{"class":39,"line":17110},[37,152769,32285],{"class":54},[37,152771,152772],{"class":2320}," delete_student",[37,152774,152246],{"class":50},[37,152776,152777,152779,152781,152783,152785,152788],{"class":39,"line":17124},[37,152778,152608],{"class":50},[37,152780,55],{"class":54},[37,152782,60941],{"class":61},[37,152784,165],{"class":50},[37,152786,152787],{"class":185},"\"请输入要删除的学号:\"",[37,152789,280],{"class":50},[37,152791,152792,152795,152797],{"class":39,"line":17137},[37,152793,152794],{"class":50},"    student ",[37,152796,55],{"class":54},[37,152798,152799],{"class":50}," find_student(students, student_id)\n",[37,152801,152802],{"class":39,"line":17142},[37,152803,2757],{"emptyLinePlaceholder":454},[37,152805,152806,152808,152810,152812,152814],{"class":39,"line":17156},[37,152807,3451],{"class":54},[37,152809,152422],{"class":50},[37,152811,39264],{"class":54},[37,152813,39270],{"class":61},[37,152815,4089],{"class":50},[37,152817,152818,152820,152822,152825],{"class":39,"line":17161},[37,152819,32789],{"class":61},[37,152821,165],{"class":50},[37,152823,152824],{"class":185},"\"学生不存在\"",[37,152826,280],{"class":50},[37,152828,152829],{"class":39,"line":17167},[37,152830,152646],{"class":54},[37,152832,152833],{"class":39,"line":17172},[37,152834,2757],{"emptyLinePlaceholder":454},[37,152836,152837],{"class":39,"line":17186},[37,152838,152839],{"class":50},"    students.remove(student)\n",[37,152841,152842],{"class":39,"line":17191},[37,152843,152746],{"class":50},[37,152845,152846,152848,152850,152853],{"class":39,"line":17196},[37,152847,31638],{"class":61},[37,152849,165],{"class":50},[37,152851,152852],{"class":185},"\"删除成功\"",[37,152854,280],{"class":50},[37,152856,152857],{"class":39,"line":17210},[37,152858,2757],{"emptyLinePlaceholder":454},[37,152860,152861],{"class":39,"line":17222},[37,152862,2757],{"emptyLinePlaceholder":454},[37,152864,152865,152867,152870],{"class":39,"line":17227},[37,152866,32285],{"class":54},[37,152868,152869],{"class":2320}," update_student",[37,152871,152246],{"class":50},[37,152873,152874,152876,152878,152880,152882,152885],{"class":39,"line":17240},[37,152875,152608],{"class":50},[37,152877,55],{"class":54},[37,152879,60941],{"class":61},[37,152881,165],{"class":50},[37,152883,152884],{"class":185},"\"请输入要修改的学号:\"",[37,152886,280],{"class":50},[37,152888,152889,152891,152893],{"class":39,"line":17245},[37,152890,152794],{"class":50},[37,152892,55],{"class":54},[37,152894,152799],{"class":50},[37,152896,152897],{"class":39,"line":17250},[37,152898,2757],{"emptyLinePlaceholder":454},[37,152900,152901,152903,152905,152907,152909],{"class":39,"line":17255},[37,152902,3451],{"class":54},[37,152904,152422],{"class":50},[37,152906,39264],{"class":54},[37,152908,39270],{"class":61},[37,152910,4089],{"class":50},[37,152912,152913,152915,152917,152919],{"class":39,"line":17268},[37,152914,32789],{"class":61},[37,152916,165],{"class":50},[37,152918,152824],{"class":185},[37,152920,280],{"class":50},[37,152922,152923],{"class":39,"line":17273},[37,152924,152646],{"class":54},[37,152926,152927],{"class":39,"line":32971},[37,152928,2757],{"emptyLinePlaceholder":454},[37,152930,152931,152933,152935,152937,152939,152942],{"class":39,"line":32977},[37,152932,152655],{"class":50},[37,152934,55],{"class":54},[37,152936,60941],{"class":61},[37,152938,165],{"class":50},[37,152940,152941],{"class":185},"\"请输入新姓名:\"",[37,152943,280],{"class":50},[37,152945,152946,152948,152950,152952,152955],{"class":39,"line":32983},[37,152947,152671],{"class":50},[37,152949,55],{"class":54},[37,152951,152676],{"class":50},[37,152953,152954],{"class":185},"\"请输入新年龄:\"",[37,152956,280],{"class":50},[37,152958,152959,152961,152963,152965,152968],{"class":39,"line":32989},[37,152960,152686],{"class":50},[37,152962,55],{"class":54},[37,152964,152691],{"class":50},[37,152966,152967],{"class":185},"\"请输入新成绩:\"",[37,152969,280],{"class":50},[37,152971,152972],{"class":39,"line":32995},[37,152973,2757],{"emptyLinePlaceholder":454},[37,152975,152976,152979,152981,152983,152985],{"class":39,"line":33006},[37,152977,152978],{"class":50},"    student[",[37,152980,63015],{"class":185},[37,152982,4793],{"class":50},[37,152984,55],{"class":54},[37,152986,150080],{"class":50},[37,152988,152989,152991,152993,152995,152997],{"class":39,"line":33012},[37,152990,152978],{"class":50},[37,152992,69460],{"class":185},[37,152994,4793],{"class":50},[37,152996,55],{"class":54},[37,152998,150092],{"class":50},[37,153000,153001,153003,153005,153007,153009],{"class":39,"line":33032},[37,153002,152978],{"class":50},[37,153004,151757],{"class":185},[37,153006,4793],{"class":50},[37,153008,55],{"class":54},[37,153010,1955],{"class":50},[37,153012,153013],{"class":39,"line":33038},[37,153014,2757],{"emptyLinePlaceholder":454},[37,153016,153017],{"class":39,"line":33049},[37,153018,152746],{"class":50},[37,153020,153021,153023,153025,153028],{"class":39,"line":33055},[37,153022,31638],{"class":61},[37,153024,165],{"class":50},[37,153026,153027],{"class":185},"\"修改成功\"",[37,153029,280],{"class":50},[37,153031,153032],{"class":39,"line":33061},[37,153033,2757],{"emptyLinePlaceholder":454},[37,153035,153036],{"class":39,"line":33067},[37,153037,2757],{"emptyLinePlaceholder":454},[37,153039,153040,153042,153045],{"class":39,"line":33073},[37,153041,32285],{"class":54},[37,153043,153044],{"class":2320}," query_student",[37,153046,152246],{"class":50},[37,153048,153049,153051,153053,153055,153057,153060],{"class":39,"line":33079},[37,153050,152608],{"class":50},[37,153052,55],{"class":54},[37,153054,60941],{"class":61},[37,153056,165],{"class":50},[37,153058,153059],{"class":185},"\"请输入要查询的学号:\"",[37,153061,280],{"class":50},[37,153063,153064,153066,153068],{"class":39,"line":33085},[37,153065,152794],{"class":50},[37,153067,55],{"class":54},[37,153069,152799],{"class":50},[37,153071,153072],{"class":39,"line":33091},[37,153073,2757],{"emptyLinePlaceholder":454},[37,153075,153076,153078,153080,153082,153084],{"class":39,"line":33111},[37,153077,3451],{"class":54},[37,153079,152422],{"class":50},[37,153081,39264],{"class":54},[37,153083,39270],{"class":61},[37,153085,4089],{"class":50},[37,153087,153088,153090,153092,153094],{"class":39,"line":33117},[37,153089,32789],{"class":61},[37,153091,165],{"class":50},[37,153093,152824],{"class":185},[37,153095,280],{"class":50},[37,153097,153098],{"class":39,"line":33133},[37,153099,152646],{"class":54},[37,153101,153102],{"class":39,"line":33139},[37,153103,2757],{"emptyLinePlaceholder":454},[37,153105,153106],{"class":39,"line":33153},[37,153107,153108],{"class":50},"    print_student(student)\n",[37,153110,153111],{"class":39,"line":33159},[37,153112,2757],{"emptyLinePlaceholder":454},[37,153114,153115],{"class":39,"line":33174},[37,153116,2757],{"emptyLinePlaceholder":454},[37,153118,153119,153121,153124],{"class":39,"line":33180},[37,153120,32285],{"class":54},[37,153122,153123],{"class":2320}," print_student",[37,153125,153126],{"class":50},"(student):\n",[37,153128,153129,153131],{"class":39,"line":33189},[37,153130,31638],{"class":61},[37,153132,151724],{"class":50},[37,153134,153135,153138,153140,153142,153145,153148,153150,153153],{"class":39,"line":33195},[37,153136,153137],{"class":54},"        f",[37,153139,772],{"class":185},[37,153141,1404],{"class":61},[37,153143,153144],{"class":50},"student[",[37,153146,153147],{"class":185},"'student_id'",[37,153149,1448],{"class":50},[37,153151,153152],{"class":61},"}\\t",[37,153154,25475],{"class":185},[37,153156,153157,153159,153161,153163,153165,153168,153170,153172],{"class":39,"line":33204},[37,153158,153137],{"class":54},[37,153160,772],{"class":185},[37,153162,1404],{"class":61},[37,153164,153144],{"class":50},[37,153166,153167],{"class":185},"'name'",[37,153169,1448],{"class":50},[37,153171,153152],{"class":61},[37,153173,25475],{"class":185},[37,153175,153176,153178,153180,153182,153184,153187,153189,153191],{"class":39,"line":33210},[37,153177,153137],{"class":54},[37,153179,772],{"class":185},[37,153181,1404],{"class":61},[37,153183,153144],{"class":50},[37,153185,153186],{"class":185},"'age'",[37,153188,1448],{"class":50},[37,153190,153152],{"class":61},[37,153192,25475],{"class":185},[37,153194,153195,153197,153199,153201,153203,153206,153208,153210],{"class":39,"line":33216},[37,153196,153137],{"class":54},[37,153198,772],{"class":185},[37,153200,1404],{"class":61},[37,153202,153144],{"class":50},[37,153204,153205],{"class":185},"'score'",[37,153207,1448],{"class":50},[37,153209,1454],{"class":61},[37,153211,25475],{"class":185},[37,153213,153214],{"class":39,"line":33225},[37,153215,153216],{"class":50},"    )\n",[37,153218,153219],{"class":39,"line":33231},[37,153220,2757],{"emptyLinePlaceholder":454},[37,153222,153223],{"class":39,"line":33242},[37,153224,2757],{"emptyLinePlaceholder":454},[37,153226,153227,153229,153232],{"class":39,"line":33248},[37,153228,32285],{"class":54},[37,153230,153231],{"class":2320}," show_all_students",[37,153233,152246],{"class":50},[37,153235,153236,153238,153240],{"class":39,"line":33267},[37,153237,3451],{"class":54},[37,153239,39267],{"class":54},[37,153241,152427],{"class":50},[37,153243,153244,153246,153248,153251],{"class":39,"line":33273},[37,153245,32789],{"class":61},[37,153247,165],{"class":50},[37,153249,153250],{"class":185},"\"暂无学生\"",[37,153252,280],{"class":50},[37,153254,153255],{"class":39,"line":33284},[37,153256,152646],{"class":54},[37,153258,153259],{"class":39,"line":33290},[37,153260,2757],{"emptyLinePlaceholder":454},[37,153262,153263,153265,153267,153270,153272,153275,153277,153280,153282,153285],{"class":39,"line":33310},[37,153264,31638],{"class":61},[37,153266,165],{"class":50},[37,153268,153269],{"class":185},"\"学号",[37,153271,1609],{"class":61},[37,153273,153274],{"class":185},"姓名",[37,153276,1609],{"class":61},[37,153278,153279],{"class":185},"年龄",[37,153281,1609],{"class":61},[37,153283,153284],{"class":185},"成绩\"",[37,153286,280],{"class":50},[37,153288,153289,153291,153293,153295],{"class":39,"line":33326},[37,153290,3551],{"class":54},[37,153292,152422],{"class":50},[37,153294,26385],{"class":54},[37,153296,152427],{"class":50},[37,153298,153299],{"class":39,"line":33332},[37,153300,153301],{"class":50},"        print_student(student)\n",[37,153303,153304],{"class":39,"line":33346},[37,153305,2757],{"emptyLinePlaceholder":454},[37,153307,153308],{"class":39,"line":33352},[37,153309,2757],{"emptyLinePlaceholder":454},[37,153311,153312,153314,153316],{"class":39,"line":33358},[37,153313,32285],{"class":54},[37,153315,2330],{"class":2320},[37,153317,32291],{"class":50},[37,153319,153320,153323,153325],{"class":39,"line":33369},[37,153321,153322],{"class":50},"    students ",[37,153324,55],{"class":54},[37,153326,153327],{"class":50}," load_students()\n",[37,153329,153330],{"class":39,"line":33375},[37,153331,2757],{"emptyLinePlaceholder":454},[37,153333,153334,153336,153338],{"class":39,"line":33381},[37,153335,2608],{"class":54},[37,153337,95577],{"class":61},[37,153339,4089],{"class":50},[37,153341,153342],{"class":39,"line":33391},[37,153343,153344],{"class":50},"        show_menu()\n",[37,153346,153347,153350,153352,153354,153356,153359],{"class":39,"line":33397},[37,153348,153349],{"class":50},"        choice ",[37,153351,55],{"class":54},[37,153353,60941],{"class":61},[37,153355,165],{"class":50},[37,153357,153358],{"class":185},"\"请输入操作:\"",[37,153360,280],{"class":50},[37,153362,153363],{"class":39,"line":33408},[37,153364,2757],{"emptyLinePlaceholder":454},[37,153366,153367,153369,153372,153374,153377],{"class":39,"line":33414},[37,153368,2854],{"class":54},[37,153370,153371],{"class":50}," choice ",[37,153373,3299],{"class":54},[37,153375,153376],{"class":185}," \"1\"",[37,153378,4089],{"class":50},[37,153380,153381],{"class":39,"line":33424},[37,153382,153383],{"class":50},"            add_student(students)\n",[37,153385,153386,153389,153391,153393,153396],{"class":39,"line":33429},[37,153387,153388],{"class":54},"        elif",[37,153390,153371],{"class":50},[37,153392,3299],{"class":54},[37,153394,153395],{"class":185}," \"2\"",[37,153397,4089],{"class":50},[37,153399,153400],{"class":39,"line":33435},[37,153401,153402],{"class":50},"            delete_student(students)\n",[37,153404,153405,153407,153409,153411,153414],{"class":39,"line":33484},[37,153406,153388],{"class":54},[37,153408,153371],{"class":50},[37,153410,3299],{"class":54},[37,153412,153413],{"class":185}," \"3\"",[37,153415,4089],{"class":50},[37,153417,153418],{"class":39,"line":33531},[37,153419,153420],{"class":50},"            update_student(students)\n",[37,153422,153423,153425,153427,153429,153432],{"class":39,"line":33536},[37,153424,153388],{"class":54},[37,153426,153371],{"class":50},[37,153428,3299],{"class":54},[37,153430,153431],{"class":185}," \"4\"",[37,153433,4089],{"class":50},[37,153435,153436],{"class":39,"line":33542},[37,153437,153438],{"class":50},"            query_student(students)\n",[37,153440,153441,153443,153445,153447,153450],{"class":39,"line":33561},[37,153442,153388],{"class":54},[37,153444,153371],{"class":50},[37,153446,3299],{"class":54},[37,153448,153449],{"class":185}," \"5\"",[37,153451,4089],{"class":50},[37,153453,153454],{"class":39,"line":33567},[37,153455,153456],{"class":50},"            show_all_students(students)\n",[37,153458,153459,153461,153463,153465,153468],{"class":39,"line":33586},[37,153460,153388],{"class":54},[37,153462,153371],{"class":50},[37,153464,3299],{"class":54},[37,153466,153467],{"class":185}," \"0\"",[37,153469,4089],{"class":50},[37,153471,153472,153474,153476,153479],{"class":39,"line":33592},[37,153473,34987],{"class":61},[37,153475,165],{"class":50},[37,153477,153478],{"class":185},"\"退出系统\"",[37,153480,280],{"class":50},[37,153482,153483],{"class":39,"line":33598},[37,153484,115383],{"class":54},[37,153486,153487,153489],{"class":39,"line":33608},[37,153488,2891],{"class":54},[37,153490,4089],{"class":50},[37,153492,153493,153495,153497,153500],{"class":39,"line":33613},[37,153494,34987],{"class":61},[37,153496,165],{"class":50},[37,153498,153499],{"class":185},"\"输入错误\"",[37,153501,280],{"class":50},[37,153503,153504],{"class":39,"line":33619},[37,153505,2757],{"emptyLinePlaceholder":454},[37,153507,153508],{"class":39,"line":33635},[37,153509,2757],{"emptyLinePlaceholder":454},[37,153511,153512,153514,153516,153518,153520],{"class":39,"line":33680},[37,153513,1907],{"class":54},[37,153515,31559],{"class":61},[37,153517,101844],{"class":54},[37,153519,101847],{"class":185},[37,153521,4089],{"class":50},[37,153523,153524],{"class":39,"line":33686},[37,153525,101854],{"class":50},[14,153527,153528],{},"这个项目串联了：",[481,153530,153531,153534,153537,153540,153543,153545],{},[484,153532,153533],{},"菜单循环。",[484,153535,153536],{},"函数封装。",[484,153538,153539],{},"列表字典。",[484,153541,153542],{},"JSON 读写。",[484,153544,152012],{},[484,153546,153547,28727],{},[34,153548,153549],{},"if __name__ == \"__main__\"",[469,153551,153553],{"id":153552},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153555,153556],{},"可以进一步拆成两个类：",[481,153558,153559,153564],{},[484,153560,153561,153563],{},[34,153562,149853],{},"：表示单个学生。",[484,153565,153566,153568],{},[34,153567,151879],{},"：负责学生增删改查和文件保存。",[14,153570,153571],{},"示意代码：",[27,153573,153575],{"className":29,"code":153574,"language":31,"meta":32,"style":32},"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",[34,153576,153577,153587,153591,153595,153599,153607,153614,153620,153626,153632,153636,153644,153650,153660,153670,153680,153690,153694,153698,153704,153712,153720,153728,153736,153744,153752],{"__ignoreMap":32},[37,153578,153579,153581,153583,153585],{"class":39,"line":40},[37,153580,31076],{"class":54},[37,153582,151437],{"class":50},[37,153584,30732],{"class":54},[37,153586,151442],{"class":50},[37,153588,153589],{"class":39,"line":47},[37,153590,2757],{"emptyLinePlaceholder":454},[37,153592,153593],{"class":39,"line":104},[37,153594,2757],{"emptyLinePlaceholder":454},[37,153596,153597],{"class":39,"line":113},[37,153598,151455],{"class":2320},[37,153600,153601,153603,153605],{"class":39,"line":189},[37,153602,15035],{"class":54},[37,153604,8246],{"class":2320},[37,153606,4089],{"class":50},[37,153608,153609,153612],{"class":39,"line":195},[37,153610,153611],{"class":50},"    student_id: ",[37,153613,151471],{"class":61},[37,153615,153616,153618],{"class":39,"line":201},[37,153617,151468],{"class":50},[37,153619,151471],{"class":61},[37,153621,153622,153624],{"class":39,"line":207},[37,153623,151476],{"class":50},[37,153625,151479],{"class":61},[37,153627,153628,153630],{"class":39,"line":213},[37,153629,151484],{"class":50},[37,153631,151487],{"class":61},[37,153633,153634],{"class":39,"line":218},[37,153635,2757],{"emptyLinePlaceholder":454},[37,153637,153638,153640,153642],{"class":39,"line":227},[37,153639,31140],{"class":54},[37,153641,151635],{"class":2320},[37,153643,31146],{"class":50},[37,153645,153646,153648],{"class":39,"line":232},[37,153647,15093],{"class":54},[37,153649,15913],{"class":50},[37,153651,153652,153654,153656,153658],{"class":39,"line":238},[37,153653,151648],{"class":185},[37,153655,51773],{"class":50},[37,153657,31162],{"class":61},[37,153659,151655],{"class":50},[37,153661,153662,153664,153666,153668],{"class":39,"line":244},[37,153663,151660],{"class":185},[37,153665,51773],{"class":50},[37,153667,31162],{"class":61},[37,153669,151667],{"class":50},[37,153671,153672,153674,153676,153678],{"class":39,"line":250},[37,153673,151672],{"class":185},[37,153675,51773],{"class":50},[37,153677,31162],{"class":61},[37,153679,151679],{"class":50},[37,153681,153682,153684,153686,153688],{"class":39,"line":256},[37,153683,151684],{"class":185},[37,153685,51773],{"class":50},[37,153687,31162],{"class":61},[37,153689,151691],{"class":50},[37,153691,153692],{"class":39,"line":261},[37,153693,2886],{"class":50},[37,153695,153696],{"class":39,"line":267},[37,153697,2757],{"emptyLinePlaceholder":454},[37,153699,153700,153702],{"class":39,"line":283},[37,153701,151299],{"class":2320},[37,153703,151302],{"class":61},[37,153705,153706,153708,153710],{"class":39,"line":288},[37,153707,31140],{"class":54},[37,153709,151712],{"class":2320},[37,153711,151715],{"class":50},[37,153713,153714,153716,153718],{"class":39,"line":294},[37,153715,15093],{"class":54},[37,153717,151319],{"class":61},[37,153719,151724],{"class":50},[37,153721,153722,153724,153726],{"class":39,"line":300},[37,153723,151729],{"class":50},[37,153725,151732],{"class":185},[37,153727,88171],{"class":50},[37,153729,153730,153732,153734],{"class":39,"line":306},[37,153731,151729],{"class":50},[37,153733,63015],{"class":185},[37,153735,88171],{"class":50},[37,153737,153738,153740,153742],{"class":39,"line":312},[37,153739,151729],{"class":50},[37,153741,69460],{"class":185},[37,153743,88171],{"class":50},[37,153745,153746,153748,153750],{"class":39,"line":317},[37,153747,151729],{"class":50},[37,153749,151757],{"class":185},[37,153751,88171],{"class":50},[37,153753,153754],{"class":39,"line":323},[37,153755,38463],{"class":50},[14,153757,153758],{},"管理器示意：",[27,153760,153762],{"className":29,"code":153761,"language":31,"meta":32,"style":32},"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",[34,153763,153764,153773,153781,153792,153796,153806,153819,153830,153837,153843,153847,153856,153865,153871,153878],{"__ignoreMap":32},[37,153765,153766,153768,153771],{"class":39,"line":40},[37,153767,15035],{"class":54},[37,153769,153770],{"class":2320}," StudentManager",[37,153772,4089],{"class":50},[37,153774,153775,153777,153779],{"class":39,"line":47},[37,153776,31140],{"class":54},[37,153778,31143],{"class":61},[37,153780,31146],{"class":50},[37,153782,153783,153785,153788,153790],{"class":39,"line":104},[37,153784,31184],{"class":61},[37,153786,153787],{"class":50},".students ",[37,153789,55],{"class":54},[37,153791,52174],{"class":50},[37,153793,153794],{"class":39,"line":113},[37,153795,2757],{"emptyLinePlaceholder":454},[37,153797,153798,153800,153803],{"class":39,"line":189},[37,153799,31140],{"class":54},[37,153801,153802],{"class":2320}," find_by_id",[37,153804,153805],{"class":50},"(self, student_id):\n",[37,153807,153808,153810,153812,153814,153816],{"class":39,"line":195},[37,153809,3753],{"class":54},[37,153811,152422],{"class":50},[37,153813,26385],{"class":54},[37,153815,39210],{"class":61},[37,153817,153818],{"class":50},".students:\n",[37,153820,153821,153823,153826,153828],{"class":39,"line":201},[37,153822,4992],{"class":54},[37,153824,153825],{"class":50}," student.student_id ",[37,153827,3299],{"class":54},[37,153829,152443],{"class":50},[37,153831,153832,153835],{"class":39,"line":207},[37,153833,153834],{"class":54},"                return",[37,153836,152450],{"class":50},[37,153838,153839,153841],{"class":39,"line":213},[37,153840,15093],{"class":54},[37,153842,152457],{"class":61},[37,153844,153845],{"class":39,"line":218},[37,153846,2757],{"emptyLinePlaceholder":454},[37,153848,153849,153851,153853],{"class":39,"line":227},[37,153850,31140],{"class":54},[37,153852,5558],{"class":2320},[37,153854,153855],{"class":50},"(self, student):\n",[37,153857,153858,153860,153862],{"class":39,"line":232},[37,153859,2854],{"class":54},[37,153861,39210],{"class":61},[37,153863,153864],{"class":50},".find_by_id(student.student_id):\n",[37,153866,153867,153869],{"class":39,"line":238},[37,153868,16073],{"class":54},[37,153870,126092],{"class":61},[37,153872,153873,153875],{"class":39,"line":244},[37,153874,31184],{"class":61},[37,153876,153877],{"class":50},".students.append(student)\n",[37,153879,153880,153882],{"class":39,"line":250},[37,153881,15093],{"class":54},[37,153883,153884],{"class":61}," True\n",[14,153886,153887],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[469,153889,153891],{"id":153890},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[498,153893,153895],{"id":153894},"_1251-数据结构","12.5.1 数据结构",[27,153897,153899],{"className":29,"code":153898,"language":31,"meta":32,"style":32},"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",[34,153900,153901,153909,153940,153970,153999,154028],{"__ignoreMap":32},[37,153902,153903,153905,153907],{"class":39,"line":40},[37,153904,148750],{"class":50},[37,153906,55],{"class":54},[37,153908,55783],{"class":50},[37,153910,153911,153913,153915,153917,153919,153921,153924,153926,153929,153931,153933,153935,153938],{"class":39,"line":47},[37,153912,148670],{"class":50},[37,153914,148282],{"class":185},[37,153916,51773],{"class":50},[37,153918,148893],{"class":185},[37,153920,12776],{"class":50},[37,153922,153923],{"class":185},"\"category\"",[37,153925,51773],{"class":50},[37,153927,153928],{"class":185},"\"手机\"",[37,153930,12776],{"class":50},[37,153932,84419],{"class":185},[37,153934,51773],{"class":50},[37,153936,153937],{"class":61},"12000",[37,153939,5279],{"class":50},[37,153941,153942,153944,153946,153948,153950,153952,153954,153956,153959,153961,153963,153965,153968],{"class":39,"line":104},[37,153943,148670],{"class":50},[37,153945,148282],{"class":185},[37,153947,51773],{"class":50},[37,153949,148893],{"class":185},[37,153951,12776],{"class":50},[37,153953,153923],{"class":185},[37,153955,51773],{"class":50},[37,153957,153958],{"class":185},"\"电脑\"",[37,153960,12776],{"class":50},[37,153962,84419],{"class":185},[37,153964,51773],{"class":50},[37,153966,153967],{"class":61},"18000",[37,153969,5279],{"class":50},[37,153971,153972,153974,153976,153978,153980,153982,153984,153986,153988,153990,153992,153994,153997],{"class":39,"line":113},[37,153973,148670],{"class":50},[37,153975,148282],{"class":185},[37,153977,51773],{"class":50},[37,153979,148914],{"class":185},[37,153981,12776],{"class":50},[37,153983,153923],{"class":185},[37,153985,51773],{"class":50},[37,153987,153928],{"class":185},[37,153989,12776],{"class":50},[37,153991,84419],{"class":185},[37,153993,51773],{"class":50},[37,153995,153996],{"class":61},"15000",[37,153998,5279],{"class":50},[37,154000,154001,154003,154005,154007,154009,154011,154013,154015,154017,154019,154021,154023,154026],{"class":39,"line":189},[37,154002,148670],{"class":50},[37,154004,148282],{"class":185},[37,154006,51773],{"class":50},[37,154008,148914],{"class":185},[37,154010,12776],{"class":50},[37,154012,153923],{"class":185},[37,154014,51773],{"class":50},[37,154016,153958],{"class":185},[37,154018,12776],{"class":50},[37,154020,84419],{"class":185},[37,154022,51773],{"class":50},[37,154024,154025],{"class":61},"16000",[37,154027,5279],{"class":50},[37,154029,154030],{"class":39,"line":195},[37,154031,389],{"class":50},[498,154033,154035],{"id":154034},"_1252-按日期统计","12.5.2 按日期统计",[27,154037,154039],{"className":29,"code":154038,"language":31,"meta":32,"style":32},"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",[34,154040,154041,154050,154054,154065,154079,154092,154111,154115],{"__ignoreMap":32},[37,154042,154043,154046,154048],{"class":39,"line":40},[37,154044,154045],{"class":50},"daily_total ",[37,154047,55],{"class":54},[37,154049,88203],{"class":50},[37,154051,154052],{"class":39,"line":47},[37,154053,2757],{"emptyLinePlaceholder":454},[37,154055,154056,154058,154060,154062],{"class":39,"line":104},[37,154057,3375],{"class":54},[37,154059,148494],{"class":50},[37,154061,26385],{"class":54},[37,154063,154064],{"class":50}," sales:\n",[37,154066,154067,154070,154072,154075,154077],{"class":39,"line":113},[37,154068,154069],{"class":50},"    date ",[37,154071,55],{"class":54},[37,154073,154074],{"class":50}," item[",[37,154076,148282],{"class":185},[37,154078,389],{"class":50},[37,154080,154081,154084,154086,154088,154090],{"class":39,"line":189},[37,154082,154083],{"class":50},"    amount ",[37,154085,55],{"class":54},[37,154087,154074],{"class":50},[37,154089,84419],{"class":185},[37,154091,389],{"class":50},[37,154093,154094,154097,154099,154102,154104,154106,154108],{"class":39,"line":195},[37,154095,154096],{"class":50},"    daily_total[date] ",[37,154098,55],{"class":54},[37,154100,154101],{"class":50}," daily_total.get(date, ",[37,154103,135],{"class":61},[37,154105,14055],{"class":50},[37,154107,993],{"class":54},[37,154109,154110],{"class":50}," amount\n",[37,154112,154113],{"class":39,"line":201},[37,154114,2757],{"emptyLinePlaceholder":454},[37,154116,154117,154119],{"class":39,"line":207},[37,154118,30755],{"class":61},[37,154120,154121],{"class":50},"(daily_total)\n",[498,154123,154125],{"id":154124},"_1253-按类别统计","12.5.3 按类别统计",[27,154127,154129],{"className":29,"code":154128,"language":31,"meta":32,"style":32},"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",[34,154130,154131,154140,154144,154154,154167,154179,154197,154201],{"__ignoreMap":32},[37,154132,154133,154136,154138],{"class":39,"line":40},[37,154134,154135],{"class":50},"category_total ",[37,154137,55],{"class":54},[37,154139,88203],{"class":50},[37,154141,154142],{"class":39,"line":47},[37,154143,2757],{"emptyLinePlaceholder":454},[37,154145,154146,154148,154150,154152],{"class":39,"line":104},[37,154147,3375],{"class":54},[37,154149,148494],{"class":50},[37,154151,26385],{"class":54},[37,154153,154064],{"class":50},[37,154155,154156,154159,154161,154163,154165],{"class":39,"line":113},[37,154157,154158],{"class":50},"    category ",[37,154160,55],{"class":54},[37,154162,154074],{"class":50},[37,154164,153923],{"class":185},[37,154166,389],{"class":50},[37,154168,154169,154171,154173,154175,154177],{"class":39,"line":189},[37,154170,154083],{"class":50},[37,154172,55],{"class":54},[37,154174,154074],{"class":50},[37,154176,84419],{"class":185},[37,154178,389],{"class":50},[37,154180,154181,154184,154186,154189,154191,154193,154195],{"class":39,"line":195},[37,154182,154183],{"class":50},"    category_total[category] ",[37,154185,55],{"class":54},[37,154187,154188],{"class":50}," category_total.get(category, ",[37,154190,135],{"class":61},[37,154192,14055],{"class":50},[37,154194,993],{"class":54},[37,154196,154110],{"class":50},[37,154198,154199],{"class":39,"line":201},[37,154200,2757],{"emptyLinePlaceholder":454},[37,154202,154203,154205],{"class":39,"line":207},[37,154204,30755],{"class":61},[37,154206,154207],{"class":50},"(category_total)\n",[498,154209,154211],{"id":154210},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[27,154213,154215],{"className":29,"code":154214,"language":31,"meta":32,"style":32},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[34,154216,154217,154242],{"__ignoreMap":32},[37,154218,154219,154222,154224,154226,154229,154232,154235,154238,154240],{"class":39,"line":40},[37,154220,154221],{"class":50},"top_date, top_amount ",[37,154223,55],{"class":54},[37,154225,6299],{"class":61},[37,154227,154228],{"class":50},"(daily_total.items(), ",[37,154230,154231],{"class":159},"key",[37,154233,154234],{"class":54},"=lambda",[37,154236,154237],{"class":50}," item: item[",[37,154239,332],{"class":61},[37,154241,101],{"class":50},[37,154243,154244,154246],{"class":39,"line":47},[37,154245,30755],{"class":61},[37,154247,154248],{"class":50},"(top_date, top_amount)\n",[469,154250,154252],{"id":154251},"_126-绘制柱状图","12.6 绘制柱状图",[27,154254,154256],{"className":29,"code":154255,"language":31,"meta":32,"style":32},"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",[34,154257,154258,154272,154283,154287,154295,154307,154319,154330,154334,154338,154348,154359,154373,154378,154395,154412,154428,154432],{"__ignoreMap":32},[37,154259,154260,154262,154264,154266,154268,154270],{"class":39,"line":40},[37,154261,31076],{"class":54},[37,154263,147664],{"class":50},[37,154265,30732],{"class":54},[37,154267,147669],{"class":50},[37,154269,31722],{"class":54},[37,154271,147674],{"class":50},[37,154273,154274,154276,154278,154280],{"class":39,"line":47},[37,154275,31076],{"class":54},[37,154277,147523],{"class":50},[37,154279,30732],{"class":54},[37,154281,154282],{"class":50}," Bar\n",[37,154284,154285],{"class":39,"line":104},[37,154286,2757],{"emptyLinePlaceholder":454},[37,154288,154289,154291,154293],{"class":39,"line":113},[37,154290,154135],{"class":50},[37,154292,55],{"class":54},[37,154294,15913],{"class":50},[37,154296,154297,154300,154302,154305],{"class":39,"line":189},[37,154298,154299],{"class":185},"    \"手机\"",[37,154301,51773],{"class":50},[37,154303,154304],{"class":61},"27000",[37,154306,31805],{"class":50},[37,154308,154309,154312,154314,154317],{"class":39,"line":195},[37,154310,154311],{"class":185},"    \"电脑\"",[37,154313,51773],{"class":50},[37,154315,154316],{"class":61},"34000",[37,154318,31805],{"class":50},[37,154320,154321,154324,154326,154328],{"class":39,"line":201},[37,154322,154323],{"class":185},"    \"耳机\"",[37,154325,51773],{"class":50},[37,154327,124684],{"class":61},[37,154329,31805],{"class":50},[37,154331,154332],{"class":39,"line":207},[37,154333,1941],{"class":50},[37,154335,154336],{"class":39,"line":213},[37,154337,2757],{"emptyLinePlaceholder":454},[37,154339,154340,154343,154345],{"class":39,"line":218},[37,154341,154342],{"class":50},"bar ",[37,154344,55],{"class":54},[37,154346,154347],{"class":50}," Bar()\n",[37,154349,154350,154353,154356],{"class":39,"line":227},[37,154351,154352],{"class":50},"bar.add_xaxis(",[37,154354,154355],{"class":61},"list",[37,154357,154358],{"class":50},"(category_total.keys()))\n",[37,154360,154361,154364,154366,154368,154370],{"class":39,"line":232},[37,154362,154363],{"class":50},"bar.add_yaxis(",[37,154365,147580],{"class":185},[37,154367,12776],{"class":50},[37,154369,154355],{"class":61},[37,154371,154372],{"class":50},"(category_total.values()))\n",[37,154374,154375],{"class":39,"line":238},[37,154376,154377],{"class":50},"bar.set_global_opts(\n",[37,154379,154380,154382,154384,154386,154388,154390,154393],{"class":39,"line":244},[37,154381,147758],{"class":159},[37,154383,55],{"class":54},[37,154385,147763],{"class":50},[37,154387,51743],{"class":159},[37,154389,55],{"class":54},[37,154391,154392],{"class":185},"\"品类销售额\"",[37,154394,38384],{"class":50},[37,154396,154397,154399,154401,154403,154405,154407,154410],{"class":39,"line":250},[37,154398,147777],{"class":159},[37,154400,55],{"class":54},[37,154402,147782],{"class":50},[37,154404,80145],{"class":159},[37,154406,55],{"class":54},[37,154408,154409],{"class":185},"\"品类\"",[37,154411,38384],{"class":50},[37,154413,154414,154416,154418,154420,154422,154424,154426],{"class":39,"line":256},[37,154415,147796],{"class":159},[37,154417,55],{"class":54},[37,154419,147782],{"class":50},[37,154421,80145],{"class":159},[37,154423,55],{"class":54},[37,154425,147580],{"class":185},[37,154427,38384],{"class":50},[37,154429,154430],{"class":39,"line":261},[37,154431,280],{"class":50},[37,154433,154434,154437,154440],{"class":39,"line":267},[37,154435,154436],{"class":50},"bar.render(",[37,154438,154439],{"class":185},"\"category_sales.html\"",[37,154441,280],{"class":50},[469,154443,154445],{"id":154444},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154447,154448],{},"时间线适合展示不同日期、月份、年份的数据变化。",[27,154450,154452],{"className":29,"code":154451,"language":31,"meta":32,"style":32},"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",[34,154453,154454,154468,154479,154483,154491,154515,154538,154563,154567,154571,154581,154585,154596,154605,154615,154629,154660,154665,154669],{"__ignoreMap":32},[37,154455,154456,154458,154460,154462,154464,154466],{"class":39,"line":40},[37,154457,31076],{"class":54},[37,154459,147664],{"class":50},[37,154461,30732],{"class":54},[37,154463,147669],{"class":50},[37,154465,31722],{"class":54},[37,154467,147674],{"class":50},[37,154469,154470,154472,154474,154476],{"class":39,"line":47},[37,154471,31076],{"class":54},[37,154473,147523],{"class":50},[37,154475,30732],{"class":54},[37,154477,154478],{"class":50}," Bar, Timeline\n",[37,154480,154481],{"class":39,"line":104},[37,154482,2757],{"emptyLinePlaceholder":454},[37,154484,154485,154487,154489],{"class":39,"line":113},[37,154486,101943],{"class":50},[37,154488,55],{"class":54},[37,154490,15913],{"class":50},[37,154492,154493,154496,154499,154501,154503,154505,154507,154509,154511,154513],{"class":39,"line":189},[37,154494,154495],{"class":185},"    \"2024-10-01\"",[37,154497,154498],{"class":50},": {",[37,154500,153928],{"class":185},[37,154502,51773],{"class":50},[37,154504,153937],{"class":61},[37,154506,12776],{"class":50},[37,154508,153958],{"class":185},[37,154510,51773],{"class":50},[37,154512,153967],{"class":61},[37,154514,5279],{"class":50},[37,154516,154517,154520,154522,154524,154526,154528,154530,154532,154534,154536],{"class":39,"line":195},[37,154518,154519],{"class":185},"    \"2024-10-02\"",[37,154521,154498],{"class":50},[37,154523,153928],{"class":185},[37,154525,51773],{"class":50},[37,154527,153996],{"class":61},[37,154529,12776],{"class":50},[37,154531,153958],{"class":185},[37,154533,51773],{"class":50},[37,154535,154025],{"class":61},[37,154537,5279],{"class":50},[37,154539,154540,154543,154545,154547,154549,154552,154554,154556,154558,154561],{"class":39,"line":201},[37,154541,154542],{"class":185},"    \"2024-10-03\"",[37,154544,154498],{"class":50},[37,154546,153928],{"class":185},[37,154548,51773],{"class":50},[37,154550,154551],{"class":61},"17000",[37,154553,12776],{"class":50},[37,154555,153958],{"class":185},[37,154557,51773],{"class":50},[37,154559,154560],{"class":61},"19000",[37,154562,5279],{"class":50},[37,154564,154565],{"class":39,"line":207},[37,154566,1941],{"class":50},[37,154568,154569],{"class":39,"line":213},[37,154570,2757],{"emptyLinePlaceholder":454},[37,154572,154573,154576,154578],{"class":39,"line":218},[37,154574,154575],{"class":50},"timeline ",[37,154577,55],{"class":54},[37,154579,154580],{"class":50}," Timeline()\n",[37,154582,154583],{"class":39,"line":227},[37,154584,2757],{"emptyLinePlaceholder":454},[37,154586,154587,154589,154592,154594],{"class":39,"line":232},[37,154588,3375],{"class":54},[37,154590,154591],{"class":50}," date, category_data ",[37,154593,26385],{"class":54},[37,154595,149433],{"class":50},[37,154597,154598,154601,154603],{"class":39,"line":238},[37,154599,154600],{"class":50},"    bar ",[37,154602,55],{"class":54},[37,154604,154347],{"class":50},[37,154606,154607,154610,154612],{"class":39,"line":244},[37,154608,154609],{"class":50},"    bar.add_xaxis(",[37,154611,154355],{"class":61},[37,154613,154614],{"class":50},"(category_data.keys()))\n",[37,154616,154617,154620,154622,154624,154626],{"class":39,"line":250},[37,154618,154619],{"class":50},"    bar.add_yaxis(",[37,154621,147580],{"class":185},[37,154623,12776],{"class":50},[37,154625,154355],{"class":61},[37,154627,154628],{"class":50},"(category_data.values()))\n",[37,154630,154631,154634,154637,154639,154641,154643,154645,154647,154649,154651,154653,154655,154658],{"class":39,"line":256},[37,154632,154633],{"class":50},"    bar.set_global_opts(",[37,154635,154636],{"class":159},"title_opts",[37,154638,55],{"class":54},[37,154640,147763],{"class":50},[37,154642,51743],{"class":159},[37,154644,55],{"class":54},[37,154646,579],{"class":54},[37,154648,772],{"class":185},[37,154650,1404],{"class":61},[37,154652,74262],{"class":50},[37,154654,1454],{"class":61},[37,154656,154657],{"class":185},"销售额\"",[37,154659,175],{"class":50},[37,154661,154662],{"class":39,"line":261},[37,154663,154664],{"class":50},"    timeline.add(bar, date)\n",[37,154666,154667],{"class":39,"line":267},[37,154668,2757],{"emptyLinePlaceholder":454},[37,154670,154671,154674,154677],{"class":39,"line":283},[37,154672,154673],{"class":50},"timeline.render(",[37,154675,154676],{"class":185},"\"timeline_sales.html\"",[37,154678,280],{"class":50},[469,154680,154682],{"id":154681},"_128-绘制地图","12.8 绘制地图",[14,154684,154685],{},"地图适合展示地区数据。",[27,154687,154689],{"className":29,"code":154688,"language":31,"meta":32,"style":32},"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",[34,154690,154691,154705,154716,154720,154728,154741,154753,154766,154779,154783,154787,154797,154812,154817,154834,154853,154857],{"__ignoreMap":32},[37,154692,154693,154695,154697,154699,154701,154703],{"class":39,"line":40},[37,154694,31076],{"class":54},[37,154696,147664],{"class":50},[37,154698,30732],{"class":54},[37,154700,147669],{"class":50},[37,154702,31722],{"class":54},[37,154704,147674],{"class":50},[37,154706,154707,154709,154711,154713],{"class":39,"line":47},[37,154708,31076],{"class":54},[37,154710,147523],{"class":50},[37,154712,30732],{"class":54},[37,154714,154715],{"class":50}," Map\n",[37,154717,154718],{"class":39,"line":104},[37,154719,2757],{"emptyLinePlaceholder":454},[37,154721,154722,154724,154726],{"class":39,"line":113},[37,154723,101943],{"class":50},[37,154725,55],{"class":54},[37,154727,55783],{"class":50},[37,154729,154730,154733,154735,154737,154739],{"class":39,"line":189},[37,154731,154732],{"class":50},"    (",[37,154734,69605],{"class":185},[37,154736,12776],{"class":50},[37,154738,1326],{"class":61},[37,154740,38384],{"class":50},[37,154742,154743,154745,154747,154749,154751],{"class":39,"line":195},[37,154744,154732],{"class":50},[37,154746,69625],{"class":185},[37,154748,12776],{"class":50},[37,154750,147597],{"class":61},[37,154752,38384],{"class":50},[37,154754,154755,154757,154760,154762,154764],{"class":39,"line":201},[37,154756,154732],{"class":50},[37,154758,154759],{"class":185},"\"广东\"",[37,154761,12776],{"class":50},[37,154763,2087],{"class":61},[37,154765,38384],{"class":50},[37,154767,154768,154770,154773,154775,154777],{"class":39,"line":207},[37,154769,154732],{"class":50},[37,154771,154772],{"class":185},"\"浙江\"",[37,154774,12776],{"class":50},[37,154776,147602],{"class":61},[37,154778,38384],{"class":50},[37,154780,154781],{"class":39,"line":213},[37,154782,389],{"class":50},[37,154784,154785],{"class":39,"line":218},[37,154786,2757],{"emptyLinePlaceholder":454},[37,154788,154789,154792,154794],{"class":39,"line":227},[37,154790,154791],{"class":50},"map_chart ",[37,154793,55],{"class":54},[37,154795,154796],{"class":50}," Map()\n",[37,154798,154799,154802,154804,154807,154810],{"class":39,"line":232},[37,154800,154801],{"class":50},"map_chart.add(",[37,154803,147580],{"class":185},[37,154805,154806],{"class":50},", data, ",[37,154808,154809],{"class":185},"\"china\"",[37,154811,280],{"class":50},[37,154813,154814],{"class":39,"line":238},[37,154815,154816],{"class":50},"map_chart.set_global_opts(\n",[37,154818,154819,154821,154823,154825,154827,154829,154832],{"class":39,"line":244},[37,154820,147758],{"class":159},[37,154822,55],{"class":54},[37,154824,147763],{"class":50},[37,154826,51743],{"class":159},[37,154828,55],{"class":54},[37,154830,154831],{"class":185},"\"地区销售额\"",[37,154833,38384],{"class":50},[37,154835,154836,154839,154841,154844,154847,154849,154851],{"class":39,"line":250},[37,154837,154838],{"class":159},"    visualmap_opts",[37,154840,55],{"class":54},[37,154842,154843],{"class":50},"opts.VisualMapOpts(",[37,154845,154846],{"class":159},"max_",[37,154848,55],{"class":54},[37,154850,2087],{"class":61},[37,154852,38384],{"class":50},[37,154854,154855],{"class":39,"line":256},[37,154856,280],{"class":50},[37,154858,154859,154862,154865],{"class":39,"line":261},[37,154860,154861],{"class":50},"map_chart.render(",[37,154863,154864],{"class":185},"\"map_sales.html\"",[37,154866,280],{"class":50},[14,154868,154869],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[469,154871,154873],{"id":154872},"_129-项目拆分建议","12.9 项目拆分建议",[14,154875,154876],{},"当代码超过一个文件时，可以这样组织：",[27,154878,154881],{"className":154879,"code":154880,"language":5536,"meta":32},[5534],"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",[34,154882,154880],{"__ignoreMap":32},[14,154884,154885],{},"职责：",[481,154887,154888,154894,154900,154906],{},[484,154889,154890,154893],{},[34,154891,154892],{},"main.py","：程序入口。",[484,154895,154896,154899],{},[34,154897,154898],{},"file_utils.py","：读写 JSON。",[484,154901,154902,154905],{},[34,154903,154904],{},"sales_service.py","：统计销售数据。",[484,154907,154908,154911],{},[34,154909,154910],{},"chart_builder.py","：生成图表。",[469,154913,154915],{"id":154914},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154917,154918],{},"语法基础：",[481,154920,154921,154924,154927,154930],{},[484,154922,154923],{},"会写变量、注释、输入输出。",[484,154925,154926],{},"会使用 int、float、str、bool。",[484,154928,154929],{},"会做类型转换。",[484,154931,154932],{},"会使用 f-string 格式化输出。",[14,154934,154935],{},"流程控制：",[481,154937,154938,154944,154950,154958],{},[484,154939,154940,154941,28727],{},"会写 ",[34,154942,154943],{},"if elif else",[484,154945,154940,154946,101303,154948,28727],{},[34,154947,108948],{},[34,154949,3375],{},[484,154951,154952,154953,101303,154955,28727],{},"理解 ",[34,154954,2410],{},[34,154956,154957],{},"continue",[484,154959,154960],{},"能写嵌套循环。",[14,154962,154963],{},"函数：",[481,154965,154966,154969,154972,154975],{},[484,154967,154968],{},"会定义和调用函数。",[484,154970,154971],{},"理解参数和返回值。",[484,154973,154974],{},"知道局部变量和全局变量。",[484,154976,154977],{},"会使用默认参数、关键字参数、不定长参数。",[14,154979,154980],{},"容器：",[481,154982,154983,154986,154989,154992,154995],{},[484,154984,154985],{},"会使用列表增删改查。",[484,154987,154988],{},"会遍历列表、字典。",[484,154990,154991],{},"会使用切片。",[484,154993,154994],{},"会用集合去重。",[484,154996,154997],{},"会处理列表嵌套字典。",[14,154999,155000],{},"文件和模块：",[481,155002,155003,155006,155009,155012,155015],{},[484,155004,155005],{},"会读写文本文件。",[484,155007,155008],{},"会读写 JSON。",[484,155010,155011],{},"会捕获常见异常。",[484,155013,155014],{},"会导入模块和第三方包。",[484,155016,155017],{},"会创建简单包结构。",[14,155019,155020],{},"项目能力：",[481,155022,155023,155026,155029,155032,155035],{},[484,155024,155025],{},"能把代码拆成函数。",[484,155027,155028],{},"能把数据保存到文件。",[484,155030,155031],{},"能处理用户输入错误。",[484,155033,155034],{},"能写一个完整菜单程序。",[484,155036,155037],{},"能用 pyecharts 生成图表。",[469,155039,155041],{"id":155040},"_1211-推荐练习顺序","12.11 推荐练习顺序",[481,155043,155044,155047,155050,155053,155056,155059,155062,155065],{},[484,155045,155046],{},"猜数字游戏。",[484,155048,155049],{},"ATM 菜单程序。",[484,155051,155052],{},"学生成绩统计。",[484,155054,155055],{},"学生管理系统函数版。",[484,155057,155058],{},"学生管理系统文件持久化版。",[484,155060,155061],{},"学生管理系统面向对象版。",[484,155063,155064],{},"销售数据统计。",[484,155066,155067],{},"销售数据可视化。",[469,155069,155071],{"id":155070},"_1212-常见学习误区","12.12 常见学习误区",[481,155073,155074,155077,155080,155083,155086,155089,155092],{},[484,155075,155076],{},"只看视频不敲代码。",[484,155078,155079],{},"一报错就复制错误去搜，不先读报错位置。",[484,155081,155082],{},"变量名随便写，后续自己看不懂。",[484,155084,155085],{},"所有代码都写在一个文件一个函数里。",[484,155087,155088],{},"不保存练习代码，复习时没有材料。",[484,155090,155091],{},"还没掌握列表字典就急着学框架。",[484,155093,155094],{},"不会读官方文档，只依赖教程。",[469,155096,155098],{"id":155097},"_1213-如何读报错","12.13 如何读报错",[14,155100,155101],{},"报错通常从下往上看最后几行。",[14,155103,15476],{},[27,155105,155108],{"className":155106,"code":155107,"language":5536,"meta":32},[5534],"ValueError: invalid literal for int() with base 10: 'abc'\n",[34,155109,155107],{"__ignoreMap":32},[14,155111,24941],{},[481,155113,155114,155120,155130],{},[484,155115,155116,155117,28727],{},"异常类型是 ",[34,155118,155119],{},"ValueError",[484,155121,107630,155122,155125,155126,155129],{},[34,155123,155124],{},"int()"," 无法把 ",[34,155127,155128],{},"'abc'"," 转成整数。",[484,155131,155132],{},"应该检查输入内容或增加异常处理。",[14,155134,155135],{},"再看文件名和行号：",[27,155137,155140],{"className":155138,"code":155139,"language":5536,"meta":32},[5534],"File \"main.py\", line 10, in \u003Cmodule>\n",[34,155141,155139],{"__ignoreMap":32},[14,155143,155144,155145,155147],{},"表示错误发生在 ",[34,155146,154892],{}," 第 10 行。",[469,155149,155151],{"id":155150},"_1214-后续学习方向","12.14 后续学习方向",[14,155153,155154],{},"Python 基础完成后，可以按兴趣选择方向：",[481,155156,155157,155169,155178,155190,155201,155210,155220],{},[484,155158,155159,155160,735,155163,735,155166,28727],{},"自动化办公：",[34,155161,155162],{},"openpyxl",[34,155164,155165],{},"python-docx",[34,155167,155168],{},"pdfplumber",[484,155170,155171,155172,735,155174,735,155176,28727],{},"数据分析：",[34,155173,100911],{},[34,155175,146470],{},[34,155177,146478],{},[484,155179,155180,155181,735,155184,735,155187,28727],{},"Web 后端：",[34,155182,155183],{},"Flask",[34,155185,155186],{},"FastAPI",[34,155188,155189],{},"Django",[484,155191,155192,155193,735,155195,735,155198,28727],{},"爬虫：",[34,155194,146455],{},[34,155196,155197],{},"BeautifulSoup",[34,155199,155200],{},"Scrapy",[484,155202,155203,155204,735,155206,155209],{},"测试开发：",[34,155205,146502],{},[34,155207,155208],{},"selenium","、接口测试。",[484,155211,155212,155213,735,155215,735,155217,28727],{},"人工智能：",[34,155214,100911],{},[34,155216,146470],{},[34,155218,155219],{},"pytorch",[484,155221,155222,155223,735,155225,735,155228,28727],{},"运维脚本：",[34,155224,146071],{},[34,155226,155227],{},"subprocess",[34,155229,155230],{},"paramiko",[14,155232,155233],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[469,155235,155237],{"id":155236},"_1215-结课练习","12.15 结课练习",[481,155239,155240,155243,155246,155249,155252,155255,155258,155261],{},[484,155241,155242],{},"完成函数版学生管理系统。",[484,155244,155245],{},"给学生管理系统增加 JSON 持久化。",[484,155247,155248],{},"给学生管理系统增加异常处理。",[484,155250,155251],{},"把学生管理系统改成面向对象版。",[484,155253,155254],{},"使用 pyecharts 绘制学生成绩柱状图。",[484,155256,155257],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[484,155259,155260],{},"按品类统计销售额并绘制柱状图。",[484,155262,155263],{},"写一份自己的 Python 学习路线图。",[446,155265,155266],{},"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":32,"searchDepth":47,"depth":47,"links":155268},[155269,155270,155273,155274,155275,155281,155282,155283,155284,155285,155286,155287,155288,155289,155290],{"id":151985,"depth":47,"text":151986},{"id":152035,"depth":47,"text":152036,"children":155271},[155272],{"id":152039,"depth":104,"text":152040},{"id":152078,"depth":47,"text":152079},{"id":153552,"depth":47,"text":153553},{"id":153890,"depth":47,"text":153891,"children":155276},[155277,155278,155279,155280],{"id":153894,"depth":104,"text":153895},{"id":154034,"depth":104,"text":154035},{"id":154124,"depth":104,"text":154125},{"id":154210,"depth":104,"text":154211},{"id":154251,"depth":47,"text":154252},{"id":154444,"depth":47,"text":154445},{"id":154681,"depth":47,"text":154682},{"id":154872,"depth":47,"text":154873},{"id":154914,"depth":47,"text":154915},{"id":155040,"depth":47,"text":155041},{"id":155070,"depth":47,"text":155071},{"id":155097,"depth":47,"text":155098},{"id":155150,"depth":47,"text":155151},{"id":155236,"depth":47,"text":155237},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151977,"description":451},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155297,"title":155298,"body":155299,"description":451,"extension":452,"meta":157768,"navigation":454,"path":157769,"seo":157770,"stem":157771,"__hash__":157772},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155300,"toc":157743},[155301,155304,155308,155311,155314,155334,155337,155360,155363,155366,155388,155391,155413,155417,155420,155460,155463,155584,155588,155591,155631,155634,155658,155661,155665,155668,155682,155715,155718,155753,155756,155779,155782,155815,155818,155820,155826,155901,155904,155910,155927,155967,155971,155974,156020,156022,156060,156063,156098,156101,156136,156139,156171,156174,156193,156197,156201,156314,156316,156391,156395,156441,156444,156470,156479,156483,156486,156549,156557,156585,156589,156629,156694,156698,156701,156740,156743,156788,156791,156852,156856,156883,156886,156914,156917,156921,156925,156990,156993,157031,157034,157066,157070,157169,157173,157176,157249,157252,157300,157304,157310,157350,157353,157400,157403,157452,157456,157458,157472,157474,157655,157659,157686,157706,157713,157717,157734,157740],[10,155302,155298],{"id":155303},"_2-基础语法变量与字符串",[469,155305,155307],{"id":155306},"_21-注释","2.1 注释",[14,155309,155310],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155312,155313],{},"单行注释：",[27,155315,155317],{"className":29,"code":155316,"language":31,"meta":32,"style":32},"# 这是单行注释\nprint(\"hello\")\n",[34,155318,155319,155324],{"__ignoreMap":32},[37,155320,155321],{"class":39,"line":40},[37,155322,155323],{"class":43},"# 这是单行注释\n",[37,155325,155326,155328,155330,155332],{"class":39,"line":47},[37,155327,30755],{"class":61},[37,155329,165],{"class":50},[37,155331,6192],{"class":185},[37,155333,280],{"class":50},[14,155335,155336],{},"多行说明常用三引号：",[27,155338,155340],{"className":29,"code":155339,"language":31,"meta":32,"style":32},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[34,155341,155342,155346,155351,155356],{"__ignoreMap":32},[37,155343,155344],{"class":39,"line":40},[37,155345,95983],{"class":185},[37,155347,155348],{"class":39,"line":47},[37,155349,155350],{"class":185},"这是多行说明。\n",[37,155352,155353],{"class":39,"line":104},[37,155354,155355],{"class":185},"常用于文件顶部说明、函数说明等。\n",[37,155357,155358],{"class":39,"line":113},[37,155359,95983],{"class":185},[14,155361,155362],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155364,155365],{},"不好：",[27,155367,155369],{"className":29,"code":155368,"language":31,"meta":32,"style":32},"# age 加 1\nage = age + 1\n",[34,155370,155371,155376],{"__ignoreMap":32},[37,155372,155373],{"class":39,"line":40},[37,155374,155375],{"class":43},"# age 加 1\n",[37,155377,155378,155380,155382,155384,155386],{"class":39,"line":47},[37,155379,146831],{"class":50},[37,155381,55],{"class":54},[37,155383,16048],{"class":50},[37,155385,993],{"class":54},[37,155387,56035],{"class":61},[14,155389,155390],{},"较好：",[27,155392,155394],{"className":29,"code":155393,"language":31,"meta":32,"style":32},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[34,155395,155396,155401],{"__ignoreMap":32},[37,155397,155398],{"class":39,"line":40},[37,155399,155400],{"class":43},"# 用户过完生日后，年龄增加一岁\n",[37,155402,155403,155405,155407,155409,155411],{"class":39,"line":47},[37,155404,146831],{"class":50},[37,155406,55],{"class":54},[37,155408,16048],{"class":50},[37,155410,993],{"class":54},[37,155412,56035],{"class":61},[469,155414,155416],{"id":155415},"_22-字面量","2.2 字面量",[14,155418,155419],{},"字面量就是代码中直接写出来的数据。",[27,155421,155423],{"className":29,"code":155422,"language":31,"meta":32,"style":32},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[34,155424,155425,155432,155439,155446,155453],{"__ignoreMap":32},[37,155426,155427,155429],{"class":39,"line":40},[37,155428,154],{"class":61},[37,155430,155431],{"class":43},"          # 整数\n",[37,155433,155434,155436],{"class":39,"line":47},[37,155435,576],{"class":61},[37,155437,155438],{"class":43},"         # 小数\n",[37,155440,155441,155443],{"class":39,"line":104},[37,155442,6192],{"class":185},[37,155444,155445],{"class":43},"      # 字符串\n",[37,155447,155448,155450],{"class":39,"line":113},[37,155449,31815],{"class":61},[37,155451,155452],{"class":43},"         # 布尔值\n",[37,155454,155455,155457],{"class":39,"line":189},[37,155456,95971],{"class":61},[37,155458,155459],{"class":43},"         # 空值\n",[14,155461,155462],{},"常见字面量类型：",[661,155464,155465,155475],{},[664,155466,155467],{},[667,155468,155469,155471,155473],{},[670,155470,24078],{},[670,155472,27834],{},[670,155474,26211],{},[708,155476,155477,155488,155499,155510,155522,155534,155546,155559,155571],{},[667,155478,155479,155481,155485],{},[713,155480,533],{},[713,155482,155483],{},[34,155484,154],{},[713,155486,155487],{},"整数",[667,155489,155490,155492,155496],{},[713,155491,568],{},[713,155493,155494],{},[34,155495,576],{},[713,155497,155498],{},"浮点数",[667,155500,155501,155503,155507],{},[713,155502,1678],{},[713,155504,155505],{},[34,155506,6192],{},[713,155508,155509],{},"字符串",[667,155511,155512,155514,155520],{},[713,155513,1730],{},[713,155515,155516,735,155518],{},[34,155517,31815],{},[34,155519,34324],{},[713,155521,66351],{},[667,155523,155524,155527,155531],{},[713,155525,155526],{},"NoneType",[713,155528,155529],{},[34,155530,95971],{},[713,155532,155533],{},"空值",[667,155535,155536,155538,155543],{},[713,155537,154355],{},[713,155539,155540],{},[34,155541,155542],{},"[1, 2, 3]",[713,155544,155545],{},"列表",[667,155547,155548,155551,155556],{},[713,155549,155550],{},"tuple",[713,155552,155553],{},[34,155554,155555],{},"(1, 2, 3)",[713,155557,155558],{},"元组",[667,155560,155561,155563,155568],{},[713,155562,114831],{},[713,155564,155565],{},[34,155566,155567],{},"{\"name\": \"张三\"}",[713,155569,155570],{},"字典",[667,155572,155573,155576,155581],{},[713,155574,155575],{},"set",[713,155577,155578],{},[34,155579,155580],{},"{1, 2, 3}",[713,155582,155583],{},"集合",[469,155585,155587],{"id":155586},"_23-变量","2.3 变量",[14,155589,155590],{},"变量是保存数据的名字。",[27,155592,155594],{"className":29,"code":155593,"language":31,"meta":32,"style":32},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[34,155595,155596,155604,155612,155622],{"__ignoreMap":32},[37,155597,155598,155600,155602],{"class":39,"line":40},[37,155599,146821],{"class":50},[37,155601,55],{"class":54},[37,155603,149638],{"class":185},[37,155605,155606,155608,155610],{"class":39,"line":47},[37,155607,146831],{"class":50},[37,155609,55],{"class":54},[37,155611,146836],{"class":61},[37,155613,155614,155617,155619],{"class":39,"line":104},[37,155615,155616],{"class":50},"height ",[37,155618,55],{"class":54},[37,155620,155621],{"class":61}," 1.75\n",[37,155623,155624,155627,155629],{"class":39,"line":113},[37,155625,155626],{"class":50},"is_student ",[37,155628,55],{"class":54},[37,155630,153884],{"class":61},[14,155632,155633],{},"Python 的变量不需要提前声明类型：",[27,155635,155637],{"className":29,"code":155636,"language":31,"meta":32,"style":32},"score = 100\nscore = \"满分\"\n",[34,155638,155639,155649],{"__ignoreMap":32},[37,155640,155641,155644,155646],{"class":39,"line":40},[37,155642,155643],{"class":50},"score ",[37,155645,55],{"class":54},[37,155647,155648],{"class":61}," 100\n",[37,155650,155651,155653,155655],{"class":39,"line":47},[37,155652,155643],{"class":50},[37,155654,55],{"class":54},[37,155656,155657],{"class":185}," \"满分\"\n",[14,155659,155660],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[469,155662,155664],{"id":155663},"_24-变量命名规则","2.4 变量命名规则",[14,155666,155667],{},"硬性规则：",[481,155669,155670,155673,155676,155679],{},[484,155671,155672],{},"只能由字母、数字、下划线组成。",[484,155674,155675],{},"不能以数字开头。",[484,155677,155678],{},"不能使用 Python 关键字。",[484,155680,155681],{},"区分大小写。",[27,155683,155685],{"className":29,"code":155684,"language":31,"meta":32,"style":32},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[34,155686,155687,155696,155705],{"__ignoreMap":32},[37,155688,155689,155692,155694],{"class":39,"line":40},[37,155690,155691],{"class":50},"user_name ",[37,155693,55],{"class":54},[37,155695,146826],{"class":185},[37,155697,155698,155701,155703],{"class":39,"line":47},[37,155699,155700],{"class":50},"age2 ",[37,155702,55],{"class":54},[37,155704,146836],{"class":61},[37,155706,155707,155710,155712],{"class":39,"line":104},[37,155708,155709],{"class":50},"_token ",[37,155711,55],{"class":54},[37,155713,155714],{"class":185}," \"abc\"\n",[14,155716,155717],{},"错误写法：",[27,155719,155721],{"className":29,"code":155720,"language":31,"meta":32,"style":32},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[34,155722,155723,155732,155744],{"__ignoreMap":32},[37,155724,155725,155728,155730],{"class":39,"line":40},[37,155726,155727],{"class":77738},"2age",[37,155729,13905],{"class":54},[37,155731,146836],{"class":61},[37,155733,155734,155736,155738,155740,155742],{"class":39,"line":47},[37,155735,131869],{"class":50},[37,155737,384],{"class":54},[37,155739,146821],{"class":50},[37,155741,55],{"class":54},[37,155743,146826],{"class":185},[37,155745,155746,155748,155750],{"class":39,"line":104},[37,155747,15035],{"class":54},[37,155749,13905],{"class":54},[37,155751,155752],{"class":185}," \"一班\"\n",[14,155754,155755],{},"查看关键字：",[27,155757,155759],{"className":29,"code":155758,"language":31,"meta":32,"style":32},"import keyword\n\nprint(keyword.kwlist)\n",[34,155760,155761,155768,155772],{"__ignoreMap":32},[37,155762,155763,155765],{"class":39,"line":40},[37,155764,30732],{"class":54},[37,155766,155767],{"class":50}," keyword\n",[37,155769,155770],{"class":39,"line":47},[37,155771,2757],{"emptyLinePlaceholder":454},[37,155773,155774,155776],{"class":39,"line":104},[37,155775,30755],{"class":61},[37,155777,155778],{"class":50},"(keyword.kwlist)\n",[14,155780,155781],{},"推荐命名风格：",[27,155783,155785],{"className":29,"code":155784,"language":31,"meta":32,"style":32},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[34,155786,155787,155796,155806],{"__ignoreMap":32},[37,155788,155789,155792,155794],{"class":39,"line":40},[37,155790,155791],{"class":50},"student_name ",[37,155793,55],{"class":54},[37,155795,149638],{"class":185},[37,155797,155798,155801,155803],{"class":39,"line":47},[37,155799,155800],{"class":50},"total_price ",[37,155802,55],{"class":54},[37,155804,155805],{"class":61}," 99.8\n",[37,155807,155808,155811,155813],{"class":39,"line":104},[37,155809,155810],{"class":50},"is_finished ",[37,155812,55],{"class":54},[37,155814,126092],{"class":61},[14,155816,155817],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[469,155819,51068],{"id":51067},[14,155821,104651,155822,155825],{},[34,155823,155824],{},"type()"," 查看数据类型：",[27,155827,155829],{"className":29,"code":155828,"language":31,"meta":32,"style":32},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[34,155830,155831,155845,155859,155873,155887],{"__ignoreMap":32},[37,155832,155833,155835,155837,155839,155841,155843],{"class":39,"line":40},[37,155834,30755],{"class":61},[37,155836,165],{"class":50},[37,155838,103392],{"class":61},[37,155840,165],{"class":50},[37,155842,154],{"class":61},[37,155844,175],{"class":50},[37,155846,155847,155849,155851,155853,155855,155857],{"class":39,"line":47},[37,155848,30755],{"class":61},[37,155850,165],{"class":50},[37,155852,103392],{"class":61},[37,155854,165],{"class":50},[37,155856,576],{"class":61},[37,155858,175],{"class":50},[37,155860,155861,155863,155865,155867,155869,155871],{"class":39,"line":104},[37,155862,30755],{"class":61},[37,155864,165],{"class":50},[37,155866,103392],{"class":61},[37,155868,165],{"class":50},[37,155870,6192],{"class":185},[37,155872,175],{"class":50},[37,155874,155875,155877,155879,155881,155883,155885],{"class":39,"line":113},[37,155876,30755],{"class":61},[37,155878,165],{"class":50},[37,155880,103392],{"class":61},[37,155882,165],{"class":50},[37,155884,31815],{"class":61},[37,155886,175],{"class":50},[37,155888,155889,155891,155893,155895,155897,155899],{"class":39,"line":189},[37,155890,30755],{"class":61},[37,155892,165],{"class":50},[37,155894,103392],{"class":61},[37,155896,165],{"class":50},[37,155898,95971],{"class":61},[37,155900,175],{"class":50},[14,155902,155903],{},"输出类似：",[27,155905,155908],{"className":155906,"code":155907,"language":5536,"meta":32},[5534],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[34,155909,155907],{"__ignoreMap":32},[14,155911,9366,155912,107568,155914,155916,155917,155919,155920,21841,155922,155919,155924,155926],{},[34,155913,1730],{},[34,155915,533],{}," 的子类，",[34,155918,31815],{}," 可以当作 ",[34,155921,332],{},[34,155923,34324],{},[34,155925,135],{},"，但业务代码中不要滥用。",[27,155928,155930],{"className":29,"code":155929,"language":31,"meta":32,"style":32},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[34,155931,155932,155950],{"__ignoreMap":32},[37,155933,155934,155936,155938,155940,155942,155944,155947],{"class":39,"line":40},[37,155935,30755],{"class":61},[37,155937,165],{"class":50},[37,155939,31815],{"class":61},[37,155941,45903],{"class":54},[37,155943,25460],{"class":61},[37,155945,155946],{"class":50},")   ",[37,155948,155949],{"class":43},"# 2\n",[37,155951,155952,155954,155956,155958,155960,155962,155964],{"class":39,"line":47},[37,155953,30755],{"class":61},[37,155955,165],{"class":50},[37,155957,34324],{"class":61},[37,155959,45903],{"class":54},[37,155961,25460],{"class":61},[37,155963,46145],{"class":50},[37,155965,155966],{"class":43},"# 1\n",[469,155968,155970],{"id":155969},"_26-类型转换","2.6 类型转换",[14,155972,155973],{},"常用转换函数：",[27,155975,155977],{"className":29,"code":155976,"language":31,"meta":32,"style":32},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[34,155978,155979,155989,156000,156010],{"__ignoreMap":32},[37,155980,155981,155983,155985,155987],{"class":39,"line":40},[37,155982,533],{"class":61},[37,155984,165],{"class":50},[37,155986,54652],{"class":185},[37,155988,280],{"class":50},[37,155990,155991,155993,155995,155998],{"class":39,"line":47},[37,155992,568],{"class":61},[37,155994,165],{"class":50},[37,155996,155997],{"class":185},"\"3.14\"",[37,155999,280],{"class":50},[37,156001,156002,156004,156006,156008],{"class":39,"line":104},[37,156003,1678],{"class":61},[37,156005,165],{"class":50},[37,156007,154],{"class":61},[37,156009,280],{"class":50},[37,156011,156012,156014,156016,156018],{"class":39,"line":113},[37,156013,1730],{"class":61},[37,156015,165],{"class":50},[37,156017,332],{"class":61},[37,156019,280],{"class":50},[14,156021,15476],{},[27,156023,156025],{"className":29,"code":156024,"language":31,"meta":32,"style":32},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[34,156026,156027,156036,156047],{"__ignoreMap":32},[37,156028,156029,156031,156033],{"class":39,"line":40},[37,156030,146831],{"class":50},[37,156032,55],{"class":54},[37,156034,156035],{"class":185}," \"18\"\n",[37,156037,156038,156040,156042,156044],{"class":39,"line":47},[37,156039,146831],{"class":50},[37,156041,55],{"class":54},[37,156043,2739],{"class":61},[37,156045,156046],{"class":50},"(age)\n",[37,156048,156049,156051,156054,156056,156058],{"class":39,"line":104},[37,156050,30755],{"class":61},[37,156052,156053],{"class":50},"(age ",[37,156055,993],{"class":54},[37,156057,25460],{"class":61},[37,156059,280],{"class":50},[14,156061,156062],{},"输入得到的内容永远是字符串：",[27,156064,156066],{"className":29,"code":156065,"language":31,"meta":32,"style":32},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[34,156067,156068,156084],{"__ignoreMap":32},[37,156069,156070,156073,156075,156077,156079,156082],{"class":39,"line":40},[37,156071,156072],{"class":50},"num ",[37,156074,55],{"class":54},[37,156076,60941],{"class":61},[37,156078,165],{"class":50},[37,156080,156081],{"class":185},"\"请输入数字:\"",[37,156083,280],{"class":50},[37,156085,156086,156088,156090,156092,156095],{"class":39,"line":47},[37,156087,30755],{"class":61},[37,156089,165],{"class":50},[37,156091,103392],{"class":61},[37,156093,156094],{"class":50},"(num))  ",[37,156096,156097],{"class":43},"# str\n",[14,156099,156100],{},"如果要做数学运算，必须转换：",[27,156102,156104],{"className":29,"code":156103,"language":31,"meta":32,"style":32},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[34,156105,156106,156124],{"__ignoreMap":32},[37,156107,156108,156110,156112,156114,156116,156118,156120,156122],{"class":39,"line":40},[37,156109,156072],{"class":50},[37,156111,55],{"class":54},[37,156113,2739],{"class":61},[37,156115,165],{"class":50},[37,156117,54157],{"class":61},[37,156119,165],{"class":50},[37,156121,156081],{"class":185},[37,156123,175],{"class":50},[37,156125,156126,156128,156130,156132,156134],{"class":39,"line":47},[37,156127,30755],{"class":61},[37,156129,45956],{"class":50},[37,156131,993],{"class":54},[37,156133,2395],{"class":61},[37,156135,280],{"class":50},[14,156137,156138],{},"常见错误：",[27,156140,156142],{"className":29,"code":156141,"language":31,"meta":32,"style":32},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[34,156143,156144,156157],{"__ignoreMap":32},[37,156145,156146,156148,156150,156152,156154],{"class":39,"line":40},[37,156147,533],{"class":61},[37,156149,165],{"class":50},[37,156151,155997],{"class":185},[37,156153,155946],{"class":50},[37,156155,156156],{"class":43},"# 错误\n",[37,156158,156159,156161,156163,156166,156169],{"class":39,"line":47},[37,156160,533],{"class":61},[37,156162,165],{"class":50},[37,156164,156165],{"class":185},"\"abc\"",[37,156167,156168],{"class":50},")    ",[37,156170,156156],{"class":43},[14,156172,156173],{},"正确写法：",[27,156175,156177],{"className":29,"code":156176,"language":31,"meta":32,"style":32},"num = float(\"3.14\")\n",[34,156178,156179],{"__ignoreMap":32},[37,156180,156181,156183,156185,156187,156189,156191],{"class":39,"line":40},[37,156182,156072],{"class":50},[37,156184,55],{"class":54},[37,156186,110082],{"class":61},[37,156188,165],{"class":50},[37,156190,155997],{"class":185},[37,156192,280],{"class":50},[469,156194,156196],{"id":156195},"_27-运算符","2.7 运算符",[498,156198,156200],{"id":156199},"_271-算术运算符","2.7.1 算术运算符",[661,156202,156203,156214],{},[664,156204,156205],{},[667,156206,156207,156210,156212],{},[670,156208,156209],{},"运算符",[670,156211,26211],{},[670,156213,27834],{},[708,156215,156216,156230,156244,156258,156272,156286,156300],{},[667,156217,156218,156222,156225],{},[713,156219,156220],{},[34,156221,993],{},[713,156223,156224],{},"加法",[713,156226,156227],{},[34,156228,156229],{},"1 + 2",[667,156231,156232,156236,156239],{},[713,156233,156234],{},[34,156235,384],{},[713,156237,156238],{},"减法",[713,156240,156241],{},[34,156242,156243],{},"5 - 3",[667,156245,156246,156250,156253],{},[713,156247,156248],{},[34,156249,967],{},[713,156251,156252],{},"乘法",[713,156254,156255],{},[34,156256,156257],{},"2 * 3",[667,156259,156260,156264,156267],{},[713,156261,156262],{},[34,156263,1094],{},[713,156265,156266],{},"除法，结果是浮点数",[713,156268,156269],{},[34,156270,156271],{},"5 \u002F 2",[667,156273,156274,156278,156281],{},[713,156275,156276],{},[34,156277,33666],{},[713,156279,156280],{},"整除",[713,156282,156283],{},[34,156284,156285],{},"5 \u002F\u002F 2",[667,156287,156288,156292,156295],{},[713,156289,156290],{},[34,156291,845],{},[713,156293,156294],{},"取余",[713,156296,156297],{},[34,156298,156299],{},"5 % 2",[667,156301,156302,156306,156309],{},[713,156303,156304],{},[34,156305,11002],{},[713,156307,156308],{},"幂运算",[713,156310,156311],{},[34,156312,156313],{},"2 ** 3",[14,156315,15476],{},[27,156317,156319],{"className":29,"code":156318,"language":31,"meta":32,"style":32},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[34,156320,156321,156339,156356,156373],{"__ignoreMap":32},[37,156322,156323,156325,156327,156329,156332,156334,156336],{"class":39,"line":40},[37,156324,30755],{"class":61},[37,156326,165],{"class":50},[37,156328,836],{"class":61},[37,156330,156331],{"class":54}," \u002F",[37,156333,15096],{"class":61},[37,156335,155946],{"class":50},[37,156337,156338],{"class":43},"# 2.5\n",[37,156340,156341,156343,156345,156347,156350,156352,156354],{"class":39,"line":47},[37,156342,30755],{"class":61},[37,156344,165],{"class":50},[37,156346,836],{"class":61},[37,156348,156349],{"class":54}," \u002F\u002F",[37,156351,15096],{"class":61},[37,156353,46145],{"class":50},[37,156355,155949],{"class":43},[37,156357,156358,156360,156362,156364,156367,156369,156371],{"class":39,"line":104},[37,156359,30755],{"class":61},[37,156361,165],{"class":50},[37,156363,836],{"class":61},[37,156365,156366],{"class":54}," %",[37,156368,15096],{"class":61},[37,156370,155946],{"class":50},[37,156372,155966],{"class":43},[37,156374,156375,156377,156379,156381,156384,156386,156388],{"class":39,"line":113},[37,156376,30755],{"class":61},[37,156378,165],{"class":50},[37,156380,602],{"class":61},[37,156382,156383],{"class":54}," **",[37,156385,78405],{"class":61},[37,156387,46145],{"class":50},[37,156389,156390],{"class":43},"# 8\n",[498,156392,156394],{"id":156393},"_272-赋值运算符","2.7.2 赋值运算符",[27,156396,156398],{"className":29,"code":156397,"language":31,"meta":32,"style":32},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[34,156399,156400,156408,156416,156424,156432],{"__ignoreMap":32},[37,156401,156402,156404,156406],{"class":39,"line":40},[37,156403,156072],{"class":50},[37,156405,55],{"class":54},[37,156407,58764],{"class":61},[37,156409,156410,156412,156414],{"class":39,"line":47},[37,156411,156072],{"class":50},[37,156413,9818],{"class":54},[37,156415,54763],{"class":61},[37,156417,156418,156420,156422],{"class":39,"line":104},[37,156419,156072],{"class":50},[37,156421,150537],{"class":54},[37,156423,48059],{"class":61},[37,156425,156426,156428,156430],{"class":39,"line":113},[37,156427,156072],{"class":50},[37,156429,137433],{"class":54},[37,156431,120321],{"class":61},[37,156433,156434,156436,156439],{"class":39,"line":189},[37,156435,156072],{"class":50},[37,156437,156438],{"class":54},"\u002F=",[37,156440,48059],{"class":61},[14,156442,156443],{},"等价关系：",[27,156445,156447],{"className":29,"code":156446,"language":31,"meta":32,"style":32},"num += 1\nnum = num + 1\n",[34,156448,156449,156457],{"__ignoreMap":32},[37,156450,156451,156453,156455],{"class":39,"line":40},[37,156452,156072],{"class":50},[37,156454,9818],{"class":54},[37,156456,56035],{"class":61},[37,156458,156459,156461,156463,156466,156468],{"class":39,"line":47},[37,156460,156072],{"class":50},[37,156462,55],{"class":54},[37,156464,156465],{"class":50}," num ",[37,156467,993],{"class":54},[37,156469,56035],{"class":61},[14,156471,156472,156473,101303,156476,28727],{},"Python 没有 ",[34,156474,156475],{},"num++",[34,156477,156478],{},"num--",[498,156480,156482],{"id":156481},"_273-比较运算符","2.7.3 比较运算符",[14,156484,156485],{},"比较运算结果是布尔值。",[27,156487,156489],{"className":29,"code":156488,"language":31,"meta":32,"style":32},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[34,156490,156491,156505,156520,156534],{"__ignoreMap":32},[37,156492,156493,156495,156497,156499,156501,156503],{"class":39,"line":40},[37,156494,30755],{"class":61},[37,156496,165],{"class":50},[37,156498,98],{"class":61},[37,156500,26564],{"class":54},[37,156502,2505],{"class":61},[37,156504,280],{"class":50},[37,156506,156507,156509,156511,156513,156516,156518],{"class":39,"line":47},[37,156508,30755],{"class":61},[37,156510,165],{"class":50},[37,156512,98],{"class":61},[37,156514,156515],{"class":54}," >=",[37,156517,2395],{"class":61},[37,156519,280],{"class":50},[37,156521,156522,156524,156526,156528,156530,156532],{"class":39,"line":104},[37,156523,30755],{"class":61},[37,156525,165],{"class":50},[37,156527,98],{"class":61},[37,156529,101844],{"class":54},[37,156531,2440],{"class":61},[37,156533,280],{"class":50},[37,156535,156536,156538,156540,156542,156545,156547],{"class":39,"line":113},[37,156537,30755],{"class":61},[37,156539,165],{"class":50},[37,156541,98],{"class":61},[37,156543,156544],{"class":54}," !=",[37,156546,2440],{"class":61},[37,156548,280],{"class":50},[14,156550,156551,156552,156554,156555,28727],{},"注意：判断相等用 ",[34,156553,3299],{},"，赋值用 ",[34,156556,55],{},[27,156558,156560],{"className":29,"code":156559,"language":31,"meta":32,"style":32},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[34,156561,156562,156574],{"__ignoreMap":32},[37,156563,156564,156566,156568,156571],{"class":39,"line":40},[37,156565,146831],{"class":50},[37,156567,55],{"class":54},[37,156569,156570],{"class":61}," 18",[37,156572,156573],{"class":43},"       # 赋值\n",[37,156575,156576,156578,156580,156582],{"class":39,"line":47},[37,156577,146831],{"class":50},[37,156579,3299],{"class":54},[37,156581,156570],{"class":61},[37,156583,156584],{"class":43},"      # 判断是否相等\n",[498,156586,156588],{"id":156587},"_274-逻辑运算符","2.7.4 逻辑运算符",[661,156590,156591,156599],{},[664,156592,156593],{},[667,156594,156595,156597],{},[670,156596,156209],{},[670,156598,26211],{},[708,156600,156601,156610,156619],{},[667,156602,156603,156607],{},[713,156604,156605],{},[34,156606,30802],{},[713,156608,156609],{},"并且",[667,156611,156612,156616],{},[713,156613,156614],{},[34,156615,115375],{},[713,156617,156618],{},"或者",[667,156620,156621,156626],{},[713,156622,156623],{},[34,156624,156625],{},"not",[713,156627,156628],{},"取反",[27,156630,156632],{"className":29,"code":156631,"language":31,"meta":32,"style":32},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[34,156633,156634,156642,156651,156655,156670,156684],{"__ignoreMap":32},[37,156635,156636,156638,156640],{"class":39,"line":40},[37,156637,146831],{"class":50},[37,156639,55],{"class":54},[37,156641,88400],{"class":61},[37,156643,156644,156647,156649],{"class":39,"line":47},[37,156645,156646],{"class":50},"has_ticket ",[37,156648,55],{"class":54},[37,156650,153884],{"class":61},[37,156652,156653],{"class":39,"line":104},[37,156654,2757],{"emptyLinePlaceholder":454},[37,156656,156657,156659,156661,156663,156665,156667],{"class":39,"line":113},[37,156658,30755],{"class":61},[37,156660,156053],{"class":50},[37,156662,2075],{"class":54},[37,156664,156570],{"class":61},[37,156666,120714],{"class":54},[37,156668,156669],{"class":50}," has_ticket)\n",[37,156671,156672,156674,156676,156678,156680,156682],{"class":39,"line":189},[37,156673,30755],{"class":61},[37,156675,156053],{"class":50},[37,156677,1418],{"class":54},[37,156679,156570],{"class":61},[37,156681,114486],{"class":54},[37,156683,156669],{"class":50},[37,156685,156686,156688,156690,156692],{"class":39,"line":195},[37,156687,30755],{"class":61},[37,156689,165],{"class":50},[37,156691,156625],{"class":54},[37,156693,156669],{"class":50},[469,156695,156697],{"id":156696},"_28-字符串定义","2.8 字符串定义",[14,156699,156700],{},"三种常见写法：",[27,156702,156704],{"className":29,"code":156703,"language":31,"meta":32,"style":32},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[34,156705,156706,156716,156725,156735],{"__ignoreMap":32},[37,156707,156708,156711,156713],{"class":39,"line":40},[37,156709,156710],{"class":50},"name1 ",[37,156712,55],{"class":54},[37,156714,156715],{"class":185}," '小明'\n",[37,156717,156718,156721,156723],{"class":39,"line":47},[37,156719,156720],{"class":50},"name2 ",[37,156722,55],{"class":54},[37,156724,149638],{"class":185},[37,156726,156727,156730,156732],{"class":39,"line":104},[37,156728,156729],{"class":50},"text ",[37,156731,55],{"class":54},[37,156733,156734],{"class":185}," \"\"\"这是多行字符串\n",[37,156736,156737],{"class":39,"line":113},[37,156738,156739],{"class":185},"可以换行\"\"\"\n",[14,156741,156742],{},"字符串中包含引号：",[27,156744,156746],{"className":29,"code":156745,"language":31,"meta":32,"style":32},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[34,156747,156748,156758,156768],{"__ignoreMap":32},[37,156749,156750,156753,156755],{"class":39,"line":40},[37,156751,156752],{"class":50},"msg ",[37,156754,55],{"class":54},[37,156756,156757],{"class":185}," \"他说:'你好'\"\n",[37,156759,156760,156763,156765],{"class":39,"line":47},[37,156761,156762],{"class":50},"msg2 ",[37,156764,55],{"class":54},[37,156766,156767],{"class":185}," '他说:\"你好\"'\n",[37,156769,156770,156773,156775,156778,156781,156784,156786],{"class":39,"line":104},[37,156771,156772],{"class":50},"msg3 ",[37,156774,55],{"class":54},[37,156776,156777],{"class":185}," \"他说:",[37,156779,156780],{"class":61},"\\\"",[37,156782,156783],{"class":185},"你好",[37,156785,156780],{"class":61},[37,156787,25475],{"class":185},[14,156789,156790],{},"常见转义字符：",[661,156792,156793,156802],{},[664,156794,156795],{},[667,156796,156797,156800],{},[670,156798,156799],{},"写法",[670,156801,100985],{},[708,156803,156804,156814,156823,156833,156842],{},[667,156805,156806,156811],{},[713,156807,156808],{},[34,156809,156810],{},"\\n",[713,156812,156813],{},"换行",[667,156815,156816,156820],{},[713,156817,156818],{},[34,156819,1609],{},[713,156821,156822],{},"制表符",[667,156824,156825,156830],{},[713,156826,156827],{},[34,156828,156829],{},"\\\\",[713,156831,156832],{},"反斜杠",[667,156834,156835,156839],{},[713,156836,156837],{},[34,156838,156780],{},[713,156840,156841],{},"双引号",[667,156843,156844,156849],{},[713,156845,156846],{},[34,156847,156848],{},"\\'",[713,156850,156851],{},"单引号",[469,156853,156855],{"id":156854},"_29-字符串拼接","2.9 字符串拼接",[27,156857,156859],{"className":29,"code":156858,"language":31,"meta":32,"style":32},"name = \"小明\"\nprint(\"你好，\" + name)\n",[34,156860,156861,156869],{"__ignoreMap":32},[37,156862,156863,156865,156867],{"class":39,"line":40},[37,156864,146821],{"class":50},[37,156866,55],{"class":54},[37,156868,149638],{"class":185},[37,156870,156871,156873,156875,156878,156880],{"class":39,"line":47},[37,156872,30755],{"class":61},[37,156874,165],{"class":50},[37,156876,156877],{"class":185},"\"你好，\"",[37,156879,45903],{"class":54},[37,156881,156882],{"class":50}," name)\n",[14,156884,156885],{},"字符串只能和字符串拼接：",[27,156887,156889],{"className":29,"code":156888,"language":31,"meta":32,"style":32},"age = 18\nprint(\"年龄:\" + str(age))\n",[34,156890,156891,156899],{"__ignoreMap":32},[37,156892,156893,156895,156897],{"class":39,"line":40},[37,156894,146831],{"class":50},[37,156896,55],{"class":54},[37,156898,146836],{"class":61},[37,156900,156901,156903,156905,156907,156909,156911],{"class":39,"line":47},[37,156902,30755],{"class":61},[37,156904,165],{"class":50},[37,156906,146802],{"class":185},[37,156908,45903],{"class":54},[37,156910,74255],{"class":61},[37,156912,156913],{"class":50},"(age))\n",[14,156915,156916],{},"更推荐使用格式化字符串。",[469,156918,156920],{"id":156919},"_210-字符串格式化","2.10 字符串格式化",[498,156922,156924],{"id":156923},"_2101-百分号格式化","2.10.1 百分号格式化",[27,156926,156928],{"className":29,"code":156927,"language":31,"meta":32,"style":32},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[34,156929,156930,156938,156946,156955,156959],{"__ignoreMap":32},[37,156931,156932,156934,156936],{"class":39,"line":40},[37,156933,146821],{"class":50},[37,156935,55],{"class":54},[37,156937,149638],{"class":185},[37,156939,156940,156942,156944],{"class":39,"line":47},[37,156941,146831],{"class":50},[37,156943,55],{"class":54},[37,156945,146836],{"class":61},[37,156947,156948,156950,156952],{"class":39,"line":104},[37,156949,155643],{"class":50},[37,156951,55],{"class":54},[37,156953,156954],{"class":61}," 95.5\n",[37,156956,156957],{"class":39,"line":113},[37,156958,2757],{"emptyLinePlaceholder":454},[37,156960,156961,156963,156965,156968,156971,156974,156977,156980,156983,156985,156987],{"class":39,"line":189},[37,156962,30755],{"class":61},[37,156964,165],{"class":50},[37,156966,156967],{"class":185},"\"姓名:",[37,156969,156970],{"class":61},"%s",[37,156972,156973],{"class":185}," 年龄:",[37,156975,156976],{"class":61},"%d",[37,156978,156979],{"class":185}," 分数:",[37,156981,156982],{"class":61},"%.1f",[37,156984,772],{"class":185},[37,156986,156366],{"class":54},[37,156988,156989],{"class":50}," (name, age, score))\n",[14,156991,156992],{},"常用占位符：",[661,156994,156995,157004],{},[664,156996,156997],{},[667,156998,156999,157002],{},[670,157000,157001],{},"占位符",[670,157003,26211],{},[708,157005,157006,157014,157022],{},[667,157007,157008,157012],{},[713,157009,157010],{},[34,157011,156970],{},[713,157013,155509],{},[667,157015,157016,157020],{},[713,157017,157018],{},[34,157019,156976],{},[713,157021,155487],{},[667,157023,157024,157029],{},[713,157025,157026],{},[34,157027,157028],{},"%f",[713,157030,155498],{},[14,157032,157033],{},"精度控制：",[27,157035,157037],{"className":29,"code":157036,"language":31,"meta":32,"style":32},"price = 12.3456\nprint(\"%.2f\" % price)\n",[34,157038,157039,157048],{"__ignoreMap":32},[37,157040,157041,157043,157045],{"class":39,"line":40},[37,157042,146966],{"class":50},[37,157044,55],{"class":54},[37,157046,157047],{"class":61}," 12.3456\n",[37,157049,157050,157052,157054,157056,157059,157061,157063],{"class":39,"line":47},[37,157051,30755],{"class":61},[37,157053,165],{"class":50},[37,157055,772],{"class":185},[37,157057,157058],{"class":61},"%.2f",[37,157060,772],{"class":185},[37,157062,156366],{"class":54},[37,157064,157065],{"class":50}," price)\n",[498,157067,157069],{"id":157068},"_2102-format方法","2.10.2 format方法",[27,157071,157073],{"className":29,"code":157072,"language":31,"meta":32,"style":32},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[34,157074,157075,157083,157091,157095,157114,157134],{"__ignoreMap":32},[37,157076,157077,157079,157081],{"class":39,"line":40},[37,157078,146821],{"class":50},[37,157080,55],{"class":54},[37,157082,149638],{"class":185},[37,157084,157085,157087,157089],{"class":39,"line":47},[37,157086,146831],{"class":50},[37,157088,55],{"class":54},[37,157090,146836],{"class":61},[37,157092,157093],{"class":39,"line":104},[37,157094,2757],{"emptyLinePlaceholder":454},[37,157096,157097,157099,157101,157103,157105,157107,157109,157111],{"class":39,"line":113},[37,157098,30755],{"class":61},[37,157100,165],{"class":50},[37,157102,156967],{"class":185},[37,157104,32797],{"class":61},[37,157106,156973],{"class":185},[37,157108,32797],{"class":61},[37,157110,772],{"class":185},[37,157112,157113],{"class":50},".format(name, age))\n",[37,157115,157116,157118,157120,157122,157125,157127,157130,157132],{"class":39,"line":189},[37,157117,30755],{"class":61},[37,157119,165],{"class":50},[37,157121,156967],{"class":185},[37,157123,157124],{"class":61},"{0}",[37,157126,156973],{"class":185},[37,157128,157129],{"class":61},"{1}",[37,157131,772],{"class":185},[37,157133,157113],{"class":50},[37,157135,157136,157138,157140,157142,157145,157147,157150,157152,157155,157157,157159,157162,157164,157166],{"class":39,"line":195},[37,157137,30755],{"class":61},[37,157139,165],{"class":50},[37,157141,156967],{"class":185},[37,157143,157144],{"class":61},"{name}",[37,157146,156973],{"class":185},[37,157148,157149],{"class":61},"{age}",[37,157151,772],{"class":185},[37,157153,157154],{"class":50},".format(",[37,157156,80145],{"class":159},[37,157158,55],{"class":54},[37,157160,157161],{"class":50},"name, ",[37,157163,70557],{"class":159},[37,157165,55],{"class":54},[37,157167,157168],{"class":50},"age))\n",[498,157170,157172],{"id":157171},"_2103-f-string","2.10.3 f-string",[14,157174,157175],{},"推荐写法：",[27,157177,157179],{"className":29,"code":157178,"language":31,"meta":32,"style":32},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[34,157180,157181,157189,157197,157205,157209],{"__ignoreMap":32},[37,157182,157183,157185,157187],{"class":39,"line":40},[37,157184,146821],{"class":50},[37,157186,55],{"class":54},[37,157188,149638],{"class":185},[37,157190,157191,157193,157195],{"class":39,"line":47},[37,157192,146831],{"class":50},[37,157194,55],{"class":54},[37,157196,146836],{"class":61},[37,157198,157199,157201,157203],{"class":39,"line":104},[37,157200,155643],{"class":50},[37,157202,55],{"class":54},[37,157204,156954],{"class":61},[37,157206,157207],{"class":39,"line":113},[37,157208,2757],{"emptyLinePlaceholder":454},[37,157210,157211,157213,157215,157217,157219,157221,157223,157225,157227,157229,157231,157233,157235,157237,157240,157243,157245,157247],{"class":39,"line":189},[37,157212,30755],{"class":61},[37,157214,165],{"class":50},[37,157216,579],{"class":54},[37,157218,156967],{"class":185},[37,157220,1404],{"class":61},[37,157222,80145],{"class":50},[37,157224,1454],{"class":61},[37,157226,156973],{"class":185},[37,157228,1404],{"class":61},[37,157230,70557],{"class":50},[37,157232,1454],{"class":61},[37,157234,156979],{"class":185},[37,157236,1404],{"class":61},[37,157238,157239],{"class":50},"score",[37,157241,157242],{"class":54},":.1f",[37,157244,1454],{"class":61},[37,157246,772],{"class":185},[37,157248,280],{"class":50},[14,157250,157251],{},"表达式也可以放进去：",[27,157253,157255],{"className":29,"code":157254,"language":31,"meta":32,"style":32},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[34,157256,157257,157265,157273],{"__ignoreMap":32},[37,157258,157259,157261,157263],{"class":39,"line":40},[37,157260,146966],{"class":50},[37,157262,55],{"class":54},[37,157264,146971],{"class":61},[37,157266,157267,157269,157271],{"class":39,"line":47},[37,157268,146976],{"class":50},[37,157270,55],{"class":54},[37,157272,54763],{"class":61},[37,157274,157275,157277,157279,157281,157284,157286,157288,157290,157293,157295,157298],{"class":39,"line":104},[37,157276,30755],{"class":61},[37,157278,165],{"class":50},[37,157280,579],{"class":54},[37,157282,157283],{"class":185},"\"总价:",[37,157285,1404],{"class":61},[37,157287,146966],{"class":50},[37,157289,967],{"class":54},[37,157291,157292],{"class":50}," count",[37,157294,1454],{"class":61},[37,157296,157297],{"class":185},"元\"",[37,157299,280],{"class":50},[469,157301,157303],{"id":157302},"_211-input输入","2.11 input输入",[14,157305,157306,157309],{},[34,157307,157308],{},"input()"," 会暂停程序，等待用户输入。",[27,157311,157313],{"className":29,"code":157312,"language":31,"meta":32,"style":32},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[34,157314,157315,157329],{"__ignoreMap":32},[37,157316,157317,157319,157321,157323,157325,157327],{"class":39,"line":40},[37,157318,146821],{"class":50},[37,157320,55],{"class":54},[37,157322,60941],{"class":61},[37,157324,165],{"class":50},[37,157326,152664],{"class":185},[37,157328,280],{"class":50},[37,157330,157331,157333,157335,157337,157340,157342,157344,157346,157348],{"class":39,"line":47},[37,157332,30755],{"class":61},[37,157334,165],{"class":50},[37,157336,579],{"class":54},[37,157338,157339],{"class":185},"\"你好，",[37,157341,1404],{"class":61},[37,157343,80145],{"class":50},[37,157345,1454],{"class":61},[37,157347,772],{"class":185},[37,157349,280],{"class":50},[14,157351,157352],{},"输入整数：",[27,157354,157356],{"className":29,"code":157355,"language":31,"meta":32,"style":32},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[34,157357,157358,157376],{"__ignoreMap":32},[37,157359,157360,157362,157364,157366,157368,157370,157372,157374],{"class":39,"line":40},[37,157361,146831],{"class":50},[37,157363,55],{"class":54},[37,157365,2739],{"class":61},[37,157367,165],{"class":50},[37,157369,54157],{"class":61},[37,157371,165],{"class":50},[37,157373,152679],{"class":185},[37,157375,175],{"class":50},[37,157377,157378,157380,157382,157384,157387,157389,157391,157393,157396,157398],{"class":39,"line":47},[37,157379,30755],{"class":61},[37,157381,165],{"class":50},[37,157383,579],{"class":54},[37,157385,157386],{"class":185},"\"明年你",[37,157388,1404],{"class":61},[37,157390,146831],{"class":50},[37,157392,993],{"class":54},[37,157394,157395],{"class":61}," 1}",[37,157397,149689],{"class":185},[37,157399,280],{"class":50},[14,157401,157402],{},"输入小数：",[27,157404,157406],{"className":29,"code":157405,"language":31,"meta":32,"style":32},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[34,157407,157408,157427],{"__ignoreMap":32},[37,157409,157410,157412,157414,157416,157418,157420,157422,157425],{"class":39,"line":40},[37,157411,155616],{"class":50},[37,157413,55],{"class":54},[37,157415,110082],{"class":61},[37,157417,165],{"class":50},[37,157419,54157],{"class":61},[37,157421,165],{"class":50},[37,157423,157424],{"class":185},"\"请输入身高:\"",[37,157426,175],{"class":50},[37,157428,157429,157431,157433,157435,157438,157440,157442,157445,157447,157450],{"class":39,"line":47},[37,157430,30755],{"class":61},[37,157432,165],{"class":50},[37,157434,579],{"class":54},[37,157436,157437],{"class":185},"\"身高:",[37,157439,1404],{"class":61},[37,157441,25323],{"class":50},[37,157443,157444],{"class":54},":.2f",[37,157446,1454],{"class":61},[37,157448,157449],{"class":185},"米\"",[37,157451,280],{"class":50},[469,157453,157455],{"id":157454},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157457,123577],{},[481,157459,157460,157463,157466,157469],{},[484,157461,157462],{},"输入商品单价。",[484,157464,157465],{},"输入购买数量。",[484,157467,157468],{},"输入折扣，例如 0.8 表示八折。",[484,157470,157471],{},"输出最终金额，保留两位小数。",[14,157473,10376],{},[27,157475,157477],{"className":29,"code":157476,"language":31,"meta":32,"style":32},"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",[34,157478,157479,157498,157517,157537,157541,157561,157565,157588,157609,157631],{"__ignoreMap":32},[37,157480,157481,157483,157485,157487,157489,157491,157493,157496],{"class":39,"line":40},[37,157482,146966],{"class":50},[37,157484,55],{"class":54},[37,157486,110082],{"class":61},[37,157488,165],{"class":50},[37,157490,54157],{"class":61},[37,157492,165],{"class":50},[37,157494,157495],{"class":185},"\"请输入商品单价:\"",[37,157497,175],{"class":50},[37,157499,157500,157502,157504,157506,157508,157510,157512,157515],{"class":39,"line":47},[37,157501,146976],{"class":50},[37,157503,55],{"class":54},[37,157505,2739],{"class":61},[37,157507,165],{"class":50},[37,157509,54157],{"class":61},[37,157511,165],{"class":50},[37,157513,157514],{"class":185},"\"请输入购买数量:\"",[37,157516,175],{"class":50},[37,157518,157519,157522,157524,157526,157528,157530,157532,157535],{"class":39,"line":104},[37,157520,157521],{"class":50},"discount ",[37,157523,55],{"class":54},[37,157525,110082],{"class":61},[37,157527,165],{"class":50},[37,157529,54157],{"class":61},[37,157531,165],{"class":50},[37,157533,157534],{"class":185},"\"请输入折扣:\"",[37,157536,175],{"class":50},[37,157538,157539],{"class":39,"line":113},[37,157540,2757],{"emptyLinePlaceholder":454},[37,157542,157543,157546,157548,157551,157553,157556,157558],{"class":39,"line":189},[37,157544,157545],{"class":50},"total ",[37,157547,55],{"class":54},[37,157549,157550],{"class":50}," price ",[37,157552,967],{"class":54},[37,157554,157555],{"class":50}," count ",[37,157557,967],{"class":54},[37,157559,157560],{"class":50}," discount\n",[37,157562,157563],{"class":39,"line":195},[37,157564,2757],{"emptyLinePlaceholder":454},[37,157566,157567,157569,157571,157573,157576,157578,157580,157582,157584,157586],{"class":39,"line":201},[37,157568,30755],{"class":61},[37,157570,165],{"class":50},[37,157572,579],{"class":54},[37,157574,157575],{"class":185},"\"商品单价:",[37,157577,1404],{"class":61},[37,157579,80150],{"class":50},[37,157581,157444],{"class":54},[37,157583,1454],{"class":61},[37,157585,772],{"class":185},[37,157587,280],{"class":50},[37,157589,157590,157592,157594,157596,157599,157601,157603,157605,157607],{"class":39,"line":207},[37,157591,30755],{"class":61},[37,157593,165],{"class":50},[37,157595,579],{"class":54},[37,157597,157598],{"class":185},"\"购买数量:",[37,157600,1404],{"class":61},[37,157602,84769],{"class":50},[37,157604,1454],{"class":61},[37,157606,772],{"class":185},[37,157608,280],{"class":50},[37,157610,157611,157613,157615,157617,157620,157622,157625,157627,157629],{"class":39,"line":213},[37,157612,30755],{"class":61},[37,157614,165],{"class":50},[37,157616,579],{"class":54},[37,157618,157619],{"class":185},"\"折扣:",[37,157621,1404],{"class":61},[37,157623,157624],{"class":50},"discount",[37,157626,1454],{"class":61},[37,157628,772],{"class":185},[37,157630,280],{"class":50},[37,157632,157633,157635,157637,157639,157642,157644,157647,157649,157651,157653],{"class":39,"line":218},[37,157634,30755],{"class":61},[37,157636,165],{"class":50},[37,157638,579],{"class":54},[37,157640,157641],{"class":185},"\"应付金额:",[37,157643,1404],{"class":61},[37,157645,157646],{"class":50},"total",[37,157648,157444],{"class":54},[37,157650,1454],{"class":61},[37,157652,157297],{"class":185},[37,157654,280],{"class":50},[469,157656,157658],{"id":157657},"_213-易错点","2.13 易错点",[481,157660,157661,157666,157672,157680,157683],{},[484,157662,157663,157665],{},[34,157664,157308],{}," 的结果是字符串，做运算前要转换。",[484,157667,157668,157669,28727],{},"字符串拼接时，数字要先 ",[34,157670,157671],{},"str()",[484,157673,157674,157676,157677,157679],{},[34,157675,55],{}," 是赋值，",[34,157678,3299],{}," 是比较。",[484,157681,157682],{},"Python 没有自增自减运算符。",[484,157684,157685],{},"浮点数计算可能有精度误差：",[27,157687,157689],{"className":29,"code":157688,"language":31,"meta":32,"style":32},"print(0.1 + 0.2)\n",[34,157690,157691],{"__ignoreMap":32},[37,157692,157693,157695,157697,157699,157701,157704],{"class":39,"line":40},[37,157694,30755],{"class":61},[37,157696,165],{"class":50},[37,157698,86545],{"class":61},[37,157700,45903],{"class":54},[37,157702,157703],{"class":61}," 0.2",[37,157705,280],{"class":50},[14,157707,157708,157709,157712],{},"金额计算如果要求严格，可以后续学习 ",[34,157710,157711],{},"decimal"," 模块。",[469,157714,157716],{"id":157715},"_214-本章练习","2.14 本章练习",[481,157718,157719,157722,157725,157728,157731],{},[484,157720,157721],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[484,157723,157724],{},"输入圆的半径，计算面积，保留两位小数。",[484,157726,157727],{},"输入工资和奖金，计算总收入。",[484,157729,157730],{},"输入摄氏温度，转换为华氏温度。",[484,157732,157733],{},"写一个 BMI 计算程序：",[27,157735,157738],{"className":157736,"code":157737,"language":5536,"meta":32},[5534],"BMI = 体重kg \u002F 身高m ** 2\n",[34,157739,157737],{"__ignoreMap":32},[446,157741,157742],{},"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":32,"searchDepth":47,"depth":47,"links":157744},[157745,157746,157747,157748,157749,157750,157751,157757,157758,157759,157764,157765,157766,157767],{"id":155306,"depth":47,"text":155307},{"id":155415,"depth":47,"text":155416},{"id":155586,"depth":47,"text":155587},{"id":155663,"depth":47,"text":155664},{"id":51067,"depth":47,"text":51068},{"id":155969,"depth":47,"text":155970},{"id":156195,"depth":47,"text":156196,"children":157752},[157753,157754,157755,157756],{"id":156199,"depth":104,"text":156200},{"id":156393,"depth":104,"text":156394},{"id":156481,"depth":104,"text":156482},{"id":156587,"depth":104,"text":156588},{"id":156696,"depth":47,"text":156697},{"id":156854,"depth":47,"text":156855},{"id":156919,"depth":47,"text":156920,"children":157760},[157761,157762,157763],{"id":156923,"depth":104,"text":156924},{"id":157068,"depth":104,"text":157069},{"id":157171,"depth":104,"text":157172},{"id":157302,"depth":47,"text":157303},{"id":157454,"depth":47,"text":157455},{"id":157657,"depth":47,"text":157658},{"id":157715,"depth":47,"text":157716},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155298,"description":451},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157774,"title":157775,"body":157776,"description":451,"extension":452,"meta":159412,"navigation":454,"path":159413,"seo":159414,"stem":159415,"__hash__":159416},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157777,"toc":159393},[157778,157781,157785,157788,157803,157806,157834,157838,157888,157890,157906,157909,157935,157938,157942,158009,158012,158028,158032,158035,158153,158156,158163,158212,158218,158222,158225,158338,158341,158345,158349,158352,158402,158406,158409,158459,158463,158466,158504,158508,158511,158557,158560,158595,158599,158604,158607,158653,158655,158722,158726,158732,158843,158852,158856,158858,158869,158871,159037,159041,159043,159057,159059,159273,159277,159296,159313,159316,159362,159366,159390],[10,157779,157775],{"id":157780},"_3-判断语句",[469,157782,157784],{"id":157783},"_31-布尔值","3.1 布尔值",[14,157786,157787],{},"判断语句依赖布尔值：",[27,157789,157791],{"className":29,"code":157790,"language":31,"meta":32,"style":32},"True\nFalse\n",[34,157792,157793,157798],{"__ignoreMap":32},[37,157794,157795],{"class":39,"line":40},[37,157796,157797],{"class":61},"True\n",[37,157799,157800],{"class":39,"line":47},[37,157801,157802],{"class":61},"False\n",[14,157804,157805],{},"比较表达式会产生布尔值：",[27,157807,157809],{"className":29,"code":157808,"language":31,"meta":32,"style":32},"age = 18\nprint(age >= 18)  # True\n",[34,157810,157811,157819],{"__ignoreMap":32},[37,157812,157813,157815,157817],{"class":39,"line":40},[37,157814,146831],{"class":50},[37,157816,55],{"class":54},[37,157818,146836],{"class":61},[37,157820,157821,157823,157825,157827,157829,157831],{"class":39,"line":47},[37,157822,30755],{"class":61},[37,157824,156053],{"class":50},[37,157826,2075],{"class":54},[37,157828,156570],{"class":61},[37,157830,46145],{"class":50},[37,157832,157833],{"class":43},"# True\n",[469,157835,157837],{"id":157836},"_32-if基础语法","3.2 if基础语法",[27,157839,157841],{"className":29,"code":157840,"language":31,"meta":32,"style":32},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[34,157842,157843,157861,157865,157877],{"__ignoreMap":32},[37,157844,157845,157847,157849,157851,157853,157855,157857,157859],{"class":39,"line":40},[37,157846,146831],{"class":50},[37,157848,55],{"class":54},[37,157850,2739],{"class":61},[37,157852,165],{"class":50},[37,157854,54157],{"class":61},[37,157856,165],{"class":50},[37,157858,152679],{"class":185},[37,157860,175],{"class":50},[37,157862,157863],{"class":39,"line":47},[37,157864,2757],{"emptyLinePlaceholder":454},[37,157866,157867,157869,157871,157873,157875],{"class":39,"line":104},[37,157868,1907],{"class":54},[37,157870,16048],{"class":50},[37,157872,2075],{"class":54},[37,157874,156570],{"class":61},[37,157876,4089],{"class":50},[37,157878,157879,157881,157883,157886],{"class":39,"line":113},[37,157880,31638],{"class":61},[37,157882,165],{"class":50},[37,157884,157885],{"class":185},"\"可以进入网吧\"",[37,157887,280],{"class":50},[14,157889,9366],{},[481,157891,157892,157897,157900,157903],{},[484,157893,157894,157896],{},[34,157895,1907],{}," 后面是条件表达式。",[484,157898,157899],{},"条件后面必须写冒号。",[484,157901,157902],{},"条件成立时执行缩进代码块。",[484,157904,157905],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157907,157908],{},"错误示例：",[27,157910,157912],{"className":29,"code":157911,"language":31,"meta":32,"style":32},"if age >= 18\n    print(\"可以进入\")\n",[34,157913,157914,157924],{"__ignoreMap":32},[37,157915,157916,157918,157920,157922],{"class":39,"line":40},[37,157917,1907],{"class":54},[37,157919,16048],{"class":50},[37,157921,2075],{"class":54},[37,157923,146836],{"class":61},[37,157925,157926,157928,157930,157933],{"class":39,"line":47},[37,157927,31638],{"class":61},[37,157929,165],{"class":50},[37,157931,157932],{"class":185},"\"可以进入\"",[37,157934,280],{"class":50},[14,157936,157937],{},"缺少冒号。",[469,157939,157941],{"id":157940},"_33-if-else","3.3 if else",[27,157943,157945],{"className":29,"code":157944,"language":31,"meta":32,"style":32},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[34,157946,157947,157965,157969,157981,157992,157998],{"__ignoreMap":32},[37,157948,157949,157951,157953,157955,157957,157959,157961,157963],{"class":39,"line":40},[37,157950,146831],{"class":50},[37,157952,55],{"class":54},[37,157954,2739],{"class":61},[37,157956,165],{"class":50},[37,157958,54157],{"class":61},[37,157960,165],{"class":50},[37,157962,152679],{"class":185},[37,157964,175],{"class":50},[37,157966,157967],{"class":39,"line":47},[37,157968,2757],{"emptyLinePlaceholder":454},[37,157970,157971,157973,157975,157977,157979],{"class":39,"line":104},[37,157972,1907],{"class":54},[37,157974,16048],{"class":50},[37,157976,2075],{"class":54},[37,157978,156570],{"class":61},[37,157980,4089],{"class":50},[37,157982,157983,157985,157987,157990],{"class":39,"line":113},[37,157984,31638],{"class":61},[37,157986,165],{"class":50},[37,157988,157989],{"class":185},"\"成年人\"",[37,157991,280],{"class":50},[37,157993,157994,157996],{"class":39,"line":189},[37,157995,2066],{"class":54},[37,157997,4089],{"class":50},[37,157999,158000,158002,158004,158007],{"class":39,"line":195},[37,158001,31638],{"class":61},[37,158003,165],{"class":50},[37,158005,158006],{"class":185},"\"未成年人\"",[37,158008,280],{"class":50},[14,158010,158011],{},"执行逻辑：",[481,158013,158014,158020,158025],{},[484,158015,158016,158017,158019],{},"条件成立，执行 ",[34,158018,1907],{}," 代码块。",[484,158021,158022,158023,158019],{},"条件不成立，执行 ",[34,158024,2066],{},[484,158026,158027],{},"两个代码块只会执行其中一个。",[469,158029,158031],{"id":158030},"_34-if-elif-else","3.4 if elif else",[14,158033,158034],{},"多条件判断：",[27,158036,158038],{"className":29,"code":158037,"language":31,"meta":32,"style":32},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[34,158039,158040,158058,158062,158076,158087,158101,158112,158125,158136,158142],{"__ignoreMap":32},[37,158041,158042,158044,158046,158048,158050,158052,158054,158056],{"class":39,"line":40},[37,158043,155643],{"class":50},[37,158045,55],{"class":54},[37,158047,2739],{"class":61},[37,158049,165],{"class":50},[37,158051,54157],{"class":61},[37,158053,165],{"class":50},[37,158055,152694],{"class":185},[37,158057,175],{"class":50},[37,158059,158060],{"class":39,"line":47},[37,158061,2757],{"emptyLinePlaceholder":454},[37,158063,158064,158066,158069,158071,158074],{"class":39,"line":104},[37,158065,1907],{"class":54},[37,158067,158068],{"class":50}," score ",[37,158070,2075],{"class":54},[37,158072,158073],{"class":61}," 90",[37,158075,4089],{"class":50},[37,158077,158078,158080,158082,158085],{"class":39,"line":113},[37,158079,31638],{"class":61},[37,158081,165],{"class":50},[37,158083,158084],{"class":185},"\"优秀\"",[37,158086,280],{"class":50},[37,158088,158089,158092,158094,158096,158099],{"class":39,"line":189},[37,158090,158091],{"class":54},"elif",[37,158093,158068],{"class":50},[37,158095,2075],{"class":54},[37,158097,158098],{"class":61}," 80",[37,158100,4089],{"class":50},[37,158102,158103,158105,158107,158110],{"class":39,"line":195},[37,158104,31638],{"class":61},[37,158106,165],{"class":50},[37,158108,158109],{"class":185},"\"良好\"",[37,158111,280],{"class":50},[37,158113,158114,158116,158118,158120,158123],{"class":39,"line":201},[37,158115,158091],{"class":54},[37,158117,158068],{"class":50},[37,158119,2075],{"class":54},[37,158121,158122],{"class":61}," 60",[37,158124,4089],{"class":50},[37,158126,158127,158129,158131,158134],{"class":39,"line":207},[37,158128,31638],{"class":61},[37,158130,165],{"class":50},[37,158132,158133],{"class":185},"\"及格\"",[37,158135,280],{"class":50},[37,158137,158138,158140],{"class":39,"line":213},[37,158139,2066],{"class":54},[37,158141,4089],{"class":50},[37,158143,158144,158146,158148,158151],{"class":39,"line":218},[37,158145,31638],{"class":61},[37,158147,165],{"class":50},[37,158149,158150],{"class":185},"\"不及格\"",[37,158152,280],{"class":50},[14,158154,158155],{},"注意判断顺序很重要。",[14,158157,158158,158159,158162],{},"如果把 ",[34,158160,158161],{},"score >= 60"," 放在最前面：",[27,158164,158166],{"className":29,"code":158165,"language":31,"meta":32,"style":32},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[34,158167,158168,158180,158190,158202],{"__ignoreMap":32},[37,158169,158170,158172,158174,158176,158178],{"class":39,"line":40},[37,158171,1907],{"class":54},[37,158173,158068],{"class":50},[37,158175,2075],{"class":54},[37,158177,158122],{"class":61},[37,158179,4089],{"class":50},[37,158181,158182,158184,158186,158188],{"class":39,"line":47},[37,158183,31638],{"class":61},[37,158185,165],{"class":50},[37,158187,158133],{"class":185},[37,158189,280],{"class":50},[37,158191,158192,158194,158196,158198,158200],{"class":39,"line":104},[37,158193,158091],{"class":54},[37,158195,158068],{"class":50},[37,158197,2075],{"class":54},[37,158199,158073],{"class":61},[37,158201,4089],{"class":50},[37,158203,158204,158206,158208,158210],{"class":39,"line":113},[37,158205,31638],{"class":61},[37,158207,165],{"class":50},[37,158209,158084],{"class":185},[37,158211,280],{"class":50},[14,158213,158214,158215,158217],{},"成绩 95 会先满足 ",[34,158216,158161],{},"，后面的优秀分支就不会执行。",[469,158219,158221],{"id":158220},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,158223,158224],{},"嵌套判断就是在一个判断内部再写判断。",[27,158226,158228],{"className":29,"code":158227,"language":31,"meta":32,"style":32},"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",[34,158229,158230,158248,158263,158267,158279,158293,158303,158310,158321,158327],{"__ignoreMap":32},[37,158231,158232,158234,158236,158238,158240,158242,158244,158246],{"class":39,"line":40},[37,158233,146831],{"class":50},[37,158235,55],{"class":54},[37,158237,2739],{"class":61},[37,158239,165],{"class":50},[37,158241,54157],{"class":61},[37,158243,165],{"class":50},[37,158245,152679],{"class":185},[37,158247,175],{"class":50},[37,158249,158250,158252,158254,158256,158258,158261],{"class":39,"line":47},[37,158251,156646],{"class":50},[37,158253,55],{"class":54},[37,158255,60941],{"class":61},[37,158257,165],{"class":50},[37,158259,158260],{"class":185},"\"是否有票(y\u002Fn):\"",[37,158262,280],{"class":50},[37,158264,158265],{"class":39,"line":104},[37,158266,2757],{"emptyLinePlaceholder":454},[37,158268,158269,158271,158273,158275,158277],{"class":39,"line":113},[37,158270,1907],{"class":54},[37,158272,16048],{"class":50},[37,158274,2075],{"class":54},[37,158276,156570],{"class":61},[37,158278,4089],{"class":50},[37,158280,158281,158283,158286,158288,158291],{"class":39,"line":189},[37,158282,3451],{"class":54},[37,158284,158285],{"class":50}," has_ticket ",[37,158287,3299],{"class":54},[37,158289,158290],{"class":185}," \"y\"",[37,158292,4089],{"class":50},[37,158294,158295,158297,158299,158301],{"class":39,"line":195},[37,158296,32789],{"class":61},[37,158298,165],{"class":50},[37,158300,157932],{"class":185},[37,158302,280],{"class":50},[37,158304,158305,158308],{"class":39,"line":201},[37,158306,158307],{"class":54},"    else",[37,158309,4089],{"class":50},[37,158311,158312,158314,158316,158319],{"class":39,"line":207},[37,158313,32789],{"class":61},[37,158315,165],{"class":50},[37,158317,158318],{"class":185},"\"请先买票\"",[37,158320,280],{"class":50},[37,158322,158323,158325],{"class":39,"line":213},[37,158324,2066],{"class":54},[37,158326,4089],{"class":50},[37,158328,158329,158331,158333,158336],{"class":39,"line":218},[37,158330,31638],{"class":61},[37,158332,165],{"class":50},[37,158334,158335],{"class":185},"\"未成年人禁止进入\"",[37,158337,280],{"class":50},[14,158339,158340],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[469,158342,158344],{"id":158343},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[498,158346,158348],{"id":158347},"_361-and","3.6.1 and",[14,158350,158351],{},"两个条件都成立才成立。",[27,158353,158355],{"className":29,"code":158354,"language":31,"meta":32,"style":32},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[34,158356,158357,158365,158373,158377,158392],{"__ignoreMap":32},[37,158358,158359,158361,158363],{"class":39,"line":40},[37,158360,146831],{"class":50},[37,158362,55],{"class":54},[37,158364,88400],{"class":61},[37,158366,158367,158369,158371],{"class":39,"line":47},[37,158368,156646],{"class":50},[37,158370,55],{"class":54},[37,158372,153884],{"class":61},[37,158374,158375],{"class":39,"line":104},[37,158376,2757],{"emptyLinePlaceholder":454},[37,158378,158379,158381,158383,158385,158387,158389],{"class":39,"line":113},[37,158380,1907],{"class":54},[37,158382,16048],{"class":50},[37,158384,2075],{"class":54},[37,158386,156570],{"class":61},[37,158388,120714],{"class":54},[37,158390,158391],{"class":50}," has_ticket:\n",[37,158393,158394,158396,158398,158400],{"class":39,"line":189},[37,158395,31638],{"class":61},[37,158397,165],{"class":50},[37,158399,157932],{"class":185},[37,158401,280],{"class":50},[498,158403,158405],{"id":158404},"_362-or","3.6.2 or",[14,158407,158408],{},"只要一个条件成立就成立。",[27,158410,158412],{"className":29,"code":158411,"language":31,"meta":32,"style":32},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[34,158413,158414,158423,158432,158436,158448],{"__ignoreMap":32},[37,158415,158416,158419,158421],{"class":39,"line":40},[37,158417,158418],{"class":50},"is_vip ",[37,158420,55],{"class":54},[37,158422,126092],{"class":61},[37,158424,158425,158428,158430],{"class":39,"line":47},[37,158426,158427],{"class":50},"coupon ",[37,158429,55],{"class":54},[37,158431,153884],{"class":61},[37,158433,158434],{"class":39,"line":104},[37,158435,2757],{"emptyLinePlaceholder":454},[37,158437,158438,158440,158443,158445],{"class":39,"line":113},[37,158439,1907],{"class":54},[37,158441,158442],{"class":50}," is_vip ",[37,158444,115375],{"class":54},[37,158446,158447],{"class":50}," coupon:\n",[37,158449,158450,158452,158454,158457],{"class":39,"line":189},[37,158451,31638],{"class":61},[37,158453,165],{"class":50},[37,158455,158456],{"class":185},"\"可以享受优惠\"",[37,158458,280],{"class":50},[498,158460,158462],{"id":158461},"_363-not","3.6.3 not",[14,158464,158465],{},"取反。",[27,158467,158469],{"className":29,"code":158468,"language":31,"meta":32,"style":32},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[34,158470,158471,158480,158484,158493],{"__ignoreMap":32},[37,158472,158473,158476,158478],{"class":39,"line":40},[37,158474,158475],{"class":50},"is_closed ",[37,158477,55],{"class":54},[37,158479,126092],{"class":61},[37,158481,158482],{"class":39,"line":47},[37,158483,2757],{"emptyLinePlaceholder":454},[37,158485,158486,158488,158490],{"class":39,"line":104},[37,158487,1907],{"class":54},[37,158489,39267],{"class":54},[37,158491,158492],{"class":50}," is_closed:\n",[37,158494,158495,158497,158499,158502],{"class":39,"line":113},[37,158496,31638],{"class":61},[37,158498,165],{"class":50},[37,158500,158501],{"class":185},"\"店铺营业中\"",[37,158503,280],{"class":50},[469,158505,158507],{"id":158506},"_37-链式比较","3.7 链式比较",[14,158509,158510],{},"Python 支持链式比较：",[27,158512,158514],{"className":29,"code":158513,"language":31,"meta":32,"style":32},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[34,158515,158516,158525,158529,158546],{"__ignoreMap":32},[37,158517,158518,158520,158522],{"class":39,"line":40},[37,158519,155643],{"class":50},[37,158521,55],{"class":54},[37,158523,158524],{"class":61}," 85\n",[37,158526,158527],{"class":39,"line":47},[37,158528,2757],{"emptyLinePlaceholder":454},[37,158530,158531,158533,158535,158538,158540,158542,158544],{"class":39,"line":104},[37,158532,1907],{"class":54},[37,158534,4443],{"class":61},[37,158536,158537],{"class":54}," \u003C=",[37,158539,158068],{"class":50},[37,158541,1964],{"class":54},[37,158543,6102],{"class":61},[37,158545,4089],{"class":50},[37,158547,158548,158550,158552,158555],{"class":39,"line":113},[37,158549,31638],{"class":61},[37,158551,165],{"class":50},[37,158553,158554],{"class":185},"\"成绩合法\"",[37,158556,280],{"class":50},[14,158558,158559],{},"等价于：",[27,158561,158563],{"className":29,"code":158562,"language":31,"meta":32,"style":32},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[34,158564,158565,158585],{"__ignoreMap":32},[37,158566,158567,158569,158571,158573,158575,158577,158579,158581,158583],{"class":39,"line":40},[37,158568,1907],{"class":54},[37,158570,158068],{"class":50},[37,158572,2075],{"class":54},[37,158574,4443],{"class":61},[37,158576,120714],{"class":54},[37,158578,158068],{"class":50},[37,158580,1964],{"class":54},[37,158582,6102],{"class":61},[37,158584,4089],{"class":50},[37,158586,158587,158589,158591,158593],{"class":39,"line":47},[37,158588,31638],{"class":61},[37,158590,165],{"class":50},[37,158592,158554],{"class":185},[37,158594,280],{"class":50},[469,158596,158598],{"id":158597},"_38-真值和假值","3.8 真值和假值",[14,158600,116752,158601,158603],{},[34,158602,1907],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158605,158606],{},"假值：",[27,158608,158610],{"className":29,"code":158609,"language":31,"meta":32,"style":32},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[34,158611,158612,158616,158621,158625,158629,158634,158638,158642,158647],{"__ignoreMap":32},[37,158613,158614],{"class":39,"line":40},[37,158615,157802],{"class":61},[37,158617,158618],{"class":39,"line":47},[37,158619,158620],{"class":61},"None\n",[37,158622,158623],{"class":39,"line":104},[37,158624,3435],{"class":61},[37,158626,158627],{"class":39,"line":113},[37,158628,32680],{"class":61},[37,158630,158631],{"class":39,"line":189},[37,158632,158633],{"class":185},"\"\"\n",[37,158635,158636],{"class":39,"line":195},[37,158637,32695],{"class":50},[37,158639,158640],{"class":39,"line":201},[37,158641,2333],{"class":50},[37,158643,158644],{"class":39,"line":207},[37,158645,158646],{"class":50},"{}\n",[37,158648,158649,158651],{"class":39,"line":213},[37,158650,155575],{"class":61},[37,158652,2333],{"class":50},[14,158654,15476],{},[27,158656,158658],{"className":29,"code":158657,"language":31,"meta":32,"style":32},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[34,158659,158660,158674,158678,158685,158705,158711],{"__ignoreMap":32},[37,158661,158662,158664,158666,158668,158670,158672],{"class":39,"line":40},[37,158663,146821],{"class":50},[37,158665,55],{"class":54},[37,158667,60941],{"class":61},[37,158669,165],{"class":50},[37,158671,152664],{"class":185},[37,158673,280],{"class":50},[37,158675,158676],{"class":39,"line":47},[37,158677,2757],{"emptyLinePlaceholder":454},[37,158679,158680,158682],{"class":39,"line":104},[37,158681,1907],{"class":54},[37,158683,158684],{"class":50}," name:\n",[37,158686,158687,158689,158691,158693,158695,158697,158699,158701,158703],{"class":39,"line":113},[37,158688,31638],{"class":61},[37,158690,165],{"class":50},[37,158692,579],{"class":54},[37,158694,157339],{"class":185},[37,158696,1404],{"class":61},[37,158698,80145],{"class":50},[37,158700,1454],{"class":61},[37,158702,772],{"class":185},[37,158704,280],{"class":50},[37,158706,158707,158709],{"class":39,"line":189},[37,158708,2066],{"class":54},[37,158710,4089],{"class":50},[37,158712,158713,158715,158717,158720],{"class":39,"line":195},[37,158714,31638],{"class":61},[37,158716,165],{"class":50},[37,158718,158719],{"class":185},"\"姓名不能为空\"",[37,158721,280],{"class":50},[469,158723,158725],{"id":158724},"_39-match语句","3.9 match语句",[14,158727,158728,158729,158731],{},"Python 3.10 开始支持 ",[34,158730,71601],{},"。它适合处理固定选项。",[27,158733,158735],{"className":29,"code":158734,"language":31,"meta":32,"style":32},"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",[34,158736,158737,158753,158757,158764,158774,158785,158794,158805,158814,158825,158832],{"__ignoreMap":32},[37,158738,158739,158742,158744,158746,158748,158751],{"class":39,"line":40},[37,158740,158741],{"class":50},"command ",[37,158743,55],{"class":54},[37,158745,60941],{"class":61},[37,158747,165],{"class":50},[37,158749,158750],{"class":185},"\"请输入命令:\"",[37,158752,280],{"class":50},[37,158754,158755],{"class":39,"line":47},[37,158756,2757],{"emptyLinePlaceholder":454},[37,158758,158759,158761],{"class":39,"line":104},[37,158760,71601],{"class":54},[37,158762,158763],{"class":50}," command:\n",[37,158765,158766,158769,158772],{"class":39,"line":113},[37,158767,158768],{"class":54},"    case",[37,158770,158771],{"class":185}," \"start\"",[37,158773,4089],{"class":50},[37,158775,158776,158778,158780,158783],{"class":39,"line":189},[37,158777,32789],{"class":61},[37,158779,165],{"class":50},[37,158781,158782],{"class":185},"\"启动\"",[37,158784,280],{"class":50},[37,158786,158787,158789,158792],{"class":39,"line":195},[37,158788,158768],{"class":54},[37,158790,158791],{"class":185}," \"stop\"",[37,158793,4089],{"class":50},[37,158795,158796,158798,158800,158803],{"class":39,"line":201},[37,158797,32789],{"class":61},[37,158799,165],{"class":50},[37,158801,158802],{"class":185},"\"停止\"",[37,158804,280],{"class":50},[37,158806,158807,158809,158812],{"class":39,"line":207},[37,158808,158768],{"class":54},[37,158810,158811],{"class":185}," \"restart\"",[37,158813,4089],{"class":50},[37,158815,158816,158818,158820,158823],{"class":39,"line":213},[37,158817,32789],{"class":61},[37,158819,165],{"class":50},[37,158821,158822],{"class":185},"\"重启\"",[37,158824,280],{"class":50},[37,158826,158827,158829],{"class":39,"line":218},[37,158828,158768],{"class":54},[37,158830,158831],{"class":50}," _:\n",[37,158833,158834,158836,158838,158841],{"class":39,"line":227},[37,158835,32789],{"class":61},[37,158837,165],{"class":50},[37,158839,158840],{"class":185},"\"未知命令\"",[37,158842,280],{"class":50},[14,158844,158845,158846,158848,158849,158851],{},"入门阶段掌握 ",[34,158847,154943],{}," 更重要，",[34,158850,71601],{}," 可以作为补充。",[469,158853,158855],{"id":158854},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158857,123577],{},[481,158859,158860,158863,158866],{},[484,158861,158862],{},"输入成绩。",[484,158864,158865],{},"判断成绩是否合法。",[484,158867,158868],{},"输出等级。",[14,158870,10376],{},[27,158872,158874],{"className":29,"code":158873,"language":31,"meta":32,"style":32},"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",[34,158875,158876,158894,158898,158916,158927,158939,158950,158962,158973,158986,158997,159009,159020,159026],{"__ignoreMap":32},[37,158877,158878,158880,158882,158884,158886,158888,158890,158892],{"class":39,"line":40},[37,158879,155643],{"class":50},[37,158881,55],{"class":54},[37,158883,110082],{"class":61},[37,158885,165],{"class":50},[37,158887,54157],{"class":61},[37,158889,165],{"class":50},[37,158891,152694],{"class":185},[37,158893,175],{"class":50},[37,158895,158896],{"class":39,"line":47},[37,158897,2757],{"emptyLinePlaceholder":454},[37,158899,158900,158902,158904,158906,158908,158910,158912,158914],{"class":39,"line":104},[37,158901,1907],{"class":54},[37,158903,39267],{"class":54},[37,158905,4443],{"class":61},[37,158907,158537],{"class":54},[37,158909,158068],{"class":50},[37,158911,1964],{"class":54},[37,158913,6102],{"class":61},[37,158915,4089],{"class":50},[37,158917,158918,158920,158922,158925],{"class":39,"line":113},[37,158919,31638],{"class":61},[37,158921,165],{"class":50},[37,158923,158924],{"class":185},"\"成绩不合法\"",[37,158926,280],{"class":50},[37,158928,158929,158931,158933,158935,158937],{"class":39,"line":189},[37,158930,158091],{"class":54},[37,158932,158068],{"class":50},[37,158934,2075],{"class":54},[37,158936,158073],{"class":61},[37,158938,4089],{"class":50},[37,158940,158941,158943,158945,158948],{"class":39,"line":195},[37,158942,31638],{"class":61},[37,158944,165],{"class":50},[37,158946,158947],{"class":185},"\"等级:A\"",[37,158949,280],{"class":50},[37,158951,158952,158954,158956,158958,158960],{"class":39,"line":201},[37,158953,158091],{"class":54},[37,158955,158068],{"class":50},[37,158957,2075],{"class":54},[37,158959,158098],{"class":61},[37,158961,4089],{"class":50},[37,158963,158964,158966,158968,158971],{"class":39,"line":207},[37,158965,31638],{"class":61},[37,158967,165],{"class":50},[37,158969,158970],{"class":185},"\"等级:B\"",[37,158972,280],{"class":50},[37,158974,158975,158977,158979,158981,158984],{"class":39,"line":213},[37,158976,158091],{"class":54},[37,158978,158068],{"class":50},[37,158980,2075],{"class":54},[37,158982,158983],{"class":61}," 70",[37,158985,4089],{"class":50},[37,158987,158988,158990,158992,158995],{"class":39,"line":218},[37,158989,31638],{"class":61},[37,158991,165],{"class":50},[37,158993,158994],{"class":185},"\"等级:C\"",[37,158996,280],{"class":50},[37,158998,158999,159001,159003,159005,159007],{"class":39,"line":227},[37,159000,158091],{"class":54},[37,159002,158068],{"class":50},[37,159004,2075],{"class":54},[37,159006,158122],{"class":61},[37,159008,4089],{"class":50},[37,159010,159011,159013,159015,159018],{"class":39,"line":232},[37,159012,31638],{"class":61},[37,159014,165],{"class":50},[37,159016,159017],{"class":185},"\"等级:D\"",[37,159019,280],{"class":50},[37,159021,159022,159024],{"class":39,"line":238},[37,159023,2066],{"class":54},[37,159025,4089],{"class":50},[37,159027,159028,159030,159032,159035],{"class":39,"line":244},[37,159029,31638],{"class":61},[37,159031,165],{"class":50},[37,159033,159034],{"class":185},"\"等级:E\"",[37,159036,280],{"class":50},[469,159038,159040],{"id":159039},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,159042,123577],{},[481,159044,159045,159048,159051,159054],{},[484,159046,159047],{},"输入消费金额。",[484,159049,159050],{},"输入会员等级，普通、银卡、金卡。",[484,159052,159053],{},"普通不打折，银卡 9 折，金卡 8 折。",[484,159055,159056],{},"满 500 再减 50。",[14,159058,10376],{},[27,159060,159062],{"className":29,"code":159061,"language":31,"meta":32,"style":32},"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",[34,159063,159064,159084,159100,159104,159112,159116,159130,159140,159153,159162,159175,159183,159189,159200,159204,159218,159222,159236,159246,159250],{"__ignoreMap":32},[37,159065,159066,159069,159071,159073,159075,159077,159079,159082],{"class":39,"line":40},[37,159067,159068],{"class":50},"amount ",[37,159070,55],{"class":54},[37,159072,110082],{"class":61},[37,159074,165],{"class":50},[37,159076,54157],{"class":61},[37,159078,165],{"class":50},[37,159080,159081],{"class":185},"\"请输入消费金额:\"",[37,159083,175],{"class":50},[37,159085,159086,159089,159091,159093,159095,159098],{"class":39,"line":47},[37,159087,159088],{"class":50},"level ",[37,159090,55],{"class":54},[37,159092,60941],{"class":61},[37,159094,165],{"class":50},[37,159096,159097],{"class":185},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[37,159099,280],{"class":50},[37,159101,159102],{"class":39,"line":104},[37,159103,2757],{"emptyLinePlaceholder":454},[37,159105,159106,159108,159110],{"class":39,"line":113},[37,159107,157521],{"class":50},[37,159109,55],{"class":54},[37,159111,56035],{"class":61},[37,159113,159114],{"class":39,"line":189},[37,159115,2757],{"emptyLinePlaceholder":454},[37,159117,159118,159120,159123,159125,159128],{"class":39,"line":195},[37,159119,1907],{"class":54},[37,159121,159122],{"class":50}," level ",[37,159124,3299],{"class":54},[37,159126,159127],{"class":185}," \"银卡\"",[37,159129,4089],{"class":50},[37,159131,159132,159135,159137],{"class":39,"line":201},[37,159133,159134],{"class":50},"    discount ",[37,159136,55],{"class":54},[37,159138,159139],{"class":61}," 0.9\n",[37,159141,159142,159144,159146,159148,159151],{"class":39,"line":207},[37,159143,158091],{"class":54},[37,159145,159122],{"class":50},[37,159147,3299],{"class":54},[37,159149,159150],{"class":185}," \"金卡\"",[37,159152,4089],{"class":50},[37,159154,159155,159157,159159],{"class":39,"line":213},[37,159156,159134],{"class":50},[37,159158,55],{"class":54},[37,159160,159161],{"class":61}," 0.8\n",[37,159163,159164,159166,159168,159170,159173],{"class":39,"line":218},[37,159165,158091],{"class":54},[37,159167,159122],{"class":50},[37,159169,3299],{"class":54},[37,159171,159172],{"class":185}," \"普通\"",[37,159174,4089],{"class":50},[37,159176,159177,159179,159181],{"class":39,"line":227},[37,159178,159134],{"class":50},[37,159180,55],{"class":54},[37,159182,56035],{"class":61},[37,159184,159185,159187],{"class":39,"line":232},[37,159186,2066],{"class":54},[37,159188,4089],{"class":50},[37,159190,159191,159193,159195,159198],{"class":39,"line":238},[37,159192,31638],{"class":61},[37,159194,165],{"class":50},[37,159196,159197],{"class":185},"\"会员等级输入错误，按普通会员计算\"",[37,159199,280],{"class":50},[37,159201,159202],{"class":39,"line":244},[37,159203,2757],{"emptyLinePlaceholder":454},[37,159205,159206,159209,159211,159214,159216],{"class":39,"line":250},[37,159207,159208],{"class":50},"pay ",[37,159210,55],{"class":54},[37,159212,159213],{"class":50}," amount ",[37,159215,967],{"class":54},[37,159217,157560],{"class":50},[37,159219,159220],{"class":39,"line":256},[37,159221,2757],{"emptyLinePlaceholder":454},[37,159223,159224,159226,159229,159231,159234],{"class":39,"line":261},[37,159225,1907],{"class":54},[37,159227,159228],{"class":50}," pay ",[37,159230,2075],{"class":54},[37,159232,159233],{"class":61}," 500",[37,159235,4089],{"class":50},[37,159237,159238,159241,159243],{"class":39,"line":267},[37,159239,159240],{"class":50},"    pay ",[37,159242,150537],{"class":54},[37,159244,159245],{"class":61}," 50\n",[37,159247,159248],{"class":39,"line":283},[37,159249,2757],{"emptyLinePlaceholder":454},[37,159251,159252,159254,159256,159258,159260,159262,159265,159267,159269,159271],{"class":39,"line":288},[37,159253,30755],{"class":61},[37,159255,165],{"class":50},[37,159257,579],{"class":54},[37,159259,157641],{"class":185},[37,159261,1404],{"class":61},[37,159263,159264],{"class":50},"pay",[37,159266,157444],{"class":54},[37,159268,1454],{"class":61},[37,159270,157297],{"class":185},[37,159272,280],{"class":50},[469,159274,159276],{"id":159275},"_312-易错点","3.12 易错点",[481,159278,159279,159282,159285,159288,159293],{},[484,159280,159281],{},"冒号不能漏。",[484,159283,159284],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[484,159286,159287],{},"多分支判断要注意顺序。",[484,159289,159290,159291,28727],{},"判断相等用 ",[34,159292,3299],{},[484,159294,159295],{},"字符串比较区分大小写：",[27,159297,159299],{"className":29,"code":159298,"language":31,"meta":32,"style":32},"\"Y\" == \"y\"  # False\n",[34,159300,159301],{"__ignoreMap":32},[37,159302,159303,159306,159308,159310],{"class":39,"line":40},[37,159304,159305],{"class":185},"\"Y\"",[37,159307,101844],{"class":54},[37,159309,158290],{"class":185},[37,159311,159312],{"class":43},"  # False\n",[14,159314,159315],{},"可转换后再判断：",[27,159317,159319],{"className":29,"code":159318,"language":31,"meta":32,"style":32},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[34,159320,159321,159338,159351],{"__ignoreMap":32},[37,159322,159323,159326,159328,159330,159332,159335],{"class":39,"line":40},[37,159324,159325],{"class":50},"answer ",[37,159327,55],{"class":54},[37,159329,60941],{"class":61},[37,159331,165],{"class":50},[37,159333,159334],{"class":185},"\"是否继续(y\u002Fn):\"",[37,159336,159337],{"class":50},").lower()\n",[37,159339,159340,159342,159345,159347,159349],{"class":39,"line":47},[37,159341,1907],{"class":54},[37,159343,159344],{"class":50}," answer ",[37,159346,3299],{"class":54},[37,159348,158290],{"class":185},[37,159350,4089],{"class":50},[37,159352,159353,159355,159357,159360],{"class":39,"line":104},[37,159354,31638],{"class":61},[37,159356,165],{"class":50},[37,159358,159359],{"class":185},"\"继续\"",[37,159361,280],{"class":50},[469,159363,159365],{"id":159364},"_313-本章练习","3.13 本章练习",[481,159367,159368,159371,159374,159377,159387],{},[484,159369,159370],{},"输入年龄，判断是否成年。",[484,159372,159373],{},"输入年份，判断是否为闰年。",[484,159375,159376],{},"输入三个数字，输出最大值。",[484,159378,159379,159380,159383,159384,159386],{},"写登录判断：用户名是 ",[34,159381,159382],{},"admin"," 且密码是 ",[34,159385,15425],{}," 才登录成功。",[484,159388,159389],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[446,159391,159392],{},"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":32,"searchDepth":47,"depth":47,"links":159394},[159395,159396,159397,159398,159399,159400,159405,159406,159407,159408,159409,159410,159411],{"id":157783,"depth":47,"text":157784},{"id":157836,"depth":47,"text":157837},{"id":157940,"depth":47,"text":157941},{"id":158030,"depth":47,"text":158031},{"id":158220,"depth":47,"text":158221},{"id":158343,"depth":47,"text":158344,"children":159401},[159402,159403,159404],{"id":158347,"depth":104,"text":158348},{"id":158404,"depth":104,"text":158405},{"id":158461,"depth":104,"text":158462},{"id":158506,"depth":47,"text":158507},{"id":158597,"depth":47,"text":158598},{"id":158724,"depth":47,"text":158725},{"id":158854,"depth":47,"text":158855},{"id":159039,"depth":47,"text":159040},{"id":159275,"depth":47,"text":159276},{"id":159364,"depth":47,"text":159365},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157775,"description":451},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159418,"title":159419,"body":159420,"description":451,"extension":452,"meta":161189,"navigation":454,"path":161190,"seo":161191,"stem":161192,"__hash__":161193},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159421,"toc":161169},[159422,159425,159429,159435,159438,159455,159459,159461,159478,159480,159525,159527,159544,159548,159551,159617,159620,159638,159642,159803,159812,159816,159820,159825,159872,159874,159880,159884,159889,159936,159938,159944,159948,159953,159989,159992,160039,160043,160049,160107,160112,160143,160148,160152,160207,160210,160282,160285,160344,160348,160351,160426,160429,160433,160539,160542,160568,160572,160584,160653,160656,160748,160752,160754,160765,160767,160897,160901,161103,161111,161115,161145,161149,161166],[10,159423,159419],{"id":159424},"_4-循环语句",[469,159426,159428],{"id":159427},"_41-为什么需要循环","4.1 为什么需要循环",[14,159430,159431,159432,159434],{},"如果要输出 1 到 100，不应该写 100 行 ",[34,159433,146757],{},"，而应该用循环。",[14,159436,159437],{},"循环适合处理重复任务：",[481,159439,159440,159443,159446,159449,159452],{},[484,159441,159442],{},"重复输出。",[484,159444,159445],{},"重复输入。",[484,159447,159448],{},"遍历数据。",[484,159450,159451],{},"持续执行菜单。",[484,159453,159454],{},"批量处理文件或数据。",[469,159456,159458],{"id":159457},"_42-while循环","4.2 while循环",[14,159460,5530],{},[27,159462,159464],{"className":29,"code":159463,"language":31,"meta":32,"style":32},"while 条件:\n    循环体\n",[34,159465,159466,159473],{"__ignoreMap":32},[37,159467,159468,159470],{"class":39,"line":40},[37,159469,108948],{"class":54},[37,159471,159472],{"class":50}," 条件:\n",[37,159474,159475],{"class":39,"line":47},[37,159476,159477],{"class":50},"    循环体\n",[14,159479,15476],{},[27,159481,159483],{"className":29,"code":159482,"language":31,"meta":32,"style":32},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[34,159484,159485,159493,159497,159509,159516],{"__ignoreMap":32},[37,159486,159487,159489,159491],{"class":39,"line":40},[37,159488,100433],{"class":50},[37,159490,55],{"class":54},[37,159492,56035],{"class":61},[37,159494,159495],{"class":39,"line":47},[37,159496,2757],{"emptyLinePlaceholder":454},[37,159498,159499,159501,159503,159505,159507],{"class":39,"line":104},[37,159500,108948],{"class":54},[37,159502,9779],{"class":50},[37,159504,1964],{"class":54},[37,159506,2505],{"class":61},[37,159508,4089],{"class":50},[37,159510,159511,159513],{"class":39,"line":113},[37,159512,31638],{"class":61},[37,159514,159515],{"class":50},"(i)\n",[37,159517,159518,159521,159523],{"class":39,"line":189},[37,159519,159520],{"class":50},"    i ",[37,159522,9818],{"class":54},[37,159524,56035],{"class":61},[14,159526,81264],{},[481,159528,159529,159535,159538,159541],{},[484,159530,159531,159532,28727],{},"判断条件 ",[34,159533,159534],{},"i \u003C= 5",[484,159536,159537],{},"条件成立，执行循环体。",[484,159539,159540],{},"执行完后回到条件判断。",[484,159542,159543],{},"条件不成立，退出循环。",[469,159545,159547],{"id":159546},"_43-while累加","4.3 while累加",[14,159549,159550],{},"计算 1 到 100 的和：",[27,159552,159554],{"className":29,"code":159553,"language":31,"meta":32,"style":32},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[34,159555,159556,159564,159572,159576,159588,159598,159606,159610],{"__ignoreMap":32},[37,159557,159558,159560,159562],{"class":39,"line":40},[37,159559,100433],{"class":50},[37,159561,55],{"class":54},[37,159563,56035],{"class":61},[37,159565,159566,159568,159570],{"class":39,"line":47},[37,159567,157545],{"class":50},[37,159569,55],{"class":54},[37,159571,47670],{"class":61},[37,159573,159574],{"class":39,"line":104},[37,159575,2757],{"emptyLinePlaceholder":454},[37,159577,159578,159580,159582,159584,159586],{"class":39,"line":113},[37,159579,108948],{"class":54},[37,159581,9779],{"class":50},[37,159583,1964],{"class":54},[37,159585,6102],{"class":61},[37,159587,4089],{"class":50},[37,159589,159590,159593,159595],{"class":39,"line":189},[37,159591,159592],{"class":50},"    total ",[37,159594,9818],{"class":54},[37,159596,159597],{"class":50}," i\n",[37,159599,159600,159602,159604],{"class":39,"line":195},[37,159601,159520],{"class":50},[37,159603,9818],{"class":54},[37,159605,56035],{"class":61},[37,159607,159608],{"class":39,"line":201},[37,159609,2757],{"emptyLinePlaceholder":454},[37,159611,159612,159614],{"class":39,"line":207},[37,159613,30755],{"class":61},[37,159615,159616],{"class":50},"(total)\n",[14,159618,159619],{},"核心思想：",[481,159621,159622,159627,159632],{},[484,159623,159624,159626],{},[34,159625,954],{}," 控制循环次数。",[484,159628,159629,159631],{},[34,159630,157646],{}," 保存累加结果。",[484,159633,159634,159635,159637],{},"每轮循环都要更新 ",[34,159636,954],{},"，否则可能死循环。",[469,159639,159641],{"id":159640},"_44-while猜数字","4.4 while猜数字",[27,159643,159645],{"className":29,"code":159644,"language":31,"meta":32,"style":32},"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",[34,159646,159647,159653,159657,159674,159682,159686,159694,159714,159723,159727,159739,159750,159760,159771,159777,159799],{"__ignoreMap":32},[37,159648,159649,159651],{"class":39,"line":40},[37,159650,30732],{"class":54},[37,159652,45665],{"class":50},[37,159654,159655],{"class":39,"line":47},[37,159656,2757],{"emptyLinePlaceholder":454},[37,159658,159659,159661,159663,159666,159668,159670,159672],{"class":39,"line":104},[37,159660,159325],{"class":50},[37,159662,55],{"class":54},[37,159664,159665],{"class":50}," random.randint(",[37,159667,332],{"class":61},[37,159669,12776],{"class":50},[37,159671,154],{"class":61},[37,159673,280],{"class":50},[37,159675,159676,159678,159680],{"class":39,"line":113},[37,159677,146976],{"class":50},[37,159679,55],{"class":54},[37,159681,47670],{"class":61},[37,159683,159684],{"class":39,"line":189},[37,159685,2757],{"emptyLinePlaceholder":454},[37,159687,159688,159690,159692],{"class":39,"line":195},[37,159689,108948],{"class":54},[37,159691,95577],{"class":61},[37,159693,4089],{"class":50},[37,159695,159696,159699,159701,159703,159705,159707,159709,159712],{"class":39,"line":201},[37,159697,159698],{"class":50},"    guess ",[37,159700,55],{"class":54},[37,159702,2739],{"class":61},[37,159704,165],{"class":50},[37,159706,54157],{"class":61},[37,159708,165],{"class":50},[37,159710,159711],{"class":185},"\"请输入1到100之间的数字:\"",[37,159713,175],{"class":50},[37,159715,159716,159719,159721],{"class":39,"line":207},[37,159717,159718],{"class":50},"    count ",[37,159720,9818],{"class":54},[37,159722,56035],{"class":61},[37,159724,159725],{"class":39,"line":213},[37,159726,2757],{"emptyLinePlaceholder":454},[37,159728,159729,159731,159734,159736],{"class":39,"line":218},[37,159730,3451],{"class":54},[37,159732,159733],{"class":50}," guess ",[37,159735,1468],{"class":54},[37,159737,159738],{"class":50}," answer:\n",[37,159740,159741,159743,159745,159748],{"class":39,"line":227},[37,159742,32789],{"class":61},[37,159744,165],{"class":50},[37,159746,159747],{"class":185},"\"猜大了\"",[37,159749,280],{"class":50},[37,159751,159752,159754,159756,159758],{"class":39,"line":232},[37,159753,39630],{"class":54},[37,159755,159733],{"class":50},[37,159757,1418],{"class":54},[37,159759,159738],{"class":50},[37,159761,159762,159764,159766,159769],{"class":39,"line":238},[37,159763,32789],{"class":61},[37,159765,165],{"class":50},[37,159767,159768],{"class":185},"\"猜小了\"",[37,159770,280],{"class":50},[37,159772,159773,159775],{"class":39,"line":244},[37,159774,158307],{"class":54},[37,159776,4089],{"class":50},[37,159778,159779,159781,159783,159785,159788,159790,159792,159794,159797],{"class":39,"line":250},[37,159780,32789],{"class":61},[37,159782,165],{"class":50},[37,159784,579],{"class":54},[37,159786,159787],{"class":185},"\"猜对了，一共猜了",[37,159789,1404],{"class":61},[37,159791,84769],{"class":50},[37,159793,1454],{"class":61},[37,159795,159796],{"class":185},"次\"",[37,159798,280],{"class":50},[37,159800,159801],{"class":39,"line":256},[37,159802,31965],{"class":54},[14,159804,159805,159808,159809,159811],{},[34,159806,159807],{},"while True"," 表示无限循环，通常配合 ",[34,159810,2410],{}," 使用。",[469,159813,159815],{"id":159814},"_45-break和continue","4.5 break和continue",[498,159817,159819],{"id":159818},"_451-break","4.5.1 break",[14,159821,159822,159824],{},[34,159823,2410],{}," 直接结束整个循环。",[27,159826,159828],{"className":29,"code":159827,"language":31,"meta":32,"style":32},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[34,159829,159830,159850,159862,159866],{"__ignoreMap":32},[37,159831,159832,159834,159836,159838,159840,159842,159844,159846,159848],{"class":39,"line":40},[37,159833,3375],{"class":54},[37,159835,9779],{"class":50},[37,159837,26385],{"class":54},[37,159839,32781],{"class":61},[37,159841,165],{"class":50},[37,159843,332],{"class":61},[37,159845,12776],{"class":50},[37,159847,93],{"class":61},[37,159849,31125],{"class":50},[37,159851,159852,159854,159856,159858,159860],{"class":39,"line":47},[37,159853,3451],{"class":54},[37,159855,9779],{"class":50},[37,159857,3299],{"class":54},[37,159859,78405],{"class":61},[37,159861,4089],{"class":50},[37,159863,159864],{"class":39,"line":104},[37,159865,31965],{"class":54},[37,159867,159868,159870],{"class":39,"line":113},[37,159869,31638],{"class":61},[37,159871,159515],{"class":50},[14,159873,146742],{},[27,159875,159878],{"className":159876,"code":159877,"language":5536,"meta":32},[5534],"1\n2\n",[34,159879,159877],{"__ignoreMap":32},[498,159881,159883],{"id":159882},"_452-continue","4.5.2 continue",[14,159885,159886,159888],{},[34,159887,154957],{}," 跳过本轮剩余代码，进入下一轮循环。",[27,159890,159892],{"className":29,"code":159891,"language":31,"meta":32,"style":32},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[34,159893,159894,159914,159926,159930],{"__ignoreMap":32},[37,159895,159896,159898,159900,159902,159904,159906,159908,159910,159912],{"class":39,"line":40},[37,159897,3375],{"class":54},[37,159899,9779],{"class":50},[37,159901,26385],{"class":54},[37,159903,32781],{"class":61},[37,159905,165],{"class":50},[37,159907,332],{"class":61},[37,159909,12776],{"class":50},[37,159911,93],{"class":61},[37,159913,31125],{"class":50},[37,159915,159916,159918,159920,159922,159924],{"class":39,"line":47},[37,159917,3451],{"class":54},[37,159919,9779],{"class":50},[37,159921,3299],{"class":54},[37,159923,78405],{"class":61},[37,159925,4089],{"class":50},[37,159927,159928],{"class":39,"line":104},[37,159929,148797],{"class":54},[37,159931,159932,159934],{"class":39,"line":113},[37,159933,31638],{"class":61},[37,159935,159515],{"class":50},[14,159937,146742],{},[27,159939,159942],{"className":159940,"code":159941,"language":5536,"meta":32},[5534],"1\n2\n4\n5\n",[34,159943,159941],{"__ignoreMap":32},[469,159945,159947],{"id":159946},"_46-for循环","4.6 for循环",[14,159949,159950,159952],{},[34,159951,3375],{}," 常用于遍历序列。",[27,159954,159956],{"className":29,"code":159955,"language":31,"meta":32,"style":32},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[34,159957,159958,159967,159971,159982],{"__ignoreMap":32},[37,159959,159960,159962,159964],{"class":39,"line":40},[37,159961,146821],{"class":50},[37,159963,55],{"class":54},[37,159965,159966],{"class":185}," \"python\"\n",[37,159968,159969],{"class":39,"line":47},[37,159970,2757],{"emptyLinePlaceholder":454},[37,159972,159973,159975,159978,159980],{"class":39,"line":104},[37,159974,3375],{"class":54},[37,159976,159977],{"class":50}," ch ",[37,159979,26385],{"class":54},[37,159981,158684],{"class":50},[37,159983,159984,159986],{"class":39,"line":113},[37,159985,31638],{"class":61},[37,159987,159988],{"class":50},"(ch)\n",[14,159990,159991],{},"遍历列表：",[27,159993,159995],{"className":29,"code":159994,"language":31,"meta":32,"style":32},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[34,159996,159997,160019,160023,160033],{"__ignoreMap":32},[37,159998,159999,160002,160004,160006,160008,160010,160012,160014,160017],{"class":39,"line":40},[37,160000,160001],{"class":50},"students ",[37,160003,55],{"class":54},[37,160005,52562],{"class":50},[37,160007,150173],{"class":185},[37,160009,12776],{"class":50},[37,160011,151221],{"class":185},[37,160013,12776],{"class":50},[37,160015,160016],{"class":185},"\"小刚\"",[37,160018,389],{"class":50},[37,160020,160021],{"class":39,"line":47},[37,160022,2757],{"emptyLinePlaceholder":454},[37,160024,160025,160027,160029,160031],{"class":39,"line":104},[37,160026,3375],{"class":54},[37,160028,152422],{"class":50},[37,160030,26385],{"class":54},[37,160032,152427],{"class":50},[37,160034,160035,160037],{"class":39,"line":113},[37,160036,31638],{"class":61},[37,160038,150327],{"class":50},[469,160040,160042],{"id":160041},"_47-range函数","4.7 range函数",[14,160044,160045,160048],{},[34,160046,160047],{},"range()"," 用于生成整数序列。",[27,160050,160052],{"className":29,"code":160051,"language":31,"meta":32,"style":32},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[34,160053,160054,160068,160086],{"__ignoreMap":32},[37,160055,160056,160058,160060,160062,160065],{"class":39,"line":40},[37,160057,33753],{"class":61},[37,160059,165],{"class":50},[37,160061,836],{"class":61},[37,160063,160064],{"class":50},")          ",[37,160066,160067],{"class":43},"# 0,1,2,3,4\n",[37,160069,160070,160072,160074,160076,160078,160080,160083],{"class":39,"line":47},[37,160071,33753],{"class":61},[37,160073,165],{"class":50},[37,160075,332],{"class":61},[37,160077,12776],{"class":50},[37,160079,836],{"class":61},[37,160081,160082],{"class":50},")       ",[37,160084,160085],{"class":43},"# 1,2,3,4\n",[37,160087,160088,160090,160092,160094,160096,160098,160100,160102,160104],{"class":39,"line":104},[37,160089,33753],{"class":61},[37,160091,165],{"class":50},[37,160093,332],{"class":61},[37,160095,12776],{"class":50},[37,160097,98],{"class":61},[37,160099,12776],{"class":50},[37,160101,602],{"class":61},[37,160103,155946],{"class":50},[37,160105,160106],{"class":43},"# 1,3,5,7,9\n",[14,160108,160109,160110,24960],{},"配合 ",[34,160111,3375],{},[27,160113,160115],{"className":29,"code":160114,"language":31,"meta":32,"style":32},"for i in range(1, 6):\n    print(i)\n",[34,160116,160117,160137],{"__ignoreMap":32},[37,160118,160119,160121,160123,160125,160127,160129,160131,160133,160135],{"class":39,"line":40},[37,160120,3375],{"class":54},[37,160122,9779],{"class":50},[37,160124,26385],{"class":54},[37,160126,32781],{"class":61},[37,160128,165],{"class":50},[37,160130,332],{"class":61},[37,160132,12776],{"class":50},[37,160134,93],{"class":61},[37,160136,31125],{"class":50},[37,160138,160139,160141],{"class":39,"line":47},[37,160140,31638],{"class":61},[37,160142,159515],{"class":50},[14,160144,9366,160145,160147],{},[34,160146,33753],{}," 的结束值不包含在内。",[469,160149,160151],{"id":160150},"_48-for循环求和","4.8 for循环求和",[27,160153,160155],{"className":29,"code":160154,"language":31,"meta":32,"style":32},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[34,160156,160157,160165,160169,160189,160197,160201],{"__ignoreMap":32},[37,160158,160159,160161,160163],{"class":39,"line":40},[37,160160,157545],{"class":50},[37,160162,55],{"class":54},[37,160164,47670],{"class":61},[37,160166,160167],{"class":39,"line":47},[37,160168,2757],{"emptyLinePlaceholder":454},[37,160170,160171,160173,160175,160177,160179,160181,160183,160185,160187],{"class":39,"line":104},[37,160172,3375],{"class":54},[37,160174,9779],{"class":50},[37,160176,26385],{"class":54},[37,160178,32781],{"class":61},[37,160180,165],{"class":50},[37,160182,332],{"class":61},[37,160184,12776],{"class":50},[37,160186,854],{"class":61},[37,160188,31125],{"class":50},[37,160190,160191,160193,160195],{"class":39,"line":113},[37,160192,159592],{"class":50},[37,160194,9818],{"class":54},[37,160196,159597],{"class":50},[37,160198,160199],{"class":39,"line":189},[37,160200,2757],{"emptyLinePlaceholder":454},[37,160202,160203,160205],{"class":39,"line":195},[37,160204,30755],{"class":61},[37,160206,159616],{"class":50},[14,160208,160209],{},"求偶数和：",[27,160211,160213],{"className":29,"code":160212,"language":31,"meta":32,"style":32},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[34,160214,160215,160223,160227,160247,160263,160272,160276],{"__ignoreMap":32},[37,160216,160217,160219,160221],{"class":39,"line":40},[37,160218,157545],{"class":50},[37,160220,55],{"class":54},[37,160222,47670],{"class":61},[37,160224,160225],{"class":39,"line":47},[37,160226,2757],{"emptyLinePlaceholder":454},[37,160228,160229,160231,160233,160235,160237,160239,160241,160243,160245],{"class":39,"line":104},[37,160230,3375],{"class":54},[37,160232,9779],{"class":50},[37,160234,26385],{"class":54},[37,160236,32781],{"class":61},[37,160238,165],{"class":50},[37,160240,332],{"class":61},[37,160242,12776],{"class":50},[37,160244,854],{"class":61},[37,160246,31125],{"class":50},[37,160248,160249,160251,160253,160255,160257,160259,160261],{"class":39,"line":113},[37,160250,3451],{"class":54},[37,160252,9779],{"class":50},[37,160254,845],{"class":54},[37,160256,15096],{"class":61},[37,160258,101844],{"class":54},[37,160260,4443],{"class":61},[37,160262,4089],{"class":50},[37,160264,160265,160268,160270],{"class":39,"line":189},[37,160266,160267],{"class":50},"        total ",[37,160269,9818],{"class":54},[37,160271,159597],{"class":50},[37,160273,160274],{"class":39,"line":195},[37,160275,2757],{"emptyLinePlaceholder":454},[37,160277,160278,160280],{"class":39,"line":201},[37,160279,30755],{"class":61},[37,160281,159616],{"class":50},[14,160283,160284],{},"也可以：",[27,160286,160288],{"className":29,"code":160287,"language":31,"meta":32,"style":32},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[34,160289,160290,160298,160302,160326,160334,160338],{"__ignoreMap":32},[37,160291,160292,160294,160296],{"class":39,"line":40},[37,160293,157545],{"class":50},[37,160295,55],{"class":54},[37,160297,47670],{"class":61},[37,160299,160300],{"class":39,"line":47},[37,160301,2757],{"emptyLinePlaceholder":454},[37,160303,160304,160306,160308,160310,160312,160314,160316,160318,160320,160322,160324],{"class":39,"line":104},[37,160305,3375],{"class":54},[37,160307,9779],{"class":50},[37,160309,26385],{"class":54},[37,160311,32781],{"class":61},[37,160313,165],{"class":50},[37,160315,602],{"class":61},[37,160317,12776],{"class":50},[37,160319,854],{"class":61},[37,160321,12776],{"class":50},[37,160323,602],{"class":61},[37,160325,31125],{"class":50},[37,160327,160328,160330,160332],{"class":39,"line":113},[37,160329,159592],{"class":50},[37,160331,9818],{"class":54},[37,160333,159597],{"class":50},[37,160335,160336],{"class":39,"line":189},[37,160337,2757],{"emptyLinePlaceholder":454},[37,160339,160340,160342],{"class":39,"line":195},[37,160341,30755],{"class":61},[37,160343,159616],{"class":50},[469,160345,160347],{"id":160346},"_49-循环嵌套","4.9 循环嵌套",[14,160349,160350],{},"嵌套循环就是循环里面再写循环。",[27,160352,160354],{"className":29,"code":160353,"language":31,"meta":32,"style":32},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[34,160355,160356,160376,160396],{"__ignoreMap":32},[37,160357,160358,160360,160362,160364,160366,160368,160370,160372,160374],{"class":39,"line":40},[37,160359,3375],{"class":54},[37,160361,9779],{"class":50},[37,160363,26385],{"class":54},[37,160365,32781],{"class":61},[37,160367,165],{"class":50},[37,160369,332],{"class":61},[37,160371,12776],{"class":50},[37,160373,168],{"class":61},[37,160375,31125],{"class":50},[37,160377,160378,160380,160382,160384,160386,160388,160390,160392,160394],{"class":39,"line":47},[37,160379,3551],{"class":54},[37,160381,9841],{"class":50},[37,160383,26385],{"class":54},[37,160385,32781],{"class":61},[37,160387,165],{"class":50},[37,160389,332],{"class":61},[37,160391,12776],{"class":50},[37,160393,168],{"class":61},[37,160395,31125],{"class":50},[37,160397,160398,160400,160402,160404,160407,160409,160411,160413,160416,160418,160420,160422,160424],{"class":39,"line":104},[37,160399,32789],{"class":61},[37,160401,165],{"class":50},[37,160403,579],{"class":54},[37,160405,160406],{"class":185},"\"i=",[37,160408,1404],{"class":61},[37,160410,954],{"class":50},[37,160412,1454],{"class":61},[37,160414,160415],{"class":185},", j=",[37,160417,1404],{"class":61},[37,160419,979],{"class":50},[37,160421,1454],{"class":61},[37,160423,772],{"class":185},[37,160425,280],{"class":50},[14,160427,160428],{},"外层循环执行一次，内层循环执行完整一轮。",[469,160430,160432],{"id":160431},"_410-九九乘法表","4.10 九九乘法表",[27,160434,160436],{"className":29,"code":160435,"language":31,"meta":32,"style":32},"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",[34,160437,160438,160458,160481,160533],{"__ignoreMap":32},[37,160439,160440,160442,160444,160446,160448,160450,160452,160454,160456],{"class":39,"line":40},[37,160441,3375],{"class":54},[37,160443,9779],{"class":50},[37,160445,26385],{"class":54},[37,160447,32781],{"class":61},[37,160449,165],{"class":50},[37,160451,332],{"class":61},[37,160453,12776],{"class":50},[37,160455,98],{"class":61},[37,160457,31125],{"class":50},[37,160459,160460,160462,160464,160466,160468,160470,160472,160475,160477,160479],{"class":39,"line":47},[37,160461,3551],{"class":54},[37,160463,9841],{"class":50},[37,160465,26385],{"class":54},[37,160467,32781],{"class":61},[37,160469,165],{"class":50},[37,160471,332],{"class":61},[37,160473,160474],{"class":50},", i ",[37,160476,993],{"class":54},[37,160478,25460],{"class":61},[37,160480,31125],{"class":50},[37,160482,160483,160485,160487,160489,160491,160493,160495,160497,160499,160501,160503,160505,160507,160509,160511,160513,160515,160517,160519,160521,160523,160525,160527,160529,160531],{"class":39,"line":104},[37,160484,32789],{"class":61},[37,160486,165],{"class":50},[37,160488,579],{"class":54},[37,160490,772],{"class":185},[37,160492,1404],{"class":61},[37,160494,979],{"class":50},[37,160496,1454],{"class":61},[37,160498,967],{"class":185},[37,160500,1404],{"class":61},[37,160502,954],{"class":50},[37,160504,1454],{"class":61},[37,160506,55],{"class":185},[37,160508,1404],{"class":61},[37,160510,100433],{"class":50},[37,160512,967],{"class":54},[37,160514,3760],{"class":50},[37,160516,1454],{"class":61},[37,160518,772],{"class":185},[37,160520,12776],{"class":50},[37,160522,46138],{"class":159},[37,160524,55],{"class":54},[37,160526,772],{"class":185},[37,160528,1609],{"class":61},[37,160530,772],{"class":185},[37,160532,280],{"class":50},[37,160534,160535,160537],{"class":39,"line":113},[37,160536,31638],{"class":61},[37,160538,2333],{"class":50},[14,160540,160541],{},"关键点：",[481,160543,160544,160550,160556,160562],{},[484,160545,160546,160547,160549],{},"外层 ",[34,160548,954],{}," 控制行。",[484,160551,160552,160553,160555],{},"内层 ",[34,160554,979],{}," 控制列。",[484,160557,160558,160559,160561],{},"每行结束后用 ",[34,160560,146757],{}," 换行。",[484,160563,160564,160567],{},[34,160565,160566],{},"end=\"\\t\""," 让同一行的内容横向排列。",[469,160569,160571],{"id":160570},"_411-循环else","4.11 循环else",[14,160573,160574,160575,160577,160578,160580,160581,160583],{},"Python 的循环可以带 ",[34,160576,2066],{},"。当循环正常结束时执行 ",[34,160579,2066],{},"，如果被 ",[34,160582,2410],{}," 打断，则不执行。",[27,160585,160587],{"className":29,"code":160586,"language":31,"meta":32,"style":32},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[34,160588,160589,160609,160621,160632,160636,160642],{"__ignoreMap":32},[37,160590,160591,160593,160595,160597,160599,160601,160603,160605,160607],{"class":39,"line":40},[37,160592,3375],{"class":54},[37,160594,9779],{"class":50},[37,160596,26385],{"class":54},[37,160598,32781],{"class":61},[37,160600,165],{"class":50},[37,160602,332],{"class":61},[37,160604,12776],{"class":50},[37,160606,93],{"class":61},[37,160608,31125],{"class":50},[37,160610,160611,160613,160615,160617,160619],{"class":39,"line":47},[37,160612,3451],{"class":54},[37,160614,9779],{"class":50},[37,160616,3299],{"class":54},[37,160618,2395],{"class":61},[37,160620,4089],{"class":50},[37,160622,160623,160625,160627,160630],{"class":39,"line":104},[37,160624,32789],{"class":61},[37,160626,165],{"class":50},[37,160628,160629],{"class":185},"\"找到了\"",[37,160631,280],{"class":50},[37,160633,160634],{"class":39,"line":113},[37,160635,31965],{"class":54},[37,160637,160638,160640],{"class":39,"line":189},[37,160639,2066],{"class":54},[37,160641,4089],{"class":50},[37,160643,160644,160646,160648,160651],{"class":39,"line":195},[37,160645,31638],{"class":61},[37,160647,165],{"class":50},[37,160649,160650],{"class":185},"\"没找到\"",[37,160652,280],{"class":50},[14,160654,160655],{},"常用于搜索。",[27,160657,160659],{"className":29,"code":160658,"language":31,"meta":32,"style":32},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[34,160660,160661,160682,160691,160695,160707,160718,160728,160732,160738],{"__ignoreMap":32},[37,160662,160663,160666,160668,160670,160672,160674,160676,160678,160680],{"class":39,"line":40},[37,160664,160665],{"class":50},"names ",[37,160667,55],{"class":54},[37,160669,52562],{"class":50},[37,160671,150173],{"class":185},[37,160673,12776],{"class":50},[37,160675,151221],{"class":185},[37,160677,12776],{"class":50},[37,160679,160016],{"class":185},[37,160681,389],{"class":50},[37,160683,160684,160686,160688],{"class":39,"line":47},[37,160685,111863],{"class":50},[37,160687,55],{"class":54},[37,160689,160690],{"class":185}," \"小李\"\n",[37,160692,160693],{"class":39,"line":104},[37,160694,2757],{"emptyLinePlaceholder":454},[37,160696,160697,160699,160702,160704],{"class":39,"line":113},[37,160698,3375],{"class":54},[37,160700,160701],{"class":50}," name ",[37,160703,26385],{"class":54},[37,160705,160706],{"class":50}," names:\n",[37,160708,160709,160711,160713,160715],{"class":39,"line":189},[37,160710,3451],{"class":54},[37,160712,160701],{"class":50},[37,160714,3299],{"class":54},[37,160716,160717],{"class":50}," target:\n",[37,160719,160720,160722,160724,160726],{"class":39,"line":195},[37,160721,32789],{"class":61},[37,160723,165],{"class":50},[37,160725,160629],{"class":185},[37,160727,280],{"class":50},[37,160729,160730],{"class":39,"line":201},[37,160731,31965],{"class":54},[37,160733,160734,160736],{"class":39,"line":207},[37,160735,2066],{"class":54},[37,160737,4089],{"class":50},[37,160739,160740,160742,160744,160746],{"class":39,"line":213},[37,160741,31638],{"class":61},[37,160743,165],{"class":50},[37,160745,160650],{"class":185},[37,160747,280],{"class":50},[469,160749,160751],{"id":160750},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160753,123577],{},[481,160755,160756,160759,160762],{},[484,160757,160758],{},"用户最多输入 3 次密码。",[484,160760,160761],{},"密码正确则登录成功。",[484,160763,160764],{},"3 次都错误则锁定账号。",[14,160766,10376],{},[27,160768,160770],{"className":29,"code":160769,"language":31,"meta":32,"style":32},"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",[34,160771,160772,160782,160786,160802,160818,160822,160834,160845,160849,160855,160880,160886],{"__ignoreMap":32},[37,160773,160774,160777,160779],{"class":39,"line":40},[37,160775,160776],{"class":50},"password ",[37,160778,55],{"class":54},[37,160780,160781],{"class":185}," \"123456\"\n",[37,160783,160784],{"class":39,"line":47},[37,160785,2757],{"emptyLinePlaceholder":454},[37,160787,160788,160790,160792,160794,160796,160798,160800],{"class":39,"line":104},[37,160789,3375],{"class":54},[37,160791,9779],{"class":50},[37,160793,26385],{"class":54},[37,160795,32781],{"class":61},[37,160797,165],{"class":50},[37,160799,62],{"class":61},[37,160801,31125],{"class":50},[37,160803,160804,160807,160809,160811,160813,160816],{"class":39,"line":113},[37,160805,160806],{"class":50},"    user_password ",[37,160808,55],{"class":54},[37,160810,60941],{"class":61},[37,160812,165],{"class":50},[37,160814,160815],{"class":185},"\"请输入密码:\"",[37,160817,280],{"class":50},[37,160819,160820],{"class":39,"line":189},[37,160821,2757],{"emptyLinePlaceholder":454},[37,160823,160824,160826,160829,160831],{"class":39,"line":195},[37,160825,3451],{"class":54},[37,160827,160828],{"class":50}," user_password ",[37,160830,3299],{"class":54},[37,160832,160833],{"class":50}," password:\n",[37,160835,160836,160838,160840,160843],{"class":39,"line":201},[37,160837,32789],{"class":61},[37,160839,165],{"class":50},[37,160841,160842],{"class":185},"\"登录成功\"",[37,160844,280],{"class":50},[37,160846,160847],{"class":39,"line":207},[37,160848,31965],{"class":54},[37,160850,160851,160853],{"class":39,"line":213},[37,160852,158307],{"class":54},[37,160854,4089],{"class":50},[37,160856,160857,160859,160861,160863,160866,160869,160871,160873,160875,160878],{"class":39,"line":218},[37,160858,32789],{"class":61},[37,160860,165],{"class":50},[37,160862,579],{"class":54},[37,160864,160865],{"class":185},"\"密码错误，还剩",[37,160867,160868],{"class":61},"{2",[37,160870,52607],{"class":54},[37,160872,3382],{"class":50},[37,160874,1454],{"class":61},[37,160876,160877],{"class":185},"次机会\"",[37,160879,280],{"class":50},[37,160881,160882,160884],{"class":39,"line":227},[37,160883,2066],{"class":54},[37,160885,4089],{"class":50},[37,160887,160888,160890,160892,160895],{"class":39,"line":232},[37,160889,31638],{"class":61},[37,160891,165],{"class":50},[37,160893,160894],{"class":185},"\"账号已锁定\"",[37,160896,280],{"class":50},[469,160898,160900],{"id":160899},"_413-小案例菜单程序","4.13 小案例：菜单程序",[27,160902,160904],{"className":29,"code":160903,"language":31,"meta":32,"style":32},"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",[34,160905,160906,160914,160925,160936,160947,160958,160969,160973,160988,160992,161004,161015,161027,161038,161050,161061,161073,161083,161087,161093],{"__ignoreMap":32},[37,160907,160908,160910,160912],{"class":39,"line":40},[37,160909,108948],{"class":54},[37,160911,95577],{"class":61},[37,160913,4089],{"class":50},[37,160915,160916,160918,160920,160923],{"class":39,"line":47},[37,160917,31638],{"class":61},[37,160919,165],{"class":50},[37,160921,160922],{"class":185},"\"====== 菜单 ======\"",[37,160924,280],{"class":50},[37,160926,160927,160929,160931,160934],{"class":39,"line":104},[37,160928,31638],{"class":61},[37,160930,165],{"class":50},[37,160932,160933],{"class":185},"\"1. 查询余额\"",[37,160935,280],{"class":50},[37,160937,160938,160940,160942,160945],{"class":39,"line":113},[37,160939,31638],{"class":61},[37,160941,165],{"class":50},[37,160943,160944],{"class":185},"\"2. 存款\"",[37,160946,280],{"class":50},[37,160948,160949,160951,160953,160956],{"class":39,"line":189},[37,160950,31638],{"class":61},[37,160952,165],{"class":50},[37,160954,160955],{"class":185},"\"3. 取款\"",[37,160957,280],{"class":50},[37,160959,160960,160962,160964,160967],{"class":39,"line":195},[37,160961,31638],{"class":61},[37,160963,165],{"class":50},[37,160965,160966],{"class":185},"\"0. 退出\"",[37,160968,280],{"class":50},[37,160970,160971],{"class":39,"line":201},[37,160972,2757],{"emptyLinePlaceholder":454},[37,160974,160975,160978,160980,160982,160984,160986],{"class":39,"line":207},[37,160976,160977],{"class":50},"    choice ",[37,160979,55],{"class":54},[37,160981,60941],{"class":61},[37,160983,165],{"class":50},[37,160985,153358],{"class":185},[37,160987,280],{"class":50},[37,160989,160990],{"class":39,"line":213},[37,160991,2757],{"emptyLinePlaceholder":454},[37,160993,160994,160996,160998,161000,161002],{"class":39,"line":218},[37,160995,3451],{"class":54},[37,160997,153371],{"class":50},[37,160999,3299],{"class":54},[37,161001,153376],{"class":185},[37,161003,4089],{"class":50},[37,161005,161006,161008,161010,161013],{"class":39,"line":227},[37,161007,32789],{"class":61},[37,161009,165],{"class":50},[37,161011,161012],{"class":185},"\"余额为1000元\"",[37,161014,280],{"class":50},[37,161016,161017,161019,161021,161023,161025],{"class":39,"line":232},[37,161018,39630],{"class":54},[37,161020,153371],{"class":50},[37,161022,3299],{"class":54},[37,161024,153395],{"class":185},[37,161026,4089],{"class":50},[37,161028,161029,161031,161033,161036],{"class":39,"line":238},[37,161030,32789],{"class":61},[37,161032,165],{"class":50},[37,161034,161035],{"class":185},"\"存款功能\"",[37,161037,280],{"class":50},[37,161039,161040,161042,161044,161046,161048],{"class":39,"line":244},[37,161041,39630],{"class":54},[37,161043,153371],{"class":50},[37,161045,3299],{"class":54},[37,161047,153413],{"class":185},[37,161049,4089],{"class":50},[37,161051,161052,161054,161056,161059],{"class":39,"line":250},[37,161053,32789],{"class":61},[37,161055,165],{"class":50},[37,161057,161058],{"class":185},"\"取款功能\"",[37,161060,280],{"class":50},[37,161062,161063,161065,161067,161069,161071],{"class":39,"line":256},[37,161064,39630],{"class":54},[37,161066,153371],{"class":50},[37,161068,3299],{"class":54},[37,161070,153467],{"class":185},[37,161072,4089],{"class":50},[37,161074,161075,161077,161079,161081],{"class":39,"line":261},[37,161076,32789],{"class":61},[37,161078,165],{"class":50},[37,161080,153478],{"class":185},[37,161082,280],{"class":50},[37,161084,161085],{"class":39,"line":267},[37,161086,31965],{"class":54},[37,161088,161089,161091],{"class":39,"line":283},[37,161090,158307],{"class":54},[37,161092,4089],{"class":50},[37,161094,161095,161097,161099,161101],{"class":39,"line":288},[37,161096,32789],{"class":61},[37,161098,165],{"class":50},[37,161100,153499],{"class":185},[37,161102,280],{"class":50},[14,161104,161105,161106,161108,161109,28727],{},"菜单类程序通常使用 ",[34,161107,159807],{},"，用户选择退出时 ",[34,161110,2410],{},[469,161112,161114],{"id":161113},"_414-易错点","4.14 易错点",[481,161116,161117,161122,161128,161136,161142],{},[484,161118,161119,161121],{},[34,161120,108948],{}," 循环必须更新控制变量。",[484,161123,161124,161127],{},[34,161125,161126],{},"range(1, 10)"," 不包含 10。",[484,161129,161130,161132,161133,161135],{},[34,161131,2410],{}," 结束整个循环，",[34,161134,154957],{}," 只跳过本轮。",[484,161137,161138,161139,161141],{},"嵌套循环中，",[34,161140,2410],{}," 只跳出当前所在的一层循环。",[484,161143,161144],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[469,161146,161148],{"id":161147},"_415-本章练习","4.15 本章练习",[481,161150,161151,161154,161157,161160,161163],{},[484,161152,161153],{},"输出 1 到 100。",[484,161155,161156],{},"计算 1 到 100 的偶数和。",[484,161158,161159],{},"输出 100 以内能被 3 和 5 同时整除的数。",[484,161161,161162],{},"编写猜数字游戏，限制最多猜 7 次。",[484,161164,161165],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[446,161167,161168],{},"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":32,"searchDepth":47,"depth":47,"links":161170},[161171,161172,161173,161174,161175,161179,161180,161181,161182,161183,161184,161185,161186,161187,161188],{"id":159427,"depth":47,"text":159428},{"id":159457,"depth":47,"text":159458},{"id":159546,"depth":47,"text":159547},{"id":159640,"depth":47,"text":159641},{"id":159814,"depth":47,"text":159815,"children":161176},[161177,161178],{"id":159818,"depth":104,"text":159819},{"id":159882,"depth":104,"text":159883},{"id":159946,"depth":47,"text":159947},{"id":160041,"depth":47,"text":160042},{"id":160150,"depth":47,"text":160151},{"id":160346,"depth":47,"text":160347},{"id":160431,"depth":47,"text":160432},{"id":160570,"depth":47,"text":160571},{"id":160750,"depth":47,"text":160751},{"id":160899,"depth":47,"text":160900},{"id":161113,"depth":47,"text":161114},{"id":161147,"depth":47,"text":161148},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159419,"description":451},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161195,"title":161196,"body":161197,"description":451,"extension":452,"meta":163202,"navigation":454,"path":163203,"seo":163204,"stem":163205,"__hash__":163206},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161198,"toc":163182},[161199,161202,161206,161209,161212,161226,161229,161243,161247,161249,161268,161270,161317,161319,161333,161337,161411,161414,161418,161421,161480,161488,161491,161544,161547,161551,161556,161611,161619,161669,161673,161678,161686,161785,161791,161795,161800,161803,161814,161855,161868,161872,161875,161911,161914,161927,161930,161990,161994,161998,162001,162052,162056,162059,162106,162112,162178,162181,162185,162188,162304,162307,162311,162314,162420,162424,162427,162465,162468,162510,162513,162573,162576,162580,163044,163047,163051,163078,163084,163145,163149,163179],[10,161200,161196],{"id":161201},"_5-函数基础",[469,161203,161205],{"id":161204},"_51-为什么需要函数","5.1 为什么需要函数",[14,161207,161208],{},"函数用于封装一段可以重复使用的代码。",[14,161210,161211],{},"不使用函数的问题：",[481,161213,161214,161217,161220,161223],{},[484,161215,161216],{},"重复代码多。",[484,161218,161219],{},"修改逻辑时容易漏改。",[484,161221,161222],{},"主流程不清晰。",[484,161224,161225],{},"程序越写越长，难以维护。",[14,161227,161228],{},"使用函数后的好处：",[481,161230,161231,161234,161237,161240],{},[484,161232,161233],{},"提高复用性。",[484,161235,161236],{},"提高可读性。",[484,161238,161239],{},"便于调试。",[484,161241,161242],{},"便于分工。",[469,161244,161246],{"id":161245},"_52-函数定义","5.2 函数定义",[14,161248,5530],{},[27,161250,161252],{"className":29,"code":161251,"language":31,"meta":32,"style":32},"def 函数名():\n    函数体\n",[34,161253,161254,161263],{"__ignoreMap":32},[37,161255,161256,161258,161261],{"class":39,"line":40},[37,161257,32285],{"class":54},[37,161259,161260],{"class":2320}," 函数名",[37,161262,32291],{"class":50},[37,161264,161265],{"class":39,"line":47},[37,161266,161267],{"class":50},"    函数体\n",[14,161269,15476],{},[27,161271,161273],{"className":29,"code":161272,"language":31,"meta":32,"style":32},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[34,161274,161275,161284,161294,161304,161308,161312],{"__ignoreMap":32},[37,161276,161277,161279,161282],{"class":39,"line":40},[37,161278,32285],{"class":54},[37,161280,161281],{"class":2320}," say_hello",[37,161283,32291],{"class":50},[37,161285,161286,161288,161290,161292],{"class":39,"line":47},[37,161287,31638],{"class":61},[37,161289,165],{"class":50},[37,161291,6192],{"class":185},[37,161293,280],{"class":50},[37,161295,161296,161298,161300,161302],{"class":39,"line":104},[37,161297,31638],{"class":61},[37,161299,165],{"class":50},[37,161301,146924],{"class":185},[37,161303,280],{"class":50},[37,161305,161306],{"class":39,"line":113},[37,161307,2757],{"emptyLinePlaceholder":454},[37,161309,161310],{"class":39,"line":189},[37,161311,2757],{"emptyLinePlaceholder":454},[37,161313,161314],{"class":39,"line":195},[37,161315,161316],{"class":50},"say_hello()\n",[14,161318,9366],{},[481,161320,161321,161324,161327,161330],{},[484,161322,161323],{},"函数必须先定义，再调用。",[484,161325,161326],{},"函数名遵循变量命名规则。",[484,161328,161329],{},"函数体需要缩进。",[484,161331,161332],{},"函数不调用就不会执行。",[469,161334,161336],{"id":161335},"_53-函数调用","5.3 函数调用",[27,161338,161340],{"className":29,"code":161339,"language":31,"meta":32,"style":32},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[34,161341,161342,161351,161362,161373,161384,161394,161398,161402,161407],{"__ignoreMap":32},[37,161343,161344,161346,161349],{"class":39,"line":40},[37,161345,32285],{"class":54},[37,161347,161348],{"class":2320}," print_menu",[37,161350,32291],{"class":50},[37,161352,161353,161355,161357,161360],{"class":39,"line":47},[37,161354,31638],{"class":61},[37,161356,165],{"class":50},[37,161358,161359],{"class":185},"\"1. 查询\"",[37,161361,280],{"class":50},[37,161363,161364,161366,161368,161371],{"class":39,"line":104},[37,161365,31638],{"class":61},[37,161367,165],{"class":50},[37,161369,161370],{"class":185},"\"2. 添加\"",[37,161372,280],{"class":50},[37,161374,161375,161377,161379,161382],{"class":39,"line":113},[37,161376,31638],{"class":61},[37,161378,165],{"class":50},[37,161380,161381],{"class":185},"\"3. 删除\"",[37,161383,280],{"class":50},[37,161385,161386,161388,161390,161392],{"class":39,"line":189},[37,161387,31638],{"class":61},[37,161389,165],{"class":50},[37,161391,160966],{"class":185},[37,161393,280],{"class":50},[37,161395,161396],{"class":39,"line":195},[37,161397,2757],{"emptyLinePlaceholder":454},[37,161399,161400],{"class":39,"line":201},[37,161401,2757],{"emptyLinePlaceholder":454},[37,161403,161404],{"class":39,"line":207},[37,161405,161406],{"class":50},"print_menu()\n",[37,161408,161409],{"class":39,"line":213},[37,161410,161406],{"class":50},[14,161412,161413],{},"函数可以多次调用，每次调用都会执行函数体。",[469,161415,161417],{"id":161416},"_54-参数","5.4 参数",[14,161419,161420],{},"参数用于向函数传递数据。",[27,161422,161424],{"className":29,"code":161423,"language":31,"meta":32,"style":32},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[34,161425,161426,161435,161455,161459,161463,161472],{"__ignoreMap":32},[37,161427,161428,161430,161432],{"class":39,"line":40},[37,161429,32285],{"class":54},[37,161431,161281],{"class":2320},[37,161433,161434],{"class":50},"(name):\n",[37,161436,161437,161439,161441,161443,161445,161447,161449,161451,161453],{"class":39,"line":47},[37,161438,31638],{"class":61},[37,161440,165],{"class":50},[37,161442,579],{"class":54},[37,161444,157339],{"class":185},[37,161446,1404],{"class":61},[37,161448,80145],{"class":50},[37,161450,1454],{"class":61},[37,161452,772],{"class":185},[37,161454,280],{"class":50},[37,161456,161457],{"class":39,"line":104},[37,161458,2757],{"emptyLinePlaceholder":454},[37,161460,161461],{"class":39,"line":113},[37,161462,2757],{"emptyLinePlaceholder":454},[37,161464,161465,161468,161470],{"class":39,"line":189},[37,161466,161467],{"class":50},"say_hello(",[37,161469,150173],{"class":185},[37,161471,280],{"class":50},[37,161473,161474,161476,161478],{"class":39,"line":195},[37,161475,161467],{"class":50},[37,161477,151221],{"class":185},[37,161479,280],{"class":50},[14,161481,161482,161484,161485,161487],{},[34,161483,80145],{}," 是形参，",[34,161486,150173],{}," 是实参。",[14,161489,161490],{},"多个参数：",[27,161492,161494],{"className":29,"code":161493,"language":31,"meta":32,"style":32},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[34,161495,161496,161504,161517,161523,161527,161531],{"__ignoreMap":32},[37,161497,161498,161500,161502],{"class":39,"line":40},[37,161499,32285],{"class":54},[37,161501,5558],{"class":2320},[37,161503,151378],{"class":50},[37,161505,161506,161509,161511,161513,161515],{"class":39,"line":47},[37,161507,161508],{"class":50},"    result ",[37,161510,55],{"class":54},[37,161512,11210],{"class":50},[37,161514,993],{"class":54},[37,161516,151389],{"class":50},[37,161518,161519,161521],{"class":39,"line":104},[37,161520,31638],{"class":61},[37,161522,76920],{"class":50},[37,161524,161525],{"class":39,"line":113},[37,161526,2757],{"emptyLinePlaceholder":454},[37,161528,161529],{"class":39,"line":189},[37,161530,2757],{"emptyLinePlaceholder":454},[37,161532,161533,161536,161538,161540,161542],{"class":39,"line":195},[37,161534,161535],{"class":50},"add(",[37,161537,98],{"class":61},[37,161539,12776],{"class":50},[37,161541,1210],{"class":61},[37,161543,280],{"class":50},[14,161545,161546],{},"调用时参数数量必须匹配。",[469,161548,161550],{"id":161549},"_55-返回值","5.5 返回值",[14,161552,161553,161555],{},[34,161554,17387],{}," 用于把函数内部的结果返回给调用者。",[27,161557,161559],{"className":29,"code":161558,"language":31,"meta":32,"style":32},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[34,161560,161561,161569,161579,161583,161587,161605],{"__ignoreMap":32},[37,161562,161563,161565,161567],{"class":39,"line":40},[37,161564,32285],{"class":54},[37,161566,5558],{"class":2320},[37,161568,151378],{"class":50},[37,161570,161571,161573,161575,161577],{"class":39,"line":47},[37,161572,4440],{"class":54},[37,161574,11210],{"class":50},[37,161576,993],{"class":54},[37,161578,151389],{"class":50},[37,161580,161581],{"class":39,"line":104},[37,161582,2757],{"emptyLinePlaceholder":454},[37,161584,161585],{"class":39,"line":113},[37,161586,2757],{"emptyLinePlaceholder":454},[37,161588,161589,161592,161594,161597,161599,161601,161603],{"class":39,"line":189},[37,161590,161591],{"class":50},"result ",[37,161593,55],{"class":54},[37,161595,161596],{"class":50}," add(",[37,161598,98],{"class":61},[37,161600,12776],{"class":50},[37,161602,1210],{"class":61},[37,161604,280],{"class":50},[37,161606,161607,161609],{"class":39,"line":195},[37,161608,30755],{"class":61},[37,161610,76920],{"class":50},[14,161612,161613,161614,161616,161617,28727],{},"如果函数没有写 ",[34,161615,17387],{},"，默认返回 ",[34,161618,95971],{},[27,161620,161622],{"className":29,"code":161621,"language":31,"meta":32,"style":32},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[34,161623,161624,161632,161642,161646,161650,161659],{"__ignoreMap":32},[37,161625,161626,161628,161630],{"class":39,"line":40},[37,161627,32285],{"class":54},[37,161629,161281],{"class":2320},[37,161631,32291],{"class":50},[37,161633,161634,161636,161638,161640],{"class":39,"line":47},[37,161635,31638],{"class":61},[37,161637,165],{"class":50},[37,161639,6192],{"class":185},[37,161641,280],{"class":50},[37,161643,161644],{"class":39,"line":104},[37,161645,2757],{"emptyLinePlaceholder":454},[37,161647,161648],{"class":39,"line":113},[37,161649,2757],{"emptyLinePlaceholder":454},[37,161651,161652,161654,161656],{"class":39,"line":189},[37,161653,161591],{"class":50},[37,161655,55],{"class":54},[37,161657,161658],{"class":50}," say_hello()\n",[37,161660,161661,161663,161666],{"class":39,"line":195},[37,161662,30755],{"class":61},[37,161664,161665],{"class":50},"(result)  ",[37,161667,161668],{"class":43},"# None\n",[469,161670,161672],{"id":161671},"_56-return的作用","5.6 return的作用",[14,161674,161675,161677],{},[34,161676,17387],{}," 有两个作用：",[481,161679,161680,161683],{},[484,161681,161682],{},"返回结果。",[484,161684,161685],{},"结束函数。",[27,161687,161689],{"className":29,"code":161688,"language":31,"meta":32,"style":32},"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",[34,161690,161691,161701,161713,161720,161724,161736,161743,161747,161754,161758,161762,161773],{"__ignoreMap":32},[37,161692,161693,161695,161698],{"class":39,"line":40},[37,161694,32285],{"class":54},[37,161696,161697],{"class":2320}," check_age",[37,161699,161700],{"class":50},"(age):\n",[37,161702,161703,161705,161707,161709,161711],{"class":39,"line":47},[37,161704,3451],{"class":54},[37,161706,16048],{"class":50},[37,161708,1418],{"class":54},[37,161710,4443],{"class":61},[37,161712,4089],{"class":50},[37,161714,161715,161717],{"class":39,"line":104},[37,161716,15093],{"class":54},[37,161718,161719],{"class":185}," \"年龄不合法\"\n",[37,161721,161722],{"class":39,"line":113},[37,161723,2757],{"emptyLinePlaceholder":454},[37,161725,161726,161728,161730,161732,161734],{"class":39,"line":189},[37,161727,3451],{"class":54},[37,161729,16048],{"class":50},[37,161731,2075],{"class":54},[37,161733,156570],{"class":61},[37,161735,4089],{"class":50},[37,161737,161738,161740],{"class":39,"line":195},[37,161739,15093],{"class":54},[37,161741,161742],{"class":185}," \"成年人\"\n",[37,161744,161745],{"class":39,"line":201},[37,161746,2757],{"emptyLinePlaceholder":454},[37,161748,161749,161751],{"class":39,"line":207},[37,161750,4440],{"class":54},[37,161752,161753],{"class":185}," \"未成年人\"\n",[37,161755,161756],{"class":39,"line":213},[37,161757,2757],{"emptyLinePlaceholder":454},[37,161759,161760],{"class":39,"line":218},[37,161761,2757],{"emptyLinePlaceholder":454},[37,161763,161764,161766,161769,161771],{"class":39,"line":227},[37,161765,30755],{"class":61},[37,161767,161768],{"class":50},"(check_age(",[37,161770,1210],{"class":61},[37,161772,175],{"class":50},[37,161774,161775,161777,161779,161781,161783],{"class":39,"line":232},[37,161776,30755],{"class":61},[37,161778,161768],{"class":50},[37,161780,384],{"class":54},[37,161782,332],{"class":61},[37,161784,175],{"class":50},[14,161786,161787,161788,161790],{},"函数执行到 ",[34,161789,17387],{}," 后，后面的代码不会继续执行。",[469,161792,161794],{"id":161793},"_57-none","5.7 None",[14,161796,161797,161799],{},[34,161798,95971],{}," 表示空值或没有结果。",[14,161801,161802],{},"常见使用场景：",[481,161804,161805,161808,161811],{},[484,161806,161807],{},"函数没有返回值。",[484,161809,161810],{},"变量暂时没有具体值。",[484,161812,161813],{},"表示查询不到结果。",[27,161815,161817],{"className":29,"code":161816,"language":31,"meta":32,"style":32},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[34,161818,161819,161827,161831,161844],{"__ignoreMap":32},[37,161820,161821,161823,161825],{"class":39,"line":40},[37,161822,161591],{"class":50},[37,161824,55],{"class":54},[37,161826,152457],{"class":61},[37,161828,161829],{"class":39,"line":47},[37,161830,2757],{"emptyLinePlaceholder":454},[37,161832,161833,161835,161838,161840,161842],{"class":39,"line":104},[37,161834,1907],{"class":54},[37,161836,161837],{"class":50}," result ",[37,161839,39264],{"class":54},[37,161841,39270],{"class":61},[37,161843,4089],{"class":50},[37,161845,161846,161848,161850,161853],{"class":39,"line":113},[37,161847,31638],{"class":61},[37,161849,165],{"class":50},[37,161851,161852],{"class":185},"\"没有数据\"",[37,161854,280],{"class":50},[14,161856,161857,161858,161860,161861,161864,161865,28727],{},"判断 ",[34,161859,95971],{}," 推荐使用 ",[34,161862,161863],{},"is None","，不要写成 ",[34,161866,161867],{},"== None",[469,161869,161871],{"id":161870},"_58-函数文档字符串","5.8 函数文档字符串",[14,161873,161874],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[27,161876,161878],{"className":29,"code":161877,"language":31,"meta":32,"style":32},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[34,161879,161880,161890,161895],{"__ignoreMap":32},[37,161881,161882,161884,161887],{"class":39,"line":40},[37,161883,32285],{"class":54},[37,161885,161886],{"class":2320}," calculate_bmi",[37,161888,161889],{"class":50},"(weight, height):\n",[37,161891,161892],{"class":39,"line":47},[37,161893,161894],{"class":185},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[37,161896,161897,161899,161902,161904,161907,161909],{"class":39,"line":104},[37,161898,4440],{"class":54},[37,161900,161901],{"class":50}," weight ",[37,161903,1094],{"class":54},[37,161905,161906],{"class":50}," height ",[37,161908,11002],{"class":54},[37,161910,48059],{"class":61},[14,161912,161913],{},"查看说明：",[27,161915,161917],{"className":29,"code":161916,"language":31,"meta":32,"style":32},"help(calculate_bmi)\n",[34,161918,161919],{"__ignoreMap":32},[37,161920,161921,161924],{"class":39,"line":40},[37,161922,161923],{"class":61},"help",[37,161925,161926],{"class":50},"(calculate_bmi)\n",[14,161928,161929],{},"较完整的写法：",[27,161931,161933],{"className":29,"code":161932,"language":31,"meta":32,"style":32},"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",[34,161934,161935,161943,161948,161953,161957,161962,161967,161972,161976],{"__ignoreMap":32},[37,161936,161937,161939,161941],{"class":39,"line":40},[37,161938,32285],{"class":54},[37,161940,161886],{"class":2320},[37,161942,161889],{"class":50},[37,161944,161945],{"class":39,"line":47},[37,161946,161947],{"class":185},"    \"\"\"\n",[37,161949,161950],{"class":39,"line":104},[37,161951,161952],{"class":185},"    计算BMI。\n",[37,161954,161955],{"class":39,"line":113},[37,161956,2757],{"emptyLinePlaceholder":454},[37,161958,161959],{"class":39,"line":189},[37,161960,161961],{"class":185},"    :param weight: 体重，单位kg\n",[37,161963,161964],{"class":39,"line":195},[37,161965,161966],{"class":185},"    :param height: 身高，单位m\n",[37,161968,161969],{"class":39,"line":201},[37,161970,161971],{"class":185},"    :return: BMI数值\n",[37,161973,161974],{"class":39,"line":207},[37,161975,161947],{"class":185},[37,161977,161978,161980,161982,161984,161986,161988],{"class":39,"line":213},[37,161979,4440],{"class":54},[37,161981,161901],{"class":50},[37,161983,1094],{"class":54},[37,161985,161906],{"class":50},[37,161987,11002],{"class":54},[37,161989,48059],{"class":61},[469,161991,161993],{"id":161992},"_59-变量作用域","5.9 变量作用域",[498,161995,161997],{"id":161996},"_591-局部变量","5.9.1 局部变量",[14,161999,162000],{},"在函数内部定义的变量，只能在函数内部使用。",[27,162002,162004],{"className":29,"code":162003,"language":31,"meta":32,"style":32},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[34,162005,162006,162015,162023,162029,162033,162037,162042],{"__ignoreMap":32},[37,162007,162008,162010,162013],{"class":39,"line":40},[37,162009,32285],{"class":54},[37,162011,162012],{"class":2320}," test",[37,162014,32291],{"class":50},[37,162016,162017,162019,162021],{"class":39,"line":47},[37,162018,45930],{"class":50},[37,162020,55],{"class":54},[37,162022,58764],{"class":61},[37,162024,162025,162027],{"class":39,"line":104},[37,162026,31638],{"class":61},[37,162028,542],{"class":50},[37,162030,162031],{"class":39,"line":113},[37,162032,2757],{"emptyLinePlaceholder":454},[37,162034,162035],{"class":39,"line":189},[37,162036,2757],{"emptyLinePlaceholder":454},[37,162038,162039],{"class":39,"line":195},[37,162040,162041],{"class":50},"test()\n",[37,162043,162044,162046,162049],{"class":39,"line":201},[37,162045,30755],{"class":61},[37,162047,162048],{"class":50},"(num)  ",[37,162050,162051],{"class":43},"# 报错\n",[498,162053,162055],{"id":162054},"_592-全局变量","5.9.2 全局变量",[14,162057,162058],{},"在函数外部定义的变量，可以在函数内部读取。",[27,162060,162062],{"className":29,"code":162061,"language":31,"meta":32,"style":32},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[34,162063,162064,162072,162076,162080,162088,162094,162098,162102],{"__ignoreMap":32},[37,162065,162066,162068,162070],{"class":39,"line":40},[37,162067,146821],{"class":50},[37,162069,55],{"class":54},[37,162071,149638],{"class":185},[37,162073,162074],{"class":39,"line":47},[37,162075,2757],{"emptyLinePlaceholder":454},[37,162077,162078],{"class":39,"line":104},[37,162079,2757],{"emptyLinePlaceholder":454},[37,162081,162082,162084,162086],{"class":39,"line":113},[37,162083,32285],{"class":54},[37,162085,161281],{"class":2320},[37,162087,32291],{"class":50},[37,162089,162090,162092],{"class":39,"line":189},[37,162091,31638],{"class":61},[37,162093,150945],{"class":50},[37,162095,162096],{"class":39,"line":195},[37,162097,2757],{"emptyLinePlaceholder":454},[37,162099,162100],{"class":39,"line":201},[37,162101,2757],{"emptyLinePlaceholder":454},[37,162103,162104],{"class":39,"line":207},[37,162105,161316],{"class":50},[14,162107,162108,162109,28727],{},"如果要在函数内部修改全局变量，需要 ",[34,162110,162111],{},"global",[27,162113,162115],{"className":29,"code":162114,"language":31,"meta":32,"style":32},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[34,162116,162117,162125,162129,162133,162142,162150,162158,162162,162166,162171],{"__ignoreMap":32},[37,162118,162119,162121,162123],{"class":39,"line":40},[37,162120,146976],{"class":50},[37,162122,55],{"class":54},[37,162124,47670],{"class":61},[37,162126,162127],{"class":39,"line":47},[37,162128,2757],{"emptyLinePlaceholder":454},[37,162130,162131],{"class":39,"line":104},[37,162132,2757],{"emptyLinePlaceholder":454},[37,162134,162135,162137,162140],{"class":39,"line":113},[37,162136,32285],{"class":54},[37,162138,162139],{"class":2320}," add_count",[37,162141,32291],{"class":50},[37,162143,162144,162147],{"class":39,"line":189},[37,162145,162146],{"class":54},"    global",[37,162148,162149],{"class":50}," count\n",[37,162151,162152,162154,162156],{"class":39,"line":195},[37,162153,159718],{"class":50},[37,162155,9818],{"class":54},[37,162157,56035],{"class":61},[37,162159,162160],{"class":39,"line":201},[37,162161,2757],{"emptyLinePlaceholder":454},[37,162163,162164],{"class":39,"line":207},[37,162165,2757],{"emptyLinePlaceholder":454},[37,162167,162168],{"class":39,"line":213},[37,162169,162170],{"class":50},"add_count()\n",[37,162172,162173,162175],{"class":39,"line":218},[37,162174,30755],{"class":61},[37,162176,162177],{"class":50},"(count)\n",[14,162179,162180],{},"不建议大量使用全局变量，项目变大后很难维护。",[469,162182,162184],{"id":162183},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,162186,162187],{},"一个函数中可以调用另一个函数。",[27,162189,162191],{"className":29,"code":162190,"language":31,"meta":32,"style":32},"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",[34,162192,162193,162202,162216,162220,162224,162233,162238,162258,162279,162283,162287,162291],{"__ignoreMap":32},[37,162194,162195,162197,162200],{"class":39,"line":40},[37,162196,32285],{"class":54},[37,162198,162199],{"class":2320}," print_line",[37,162201,32291],{"class":50},[37,162203,162204,162206,162208,162210,162212,162214],{"class":39,"line":47},[37,162205,31638],{"class":61},[37,162207,165],{"class":50},[37,162209,32821],{"class":185},[37,162211,6866],{"class":54},[37,162213,79000],{"class":61},[37,162215,280],{"class":50},[37,162217,162218],{"class":39,"line":104},[37,162219,2757],{"emptyLinePlaceholder":454},[37,162221,162222],{"class":39,"line":113},[37,162223,2757],{"emptyLinePlaceholder":454},[37,162225,162226,162228,162231],{"class":39,"line":189},[37,162227,32285],{"class":54},[37,162229,162230],{"class":2320}," print_info",[37,162232,149660],{"class":50},[37,162234,162235],{"class":39,"line":195},[37,162236,162237],{"class":50},"    print_line()\n",[37,162239,162240,162242,162244,162246,162248,162250,162252,162254,162256],{"class":39,"line":201},[37,162241,31638],{"class":61},[37,162243,165],{"class":50},[37,162245,579],{"class":54},[37,162247,156967],{"class":185},[37,162249,1404],{"class":61},[37,162251,80145],{"class":50},[37,162253,1454],{"class":61},[37,162255,772],{"class":185},[37,162257,280],{"class":50},[37,162259,162260,162262,162264,162266,162269,162271,162273,162275,162277],{"class":39,"line":207},[37,162261,31638],{"class":61},[37,162263,165],{"class":50},[37,162265,579],{"class":54},[37,162267,162268],{"class":185},"\"年龄:",[37,162270,1404],{"class":61},[37,162272,70557],{"class":50},[37,162274,1454],{"class":61},[37,162276,772],{"class":185},[37,162278,280],{"class":50},[37,162280,162281],{"class":39,"line":213},[37,162282,162237],{"class":50},[37,162284,162285],{"class":39,"line":218},[37,162286,2757],{"emptyLinePlaceholder":454},[37,162288,162289],{"class":39,"line":227},[37,162290,2757],{"emptyLinePlaceholder":454},[37,162292,162293,162296,162298,162300,162302],{"class":39,"line":232},[37,162294,162295],{"class":50},"print_info(",[37,162297,150173],{"class":185},[37,162299,12776],{"class":50},[37,162301,1160],{"class":61},[37,162303,280],{"class":50},[14,162305,162306],{},"这种方式可以把小功能组合成大功能。",[469,162308,162310],{"id":162309},"_511-参数检查","5.11 参数检查",[14,162312,162313],{},"函数内部可以检查参数是否合法。",[27,162315,162317],{"className":29,"code":162316,"language":31,"meta":32,"style":32},"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",[34,162318,162319,162328,162340,162346,162356,162360,162364,162381,162385,162397,162408,162414],{"__ignoreMap":32},[37,162320,162321,162323,162326],{"class":39,"line":40},[37,162322,32285],{"class":54},[37,162324,162325],{"class":2320}," divide",[37,162327,151378],{"class":50},[37,162329,162330,162332,162334,162336,162338],{"class":39,"line":47},[37,162331,3451],{"class":54},[37,162333,11223],{"class":50},[37,162335,3299],{"class":54},[37,162337,4443],{"class":61},[37,162339,4089],{"class":50},[37,162341,162342,162344],{"class":39,"line":104},[37,162343,15093],{"class":54},[37,162345,152457],{"class":61},[37,162347,162348,162350,162352,162354],{"class":39,"line":113},[37,162349,4440],{"class":54},[37,162351,11210],{"class":50},[37,162353,1094],{"class":54},[37,162355,151389],{"class":50},[37,162357,162358],{"class":39,"line":189},[37,162359,2757],{"emptyLinePlaceholder":454},[37,162361,162362],{"class":39,"line":195},[37,162363,2757],{"emptyLinePlaceholder":454},[37,162365,162366,162368,162370,162373,162375,162377,162379],{"class":39,"line":201},[37,162367,161591],{"class":50},[37,162369,55],{"class":54},[37,162371,162372],{"class":50}," divide(",[37,162374,98],{"class":61},[37,162376,12776],{"class":50},[37,162378,135],{"class":61},[37,162380,280],{"class":50},[37,162382,162383],{"class":39,"line":207},[37,162384,2757],{"emptyLinePlaceholder":454},[37,162386,162387,162389,162391,162393,162395],{"class":39,"line":213},[37,162388,1907],{"class":54},[37,162390,161837],{"class":50},[37,162392,39264],{"class":54},[37,162394,39270],{"class":61},[37,162396,4089],{"class":50},[37,162398,162399,162401,162403,162406],{"class":39,"line":218},[37,162400,31638],{"class":61},[37,162402,165],{"class":50},[37,162404,162405],{"class":185},"\"除数不能为0\"",[37,162407,280],{"class":50},[37,162409,162410,162412],{"class":39,"line":227},[37,162411,2066],{"class":54},[37,162413,4089],{"class":50},[37,162415,162416,162418],{"class":39,"line":232},[37,162417,31638],{"class":61},[37,162419,76920],{"class":50},[469,162421,162423],{"id":162422},"_512-类型提示","5.12 类型提示",[14,162425,162426],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[27,162428,162430],{"className":29,"code":162429,"language":31,"meta":32,"style":32},"def add(a: int, b: int) -> int:\n    return a + b\n",[34,162431,162432,162455],{"__ignoreMap":32},[37,162433,162434,162436,162438,162441,162443,162446,162448,162451,162453],{"class":39,"line":40},[37,162435,32285],{"class":54},[37,162437,5558],{"class":2320},[37,162439,162440],{"class":50},"(a: ",[37,162442,533],{"class":61},[37,162444,162445],{"class":50},", b: ",[37,162447,533],{"class":61},[37,162449,162450],{"class":50},") -> ",[37,162452,533],{"class":61},[37,162454,4089],{"class":50},[37,162456,162457,162459,162461,162463],{"class":39,"line":47},[37,162458,4440],{"class":54},[37,162460,11210],{"class":50},[37,162462,993],{"class":54},[37,162464,151389],{"class":50},[14,162466,162467],{},"字符串参数：",[27,162469,162471],{"className":29,"code":162470,"language":31,"meta":32,"style":32},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[34,162472,162473,162490],{"__ignoreMap":32},[37,162474,162475,162477,162479,162482,162484,162486,162488],{"class":39,"line":40},[37,162476,32285],{"class":54},[37,162478,161281],{"class":2320},[37,162480,162481],{"class":50},"(name: ",[37,162483,1678],{"class":61},[37,162485,162450],{"class":50},[37,162487,95971],{"class":61},[37,162489,4089],{"class":50},[37,162491,162492,162494,162496,162498,162500,162502,162504,162506,162508],{"class":39,"line":47},[37,162493,31638],{"class":61},[37,162495,165],{"class":50},[37,162497,579],{"class":54},[37,162499,157339],{"class":185},[37,162501,1404],{"class":61},[37,162503,80145],{"class":50},[37,162505,1454],{"class":61},[37,162507,772],{"class":185},[37,162509,280],{"class":50},[14,162511,162512],{},"列表参数：",[27,162514,162516],{"className":29,"code":162515,"language":31,"meta":32,"style":32},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[34,162517,162518,162537,162545,162557,162566],{"__ignoreMap":32},[37,162519,162520,162522,162525,162528,162530,162533,162535],{"class":39,"line":40},[37,162521,32285],{"class":54},[37,162523,162524],{"class":2320}," get_total",[37,162526,162527],{"class":50},"(numbers: list[",[37,162529,533],{"class":61},[37,162531,162532],{"class":50},"]) -> ",[37,162534,533],{"class":61},[37,162536,4089],{"class":50},[37,162538,162539,162541,162543],{"class":39,"line":47},[37,162540,159592],{"class":50},[37,162542,55],{"class":54},[37,162544,47670],{"class":61},[37,162546,162547,162549,162552,162554],{"class":39,"line":104},[37,162548,3551],{"class":54},[37,162550,162551],{"class":50}," number ",[37,162553,26385],{"class":54},[37,162555,162556],{"class":50}," numbers:\n",[37,162558,162559,162561,162563],{"class":39,"line":113},[37,162560,160267],{"class":50},[37,162562,9818],{"class":54},[37,162564,162565],{"class":50}," number\n",[37,162567,162568,162570],{"class":39,"line":189},[37,162569,4440],{"class":54},[37,162571,162572],{"class":50}," total\n",[14,162574,162575],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[469,162577,162579],{"id":162578},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[27,162581,162583],{"className":29,"code":162582,"language":31,"meta":32,"style":32},"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",[34,162584,162585,162595,162599,162603,162611,162622,162632,162642,162652,162662,162666,162670,162679,162701,162705,162709,162718,162724,162744,162756,162767,162771,162780,162791,162796,162800,162804,162813,162819,162838,162850,162860,162864,162875,162885,162889,162897,162908,162912,162916,162920,162928,162933,162947,162951,162963,162968,162980,162985,162997,163002,163014,163024,163028,163034],{"__ignoreMap":32},[37,162586,162587,162590,162592],{"class":39,"line":40},[37,162588,162589],{"class":50},"balance ",[37,162591,55],{"class":54},[37,162593,162594],{"class":61}," 1000\n",[37,162596,162597],{"class":39,"line":47},[37,162598,2757],{"emptyLinePlaceholder":454},[37,162600,162601],{"class":39,"line":104},[37,162602,2757],{"emptyLinePlaceholder":454},[37,162604,162605,162607,162609],{"class":39,"line":113},[37,162606,32285],{"class":54},[37,162608,152318],{"class":2320},[37,162610,32291],{"class":50},[37,162612,162613,162615,162617,162620],{"class":39,"line":189},[37,162614,31638],{"class":61},[37,162616,165],{"class":50},[37,162618,162619],{"class":185},"\"====== ATM ======\"",[37,162621,280],{"class":50},[37,162623,162624,162626,162628,162630],{"class":39,"line":195},[37,162625,31638],{"class":61},[37,162627,165],{"class":50},[37,162629,160933],{"class":185},[37,162631,280],{"class":50},[37,162633,162634,162636,162638,162640],{"class":39,"line":201},[37,162635,31638],{"class":61},[37,162637,165],{"class":50},[37,162639,160944],{"class":185},[37,162641,280],{"class":50},[37,162643,162644,162646,162648,162650],{"class":39,"line":207},[37,162645,31638],{"class":61},[37,162647,165],{"class":50},[37,162649,160955],{"class":185},[37,162651,280],{"class":50},[37,162653,162654,162656,162658,162660],{"class":39,"line":213},[37,162655,31638],{"class":61},[37,162657,165],{"class":50},[37,162659,160966],{"class":185},[37,162661,280],{"class":50},[37,162663,162664],{"class":39,"line":218},[37,162665,2757],{"emptyLinePlaceholder":454},[37,162667,162668],{"class":39,"line":227},[37,162669,2757],{"emptyLinePlaceholder":454},[37,162671,162672,162674,162677],{"class":39,"line":232},[37,162673,32285],{"class":54},[37,162675,162676],{"class":2320}," show_balance",[37,162678,32291],{"class":50},[37,162680,162681,162683,162685,162687,162690,162692,162695,162697,162699],{"class":39,"line":238},[37,162682,31638],{"class":61},[37,162684,165],{"class":50},[37,162686,579],{"class":54},[37,162688,162689],{"class":185},"\"当前余额:",[37,162691,1404],{"class":61},[37,162693,162694],{"class":50},"balance",[37,162696,1454],{"class":61},[37,162698,157297],{"class":185},[37,162700,280],{"class":50},[37,162702,162703],{"class":39,"line":244},[37,162704,2757],{"emptyLinePlaceholder":454},[37,162706,162707],{"class":39,"line":250},[37,162708,2757],{"emptyLinePlaceholder":454},[37,162710,162711,162713,162716],{"class":39,"line":256},[37,162712,32285],{"class":54},[37,162714,162715],{"class":2320}," save_money",[37,162717,32291],{"class":50},[37,162719,162720,162722],{"class":39,"line":261},[37,162721,162146],{"class":54},[37,162723,150384],{"class":50},[37,162725,162726,162729,162731,162733,162735,162737,162739,162742],{"class":39,"line":267},[37,162727,162728],{"class":50},"    money ",[37,162730,55],{"class":54},[37,162732,110082],{"class":61},[37,162734,165],{"class":50},[37,162736,54157],{"class":61},[37,162738,165],{"class":50},[37,162740,162741],{"class":185},"\"请输入存款金额:\"",[37,162743,175],{"class":50},[37,162745,162746,162748,162750,162752,162754],{"class":39,"line":283},[37,162747,3451],{"class":54},[37,162749,150427],{"class":50},[37,162751,1964],{"class":54},[37,162753,4443],{"class":61},[37,162755,4089],{"class":50},[37,162757,162758,162760,162762,162765],{"class":39,"line":288},[37,162759,32789],{"class":61},[37,162761,165],{"class":50},[37,162763,162764],{"class":185},"\"金额必须大于0\"",[37,162766,280],{"class":50},[37,162768,162769],{"class":39,"line":294},[37,162770,152646],{"class":54},[37,162772,162773,162776,162778],{"class":39,"line":300},[37,162774,162775],{"class":50},"    balance ",[37,162777,9818],{"class":54},[37,162779,150460],{"class":50},[37,162781,162782,162784,162786,162789],{"class":39,"line":306},[37,162783,31638],{"class":61},[37,162785,165],{"class":50},[37,162787,162788],{"class":185},"\"存款成功\"",[37,162790,280],{"class":50},[37,162792,162793],{"class":39,"line":312},[37,162794,162795],{"class":50},"    show_balance()\n",[37,162797,162798],{"class":39,"line":317},[37,162799,2757],{"emptyLinePlaceholder":454},[37,162801,162802],{"class":39,"line":323},[37,162803,2757],{"emptyLinePlaceholder":454},[37,162805,162806,162808,162811],{"class":39,"line":337},[37,162807,32285],{"class":54},[37,162809,162810],{"class":2320}," withdraw_money",[37,162812,32291],{"class":50},[37,162814,162815,162817],{"class":39,"line":342},[37,162816,162146],{"class":54},[37,162818,150384],{"class":50},[37,162820,162821,162823,162825,162827,162829,162831,162833,162836],{"class":39,"line":347},[37,162822,162728],{"class":50},[37,162824,55],{"class":54},[37,162826,110082],{"class":61},[37,162828,165],{"class":50},[37,162830,54157],{"class":61},[37,162832,165],{"class":50},[37,162834,162835],{"class":185},"\"请输入取款金额:\"",[37,162837,175],{"class":50},[37,162839,162840,162842,162844,162846,162848],{"class":39,"line":352},[37,162841,3451],{"class":54},[37,162843,150427],{"class":50},[37,162845,1964],{"class":54},[37,162847,4443],{"class":61},[37,162849,4089],{"class":50},[37,162851,162852,162854,162856,162858],{"class":39,"line":357},[37,162853,32789],{"class":61},[37,162855,165],{"class":50},[37,162857,162764],{"class":185},[37,162859,280],{"class":50},[37,162861,162862],{"class":39,"line":362},[37,162863,152646],{"class":54},[37,162865,162866,162868,162870,162872],{"class":39,"line":367},[37,162867,3451],{"class":54},[37,162869,150427],{"class":50},[37,162871,1468],{"class":54},[37,162873,162874],{"class":50}," balance:\n",[37,162876,162877,162879,162881,162883],{"class":39,"line":373},[37,162878,32789],{"class":61},[37,162880,165],{"class":50},[37,162882,150522],{"class":185},[37,162884,280],{"class":50},[37,162886,162887],{"class":39,"line":392},[37,162888,152646],{"class":54},[37,162890,162891,162893,162895],{"class":39,"line":398},[37,162892,162775],{"class":50},[37,162894,150537],{"class":54},[37,162896,150460],{"class":50},[37,162898,162899,162901,162903,162906],{"class":39,"line":409},[37,162900,31638],{"class":61},[37,162902,165],{"class":50},[37,162904,162905],{"class":185},"\"取款成功\"",[37,162907,280],{"class":50},[37,162909,162910],{"class":39,"line":415},[37,162911,162795],{"class":50},[37,162913,162914],{"class":39,"line":420},[37,162915,2757],{"emptyLinePlaceholder":454},[37,162917,162918],{"class":39,"line":425},[37,162919,2757],{"emptyLinePlaceholder":454},[37,162921,162922,162924,162926],{"class":39,"line":431},[37,162923,108948],{"class":54},[37,162925,95577],{"class":61},[37,162927,4089],{"class":50},[37,162929,162930],{"class":39,"line":436},[37,162931,162932],{"class":50},"    show_menu()\n",[37,162934,162935,162937,162939,162941,162943,162945],{"class":39,"line":442},[37,162936,160977],{"class":50},[37,162938,55],{"class":54},[37,162940,60941],{"class":61},[37,162942,165],{"class":50},[37,162944,153358],{"class":185},[37,162946,280],{"class":50},[37,162948,162949],{"class":39,"line":8374},[37,162950,2757],{"emptyLinePlaceholder":454},[37,162952,162953,162955,162957,162959,162961],{"class":39,"line":8386},[37,162954,3451],{"class":54},[37,162956,153371],{"class":50},[37,162958,3299],{"class":54},[37,162960,153376],{"class":185},[37,162962,4089],{"class":50},[37,162964,162965],{"class":39,"line":8398},[37,162966,162967],{"class":50},"        show_balance()\n",[37,162969,162970,162972,162974,162976,162978],{"class":39,"line":10057},[37,162971,39630],{"class":54},[37,162973,153371],{"class":50},[37,162975,3299],{"class":54},[37,162977,153395],{"class":185},[37,162979,4089],{"class":50},[37,162981,162982],{"class":39,"line":10082},[37,162983,162984],{"class":50},"        save_money()\n",[37,162986,162987,162989,162991,162993,162995],{"class":39,"line":10105},[37,162988,39630],{"class":54},[37,162990,153371],{"class":50},[37,162992,3299],{"class":54},[37,162994,153413],{"class":185},[37,162996,4089],{"class":50},[37,162998,162999],{"class":39,"line":10129},[37,163000,163001],{"class":50},"        withdraw_money()\n",[37,163003,163004,163006,163008,163010,163012],{"class":39,"line":10134},[37,163005,39630],{"class":54},[37,163007,153371],{"class":50},[37,163009,3299],{"class":54},[37,163011,153467],{"class":185},[37,163013,4089],{"class":50},[37,163015,163016,163018,163020,163022],{"class":39,"line":10139},[37,163017,32789],{"class":61},[37,163019,165],{"class":50},[37,163021,153478],{"class":185},[37,163023,280],{"class":50},[37,163025,163026],{"class":39,"line":10144},[37,163027,31965],{"class":54},[37,163029,163030,163032],{"class":39,"line":10153},[37,163031,158307],{"class":54},[37,163033,4089],{"class":50},[37,163035,163036,163038,163040,163042],{"class":39,"line":10158},[37,163037,32789],{"class":61},[37,163039,165],{"class":50},[37,163041,153499],{"class":185},[37,163043,280],{"class":50},[14,163045,163046],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[469,163048,163050],{"id":163049},"_514-易错点","5.14 易错点",[481,163052,163053,163056,163059,163064,163069,163072],{},[484,163054,163055],{},"函数定义后必须调用才会执行。",[484,163057,163058],{},"函数名后面有括号才是调用。",[484,163060,163061,163063],{},[34,163062,17387],{}," 后面的代码不会执行。",[484,163065,163066,163067,28727],{},"没有返回值的函数默认返回 ",[34,163068,95971],{},[484,163070,163071],{},"局部变量不能在函数外部访问。",[484,163073,163074,163075,163077],{},"不要滥用 ",[34,163076,162111],{},"，更好的方式是让函数返回新值。",[14,163079,163080,163081,163083],{},"例如不用 ",[34,163082,162111],{}," 改写存款：",[27,163085,163087],{"className":29,"code":163086,"language":31,"meta":32,"style":32},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[34,163088,163089,163098,163109,163113,163117,163125,163138],{"__ignoreMap":32},[37,163090,163091,163093,163095],{"class":39,"line":40},[37,163092,32285],{"class":54},[37,163094,162715],{"class":2320},[37,163096,163097],{"class":50},"(balance, money):\n",[37,163099,163100,163102,163105,163107],{"class":39,"line":47},[37,163101,4440],{"class":54},[37,163103,163104],{"class":50}," balance ",[37,163106,993],{"class":54},[37,163108,150460],{"class":50},[37,163110,163111],{"class":39,"line":104},[37,163112,2757],{"emptyLinePlaceholder":454},[37,163114,163115],{"class":39,"line":113},[37,163116,2757],{"emptyLinePlaceholder":454},[37,163118,163119,163121,163123],{"class":39,"line":189},[37,163120,162589],{"class":50},[37,163122,55],{"class":54},[37,163124,162594],{"class":61},[37,163126,163127,163129,163131,163134,163136],{"class":39,"line":195},[37,163128,162589],{"class":50},[37,163130,55],{"class":54},[37,163132,163133],{"class":50}," save_money(balance, ",[37,163135,2087],{"class":61},[37,163137,280],{"class":50},[37,163139,163140,163142],{"class":39,"line":201},[37,163141,30755],{"class":61},[37,163143,163144],{"class":50},"(balance)\n",[469,163146,163148],{"id":163147},"_515-本章练习","5.15 本章练习",[481,163150,163151,163158,163164,163170,163176],{},[484,163152,163153,163154,163157],{},"定义函数 ",[34,163155,163156],{},"print_student(name, age)","，输出学生信息。",[484,163159,163153,163160,163163],{},[34,163161,163162],{},"get_max(a, b, c)","，返回三个数中的最大值。",[484,163165,163153,163166,163169],{},[34,163167,163168],{},"is_even(num)","，判断一个数是否为偶数。",[484,163171,163153,163172,163175],{},[34,163173,163174],{},"calculate_bmi(weight, height)","，返回 BMI。",[484,163177,163178],{},"把第 4 章的菜单程序拆分成多个函数。",[446,163180,163181],{},"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":32,"searchDepth":47,"depth":47,"links":163183},[163184,163185,163186,163187,163188,163189,163190,163191,163192,163196,163197,163198,163199,163200,163201],{"id":161204,"depth":47,"text":161205},{"id":161245,"depth":47,"text":161246},{"id":161335,"depth":47,"text":161336},{"id":161416,"depth":47,"text":161417},{"id":161549,"depth":47,"text":161550},{"id":161671,"depth":47,"text":161672},{"id":161793,"depth":47,"text":161794},{"id":161870,"depth":47,"text":161871},{"id":161992,"depth":47,"text":161993,"children":163193},[163194,163195],{"id":161996,"depth":104,"text":161997},{"id":162054,"depth":104,"text":162055},{"id":162183,"depth":47,"text":162184},{"id":162309,"depth":47,"text":162310},{"id":162422,"depth":47,"text":162423},{"id":162578,"depth":47,"text":162579},{"id":163049,"depth":47,"text":163050},{"id":163147,"depth":47,"text":163148},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161196,"description":451},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163208,"title":163209,"body":163210,"description":451,"extension":452,"meta":166254,"navigation":454,"path":166255,"seo":166256,"stem":166257,"__hash__":166258},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163211,"toc":166235},[163212,163215,163219,163222,163225,163329,163332,163336,163339,163419,163422,163426,163429,163489,163492,163528,163531,163546,163550,163623,163626,163681,163684,163754,163757,163841,163851,163909,163913,163958,163961,163987,163990,164096,164100,164103,164145,164148,164212,164215,164219,164222,164283,164286,164316,164319,164357,164361,164364,164373,164376,164500,164503,164544,164548,164551,164562,164602,164605,164620,164625,164628,164695,164698,164788,164792,164795,164843,164846,164873,164875,164905,164908,164928,164931,164962,164965,164998,165002,165005,165029,165032,165056,165059,165083,165087,165090,165220,165223,165303,165306,165381,165385,165388,165438,165441,165483,165486,165510,165512,165536,165539,165594,165597,165663,165667,165670,165673,165711,165714,165767,165770,165816,165819,165852,165855,165859,166178,166182,166211,166215,166232],[10,163213,163209],{"id":163214},"_6-数据容器",[469,163216,163218],{"id":163217},"_61-什么是数据容器","6.1 什么是数据容器",[14,163220,163221],{},"数据容器用于一次保存多个数据。",[14,163223,163224],{},"常见容器：",[661,163226,163227,163244],{},[664,163228,163229],{},[667,163230,163231,163233,163236,163239,163242],{},[670,163232,26113],{},[670,163234,163235],{},"是否有序",[670,163237,163238],{},"是否可变",[670,163240,163241],{},"是否允许重复",[670,163243,27834],{},[708,163245,163246,163264,163280,163295,163312],{},[667,163247,163248,163251,163254,163257,163260],{},[713,163249,163250],{},"list列表",[713,163252,163253],{},"有序",[713,163255,163256],{},"可变",[713,163258,163259],{},"允许",[713,163261,163262],{},[34,163263,155542],{},[667,163265,163266,163269,163271,163274,163276],{},[713,163267,163268],{},"tuple元组",[713,163270,163253],{},[713,163272,163273],{},"不可变",[713,163275,163259],{},[713,163277,163278],{},[34,163279,155555],{},[667,163281,163282,163285,163287,163289,163291],{},[713,163283,163284],{},"str字符串",[713,163286,163253],{},[713,163288,163273],{},[713,163290,163259],{},[713,163292,163293],{},[34,163294,156165],{},[667,163296,163297,163300,163303,163305,163308],{},[713,163298,163299],{},"set集合",[713,163301,163302],{},"无序",[713,163304,163256],{},[713,163306,163307],{},"不允许",[713,163309,163310],{},[34,163311,155580],{},[667,163313,163314,163317,163319,163321,163324],{},[713,163315,163316],{},"dict字典",[713,163318,163253],{},[713,163320,163256],{},[713,163322,163323],{},"key不允许重复",[713,163325,163326],{},[34,163327,163328],{},"{\"name\": \"小明\"}",[14,163330,163331],{},"Python 3.7 之后，字典保持插入顺序。",[469,163333,163335],{"id":163334},"_62-列表list","6.2 列表list",[14,163337,163338],{},"列表用于保存一组有顺序的数据。",[27,163340,163342],{"className":29,"code":163341,"language":31,"meta":32,"style":32},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[34,163343,163344,163364,163389,163410],{"__ignoreMap":32},[37,163345,163346,163348,163350,163352,163354,163356,163358,163360,163362],{"class":39,"line":40},[37,163347,160665],{"class":50},[37,163349,55],{"class":54},[37,163351,52562],{"class":50},[37,163353,150173],{"class":185},[37,163355,12776],{"class":50},[37,163357,151221],{"class":185},[37,163359,12776],{"class":50},[37,163361,160016],{"class":185},[37,163363,389],{"class":50},[37,163365,163366,163369,163371,163373,163375,163377,163379,163381,163383,163385,163387],{"class":39,"line":47},[37,163367,163368],{"class":50},"numbers ",[37,163370,55],{"class":54},[37,163372,52562],{"class":50},[37,163374,332],{"class":61},[37,163376,12776],{"class":50},[37,163378,602],{"class":61},[37,163380,12776],{"class":50},[37,163382,62],{"class":61},[37,163384,12776],{"class":50},[37,163386,168],{"class":61},[37,163388,389],{"class":50},[37,163390,163391,163394,163396,163398,163400,163402,163404,163406,163408],{"class":39,"line":104},[37,163392,163393],{"class":50},"mixed ",[37,163395,55],{"class":54},[37,163397,52562],{"class":50},[37,163399,150173],{"class":185},[37,163401,12776],{"class":50},[37,163403,1160],{"class":61},[37,163405,12776],{"class":50},[37,163407,31815],{"class":61},[37,163409,389],{"class":50},[37,163411,163412,163415,163417],{"class":39,"line":113},[37,163413,163414],{"class":50},"empty ",[37,163416,55],{"class":54},[37,163418,52174],{"class":50},[14,163420,163421],{},"推荐一个列表中保存同类数据，代码更清晰。",[469,163423,163425],{"id":163424},"_63-列表索引","6.3 列表索引",[14,163427,163428],{},"正向索引从 0 开始：",[27,163430,163432],{"className":29,"code":163431,"language":31,"meta":32,"style":32},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[34,163433,163434,163454,163458,163469,163479],{"__ignoreMap":32},[37,163435,163436,163438,163440,163442,163444,163446,163448,163450,163452],{"class":39,"line":40},[37,163437,160665],{"class":50},[37,163439,55],{"class":54},[37,163441,52562],{"class":50},[37,163443,150173],{"class":185},[37,163445,12776],{"class":50},[37,163447,151221],{"class":185},[37,163449,12776],{"class":50},[37,163451,160016],{"class":185},[37,163453,389],{"class":50},[37,163455,163456],{"class":39,"line":47},[37,163457,2757],{"emptyLinePlaceholder":454},[37,163459,163460,163462,163465,163467],{"class":39,"line":104},[37,163461,30755],{"class":61},[37,163463,163464],{"class":50},"(names[",[37,163466,135],{"class":61},[37,163468,101],{"class":50},[37,163470,163471,163473,163475,163477],{"class":39,"line":113},[37,163472,30755],{"class":61},[37,163474,163464],{"class":50},[37,163476,332],{"class":61},[37,163478,101],{"class":50},[37,163480,163481,163483,163485,163487],{"class":39,"line":189},[37,163482,30755],{"class":61},[37,163484,163464],{"class":50},[37,163486,602],{"class":61},[37,163488,101],{"class":50},[14,163490,163491],{},"反向索引从 -1 开始：",[27,163493,163495],{"className":29,"code":163494,"language":31,"meta":32,"style":32},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[34,163496,163497,163513],{"__ignoreMap":32},[37,163498,163499,163501,163503,163505,163507,163510],{"class":39,"line":40},[37,163500,30755],{"class":61},[37,163502,163464],{"class":50},[37,163504,384],{"class":54},[37,163506,332],{"class":61},[37,163508,163509],{"class":50},"])  ",[37,163511,163512],{"class":43},"# 小刚\n",[37,163514,163515,163517,163519,163521,163523,163525],{"class":39,"line":47},[37,163516,30755],{"class":61},[37,163518,163464],{"class":50},[37,163520,384],{"class":54},[37,163522,602],{"class":61},[37,163524,163509],{"class":50},[37,163526,163527],{"class":43},"# 小红\n",[14,163529,163530],{},"索引越界会报错：",[27,163532,163534],{"className":29,"code":163533,"language":31,"meta":32,"style":32},"print(names[3])\n",[34,163535,163536],{"__ignoreMap":32},[37,163537,163538,163540,163542,163544],{"class":39,"line":40},[37,163539,30755],{"class":61},[37,163541,163464],{"class":50},[37,163543,62],{"class":61},[37,163545,101],{"class":50},[469,163547,163549],{"id":163548},"_64-列表常用方法","6.4 列表常用方法",[27,163551,163553],{"className":29,"code":163552,"language":31,"meta":32,"style":32},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[34,163554,163555,163571,163575,163584,163598,163612,163616],{"__ignoreMap":32},[37,163556,163557,163559,163561,163563,163565,163567,163569],{"class":39,"line":40},[37,163558,160665],{"class":50},[37,163560,55],{"class":54},[37,163562,52562],{"class":50},[37,163564,150173],{"class":185},[37,163566,12776],{"class":50},[37,163568,151221],{"class":185},[37,163570,389],{"class":50},[37,163572,163573],{"class":39,"line":47},[37,163574,2757],{"emptyLinePlaceholder":454},[37,163576,163577,163580,163582],{"class":39,"line":104},[37,163578,163579],{"class":50},"names.append(",[37,163581,160016],{"class":185},[37,163583,280],{"class":50},[37,163585,163586,163589,163591,163593,163596],{"class":39,"line":113},[37,163587,163588],{"class":50},"names.insert(",[37,163590,332],{"class":61},[37,163592,12776],{"class":50},[37,163594,163595],{"class":185},"\"小李\"",[37,163597,280],{"class":50},[37,163599,163600,163603,163605,163607,163610],{"class":39,"line":189},[37,163601,163602],{"class":50},"names.extend([",[37,163604,9024],{"class":185},[37,163606,12776],{"class":50},[37,163608,163609],{"class":185},"\"小赵\"",[37,163611,101],{"class":50},[37,163613,163614],{"class":39,"line":195},[37,163615,2757],{"emptyLinePlaceholder":454},[37,163617,163618,163620],{"class":39,"line":201},[37,163619,30755],{"class":61},[37,163621,163622],{"class":50},"(names)\n",[14,163624,163625],{},"删除元素：",[27,163627,163629],{"className":29,"code":163628,"language":31,"meta":32,"style":32},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[34,163630,163631,163640,163650,163664,163676],{"__ignoreMap":32},[37,163632,163633,163636,163638],{"class":39,"line":40},[37,163634,163635],{"class":50},"names.remove(",[37,163637,151221],{"class":185},[37,163639,280],{"class":50},[37,163641,163642,163645,163647],{"class":39,"line":47},[37,163643,163644],{"class":50},"last ",[37,163646,55],{"class":54},[37,163648,163649],{"class":50}," names.pop()\n",[37,163651,163652,163655,163657,163660,163662],{"class":39,"line":104},[37,163653,163654],{"class":50},"first ",[37,163656,55],{"class":54},[37,163658,163659],{"class":50}," names.pop(",[37,163661,135],{"class":61},[37,163663,280],{"class":50},[37,163665,163666,163669,163672,163674],{"class":39,"line":113},[37,163667,163668],{"class":54},"del",[37,163670,163671],{"class":50}," names[",[37,163673,135],{"class":61},[37,163675,389],{"class":50},[37,163677,163678],{"class":39,"line":189},[37,163679,163680],{"class":50},"names.clear()\n",[14,163682,163683],{},"查询和统计：",[27,163685,163687],{"className":29,"code":163686,"language":31,"meta":32,"style":32},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[34,163688,163689,163717,163721,163732,163743],{"__ignoreMap":32},[37,163690,163691,163693,163695,163697,163699,163701,163703,163705,163707,163709,163711,163713,163715],{"class":39,"line":40},[37,163692,163368],{"class":50},[37,163694,55],{"class":54},[37,163696,52562],{"class":50},[37,163698,332],{"class":61},[37,163700,12776],{"class":50},[37,163702,602],{"class":61},[37,163704,12776],{"class":50},[37,163706,62],{"class":61},[37,163708,12776],{"class":50},[37,163710,602],{"class":61},[37,163712,12776],{"class":50},[37,163714,168],{"class":61},[37,163716,389],{"class":50},[37,163718,163719],{"class":39,"line":47},[37,163720,2757],{"emptyLinePlaceholder":454},[37,163722,163723,163725,163728,163730],{"class":39,"line":104},[37,163724,30755],{"class":61},[37,163726,163727],{"class":50},"(numbers.index(",[37,163729,62],{"class":61},[37,163731,175],{"class":50},[37,163733,163734,163736,163739,163741],{"class":39,"line":113},[37,163735,30755],{"class":61},[37,163737,163738],{"class":50},"(numbers.count(",[37,163740,602],{"class":61},[37,163742,175],{"class":50},[37,163744,163745,163747,163749,163751],{"class":39,"line":189},[37,163746,30755],{"class":61},[37,163748,165],{"class":50},[37,163750,7706],{"class":61},[37,163752,163753],{"class":50},"(numbers))\n",[14,163755,163756],{},"排序：",[27,163758,163760],{"className":29,"code":163759,"language":31,"meta":32,"style":32},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[34,163761,163762,163786,163790,163795,163802,163806,163820,163826,163830,163835],{"__ignoreMap":32},[37,163763,163764,163766,163768,163770,163772,163774,163776,163778,163780,163782,163784],{"class":39,"line":40},[37,163765,163368],{"class":50},[37,163767,55],{"class":54},[37,163769,52562],{"class":50},[37,163771,62],{"class":61},[37,163773,12776],{"class":50},[37,163775,332],{"class":61},[37,163777,12776],{"class":50},[37,163779,836],{"class":61},[37,163781,12776],{"class":50},[37,163783,602],{"class":61},[37,163785,389],{"class":50},[37,163787,163788],{"class":39,"line":47},[37,163789,2757],{"emptyLinePlaceholder":454},[37,163791,163792],{"class":39,"line":104},[37,163793,163794],{"class":50},"numbers.sort()\n",[37,163796,163797,163799],{"class":39,"line":113},[37,163798,30755],{"class":61},[37,163800,163801],{"class":50},"(numbers)\n",[37,163803,163804],{"class":39,"line":189},[37,163805,2757],{"emptyLinePlaceholder":454},[37,163807,163808,163811,163814,163816,163818],{"class":39,"line":195},[37,163809,163810],{"class":50},"numbers.sort(",[37,163812,163813],{"class":159},"reverse",[37,163815,55],{"class":54},[37,163817,31815],{"class":61},[37,163819,280],{"class":50},[37,163821,163822,163824],{"class":39,"line":201},[37,163823,30755],{"class":61},[37,163825,163801],{"class":50},[37,163827,163828],{"class":39,"line":207},[37,163829,2757],{"emptyLinePlaceholder":454},[37,163831,163832],{"class":39,"line":213},[37,163833,163834],{"class":50},"numbers.reverse()\n",[37,163836,163837,163839],{"class":39,"line":218},[37,163838,30755],{"class":61},[37,163840,163801],{"class":50},[14,163842,163843,163846,163847,163850],{},[34,163844,163845],{},"sort()"," 会修改原列表，",[34,163848,163849],{},"sorted()"," 返回新列表。",[27,163852,163854],{"className":29,"code":163853,"language":31,"meta":32,"style":32},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[34,163855,163856,163880,163892,163896,163902],{"__ignoreMap":32},[37,163857,163858,163860,163862,163864,163866,163868,163870,163872,163874,163876,163878],{"class":39,"line":40},[37,163859,163368],{"class":50},[37,163861,55],{"class":54},[37,163863,52562],{"class":50},[37,163865,62],{"class":61},[37,163867,12776],{"class":50},[37,163869,332],{"class":61},[37,163871,12776],{"class":50},[37,163873,836],{"class":61},[37,163875,12776],{"class":50},[37,163877,602],{"class":61},[37,163879,389],{"class":50},[37,163881,163882,163885,163887,163890],{"class":39,"line":47},[37,163883,163884],{"class":50},"new_numbers ",[37,163886,55],{"class":54},[37,163888,163889],{"class":61}," sorted",[37,163891,163801],{"class":50},[37,163893,163894],{"class":39,"line":104},[37,163895,2757],{"emptyLinePlaceholder":454},[37,163897,163898,163900],{"class":39,"line":113},[37,163899,30755],{"class":61},[37,163901,163801],{"class":50},[37,163903,163904,163906],{"class":39,"line":189},[37,163905,30755],{"class":61},[37,163907,163908],{"class":50},"(new_numbers)\n",[469,163910,163912],{"id":163911},"_65-列表遍历","6.5 列表遍历",[27,163914,163916],{"className":29,"code":163915,"language":31,"meta":32,"style":32},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[34,163917,163918,163938,163942,163952],{"__ignoreMap":32},[37,163919,163920,163922,163924,163926,163928,163930,163932,163934,163936],{"class":39,"line":40},[37,163921,160665],{"class":50},[37,163923,55],{"class":54},[37,163925,52562],{"class":50},[37,163927,150173],{"class":185},[37,163929,12776],{"class":50},[37,163931,151221],{"class":185},[37,163933,12776],{"class":50},[37,163935,160016],{"class":185},[37,163937,389],{"class":50},[37,163939,163940],{"class":39,"line":47},[37,163941,2757],{"emptyLinePlaceholder":454},[37,163943,163944,163946,163948,163950],{"class":39,"line":104},[37,163945,3375],{"class":54},[37,163947,160701],{"class":50},[37,163949,26385],{"class":54},[37,163951,160706],{"class":50},[37,163953,163954,163956],{"class":39,"line":113},[37,163955,31638],{"class":61},[37,163957,150945],{"class":50},[14,163959,163960],{},"需要索引时：",[27,163962,163964],{"className":29,"code":163963,"language":31,"meta":32,"style":32},"for index, name in enumerate(names):\n    print(index, name)\n",[34,163965,163966,163980],{"__ignoreMap":32},[37,163967,163968,163970,163973,163975,163977],{"class":39,"line":40},[37,163969,3375],{"class":54},[37,163971,163972],{"class":50}," index, name ",[37,163974,26385],{"class":54},[37,163976,31944],{"class":61},[37,163978,163979],{"class":50},"(names):\n",[37,163981,163982,163984],{"class":39,"line":47},[37,163983,31638],{"class":61},[37,163985,163986],{"class":50},"(index, name)\n",[14,163988,163989],{},"统计总分：",[27,163991,163993],{"className":29,"code":163992,"language":31,"meta":32,"style":32},"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",[34,163994,163995,164020,164028,164032,164043,164051,164055,164072],{"__ignoreMap":32},[37,163996,163997,164000,164002,164004,164006,164008,164010,164012,164014,164016,164018],{"class":39,"line":40},[37,163998,163999],{"class":50},"scores ",[37,164001,55],{"class":54},[37,164003,52562],{"class":50},[37,164005,1371],{"class":61},[37,164007,12776],{"class":50},[37,164009,1246],{"class":61},[37,164011,12776],{"class":50},[37,164013,775],{"class":61},[37,164015,12776],{"class":50},[37,164017,1071],{"class":61},[37,164019,389],{"class":50},[37,164021,164022,164024,164026],{"class":39,"line":47},[37,164023,157545],{"class":50},[37,164025,55],{"class":54},[37,164027,47670],{"class":61},[37,164029,164030],{"class":39,"line":104},[37,164031,2757],{"emptyLinePlaceholder":454},[37,164033,164034,164036,164038,164040],{"class":39,"line":113},[37,164035,3375],{"class":54},[37,164037,158068],{"class":50},[37,164039,26385],{"class":54},[37,164041,164042],{"class":50}," scores:\n",[37,164044,164045,164047,164049],{"class":39,"line":189},[37,164046,159592],{"class":50},[37,164048,9818],{"class":54},[37,164050,1955],{"class":50},[37,164052,164053],{"class":39,"line":195},[37,164054,2757],{"emptyLinePlaceholder":454},[37,164056,164057,164060,164062,164065,164067,164069],{"class":39,"line":201},[37,164058,164059],{"class":50},"avg ",[37,164061,55],{"class":54},[37,164063,164064],{"class":50}," total ",[37,164066,1094],{"class":54},[37,164068,7679],{"class":61},[37,164070,164071],{"class":50},"(scores)\n",[37,164073,164074,164076,164078,164080,164083,164085,164088,164090,164092,164094],{"class":39,"line":207},[37,164075,30755],{"class":61},[37,164077,165],{"class":50},[37,164079,579],{"class":54},[37,164081,164082],{"class":185},"\"平均分:",[37,164084,1404],{"class":61},[37,164086,164087],{"class":50},"avg",[37,164089,157444],{"class":54},[37,164091,1454],{"class":61},[37,164093,772],{"class":185},[37,164095,280],{"class":50},[469,164097,164099],{"id":164098},"_66-元组tuple","6.6 元组tuple",[14,164101,164102],{},"元组和列表类似，但不可修改。",[27,164104,164106],{"className":29,"code":164105,"language":31,"meta":32,"style":32},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[34,164107,164108,164125],{"__ignoreMap":32},[37,164109,164110,164113,164115,164117,164119,164121,164123],{"class":39,"line":40},[37,164111,164112],{"class":50},"point ",[37,164114,55],{"class":54},[37,164116,2027],{"class":50},[37,164118,98],{"class":61},[37,164120,12776],{"class":50},[37,164122,1210],{"class":61},[37,164124,280],{"class":50},[37,164126,164127,164129,164131,164133,164135,164137,164139,164141,164143],{"class":39,"line":47},[37,164128,116599],{"class":50},[37,164130,55],{"class":54},[37,164132,2027],{"class":50},[37,164134,150173],{"class":185},[37,164136,12776],{"class":50},[37,164138,1160],{"class":61},[37,164140,12776],{"class":50},[37,164142,69605],{"class":185},[37,164144,280],{"class":50},[14,164146,164147],{},"单元素元组必须加逗号：",[27,164149,164151],{"className":29,"code":164150,"language":31,"meta":32,"style":32},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[34,164152,164153,164167,164180,164184,164198],{"__ignoreMap":32},[37,164154,164155,164158,164160,164162,164164],{"class":39,"line":40},[37,164156,164157],{"class":50},"t1 ",[37,164159,55],{"class":54},[37,164161,2027],{"class":50},[37,164163,98],{"class":61},[37,164165,164166],{"class":50},",)\n",[37,164168,164169,164172,164174,164176,164178],{"class":39,"line":47},[37,164170,164171],{"class":50},"t2 ",[37,164173,55],{"class":54},[37,164175,2027],{"class":50},[37,164177,98],{"class":61},[37,164179,280],{"class":50},[37,164181,164182],{"class":39,"line":104},[37,164183,2757],{"emptyLinePlaceholder":454},[37,164185,164186,164188,164190,164192,164195],{"class":39,"line":113},[37,164187,30755],{"class":61},[37,164189,165],{"class":50},[37,164191,103392],{"class":61},[37,164193,164194],{"class":50},"(t1))  ",[37,164196,164197],{"class":43},"# tuple\n",[37,164199,164200,164202,164204,164206,164209],{"class":39,"line":189},[37,164201,30755],{"class":61},[37,164203,165],{"class":50},[37,164205,103392],{"class":61},[37,164207,164208],{"class":50},"(t2))  ",[37,164210,164211],{"class":43},"# int\n",[14,164213,164214],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[469,164216,164218],{"id":164217},"_67-字符串str","6.7 字符串str",[14,164220,164221],{},"字符串也是序列，可以索引、切片和遍历。",[27,164223,164225],{"className":29,"code":164224,"language":31,"meta":32,"style":32},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[34,164226,164227,164235,164239,164250,164262,164266,164277],{"__ignoreMap":32},[37,164228,164229,164231,164233],{"class":39,"line":40},[37,164230,156729],{"class":50},[37,164232,55],{"class":54},[37,164234,159966],{"class":185},[37,164236,164237],{"class":39,"line":47},[37,164238,2757],{"emptyLinePlaceholder":454},[37,164240,164241,164243,164246,164248],{"class":39,"line":104},[37,164242,30755],{"class":61},[37,164244,164245],{"class":50},"(text[",[37,164247,135],{"class":61},[37,164249,101],{"class":50},[37,164251,164252,164254,164256,164258,164260],{"class":39,"line":113},[37,164253,30755],{"class":61},[37,164255,164245],{"class":50},[37,164257,384],{"class":54},[37,164259,332],{"class":61},[37,164261,101],{"class":50},[37,164263,164264],{"class":39,"line":189},[37,164265,2757],{"emptyLinePlaceholder":454},[37,164267,164268,164270,164272,164274],{"class":39,"line":195},[37,164269,3375],{"class":54},[37,164271,159977],{"class":50},[37,164273,26385],{"class":54},[37,164275,164276],{"class":50}," text:\n",[37,164278,164279,164281],{"class":39,"line":201},[37,164280,31638],{"class":61},[37,164282,159988],{"class":50},[14,164284,164285],{},"字符串不可变：",[27,164287,164289],{"className":29,"code":164288,"language":31,"meta":32,"style":32},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[34,164290,164291,164299],{"__ignoreMap":32},[37,164292,164293,164295,164297],{"class":39,"line":40},[37,164294,156729],{"class":50},[37,164296,55],{"class":54},[37,164298,159966],{"class":185},[37,164300,164301,164304,164306,164308,164310,164313],{"class":39,"line":47},[37,164302,164303],{"class":50},"text[",[37,164305,135],{"class":61},[37,164307,4793],{"class":50},[37,164309,55],{"class":54},[37,164311,164312],{"class":185}," \"P\"",[37,164314,164315],{"class":43},"  # 报错\n",[14,164317,164318],{},"如果要得到新字符串：",[27,164320,164322],{"className":29,"code":164321,"language":31,"meta":32,"style":32},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[34,164323,164324,164332,164350],{"__ignoreMap":32},[37,164325,164326,164328,164330],{"class":39,"line":40},[37,164327,156729],{"class":50},[37,164329,55],{"class":54},[37,164331,159966],{"class":185},[37,164333,164334,164336,164338,164340,164342,164345,164347],{"class":39,"line":47},[37,164335,156729],{"class":50},[37,164337,55],{"class":54},[37,164339,164312],{"class":185},[37,164341,45903],{"class":54},[37,164343,164344],{"class":50}," text[",[37,164346,332],{"class":61},[37,164348,164349],{"class":50},":]\n",[37,164351,164352,164354],{"class":39,"line":104},[37,164353,30755],{"class":61},[37,164355,164356],{"class":50},"(text)\n",[469,164358,164360],{"id":164359},"_68-切片","6.8 切片",[14,164362,164363],{},"切片用于从序列中取一部分。",[27,164365,164367],{"className":29,"code":164366,"language":31,"meta":32,"style":32},"序列[开始:结束:步长]\n",[34,164368,164369],{"__ignoreMap":32},[37,164370,164371],{"class":39,"line":40},[37,164372,164366],{"class":50},[14,164374,164375],{},"结束位置不包含。",[27,164377,164379],{"className":29,"code":164378,"language":31,"meta":32,"style":32},"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",[34,164380,164381,164418,164422,164441,164456,164470,164484],{"__ignoreMap":32},[37,164382,164383,164386,164388,164390,164392,164394,164396,164398,164400,164402,164404,164406,164408,164410,164412,164414,164416],{"class":39,"line":40},[37,164384,164385],{"class":50},"nums ",[37,164387,55],{"class":54},[37,164389,52562],{"class":50},[37,164391,135],{"class":61},[37,164393,12776],{"class":50},[37,164395,332],{"class":61},[37,164397,12776],{"class":50},[37,164399,602],{"class":61},[37,164401,12776],{"class":50},[37,164403,62],{"class":61},[37,164405,12776],{"class":50},[37,164407,168],{"class":61},[37,164409,12776],{"class":50},[37,164411,836],{"class":61},[37,164413,12776],{"class":50},[37,164415,93],{"class":61},[37,164417,389],{"class":50},[37,164419,164420],{"class":39,"line":47},[37,164421,2757],{"emptyLinePlaceholder":454},[37,164423,164424,164426,164429,164431,164433,164435,164438],{"class":39,"line":104},[37,164425,30755],{"class":61},[37,164427,164428],{"class":50},"(nums[",[37,164430,332],{"class":61},[37,164432,1368],{"class":50},[37,164434,168],{"class":61},[37,164436,164437],{"class":50},"])    ",[37,164439,164440],{"class":43},"# [1, 2, 3]\n",[37,164442,164443,164445,164448,164450,164453],{"class":39,"line":113},[37,164444,30755],{"class":61},[37,164446,164447],{"class":50},"(nums[:",[37,164449,62],{"class":61},[37,164451,164452],{"class":50},"])     ",[37,164454,164455],{"class":43},"# [0, 1, 2]\n",[37,164457,164458,164460,164462,164464,164467],{"class":39,"line":189},[37,164459,30755],{"class":61},[37,164461,164428],{"class":50},[37,164463,62],{"class":61},[37,164465,164466],{"class":50},":])     ",[37,164468,164469],{"class":43},"# [3, 4, 5, 6]\n",[37,164471,164472,164474,164477,164479,164481],{"class":39,"line":195},[37,164473,30755],{"class":61},[37,164475,164476],{"class":50},"(nums[::",[37,164478,602],{"class":61},[37,164480,164437],{"class":50},[37,164482,164483],{"class":43},"# [0, 2, 4, 6]\n",[37,164485,164486,164488,164490,164492,164494,164497],{"class":39,"line":201},[37,164487,30755],{"class":61},[37,164489,164476],{"class":50},[37,164491,384],{"class":54},[37,164493,332],{"class":61},[37,164495,164496],{"class":50},"])   ",[37,164498,164499],{"class":43},"# 反转\n",[14,164501,164502],{},"字符串切片：",[27,164504,164506],{"className":29,"code":164505,"language":31,"meta":32,"style":32},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[34,164507,164508,164517,164531],{"__ignoreMap":32},[37,164509,164510,164512,164514],{"class":39,"line":40},[37,164511,156729],{"class":50},[37,164513,55],{"class":54},[37,164515,164516],{"class":185}," \"abcdef\"\n",[37,164518,164519,164521,164523,164525,164527,164529],{"class":39,"line":47},[37,164520,30755],{"class":61},[37,164522,164245],{"class":50},[37,164524,332],{"class":61},[37,164526,1368],{"class":50},[37,164528,168],{"class":61},[37,164530,101],{"class":50},[37,164532,164533,164535,164538,164540,164542],{"class":39,"line":104},[37,164534,30755],{"class":61},[37,164536,164537],{"class":50},"(text[::",[37,164539,384],{"class":54},[37,164541,332],{"class":61},[37,164543,101],{"class":50},[469,164545,164547],{"id":164546},"_69-集合set","6.9 集合set",[14,164549,164550],{},"集合特点：",[481,164552,164553,164556,164559],{},[484,164554,164555],{},"无序。",[484,164557,164558],{},"元素不重复。",[484,164560,164561],{},"可以做交集、并集、差集。",[27,164563,164565],{"className":29,"code":164564,"language":31,"meta":32,"style":32},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[34,164566,164567,164595],{"__ignoreMap":32},[37,164568,164569,164571,164573,164575,164577,164579,164581,164583,164585,164587,164589,164591,164593],{"class":39,"line":40},[37,164570,164385],{"class":50},[37,164572,55],{"class":54},[37,164574,4798],{"class":50},[37,164576,332],{"class":61},[37,164578,12776],{"class":50},[37,164580,602],{"class":61},[37,164582,12776],{"class":50},[37,164584,62],{"class":61},[37,164586,12776],{"class":50},[37,164588,62],{"class":61},[37,164590,12776],{"class":50},[37,164592,168],{"class":61},[37,164594,1941],{"class":50},[37,164596,164597,164599],{"class":39,"line":47},[37,164598,30755],{"class":61},[37,164600,164601],{"class":50},"(nums)\n",[14,164603,164604],{},"创建空集合：",[27,164606,164608],{"className":29,"code":164607,"language":31,"meta":32,"style":32},"s = set()\n",[34,164609,164610],{"__ignoreMap":32},[37,164611,164612,164614,164616,164618],{"class":39,"line":40},[37,164613,10920],{"class":50},[37,164615,55],{"class":54},[37,164617,120007],{"class":61},[37,164619,2333],{"class":50},[14,164621,9366,164622,164624],{},[34,164623,32797],{}," 是空字典，不是空集合。",[14,164626,164627],{},"集合常用操作：",[27,164629,164631],{"className":29,"code":164630,"language":31,"meta":32,"style":32},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[34,164632,164633,164653,164657,164666,164675,164684],{"__ignoreMap":32},[37,164634,164635,164637,164639,164641,164643,164645,164647,164649,164651],{"class":39,"line":40},[37,164636,10920],{"class":50},[37,164638,55],{"class":54},[37,164640,4798],{"class":50},[37,164642,332],{"class":61},[37,164644,12776],{"class":50},[37,164646,602],{"class":61},[37,164648,12776],{"class":50},[37,164650,62],{"class":61},[37,164652,1941],{"class":50},[37,164654,164655],{"class":39,"line":47},[37,164656,2757],{"emptyLinePlaceholder":454},[37,164658,164659,164662,164664],{"class":39,"line":104},[37,164660,164661],{"class":50},"s.add(",[37,164663,168],{"class":61},[37,164665,280],{"class":50},[37,164667,164668,164671,164673],{"class":39,"line":113},[37,164669,164670],{"class":50},"s.remove(",[37,164672,602],{"class":61},[37,164674,280],{"class":50},[37,164676,164677,164680,164682],{"class":39,"line":189},[37,164678,164679],{"class":50},"s.discard(",[37,164681,98],{"class":61},[37,164683,280],{"class":50},[37,164685,164686,164688,164690,164692],{"class":39,"line":195},[37,164687,30755],{"class":61},[37,164689,165],{"class":50},[37,164691,7706],{"class":61},[37,164693,164694],{"class":50},"(s))\n",[14,164696,164697],{},"交并差：",[27,164699,164701],{"className":29,"code":164700,"language":31,"meta":32,"style":32},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[34,164702,164703,164723,164743,164747,164762,164775],{"__ignoreMap":32},[37,164704,164705,164707,164709,164711,164713,164715,164717,164719,164721],{"class":39,"line":40},[37,164706,11260],{"class":50},[37,164708,55],{"class":54},[37,164710,4798],{"class":50},[37,164712,332],{"class":61},[37,164714,12776],{"class":50},[37,164716,602],{"class":61},[37,164718,12776],{"class":50},[37,164720,62],{"class":61},[37,164722,1941],{"class":50},[37,164724,164725,164727,164729,164731,164733,164735,164737,164739,164741],{"class":39,"line":47},[37,164726,11286],{"class":50},[37,164728,55],{"class":54},[37,164730,4798],{"class":50},[37,164732,62],{"class":61},[37,164734,12776],{"class":50},[37,164736,168],{"class":61},[37,164738,12776],{"class":50},[37,164740,836],{"class":61},[37,164742,1941],{"class":50},[37,164744,164745],{"class":39,"line":104},[37,164746,2757],{"emptyLinePlaceholder":454},[37,164748,164749,164751,164754,164756,164759],{"class":39,"line":113},[37,164750,30755],{"class":61},[37,164752,164753],{"class":50},"(a ",[37,164755,869],{"class":54},[37,164757,164758],{"class":50}," b)  ",[37,164760,164761],{"class":43},"# 交集\n",[37,164763,164764,164766,164768,164770,164772],{"class":39,"line":189},[37,164765,30755],{"class":61},[37,164767,164753],{"class":50},[37,164769,1429],{"class":54},[37,164771,164758],{"class":50},[37,164773,164774],{"class":43},"# 并集\n",[37,164776,164777,164779,164781,164783,164785],{"class":39,"line":195},[37,164778,30755],{"class":61},[37,164780,164753],{"class":50},[37,164782,384],{"class":54},[37,164784,164758],{"class":50},[37,164786,164787],{"class":43},"# 差集\n",[469,164789,164791],{"id":164790},"_610-字典dict","6.10 字典dict",[14,164793,164794],{},"字典通过 key-value 保存数据。",[27,164796,164798],{"className":29,"code":164797,"language":31,"meta":32,"style":32},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[34,164799,164800,164808,164818,164829,164839],{"__ignoreMap":32},[37,164801,164802,164804,164806],{"class":39,"line":40},[37,164803,149766],{"class":50},[37,164805,55],{"class":54},[37,164807,15913],{"class":50},[37,164809,164810,164812,164814,164816],{"class":39,"line":47},[37,164811,147305],{"class":185},[37,164813,51773],{"class":50},[37,164815,150173],{"class":185},[37,164817,31805],{"class":50},[37,164819,164820,164823,164825,164827],{"class":39,"line":104},[37,164821,164822],{"class":185},"    \"age\"",[37,164824,51773],{"class":50},[37,164826,1160],{"class":61},[37,164828,31805],{"class":50},[37,164830,164831,164834,164836],{"class":39,"line":113},[37,164832,164833],{"class":185},"    \"score\"",[37,164835,51773],{"class":50},[37,164837,164838],{"class":61},"95\n",[37,164840,164841],{"class":39,"line":189},[37,164842,1941],{"class":50},[14,164844,164845],{},"获取值：",[27,164847,164849],{"className":29,"code":164848,"language":31,"meta":32,"style":32},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[34,164850,164851,164862],{"__ignoreMap":32},[37,164852,164853,164855,164858,164860],{"class":39,"line":40},[37,164854,30755],{"class":61},[37,164856,164857],{"class":50},"(student[",[37,164859,63015],{"class":185},[37,164861,101],{"class":50},[37,164863,164864,164866,164869,164871],{"class":39,"line":47},[37,164865,30755],{"class":61},[37,164867,164868],{"class":50},"(student.get(",[37,164870,63015],{"class":185},[37,164872,175],{"class":50},[14,164874,15729],{},[27,164876,164878],{"className":29,"code":164877,"language":31,"meta":32,"style":32},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[34,164879,164880,164893],{"__ignoreMap":32},[37,164881,164882,164884,164887,164890],{"class":39,"line":40},[37,164883,153144],{"class":50},[37,164885,164886],{"class":185},"\"address\"",[37,164888,164889],{"class":50},"]     ",[37,164891,164892],{"class":43},"# key不存在会报错\n",[37,164894,164895,164898,164900,164902],{"class":39,"line":47},[37,164896,164897],{"class":50},"student.get(",[37,164899,164886],{"class":185},[37,164901,14055],{"class":50},[37,164903,164904],{"class":43},"# key不存在返回None\n",[14,164906,164907],{},"设置默认值：",[27,164909,164911],{"className":29,"code":164910,"language":31,"meta":32,"style":32},"print(student.get(\"address\", \"未知\"))\n",[34,164912,164913],{"__ignoreMap":32},[37,164914,164915,164917,164919,164921,164923,164926],{"class":39,"line":40},[37,164916,30755],{"class":61},[37,164918,164868],{"class":50},[37,164920,164886],{"class":185},[37,164922,12776],{"class":50},[37,164924,164925],{"class":185},"\"未知\"",[37,164927,175],{"class":50},[14,164929,164930],{},"新增和修改：",[27,164932,164934],{"className":29,"code":164933,"language":31,"meta":32,"style":32},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[34,164935,164936,164949],{"__ignoreMap":32},[37,164937,164938,164940,164942,164944,164946],{"class":39,"line":40},[37,164939,153144],{"class":50},[37,164941,69460],{"class":185},[37,164943,4793],{"class":50},[37,164945,55],{"class":54},[37,164947,164948],{"class":61}," 19\n",[37,164950,164951,164953,164955,164957,164959],{"class":39,"line":47},[37,164952,153144],{"class":50},[37,164954,164886],{"class":185},[37,164956,4793],{"class":50},[37,164958,55],{"class":54},[37,164960,164961],{"class":185}," \"北京\"\n",[14,164963,164964],{},"删除：",[27,164966,164968],{"className":29,"code":164967,"language":31,"meta":32,"style":32},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[34,164969,164970,164983,164993],{"__ignoreMap":32},[37,164971,164972,164974,164976,164979,164981],{"class":39,"line":40},[37,164973,155643],{"class":50},[37,164975,55],{"class":54},[37,164977,164978],{"class":50}," student.pop(",[37,164980,151757],{"class":185},[37,164982,280],{"class":50},[37,164984,164985,164987,164989,164991],{"class":39,"line":47},[37,164986,163668],{"class":54},[37,164988,152434],{"class":50},[37,164990,69460],{"class":185},[37,164992,389],{"class":50},[37,164994,164995],{"class":39,"line":104},[37,164996,164997],{"class":50},"student.clear()\n",[469,164999,165001],{"id":165000},"_611-字典遍历","6.11 字典遍历",[14,165003,165004],{},"遍历 key：",[27,165006,165008],{"className":29,"code":165007,"language":31,"meta":32,"style":32},"for key in student:\n    print(key, student[key])\n",[34,165009,165010,165022],{"__ignoreMap":32},[37,165011,165012,165014,165017,165019],{"class":39,"line":40},[37,165013,3375],{"class":54},[37,165015,165016],{"class":50}," key ",[37,165018,26385],{"class":54},[37,165020,165021],{"class":50}," student:\n",[37,165023,165024,165026],{"class":39,"line":47},[37,165025,31638],{"class":61},[37,165027,165028],{"class":50},"(key, student[key])\n",[14,165030,165031],{},"遍历 value：",[27,165033,165035],{"className":29,"code":165034,"language":31,"meta":32,"style":32},"for value in student.values():\n    print(value)\n",[34,165036,165037,165049],{"__ignoreMap":32},[37,165038,165039,165041,165044,165046],{"class":39,"line":40},[37,165040,3375],{"class":54},[37,165042,165043],{"class":50}," value ",[37,165045,26385],{"class":54},[37,165047,165048],{"class":50}," student.values():\n",[37,165050,165051,165053],{"class":39,"line":47},[37,165052,31638],{"class":61},[37,165054,165055],{"class":50},"(value)\n",[14,165057,165058],{},"遍历 key 和 value：",[27,165060,165062],{"className":29,"code":165061,"language":31,"meta":32,"style":32},"for key, value in student.items():\n    print(key, value)\n",[34,165063,165064,165076],{"__ignoreMap":32},[37,165065,165066,165068,165071,165073],{"class":39,"line":40},[37,165067,3375],{"class":54},[37,165069,165070],{"class":50}," key, value ",[37,165072,26385],{"class":54},[37,165074,165075],{"class":50}," student.items():\n",[37,165077,165078,165080],{"class":39,"line":47},[37,165079,31638],{"class":61},[37,165081,165082],{"class":50},"(key, value)\n",[469,165084,165086],{"id":165085},"_612-嵌套容器","6.12 嵌套容器",[14,165088,165089],{},"列表中保存字典，是项目中最常见的结构之一。",[27,165091,165093],{"className":29,"code":165092,"language":31,"meta":32,"style":32},"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",[34,165094,165095,165103,165131,165159,165187,165191,165195,165205],{"__ignoreMap":32},[37,165096,165097,165099,165101],{"class":39,"line":40},[37,165098,160001],{"class":50},[37,165100,55],{"class":54},[37,165102,55783],{"class":50},[37,165104,165105,165107,165109,165111,165113,165115,165117,165119,165121,165123,165125,165127,165129],{"class":39,"line":47},[37,165106,148670],{"class":50},[37,165108,63015],{"class":185},[37,165110,51773],{"class":50},[37,165112,150173],{"class":185},[37,165114,12776],{"class":50},[37,165116,69460],{"class":185},[37,165118,51773],{"class":50},[37,165120,1160],{"class":61},[37,165122,12776],{"class":50},[37,165124,151757],{"class":185},[37,165126,51773],{"class":50},[37,165128,1497],{"class":61},[37,165130,5279],{"class":50},[37,165132,165133,165135,165137,165139,165141,165143,165145,165147,165149,165151,165153,165155,165157],{"class":39,"line":104},[37,165134,148670],{"class":50},[37,165136,63015],{"class":185},[37,165138,51773],{"class":50},[37,165140,151221],{"class":185},[37,165142,12776],{"class":50},[37,165144,69460],{"class":185},[37,165146,51773],{"class":50},[37,165148,1135],{"class":61},[37,165150,12776],{"class":50},[37,165152,151757],{"class":185},[37,165154,51773],{"class":50},[37,165156,1320],{"class":61},[37,165158,5279],{"class":50},[37,165160,165161,165163,165165,165167,165169,165171,165173,165175,165177,165179,165181,165183,165185],{"class":39,"line":113},[37,165162,148670],{"class":50},[37,165164,63015],{"class":185},[37,165166,51773],{"class":50},[37,165168,160016],{"class":185},[37,165170,12776],{"class":50},[37,165172,69460],{"class":185},[37,165174,51773],{"class":50},[37,165176,1185],{"class":61},[37,165178,12776],{"class":50},[37,165180,151757],{"class":185},[37,165182,51773],{"class":50},[37,165184,920],{"class":61},[37,165186,5279],{"class":50},[37,165188,165189],{"class":39,"line":189},[37,165190,389],{"class":50},[37,165192,165193],{"class":39,"line":195},[37,165194,2757],{"emptyLinePlaceholder":454},[37,165196,165197,165199,165201,165203],{"class":39,"line":201},[37,165198,3375],{"class":54},[37,165200,152422],{"class":50},[37,165202,26385],{"class":54},[37,165204,152427],{"class":50},[37,165206,165207,165209,165211,165213,165216,165218],{"class":39,"line":207},[37,165208,31638],{"class":61},[37,165210,164857],{"class":50},[37,165212,63015],{"class":185},[37,165214,165215],{"class":50},"], student[",[37,165217,151757],{"class":185},[37,165219,101],{"class":50},[14,165221,165222],{},"统计平均分：",[27,165224,165226],{"className":29,"code":165225,"language":31,"meta":32,"style":32},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[34,165227,165228,165236,165240,165250,165262,165266,165281],{"__ignoreMap":32},[37,165229,165230,165232,165234],{"class":39,"line":40},[37,165231,157545],{"class":50},[37,165233,55],{"class":54},[37,165235,47670],{"class":61},[37,165237,165238],{"class":39,"line":47},[37,165239,2757],{"emptyLinePlaceholder":454},[37,165241,165242,165244,165246,165248],{"class":39,"line":104},[37,165243,3375],{"class":54},[37,165245,152422],{"class":50},[37,165247,26385],{"class":54},[37,165249,152427],{"class":50},[37,165251,165252,165254,165256,165258,165260],{"class":39,"line":113},[37,165253,159592],{"class":50},[37,165255,9818],{"class":54},[37,165257,152434],{"class":50},[37,165259,151757],{"class":185},[37,165261,389],{"class":50},[37,165263,165264],{"class":39,"line":189},[37,165265,2757],{"emptyLinePlaceholder":454},[37,165267,165268,165270,165272,165274,165276,165278],{"class":39,"line":195},[37,165269,164059],{"class":50},[37,165271,55],{"class":54},[37,165273,164064],{"class":50},[37,165275,1094],{"class":54},[37,165277,7679],{"class":61},[37,165279,165280],{"class":50},"(students)\n",[37,165282,165283,165285,165287,165289,165291,165293,165295,165297,165299,165301],{"class":39,"line":201},[37,165284,30755],{"class":61},[37,165286,165],{"class":50},[37,165288,579],{"class":54},[37,165290,164082],{"class":185},[37,165292,1404],{"class":61},[37,165294,164087],{"class":50},[37,165296,157444],{"class":54},[37,165298,1454],{"class":61},[37,165300,772],{"class":185},[37,165302,280],{"class":50},[14,165304,165305],{},"查找学生：",[27,165307,165309],{"className":29,"code":165308,"language":31,"meta":32,"style":32},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[34,165310,165311,165326,165330,165340,165354,165360,165364,165370],{"__ignoreMap":32},[37,165312,165313,165315,165317,165319,165321,165324],{"class":39,"line":40},[37,165314,111863],{"class":50},[37,165316,55],{"class":54},[37,165318,60941],{"class":61},[37,165320,165],{"class":50},[37,165322,165323],{"class":185},"\"请输入学生姓名:\"",[37,165325,280],{"class":50},[37,165327,165328],{"class":39,"line":47},[37,165329,2757],{"emptyLinePlaceholder":454},[37,165331,165332,165334,165336,165338],{"class":39,"line":104},[37,165333,3375],{"class":54},[37,165335,152422],{"class":50},[37,165337,26385],{"class":54},[37,165339,152427],{"class":50},[37,165341,165342,165344,165346,165348,165350,165352],{"class":39,"line":113},[37,165343,3451],{"class":54},[37,165345,152434],{"class":50},[37,165347,63015],{"class":185},[37,165349,4793],{"class":50},[37,165351,3299],{"class":54},[37,165353,160717],{"class":50},[37,165355,165356,165358],{"class":39,"line":189},[37,165357,32789],{"class":61},[37,165359,150327],{"class":50},[37,165361,165362],{"class":39,"line":195},[37,165363,31965],{"class":54},[37,165365,165366,165368],{"class":39,"line":201},[37,165367,2066],{"class":54},[37,165369,4089],{"class":50},[37,165371,165372,165374,165376,165379],{"class":39,"line":207},[37,165373,31638],{"class":61},[37,165375,165],{"class":50},[37,165377,165378],{"class":185},"\"没有找到\"",[37,165380,280],{"class":50},[469,165382,165384],{"id":165383},"_613-容器通用操作","6.13 容器通用操作",[14,165386,165387],{},"长度：",[27,165389,165391],{"className":29,"code":165390,"language":31,"meta":32,"style":32},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[34,165392,165393,165412,165422],{"__ignoreMap":32},[37,165394,165395,165397,165400,165402,165404,165406,165408,165410],{"class":39,"line":40},[37,165396,7706],{"class":61},[37,165398,165399],{"class":50},"([",[37,165401,332],{"class":61},[37,165403,12776],{"class":50},[37,165405,602],{"class":61},[37,165407,12776],{"class":50},[37,165409,62],{"class":61},[37,165411,101],{"class":50},[37,165413,165414,165416,165418,165420],{"class":39,"line":47},[37,165415,7706],{"class":61},[37,165417,165],{"class":50},[37,165419,156165],{"class":185},[37,165421,280],{"class":50},[37,165423,165424,165426,165429,165431,165433,165435],{"class":39,"line":104},[37,165425,7706],{"class":61},[37,165427,165428],{"class":50},"({",[37,165430,63015],{"class":185},[37,165432,51773],{"class":50},[37,165434,150173],{"class":185},[37,165436,165437],{"class":50},"})\n",[14,165439,165440],{},"最大最小：",[27,165442,165444],{"className":29,"code":165443,"language":31,"meta":32,"style":32},"max([1, 2, 3])\nmin([1, 2, 3])\n",[34,165445,165446,165464],{"__ignoreMap":32},[37,165447,165448,165450,165452,165454,165456,165458,165460,165462],{"class":39,"line":40},[37,165449,6363],{"class":61},[37,165451,165399],{"class":50},[37,165453,332],{"class":61},[37,165455,12776],{"class":50},[37,165457,602],{"class":61},[37,165459,12776],{"class":50},[37,165461,62],{"class":61},[37,165463,101],{"class":50},[37,165465,165466,165469,165471,165473,165475,165477,165479,165481],{"class":39,"line":47},[37,165467,165468],{"class":61},"min",[37,165470,165399],{"class":50},[37,165472,332],{"class":61},[37,165474,12776],{"class":50},[37,165476,602],{"class":61},[37,165478,12776],{"class":50},[37,165480,62],{"class":61},[37,165482,101],{"class":50},[14,165484,165485],{},"求和：",[27,165487,165489],{"className":29,"code":165488,"language":31,"meta":32,"style":32},"sum([1, 2, 3])\n",[34,165490,165491],{"__ignoreMap":32},[37,165492,165493,165496,165498,165500,165502,165504,165506,165508],{"class":39,"line":40},[37,165494,165495],{"class":61},"sum",[37,165497,165399],{"class":50},[37,165499,332],{"class":61},[37,165501,12776],{"class":50},[37,165503,602],{"class":61},[37,165505,12776],{"class":50},[37,165507,62],{"class":61},[37,165509,101],{"class":50},[14,165511,163756],{},[27,165513,165515],{"className":29,"code":165514,"language":31,"meta":32,"style":32},"sorted([3, 1, 2])\n",[34,165516,165517],{"__ignoreMap":32},[37,165518,165519,165522,165524,165526,165528,165530,165532,165534],{"class":39,"line":40},[37,165520,165521],{"class":61},"sorted",[37,165523,165399],{"class":50},[37,165525,62],{"class":61},[37,165527,12776],{"class":50},[37,165529,332],{"class":61},[37,165531,12776],{"class":50},[37,165533,602],{"class":61},[37,165535,101],{"class":50},[14,165537,165538],{},"类型转换：",[27,165540,165542],{"className":29,"code":165541,"language":31,"meta":32,"style":32},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[34,165543,165544,165554,165572],{"__ignoreMap":32},[37,165545,165546,165548,165550,165552],{"class":39,"line":40},[37,165547,154355],{"class":61},[37,165549,165],{"class":50},[37,165551,156165],{"class":185},[37,165553,280],{"class":50},[37,165555,165556,165558,165560,165562,165564,165566,165568,165570],{"class":39,"line":47},[37,165557,155550],{"class":61},[37,165559,165399],{"class":50},[37,165561,332],{"class":61},[37,165563,12776],{"class":50},[37,165565,602],{"class":61},[37,165567,12776],{"class":50},[37,165569,62],{"class":61},[37,165571,101],{"class":50},[37,165573,165574,165576,165578,165580,165582,165584,165586,165588,165590,165592],{"class":39,"line":104},[37,165575,155575],{"class":61},[37,165577,165399],{"class":50},[37,165579,332],{"class":61},[37,165581,12776],{"class":50},[37,165583,332],{"class":61},[37,165585,12776],{"class":50},[37,165587,602],{"class":61},[37,165589,12776],{"class":50},[37,165591,62],{"class":61},[37,165593,101],{"class":50},[14,165595,165596],{},"成员判断：",[27,165598,165600],{"className":29,"code":165599,"language":31,"meta":32,"style":32},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[34,165601,165602,165619,165643],{"__ignoreMap":32},[37,165603,165604,165606,165608,165611,165614,165617],{"class":39,"line":40},[37,165605,30755],{"class":61},[37,165607,165],{"class":50},[37,165609,165610],{"class":185},"\"a\"",[37,165612,165613],{"class":54}," in",[37,165615,165616],{"class":185}," \"abc\"",[37,165618,280],{"class":50},[37,165620,165621,165623,165625,165627,165629,165631,165633,165635,165637,165639,165641],{"class":39,"line":47},[37,165622,30755],{"class":61},[37,165624,165],{"class":50},[37,165626,332],{"class":61},[37,165628,165613],{"class":54},[37,165630,52562],{"class":50},[37,165632,332],{"class":61},[37,165634,12776],{"class":50},[37,165636,602],{"class":61},[37,165638,12776],{"class":50},[37,165640,62],{"class":61},[37,165642,101],{"class":50},[37,165644,165645,165647,165649,165651,165653,165655,165657,165659,165661],{"class":39,"line":104},[37,165646,30755],{"class":61},[37,165648,165],{"class":50},[37,165650,63015],{"class":185},[37,165652,165613],{"class":54},[37,165654,4798],{"class":50},[37,165656,63015],{"class":185},[37,165658,51773],{"class":50},[37,165660,150173],{"class":185},[37,165662,165437],{"class":50},[469,165664,165666],{"id":165665},"_614-推导式","6.14 推导式",[14,165668,165669],{},"推导式用于快速生成容器。",[14,165671,165672],{},"列表推导式：",[27,165674,165676],{"className":29,"code":165675,"language":31,"meta":32,"style":32},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[34,165677,165678,165705],{"__ignoreMap":32},[37,165679,165680,165682,165684,165687,165689,165691,165693,165695,165697,165699,165701,165703],{"class":39,"line":40},[37,165681,164385],{"class":50},[37,165683,55],{"class":54},[37,165685,165686],{"class":50}," [i ",[37,165688,3375],{"class":54},[37,165690,9779],{"class":50},[37,165692,26385],{"class":54},[37,165694,32781],{"class":61},[37,165696,165],{"class":50},[37,165698,332],{"class":61},[37,165700,12776],{"class":50},[37,165702,93],{"class":61},[37,165704,97585],{"class":50},[37,165706,165707,165709],{"class":39,"line":47},[37,165708,30755],{"class":61},[37,165710,164601],{"class":50},[14,165712,165713],{},"带条件：",[27,165715,165717],{"className":29,"code":165716,"language":31,"meta":32,"style":32},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[34,165718,165719,165760],{"__ignoreMap":32},[37,165720,165721,165724,165726,165728,165730,165732,165734,165736,165738,165740,165742,165744,165746,165748,165750,165752,165754,165756,165758],{"class":39,"line":40},[37,165722,165723],{"class":50},"even_nums ",[37,165725,55],{"class":54},[37,165727,165686],{"class":50},[37,165729,3375],{"class":54},[37,165731,9779],{"class":50},[37,165733,26385],{"class":54},[37,165735,32781],{"class":61},[37,165737,165],{"class":50},[37,165739,332],{"class":61},[37,165741,12776],{"class":50},[37,165743,854],{"class":61},[37,165745,14055],{"class":50},[37,165747,1907],{"class":54},[37,165749,9779],{"class":50},[37,165751,845],{"class":54},[37,165753,15096],{"class":61},[37,165755,101844],{"class":54},[37,165757,4443],{"class":61},[37,165759,389],{"class":50},[37,165761,165762,165764],{"class":39,"line":47},[37,165763,30755],{"class":61},[37,165765,165766],{"class":50},"(even_nums)\n",[14,165768,165769],{},"字典推导式：",[27,165771,165773],{"className":29,"code":165772,"language":31,"meta":32,"style":32},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[34,165774,165775,165809],{"__ignoreMap":32},[37,165776,165777,165780,165782,165785,165787,165789,165792,165794,165796,165798,165800,165802,165804,165806],{"class":39,"line":40},[37,165778,165779],{"class":50},"squares ",[37,165781,55],{"class":54},[37,165783,165784],{"class":50}," {i: i ",[37,165786,11002],{"class":54},[37,165788,15096],{"class":61},[37,165790,165791],{"class":54}," for",[37,165793,9779],{"class":50},[37,165795,26385],{"class":54},[37,165797,32781],{"class":61},[37,165799,165],{"class":50},[37,165801,332],{"class":61},[37,165803,12776],{"class":50},[37,165805,93],{"class":61},[37,165807,165808],{"class":50},")}\n",[37,165810,165811,165813],{"class":39,"line":47},[37,165812,30755],{"class":61},[37,165814,165815],{"class":50},"(squares)\n",[14,165817,165818],{},"集合推导式：",[27,165820,165822],{"className":29,"code":165821,"language":31,"meta":32,"style":32},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[34,165823,165824,165845],{"__ignoreMap":32},[37,165825,165826,165829,165831,165834,165836,165838,165840,165843],{"class":39,"line":40},[37,165827,165828],{"class":50},"chars ",[37,165830,55],{"class":54},[37,165832,165833],{"class":50}," {ch ",[37,165835,3375],{"class":54},[37,165837,159977],{"class":50},[37,165839,26385],{"class":54},[37,165841,165842],{"class":185}," \"hello\"",[37,165844,1941],{"class":50},[37,165846,165847,165849],{"class":39,"line":47},[37,165848,30755],{"class":61},[37,165850,165851],{"class":50},"(chars)\n",[14,165853,165854],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[469,165856,165858],{"id":165857},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[27,165860,165862],{"className":29,"code":165861,"language":31,"meta":32,"style":32},"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",[34,165863,165864,165872,165892,165912,165932,165952,165956,165960,165968,165982,165991,165995,166005,166017,166021,166041,166050,166054,166070,166075,166079,166093,166097,166119,166155],{"__ignoreMap":32},[37,165865,165866,165868,165870],{"class":39,"line":40},[37,165867,160001],{"class":50},[37,165869,55],{"class":54},[37,165871,55783],{"class":50},[37,165873,165874,165876,165878,165880,165882,165884,165886,165888,165890],{"class":39,"line":47},[37,165875,148670],{"class":50},[37,165877,63015],{"class":185},[37,165879,51773],{"class":50},[37,165881,150173],{"class":185},[37,165883,12776],{"class":50},[37,165885,151757],{"class":185},[37,165887,51773],{"class":50},[37,165889,1497],{"class":61},[37,165891,5279],{"class":50},[37,165893,165894,165896,165898,165900,165902,165904,165906,165908,165910],{"class":39,"line":104},[37,165895,148670],{"class":50},[37,165897,63015],{"class":185},[37,165899,51773],{"class":50},[37,165901,151221],{"class":185},[37,165903,12776],{"class":50},[37,165905,151757],{"class":185},[37,165907,51773],{"class":50},[37,165909,1320],{"class":61},[37,165911,5279],{"class":50},[37,165913,165914,165916,165918,165920,165922,165924,165926,165928,165930],{"class":39,"line":113},[37,165915,148670],{"class":50},[37,165917,63015],{"class":185},[37,165919,51773],{"class":50},[37,165921,160016],{"class":185},[37,165923,12776],{"class":50},[37,165925,151757],{"class":185},[37,165927,51773],{"class":50},[37,165929,920],{"class":61},[37,165931,5279],{"class":50},[37,165933,165934,165936,165938,165940,165942,165944,165946,165948,165950],{"class":39,"line":189},[37,165935,148670],{"class":50},[37,165937,63015],{"class":185},[37,165939,51773],{"class":50},[37,165941,163595],{"class":185},[37,165943,12776],{"class":50},[37,165945,151757],{"class":185},[37,165947,51773],{"class":50},[37,165949,1391],{"class":61},[37,165951,5279],{"class":50},[37,165953,165954],{"class":39,"line":195},[37,165955,389],{"class":50},[37,165957,165958],{"class":39,"line":201},[37,165959,2757],{"emptyLinePlaceholder":454},[37,165961,165962,165964,165966],{"class":39,"line":207},[37,165963,157545],{"class":50},[37,165965,55],{"class":54},[37,165967,47670],{"class":61},[37,165969,165970,165973,165975,165978,165980],{"class":39,"line":213},[37,165971,165972],{"class":50},"max_student ",[37,165974,55],{"class":54},[37,165976,165977],{"class":50}," students[",[37,165979,135],{"class":61},[37,165981,389],{"class":50},[37,165983,165984,165987,165989],{"class":39,"line":218},[37,165985,165986],{"class":50},"passed ",[37,165988,55],{"class":54},[37,165990,52174],{"class":50},[37,165992,165993],{"class":39,"line":227},[37,165994,2757],{"emptyLinePlaceholder":454},[37,165996,165997,165999,166001,166003],{"class":39,"line":232},[37,165998,3375],{"class":54},[37,166000,152422],{"class":50},[37,166002,26385],{"class":54},[37,166004,152427],{"class":50},[37,166006,166007,166009,166011,166013,166015],{"class":39,"line":238},[37,166008,159592],{"class":50},[37,166010,9818],{"class":54},[37,166012,152434],{"class":50},[37,166014,151757],{"class":185},[37,166016,389],{"class":50},[37,166018,166019],{"class":39,"line":244},[37,166020,2757],{"emptyLinePlaceholder":454},[37,166022,166023,166025,166027,166029,166031,166033,166036,166038],{"class":39,"line":250},[37,166024,3451],{"class":54},[37,166026,152434],{"class":50},[37,166028,151757],{"class":185},[37,166030,4793],{"class":50},[37,166032,1468],{"class":54},[37,166034,166035],{"class":50}," max_student[",[37,166037,151757],{"class":185},[37,166039,166040],{"class":50},"]:\n",[37,166042,166043,166046,166048],{"class":39,"line":256},[37,166044,166045],{"class":50},"        max_student ",[37,166047,55],{"class":54},[37,166049,152450],{"class":50},[37,166051,166052],{"class":39,"line":261},[37,166053,2757],{"emptyLinePlaceholder":454},[37,166055,166056,166058,166060,166062,166064,166066,166068],{"class":39,"line":267},[37,166057,3451],{"class":54},[37,166059,152434],{"class":50},[37,166061,151757],{"class":185},[37,166063,4793],{"class":50},[37,166065,2075],{"class":54},[37,166067,158122],{"class":61},[37,166069,4089],{"class":50},[37,166071,166072],{"class":39,"line":283},[37,166073,166074],{"class":50},"        passed.append(student)\n",[37,166076,166077],{"class":39,"line":288},[37,166078,2757],{"emptyLinePlaceholder":454},[37,166080,166081,166083,166085,166087,166089,166091],{"class":39,"line":294},[37,166082,164059],{"class":50},[37,166084,55],{"class":54},[37,166086,164064],{"class":50},[37,166088,1094],{"class":54},[37,166090,7679],{"class":61},[37,166092,165280],{"class":50},[37,166094,166095],{"class":39,"line":300},[37,166096,2757],{"emptyLinePlaceholder":454},[37,166098,166099,166101,166103,166105,166107,166109,166111,166113,166115,166117],{"class":39,"line":306},[37,166100,30755],{"class":61},[37,166102,165],{"class":50},[37,166104,579],{"class":54},[37,166106,164082],{"class":185},[37,166108,1404],{"class":61},[37,166110,164087],{"class":50},[37,166112,157444],{"class":54},[37,166114,1454],{"class":61},[37,166116,772],{"class":185},[37,166118,280],{"class":50},[37,166120,166121,166123,166125,166127,166130,166132,166135,166137,166139,166141,166143,166145,166147,166149,166151,166153],{"class":39,"line":312},[37,166122,30755],{"class":61},[37,166124,165],{"class":50},[37,166126,579],{"class":54},[37,166128,166129],{"class":185},"\"最高分学生:",[37,166131,1404],{"class":61},[37,166133,166134],{"class":50},"max_student[",[37,166136,153167],{"class":185},[37,166138,1448],{"class":50},[37,166140,1454],{"class":61},[37,166142,4798],{"class":61},[37,166144,166134],{"class":50},[37,166146,153205],{"class":185},[37,166148,1448],{"class":50},[37,166150,1454],{"class":61},[37,166152,772],{"class":185},[37,166154,280],{"class":50},[37,166156,166157,166159,166161,166163,166166,166169,166172,166174,166176],{"class":39,"line":317},[37,166158,30755],{"class":61},[37,166160,165],{"class":50},[37,166162,579],{"class":54},[37,166164,166165],{"class":185},"\"及格人数:",[37,166167,166168],{"class":61},"{len",[37,166170,166171],{"class":50},"(passed)",[37,166173,1454],{"class":61},[37,166175,772],{"class":185},[37,166177,280],{"class":50},[469,166179,166181],{"id":166180},"_616-易错点","6.16 易错点",[481,166183,166184,166187,166190,166193,166199,166208],{},[484,166185,166186],{},"列表可变，元组和字符串不可变。",[484,166188,166189],{},"切片结束位置不包含。",[484,166191,166192],{},"字典通过 key 取值，不是通过索引。",[484,166194,166195,166196,28727],{},"空集合要用 ",[34,166197,166198],{},"set()",[484,166200,104651,166201,166204,166205,28727],{},[34,166202,166203],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[34,166206,166207],{},"get()",[484,166209,166210],{},"嵌套容器要先看清楚每一层是什么类型。",[469,166212,166214],{"id":166213},"_617-本章练习","6.17 本章练习",[481,166216,166217,166220,166223,166226,166229],{},[484,166218,166219],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[484,166221,166222],{},"输入一句话，统计每个字符出现次数。",[484,166224,166225],{},"使用集合去除列表中的重复元素。",[484,166227,166228],{},"使用字典保存一个学生的信息，并实现修改成绩。",[484,166230,166231],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[446,166233,166234],{},"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":32,"searchDepth":47,"depth":47,"links":166236},[166237,166238,166239,166240,166241,166242,166243,166244,166245,166246,166247,166248,166249,166250,166251,166252,166253],{"id":163217,"depth":47,"text":163218},{"id":163334,"depth":47,"text":163335},{"id":163424,"depth":47,"text":163425},{"id":163548,"depth":47,"text":163549},{"id":163911,"depth":47,"text":163912},{"id":164098,"depth":47,"text":164099},{"id":164217,"depth":47,"text":164218},{"id":164359,"depth":47,"text":164360},{"id":164546,"depth":47,"text":164547},{"id":164790,"depth":47,"text":164791},{"id":165000,"depth":47,"text":165001},{"id":165085,"depth":47,"text":165086},{"id":165383,"depth":47,"text":165384},{"id":165665,"depth":47,"text":165666},{"id":165857,"depth":47,"text":165858},{"id":166180,"depth":47,"text":166181},{"id":166213,"depth":47,"text":166214},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163209,"description":451},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166260,"title":166261,"body":166262,"description":451,"extension":452,"meta":168434,"navigation":454,"path":168435,"seo":168436,"stem":168437,"__hash__":168438},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166263,"toc":168409},[166264,166267,166271,166274,166354,166357,166378,166381,166385,166388,166450,166453,166470,166474,166477,166522,166524,166532,166536,166539,166621,166624,166627,166652,166655,166678,166682,166685,166687,166749,166752,166754,166805,166809,166813,166819,166924,166928,166934,167005,167009,167012,167080,167083,167163,167167,167173,167209,167212,167215,167325,167331,167335,167338,167410,167413,167417,167421,167426,167488,167492,167497,167565,167569,167574,167690,167694,167697,167777,167780,167784,167787,167891,167893,167908,167911,167915,168053,168061,168065,168067,168078,168080,168338,168342,168374,168378,168406],[10,166265,166261],{"id":166266},"_7-函数进阶",[469,166268,166270],{"id":166269},"_71-多返回值","7.1 多返回值",[14,166272,166273],{},"Python 函数可以返回多个值，本质上返回的是元组。",[27,166275,166277],{"className":29,"code":166276,"language":31,"meta":32,"style":32},"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",[34,166278,166279,166288,166296,166304,166313,166320,166324,166328,166337,166343],{"__ignoreMap":32},[37,166280,166281,166283,166286],{"class":39,"line":40},[37,166282,32285],{"class":54},[37,166284,166285],{"class":2320}," get_info",[37,166287,32291],{"class":50},[37,166289,166290,166292,166294],{"class":39,"line":47},[37,166291,152655],{"class":50},[37,166293,55],{"class":54},[37,166295,149638],{"class":185},[37,166297,166298,166300,166302],{"class":39,"line":104},[37,166299,152671],{"class":50},[37,166301,55],{"class":54},[37,166303,146836],{"class":61},[37,166305,166306,166308,166310],{"class":39,"line":113},[37,166307,152686],{"class":50},[37,166309,55],{"class":54},[37,166311,166312],{"class":61}," 95\n",[37,166314,166315,166317],{"class":39,"line":189},[37,166316,4440],{"class":54},[37,166318,166319],{"class":50}," name, age, score\n",[37,166321,166322],{"class":39,"line":195},[37,166323,2757],{"emptyLinePlaceholder":454},[37,166325,166326],{"class":39,"line":201},[37,166327,2757],{"emptyLinePlaceholder":454},[37,166329,166330,166332,166334],{"class":39,"line":207},[37,166331,161591],{"class":50},[37,166333,55],{"class":54},[37,166335,166336],{"class":50}," get_info()\n",[37,166338,166339,166341],{"class":39,"line":213},[37,166340,30755],{"class":61},[37,166342,76920],{"class":50},[37,166344,166345,166347,166349,166351],{"class":39,"line":218},[37,166346,30755],{"class":61},[37,166348,165],{"class":50},[37,166350,103392],{"class":61},[37,166352,166353],{"class":50},"(result))\n",[14,166355,166356],{},"可以直接解包：",[27,166358,166360],{"className":29,"code":166359,"language":31,"meta":32,"style":32},"name, age, score = get_info()\nprint(name, age, score)\n",[34,166361,166362,166371],{"__ignoreMap":32},[37,166363,166364,166367,166369],{"class":39,"line":40},[37,166365,166366],{"class":50},"name, age, score ",[37,166368,55],{"class":54},[37,166370,166336],{"class":50},[37,166372,166373,166375],{"class":39,"line":47},[37,166374,30755],{"class":61},[37,166376,166377],{"class":50},"(name, age, score)\n",[14,166379,166380],{},"返回多个值适合函数需要同时给出多个结果时使用。",[469,166382,166384],{"id":166383},"_72-位置参数","7.2 位置参数",[14,166386,166387],{},"位置参数按顺序传递。",[27,166389,166391],{"className":29,"code":166390,"language":31,"meta":32,"style":32},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[34,166392,166393,166401,166429,166433,166437],{"__ignoreMap":32},[37,166394,166395,166397,166399],{"class":39,"line":40},[37,166396,32285],{"class":54},[37,166398,149657],{"class":2320},[37,166400,149660],{"class":50},[37,166402,166403,166405,166407,166409,166411,166413,166415,166417,166419,166421,166423,166425,166427],{"class":39,"line":47},[37,166404,31638],{"class":61},[37,166406,165],{"class":50},[37,166408,579],{"class":54},[37,166410,149671],{"class":185},[37,166412,1404],{"class":61},[37,166414,80145],{"class":50},[37,166416,1454],{"class":61},[37,166418,149680],{"class":185},[37,166420,1404],{"class":61},[37,166422,70557],{"class":50},[37,166424,1454],{"class":61},[37,166426,149689],{"class":185},[37,166428,280],{"class":50},[37,166430,166431],{"class":39,"line":104},[37,166432,2757],{"emptyLinePlaceholder":454},[37,166434,166435],{"class":39,"line":113},[37,166436,2757],{"emptyLinePlaceholder":454},[37,166438,166439,166442,166444,166446,166448],{"class":39,"line":189},[37,166440,166441],{"class":50},"introduce(",[37,166443,150173],{"class":185},[37,166445,12776],{"class":50},[37,166447,1160],{"class":61},[37,166449,280],{"class":50},[14,166451,166452],{},"顺序错了就会得到错误含义：",[27,166454,166456],{"className":29,"code":166455,"language":31,"meta":32,"style":32},"introduce(18, \"小明\")\n",[34,166457,166458],{"__ignoreMap":32},[37,166459,166460,166462,166464,166466,166468],{"class":39,"line":40},[37,166461,166441],{"class":50},[37,166463,1160],{"class":61},[37,166465,12776],{"class":50},[37,166467,150173],{"class":185},[37,166469,280],{"class":50},[469,166471,166473],{"id":166472},"_73-关键字参数","7.3 关键字参数",[14,166475,166476],{},"关键字参数按参数名传递。",[27,166478,166480],{"className":29,"code":166479,"language":31,"meta":32,"style":32},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[34,166481,166482,166502],{"__ignoreMap":32},[37,166483,166484,166486,166488,166490,166492,166494,166496,166498,166500],{"class":39,"line":40},[37,166485,166441],{"class":50},[37,166487,80145],{"class":159},[37,166489,55],{"class":54},[37,166491,150173],{"class":185},[37,166493,12776],{"class":50},[37,166495,70557],{"class":159},[37,166497,55],{"class":54},[37,166499,1160],{"class":61},[37,166501,280],{"class":50},[37,166503,166504,166506,166508,166510,166512,166514,166516,166518,166520],{"class":39,"line":47},[37,166505,166441],{"class":50},[37,166507,70557],{"class":159},[37,166509,55],{"class":54},[37,166511,1160],{"class":61},[37,166513,12776],{"class":50},[37,166515,80145],{"class":159},[37,166517,55],{"class":54},[37,166519,150173],{"class":185},[37,166521,280],{"class":50},[14,166523,118219],{},[481,166525,166526,166529],{},[484,166527,166528],{},"顺序不容易错。",[484,166530,166531],{},"调用时可读性更强。",[469,166533,166535],{"id":166534},"_74-默认参数","7.4 默认参数",[14,166537,166538],{},"默认参数给参数设置默认值。",[27,166540,166542],{"className":29,"code":166541,"language":31,"meta":32,"style":32},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[34,166543,166544,166560,166590,166594,166598,166608],{"__ignoreMap":32},[37,166545,166546,166548,166550,166553,166555,166558],{"class":39,"line":40},[37,166547,32285],{"class":54},[37,166549,122378],{"class":2320},[37,166551,166552],{"class":50},"(host, port",[37,166554,55],{"class":54},[37,166556,166557],{"class":61},"3306",[37,166559,31125],{"class":50},[37,166561,166562,166564,166566,166568,166571,166573,166575,166577,166579,166581,166584,166586,166588],{"class":39,"line":47},[37,166563,31638],{"class":61},[37,166565,165],{"class":50},[37,166567,579],{"class":54},[37,166569,166570],{"class":185},"\"连接",[37,166572,1404],{"class":61},[37,166574,27737],{"class":50},[37,166576,1454],{"class":61},[37,166578,1368],{"class":185},[37,166580,1404],{"class":61},[37,166582,166583],{"class":50},"port",[37,166585,1454],{"class":61},[37,166587,772],{"class":185},[37,166589,280],{"class":50},[37,166591,166592],{"class":39,"line":104},[37,166593,2757],{"emptyLinePlaceholder":454},[37,166595,166596],{"class":39,"line":113},[37,166597,2757],{"emptyLinePlaceholder":454},[37,166599,166600,166603,166606],{"class":39,"line":189},[37,166601,166602],{"class":50},"connect(",[37,166604,166605],{"class":185},"\"localhost\"",[37,166607,280],{"class":50},[37,166609,166610,166612,166614,166616,166619],{"class":39,"line":195},[37,166611,166602],{"class":50},[37,166613,166605],{"class":185},[37,166615,12776],{"class":50},[37,166617,166618],{"class":61},"6379",[37,166620,280],{"class":50},[14,166622,166623],{},"注意：默认参数必须放在非默认参数后面。",[14,166625,166626],{},"错误：",[27,166628,166630],{"className":29,"code":166629,"language":31,"meta":32,"style":32},"def connect(port=3306, host):\n    pass\n",[34,166631,166632,166648],{"__ignoreMap":32},[37,166633,166634,166636,166638,166641,166643,166645],{"class":39,"line":40},[37,166635,32285],{"class":54},[37,166637,122378],{"class":2320},[37,166639,166640],{"class":50},"(port",[37,166642,55],{"class":54},[37,166644,166557],{"class":61},[37,166646,166647],{"class":50},", host):\n",[37,166649,166650],{"class":39,"line":47},[37,166651,149822],{"class":54},[14,166653,166654],{},"正确：",[27,166656,166658],{"className":29,"code":166657,"language":31,"meta":32,"style":32},"def connect(host, port=3306):\n    pass\n",[34,166659,166660,166674],{"__ignoreMap":32},[37,166661,166662,166664,166666,166668,166670,166672],{"class":39,"line":40},[37,166663,32285],{"class":54},[37,166665,122378],{"class":2320},[37,166667,166552],{"class":50},[37,166669,55],{"class":54},[37,166671,166557],{"class":61},[37,166673,31125],{"class":50},[37,166675,166676],{"class":39,"line":47},[37,166677,149822],{"class":54},[469,166679,166681],{"id":166680},"_75-默认参数的坑","7.5 默认参数的坑",[14,166683,166684],{},"不要使用可变对象作为默认参数。",[14,166686,157908],{},[27,166688,166690],{"className":29,"code":166689,"language":31,"meta":32,"style":32},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[34,166691,166692,166707,166712,166719,166723,166727,166738],{"__ignoreMap":32},[37,166693,166694,166696,166699,166702,166704],{"class":39,"line":40},[37,166695,32285],{"class":54},[37,166697,166698],{"class":2320}," add_item",[37,166700,166701],{"class":50},"(item, items",[37,166703,55],{"class":54},[37,166705,166706],{"class":50},"[]):\n",[37,166708,166709],{"class":39,"line":47},[37,166710,166711],{"class":50},"    items.append(item)\n",[37,166713,166714,166716],{"class":39,"line":104},[37,166715,4440],{"class":54},[37,166717,166718],{"class":50}," items\n",[37,166720,166721],{"class":39,"line":113},[37,166722,2757],{"emptyLinePlaceholder":454},[37,166724,166725],{"class":39,"line":189},[37,166726,2757],{"emptyLinePlaceholder":454},[37,166728,166729,166731,166734,166736],{"class":39,"line":195},[37,166730,30755],{"class":61},[37,166732,166733],{"class":50},"(add_item(",[37,166735,165610],{"class":185},[37,166737,175],{"class":50},[37,166739,166740,166742,166744,166747],{"class":39,"line":201},[37,166741,30755],{"class":61},[37,166743,166733],{"class":50},[37,166745,166746],{"class":185},"\"b\"",[37,166748,175],{"class":50},[14,166750,166751],{},"第二次调用会复用第一次的列表。",[14,166753,156173],{},[27,166755,166757],{"className":29,"code":166756,"language":31,"meta":32,"style":32},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[34,166758,166759,166773,166786,166795,166799],{"__ignoreMap":32},[37,166760,166761,166763,166765,166767,166769,166771],{"class":39,"line":40},[37,166762,32285],{"class":54},[37,166764,166698],{"class":2320},[37,166766,166701],{"class":50},[37,166768,55],{"class":54},[37,166770,95971],{"class":61},[37,166772,31125],{"class":50},[37,166774,166775,166777,166780,166782,166784],{"class":39,"line":47},[37,166776,3451],{"class":54},[37,166778,166779],{"class":50}," items ",[37,166781,39264],{"class":54},[37,166783,39270],{"class":61},[37,166785,4089],{"class":50},[37,166787,166788,166791,166793],{"class":39,"line":104},[37,166789,166790],{"class":50},"        items ",[37,166792,55],{"class":54},[37,166794,52174],{"class":50},[37,166796,166797],{"class":39,"line":113},[37,166798,166711],{"class":50},[37,166800,166801,166803],{"class":39,"line":189},[37,166802,4440],{"class":54},[37,166804,166718],{"class":50},[469,166806,166808],{"id":166807},"_76-不定长参数","7.6 不定长参数",[498,166810,166812],{"id":166811},"_761-args","7.6.1 *args",[14,166814,166815,166818],{},[34,166816,166817],{},"*args"," 接收任意数量的位置参数，得到元组。",[27,166820,166822],{"className":29,"code":166821,"language":31,"meta":32,"style":32},"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",[34,166823,166824,166837,166845,166856,166865,166871,166875,166879,166898],{"__ignoreMap":32},[37,166825,166826,166828,166830,166832,166834],{"class":39,"line":40},[37,166827,32285],{"class":54},[37,166829,5558],{"class":2320},[37,166831,165],{"class":50},[37,166833,967],{"class":54},[37,166835,166836],{"class":50},"args):\n",[37,166838,166839,166841,166843],{"class":39,"line":47},[37,166840,159592],{"class":50},[37,166842,55],{"class":54},[37,166844,47670],{"class":61},[37,166846,166847,166849,166851,166853],{"class":39,"line":104},[37,166848,3551],{"class":54},[37,166850,156465],{"class":50},[37,166852,26385],{"class":54},[37,166854,166855],{"class":50}," args:\n",[37,166857,166858,166860,166862],{"class":39,"line":113},[37,166859,160267],{"class":50},[37,166861,9818],{"class":54},[37,166863,166864],{"class":50}," num\n",[37,166866,166867,166869],{"class":39,"line":189},[37,166868,4440],{"class":54},[37,166870,162572],{"class":50},[37,166872,166873],{"class":39,"line":195},[37,166874,2757],{"emptyLinePlaceholder":454},[37,166876,166877],{"class":39,"line":201},[37,166878,2757],{"emptyLinePlaceholder":454},[37,166880,166881,166883,166886,166888,166890,166892,166894,166896],{"class":39,"line":207},[37,166882,30755],{"class":61},[37,166884,166885],{"class":50},"(add(",[37,166887,332],{"class":61},[37,166889,12776],{"class":50},[37,166891,602],{"class":61},[37,166893,12776],{"class":50},[37,166895,62],{"class":61},[37,166897,175],{"class":50},[37,166899,166900,166902,166904,166906,166908,166910,166912,166914,166916,166918,166920,166922],{"class":39,"line":213},[37,166901,30755],{"class":61},[37,166903,166885],{"class":50},[37,166905,332],{"class":61},[37,166907,12776],{"class":50},[37,166909,602],{"class":61},[37,166911,12776],{"class":50},[37,166913,62],{"class":61},[37,166915,12776],{"class":50},[37,166917,168],{"class":61},[37,166919,12776],{"class":50},[37,166921,836],{"class":61},[37,166923,175],{"class":50},[498,166925,166927],{"id":166926},"_762-kwargs","7.6.2 **kwargs",[14,166929,166930,166933],{},[34,166931,166932],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[27,166935,166937],{"className":29,"code":166936,"language":31,"meta":32,"style":32},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[34,166938,166939,166952,166963,166969,166973,166977],{"__ignoreMap":32},[37,166940,166941,166943,166945,166947,166949],{"class":39,"line":40},[37,166942,32285],{"class":54},[37,166944,162230],{"class":2320},[37,166946,165],{"class":50},[37,166948,11002],{"class":54},[37,166950,166951],{"class":50},"kwargs):\n",[37,166953,166954,166956,166958,166960],{"class":39,"line":47},[37,166955,3551],{"class":54},[37,166957,165070],{"class":50},[37,166959,26385],{"class":54},[37,166961,166962],{"class":50}," kwargs.items():\n",[37,166964,166965,166967],{"class":39,"line":104},[37,166966,32789],{"class":61},[37,166968,165082],{"class":50},[37,166970,166971],{"class":39,"line":113},[37,166972,2757],{"emptyLinePlaceholder":454},[37,166974,166975],{"class":39,"line":189},[37,166976,2757],{"emptyLinePlaceholder":454},[37,166978,166979,166981,166983,166985,166987,166989,166991,166993,166995,166997,166999,167001,167003],{"class":39,"line":195},[37,166980,162295],{"class":50},[37,166982,80145],{"class":159},[37,166984,55],{"class":54},[37,166986,150173],{"class":185},[37,166988,12776],{"class":50},[37,166990,70557],{"class":159},[37,166992,55],{"class":54},[37,166994,1160],{"class":61},[37,166996,12776],{"class":50},[37,166998,70608],{"class":159},[37,167000,55],{"class":54},[37,167002,69605],{"class":185},[37,167004,280],{"class":50},[469,167006,167008],{"id":167007},"_77-参数解包","7.7 参数解包",[14,167010,167011],{},"列表或元组解包为位置参数：",[27,167013,167015],{"className":29,"code":167014,"language":31,"meta":32,"style":32},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[34,167016,167017,167026,167041,167045,167049,167069],{"__ignoreMap":32},[37,167018,167019,167021,167023],{"class":39,"line":40},[37,167020,32285],{"class":54},[37,167022,5558],{"class":2320},[37,167024,167025],{"class":50},"(a, b, c):\n",[37,167027,167028,167030,167032,167034,167036,167038],{"class":39,"line":47},[37,167029,4440],{"class":54},[37,167031,11210],{"class":50},[37,167033,993],{"class":54},[37,167035,11223],{"class":50},[37,167037,993],{"class":54},[37,167039,167040],{"class":50}," c\n",[37,167042,167043],{"class":39,"line":104},[37,167044,2757],{"emptyLinePlaceholder":454},[37,167046,167047],{"class":39,"line":113},[37,167048,2757],{"emptyLinePlaceholder":454},[37,167050,167051,167053,167055,167057,167059,167061,167063,167065,167067],{"class":39,"line":189},[37,167052,164385],{"class":50},[37,167054,55],{"class":54},[37,167056,52562],{"class":50},[37,167058,332],{"class":61},[37,167060,12776],{"class":50},[37,167062,602],{"class":61},[37,167064,12776],{"class":50},[37,167066,62],{"class":61},[37,167068,389],{"class":50},[37,167070,167071,167073,167075,167077],{"class":39,"line":195},[37,167072,30755],{"class":61},[37,167074,166885],{"class":50},[37,167076,967],{"class":54},[37,167078,167079],{"class":50},"nums))\n",[14,167081,167082],{},"字典解包为关键字参数：",[27,167084,167086],{"className":29,"code":167085,"language":31,"meta":32,"style":32},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[34,167087,167088,167096,167122,167126,167130,167154],{"__ignoreMap":32},[37,167089,167090,167092,167094],{"class":39,"line":40},[37,167091,32285],{"class":54},[37,167093,149657],{"class":2320},[37,167095,149660],{"class":50},[37,167097,167098,167100,167102,167104,167106,167108,167110,167112,167114,167116,167118,167120],{"class":39,"line":47},[37,167099,31638],{"class":61},[37,167101,165],{"class":50},[37,167103,579],{"class":54},[37,167105,772],{"class":185},[37,167107,1404],{"class":61},[37,167109,80145],{"class":50},[37,167111,1454],{"class":61},[37,167113,4798],{"class":61},[37,167115,70557],{"class":50},[37,167117,1454],{"class":61},[37,167119,772],{"class":185},[37,167121,280],{"class":50},[37,167123,167124],{"class":39,"line":104},[37,167125,2757],{"emptyLinePlaceholder":454},[37,167127,167128],{"class":39,"line":113},[37,167129,2757],{"emptyLinePlaceholder":454},[37,167131,167132,167134,167136,167138,167140,167142,167144,167146,167148,167150,167152],{"class":39,"line":189},[37,167133,116599],{"class":50},[37,167135,55],{"class":54},[37,167137,4798],{"class":50},[37,167139,63015],{"class":185},[37,167141,51773],{"class":50},[37,167143,150173],{"class":185},[37,167145,12776],{"class":50},[37,167147,69460],{"class":185},[37,167149,51773],{"class":50},[37,167151,1160],{"class":61},[37,167153,1941],{"class":50},[37,167155,167156,167158,167160],{"class":39,"line":195},[37,167157,166441],{"class":50},[37,167159,11002],{"class":54},[37,167161,167162],{"class":50},"info)\n",[469,167164,167166],{"id":167165},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,167168,167169,167172],{},[34,167170,167171],{},"lambda"," 用于定义简单匿名函数。",[27,167174,167176],{"className":29,"code":167175,"language":31,"meta":32,"style":32},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[34,167177,167178,167195],{"__ignoreMap":32},[37,167179,167180,167183,167185,167188,167191,167193],{"class":39,"line":40},[37,167181,167182],{"class":50},"add ",[37,167184,55],{"class":54},[37,167186,167187],{"class":54}," lambda",[37,167189,167190],{"class":50}," a, b: a ",[37,167192,993],{"class":54},[37,167194,151389],{"class":50},[37,167196,167197,167199,167201,167203,167205,167207],{"class":39,"line":47},[37,167198,30755],{"class":61},[37,167200,166885],{"class":50},[37,167202,332],{"class":61},[37,167204,12776],{"class":50},[37,167206,602],{"class":61},[37,167208,175],{"class":50},[14,167210,167211],{},"常和排序、过滤等函数一起使用。",[14,167213,167214],{},"按分数排序：",[27,167216,167218],{"className":29,"code":167217,"language":31,"meta":32,"style":32},"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",[34,167219,167220,167228,167248,167268,167288,167292,167296,167319],{"__ignoreMap":32},[37,167221,167222,167224,167226],{"class":39,"line":40},[37,167223,160001],{"class":50},[37,167225,55],{"class":54},[37,167227,55783],{"class":50},[37,167229,167230,167232,167234,167236,167238,167240,167242,167244,167246],{"class":39,"line":47},[37,167231,148670],{"class":50},[37,167233,63015],{"class":185},[37,167235,51773],{"class":50},[37,167237,150173],{"class":185},[37,167239,12776],{"class":50},[37,167241,151757],{"class":185},[37,167243,51773],{"class":50},[37,167245,1497],{"class":61},[37,167247,5279],{"class":50},[37,167249,167250,167252,167254,167256,167258,167260,167262,167264,167266],{"class":39,"line":104},[37,167251,148670],{"class":50},[37,167253,63015],{"class":185},[37,167255,51773],{"class":50},[37,167257,151221],{"class":185},[37,167259,12776],{"class":50},[37,167261,151757],{"class":185},[37,167263,51773],{"class":50},[37,167265,1320],{"class":61},[37,167267,5279],{"class":50},[37,167269,167270,167272,167274,167276,167278,167280,167282,167284,167286],{"class":39,"line":113},[37,167271,148670],{"class":50},[37,167273,63015],{"class":185},[37,167275,51773],{"class":50},[37,167277,160016],{"class":185},[37,167279,12776],{"class":50},[37,167281,151757],{"class":185},[37,167283,51773],{"class":50},[37,167285,920],{"class":61},[37,167287,5279],{"class":50},[37,167289,167290],{"class":39,"line":189},[37,167291,389],{"class":50},[37,167293,167294],{"class":39,"line":195},[37,167295,2757],{"emptyLinePlaceholder":454},[37,167297,167298,167301,167303,167305,167307,167309,167311,167313,167315,167317],{"class":39,"line":201},[37,167299,167300],{"class":50},"students.sort(",[37,167302,154231],{"class":159},[37,167304,154234],{"class":54},[37,167306,154237],{"class":50},[37,167308,151757],{"class":185},[37,167310,112487],{"class":50},[37,167312,163813],{"class":159},[37,167314,55],{"class":54},[37,167316,31815],{"class":61},[37,167318,280],{"class":50},[37,167320,167321,167323],{"class":39,"line":207},[37,167322,30755],{"class":61},[37,167324,165280],{"class":50},[14,167326,167327,167328,167330],{},"如果逻辑复杂，不要硬写 ",[34,167329,167171],{},"，定义普通函数更清晰。",[469,167332,167334],{"id":167333},"_79-函数作为参数","7.9 函数作为参数",[14,167336,167337],{},"函数可以作为参数传给另一个函数。",[27,167339,167341],{"className":29,"code":167340,"language":31,"meta":32,"style":32},"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",[34,167342,167343,167351,167361,167365,167369,167379,167386,167390,167394],{"__ignoreMap":32},[37,167344,167345,167347,167349],{"class":39,"line":40},[37,167346,32285],{"class":54},[37,167348,5558],{"class":2320},[37,167350,151378],{"class":50},[37,167352,167353,167355,167357,167359],{"class":39,"line":47},[37,167354,4440],{"class":54},[37,167356,11210],{"class":50},[37,167358,993],{"class":54},[37,167360,151389],{"class":50},[37,167362,167363],{"class":39,"line":104},[37,167364,2757],{"emptyLinePlaceholder":454},[37,167366,167367],{"class":39,"line":113},[37,167368,2757],{"emptyLinePlaceholder":454},[37,167370,167371,167373,167376],{"class":39,"line":189},[37,167372,32285],{"class":54},[37,167374,167375],{"class":2320}," calculate",[37,167377,167378],{"class":50},"(a, b, func):\n",[37,167380,167381,167383],{"class":39,"line":195},[37,167382,4440],{"class":54},[37,167384,167385],{"class":50}," func(a, b)\n",[37,167387,167388],{"class":39,"line":201},[37,167389,2757],{"emptyLinePlaceholder":454},[37,167391,167392],{"class":39,"line":207},[37,167393,2757],{"emptyLinePlaceholder":454},[37,167395,167396,167398,167401,167403,167405,167407],{"class":39,"line":213},[37,167397,30755],{"class":61},[37,167399,167400],{"class":50},"(calculate(",[37,167402,98],{"class":61},[37,167404,12776],{"class":50},[37,167406,1210],{"class":61},[37,167408,167409],{"class":50},", add))\n",[14,167411,167412],{},"这种思想在排序、回调、框架中经常出现。",[469,167414,167416],{"id":167415},"_710-mapfiltersorted","7.10 map、filter、sorted",[498,167418,167420],{"id":167419},"_7101-map","7.10.1 map",[14,167422,167423,167425],{},[34,167424,74380],{}," 对每个元素执行函数。",[27,167427,167429],{"className":29,"code":167428,"language":31,"meta":32,"style":32},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[34,167430,167431,167455,167478],{"__ignoreMap":32},[37,167432,167433,167435,167437,167439,167441,167443,167445,167447,167449,167451,167453],{"class":39,"line":40},[37,167434,164385],{"class":50},[37,167436,55],{"class":54},[37,167438,52562],{"class":50},[37,167440,332],{"class":61},[37,167442,12776],{"class":50},[37,167444,602],{"class":61},[37,167446,12776],{"class":50},[37,167448,62],{"class":61},[37,167450,12776],{"class":50},[37,167452,168],{"class":61},[37,167454,389],{"class":50},[37,167456,167457,167459,167461,167464,167466,167468,167471,167473,167475],{"class":39,"line":47},[37,167458,161591],{"class":50},[37,167460,55],{"class":54},[37,167462,167463],{"class":61}," map",[37,167465,165],{"class":50},[37,167467,167171],{"class":54},[37,167469,167470],{"class":50}," x: x ",[37,167472,967],{"class":54},[37,167474,15096],{"class":61},[37,167476,167477],{"class":50},", nums)\n",[37,167479,167480,167482,167484,167486],{"class":39,"line":104},[37,167481,30755],{"class":61},[37,167483,165],{"class":50},[37,167485,154355],{"class":61},[37,167487,166353],{"class":50},[498,167489,167491],{"id":167490},"_7102-filter","7.10.2 filter",[14,167493,167494,167496],{},[34,167495,80386],{}," 保留满足条件的元素。",[27,167498,167500],{"className":29,"code":167499,"language":31,"meta":32,"style":32},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[34,167501,167502,167530,167555],{"__ignoreMap":32},[37,167503,167504,167506,167508,167510,167512,167514,167516,167518,167520,167522,167524,167526,167528],{"class":39,"line":40},[37,167505,164385],{"class":50},[37,167507,55],{"class":54},[37,167509,52562],{"class":50},[37,167511,332],{"class":61},[37,167513,12776],{"class":50},[37,167515,602],{"class":61},[37,167517,12776],{"class":50},[37,167519,62],{"class":61},[37,167521,12776],{"class":50},[37,167523,168],{"class":61},[37,167525,12776],{"class":50},[37,167527,836],{"class":61},[37,167529,389],{"class":50},[37,167531,167532,167534,167536,167539,167541,167543,167545,167547,167549,167551,167553],{"class":39,"line":47},[37,167533,161591],{"class":50},[37,167535,55],{"class":54},[37,167537,167538],{"class":61}," filter",[37,167540,165],{"class":50},[37,167542,167171],{"class":54},[37,167544,167470],{"class":50},[37,167546,845],{"class":54},[37,167548,15096],{"class":61},[37,167550,101844],{"class":54},[37,167552,4443],{"class":61},[37,167554,167477],{"class":50},[37,167556,167557,167559,167561,167563],{"class":39,"line":104},[37,167558,30755],{"class":61},[37,167560,165],{"class":50},[37,167562,154355],{"class":61},[37,167564,166353],{"class":50},[498,167566,167568],{"id":167567},"_7103-sorted","7.10.3 sorted",[14,167570,167571,167573],{},[34,167572,165521],{}," 返回排序后的新列表。",[27,167575,167577],{"className":29,"code":167576,"language":31,"meta":32,"style":32},"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",[34,167578,167579,167587,167607,167627,167647,167651,167655,167684],{"__ignoreMap":32},[37,167580,167581,167583,167585],{"class":39,"line":40},[37,167582,160001],{"class":50},[37,167584,55],{"class":54},[37,167586,55783],{"class":50},[37,167588,167589,167591,167593,167595,167597,167599,167601,167603,167605],{"class":39,"line":47},[37,167590,148670],{"class":50},[37,167592,63015],{"class":185},[37,167594,51773],{"class":50},[37,167596,150173],{"class":185},[37,167598,12776],{"class":50},[37,167600,151757],{"class":185},[37,167602,51773],{"class":50},[37,167604,1497],{"class":61},[37,167606,5279],{"class":50},[37,167608,167609,167611,167613,167615,167617,167619,167621,167623,167625],{"class":39,"line":104},[37,167610,148670],{"class":50},[37,167612,63015],{"class":185},[37,167614,51773],{"class":50},[37,167616,151221],{"class":185},[37,167618,12776],{"class":50},[37,167620,151757],{"class":185},[37,167622,51773],{"class":50},[37,167624,1320],{"class":61},[37,167626,5279],{"class":50},[37,167628,167629,167631,167633,167635,167637,167639,167641,167643,167645],{"class":39,"line":113},[37,167630,148670],{"class":50},[37,167632,63015],{"class":185},[37,167634,51773],{"class":50},[37,167636,160016],{"class":185},[37,167638,12776],{"class":50},[37,167640,151757],{"class":185},[37,167642,51773],{"class":50},[37,167644,920],{"class":61},[37,167646,5279],{"class":50},[37,167648,167649],{"class":39,"line":189},[37,167650,389],{"class":50},[37,167652,167653],{"class":39,"line":195},[37,167654,2757],{"emptyLinePlaceholder":454},[37,167656,167657,167659,167661,167663,167666,167668,167670,167672,167674,167676,167678,167680,167682],{"class":39,"line":201},[37,167658,161591],{"class":50},[37,167660,55],{"class":54},[37,167662,163889],{"class":61},[37,167664,167665],{"class":50},"(students, ",[37,167667,154231],{"class":159},[37,167669,154234],{"class":54},[37,167671,154237],{"class":50},[37,167673,151757],{"class":185},[37,167675,112487],{"class":50},[37,167677,163813],{"class":159},[37,167679,55],{"class":54},[37,167681,31815],{"class":61},[37,167683,280],{"class":50},[37,167685,167686,167688],{"class":39,"line":207},[37,167687,30755],{"class":61},[37,167689,76920],{"class":50},[469,167691,167693],{"id":167692},"_711-闭包入门","7.11 闭包入门",[14,167695,167696],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[27,167698,167700],{"className":29,"code":167699,"language":31,"meta":32,"style":32},"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",[34,167701,167702,167712,167722,167733,167737,167744,167748,167752,167766],{"__ignoreMap":32},[37,167703,167704,167706,167709],{"class":39,"line":40},[37,167705,32285],{"class":54},[37,167707,167708],{"class":2320}," outer",[37,167710,167711],{"class":50},"(base):\n",[37,167713,167714,167716,167719],{"class":39,"line":47},[37,167715,31140],{"class":54},[37,167717,167718],{"class":2320}," inner",[37,167720,167721],{"class":50},"(num):\n",[37,167723,167724,167726,167729,167731],{"class":39,"line":104},[37,167725,15093],{"class":54},[37,167727,167728],{"class":50}," base ",[37,167730,993],{"class":54},[37,167732,166864],{"class":50},[37,167734,167735],{"class":39,"line":113},[37,167736,2757],{"emptyLinePlaceholder":454},[37,167738,167739,167741],{"class":39,"line":189},[37,167740,4440],{"class":54},[37,167742,167743],{"class":50}," inner\n",[37,167745,167746],{"class":39,"line":195},[37,167747,2757],{"emptyLinePlaceholder":454},[37,167749,167750],{"class":39,"line":201},[37,167751,2757],{"emptyLinePlaceholder":454},[37,167753,167754,167757,167759,167762,167764],{"class":39,"line":207},[37,167755,167756],{"class":50},"add_10 ",[37,167758,55],{"class":54},[37,167760,167761],{"class":50}," outer(",[37,167763,98],{"class":61},[37,167765,280],{"class":50},[37,167767,167768,167770,167773,167775],{"class":39,"line":213},[37,167769,30755],{"class":61},[37,167771,167772],{"class":50},"(add_10(",[37,167774,836],{"class":61},[37,167776,175],{"class":50},[14,167778,167779],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[469,167781,167783],{"id":167782},"_712-装饰器入门","7.12 装饰器入门",[14,167785,167786],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[27,167788,167790],{"className":29,"code":167789,"language":31,"meta":32,"style":32},"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",[34,167791,167792,167801,167810,167821,167826,167837,167841,167848,167852,167856,167861,167869,167879,167883,167887],{"__ignoreMap":32},[37,167793,167794,167796,167798],{"class":39,"line":40},[37,167795,32285],{"class":54},[37,167797,87526],{"class":2320},[37,167799,167800],{"class":50},"(func):\n",[37,167802,167803,167805,167808],{"class":39,"line":47},[37,167804,31140],{"class":54},[37,167806,167807],{"class":2320}," wrapper",[37,167809,32291],{"class":50},[37,167811,167812,167814,167816,167819],{"class":39,"line":104},[37,167813,32789],{"class":61},[37,167815,165],{"class":50},[37,167817,167818],{"class":185},"\"函数开始执行\"",[37,167820,280],{"class":50},[37,167822,167823],{"class":39,"line":113},[37,167824,167825],{"class":50},"        func()\n",[37,167827,167828,167830,167832,167835],{"class":39,"line":189},[37,167829,32789],{"class":61},[37,167831,165],{"class":50},[37,167833,167834],{"class":185},"\"函数执行结束\"",[37,167836,280],{"class":50},[37,167838,167839],{"class":39,"line":195},[37,167840,2757],{"emptyLinePlaceholder":454},[37,167842,167843,167845],{"class":39,"line":201},[37,167844,4440],{"class":54},[37,167846,167847],{"class":50}," wrapper\n",[37,167849,167850],{"class":39,"line":207},[37,167851,2757],{"emptyLinePlaceholder":454},[37,167853,167854],{"class":39,"line":213},[37,167855,2757],{"emptyLinePlaceholder":454},[37,167857,167858],{"class":39,"line":218},[37,167859,167860],{"class":2320},"@log\n",[37,167862,167863,167865,167867],{"class":39,"line":227},[37,167864,32285],{"class":54},[37,167866,161281],{"class":2320},[37,167868,32291],{"class":50},[37,167870,167871,167873,167875,167877],{"class":39,"line":232},[37,167872,31638],{"class":61},[37,167874,165],{"class":50},[37,167876,6192],{"class":185},[37,167878,280],{"class":50},[37,167880,167881],{"class":39,"line":238},[37,167882,2757],{"emptyLinePlaceholder":454},[37,167884,167885],{"class":39,"line":244},[37,167886,2757],{"emptyLinePlaceholder":454},[37,167888,167889],{"class":39,"line":250},[37,167890,161316],{"class":50},[14,167892,158559],{},[27,167894,167896],{"className":29,"code":167895,"language":31,"meta":32,"style":32},"say_hello = log(say_hello)\n",[34,167897,167898],{"__ignoreMap":32},[37,167899,167900,167903,167905],{"class":39,"line":40},[37,167901,167902],{"class":50},"say_hello ",[37,167904,55],{"class":54},[37,167906,167907],{"class":50}," log(say_hello)\n",[14,167909,167910],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[469,167912,167914],{"id":167913},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[27,167916,167918],{"className":29,"code":167917,"language":31,"meta":32,"style":32},"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",[34,167919,167920,167928,167945,167955,167974,167984,167991,167995,168001,168005,168009,168013,168021,168031,168035,168039],{"__ignoreMap":32},[37,167921,167922,167924,167926],{"class":39,"line":40},[37,167923,32285],{"class":54},[37,167925,87526],{"class":2320},[37,167927,167800],{"class":50},[37,167929,167930,167932,167934,167936,167938,167941,167943],{"class":39,"line":47},[37,167931,31140],{"class":54},[37,167933,167807],{"class":2320},[37,167935,165],{"class":50},[37,167937,967],{"class":54},[37,167939,167940],{"class":50},"args, ",[37,167942,11002],{"class":54},[37,167944,166951],{"class":50},[37,167946,167947,167949,167951,167953],{"class":39,"line":104},[37,167948,32789],{"class":61},[37,167950,165],{"class":50},[37,167952,167818],{"class":185},[37,167954,280],{"class":50},[37,167956,167957,167960,167962,167965,167967,167969,167971],{"class":39,"line":113},[37,167958,167959],{"class":50},"        result ",[37,167961,55],{"class":54},[37,167963,167964],{"class":50}," func(",[37,167966,967],{"class":54},[37,167968,167940],{"class":50},[37,167970,11002],{"class":54},[37,167972,167973],{"class":50},"kwargs)\n",[37,167975,167976,167978,167980,167982],{"class":39,"line":189},[37,167977,32789],{"class":61},[37,167979,165],{"class":50},[37,167981,167834],{"class":185},[37,167983,280],{"class":50},[37,167985,167986,167988],{"class":39,"line":195},[37,167987,15093],{"class":54},[37,167989,167990],{"class":50}," result\n",[37,167992,167993],{"class":39,"line":201},[37,167994,2757],{"emptyLinePlaceholder":454},[37,167996,167997,167999],{"class":39,"line":207},[37,167998,4440],{"class":54},[37,168000,167847],{"class":50},[37,168002,168003],{"class":39,"line":213},[37,168004,2757],{"emptyLinePlaceholder":454},[37,168006,168007],{"class":39,"line":218},[37,168008,2757],{"emptyLinePlaceholder":454},[37,168010,168011],{"class":39,"line":227},[37,168012,167860],{"class":2320},[37,168014,168015,168017,168019],{"class":39,"line":232},[37,168016,32285],{"class":54},[37,168018,5558],{"class":2320},[37,168020,151378],{"class":50},[37,168022,168023,168025,168027,168029],{"class":39,"line":238},[37,168024,4440],{"class":54},[37,168026,11210],{"class":50},[37,168028,993],{"class":54},[37,168030,151389],{"class":50},[37,168032,168033],{"class":39,"line":244},[37,168034,2757],{"emptyLinePlaceholder":454},[37,168036,168037],{"class":39,"line":250},[37,168038,2757],{"emptyLinePlaceholder":454},[37,168040,168041,168043,168045,168047,168049,168051],{"class":39,"line":256},[37,168042,30755],{"class":61},[37,168044,166885],{"class":50},[37,168046,98],{"class":61},[37,168048,12776],{"class":50},[37,168050,1210],{"class":61},[37,168052,175],{"class":50},[14,168054,168055,168056,101303,168058,168060],{},"这个写法使用 ",[34,168057,166817],{},[34,168059,166932],{}," 接收原函数的所有参数。",[469,168062,168064],{"id":168063},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,168066,123577],{},[481,168068,168069,168072,168075],{},[484,168070,168071],{},"给定一组学生数据。",[484,168073,168074],{},"封装函数，根据传入规则筛选学生。",[484,168076,168077],{},"筛选及格、优秀、未成年学生。",[14,168079,10376],{},[27,168081,168083],{"className":29,"code":168082,"language":31,"meta":32,"style":32},"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",[34,168084,168085,168093,168121,168149,168177,168181,168185,168189,168199,168207,168217,168224,168229,168235,168239,168243,168267,168290,168313,168317,168324,168331],{"__ignoreMap":32},[37,168086,168087,168089,168091],{"class":39,"line":40},[37,168088,160001],{"class":50},[37,168090,55],{"class":54},[37,168092,55783],{"class":50},[37,168094,168095,168097,168099,168101,168103,168105,168107,168109,168111,168113,168115,168117,168119],{"class":39,"line":47},[37,168096,148670],{"class":50},[37,168098,63015],{"class":185},[37,168100,51773],{"class":50},[37,168102,150173],{"class":185},[37,168104,12776],{"class":50},[37,168106,69460],{"class":185},[37,168108,51773],{"class":50},[37,168110,1160],{"class":61},[37,168112,12776],{"class":50},[37,168114,151757],{"class":185},[37,168116,51773],{"class":50},[37,168118,1497],{"class":61},[37,168120,5279],{"class":50},[37,168122,168123,168125,168127,168129,168131,168133,168135,168137,168139,168141,168143,168145,168147],{"class":39,"line":104},[37,168124,148670],{"class":50},[37,168126,63015],{"class":185},[37,168128,51773],{"class":50},[37,168130,151221],{"class":185},[37,168132,12776],{"class":50},[37,168134,69460],{"class":185},[37,168136,51773],{"class":50},[37,168138,1135],{"class":61},[37,168140,12776],{"class":50},[37,168142,151757],{"class":185},[37,168144,51773],{"class":50},[37,168146,1320],{"class":61},[37,168148,5279],{"class":50},[37,168150,168151,168153,168155,168157,168159,168161,168163,168165,168167,168169,168171,168173,168175],{"class":39,"line":113},[37,168152,148670],{"class":50},[37,168154,63015],{"class":185},[37,168156,51773],{"class":50},[37,168158,160016],{"class":185},[37,168160,12776],{"class":50},[37,168162,69460],{"class":185},[37,168164,51773],{"class":50},[37,168166,1185],{"class":61},[37,168168,12776],{"class":50},[37,168170,151757],{"class":185},[37,168172,51773],{"class":50},[37,168174,1391],{"class":61},[37,168176,5279],{"class":50},[37,168178,168179],{"class":39,"line":189},[37,168180,389],{"class":50},[37,168182,168183],{"class":39,"line":195},[37,168184,2757],{"emptyLinePlaceholder":454},[37,168186,168187],{"class":39,"line":201},[37,168188,2757],{"emptyLinePlaceholder":454},[37,168190,168191,168193,168196],{"class":39,"line":207},[37,168192,32285],{"class":54},[37,168194,168195],{"class":2320}," filter_students",[37,168197,168198],{"class":50},"(students, condition):\n",[37,168200,168201,168203,168205],{"class":39,"line":213},[37,168202,161508],{"class":50},[37,168204,55],{"class":54},[37,168206,52174],{"class":50},[37,168208,168209,168211,168213,168215],{"class":39,"line":218},[37,168210,3551],{"class":54},[37,168212,152422],{"class":50},[37,168214,26385],{"class":54},[37,168216,152427],{"class":50},[37,168218,168219,168221],{"class":39,"line":227},[37,168220,2854],{"class":54},[37,168222,168223],{"class":50}," condition(student):\n",[37,168225,168226],{"class":39,"line":232},[37,168227,168228],{"class":50},"            result.append(student)\n",[37,168230,168231,168233],{"class":39,"line":238},[37,168232,4440],{"class":54},[37,168234,167990],{"class":50},[37,168236,168237],{"class":39,"line":244},[37,168238,2757],{"emptyLinePlaceholder":454},[37,168240,168241],{"class":39,"line":250},[37,168242,2757],{"emptyLinePlaceholder":454},[37,168244,168245,168247,168249,168252,168254,168257,168259,168261,168263,168265],{"class":39,"line":256},[37,168246,165986],{"class":50},[37,168248,55],{"class":54},[37,168250,168251],{"class":50}," filter_students(students, ",[37,168253,167171],{"class":54},[37,168255,168256],{"class":50}," s: s[",[37,168258,151757],{"class":185},[37,168260,4793],{"class":50},[37,168262,2075],{"class":54},[37,168264,158122],{"class":61},[37,168266,280],{"class":50},[37,168268,168269,168272,168274,168276,168278,168280,168282,168284,168286,168288],{"class":39,"line":261},[37,168270,168271],{"class":50},"excellent ",[37,168273,55],{"class":54},[37,168275,168251],{"class":50},[37,168277,167171],{"class":54},[37,168279,168256],{"class":50},[37,168281,151757],{"class":185},[37,168283,4793],{"class":50},[37,168285,2075],{"class":54},[37,168287,158073],{"class":61},[37,168289,280],{"class":50},[37,168291,168292,168295,168297,168299,168301,168303,168305,168307,168309,168311],{"class":39,"line":267},[37,168293,168294],{"class":50},"under_age ",[37,168296,55],{"class":54},[37,168298,168251],{"class":50},[37,168300,167171],{"class":54},[37,168302,168256],{"class":50},[37,168304,69460],{"class":185},[37,168306,4793],{"class":50},[37,168308,1418],{"class":54},[37,168310,156570],{"class":61},[37,168312,280],{"class":50},[37,168314,168315],{"class":39,"line":283},[37,168316,2757],{"emptyLinePlaceholder":454},[37,168318,168319,168321],{"class":39,"line":288},[37,168320,30755],{"class":61},[37,168322,168323],{"class":50},"(passed)\n",[37,168325,168326,168328],{"class":39,"line":294},[37,168327,30755],{"class":61},[37,168329,168330],{"class":50},"(excellent)\n",[37,168332,168333,168335],{"class":39,"line":300},[37,168334,30755],{"class":61},[37,168336,168337],{"class":50},"(under_age)\n",[469,168339,168341],{"id":168340},"_715-易错点","7.15 易错点",[481,168343,168344,168347,168355,168360,168371],{},[484,168345,168346],{},"默认参数不要写可变对象。",[484,168348,168349,168351,168352,168354],{},[34,168350,166817],{}," 是元组，",[34,168353,166932],{}," 是字典。",[484,168356,168357,168359],{},[34,168358,167171],{}," 只适合简单表达式。",[484,168361,168362,101303,168364,168366,168367,168370],{},[34,168363,74380],{},[34,168365,80386],{}," 的结果是迭代器，常用 ",[34,168368,168369],{},"list()"," 转换查看。",[484,168372,168373],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[469,168375,168377],{"id":168376},"_716-本章练习","7.16 本章练习",[481,168379,168380,168387,168393,168398,168403],{},[484,168381,168382,168383,168386],{},"写函数 ",[34,168384,168385],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[484,168388,168382,168389,168392],{},[34,168390,168391],{},"print_user(**kwargs)","，输出用户所有字段。",[484,168394,104651,168395,168397],{},[34,168396,167171],{}," 对学生列表按年龄排序。",[484,168399,104651,168400,168402],{},[34,168401,80386],{}," 找出成绩不及格的学生。",[484,168404,168405],{},"写一个装饰器，统计函数执行前后的提示信息。",[446,168407,168408],{},"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":32,"searchDepth":47,"depth":47,"links":168410},[168411,168412,168413,168414,168415,168416,168420,168421,168422,168423,168428,168429,168430,168431,168432,168433],{"id":166269,"depth":47,"text":166270},{"id":166383,"depth":47,"text":166384},{"id":166472,"depth":47,"text":166473},{"id":166534,"depth":47,"text":166535},{"id":166680,"depth":47,"text":166681},{"id":166807,"depth":47,"text":166808,"children":168417},[168418,168419],{"id":166811,"depth":104,"text":166812},{"id":166926,"depth":104,"text":166927},{"id":167007,"depth":47,"text":167008},{"id":167165,"depth":47,"text":167166},{"id":167333,"depth":47,"text":167334},{"id":167415,"depth":47,"text":167416,"children":168424},[168425,168426,168427],{"id":167419,"depth":104,"text":167420},{"id":167490,"depth":104,"text":167491},{"id":167567,"depth":104,"text":167568},{"id":167692,"depth":47,"text":167693},{"id":167782,"depth":47,"text":167783},{"id":167913,"depth":47,"text":167914},{"id":168063,"depth":47,"text":168064},{"id":168340,"depth":47,"text":168341},{"id":168376,"depth":47,"text":168377},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166261,"description":451},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168440,"title":168441,"body":168442,"description":451,"extension":452,"meta":170961,"navigation":454,"path":170962,"seo":170963,"stem":170964,"__hash__":170965},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168443,"toc":170936},[168444,168447,168451,168454,168457,168488,168492,168496,168499,168526,168530,168533,168584,168587,168602,168605,168640,168644,168646,168670,168673,168733,168737,168741,168744,168801,168804,168824,168828,168831,168894,168898,168901,168957,168964,168988,168992,168995,169058,169062,169067,169118,169121,169125,169130,169197,169200,169282,169286,169291,169342,169345,169349,169352,169355,169363,169366,169412,169415,169461,169465,169471,169515,169518,169564,169567,169607,169610,169671,169675,169678,169768,169771,169913,169916,169983,169987,169990,169993,170134,170137,170215,170218,170394,170398,170400,170411,170413,170612,170616,170860,170864,170898,170902,170933],[10,168445,168441],{"id":168446},"_8-文件操作",[469,168448,168450],{"id":168449},"_81-文件操作的意义","8.1 文件操作的意义",[14,168452,168453],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168455,168456],{},"常见文件类型：",[481,168458,168459,168465,168471,168477,168483],{},[484,168460,168461,168464],{},[34,168462,168463],{},".txt","：普通文本。",[484,168466,168467,168470],{},[34,168468,168469],{},".csv","：表格文本。",[484,168472,168473,168476],{},[34,168474,168475],{},".json","：结构化数据。",[484,168478,168479,168482],{},[34,168480,168481],{},".log","：日志文件。",[484,168484,168485,168487],{},[34,168486,146637],{},"：Python 源代码。",[469,168489,168491],{"id":168490},"_82-路径","8.2 路径",[498,168493,168495],{"id":168494},"_821-相对路径","8.2.1 相对路径",[14,168497,168498],{},"相对当前运行目录：",[27,168500,168502],{"className":29,"code":168501,"language":31,"meta":32,"style":32},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[34,168503,168504],{"__ignoreMap":32},[37,168505,168506,168508,168510,168512,168514,168516,168518,168520,168522,168524],{"class":39,"line":40},[37,168507,87250],{"class":61},[37,168509,165],{"class":50},[37,168511,147081],{"class":185},[37,168513,12776],{"class":50},[37,168515,147086],{"class":185},[37,168517,12776],{"class":50},[37,168519,147091],{"class":159},[37,168521,55],{"class":54},[37,168523,147096],{"class":185},[37,168525,280],{"class":50},[498,168527,168529],{"id":168528},"_822-绝对路径","8.2.2 绝对路径",[14,168531,168532],{},"从根目录或盘符开始：",[27,168534,168536],{"className":29,"code":168535,"language":31,"meta":32,"style":32},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[34,168537,168538,168561],{"__ignoreMap":32},[37,168539,168540,168542,168544,168547,168549,168551,168553,168555,168557,168559],{"class":39,"line":40},[37,168541,87250],{"class":61},[37,168543,165],{"class":50},[37,168545,168546],{"class":185},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[37,168548,12776],{"class":50},[37,168550,147086],{"class":185},[37,168552,12776],{"class":50},[37,168554,147091],{"class":159},[37,168556,55],{"class":54},[37,168558,147096],{"class":185},[37,168560,280],{"class":50},[37,168562,168563,168565,168567,168570,168572,168574,168576,168578,168580,168582],{"class":39,"line":47},[37,168564,87250],{"class":61},[37,168566,165],{"class":50},[37,168568,168569],{"class":185},"\"D:\u002Fdata\u002Fdata.txt\"",[37,168571,12776],{"class":50},[37,168573,147086],{"class":185},[37,168575,12776],{"class":50},[37,168577,147091],{"class":159},[37,168579,55],{"class":54},[37,168581,147096],{"class":185},[37,168583,280],{"class":50},[14,168585,168586],{},"Windows 路径建议写成：",[27,168588,168590],{"className":29,"code":168589,"language":31,"meta":32,"style":32},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[34,168591,168592],{"__ignoreMap":32},[37,168593,168594,168597,168599],{"class":39,"line":40},[37,168595,168596],{"class":50},"path ",[37,168598,55],{"class":54},[37,168600,168601],{"class":185}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168603,168604],{},"或原始字符串：",[27,168606,168608],{"className":29,"code":168607,"language":31,"meta":32,"style":32},"path = r\"D:\\data\\data.txt\"\n",[34,168609,168610],{"__ignoreMap":32},[37,168611,168612,168614,168616,168618,168620,168623,168626,168629,168631,168633,168635,168638],{"class":39,"line":40},[37,168613,168596],{"class":50},[37,168615,55],{"class":54},[37,168617,17462],{"class":54},[37,168619,772],{"class":185},[37,168621,168622],{"class":48313},"D:",[37,168624,168625],{"class":61},"\\d",[37,168627,168628],{"class":48313},"ata",[37,168630,168625],{"class":61},[37,168632,168628],{"class":48313},[37,168634,1068],{"class":61},[37,168636,168637],{"class":48313},"txt",[37,168639,25475],{"class":185},[469,168641,168643],{"id":168642},"_83-open函数","8.3 open函数",[14,168645,5530],{},[27,168647,168649],{"className":29,"code":168648,"language":31,"meta":32,"style":32},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[34,168650,168651],{"__ignoreMap":32},[37,168652,168653,168655,168657,168659,168662,168664,168666,168668],{"class":39,"line":40},[37,168654,45691],{"class":159},[37,168656,13905],{"class":54},[37,168658,147076],{"class":61},[37,168660,168661],{"class":50},"(文件路径, 打开模式, ",[37,168663,147091],{"class":159},[37,168665,55],{"class":54},[37,168667,147096],{"class":185},[37,168669,280],{"class":50},[14,168671,168672],{},"常见模式：",[661,168674,168675,168684],{},[664,168676,168677],{},[667,168678,168679,168682],{},[670,168680,168681],{},"模式",[670,168683,26211],{},[708,168685,168686,168695,168704,168713,168723],{},[667,168687,168688,168692],{},[713,168689,168690],{},[34,168691,1180],{},[713,168693,168694],{},"只读，文件不存在会报错",[667,168696,168697,168701],{},[713,168698,168699],{},[34,168700,1304],{},[713,168702,168703],{},"只写，文件不存在会创建，存在会清空",[667,168705,168706,168710],{},[713,168707,168708],{},[34,168709,51],{},[713,168711,168712],{},"追加，文件不存在会创建",[667,168714,168715,168720],{},[713,168716,168717],{},[34,168718,168719],{},"rb",[713,168721,168722],{},"二进制只读",[667,168724,168725,168730],{},[713,168726,168727],{},[34,168728,168729],{},"wb",[713,168731,168732],{},"二进制只写",[469,168734,168736],{"id":168735},"_84-读取文件","8.4 读取文件",[498,168738,168740],{"id":168739},"_841-read","8.4.1 read",[14,168742,168743],{},"一次读取全部内容：",[27,168745,168747],{"className":29,"code":168746,"language":31,"meta":32,"style":32},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[34,168748,168749,168775,168787,168794],{"__ignoreMap":32},[37,168750,168751,168753,168755,168757,168759,168761,168763,168765,168767,168769,168771,168773],{"class":39,"line":40},[37,168752,45691],{"class":159},[37,168754,13905],{"class":54},[37,168756,147076],{"class":61},[37,168758,165],{"class":50},[37,168760,147081],{"class":185},[37,168762,12776],{"class":50},[37,168764,147086],{"class":185},[37,168766,12776],{"class":50},[37,168768,147091],{"class":159},[37,168770,55],{"class":54},[37,168772,147096],{"class":185},[37,168774,280],{"class":50},[37,168776,168777,168780,168782,168784],{"class":39,"line":47},[37,168778,168779],{"class":50},"content ",[37,168781,55],{"class":54},[37,168783,148438],{"class":159},[37,168785,168786],{"class":50},".read()\n",[37,168788,168789,168791],{"class":39,"line":104},[37,168790,30755],{"class":61},[37,168792,168793],{"class":50},"(content)\n",[37,168795,168796,168798],{"class":39,"line":113},[37,168797,45691],{"class":159},[37,168799,168800],{"class":50},".close()\n",[14,168802,168803],{},"可以指定读取字符数：",[27,168805,168807],{"className":29,"code":168806,"language":31,"meta":32,"style":32},"content = file.read(10)\n",[34,168808,168809],{"__ignoreMap":32},[37,168810,168811,168813,168815,168817,168820,168822],{"class":39,"line":40},[37,168812,168779],{"class":50},[37,168814,55],{"class":54},[37,168816,148438],{"class":159},[37,168818,168819],{"class":50},".read(",[37,168821,98],{"class":61},[37,168823,280],{"class":50},[498,168825,168827],{"id":168826},"_842-readline","8.4.2 readline",[14,168829,168830],{},"一次读取一行：",[27,168832,168834],{"className":29,"code":168833,"language":31,"meta":32,"style":32},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[34,168835,168836,168862,168866,168877,168884,168888],{"__ignoreMap":32},[37,168837,168838,168840,168842,168844,168846,168848,168850,168852,168854,168856,168858,168860],{"class":39,"line":40},[37,168839,45691],{"class":159},[37,168841,13905],{"class":54},[37,168843,147076],{"class":61},[37,168845,165],{"class":50},[37,168847,147081],{"class":185},[37,168849,12776],{"class":50},[37,168851,147086],{"class":185},[37,168853,12776],{"class":50},[37,168855,147091],{"class":159},[37,168857,55],{"class":54},[37,168859,147096],{"class":185},[37,168861,280],{"class":50},[37,168863,168864],{"class":39,"line":47},[37,168865,2757],{"emptyLinePlaceholder":454},[37,168867,168868,168870,168872,168874],{"class":39,"line":104},[37,168869,147537],{"class":50},[37,168871,55],{"class":54},[37,168873,148438],{"class":159},[37,168875,168876],{"class":50},".readline()\n",[37,168878,168879,168881],{"class":39,"line":113},[37,168880,30755],{"class":61},[37,168882,168883],{"class":50},"(line)\n",[37,168885,168886],{"class":39,"line":189},[37,168887,2757],{"emptyLinePlaceholder":454},[37,168889,168890,168892],{"class":39,"line":195},[37,168891,45691],{"class":159},[37,168893,168800],{"class":50},[498,168895,168897],{"id":168896},"_843-readlines","8.4.3 readlines",[14,168899,168900],{},"读取所有行，返回列表：",[27,168902,168904],{"className":29,"code":168903,"language":31,"meta":32,"style":32},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[34,168905,168906,168932,168944,168951],{"__ignoreMap":32},[37,168907,168908,168910,168912,168914,168916,168918,168920,168922,168924,168926,168928,168930],{"class":39,"line":40},[37,168909,45691],{"class":159},[37,168911,13905],{"class":54},[37,168913,147076],{"class":61},[37,168915,165],{"class":50},[37,168917,147081],{"class":185},[37,168919,12776],{"class":50},[37,168921,147086],{"class":185},[37,168923,12776],{"class":50},[37,168925,147091],{"class":159},[37,168927,55],{"class":54},[37,168929,147096],{"class":185},[37,168931,280],{"class":50},[37,168933,168934,168937,168939,168941],{"class":39,"line":47},[37,168935,168936],{"class":50},"lines ",[37,168938,55],{"class":54},[37,168940,148438],{"class":159},[37,168942,168943],{"class":50},".readlines()\n",[37,168945,168946,168948],{"class":39,"line":104},[37,168947,30755],{"class":61},[37,168949,168950],{"class":50},"(lines)\n",[37,168952,168953,168955],{"class":39,"line":113},[37,168954,45691],{"class":159},[37,168956,168800],{"class":50},[14,168958,168959,168960,168963],{},"每一行通常带有换行符，可以用 ",[34,168961,168962],{},"strip()"," 去掉：",[27,168965,168967],{"className":29,"code":168966,"language":31,"meta":32,"style":32},"for line in lines:\n    print(line.strip())\n",[34,168968,168969,168981],{"__ignoreMap":32},[37,168970,168971,168973,168976,168978],{"class":39,"line":40},[37,168972,3375],{"class":54},[37,168974,168975],{"class":50}," line ",[37,168977,26385],{"class":54},[37,168979,168980],{"class":50}," lines:\n",[37,168982,168983,168985],{"class":39,"line":47},[37,168984,31638],{"class":61},[37,168986,168987],{"class":50},"(line.strip())\n",[498,168989,168991],{"id":168990},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168993,168994],{},"推荐读取大文件时使用：",[27,168996,168998],{"className":29,"code":168997,"language":31,"meta":32,"style":32},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[34,168999,169000,169026,169030,169042,169048,169052],{"__ignoreMap":32},[37,169001,169002,169004,169006,169008,169010,169012,169014,169016,169018,169020,169022,169024],{"class":39,"line":40},[37,169003,45691],{"class":159},[37,169005,13905],{"class":54},[37,169007,147076],{"class":61},[37,169009,165],{"class":50},[37,169011,147081],{"class":185},[37,169013,12776],{"class":50},[37,169015,147086],{"class":185},[37,169017,12776],{"class":50},[37,169019,147091],{"class":159},[37,169021,55],{"class":54},[37,169023,147096],{"class":185},[37,169025,280],{"class":50},[37,169027,169028],{"class":39,"line":47},[37,169029,2757],{"emptyLinePlaceholder":454},[37,169031,169032,169034,169036,169038,169040],{"class":39,"line":104},[37,169033,3375],{"class":54},[37,169035,168975],{"class":50},[37,169037,26385],{"class":54},[37,169039,148438],{"class":159},[37,169041,4089],{"class":50},[37,169043,169044,169046],{"class":39,"line":113},[37,169045,31638],{"class":61},[37,169047,168987],{"class":50},[37,169049,169050],{"class":39,"line":189},[37,169051,2757],{"emptyLinePlaceholder":454},[37,169053,169054,169056],{"class":39,"line":195},[37,169055,45691],{"class":159},[37,169057,168800],{"class":50},[469,169059,169061],{"id":169060},"_85-with语句","8.5 with语句",[14,169063,169064,169066],{},[34,169065,108118],{}," 会自动关闭文件，推荐使用。",[27,169068,169070],{"className":29,"code":169069,"language":31,"meta":32,"style":32},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[34,169071,169072,169102,169112],{"__ignoreMap":32},[37,169073,169074,169076,169078,169080,169082,169084,169086,169088,169090,169092,169094,169096,169098,169100],{"class":39,"line":40},[37,169075,108118],{"class":54},[37,169077,147076],{"class":61},[37,169079,165],{"class":50},[37,169081,147081],{"class":185},[37,169083,12776],{"class":50},[37,169085,147086],{"class":185},[37,169087,12776],{"class":50},[37,169089,147091],{"class":159},[37,169091,55],{"class":54},[37,169093,147096],{"class":185},[37,169095,14055],{"class":50},[37,169097,31722],{"class":54},[37,169099,148438],{"class":159},[37,169101,4089],{"class":50},[37,169103,169104,169106,169108,169110],{"class":39,"line":47},[37,169105,147108],{"class":50},[37,169107,55],{"class":54},[37,169109,148438],{"class":159},[37,169111,168786],{"class":50},[37,169113,169114,169116],{"class":39,"line":104},[37,169115,31638],{"class":61},[37,169117,168793],{"class":50},[14,169119,169120],{},"等价于打开文件、读取、最后关闭，但更安全。",[469,169122,169124],{"id":169123},"_86-写入文件","8.6 写入文件",[14,169126,169127,169129],{},[34,169128,1304],{}," 模式会清空原文件。",[27,169131,169133],{"className":29,"code":169132,"language":31,"meta":32,"style":32},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[34,169134,169135,169165,169182],{"__ignoreMap":32},[37,169136,169137,169139,169141,169143,169145,169147,169149,169151,169153,169155,169157,169159,169161,169163],{"class":39,"line":40},[37,169138,108118],{"class":54},[37,169140,147076],{"class":61},[37,169142,165],{"class":50},[37,169144,147081],{"class":185},[37,169146,12776],{"class":50},[37,169148,152261],{"class":185},[37,169150,12776],{"class":50},[37,169152,147091],{"class":159},[37,169154,55],{"class":54},[37,169156,147096],{"class":185},[37,169158,14055],{"class":50},[37,169160,31722],{"class":54},[37,169162,148438],{"class":159},[37,169164,4089],{"class":50},[37,169166,169167,169170,169173,169176,169178,169180],{"class":39,"line":47},[37,169168,169169],{"class":159},"    file",[37,169171,169172],{"class":50},".write(",[37,169174,169175],{"class":185},"\"hello",[37,169177,156810],{"class":61},[37,169179,772],{"class":185},[37,169181,280],{"class":50},[37,169183,169184,169186,169188,169191,169193,169195],{"class":39,"line":104},[37,169185,169169],{"class":159},[37,169187,169172],{"class":50},[37,169189,169190],{"class":185},"\"python",[37,169192,156810],{"class":61},[37,169194,772],{"class":185},[37,169196,280],{"class":50},[14,169198,169199],{},"写入多行：",[27,169201,169203],{"className":29,"code":169202,"language":31,"meta":32,"style":32},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[34,169204,169205,169240,169244,169275],{"__ignoreMap":32},[37,169206,169207,169209,169211,169213,169216,169218,169220,169222,169225,169227,169229,169231,169234,169236,169238],{"class":39,"line":40},[37,169208,168936],{"class":50},[37,169210,55],{"class":54},[37,169212,52562],{"class":50},[37,169214,169215],{"class":185},"\"小明,18",[37,169217,156810],{"class":61},[37,169219,772],{"class":185},[37,169221,12776],{"class":50},[37,169223,169224],{"class":185},"\"小红,17",[37,169226,156810],{"class":61},[37,169228,772],{"class":185},[37,169230,12776],{"class":50},[37,169232,169233],{"class":185},"\"小刚,19",[37,169235,156810],{"class":61},[37,169237,772],{"class":185},[37,169239,389],{"class":50},[37,169241,169242],{"class":39,"line":47},[37,169243,2757],{"emptyLinePlaceholder":454},[37,169245,169246,169248,169250,169252,169255,169257,169259,169261,169263,169265,169267,169269,169271,169273],{"class":39,"line":104},[37,169247,108118],{"class":54},[37,169249,147076],{"class":61},[37,169251,165],{"class":50},[37,169253,169254],{"class":185},"\"students.txt\"",[37,169256,12776],{"class":50},[37,169258,152261],{"class":185},[37,169260,12776],{"class":50},[37,169262,147091],{"class":159},[37,169264,55],{"class":54},[37,169266,147096],{"class":185},[37,169268,14055],{"class":50},[37,169270,31722],{"class":54},[37,169272,148438],{"class":159},[37,169274,4089],{"class":50},[37,169276,169277,169279],{"class":39,"line":113},[37,169278,169169],{"class":159},[37,169280,169281],{"class":50},".writelines(lines)\n",[469,169283,169285],{"id":169284},"_87-追加文件","8.7 追加文件",[14,169287,169288,169290],{},[34,169289,51],{}," 模式不会清空原内容，而是在末尾追加。",[27,169292,169294],{"className":29,"code":169293,"language":31,"meta":32,"style":32},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[34,169295,169296,169327],{"__ignoreMap":32},[37,169297,169298,169300,169302,169304,169307,169309,169311,169313,169315,169317,169319,169321,169323,169325],{"class":39,"line":40},[37,169299,108118],{"class":54},[37,169301,147076],{"class":61},[37,169303,165],{"class":50},[37,169305,169306],{"class":185},"\"log.txt\"",[37,169308,12776],{"class":50},[37,169310,165610],{"class":185},[37,169312,12776],{"class":50},[37,169314,147091],{"class":159},[37,169316,55],{"class":54},[37,169318,147096],{"class":185},[37,169320,14055],{"class":50},[37,169322,31722],{"class":54},[37,169324,148438],{"class":159},[37,169326,4089],{"class":50},[37,169328,169329,169331,169333,169336,169338,169340],{"class":39,"line":47},[37,169330,169169],{"class":159},[37,169332,169172],{"class":50},[37,169334,169335],{"class":185},"\"程序启动",[37,169337,156810],{"class":61},[37,169339,772],{"class":185},[37,169341,280],{"class":50},[14,169343,169344],{},"日志类文件常用追加模式。",[469,169346,169348],{"id":169347},"_88-文件编码","8.8 文件编码",[14,169350,169351],{},"编码决定文字如何保存为字节。",[14,169353,169354],{},"常见编码：",[481,169356,169357,169360],{},[484,169358,169359],{},"UTF-8：推荐。",[484,169361,169362],{},"GBK：部分 Windows 中文文件常见。",[14,169364,169365],{},"读取文件乱码时，可以尝试：",[27,169367,169369],{"className":29,"code":169368,"language":31,"meta":32,"style":32},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[34,169370,169371,169402],{"__ignoreMap":32},[37,169372,169373,169375,169377,169379,169381,169383,169385,169387,169389,169391,169394,169396,169398,169400],{"class":39,"line":40},[37,169374,108118],{"class":54},[37,169376,147076],{"class":61},[37,169378,165],{"class":50},[37,169380,147081],{"class":185},[37,169382,12776],{"class":50},[37,169384,147086],{"class":185},[37,169386,12776],{"class":50},[37,169388,147091],{"class":159},[37,169390,55],{"class":54},[37,169392,169393],{"class":185},"\"gbk\"",[37,169395,14055],{"class":50},[37,169397,31722],{"class":54},[37,169399,148438],{"class":159},[37,169401,4089],{"class":50},[37,169403,169404,169406,169408,169410],{"class":39,"line":47},[37,169405,147108],{"class":50},[37,169407,55],{"class":54},[37,169409,148438],{"class":159},[37,169411,168786],{"class":50},[14,169413,169414],{},"写文件时建议统一 UTF-8：",[27,169416,169418],{"className":29,"code":169417,"language":31,"meta":32,"style":32},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[34,169419,169420,169450],{"__ignoreMap":32},[37,169421,169422,169424,169426,169428,169430,169432,169434,169436,169438,169440,169442,169444,169446,169448],{"class":39,"line":40},[37,169423,108118],{"class":54},[37,169425,147076],{"class":61},[37,169427,165],{"class":50},[37,169429,147081],{"class":185},[37,169431,12776],{"class":50},[37,169433,152261],{"class":185},[37,169435,12776],{"class":50},[37,169437,147091],{"class":159},[37,169439,55],{"class":54},[37,169441,147096],{"class":185},[37,169443,14055],{"class":50},[37,169445,31722],{"class":54},[37,169447,148438],{"class":159},[37,169449,4089],{"class":50},[37,169451,169452,169454,169456,169459],{"class":39,"line":47},[37,169453,169169],{"class":159},[37,169455,169172],{"class":50},[37,169457,169458],{"class":185},"\"中文内容\"",[37,169460,280],{"class":50},[469,169462,169464],{"id":169463},"_89-pathlib","8.9 pathlib",[14,169466,169467,169470],{},[34,169468,169469],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[27,169472,169474],{"className":29,"code":169473,"language":31,"meta":32,"style":32},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[34,169475,169476,169486,169490,169508],{"__ignoreMap":32},[37,169477,169478,169480,169482,169484],{"class":39,"line":40},[37,169479,31076],{"class":54},[37,169481,108596],{"class":50},[37,169483,30732],{"class":54},[37,169485,108601],{"class":50},[37,169487,169488],{"class":39,"line":47},[37,169489,2757],{"emptyLinePlaceholder":454},[37,169491,169492,169494,169496,169498,169501,169503,169505],{"class":39,"line":104},[37,169493,168596],{"class":50},[37,169495,55],{"class":54},[37,169497,108830],{"class":50},[37,169499,169500],{"class":185},"\"data\"",[37,169502,14055],{"class":50},[37,169504,1094],{"class":54},[37,169506,169507],{"class":185}," \"students.txt\"\n",[37,169509,169510,169512],{"class":39,"line":113},[37,169511,30755],{"class":61},[37,169513,169514],{"class":50},"(path)\n",[14,169516,169517],{},"创建目录：",[27,169519,169521],{"className":29,"code":169520,"language":31,"meta":32,"style":32},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[34,169522,169523,169533,169537,169550],{"__ignoreMap":32},[37,169524,169525,169527,169529,169531],{"class":39,"line":40},[37,169526,31076],{"class":54},[37,169528,108596],{"class":50},[37,169530,30732],{"class":54},[37,169532,108601],{"class":50},[37,169534,169535],{"class":39,"line":47},[37,169536,2757],{"emptyLinePlaceholder":454},[37,169538,169539,169542,169544,169546,169548],{"class":39,"line":104},[37,169540,169541],{"class":50},"data_dir ",[37,169543,55],{"class":54},[37,169545,108830],{"class":50},[37,169547,169500],{"class":185},[37,169549,280],{"class":50},[37,169551,169552,169555,169558,169560,169562],{"class":39,"line":113},[37,169553,169554],{"class":50},"data_dir.mkdir(",[37,169556,169557],{"class":159},"exist_ok",[37,169559,55],{"class":54},[37,169561,31815],{"class":61},[37,169563,280],{"class":50},[14,169565,169566],{},"判断文件是否存在：",[27,169568,169570],{"className":29,"code":169569,"language":31,"meta":32,"style":32},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[34,169571,169572,169585,169589,169596],{"__ignoreMap":32},[37,169573,169574,169576,169578,169580,169583],{"class":39,"line":40},[37,169575,168596],{"class":50},[37,169577,55],{"class":54},[37,169579,108830],{"class":50},[37,169581,169582],{"class":185},"\"data\u002Fstudents.txt\"",[37,169584,280],{"class":50},[37,169586,169587],{"class":39,"line":47},[37,169588,2757],{"emptyLinePlaceholder":454},[37,169590,169591,169593],{"class":39,"line":104},[37,169592,1907],{"class":54},[37,169594,169595],{"class":50}," path.exists():\n",[37,169597,169598,169600,169602,169605],{"class":39,"line":113},[37,169599,31638],{"class":61},[37,169601,165],{"class":50},[37,169603,169604],{"class":185},"\"文件存在\"",[37,169606,280],{"class":50},[14,169608,169609],{},"读写文本：",[27,169611,169613],{"className":29,"code":169612,"language":31,"meta":32,"style":32},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[34,169614,169615,169627,169631,169648,169665],{"__ignoreMap":32},[37,169616,169617,169619,169621,169623,169625],{"class":39,"line":40},[37,169618,168596],{"class":50},[37,169620,55],{"class":54},[37,169622,108830],{"class":50},[37,169624,147081],{"class":185},[37,169626,280],{"class":50},[37,169628,169629],{"class":39,"line":47},[37,169630,2757],{"emptyLinePlaceholder":454},[37,169632,169633,169636,169638,169640,169642,169644,169646],{"class":39,"line":104},[37,169634,169635],{"class":50},"path.write_text(",[37,169637,146161],{"class":185},[37,169639,12776],{"class":50},[37,169641,147091],{"class":159},[37,169643,55],{"class":54},[37,169645,147096],{"class":185},[37,169647,280],{"class":50},[37,169649,169650,169652,169654,169657,169659,169661,169663],{"class":39,"line":113},[37,169651,168779],{"class":50},[37,169653,55],{"class":54},[37,169655,169656],{"class":50}," path.read_text(",[37,169658,147091],{"class":159},[37,169660,55],{"class":54},[37,169662,147096],{"class":185},[37,169664,280],{"class":50},[37,169666,169667,169669],{"class":39,"line":189},[37,169668,30755],{"class":61},[37,169670,168793],{"class":50},[469,169672,169674],{"id":169673},"_810-json文件","8.10 JSON文件",[14,169676,169677],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[27,169679,169681],{"className":29,"code":169680,"language":31,"meta":32,"style":32},"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",[34,169682,169683,169689,169693,169701,169711,169721,169729,169733,169737,169762],{"__ignoreMap":32},[37,169684,169685,169687],{"class":39,"line":40},[37,169686,30732],{"class":54},[37,169688,147376],{"class":50},[37,169690,169691],{"class":39,"line":47},[37,169692,2757],{"emptyLinePlaceholder":454},[37,169694,169695,169697,169699],{"class":39,"line":104},[37,169696,149766],{"class":50},[37,169698,55],{"class":54},[37,169700,15913],{"class":50},[37,169702,169703,169705,169707,169709],{"class":39,"line":113},[37,169704,147305],{"class":185},[37,169706,51773],{"class":50},[37,169708,150173],{"class":185},[37,169710,31805],{"class":50},[37,169712,169713,169715,169717,169719],{"class":39,"line":189},[37,169714,164822],{"class":185},[37,169716,51773],{"class":50},[37,169718,1160],{"class":61},[37,169720,31805],{"class":50},[37,169722,169723,169725,169727],{"class":39,"line":195},[37,169724,164833],{"class":185},[37,169726,51773],{"class":50},[37,169728,164838],{"class":61},[37,169730,169731],{"class":39,"line":201},[37,169732,1941],{"class":50},[37,169734,169735],{"class":39,"line":207},[37,169736,2757],{"emptyLinePlaceholder":454},[37,169738,169739,169741,169743,169746,169748,169750,169752,169754,169756,169758,169760],{"class":39,"line":213},[37,169740,156729],{"class":50},[37,169742,55],{"class":54},[37,169744,169745],{"class":50}," json.dumps(student, ",[37,169747,147422],{"class":159},[37,169749,55],{"class":54},[37,169751,34324],{"class":61},[37,169753,12776],{"class":50},[37,169755,152297],{"class":159},[37,169757,55],{"class":54},[37,169759,602],{"class":61},[37,169761,280],{"class":50},[37,169763,169764,169766],{"class":39,"line":218},[37,169765,30755],{"class":61},[37,169767,164356],{"class":50},[14,169769,169770],{},"写入 JSON 文件：",[27,169772,169774],{"className":29,"code":169773,"language":31,"meta":32,"style":32},"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",[34,169775,169776,169782,169786,169794,169822,169850,169854,169858,169888],{"__ignoreMap":32},[37,169777,169778,169780],{"class":39,"line":40},[37,169779,30732],{"class":54},[37,169781,147376],{"class":50},[37,169783,169784],{"class":39,"line":47},[37,169785,2757],{"emptyLinePlaceholder":454},[37,169787,169788,169790,169792],{"class":39,"line":104},[37,169789,160001],{"class":50},[37,169791,55],{"class":54},[37,169793,55783],{"class":50},[37,169795,169796,169798,169800,169802,169804,169806,169808,169810,169812,169814,169816,169818,169820],{"class":39,"line":113},[37,169797,148670],{"class":50},[37,169799,63015],{"class":185},[37,169801,51773],{"class":50},[37,169803,150173],{"class":185},[37,169805,12776],{"class":50},[37,169807,69460],{"class":185},[37,169809,51773],{"class":50},[37,169811,1160],{"class":61},[37,169813,12776],{"class":50},[37,169815,151757],{"class":185},[37,169817,51773],{"class":50},[37,169819,1497],{"class":61},[37,169821,5279],{"class":50},[37,169823,169824,169826,169828,169830,169832,169834,169836,169838,169840,169842,169844,169846,169848],{"class":39,"line":189},[37,169825,148670],{"class":50},[37,169827,63015],{"class":185},[37,169829,51773],{"class":50},[37,169831,151221],{"class":185},[37,169833,12776],{"class":50},[37,169835,69460],{"class":185},[37,169837,51773],{"class":50},[37,169839,1135],{"class":61},[37,169841,12776],{"class":50},[37,169843,151757],{"class":185},[37,169845,51773],{"class":50},[37,169847,1320],{"class":61},[37,169849,5279],{"class":50},[37,169851,169852],{"class":39,"line":195},[37,169853,389],{"class":50},[37,169855,169856],{"class":39,"line":201},[37,169857,2757],{"emptyLinePlaceholder":454},[37,169859,169860,169862,169864,169866,169868,169870,169872,169874,169876,169878,169880,169882,169884,169886],{"class":39,"line":207},[37,169861,108118],{"class":54},[37,169863,147076],{"class":61},[37,169865,165],{"class":50},[37,169867,152116],{"class":185},[37,169869,12776],{"class":50},[37,169871,152261],{"class":185},[37,169873,12776],{"class":50},[37,169875,147091],{"class":159},[37,169877,55],{"class":54},[37,169879,147096],{"class":185},[37,169881,14055],{"class":50},[37,169883,31722],{"class":54},[37,169885,148438],{"class":159},[37,169887,4089],{"class":50},[37,169889,169890,169893,169895,169897,169899,169901,169903,169905,169907,169909,169911],{"class":39,"line":213},[37,169891,169892],{"class":50},"    json.dump(students, ",[37,169894,45691],{"class":159},[37,169896,12776],{"class":50},[37,169898,147422],{"class":159},[37,169900,55],{"class":54},[37,169902,34324],{"class":61},[37,169904,12776],{"class":50},[37,169906,152297],{"class":159},[37,169908,55],{"class":54},[37,169910,602],{"class":61},[37,169912,280],{"class":50},[14,169914,169915],{},"读取 JSON 文件：",[27,169917,169919],{"className":29,"code":169918,"language":31,"meta":32,"style":32},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[34,169920,169921,169927,169931,169961,169973,169977],{"__ignoreMap":32},[37,169922,169923,169925],{"class":39,"line":40},[37,169924,30732],{"class":54},[37,169926,147376],{"class":50},[37,169928,169929],{"class":39,"line":47},[37,169930,2757],{"emptyLinePlaceholder":454},[37,169932,169933,169935,169937,169939,169941,169943,169945,169947,169949,169951,169953,169955,169957,169959],{"class":39,"line":104},[37,169934,108118],{"class":54},[37,169936,147076],{"class":61},[37,169938,165],{"class":50},[37,169940,152116],{"class":185},[37,169942,12776],{"class":50},[37,169944,147086],{"class":185},[37,169946,12776],{"class":50},[37,169948,147091],{"class":159},[37,169950,55],{"class":54},[37,169952,147096],{"class":185},[37,169954,14055],{"class":50},[37,169956,31722],{"class":54},[37,169958,148438],{"class":159},[37,169960,4089],{"class":50},[37,169962,169963,169965,169967,169969,169971],{"class":39,"line":113},[37,169964,153322],{"class":50},[37,169966,55],{"class":54},[37,169968,148449],{"class":50},[37,169970,45691],{"class":159},[37,169972,280],{"class":50},[37,169974,169975],{"class":39,"line":189},[37,169976,2757],{"emptyLinePlaceholder":454},[37,169978,169979,169981],{"class":39,"line":195},[37,169980,30755],{"class":61},[37,169982,165280],{"class":50},[469,169984,169986],{"id":169985},"_811-csv文件","8.11 CSV文件",[14,169988,169989],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169991,169992],{},"写入 CSV：",[27,169994,169996],{"className":29,"code":169995,"language":31,"meta":32,"style":32},"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",[34,169997,169998,170005,170009,170017,170035,170051,170067,170071,170075,170115,170129],{"__ignoreMap":32},[37,169999,170000,170002],{"class":39,"line":40},[37,170001,30732],{"class":54},[37,170003,170004],{"class":50}," csv\n",[37,170006,170007],{"class":39,"line":47},[37,170008,2757],{"emptyLinePlaceholder":454},[37,170010,170011,170013,170015],{"class":39,"line":104},[37,170012,160001],{"class":50},[37,170014,55],{"class":54},[37,170016,55783],{"class":50},[37,170018,170019,170022,170024,170026,170028,170030,170033],{"class":39,"line":113},[37,170020,170021],{"class":50},"    [",[37,170023,73435],{"class":185},[37,170025,12776],{"class":50},[37,170027,73468],{"class":185},[37,170029,12776],{"class":50},[37,170031,170032],{"class":185},"\"成绩\"",[37,170034,88171],{"class":50},[37,170036,170037,170039,170041,170043,170045,170047,170049],{"class":39,"line":189},[37,170038,170021],{"class":50},[37,170040,150173],{"class":185},[37,170042,12776],{"class":50},[37,170044,1160],{"class":61},[37,170046,12776],{"class":50},[37,170048,1497],{"class":61},[37,170050,88171],{"class":50},[37,170052,170053,170055,170057,170059,170061,170063,170065],{"class":39,"line":195},[37,170054,170021],{"class":50},[37,170056,151221],{"class":185},[37,170058,12776],{"class":50},[37,170060,1135],{"class":61},[37,170062,12776],{"class":50},[37,170064,1320],{"class":61},[37,170066,88171],{"class":50},[37,170068,170069],{"class":39,"line":201},[37,170070,389],{"class":50},[37,170072,170073],{"class":39,"line":207},[37,170074,2757],{"emptyLinePlaceholder":454},[37,170076,170077,170079,170081,170083,170086,170088,170090,170092,170094,170096,170098,170100,170103,170105,170107,170109,170111,170113],{"class":39,"line":213},[37,170078,108118],{"class":54},[37,170080,147076],{"class":61},[37,170082,165],{"class":50},[37,170084,170085],{"class":185},"\"students.csv\"",[37,170087,12776],{"class":50},[37,170089,152261],{"class":185},[37,170091,12776],{"class":50},[37,170093,147091],{"class":159},[37,170095,55],{"class":54},[37,170097,147096],{"class":185},[37,170099,12776],{"class":50},[37,170101,170102],{"class":159},"newline",[37,170104,55],{"class":54},[37,170106,8000],{"class":185},[37,170108,14055],{"class":50},[37,170110,31722],{"class":54},[37,170112,148438],{"class":159},[37,170114,4089],{"class":50},[37,170116,170117,170120,170122,170125,170127],{"class":39,"line":218},[37,170118,170119],{"class":50},"    writer ",[37,170121,55],{"class":54},[37,170123,170124],{"class":50}," csv.writer(",[37,170126,45691],{"class":159},[37,170128,280],{"class":50},[37,170130,170131],{"class":39,"line":227},[37,170132,170133],{"class":50},"    writer.writerows(students)\n",[14,170135,170136],{},"读取 CSV：",[27,170138,170140],{"className":29,"code":170139,"language":31,"meta":32,"style":32},"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",[34,170141,170142,170148,170152,170182,170196,170208],{"__ignoreMap":32},[37,170143,170144,170146],{"class":39,"line":40},[37,170145,30732],{"class":54},[37,170147,170004],{"class":50},[37,170149,170150],{"class":39,"line":47},[37,170151,2757],{"emptyLinePlaceholder":454},[37,170153,170154,170156,170158,170160,170162,170164,170166,170168,170170,170172,170174,170176,170178,170180],{"class":39,"line":104},[37,170155,108118],{"class":54},[37,170157,147076],{"class":61},[37,170159,165],{"class":50},[37,170161,170085],{"class":185},[37,170163,12776],{"class":50},[37,170165,147086],{"class":185},[37,170167,12776],{"class":50},[37,170169,147091],{"class":159},[37,170171,55],{"class":54},[37,170173,147096],{"class":185},[37,170175,14055],{"class":50},[37,170177,31722],{"class":54},[37,170179,148438],{"class":159},[37,170181,4089],{"class":50},[37,170183,170184,170187,170189,170192,170194],{"class":39,"line":113},[37,170185,170186],{"class":50},"    reader ",[37,170188,55],{"class":54},[37,170190,170191],{"class":50}," csv.reader(",[37,170193,45691],{"class":159},[37,170195,280],{"class":50},[37,170197,170198,170200,170203,170205],{"class":39,"line":189},[37,170199,3551],{"class":54},[37,170201,170202],{"class":50}," row ",[37,170204,26385],{"class":54},[37,170206,170207],{"class":50}," reader:\n",[37,170209,170210,170212],{"class":39,"line":195},[37,170211,32789],{"class":61},[37,170213,170214],{"class":50},"(row)\n",[14,170216,170217],{},"使用字典写入：",[27,170219,170221],{"className":29,"code":170220,"language":31,"meta":32,"style":32},"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",[34,170222,170223,170229,170233,170241,170269,170297,170301,170305,170343,170364,170385,170390],{"__ignoreMap":32},[37,170224,170225,170227],{"class":39,"line":40},[37,170226,30732],{"class":54},[37,170228,170004],{"class":50},[37,170230,170231],{"class":39,"line":47},[37,170232,2757],{"emptyLinePlaceholder":454},[37,170234,170235,170237,170239],{"class":39,"line":104},[37,170236,160001],{"class":50},[37,170238,55],{"class":54},[37,170240,55783],{"class":50},[37,170242,170243,170245,170247,170249,170251,170253,170255,170257,170259,170261,170263,170265,170267],{"class":39,"line":113},[37,170244,148670],{"class":50},[37,170246,63015],{"class":185},[37,170248,51773],{"class":50},[37,170250,150173],{"class":185},[37,170252,12776],{"class":50},[37,170254,69460],{"class":185},[37,170256,51773],{"class":50},[37,170258,1160],{"class":61},[37,170260,12776],{"class":50},[37,170262,151757],{"class":185},[37,170264,51773],{"class":50},[37,170266,1497],{"class":61},[37,170268,5279],{"class":50},[37,170270,170271,170273,170275,170277,170279,170281,170283,170285,170287,170289,170291,170293,170295],{"class":39,"line":189},[37,170272,148670],{"class":50},[37,170274,63015],{"class":185},[37,170276,51773],{"class":50},[37,170278,151221],{"class":185},[37,170280,12776],{"class":50},[37,170282,69460],{"class":185},[37,170284,51773],{"class":50},[37,170286,1135],{"class":61},[37,170288,12776],{"class":50},[37,170290,151757],{"class":185},[37,170292,51773],{"class":50},[37,170294,1320],{"class":61},[37,170296,5279],{"class":50},[37,170298,170299],{"class":39,"line":195},[37,170300,389],{"class":50},[37,170302,170303],{"class":39,"line":201},[37,170304,2757],{"emptyLinePlaceholder":454},[37,170306,170307,170309,170311,170313,170315,170317,170319,170321,170323,170325,170327,170329,170331,170333,170335,170337,170339,170341],{"class":39,"line":207},[37,170308,108118],{"class":54},[37,170310,147076],{"class":61},[37,170312,165],{"class":50},[37,170314,170085],{"class":185},[37,170316,12776],{"class":50},[37,170318,152261],{"class":185},[37,170320,12776],{"class":50},[37,170322,147091],{"class":159},[37,170324,55],{"class":54},[37,170326,147096],{"class":185},[37,170328,12776],{"class":50},[37,170330,170102],{"class":159},[37,170332,55],{"class":54},[37,170334,8000],{"class":185},[37,170336,14055],{"class":50},[37,170338,31722],{"class":54},[37,170340,148438],{"class":159},[37,170342,4089],{"class":50},[37,170344,170345,170348,170350,170352,170354,170356,170358,170360,170362],{"class":39,"line":213},[37,170346,170347],{"class":50},"    fieldnames ",[37,170349,55],{"class":54},[37,170351,52562],{"class":50},[37,170353,63015],{"class":185},[37,170355,12776],{"class":50},[37,170357,69460],{"class":185},[37,170359,12776],{"class":50},[37,170361,151757],{"class":185},[37,170363,389],{"class":50},[37,170365,170366,170368,170370,170373,170375,170377,170380,170382],{"class":39,"line":218},[37,170367,170119],{"class":50},[37,170369,55],{"class":54},[37,170371,170372],{"class":50}," csv.DictWriter(",[37,170374,45691],{"class":159},[37,170376,12776],{"class":50},[37,170378,170379],{"class":159},"fieldnames",[37,170381,55],{"class":54},[37,170383,170384],{"class":50},"fieldnames)\n",[37,170386,170387],{"class":39,"line":227},[37,170388,170389],{"class":50},"    writer.writeheader()\n",[37,170391,170392],{"class":39,"line":232},[37,170393,170133],{"class":50},[469,170395,170397],{"id":170396},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170399,123577],{},[481,170401,170402,170405,170408],{},[484,170403,170404],{},"读取文本文件。",[484,170406,170407],{},"统计每个单词出现次数。",[484,170409,170410],{},"输出出现次数最多的前 10 个单词。",[14,170412,10376],{},[27,170414,170416],{"className":29,"code":170415,"language":31,"meta":32,"style":32},"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",[34,170417,170418,170428,170432,170445,170461,170465,170475,170484,170488,170500,170520,170529,170533,170551,170555,170585,170589,170605],{"__ignoreMap":32},[37,170419,170420,170422,170424,170426],{"class":39,"line":40},[37,170421,31076],{"class":54},[37,170423,108596],{"class":50},[37,170425,30732],{"class":54},[37,170427,108601],{"class":50},[37,170429,170430],{"class":39,"line":47},[37,170431,2757],{"emptyLinePlaceholder":454},[37,170433,170434,170436,170438,170440,170443],{"class":39,"line":104},[37,170435,168596],{"class":50},[37,170437,55],{"class":54},[37,170439,108830],{"class":50},[37,170441,170442],{"class":185},"\"article.txt\"",[37,170444,280],{"class":50},[37,170446,170447,170449,170451,170453,170455,170457,170459],{"class":39,"line":113},[37,170448,168779],{"class":50},[37,170450,55],{"class":54},[37,170452,169656],{"class":50},[37,170454,147091],{"class":159},[37,170456,55],{"class":54},[37,170458,147096],{"class":185},[37,170460,280],{"class":50},[37,170462,170463],{"class":39,"line":189},[37,170464,2757],{"emptyLinePlaceholder":454},[37,170466,170467,170470,170472],{"class":39,"line":195},[37,170468,170469],{"class":50},"words ",[37,170471,55],{"class":54},[37,170473,170474],{"class":50}," content.lower().split()\n",[37,170476,170477,170480,170482],{"class":39,"line":201},[37,170478,170479],{"class":50},"counter ",[37,170481,55],{"class":54},[37,170483,88203],{"class":50},[37,170485,170486],{"class":39,"line":207},[37,170487,2757],{"emptyLinePlaceholder":454},[37,170489,170490,170492,170495,170497],{"class":39,"line":213},[37,170491,3375],{"class":54},[37,170493,170494],{"class":50}," word ",[37,170496,26385],{"class":54},[37,170498,170499],{"class":50}," words:\n",[37,170501,170502,170505,170507,170510,170513,170515,170518],{"class":39,"line":218},[37,170503,170504],{"class":50},"    word ",[37,170506,55],{"class":54},[37,170508,170509],{"class":50}," word.strip(",[37,170511,170512],{"class":185},"\".,!?;:",[37,170514,156780],{"class":61},[37,170516,170517],{"class":185},"'()[]\"",[37,170519,280],{"class":50},[37,170521,170522,170524,170526],{"class":39,"line":227},[37,170523,3451],{"class":54},[37,170525,39267],{"class":54},[37,170527,170528],{"class":50}," word:\n",[37,170530,170531],{"class":39,"line":232},[37,170532,148797],{"class":54},[37,170534,170535,170538,170540,170543,170545,170547,170549],{"class":39,"line":238},[37,170536,170537],{"class":50},"    counter[word] ",[37,170539,55],{"class":54},[37,170541,170542],{"class":50}," counter.get(word, ",[37,170544,135],{"class":61},[37,170546,14055],{"class":50},[37,170548,993],{"class":54},[37,170550,56035],{"class":61},[37,170552,170553],{"class":39,"line":244},[37,170554,2757],{"emptyLinePlaceholder":454},[37,170556,170557,170560,170562,170564,170567,170569,170571,170573,170575,170577,170579,170581,170583],{"class":39,"line":250},[37,170558,170559],{"class":50},"items ",[37,170561,55],{"class":54},[37,170563,163889],{"class":61},[37,170565,170566],{"class":50},"(counter.items(), ",[37,170568,154231],{"class":159},[37,170570,154234],{"class":54},[37,170572,154237],{"class":50},[37,170574,332],{"class":61},[37,170576,112487],{"class":50},[37,170578,163813],{"class":159},[37,170580,55],{"class":54},[37,170582,31815],{"class":61},[37,170584,280],{"class":50},[37,170586,170587],{"class":39,"line":256},[37,170588,2757],{"emptyLinePlaceholder":454},[37,170590,170591,170593,170596,170598,170601,170603],{"class":39,"line":261},[37,170592,3375],{"class":54},[37,170594,170595],{"class":50}," word, count ",[37,170597,26385],{"class":54},[37,170599,170600],{"class":50}," items[:",[37,170602,98],{"class":61},[37,170604,166040],{"class":50},[37,170606,170607,170609],{"class":39,"line":267},[37,170608,31638],{"class":61},[37,170610,170611],{"class":50},"(word, count)\n",[469,170613,170615],{"id":170614},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[27,170617,170619],{"className":29,"code":170618,"language":31,"meta":32,"style":32},"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",[34,170620,170621,170627,170637,170641,170653,170657,170661,170669,170679,170685,170689,170719,170729,170733,170737,170745,170775,170799,170803,170807,170815,170844,170849],{"__ignoreMap":32},[37,170622,170623,170625],{"class":39,"line":40},[37,170624,30732],{"class":54},[37,170626,147376],{"class":50},[37,170628,170629,170631,170633,170635],{"class":39,"line":47},[37,170630,31076],{"class":54},[37,170632,108596],{"class":50},[37,170634,30732],{"class":54},[37,170636,108601],{"class":50},[37,170638,170639],{"class":39,"line":104},[37,170640,2757],{"emptyLinePlaceholder":454},[37,170642,170643,170645,170647,170649,170651],{"class":39,"line":113},[37,170644,152109],{"class":61},[37,170646,13905],{"class":54},[37,170648,108830],{"class":50},[37,170650,152116],{"class":185},[37,170652,280],{"class":50},[37,170654,170655],{"class":39,"line":189},[37,170656,2757],{"emptyLinePlaceholder":454},[37,170658,170659],{"class":39,"line":195},[37,170660,2757],{"emptyLinePlaceholder":454},[37,170662,170663,170665,170667],{"class":39,"line":201},[37,170664,32285],{"class":54},[37,170666,152133],{"class":2320},[37,170668,32291],{"class":50},[37,170670,170671,170673,170675,170677],{"class":39,"line":207},[37,170672,3451],{"class":54},[37,170674,39267],{"class":54},[37,170676,152144],{"class":61},[37,170678,152147],{"class":50},[37,170680,170681,170683],{"class":39,"line":213},[37,170682,15093],{"class":54},[37,170684,52174],{"class":50},[37,170686,170687],{"class":39,"line":218},[37,170688,2757],{"emptyLinePlaceholder":454},[37,170690,170691,170693,170695,170697,170699,170701,170703,170705,170707,170709,170711,170713,170715,170717],{"class":39,"line":227},[37,170692,34515],{"class":54},[37,170694,147076],{"class":61},[37,170696,165],{"class":50},[37,170698,152109],{"class":61},[37,170700,12776],{"class":50},[37,170702,147086],{"class":185},[37,170704,12776],{"class":50},[37,170706,147091],{"class":159},[37,170708,55],{"class":54},[37,170710,147096],{"class":185},[37,170712,14055],{"class":50},[37,170714,31722],{"class":54},[37,170716,148438],{"class":159},[37,170718,4089],{"class":50},[37,170720,170721,170723,170725,170727],{"class":39,"line":232},[37,170722,15093],{"class":54},[37,170724,148449],{"class":50},[37,170726,45691],{"class":159},[37,170728,280],{"class":50},[37,170730,170731],{"class":39,"line":238},[37,170732,2757],{"emptyLinePlaceholder":454},[37,170734,170735],{"class":39,"line":244},[37,170736,2757],{"emptyLinePlaceholder":454},[37,170738,170739,170741,170743],{"class":39,"line":250},[37,170740,32285],{"class":54},[37,170742,152243],{"class":2320},[37,170744,152246],{"class":50},[37,170746,170747,170749,170751,170753,170755,170757,170759,170761,170763,170765,170767,170769,170771,170773],{"class":39,"line":256},[37,170748,34515],{"class":54},[37,170750,147076],{"class":61},[37,170752,165],{"class":50},[37,170754,152109],{"class":61},[37,170756,12776],{"class":50},[37,170758,152261],{"class":185},[37,170760,12776],{"class":50},[37,170762,147091],{"class":159},[37,170764,55],{"class":54},[37,170766,147096],{"class":185},[37,170768,14055],{"class":50},[37,170770,31722],{"class":54},[37,170772,148438],{"class":159},[37,170774,4089],{"class":50},[37,170776,170777,170779,170781,170783,170785,170787,170789,170791,170793,170795,170797],{"class":39,"line":261},[37,170778,152282],{"class":50},[37,170780,45691],{"class":159},[37,170782,12776],{"class":50},[37,170784,147422],{"class":159},[37,170786,55],{"class":54},[37,170788,34324],{"class":61},[37,170790,12776],{"class":50},[37,170792,152297],{"class":159},[37,170794,55],{"class":54},[37,170796,602],{"class":61},[37,170798,280],{"class":50},[37,170800,170801],{"class":39,"line":267},[37,170802,2757],{"emptyLinePlaceholder":454},[37,170804,170805],{"class":39,"line":283},[37,170806,2757],{"emptyLinePlaceholder":454},[37,170808,170809,170811,170813],{"class":39,"line":288},[37,170810,160001],{"class":50},[37,170812,55],{"class":54},[37,170814,153327],{"class":50},[37,170816,170817,170820,170822,170824,170826,170828,170830,170832,170834,170836,170838,170840,170842],{"class":39,"line":294},[37,170818,170819],{"class":50},"students.append({",[37,170821,63015],{"class":185},[37,170823,51773],{"class":50},[37,170825,150173],{"class":185},[37,170827,12776],{"class":50},[37,170829,69460],{"class":185},[37,170831,51773],{"class":50},[37,170833,1160],{"class":61},[37,170835,12776],{"class":50},[37,170837,151757],{"class":185},[37,170839,51773],{"class":50},[37,170841,1497],{"class":61},[37,170843,165437],{"class":50},[37,170845,170846],{"class":39,"line":300},[37,170847,170848],{"class":50},"save_students(students)\n",[37,170850,170851,170853,170855,170858],{"class":39,"line":306},[37,170852,30755],{"class":61},[37,170854,165],{"class":50},[37,170856,170857],{"class":185},"\"保存成功\"",[37,170859,280],{"class":50},[469,170861,170863],{"id":170862},"_814-易错点","8.14 易错点",[481,170865,170866,170870,170876,170881,170888,170895],{},[484,170867,170868,169129],{},[34,170869,1304],{},[484,170871,170872,170873,28727],{},"读写中文要指定 ",[34,170874,170875],{},"encoding=\"utf-8\"",[484,170877,170878,170879,28727],{},"打开文件后要关闭，推荐使用 ",[34,170880,108118],{},[484,170882,170883,170884,170887],{},"读取大文件不要直接 ",[34,170885,170886],{},"read()"," 全部内容。",[484,170889,170890,170891,170894],{},"Windows 写 CSV 时建议加 ",[34,170892,170893],{},"newline=\"\"","，避免空行。",[484,170896,170897],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[469,170899,170901],{"id":170900},"_815-本章练习","8.15 本章练习",[481,170903,170904,170911,170916,170919,170922],{},[484,170905,170906,170907,170910],{},"写入一个 ",[34,170908,170909],{},"students.txt","，每行保存一个学生姓名。",[484,170912,104640,170913,170915],{},[34,170914,170909],{}," 并输出所有学生。",[484,170917,170918],{},"把学生列表保存为 JSON 文件。",[484,170920,170921],{},"从 JSON 文件读取学生数据，计算平均分。",[484,170923,170924,170925,170928,170929,170932],{},"写一个日志函数 ",[34,170926,170927],{},"write_log(message)","，每次调用向 ",[34,170930,170931],{},"app.log"," 追加一行。",[446,170934,170935],{},"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":32,"searchDepth":47,"depth":47,"links":170937},[170938,170939,170943,170944,170950,170951,170952,170953,170954,170955,170956,170957,170958,170959,170960],{"id":168449,"depth":47,"text":168450},{"id":168490,"depth":47,"text":168491,"children":170940},[170941,170942],{"id":168494,"depth":104,"text":168495},{"id":168528,"depth":104,"text":168529},{"id":168642,"depth":47,"text":168643},{"id":168735,"depth":47,"text":168736,"children":170945},[170946,170947,170948,170949],{"id":168739,"depth":104,"text":168740},{"id":168826,"depth":104,"text":168827},{"id":168896,"depth":104,"text":168897},{"id":168990,"depth":104,"text":168991},{"id":169060,"depth":47,"text":169061},{"id":169123,"depth":47,"text":169124},{"id":169284,"depth":47,"text":169285},{"id":169347,"depth":47,"text":169348},{"id":169463,"depth":47,"text":169464},{"id":169673,"depth":47,"text":169674},{"id":169985,"depth":47,"text":169986},{"id":170396,"depth":47,"text":170397},{"id":170614,"depth":47,"text":170615},{"id":170862,"depth":47,"text":170863},{"id":170900,"depth":47,"text":170901},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168441,"description":451},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170967,"title":170968,"body":170969,"description":451,"extension":452,"meta":173155,"navigation":454,"path":173156,"seo":173157,"stem":173158,"__hash__":173159},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170970,"toc":173122},[170971,170974,170978,170981,170984,171076,171078,171097,171102,171106,171109,171112,171141,171148,171151,171155,171158,171187,171189,171241,171247,171300,171304,171402,171405,171472,171476,171533,171535,171541,171545,171550,171556,171647,171652,171656,171659,171737,171740,171778,171782,171900,171903,171907,171910,171955,171958,171962,171967,171973,172023,172026,172057,172061,172065,172095,172099,172134,172138,172173,172213,172217,172233,172236,172240,172244,172323,172327,172368,172372,172427,172431,172465,172469,172499,172508,172515,172521,172578,172581,172589,172592,172596,172603,172606,172612,172615,172632,172637,172641,172647,172660,172663,172700,172703,172714,172717,172731,172734,172748,172752,172759,172792,172795,172797,172803,172806,172810,172812,172818,172823,172996,173000,173063,173067,173091,173095,173119],[10,170972,170968],{"id":170973},"_9-异常模块与包",[469,170975,170977],{"id":170976},"_91-什么是异常","9.1 什么是异常",[14,170979,170980],{},"异常是程序运行过程中出现的错误。",[14,170982,170983],{},"常见异常：",[661,170985,170986,170995],{},[664,170987,170988],{},[667,170989,170990,170993],{},[670,170991,170992],{},"异常",[670,170994,26211],{},[708,170996,170997,171007,171017,171026,171036,171046,171056,171066],{},[667,170998,170999,171004],{},[713,171000,171001],{},[34,171002,171003],{},"NameError",[713,171005,171006],{},"使用了未定义变量",[667,171008,171009,171014],{},[713,171010,171011],{},[34,171012,171013],{},"TypeError",[713,171015,171016],{},"类型不匹配",[667,171018,171019,171023],{},[713,171020,171021],{},[34,171022,155119],{},[713,171024,171025],{},"值不合法",[667,171027,171028,171033],{},[713,171029,171030],{},[34,171031,171032],{},"IndexError",[713,171034,171035],{},"列表索引越界",[667,171037,171038,171043],{},[713,171039,171040],{},[34,171041,171042],{},"KeyError",[713,171044,171045],{},"字典 key 不存在",[667,171047,171048,171053],{},[713,171049,171050],{},[34,171051,171052],{},"FileNotFoundError",[713,171054,171055],{},"文件不存在",[667,171057,171058,171063],{},[713,171059,171060],{},[34,171061,171062],{},"ZeroDivisionError",[713,171064,171065],{},"除数为 0",[667,171067,171068,171073],{},[713,171069,171070],{},[34,171071,171072],{},"ImportError",[713,171074,171075],{},"导入失败",[14,171077,15476],{},[27,171079,171081],{"className":29,"code":171080,"language":31,"meta":32,"style":32},"num = int(\"abc\")\n",[34,171082,171083],{"__ignoreMap":32},[37,171084,171085,171087,171089,171091,171093,171095],{"class":39,"line":40},[37,171086,156072],{"class":50},[37,171088,55],{"class":54},[37,171090,2739],{"class":61},[37,171092,165],{"class":50},[37,171094,156165],{"class":185},[37,171096,280],{"class":50},[14,171098,171099,171100,28727],{},"会触发 ",[34,171101,155119],{},[469,171103,171105],{"id":171104},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,171107,171108],{},"如果不处理异常，程序会直接终止。",[14,171110,171111],{},"例如用户输入年龄：",[27,171113,171115],{"className":29,"code":171114,"language":31,"meta":32,"style":32},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[34,171116,171117,171135],{"__ignoreMap":32},[37,171118,171119,171121,171123,171125,171127,171129,171131,171133],{"class":39,"line":40},[37,171120,146831],{"class":50},[37,171122,55],{"class":54},[37,171124,2739],{"class":61},[37,171126,165],{"class":50},[37,171128,54157],{"class":61},[37,171130,165],{"class":50},[37,171132,152679],{"class":185},[37,171134,175],{"class":50},[37,171136,171137,171139],{"class":39,"line":47},[37,171138,30755],{"class":61},[37,171140,156046],{"class":50},[14,171142,171143,171144,171147],{},"用户输入 ",[34,171145,171146],{},"abc","，程序就会报错退出。",[14,171149,171150],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[469,171152,171154],{"id":171153},"_93-try-except","9.3 try except",[14,171156,171157],{},"基础语法：",[27,171159,171161],{"className":29,"code":171160,"language":31,"meta":32,"style":32},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[34,171162,171163,171170,171175,171182],{"__ignoreMap":32},[37,171164,171165,171168],{"class":39,"line":40},[37,171166,171167],{"class":54},"try",[37,171169,4089],{"class":50},[37,171171,171172],{"class":39,"line":47},[37,171173,171174],{"class":50},"    可能出错的代码\n",[37,171176,171177,171180],{"class":39,"line":104},[37,171178,171179],{"class":54},"except",[37,171181,4089],{"class":50},[37,171183,171184],{"class":39,"line":113},[37,171185,171186],{"class":50},"    出错后的处理代码\n",[14,171188,15476],{},[27,171190,171192],{"className":29,"code":171191,"language":31,"meta":32,"style":32},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[34,171193,171194,171200,171218,171224,171230],{"__ignoreMap":32},[37,171195,171196,171198],{"class":39,"line":40},[37,171197,171167],{"class":54},[37,171199,4089],{"class":50},[37,171201,171202,171204,171206,171208,171210,171212,171214,171216],{"class":39,"line":47},[37,171203,152671],{"class":50},[37,171205,55],{"class":54},[37,171207,2739],{"class":61},[37,171209,165],{"class":50},[37,171211,54157],{"class":61},[37,171213,165],{"class":50},[37,171215,152679],{"class":185},[37,171217,175],{"class":50},[37,171219,171220,171222],{"class":39,"line":104},[37,171221,31638],{"class":61},[37,171223,156046],{"class":50},[37,171225,171226,171228],{"class":39,"line":113},[37,171227,171179],{"class":54},[37,171229,4089],{"class":50},[37,171231,171232,171234,171236,171239],{"class":39,"line":189},[37,171233,31638],{"class":61},[37,171235,165],{"class":50},[37,171237,171238],{"class":185},"\"年龄必须是数字\"",[37,171240,280],{"class":50},[14,171242,171243,171244,171246],{},"不建议裸写 ",[34,171245,171179],{},"，最好指定异常类型。",[27,171248,171250],{"className":29,"code":171249,"language":31,"meta":32,"style":32},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[34,171251,171252,171258,171276,171282,171290],{"__ignoreMap":32},[37,171253,171254,171256],{"class":39,"line":40},[37,171255,171167],{"class":54},[37,171257,4089],{"class":50},[37,171259,171260,171262,171264,171266,171268,171270,171272,171274],{"class":39,"line":47},[37,171261,152671],{"class":50},[37,171263,55],{"class":54},[37,171265,2739],{"class":61},[37,171267,165],{"class":50},[37,171269,54157],{"class":61},[37,171271,165],{"class":50},[37,171273,152679],{"class":185},[37,171275,175],{"class":50},[37,171277,171278,171280],{"class":39,"line":104},[37,171279,31638],{"class":61},[37,171281,156046],{"class":50},[37,171283,171284,171286,171288],{"class":39,"line":113},[37,171285,171179],{"class":54},[37,171287,152511],{"class":61},[37,171289,4089],{"class":50},[37,171291,171292,171294,171296,171298],{"class":39,"line":189},[37,171293,31638],{"class":61},[37,171295,165],{"class":50},[37,171297,171238],{"class":185},[37,171299,280],{"class":50},[469,171301,171303],{"id":171302},"_94-捕获多个异常","9.4 捕获多个异常",[27,171305,171307],{"className":29,"code":171306,"language":31,"meta":32,"style":32},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[34,171308,171309,171315,171336,171356,171363,171371,171382,171391],{"__ignoreMap":32},[37,171310,171311,171313],{"class":39,"line":40},[37,171312,171167],{"class":54},[37,171314,4089],{"class":50},[37,171316,171317,171320,171322,171324,171326,171328,171330,171332,171334],{"class":39,"line":47},[37,171318,171319],{"class":50},"    nums ",[37,171321,55],{"class":54},[37,171323,52562],{"class":50},[37,171325,332],{"class":61},[37,171327,12776],{"class":50},[37,171329,602],{"class":61},[37,171331,12776],{"class":50},[37,171333,62],{"class":61},[37,171335,389],{"class":50},[37,171337,171338,171341,171343,171345,171347,171349,171351,171354],{"class":39,"line":104},[37,171339,171340],{"class":50},"    index ",[37,171342,55],{"class":54},[37,171344,2739],{"class":61},[37,171346,165],{"class":50},[37,171348,54157],{"class":61},[37,171350,165],{"class":50},[37,171352,171353],{"class":185},"\"请输入索引:\"",[37,171355,175],{"class":50},[37,171357,171358,171360],{"class":39,"line":113},[37,171359,31638],{"class":61},[37,171361,171362],{"class":50},"(nums[index])\n",[37,171364,171365,171367,171369],{"class":39,"line":189},[37,171366,171179],{"class":54},[37,171368,152511],{"class":61},[37,171370,4089],{"class":50},[37,171372,171373,171375,171377,171380],{"class":39,"line":195},[37,171374,31638],{"class":61},[37,171376,165],{"class":50},[37,171378,171379],{"class":185},"\"索引必须是整数\"",[37,171381,280],{"class":50},[37,171383,171384,171386,171389],{"class":39,"line":201},[37,171385,171179],{"class":54},[37,171387,171388],{"class":61}," IndexError",[37,171390,4089],{"class":50},[37,171392,171393,171395,171397,171400],{"class":39,"line":207},[37,171394,31638],{"class":61},[37,171396,165],{"class":50},[37,171398,171399],{"class":185},"\"索引越界\"",[37,171401,280],{"class":50},[14,171403,171404],{},"多个异常使用相同处理逻辑：",[27,171406,171408],{"className":29,"code":171407,"language":31,"meta":32,"style":32},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[34,171409,171410,171416,171434,171447,171461],{"__ignoreMap":32},[37,171411,171412,171414],{"class":39,"line":40},[37,171413,171167],{"class":54},[37,171415,4089],{"class":50},[37,171417,171418,171420,171422,171424,171426,171428,171430,171432],{"class":39,"line":47},[37,171419,45930],{"class":50},[37,171421,55],{"class":54},[37,171423,2739],{"class":61},[37,171425,165],{"class":50},[37,171427,54157],{"class":61},[37,171429,165],{"class":50},[37,171431,156081],{"class":185},[37,171433,175],{"class":50},[37,171435,171436,171438,171440,171442,171444],{"class":39,"line":104},[37,171437,31638],{"class":61},[37,171439,165],{"class":50},[37,171441,98],{"class":61},[37,171443,156331],{"class":54},[37,171445,171446],{"class":50}," num)\n",[37,171448,171449,171451,171453,171455,171457,171459],{"class":39,"line":113},[37,171450,171179],{"class":54},[37,171452,2027],{"class":50},[37,171454,155119],{"class":61},[37,171456,12776],{"class":50},[37,171458,171062],{"class":61},[37,171460,31125],{"class":50},[37,171462,171463,171465,171467,171470],{"class":39,"line":189},[37,171464,31638],{"class":61},[37,171466,165],{"class":50},[37,171468,171469],{"class":185},"\"输入不合法\"",[37,171471,280],{"class":50},[469,171473,171475],{"id":171474},"_95-获取异常信息","9.5 获取异常信息",[27,171477,171479],{"className":29,"code":171478,"language":31,"meta":32,"style":32},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[34,171480,171481,171487,171501,171512],{"__ignoreMap":32},[37,171482,171483,171485],{"class":39,"line":40},[37,171484,171167],{"class":54},[37,171486,4089],{"class":50},[37,171488,171489,171491,171493,171495,171497,171499],{"class":39,"line":47},[37,171490,45930],{"class":50},[37,171492,55],{"class":54},[37,171494,2739],{"class":61},[37,171496,165],{"class":50},[37,171498,156165],{"class":185},[37,171500,280],{"class":50},[37,171502,171503,171505,171507,171509],{"class":39,"line":104},[37,171504,171179],{"class":54},[37,171506,152511],{"class":61},[37,171508,64940],{"class":54},[37,171510,171511],{"class":50}," e:\n",[37,171513,171514,171516,171518,171520,171523,171525,171527,171529,171531],{"class":39,"line":113},[37,171515,31638],{"class":61},[37,171517,165],{"class":50},[37,171519,579],{"class":54},[37,171521,171522],{"class":185},"\"出错了:",[37,171524,1404],{"class":61},[37,171526,599],{"class":50},[37,171528,1454],{"class":61},[37,171530,772],{"class":185},[37,171532,280],{"class":50},[14,171534,146742],{},[27,171536,171539],{"className":171537,"code":171538,"language":5536,"meta":32},[5534],"出错了:invalid literal for int() with base 10: 'abc'\n",[34,171540,171538],{"__ignoreMap":32},[469,171542,171544],{"id":171543},"_96-else和finally","9.6 else和finally",[14,171546,171547,171549],{},[34,171548,2066],{},"：没有异常时执行。",[14,171551,171552,171555],{},[34,171553,171554],{},"finally","：无论是否异常都会执行。",[27,171557,171559],{"className":29,"code":171558,"language":31,"meta":32,"style":32},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[34,171560,171561,171567,171585,171593,171603,171609,171630,171636],{"__ignoreMap":32},[37,171562,171563,171565],{"class":39,"line":40},[37,171564,171167],{"class":54},[37,171566,4089],{"class":50},[37,171568,171569,171571,171573,171575,171577,171579,171581,171583],{"class":39,"line":47},[37,171570,45930],{"class":50},[37,171572,55],{"class":54},[37,171574,2739],{"class":61},[37,171576,165],{"class":50},[37,171578,54157],{"class":61},[37,171580,165],{"class":50},[37,171582,156081],{"class":185},[37,171584,175],{"class":50},[37,171586,171587,171589,171591],{"class":39,"line":104},[37,171588,171179],{"class":54},[37,171590,152511],{"class":61},[37,171592,4089],{"class":50},[37,171594,171595,171597,171599,171601],{"class":39,"line":113},[37,171596,31638],{"class":61},[37,171598,165],{"class":50},[37,171600,153499],{"class":185},[37,171602,280],{"class":50},[37,171604,171605,171607],{"class":39,"line":189},[37,171606,2066],{"class":54},[37,171608,4089],{"class":50},[37,171610,171611,171613,171615,171617,171620,171622,171624,171626,171628],{"class":39,"line":195},[37,171612,31638],{"class":61},[37,171614,165],{"class":50},[37,171616,579],{"class":54},[37,171618,171619],{"class":185},"\"输入正确:",[37,171621,1404],{"class":61},[37,171623,2034],{"class":50},[37,171625,1454],{"class":61},[37,171627,772],{"class":185},[37,171629,280],{"class":50},[37,171631,171632,171634],{"class":39,"line":201},[37,171633,171554],{"class":54},[37,171635,4089],{"class":50},[37,171637,171638,171640,171642,171645],{"class":39,"line":207},[37,171639,31638],{"class":61},[37,171641,165],{"class":50},[37,171643,171644],{"class":185},"\"程序结束\"",[37,171646,280],{"class":50},[14,171648,171649,171651],{},[34,171650,171554],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[469,171653,171655],{"id":171654},"_97-抛出异常","9.7 抛出异常",[14,171657,171658],{},"程序可以主动抛出异常。",[27,171660,171662],{"className":29,"code":171661,"language":31,"meta":32,"style":32},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[34,171663,171664,171673,171685,171698,171718,171722,171726],{"__ignoreMap":32},[37,171665,171666,171668,171671],{"class":39,"line":40},[37,171667,32285],{"class":54},[37,171669,171670],{"class":2320}," set_age",[37,171672,161700],{"class":50},[37,171674,171675,171677,171679,171681,171683],{"class":39,"line":47},[37,171676,3451],{"class":54},[37,171678,16048],{"class":50},[37,171680,1418],{"class":54},[37,171682,4443],{"class":61},[37,171684,4089],{"class":50},[37,171686,171687,171689,171691,171693,171696],{"class":39,"line":104},[37,171688,103717],{"class":54},[37,171690,152511],{"class":61},[37,171692,165],{"class":50},[37,171694,171695],{"class":185},"\"年龄不能为负数\"",[37,171697,280],{"class":50},[37,171699,171700,171702,171704,171706,171708,171710,171712,171714,171716],{"class":39,"line":113},[37,171701,31638],{"class":61},[37,171703,165],{"class":50},[37,171705,579],{"class":54},[37,171707,162268],{"class":185},[37,171709,1404],{"class":61},[37,171711,70557],{"class":50},[37,171713,1454],{"class":61},[37,171715,772],{"class":185},[37,171717,280],{"class":50},[37,171719,171720],{"class":39,"line":189},[37,171721,2757],{"emptyLinePlaceholder":454},[37,171723,171724],{"class":39,"line":195},[37,171725,2757],{"emptyLinePlaceholder":454},[37,171727,171728,171731,171733,171735],{"class":39,"line":201},[37,171729,171730],{"class":50},"set_age(",[37,171732,384],{"class":54},[37,171734,332],{"class":61},[37,171736,280],{"class":50},[14,171738,171739],{},"调用者可以捕获：",[27,171741,171743],{"className":29,"code":171742,"language":31,"meta":32,"style":32},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[34,171744,171745,171751,171762,171772],{"__ignoreMap":32},[37,171746,171747,171749],{"class":39,"line":40},[37,171748,171167],{"class":54},[37,171750,4089],{"class":50},[37,171752,171753,171756,171758,171760],{"class":39,"line":47},[37,171754,171755],{"class":50},"    set_age(",[37,171757,384],{"class":54},[37,171759,332],{"class":61},[37,171761,280],{"class":50},[37,171763,171764,171766,171768,171770],{"class":39,"line":104},[37,171765,171179],{"class":54},[37,171767,152511],{"class":61},[37,171769,64940],{"class":54},[37,171771,171511],{"class":50},[37,171773,171774,171776],{"class":39,"line":113},[37,171775,31638],{"class":61},[37,171777,67335],{"class":50},[469,171779,171781],{"id":171780},"_98-自定义异常","9.8 自定义异常",[27,171783,171785],{"className":29,"code":171784,"language":31,"meta":32,"style":32},"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",[34,171786,171787,171801,171805,171809,171813,171821,171831,171842,171852,171856,171860,171866,171883,171894],{"__ignoreMap":32},[37,171788,171789,171791,171794,171796,171799],{"class":39,"line":40},[37,171790,15035],{"class":54},[37,171792,171793],{"class":2320}," BalanceNotEnoughError",[37,171795,165],{"class":50},[37,171797,171798],{"class":61},"Exception",[37,171800,31125],{"class":50},[37,171802,171803],{"class":39,"line":47},[37,171804,149822],{"class":54},[37,171806,171807],{"class":39,"line":104},[37,171808,2757],{"emptyLinePlaceholder":454},[37,171810,171811],{"class":39,"line":113},[37,171812,2757],{"emptyLinePlaceholder":454},[37,171814,171815,171817,171819],{"class":39,"line":189},[37,171816,32285],{"class":54},[37,171818,150471],{"class":2320},[37,171820,163097],{"class":50},[37,171822,171823,171825,171827,171829],{"class":39,"line":195},[37,171824,3451],{"class":54},[37,171826,150427],{"class":50},[37,171828,1468],{"class":54},[37,171830,162874],{"class":50},[37,171832,171833,171835,171838,171840],{"class":39,"line":201},[37,171834,103717],{"class":54},[37,171836,171837],{"class":50}," BalanceNotEnoughError(",[37,171839,150522],{"class":185},[37,171841,280],{"class":50},[37,171843,171844,171846,171848,171850],{"class":39,"line":207},[37,171845,4440],{"class":54},[37,171847,163104],{"class":50},[37,171849,384],{"class":54},[37,171851,150460],{"class":50},[37,171853,171854],{"class":39,"line":213},[37,171855,2757],{"emptyLinePlaceholder":454},[37,171857,171858],{"class":39,"line":218},[37,171859,2757],{"emptyLinePlaceholder":454},[37,171861,171862,171864],{"class":39,"line":227},[37,171863,171167],{"class":54},[37,171865,4089],{"class":50},[37,171867,171868,171870,171872,171875,171877,171879,171881],{"class":39,"line":232},[37,171869,162775],{"class":50},[37,171871,55],{"class":54},[37,171873,171874],{"class":50}," withdraw(",[37,171876,154],{"class":61},[37,171878,12776],{"class":50},[37,171880,2087],{"class":61},[37,171882,280],{"class":50},[37,171884,171885,171887,171890,171892],{"class":39,"line":238},[37,171886,171179],{"class":54},[37,171888,171889],{"class":50}," BalanceNotEnoughError ",[37,171891,31722],{"class":54},[37,171893,171511],{"class":50},[37,171895,171896,171898],{"class":39,"line":244},[37,171897,31638],{"class":61},[37,171899,67335],{"class":50},[14,171901,171902],{},"入门阶段大多数情况使用内置异常即可。",[469,171904,171906],{"id":171905},"_99-traceback","9.9 traceback",[14,171908,171909],{},"调试时可以输出完整异常堆栈。",[27,171911,171913],{"className":29,"code":171912,"language":31,"meta":32,"style":32},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[34,171914,171915,171922,171926,171932,171942,171950],{"__ignoreMap":32},[37,171916,171917,171919],{"class":39,"line":40},[37,171918,30732],{"class":54},[37,171920,171921],{"class":50}," traceback\n",[37,171923,171924],{"class":39,"line":47},[37,171925,2757],{"emptyLinePlaceholder":454},[37,171927,171928,171930],{"class":39,"line":104},[37,171929,171167],{"class":54},[37,171931,4089],{"class":50},[37,171933,171934,171936,171938,171940],{"class":39,"line":113},[37,171935,2342],{"class":61},[37,171937,165],{"class":50},[37,171939,156165],{"class":185},[37,171941,280],{"class":50},[37,171943,171944,171946,171948],{"class":39,"line":189},[37,171945,171179],{"class":54},[37,171947,152511],{"class":61},[37,171949,4089],{"class":50},[37,171951,171952],{"class":39,"line":195},[37,171953,171954],{"class":50},"    traceback.print_exc()\n",[14,171956,171957],{},"日志系统中常把异常堆栈记录到文件。",[469,171959,171961],{"id":171960},"_910-什么是模块","9.10 什么是模块",[14,171963,171964,171965,126268],{},"模块就是一个 ",[34,171966,146637],{},[14,171968,171969,171970,24960],{},"例如创建 ",[34,171971,171972],{},"my_math.py",[27,171974,171976],{"className":29,"code":171975,"language":31,"meta":32,"style":32},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[34,171977,171978,171986,171996,172000,172004,172013],{"__ignoreMap":32},[37,171979,171980,171982,171984],{"class":39,"line":40},[37,171981,32285],{"class":54},[37,171983,5558],{"class":2320},[37,171985,151378],{"class":50},[37,171987,171988,171990,171992,171994],{"class":39,"line":47},[37,171989,4440],{"class":54},[37,171991,11210],{"class":50},[37,171993,993],{"class":54},[37,171995,151389],{"class":50},[37,171997,171998],{"class":39,"line":104},[37,171999,2757],{"emptyLinePlaceholder":454},[37,172001,172002],{"class":39,"line":113},[37,172003,2757],{"emptyLinePlaceholder":454},[37,172005,172006,172008,172011],{"class":39,"line":189},[37,172007,32285],{"class":54},[37,172009,172010],{"class":2320}," sub",[37,172012,151378],{"class":50},[37,172014,172015,172017,172019,172021],{"class":39,"line":195},[37,172016,4440],{"class":54},[37,172018,11210],{"class":50},[37,172020,384],{"class":54},[37,172022,151389],{"class":50},[14,172024,172025],{},"在另一个文件中导入：",[27,172027,172029],{"className":29,"code":172028,"language":31,"meta":32,"style":32},"import my_math\n\nprint(my_math.add(1, 2))\n",[34,172030,172031,172038,172042],{"__ignoreMap":32},[37,172032,172033,172035],{"class":39,"line":40},[37,172034,30732],{"class":54},[37,172036,172037],{"class":50}," my_math\n",[37,172039,172040],{"class":39,"line":47},[37,172041,2757],{"emptyLinePlaceholder":454},[37,172043,172044,172046,172049,172051,172053,172055],{"class":39,"line":104},[37,172045,30755],{"class":61},[37,172047,172048],{"class":50},"(my_math.add(",[37,172050,332],{"class":61},[37,172052,12776],{"class":50},[37,172054,602],{"class":61},[37,172056,175],{"class":50},[469,172058,172060],{"id":172059},"_911-import导入","9.11 import导入",[498,172062,172064],{"id":172063},"_9111-导入模块","9.11.1 导入模块",[27,172066,172068],{"className":29,"code":172067,"language":31,"meta":32,"style":32},"import random\n\nprint(random.randint(1, 10))\n",[34,172069,172070,172076,172080],{"__ignoreMap":32},[37,172071,172072,172074],{"class":39,"line":40},[37,172073,30732],{"class":54},[37,172075,45665],{"class":50},[37,172077,172078],{"class":39,"line":47},[37,172079,2757],{"emptyLinePlaceholder":454},[37,172081,172082,172084,172087,172089,172091,172093],{"class":39,"line":104},[37,172083,30755],{"class":61},[37,172085,172086],{"class":50},"(random.randint(",[37,172088,332],{"class":61},[37,172090,12776],{"class":50},[37,172092,98],{"class":61},[37,172094,175],{"class":50},[498,172096,172098],{"id":172097},"_9112-导入指定内容","9.11.2 导入指定内容",[27,172100,172102],{"className":29,"code":172101,"language":31,"meta":32,"style":32},"from random import randint\n\nprint(randint(1, 10))\n",[34,172103,172104,172115,172119],{"__ignoreMap":32},[37,172105,172106,172108,172110,172112],{"class":39,"line":40},[37,172107,31076],{"class":54},[37,172109,58132],{"class":50},[37,172111,30732],{"class":54},[37,172113,172114],{"class":50}," randint\n",[37,172116,172117],{"class":39,"line":47},[37,172118,2757],{"emptyLinePlaceholder":454},[37,172120,172121,172123,172126,172128,172130,172132],{"class":39,"line":104},[37,172122,30755],{"class":61},[37,172124,172125],{"class":50},"(randint(",[37,172127,332],{"class":61},[37,172129,12776],{"class":50},[37,172131,98],{"class":61},[37,172133,175],{"class":50},[498,172135,172137],{"id":172136},"_9113-起别名","9.11.3 起别名",[27,172139,172141],{"className":29,"code":172140,"language":31,"meta":32,"style":32},"import random as rd\n\nprint(rd.randint(1, 10))\n",[34,172142,172143,172154,172158],{"__ignoreMap":32},[37,172144,172145,172147,172149,172151],{"class":39,"line":40},[37,172146,30732],{"class":54},[37,172148,58132],{"class":50},[37,172150,31722],{"class":54},[37,172152,172153],{"class":50}," rd\n",[37,172155,172156],{"class":39,"line":47},[37,172157,2757],{"emptyLinePlaceholder":454},[37,172159,172160,172162,172165,172167,172169,172171],{"class":39,"line":104},[37,172161,30755],{"class":61},[37,172163,172164],{"class":50},"(rd.randint(",[37,172166,332],{"class":61},[37,172168,12776],{"class":50},[37,172170,98],{"class":61},[37,172172,175],{"class":50},[27,172174,172176],{"className":29,"code":172175,"language":31,"meta":32,"style":32},"from random import randint as rint\n\nprint(rint(1, 10))\n",[34,172177,172178,172194,172198],{"__ignoreMap":32},[37,172179,172180,172182,172184,172186,172189,172191],{"class":39,"line":40},[37,172181,31076],{"class":54},[37,172183,58132],{"class":50},[37,172185,30732],{"class":54},[37,172187,172188],{"class":50}," randint ",[37,172190,31722],{"class":54},[37,172192,172193],{"class":50}," rint\n",[37,172195,172196],{"class":39,"line":47},[37,172197,2757],{"emptyLinePlaceholder":454},[37,172199,172200,172202,172205,172207,172209,172211],{"class":39,"line":104},[37,172201,30755],{"class":61},[37,172203,172204],{"class":50},"(rint(",[37,172206,332],{"class":61},[37,172208,12776],{"class":50},[37,172210,98],{"class":61},[37,172212,175],{"class":50},[498,172214,172216],{"id":172215},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[27,172218,172220],{"className":29,"code":172219,"language":31,"meta":32,"style":32},"from random import *\n",[34,172221,172222],{"__ignoreMap":32},[37,172223,172224,172226,172228,172230],{"class":39,"line":40},[37,172225,31076],{"class":54},[37,172227,58132],{"class":50},[37,172229,30732],{"class":54},[37,172231,172232],{"class":54}," *\n",[14,172234,172235],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[469,172237,172239],{"id":172238},"_912-常用内置模块","9.12 常用内置模块",[498,172241,172243],{"id":172242},"_9121-random","9.12.1 random",[27,172245,172247],{"className":29,"code":172246,"language":31,"meta":32,"style":32},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[34,172248,172249,172255,172259,172273,172292],{"__ignoreMap":32},[37,172250,172251,172253],{"class":39,"line":40},[37,172252,30732],{"class":54},[37,172254,45665],{"class":50},[37,172256,172257],{"class":39,"line":47},[37,172258,2757],{"emptyLinePlaceholder":454},[37,172260,172261,172263,172265,172267,172269,172271],{"class":39,"line":104},[37,172262,30755],{"class":61},[37,172264,172086],{"class":50},[37,172266,332],{"class":61},[37,172268,12776],{"class":50},[37,172270,98],{"class":61},[37,172272,175],{"class":50},[37,172274,172275,172277,172280,172282,172284,172286,172288,172290],{"class":39,"line":113},[37,172276,30755],{"class":61},[37,172278,172279],{"class":50},"(random.choice([",[37,172281,150173],{"class":185},[37,172283,12776],{"class":50},[37,172285,151221],{"class":185},[37,172287,12776],{"class":50},[37,172289,160016],{"class":185},[37,172291,33481],{"class":50},[37,172293,172294,172296,172299,172301,172303,172305,172307,172309,172311,172313,172315,172317,172319,172321],{"class":39,"line":189},[37,172295,30755],{"class":61},[37,172297,172298],{"class":50},"(random.sample([",[37,172300,332],{"class":61},[37,172302,12776],{"class":50},[37,172304,602],{"class":61},[37,172306,12776],{"class":50},[37,172308,62],{"class":61},[37,172310,12776],{"class":50},[37,172312,168],{"class":61},[37,172314,12776],{"class":50},[37,172316,836],{"class":61},[37,172318,112487],{"class":50},[37,172320,602],{"class":61},[37,172322,175],{"class":50},[498,172324,172326],{"id":172325},"_9122-time","9.12.2 time",[27,172328,172330],{"className":29,"code":172329,"language":31,"meta":32,"style":32},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[34,172331,172332,172338,172342,172349,172357],{"__ignoreMap":32},[37,172333,172334,172336],{"class":39,"line":40},[37,172335,30732],{"class":54},[37,172337,32167],{"class":50},[37,172339,172340],{"class":39,"line":47},[37,172341,2757],{"emptyLinePlaceholder":454},[37,172343,172344,172346],{"class":39,"line":104},[37,172345,30755],{"class":61},[37,172347,172348],{"class":50},"(time.time())\n",[37,172350,172351,172353,172355],{"class":39,"line":113},[37,172352,95356],{"class":50},[37,172354,332],{"class":61},[37,172356,280],{"class":50},[37,172358,172359,172361,172363,172366],{"class":39,"line":189},[37,172360,30755],{"class":61},[37,172362,165],{"class":50},[37,172364,172365],{"class":185},"\"1秒后执行\"",[37,172367,280],{"class":50},[498,172369,172371],{"id":172370},"_9123-datetime","9.12.3 datetime",[27,172373,172375],{"className":29,"code":172374,"language":31,"meta":32,"style":32},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[34,172376,172377,172389,172393,172403,172410],{"__ignoreMap":32},[37,172378,172379,172381,172384,172386],{"class":39,"line":40},[37,172380,31076],{"class":54},[37,172382,172383],{"class":50}," datetime ",[37,172385,30732],{"class":54},[37,172387,172388],{"class":50}," datetime\n",[37,172390,172391],{"class":39,"line":47},[37,172392,2757],{"emptyLinePlaceholder":454},[37,172394,172395,172398,172400],{"class":39,"line":104},[37,172396,172397],{"class":50},"now ",[37,172399,55],{"class":54},[37,172401,172402],{"class":50}," datetime.now()\n",[37,172404,172405,172407],{"class":39,"line":113},[37,172406,30755],{"class":61},[37,172408,172409],{"class":50},"(now)\n",[37,172411,172412,172414,172417,172420,172422,172425],{"class":39,"line":189},[37,172413,30755],{"class":61},[37,172415,172416],{"class":50},"(now.strftime(",[37,172418,172419],{"class":185},"\"%Y-%m-",[37,172421,156976],{"class":61},[37,172423,172424],{"class":185}," %H:%M:%S\"",[37,172426,175],{"class":50},[498,172428,172430],{"id":172429},"_9124-os","9.12.4 os",[27,172432,172434],{"className":29,"code":172433,"language":31,"meta":32,"style":32},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[34,172435,172436,172442,172446,172453],{"__ignoreMap":32},[37,172437,172438,172440],{"class":39,"line":40},[37,172439,30732],{"class":54},[37,172441,45642],{"class":50},[37,172443,172444],{"class":39,"line":47},[37,172445,2757],{"emptyLinePlaceholder":454},[37,172447,172448,172450],{"class":39,"line":104},[37,172449,30755],{"class":61},[37,172451,172452],{"class":50},"(os.getcwd())\n",[37,172454,172455,172457,172460,172463],{"class":39,"line":113},[37,172456,30755],{"class":61},[37,172458,172459],{"class":50},"(os.listdir(",[37,172461,172462],{"class":185},"\".\"",[37,172464,175],{"class":50},[498,172466,172468],{"id":172467},"_9125-sys","9.12.5 sys",[27,172470,172472],{"className":29,"code":172471,"language":31,"meta":32,"style":32},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[34,172473,172474,172481,172485,172492],{"__ignoreMap":32},[37,172475,172476,172478],{"class":39,"line":40},[37,172477,30732],{"class":54},[37,172479,172480],{"class":50}," sys\n",[37,172482,172483],{"class":39,"line":47},[37,172484,2757],{"emptyLinePlaceholder":454},[37,172486,172487,172489],{"class":39,"line":104},[37,172488,30755],{"class":61},[37,172490,172491],{"class":50},"(sys.version)\n",[37,172493,172494,172496],{"class":39,"line":113},[37,172495,30755],{"class":61},[37,172497,172498],{"class":50},"(sys.path)\n",[469,172500,172502,172503,172505,172506,772],{"id":172501},"_913-if-name-main","9.13 if ",[673,172504,80145],{}," == \"",[673,172507,102343],{},[14,172509,172510,172511,172514],{},"模块被直接运行和被导入时，",[34,172512,172513],{},"__name__"," 的值不同。",[14,172516,172517,172518,24960],{},"创建 ",[34,172519,172520],{},"my_module.py",[27,172522,172524],{"className":29,"code":172523,"language":31,"meta":32,"style":32},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[34,172525,172526,172534,172544,172548,172552,172564],{"__ignoreMap":32},[37,172527,172528,172530,172532],{"class":39,"line":40},[37,172529,32285],{"class":54},[37,172531,5558],{"class":2320},[37,172533,151378],{"class":50},[37,172535,172536,172538,172540,172542],{"class":39,"line":47},[37,172537,4440],{"class":54},[37,172539,11210],{"class":50},[37,172541,993],{"class":54},[37,172543,151389],{"class":50},[37,172545,172546],{"class":39,"line":104},[37,172547,2757],{"emptyLinePlaceholder":454},[37,172549,172550],{"class":39,"line":113},[37,172551,2757],{"emptyLinePlaceholder":454},[37,172553,172554,172556,172558,172560,172562],{"class":39,"line":189},[37,172555,1907],{"class":54},[37,172557,31559],{"class":61},[37,172559,101844],{"class":54},[37,172561,101847],{"class":185},[37,172563,4089],{"class":50},[37,172565,172566,172568,172570,172572,172574,172576],{"class":39,"line":195},[37,172567,31638],{"class":61},[37,172569,166885],{"class":50},[37,172571,332],{"class":61},[37,172573,12776],{"class":50},[37,172575,602],{"class":61},[37,172577,175],{"class":50},[14,172579,172580],{},"作用：",[481,172582,172583,172586],{},[484,172584,172585],{},"直接运行该文件时，执行测试代码。",[484,172587,172588],{},"被其他文件导入时，不执行测试代码。",[14,172590,172591],{},"这是写模块时很常用的习惯。",[469,172593,172595],{"id":172594},"_914-包","9.14 包",[14,172597,172598,172599,172602],{},"包是包含 ",[34,172600,172601],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172604,172605],{},"目录结构：",[27,172607,172610],{"className":172608,"code":172609,"language":5536,"meta":32},[5534],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[34,172611,172609],{"__ignoreMap":32},[14,172613,172614],{},"导入：",[27,172616,172618],{"className":29,"code":172617,"language":31,"meta":32,"style":32},"from utils.file_utils import read_file\n",[34,172619,172620],{"__ignoreMap":32},[37,172621,172622,172624,172627,172629],{"class":39,"line":40},[37,172623,31076],{"class":54},[37,172625,172626],{"class":50}," utils.file_utils ",[37,172628,30732],{"class":54},[37,172630,172631],{"class":50}," read_file\n",[14,172633,172634,172636],{},[34,172635,172601],{}," 可以为空，也可以写包初始化逻辑。",[469,172638,172640],{"id":172639},"_915-第三方包","9.15 第三方包",[14,172642,172643,172644,172646],{},"第三方包通过 ",[34,172645,24172],{}," 安装。",[27,172648,172650],{"className":24163,"code":172649,"language":24165,"meta":32,"style":32},"pip install requests\n",[34,172651,172652],{"__ignoreMap":32},[37,172653,172654,172656,172658],{"class":39,"line":40},[37,172655,24172],{"class":2320},[37,172657,24175],{"class":185},[37,172659,146383],{"class":185},[14,172661,172662],{},"使用：",[27,172664,172666],{"className":29,"code":172665,"language":31,"meta":32,"style":32},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[34,172667,172668,172674,172678,172693],{"__ignoreMap":32},[37,172669,172670,172672],{"class":39,"line":40},[37,172671,30732],{"class":54},[37,172673,146383],{"class":50},[37,172675,172676],{"class":39,"line":47},[37,172677,2757],{"emptyLinePlaceholder":454},[37,172679,172680,172683,172685,172688,172691],{"class":39,"line":104},[37,172681,172682],{"class":50},"response ",[37,172684,55],{"class":54},[37,172686,172687],{"class":50}," requests.get(",[37,172689,172690],{"class":185},"\"https:\u002F\u002Fwww.example.com\"",[37,172692,280],{"class":50},[37,172694,172695,172697],{"class":39,"line":113},[37,172696,30755],{"class":61},[37,172698,172699],{"class":50},"(response.status_code)\n",[14,172701,172702],{},"查看已安装包：",[27,172704,172706],{"className":24163,"code":172705,"language":24165,"meta":32,"style":32},"pip list\n",[34,172707,172708],{"__ignoreMap":32},[37,172709,172710,172712],{"class":39,"line":40},[37,172711,24172],{"class":2320},[37,172713,119240],{"class":185},[14,172715,172716],{},"导出项目依赖：",[27,172718,172719],{"className":24163,"code":146578,"language":24165,"meta":32,"style":32},[34,172720,172721],{"__ignoreMap":32},[37,172722,172723,172725,172727,172729],{"class":39,"line":40},[37,172724,24172],{"class":2320},[37,172726,146587],{"class":185},[37,172728,26564],{"class":54},[37,172730,146592],{"class":185},[14,172732,172733],{},"安装项目依赖：",[27,172735,172736],{"className":24163,"code":146598,"language":24165,"meta":32,"style":32},[34,172737,172738],{"__ignoreMap":32},[37,172739,172740,172742,172744,172746],{"class":39,"line":40},[37,172741,24172],{"class":2320},[37,172743,24175],{"class":185},[37,172745,119924],{"class":61},[37,172747,146592],{"class":185},[469,172749,172751],{"id":172750},"_916-模块搜索路径","9.16 模块搜索路径",[14,172753,172754,172755,172758],{},"Python 导入模块时会在 ",[34,172756,172757],{},"sys.path"," 中查找。",[27,172760,172762],{"className":29,"code":172761,"language":31,"meta":32,"style":32},"import sys\n\nfor path in sys.path:\n    print(path)\n",[34,172763,172764,172770,172774,172786],{"__ignoreMap":32},[37,172765,172766,172768],{"class":39,"line":40},[37,172767,30732],{"class":54},[37,172769,172480],{"class":50},[37,172771,172772],{"class":39,"line":47},[37,172773,2757],{"emptyLinePlaceholder":454},[37,172775,172776,172778,172781,172783],{"class":39,"line":104},[37,172777,3375],{"class":54},[37,172779,172780],{"class":50}," path ",[37,172782,26385],{"class":54},[37,172784,172785],{"class":50}," sys.path:\n",[37,172787,172788,172790],{"class":39,"line":113},[37,172789,31638],{"class":61},[37,172791,169514],{"class":50},[14,172793,172794],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172796,157908],{},[27,172798,172801],{"className":172799,"code":172800,"language":5536,"meta":32},[5534],"random.py\njson.py\ntime.py\n",[34,172802,172800],{"__ignoreMap":32},[14,172804,172805],{},"这些文件名可能导致导入异常。",[469,172807,172809],{"id":172808},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172811,172605],{},[27,172813,172816],{"className":172814,"code":172815,"language":5536,"meta":32},[5534],"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",[34,172817,172815],{"__ignoreMap":32},[14,172819,172820,24960],{},[34,172821,172822],{},"utils\u002Ffile_utils.py",[27,172824,172826],{"className":29,"code":172825,"language":31,"meta":32,"style":32},"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",[34,172827,172828,172834,172844,172848,172852,172862,172872,172880,172886,172890,172917,172927,172931,172935,172945,172971],{"__ignoreMap":32},[37,172829,172830,172832],{"class":39,"line":40},[37,172831,30732],{"class":54},[37,172833,147376],{"class":50},[37,172835,172836,172838,172840,172842],{"class":39,"line":47},[37,172837,31076],{"class":54},[37,172839,108596],{"class":50},[37,172841,30732],{"class":54},[37,172843,108601],{"class":50},[37,172845,172846],{"class":39,"line":104},[37,172847,2757],{"emptyLinePlaceholder":454},[37,172849,172850],{"class":39,"line":113},[37,172851,2757],{"emptyLinePlaceholder":454},[37,172853,172854,172856,172859],{"class":39,"line":189},[37,172855,32285],{"class":54},[37,172857,172858],{"class":2320}," read_json",[37,172860,172861],{"class":50},"(path):\n",[37,172863,172864,172867,172869],{"class":39,"line":195},[37,172865,172866],{"class":50},"    path ",[37,172868,55],{"class":54},[37,172870,172871],{"class":50}," Path(path)\n",[37,172873,172874,172876,172878],{"class":39,"line":201},[37,172875,3451],{"class":54},[37,172877,39267],{"class":54},[37,172879,169595],{"class":50},[37,172881,172882,172884],{"class":39,"line":207},[37,172883,15093],{"class":54},[37,172885,52174],{"class":50},[37,172887,172888],{"class":39,"line":213},[37,172889,2757],{"emptyLinePlaceholder":454},[37,172891,172892,172894,172896,172899,172901,172903,172905,172907,172909,172911,172913,172915],{"class":39,"line":218},[37,172893,34515],{"class":54},[37,172895,147076],{"class":61},[37,172897,172898],{"class":50},"(path, ",[37,172900,147086],{"class":185},[37,172902,12776],{"class":50},[37,172904,147091],{"class":159},[37,172906,55],{"class":54},[37,172908,147096],{"class":185},[37,172910,14055],{"class":50},[37,172912,31722],{"class":54},[37,172914,148438],{"class":159},[37,172916,4089],{"class":50},[37,172918,172919,172921,172923,172925],{"class":39,"line":227},[37,172920,15093],{"class":54},[37,172922,148449],{"class":50},[37,172924,45691],{"class":159},[37,172926,280],{"class":50},[37,172928,172929],{"class":39,"line":232},[37,172930,2757],{"emptyLinePlaceholder":454},[37,172932,172933],{"class":39,"line":238},[37,172934,2757],{"emptyLinePlaceholder":454},[37,172936,172937,172939,172942],{"class":39,"line":244},[37,172938,32285],{"class":54},[37,172940,172941],{"class":2320}," write_json",[37,172943,172944],{"class":50},"(path, data):\n",[37,172946,172947,172949,172951,172953,172955,172957,172959,172961,172963,172965,172967,172969],{"class":39,"line":250},[37,172948,34515],{"class":54},[37,172950,147076],{"class":61},[37,172952,172898],{"class":50},[37,172954,152261],{"class":185},[37,172956,12776],{"class":50},[37,172958,147091],{"class":159},[37,172960,55],{"class":54},[37,172962,147096],{"class":185},[37,172964,14055],{"class":50},[37,172966,31722],{"class":54},[37,172968,148438],{"class":159},[37,172970,4089],{"class":50},[37,172972,172973,172976,172978,172980,172982,172984,172986,172988,172990,172992,172994],{"class":39,"line":256},[37,172974,172975],{"class":50},"        json.dump(data, ",[37,172977,45691],{"class":159},[37,172979,12776],{"class":50},[37,172981,147422],{"class":159},[37,172983,55],{"class":54},[37,172985,34324],{"class":61},[37,172987,12776],{"class":50},[37,172989,152297],{"class":159},[37,172991,55],{"class":54},[37,172993,602],{"class":61},[37,172995,280],{"class":50},[14,172997,172998,24960],{},[34,172999,154892],{},[27,173001,173003],{"className":29,"code":173002,"language":31,"meta":32,"style":32},"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",[34,173004,173005,173016,173020,173033,173053],{"__ignoreMap":32},[37,173006,173007,173009,173011,173013],{"class":39,"line":40},[37,173008,31076],{"class":54},[37,173010,172626],{"class":50},[37,173012,30732],{"class":54},[37,173014,173015],{"class":50}," read_json, write_json\n",[37,173017,173018],{"class":39,"line":47},[37,173019,2757],{"emptyLinePlaceholder":454},[37,173021,173022,173024,173026,173029,173031],{"class":39,"line":104},[37,173023,160001],{"class":50},[37,173025,55],{"class":54},[37,173027,173028],{"class":50}," read_json(",[37,173030,152116],{"class":185},[37,173032,280],{"class":50},[37,173034,173035,173037,173039,173041,173043,173045,173047,173049,173051],{"class":39,"line":113},[37,173036,170819],{"class":50},[37,173038,63015],{"class":185},[37,173040,51773],{"class":50},[37,173042,150173],{"class":185},[37,173044,12776],{"class":50},[37,173046,151757],{"class":185},[37,173048,51773],{"class":50},[37,173050,1497],{"class":61},[37,173052,165437],{"class":50},[37,173054,173055,173058,173060],{"class":39,"line":189},[37,173056,173057],{"class":50},"write_json(",[37,173059,152116],{"class":185},[37,173061,173062],{"class":50},", students)\n",[469,173064,173066],{"id":173065},"_918-易错点","9.18 易错点",[481,173068,173069,173072,173077,173082,173085,173088],{},[484,173070,173071],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[484,173073,173074,173075,28727],{},"能指定异常类型就不要裸写 ",[34,173076,171179],{},[484,173078,173079,173081],{},[34,173080,171554],{}," 无论是否出错都会执行。",[484,173083,173084],{},"模块文件名不要和标准库重名。",[484,173086,173087],{},"导入自己写的模块时，要注意运行目录。",[484,173089,173090],{},"第三方包要安装到当前解释器或虚拟环境中。",[469,173092,173094],{"id":173093},"_919-本章练习","9.19 本章练习",[481,173096,173097,173100,173103,173109,173116],{},[484,173098,173099],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[484,173101,173102],{},"写函数读取文件，如果文件不存在则返回空字符串。",[484,173104,172517,173105,173108],{},[34,173106,173107],{},"math_utils.py","，实现加减乘除函数并导入使用。",[484,173110,173111,173112,173115],{},"创建一个 ",[34,173113,173114],{},"utils"," 包，把 JSON 读写函数放进去。",[484,173117,173118],{},"写一个程序，捕获除零异常和输入格式异常。",[446,173120,173121],{},"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":32,"searchDepth":47,"depth":47,"links":173123},[173124,173125,173126,173127,173128,173129,173130,173131,173132,173133,173134,173140,173147,173149,173150,173151,173152,173153,173154],{"id":170976,"depth":47,"text":170977},{"id":171104,"depth":47,"text":171105},{"id":171153,"depth":47,"text":171154},{"id":171302,"depth":47,"text":171303},{"id":171474,"depth":47,"text":171475},{"id":171543,"depth":47,"text":171544},{"id":171654,"depth":47,"text":171655},{"id":171780,"depth":47,"text":171781},{"id":171905,"depth":47,"text":171906},{"id":171960,"depth":47,"text":171961},{"id":172059,"depth":47,"text":172060,"children":173135},[173136,173137,173138,173139],{"id":172063,"depth":104,"text":172064},{"id":172097,"depth":104,"text":172098},{"id":172136,"depth":104,"text":172137},{"id":172215,"depth":104,"text":172216},{"id":172238,"depth":47,"text":172239,"children":173141},[173142,173143,173144,173145,173146],{"id":172242,"depth":104,"text":172243},{"id":172325,"depth":104,"text":172326},{"id":172370,"depth":104,"text":172371},{"id":172429,"depth":104,"text":172430},{"id":172467,"depth":104,"text":172468},{"id":172501,"depth":47,"text":173148},"9.13 if name == \"main\"",{"id":172594,"depth":47,"text":172595},{"id":172639,"depth":47,"text":172640},{"id":172750,"depth":47,"text":172751},{"id":172808,"depth":47,"text":172809},{"id":173065,"depth":47,"text":173066},{"id":173093,"depth":47,"text":173094},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170968,"description":451},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173161,"title":173162,"body":173163,"description":173326,"extension":452,"meta":173327,"navigation":454,"path":173328,"seo":173329,"stem":173330,"__hash__":173331},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173164,"toc":173321},[173165,173168,173171,173174,173185,173187,173261,173264,173267,173270,173273,173276,173279,173282,173285,173288,173291],[10,173166,173162],{"id":173167},"python教程",[14,173169,173170],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,173172,173173],{},"建议学习环境：",[481,173175,173176,173179,173182],{},[484,173177,173178],{},"Python 版本：Python 3.10 及以上。",[484,173180,173181],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[484,173183,173184],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[469,173186,117363],{"id":117363},[481,173188,173189,173195,173201,173207,173213,173219,173225,173231,173237,173243,173249,173255],{},[484,173190,173191],{},[51,173192,173194],{"href":173193},".\u002Fch1-Python","Python环境与第一个程序",[484,173196,173197],{},[51,173198,173200],{"href":173199},".\u002Fch2","基础语法、变量与字符串",[484,173202,173203],{},[51,173204,173206],{"href":173205},".\u002Fch3","判断语句",[484,173208,173209],{},[51,173210,173212],{"href":173211},".\u002Fch4","循环语句",[484,173214,173215],{},[51,173216,173218],{"href":173217},".\u002Fch5","函数基础",[484,173220,173221],{},[51,173222,173224],{"href":173223},".\u002Fch6","数据容器",[484,173226,173227],{},[51,173228,173230],{"href":173229},".\u002Fch7","函数进阶",[484,173232,173233],{},[51,173234,173236],{"href":173235},".\u002Fch8","文件操作",[484,173238,173239],{},[51,173240,173242],{"href":173241},".\u002Fch9","异常、模块与包",[484,173244,173245],{},[51,173246,173248],{"href":173247},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[484,173250,173251],{},[51,173252,173254],{"href":173253},".\u002Fch11","面向对象基础",[484,173256,173257],{},[51,173258,173260],{"href":173259},".\u002Fch12","综合案例与复习路线",[469,173262,173263],{"id":173263},"学习路线",[14,173265,173266],{},"第一阶段：能运行程序。",[14,173268,173269],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173271,173272],{},"第二阶段：能组织数据。",[14,173274,173275],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173277,173278],{},"第三阶段：能封装逻辑。",[14,173280,173281],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173283,173284],{},"第四阶段：能做小项目。",[14,173286,173287],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[469,173289,173290],{"id":173290},"参考资料",[481,173292,173293,173300,173307,173314],{},[484,173294,173295,173296],{},"黑马程序员 Python 入门教程推荐：",[51,173297,173298],{"href":173298,"rel":173299},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24206],[484,173301,173302,173303],{},"Python 官方中文教程：",[51,173304,173305],{"href":173305,"rel":173306},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24206],[484,173308,173309,173310],{},"Python 标准库文档：",[51,173311,173312],{"href":173312,"rel":173313},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24206],[484,173315,173316,173317],{},"pyecharts 文档：",[51,173318,173319],{"href":173319,"rel":173320},"https:\u002F\u002Fpyecharts.org\u002F",[24206],{"title":32,"searchDepth":47,"depth":47,"links":173322},[173323,173324,173325],{"id":117363,"depth":47,"text":117363},{"id":173263,"depth":47,"text":173263},{"id":173290,"depth":47,"text":173290},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23719},"\u002Fwiki\u002F2024-10-10-python",{"title":173162,"description":173326},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331454947]